c31d391279cb9eafa9fed99176dc2025936ce4ba
[librarian.git] / src / librarian / meta / types / wluri.py
1 from .base import MetaValue
2
3
4 class WLURI(MetaValue):
5     """Represents a WL URI. Extracts slug from it."""
6     slug = None
7
8     example = 'http://wolnelektury.pl/katalog/lektura/template/'
9     _re_wl_uri = re.compile(
10         r'http://(www\.)?wolnelektury.pl/katalog/lektur[ay]/'
11         '(?P<slug>[-a-z0-9]+)/?$'
12     )
13
14     def __init__(self, slug, uri=None):
15         """Contructs an URI from slug.
16
17         >>> print(WLURI.from_slug('a-slug').uri)
18         http://wolnelektury.pl/katalog/lektura/a-slug/
19
20         """
21         if uri is None:
22             uri = 'http://wolnelektury.pl/katalog/lektura/%s/' % slug
23         self.uri = uri
24         return super().__init__(slug)
25         
26     
27     @classmethod
28     def from_text(cls, uri):
29         slug = uri.rstrip('/').rsplit('/', 1)[-1]
30         return cls(slug, uri)
31
32     def validate(self):
33         match = self._re_wl_uri.match(self.uri)
34         if not match:
35             raise ValidationError('Invalid URI (%s). Should match: %s' % (
36                         self.uri, self._re_wl_uri.pattern))
37         return cls(uri)
38
39     def __str__(self):
40         return self.uri
41
42     def __eq__(self, other):
43         return self.slug == other.slug