some WLURI related fixes
authorRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 7 Dec 2011 15:38:01 +0000 (16:38 +0100)
committerRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 7 Dec 2011 15:38:01 +0000 (16:38 +0100)
librarian/__init__.py
librarian/dcparser.py

index 52234fe..9fe0c52 100644 (file)
@@ -74,13 +74,16 @@ class WLURI(object):
 
     example = 'http://wolnelektury.pl/katalog/lektura/template/'
     _re_wl_uri = re.compile('http://wolnelektury.pl/katalog/lektura/'
-            '(?P<slug>[-a-z]+)(/(?P<lang>[a-z]{3})/?)?')
+            '(?P<slug>[-a-z0-9]+)(/(?P<lang>[a-z]{3}))?/?$')
 
     def __init__(self, uri=None):
         if uri is not None:
+            uri = unicode(uri)
             self.uri = uri
             match = self._re_wl_uri.match(uri)
-            assert match
+            if not match:
+                raise ValueError('Supplied URI (%s) does not match '
+                        'the WL document URI template.' % uri)
             self.slug = match.group('slug')
             self.language = match.group('lang') or self.DEFAULT_LANGUAGE
 
@@ -95,19 +98,18 @@ class WLURI(object):
 
         """
         if lang is None:
-            lang = self.DEFAULT_LANGUAGE
+            lang = cls.DEFAULT_LANGUAGE
         uri = 'http://wolnelektury.pl/katalog/lektura/%s/' % slug
         if lang is not None and lang != cls.DEFAULT_LANGUAGE:
             uri += lang + '/'
-        instance = cls()
-        instance.slug = slug
-        instance.language = lang
-        instance.uri = uri
-        return instance
+        return cls(uri)
 
     def __unicode__(self):
         return self.uri
 
+    def __str__(self):
+        return self.uri
+
     def __eq__(self, other):
         return self.slug, self.language == other.slug, other.language
 
index ae8466c..992029e 100644 (file)
@@ -142,7 +142,7 @@ class BookInfo(object):
         Field( DCNS('source'), 'source_name', required=False),
         Field( DCNS('source.URL'), 'source_url', required=False),
         Field( DCNS('identifier.url'), 'url', WLURI),
-        Field( DCNS('relation.hasPart'), 'parts', multiple=True, required=False),
+        Field( DCNS('relation.hasPart'), 'parts', WLURI, multiple=True, required=False),
         Field( DCNS('rights.license'), 'license', required=False),
         Field( DCNS('rights'), 'license_description'),
         Field( DCNS('language'), 'language'),