-import lxml.etree as etree
-import dcparser
-
-DEFAULT_BOOKINFO = dcparser.BookInfo(
- { RDFNS('about'): u'http://wiki.wolnepodreczniki.pl/Lektury:Template'},\
- { DCNS('creator'): [u'Some, Author'],
- DCNS('title'): [u'Some Title'],
- DCNS('subject.period'): [u'Unknown'],
- DCNS('subject.type'): [u'Unknown'],
- DCNS('subject.genre'): [u'Unknown'],
- DCNS('date'): ['1970-01-01'],
- # DCNS('date'): [creation_date],
- DCNS('publisher'): [u"Fundacja Nowoczesna Polska"],
- DCNS('description'):
- [u"""Publikacja zrealizowana w ramach projektu
- Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa
- wykonana przez Bibliotekę Narodową z egzemplarza
- pochodzącego ze zbiorów BN."""],
- DCNS('identifier.url'):
- [u"http://wolnelektury.pl/katalog/lektura/template"],
- DCNS('rights'):
- [u"Domena publiczna - zm. [OPIS STANU PRAWNEGO TEKSTU]"] })
+
+class WLURI(object):
+ """Represents a WL URI. Extracts slug from it."""
+ slug = None
+
+ example = 'http://edukacjamedialna.edu.pl/lekcje/template'
+ _re_wl_uri = re.compile(
+ r'http://(www\.)?edukacjamedialna.edu.pl/lekcje/'
+ '(?P<slug>[-a-z0-9]+)/?$')
+
+ def __init__(self, uri):
+ uri = unicode(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.
+
+ >>> WLURI.from_slug('a-slug').uri
+ u'http://edukacjamedialna.edu.pl/lekcje/a-slug/'
+
+ """
+ uri = 'http://edukacjamedialna.edu.pl/lekcje/%s/' % slug
+ return cls(uri)
+
+ def __unicode__(self):
+ return self.uri
+
+ def __str__(self):
+ return self.uri
+
+ def canonical(self):
+ return type(self).from_slug(self.slug)
+
+ def __eq__(self, other):
+ return self.slug == other.slug
+
+
+class DocProvider(object):
+ """Base class for a repository of XML files.
+
+ Used for generating joined files, like EPUBs.
+ """
+
+ def by_slug(self, slug):
+ """Should return an IOFile object with a WL document XML."""
+ raise NotImplementedError
+
+ def by_uri(self, uri, wluri=WLURI):
+ """Should return an IOFile object with a WL document XML."""
+ wluri = wluri(uri)
+ return self.by_slug(wluri.slug)
+
+
+class DirDocProvider(DocProvider):
+ """ Serve docs from a directory of files in form <slug>.xml """
+
+ def __init__(self, dir_):
+ self.dir = dir_
+ self.files = {}
+
+ def by_slug(self, slug):
+ fname = slug + '.xml'
+ return IOFile.from_filename(os.path.join(self.dir, fname))
+
+
+def get_default_bookinfo():
+ import dcparser
+ dcparser.BookInfo(
+ {RDFNS('about'): u'http://wiki.wolnepodreczniki.pl/Lektury:Template'},
+ {
+ DCNS('creator.expert'): [u'Some, Author'],
+ DCNS('creator.scenario'): [u'Some, Author'],
+ DCNS('creator.textbook'): [u'Some, Author'],
+ DCNS('title'): [u'Some Title'],
+ DCNS('subject.period'): [u'Unknown'],
+ DCNS('subject.type'): [u'Unknown'],
+ DCNS('subject.genre'): [u'Unknown'],
+ DCNS('date'): ['1970-01-01'],
+ DCNS('language'): [u'pol'],
+ # DCNS('date'): [creation_date],
+ DCNS('publisher'): [u"Fundacja Nowoczesna Polska"],
+ DCNS('description'):
+ [u"""Publikacja zrealizowana w ramach projektu
+ Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa
+ wykonana przez Bibliotekę Narodową z egzemplarza
+ pochodzącego ze zbiorów BN."""],
+ DCNS('identifier.url'): [WLURI.example],
+ DCNS('rights'):
+ [u"Domena publiczna - zm. [OPIS STANU PRAWNEGO TEKSTU]"],
+ })
+
+DEFAULT_BOOKINFO = get_default_bookinfo()
+