From edbda465ca1fceabe219d5caea95d513d61c6976 Mon Sep 17 00:00:00 2001
From: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Date: Wed, 7 Dec 2011 16:38:01 +0100
Subject: [PATCH] some WLURI related fixes

---
 librarian/__init__.py | 18 ++++++++++--------
 librarian/dcparser.py |  2 +-
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/librarian/__init__.py b/librarian/__init__.py
index 52234fe..9fe0c52 100644
--- a/librarian/__init__.py
+++ b/librarian/__init__.py
@@ -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
 
diff --git a/librarian/dcparser.py b/librarian/dcparser.py
index ae8466c..992029e 100644
--- a/librarian/dcparser.py
+++ b/librarian/dcparser.py
@@ -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'),
-- 
2.20.1