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
"""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
- 'http://wolnelektury.pl/katalog/lektura/a-slug/deu/'
+ u'http://wolnelektury.pl/katalog/lektura/a-slug/deu/'
"""
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
"""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."""
- wluri = WLURI(uri)
+ wluri = wluri(uri)
return self.by_slug_and_lang(wluri.slug, wluri.language)
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'