Passed
Push — master ( 6f7451...c395bc )
by Alexander
05:14
created

things3.things3_opml   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 47
dl 0
loc 66
rs 10
c 0
b 0
f 0
wmc 9

4 Methods

Rating   Name   Duplication   Size   Complexity  
A Things3OPML.print() 0 6 1
A Things3OPML.print_tasks() 0 7 2
A Things3OPML.get_top() 0 8 1
A Things3OPML.print_all() 0 17 5
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