- def __init__(self, uri):
- self.uri = uri
- match = self._re_wl_uri.match(uri)
- assert match
- self.slug = match.group('slug')
- self.language = match.group('lang')
+ def __init__(self, uri=None):
+ if uri is not None:
+ self.uri = uri
+ match = self._re_wl_uri.match(uri)
+ assert match
+ self.slug = match.group('slug')
+ self.language = match.group('lang') or self.DEFAULT_LANGUAGE
+
+ @classmethod
+ def from_slug_and_lang(cls, slug, lang):
+ """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/'
+ >>> WLURI.from_slug_and_lang('a-slug', 'deu').uri
+ 'http://wolnelektury.pl/katalog/lektura/a-slug/deu/'
+
+ """
+ if lang is None:
+ lang = self.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
+
+ def __unicode__(self):
+ return self.uri
+
+ def __eq__(self, other):
+ return self.slug, self.language == other.slug, other.language
+
+ def filename_stem(self):
+ stem = self.slug
+ if self.language != self.DEFAULT_LANGUAGE:
+ stem += '_' + self.language
+ return stem
+
+ def validate_language(self, language):
+ if language != self.language:
+ raise ValidationError("Incorrect language definition in URI")