def run(self): diaro = Diaro(self.namespace.file[0]) if self.namespace.folder is None: # Display folders for uid, folder in diaro.folders.items(): print("{uid}: {title}".format(uid=uid, title=folder.title)) return entries = diaro.get_entries_for_folders(self.namespace.folder) if self.namespace.only_year: only_year = int(self.namespace.only_year) year_entries = [(datetime.fromtimestamp(entry.date / 1000.0).year, entry) for entry in entries] entries = [ entry for year, entry in year_entries if year == only_year ] if self.namespace.summary: for entry in entries: print("{date}: {title}".format(date=entry.date, title=entry.title)) return # render HTML mediapath = self.namespace.mediapath thumbsuffix = self.namespace.thumbsuffix for entry in entries: dt = datetime.fromtimestamp(entry.date / 1000.0) date = dt.strftime('%A %d %B %Y') time = dt.strftime('%H:%M') photo = '' attachments = diaro.get_attachments_for_entry(entry.uid) for attachment in attachments: assert attachment.type == 'photo' fmt = '<div><a href="{imgfullpath}"><img src="{imgthumbpath}" alt="" /></a></div>' filename, ext = os.path.splitext(attachment.filename) photo += fmt.format( imgfullpath=os.path.join(mediapath, attachment.filename), imgthumbpath=os.path.join(mediapath, filename + thumbsuffix + ext)) print("""\ <div> <!-- entry --> <h3>{title}</h3> <small><b>{date}</b> <i>{time}</i> ({foldertitle})</small> <p>{text}</p> {photo} </div> """.format(date=date, time=time, foldertitle=diaro.folders[entry.folder_uid].title, title=entry.title, text=entry.text, photo=photo))
def test_attachment(self): xml = dedent("""\ <data version="2"> <table name="diaro_attachments"> <r> <uid>1</uid> <entry_uid>2</entry_uid> <type>photo</type> <filename>photo.jpg</filename> <position>1</position> </r> </table> </data> """) with NamedTemporaryFile(mode='w') as fp: fp.write(xml) fp.flush() diaro = Diaro(filename=fp.name) assert len(diaro.attachments) == 1 assert '1' in diaro.attachments attachment = diaro.attachments['1'] assert attachment.entry_uid == '2' assert attachment.type == 'photo' assert attachment.filename == 'photo.jpg' assert attachment.position == '1'
def test_folder(self): xml = dedent("""\ <data version="2"> <table name="diaro_folders"> <r> <uid>73c5b749a50f0628667988147ca663c2</uid> <title>Diary entries</title> <color>#000000</color> <pattern>pattern01</pattern> </r> </table> </data> """) with NamedTemporaryFile(mode='w') as fp: fp.write(xml) fp.flush() diaro = Diaro(filename=fp.name) assert len(diaro.folders) == 1 assert '73c5b749a50f0628667988147ca663c2' in diaro.folders folder = diaro.folders['73c5b749a50f0628667988147ca663c2'] assert folder.title == 'Diary entries' assert folder.color == '#000000' assert folder.pattern == 'pattern01'
def test_entry(self): xml = dedent("""\ <data version="2"> <table name="diaro_entries"> <r> <uid>1</uid> <date>1434997052007</date> <tz_offset>+01:00</tz_offset> <title>title</title> <text>text</text> <folder_uid>2</folder_uid> <location_uid>3</location_uid> <tags></tags> <primary_photo_uid>4</primary_photo_uid> </r> </table> </data> """) with NamedTemporaryFile(mode='w') as fp: fp.write(xml) fp.flush() diaro = Diaro(filename=fp.name) assert len(diaro.entries) == 1 assert '1' in diaro.entries entry = diaro.entries['1'] assert entry.date == 1434997052007 assert entry.tz_offset == '+01:00' assert entry.title == 'title' assert entry.text == 'text' assert entry.folder_uid == '2' assert entry.location_uid == '3' assert entry.tags == '' assert entry.primary_photo_uid == '4'
def test_location(self): xml = dedent("""\ <data version="2"> <table name="diaro_locations"> <r> <uid>1</uid> <title></title> <address>1 Two Road, New Old Street</address> <lat>50.000000</lat> <lng>-1.600000</lng> <zoom>5</zoom> </r> </table> </data> """) with NamedTemporaryFile(mode='w') as fp: fp.write(xml) fp.flush() diaro = Diaro(filename=fp.name) assert len(diaro.locations) == 1 assert '1' in diaro.locations location = diaro.locations['1'] assert location.title == '' assert location.address == '1 Two Road, New Old Street' assert location.lat == '50.000000' assert location.lng == '-1.600000' assert location.zoom == '5'
def test_folders(self, folders): xml = dedent("""\ <data version="2"> <table name="diaro_folders"> """) for folder in folders: xml += dedent("""\ <r> <uid>{uid}</uid> <title>{title}</title> <color>{color}</color> <pattern>{pattern}</pattern> </r> """.format(**folder)) xml += dedent("""\ </table> </data> """) with NamedTemporaryFile(mode='w') as fp: fp.write(xml) fp.flush() diaro = Diaro(filename=fp.name) assert len(diaro.folders) == len(folders)
def get_attachments_for_entry(self, entry_uid): xml = dedent("""\ <data version="2"> <table name="diaro_attachments"> <r> <uid>3</uid> <entry_uid>1</entry_uid> <type>photo</type> <filename>photo2.jpg</filename> <position>2</position> </r> <r> <uid>2</uid> <entry_uid>1</entry_uid> <type>photo</type> <filename>photo1.jpg</filename> <position>1</position> </r> </table> <table name="diaro_entries"> <r> <uid>1</uid> <date>1434997052007</date> <tz_offset>+01:00</tz_offset> <title>title</title> <text>text</text> <folder_uid>2</folder_uid> <location_uid>3</location_uid> <tags></tags> <primary_photo_uid>4</primary_photo_uid> </r> </table> </data> """) with NamedTemporaryFile(mode='w') as fp: fp.write(xml) fp.flush() diaro = Diaro(filename=fp.name) attachments = diaro.get_attachments_for_entry('1') assert len(attachments) == 2 assert attachment[0].position < attachment[1].position
def test_empty_xml(self): xml = dedent("""\ <data version="2"> </data> """) with NamedTemporaryFile(mode='w') as fp: fp.write(xml) fp.flush() diaro = Diaro(filename=fp.name)
def test_template(self): xml = dedent("""\ <data version="2"> <table name="diaro_templates"> <r> <uid>73c5b749a50f0628667988147ca663c2</uid> <name>Template</name> <title>Title</title> <color>#000000</color> <text>text01</text> </r> </table> </data> """) with NamedTemporaryFile(mode='w') as fp: fp.write(xml) fp.flush() diaro = Diaro(filename=fp.name)
def test_get_entries_for_folders(self): xml = dedent("""\ <data version="2"> <table name="diaro_folders"> <r> <uid>2</uid> <title>Diary entries</title> <color>#000000</color> <pattern>pattern01</pattern> </r> <r> <uid>3</uid> <title>Quotes</title> <color>#111111</color> <pattern>pattern02</pattern> </r> </table> <table name="diaro_entries"> <r> <uid>1</uid> <date>1434997052007</date> <tz_offset>+01:00</tz_offset> <title>title</title> <text>text</text> <folder_uid>2</folder_uid> <location_uid>3</location_uid> <tags></tags> <primary_photo_uid>4</primary_photo_uid> </r> <r> <uid>4</uid> <date>1434997052007</date> <tz_offset>+01:00</tz_offset> <title>not selected</title> <text>text</text> <folder_uid>7</folder_uid> <location_uid>3</location_uid> <tags></tags> <primary_photo_uid>4</primary_photo_uid> </r> <r> <uid>5</uid> <date>1434997052006</date> <tz_offset>+01:00</tz_offset> <title>Quote</title> <text>quote</text> <folder_uid>3</folder_uid> <location_uid>4</location_uid> <tags></tags> <primary_photo_uid></primary_photo_uid> </r> </table> </data> """) with NamedTemporaryFile(mode='w') as fp: fp.write(xml) fp.flush() diaro = Diaro(filename=fp.name) assert len(diaro.entries) == 3 assert len(diaro.folders) == 2 assert '2' in diaro.folders assert '3' in diaro.folders entries = diaro.get_entries_for_folders(['2']) assert len(entries) == 1 assert entries[0].title == 'title' entries = diaro.get_entries_for_folders((x for x in ['2', '3'])) assert len(entries) == 2 assert entries[0].title == 'Quote'