2 # -*- coding: utf-8 -*-
7 from shutil import rmtree,copytree
9 from lxml.builder import ElementMaker
10 from treecutter.image import Image
12 from treecutter import constants as const
14 class PhotoAlbum(object):
15 def __init__(self, uri):
16 self.uri = unicode(uri)
17 self.albumid = abs(hash(self.uri))
22 for root, subdir, files in os.walk(d):
24 img = Image(os.path.join(root,f))
25 if not img.generated():
26 self.filelist.append(img)
29 db = ElementMaker(namespace=const.DB_NS, nsmap=const.NSMAP)
30 sl = db.itemizedlist(**{const.XML+"id": "slider"})
32 for img in self.filelist:
34 caption = db.caption()
35 for p in img.caption().split('\n\n'):
36 caption.append(db.para(p))
37 link = db.para(db.link(img.infostr(),
38 **{const.XLINK+"href": img.filename()}))
41 db.listitem(db.mediaobject(
42 db.imageobject(db.imagedata(fileref=img.slider())),caption),
43 **{const.XML+"id": "p%x%d" % (self.albumid,cnt)}))
45 th = db.itemizedlist(**{const.XML+"id": "thumb"})
47 for img in self.filelist:
49 th.append(db.listitem(db.para(db.link(db.inlinemediaobject(
50 db.imageobject(db.imagedata(fileref=img.thumbnail()))),**{const.XLINK+"href": "#p%x%d" % (self.albumid, cnt)}))))
51 return db.informalfigure(sl,th,**{const.XML+"id": "box"})
53 def recursively_empty(e):
56 return all((recursively_empty(c) for c in e.iterchildren()))
59 context = etree.iterwalk(xml)
60 for action, elem in context:
61 parent = elem.getparent()
62 if recursively_empty(elem):
65 if __name__ == "__main__":
66 for arg in sys.argv[1:]:
73 album = PhotoAlbum(argument)
78 #print(etree.tostring(cxml, pretty_print=True))
79 #sys.stderr.write(axml.encode('utf-8'))
80 #sys.stderr.write(etree.tostring(axml,encoding='UTF-8',pretty_print=True))
81 sys.stdout.write(etree.tostring(axml,encoding='UTF-8',pretty_print=True))