-@six.python_2_unicode_compatible
-class WLURI(object):
- """Represents a WL URI. Extracts slug from it."""
- slug = None
-
- example = 'http://wolnelektury.pl/katalog/lektura/template/'
- _re_wl_uri = re.compile(
- r'http://(www\.)?wolnelektury.pl/katalog/lektur[ay]/'
- '(?P<slug>[-a-z0-9]+)/?$'
- )
-
- def __init__(self, uri):
- uri = six.text_type(uri)
- self.uri = uri
- self.slug = uri.rstrip('/').rsplit('/', 1)[-1]
-
- @classmethod
- def strict(cls, uri):
- match = cls._re_wl_uri.match(uri)
- if not match:
- raise ValidationError(u'Invalid URI (%s). Should match: %s' % (
- uri, cls._re_wl_uri.pattern))
- return cls(uri)
-
- @classmethod
- def from_slug(cls, slug):
- """Contructs an URI from slug.
-
- >>> print(WLURI.from_slug('a-slug').uri)
- http://wolnelektury.pl/katalog/lektura/a-slug/
-
- """
- uri = 'http://wolnelektury.pl/katalog/lektura/%s/' % slug
- return cls(uri)
-
- def __str__(self):
- return self.uri
-
- def __eq__(self, other):
- return self.slug == other.slug