X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/918a554570309fdddb8158b963fef3b3ae3c2c2b..e19936f58921288b8eea3b100960afd9863dea2e:/librarian/__init__.py?ds=sidebyside diff --git a/librarian/__init__.py b/librarian/__init__.py index 52234fe..feb9974 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[-a-z]+)(/(?P[a-z]{3})/?)?') + '(?P[-a-z0-9]+)(/(?P[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 @@ -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 - '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 @@ -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) - 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) @@ -148,7 +150,6 @@ class DirDocProvider(DocProvider): 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'