python 2.5 does not support tuple.index()
[librarian.git] / librarian / __init__.py
index 52234fe..feb9974 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/'
 
     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:
 
     def __init__(self, uri=None):
         if uri is not None:
+            uri = unicode(uri)
             self.uri = uri
             match = self._re_wl_uri.match(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
 
             self.slug = match.group('slug')
             self.language = match.group('lang') or self.DEFAULT_LANGUAGE
 
@@ -89,25 +92,24 @@ class WLURI(object):
         """Contructs an URI from slug and language code.
 
         >>> WLURI.from_slug_and_lang('a-slug', WLURI.DEFAULT_LANGUAGE).uri
         """Contructs an URI from slug and language code.
 
         >>> WLURI.from_slug_and_lang('a-slug', WLURI.DEFAULT_LANGUAGE).uri
-        'http://wolnelektury.pl/katalog/lektura/a-slug/'
+        u'http://wolnelektury.pl/katalog/lektura/a-slug/'
         >>> WLURI.from_slug_and_lang('a-slug', 'deu').uri
         >>> WLURI.from_slug_and_lang('a-slug', 'deu').uri
-        'http://wolnelektury.pl/katalog/lektura/a-slug/deu/'
+        u'http://wolnelektury.pl/katalog/lektura/a-slug/deu/'
 
         """
         if lang is None:
 
         """
         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 + '/'
         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 __unicode__(self):
         return self.uri
 
+    def __str__(self):
+        return self.uri
+
     def __eq__(self, other):
         return self.slug, self.language == other.slug, other.language
 
     def __eq__(self, other):
         return self.slug, self.language == other.slug, other.language
 
@@ -136,9 +138,9 @@ class DocProvider(object):
         """Should return a file-like object with a WL document XML."""
         return self.by_slug_and_lang(slug)
 
         """Should return a file-like object with a WL document XML."""
         return self.by_slug_and_lang(slug)
 
-    def by_uri(self, uri):
+    def by_uri(self, uri, wluri=WLURI):
         """Should return a file-like object with a WL document XML."""
         """Should return a file-like object with a WL document XML."""
-        wluri = WLURI(uri)
+        wluri = wluri(uri)
         return self.by_slug_and_lang(wluri.slug, wluri.language)
 
 
         return self.by_slug_and_lang(wluri.slug, wluri.language)
 
 
@@ -148,7 +150,6 @@ class DirDocProvider(DocProvider):
     def __init__(self, dir_):
         self.dir = dir_
         self.files = {}
     def __init__(self, dir_):
         self.dir = dir_
         self.files = {}
-        return super(DirDocProvider, self).__init__()
 
     def by_slug_and_lang(self, slug, lang=None):
         fname = WLURI.from_slug_and_lang(slug, lang).filename_stem() + '.xml'
 
     def by_slug_and_lang(self, slug, lang=None):
         fname = WLURI.from_slug_and_lang(slug, lang).filename_stem() + '.xml'