1
|
|
|
#!/usr/bin/env python3 |
2
|
|
|
# -*- coding: utf-8 -*- |
3
|
|
|
|
4
|
|
|
"""OPML Plugin for the Thing 3 CLI.""" |
5
|
|
|
|
6
|
|
|
from __future__ import print_function |
7
|
|
|
|
8
|
|
|
__author__ = "Alexander Willner" |
9
|
|
|
__copyright__ = "2020 Alexander Willner" |
10
|
|
|
__credits__ = ["Alexander Willner"] |
11
|
|
|
__license__ = "Apache License 2.0" |
12
|
|
|
__version__ = "2.6.3" |
13
|
|
|
__maintainer__ = "Alexander Willner" |
14
|
|
|
__email__ = "[email protected]" |
15
|
|
|
__status__ = "Development" |
16
|
|
|
|
17
|
|
|
import xml.etree.ElementTree as ET |
18
|
|
|
from xml.etree.ElementTree import Element, SubElement |
19
|
|
|
from xml.dom import minidom |
20
|
|
|
|
21
|
|
|
|
22
|
|
|
class Things3OPML(): |
23
|
|
|
"""OPML Plugin for Thing 3 CLI.""" |
24
|
|
|
|
25
|
|
|
@staticmethod |
26
|
|
|
def get_top(): |
27
|
|
|
"""Get first element.""" |
28
|
|
|
top = Element('opml') |
29
|
|
|
head = SubElement(top, 'head') |
30
|
|
|
title = SubElement(head, 'title') |
31
|
|
|
title.text = 'Things 3 Database' |
32
|
|
|
return top |
33
|
|
|
|
34
|
|
|
@staticmethod |
35
|
|
|
def print(top): |
36
|
|
|
"""Print pretty XML.""" |
37
|
|
|
xmlstr = minidom.parseString( |
38
|
|
|
ET.tostring(top)).toprettyxml(indent=" ") |
39
|
|
|
print(xmlstr) |
40
|
|
|
|
41
|
|
|
def print_tasks(self, tasks): |
42
|
|
|
"""Print pretty XML of selected tasks.""" |
43
|
|
|
top = self.get_top() |
44
|
|
|
body = SubElement(top, 'body') |
45
|
|
|
for task in tasks: |
46
|
|
|
SubElement(body, 'outline').set('text', task['title']) |
47
|
|
|
self.print(top) |
48
|
|
|
|
49
|
|
|
def print_all(self, things3): |
50
|
|
|
"""Print.""" |
51
|
|
|
top = self.get_top() |
52
|
|
|
body = SubElement(top, 'body') |
53
|
|
|
|
54
|
|
|
for area in things3.get_areas(): |
55
|
|
|
area_element = SubElement(body, 'outline') |
56
|
|
|
area_element.set('text', area['title']) |
57
|
|
|
for task in things3.get_task(area['uuid']): |
58
|
|
|
SubElement(area_element, 'outline').set('text', task['title']) |
59
|
|
|
for project in things3.get_projects(area['uuid']): |
60
|
|
|
project_element = SubElement(area_element, 'outline') |
61
|
|
|
project_element.set('text', project['title']) |
62
|
|
|
for task in things3.get_task(None, project['uuid']): |
63
|
|
|
SubElement(project_element, 'outline').set( |
64
|
|
|
'text', task['title']) |
65
|
|
|
self.print(top) |
66
|
|
|
|