Exemplo n.º 1
0
    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))
Exemplo n.º 2
0
    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'
Exemplo n.º 3
0
    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'
Exemplo n.º 4
0
    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'
Exemplo n.º 5
0
    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'
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
    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)
Exemplo n.º 9
0
    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)
Exemplo n.º 10
0
    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'