things-py 0.0.9.dev0__tar.gz → 0.0.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {things.py-0.0.9.dev0 → things.py-0.0.10}/PKG-INFO +1 -1
- {things.py-0.0.9.dev0 → things.py-0.0.10}/things/__init__.py +1 -1
- {things.py-0.0.9.dev0 → things.py-0.0.10}/things/database.py +82 -79
- {things.py-0.0.9.dev0 → things.py-0.0.10}/things.py.egg-info/PKG-INFO +1 -1
- {things.py-0.0.9.dev0 → things.py-0.0.10}/README.md +0 -0
- {things.py-0.0.9.dev0 → things.py-0.0.10}/setup.cfg +0 -0
- {things.py-0.0.9.dev0 → things.py-0.0.10}/setup.py +0 -0
- {things.py-0.0.9.dev0 → things.py-0.0.10}/tests/__init__.py +0 -0
- {things.py-0.0.9.dev0 → things.py-0.0.10}/tests/test_things.py +0 -0
- {things.py-0.0.9.dev0 → things.py-0.0.10}/things/api.py +0 -0
- {things.py-0.0.9.dev0 → things.py-0.0.10}/things.py.egg-info/SOURCES.txt +0 -0
- {things.py-0.0.9.dev0 → things.py-0.0.10}/things.py.egg-info/dependency_links.txt +0 -0
- {things.py-0.0.9.dev0 → things.py-0.0.10}/things.py.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ __author__ = ["Alexander Willner", "Michael Belfrage"]
|
|
|
4
4
|
__copyright__ = "2021 Alexander Willner & Michael Belfrage"
|
|
5
5
|
__credits__ = ["Alexander Willner", "Michael Belfrage"]
|
|
6
6
|
__license__ = "Apache License 2.0"
|
|
7
|
-
__version__ = "0.0.
|
|
7
|
+
__version__ = "0.0.10"
|
|
8
8
|
__maintainer__ = ["Alexander Willner", "Michael Belfrage"]
|
|
9
9
|
__email__ = "alex@willner.ws"
|
|
10
10
|
__status__ = "Development"
|
|
@@ -219,92 +219,15 @@ class Database:
|
|
|
219
219
|
ORDER BY TASK."{index}"
|
|
220
220
|
"""
|
|
221
221
|
|
|
222
|
-
sql_query =
|
|
222
|
+
sql_query = make_tasks_sql_query(where_predicate)
|
|
223
223
|
if count_only:
|
|
224
224
|
return self.get_count(sql_query)
|
|
225
225
|
|
|
226
226
|
return self.execute_query(sql_query)
|
|
227
227
|
|
|
228
|
-
def make_task_sql_query(self, where_predicate):
|
|
229
|
-
"""Make SQL query for Task table"""
|
|
230
|
-
return f"""
|
|
231
|
-
SELECT DISTINCT
|
|
232
|
-
TASK.uuid,
|
|
233
|
-
CASE
|
|
234
|
-
WHEN TASK.{IS_TODO} THEN 'to-do'
|
|
235
|
-
WHEN TASK.{IS_PROJECT} THEN 'project'
|
|
236
|
-
WHEN TASK.{IS_HEADING} THEN 'heading'
|
|
237
|
-
END AS type,
|
|
238
|
-
CASE
|
|
239
|
-
WHEN TASK.{IS_TRASHED} THEN 1
|
|
240
|
-
END AS trashed,
|
|
241
|
-
TASK.title,
|
|
242
|
-
CASE
|
|
243
|
-
WHEN TASK.{IS_INCOMPLETE} THEN 'incomplete'
|
|
244
|
-
WHEN TASK.{IS_COMPLETED} THEN 'completed'
|
|
245
|
-
WHEN TASK.{IS_CANCELED} THEN 'canceled'
|
|
246
|
-
END AS status,
|
|
247
|
-
CASE
|
|
248
|
-
WHEN AREA.uuid IS NOT NULL THEN AREA.uuid
|
|
249
|
-
END AS area,
|
|
250
|
-
CASE
|
|
251
|
-
WHEN AREA.uuid IS NOT NULL THEN AREA.title
|
|
252
|
-
END AS area_title,
|
|
253
|
-
CASE
|
|
254
|
-
WHEN PROJECT.uuid IS NOT NULL THEN PROJECT.uuid
|
|
255
|
-
END AS project,
|
|
256
|
-
CASE
|
|
257
|
-
WHEN PROJECT.uuid IS NOT NULL THEN PROJECT.title
|
|
258
|
-
END AS project_title,
|
|
259
|
-
CASE
|
|
260
|
-
WHEN HEADING.uuid IS NOT NULL THEN HEADING.uuid
|
|
261
|
-
END AS heading,
|
|
262
|
-
CASE
|
|
263
|
-
WHEN HEADING.uuid IS NOT NULL THEN HEADING.title
|
|
264
|
-
END AS heading_title,
|
|
265
|
-
TASK.notes,
|
|
266
|
-
CASE
|
|
267
|
-
WHEN TAG.uuid IS NOT NULL THEN 1
|
|
268
|
-
END AS tags,
|
|
269
|
-
CASE
|
|
270
|
-
WHEN TASK.{IS_INBOX} THEN 'Inbox'
|
|
271
|
-
WHEN TASK.{IS_ANYTIME} THEN 'Anytime'
|
|
272
|
-
WHEN TASK.{IS_SOMEDAY} THEN 'Someday'
|
|
273
|
-
END AS start,
|
|
274
|
-
CASE
|
|
275
|
-
WHEN CHECKLIST_ITEM.uuid IS NOT NULL THEN 1
|
|
276
|
-
END AS checklist,
|
|
277
|
-
date(TASK.startDate, "unixepoch") AS start_date,
|
|
278
|
-
date(TASK.{DATE_DEADLINE}, "unixepoch") AS deadline,
|
|
279
|
-
date(TASK.stopDate, "unixepoch") AS "stop_date",
|
|
280
|
-
datetime(TASK.{DATE_CREATED}, "unixepoch", "localtime") AS created,
|
|
281
|
-
datetime(TASK.{DATE_MODIFIED}, "unixepoch", "localtime") AS modified,
|
|
282
|
-
TASK.'index',
|
|
283
|
-
TASK.todayIndex AS today_index
|
|
284
|
-
FROM
|
|
285
|
-
{TABLE_TASK} AS TASK
|
|
286
|
-
LEFT OUTER JOIN
|
|
287
|
-
{TABLE_TASK} PROJECT ON TASK.project = PROJECT.uuid
|
|
288
|
-
LEFT OUTER JOIN
|
|
289
|
-
{TABLE_AREA} AREA ON TASK.area = AREA.uuid
|
|
290
|
-
LEFT OUTER JOIN
|
|
291
|
-
{TABLE_TASK} HEADING ON TASK.actionGroup = HEADING.uuid
|
|
292
|
-
LEFT OUTER JOIN
|
|
293
|
-
{TABLE_TASK} HEADPROJ ON HEADING.project = HEADPROJ.uuid
|
|
294
|
-
LEFT OUTER JOIN
|
|
295
|
-
{TABLE_TASKTAG} TAGS ON TASK.uuid = TAGS.tasks
|
|
296
|
-
LEFT OUTER JOIN
|
|
297
|
-
{TABLE_TAG} TAG ON TAGS.tags = TAG.uuid
|
|
298
|
-
LEFT OUTER JOIN
|
|
299
|
-
{TABLE_CHECKLIST_ITEM} CHECKLIST_ITEM
|
|
300
|
-
ON CHECKLIST_ITEM.task = TASK.uuid
|
|
301
|
-
WHERE
|
|
302
|
-
{where_predicate}
|
|
303
|
-
"""
|
|
304
|
-
|
|
305
228
|
def get_task_rows(self, where_predicate):
|
|
306
229
|
"""Executes SQL query with given WHERE predicate."""
|
|
307
|
-
return self.execute_query(
|
|
230
|
+
return self.execute_query(make_tasks_sql_query(where_predicate))
|
|
308
231
|
|
|
309
232
|
def get_areas(self, uuid=None, tag=None, count_only=False):
|
|
310
233
|
"""Get areas. See `api.areas` for details on parameters."""
|
|
@@ -446,6 +369,7 @@ class Database:
|
|
|
446
369
|
plist_bytes = result[0].encode()
|
|
447
370
|
return plistlib.loads(plist_bytes)
|
|
448
371
|
|
|
372
|
+
# pylint: disable=R1710
|
|
449
373
|
def get_url_scheme_auth_token(self):
|
|
450
374
|
"""Get the Things URL scheme authentication token."""
|
|
451
375
|
|
|
@@ -457,6 +381,7 @@ class Database:
|
|
|
457
381
|
WHERE
|
|
458
382
|
uuid = 'RhAzEf6qDxCD5PmnZVtBZR'
|
|
459
383
|
"""
|
|
384
|
+
|
|
460
385
|
if result := self.execute_query(sql_query, row_factory=list_factory):
|
|
461
386
|
return result[0]
|
|
462
387
|
|
|
@@ -689,6 +614,84 @@ class Database:
|
|
|
689
614
|
# Helper functions
|
|
690
615
|
|
|
691
616
|
|
|
617
|
+
def make_tasks_sql_query(where_predicate):
|
|
618
|
+
"""Make SQL query for Task table"""
|
|
619
|
+
return f"""
|
|
620
|
+
SELECT DISTINCT
|
|
621
|
+
TASK.uuid,
|
|
622
|
+
CASE
|
|
623
|
+
WHEN TASK.{IS_TODO} THEN 'to-do'
|
|
624
|
+
WHEN TASK.{IS_PROJECT} THEN 'project'
|
|
625
|
+
WHEN TASK.{IS_HEADING} THEN 'heading'
|
|
626
|
+
END AS type,
|
|
627
|
+
CASE
|
|
628
|
+
WHEN TASK.{IS_TRASHED} THEN 1
|
|
629
|
+
END AS trashed,
|
|
630
|
+
TASK.title,
|
|
631
|
+
CASE
|
|
632
|
+
WHEN TASK.{IS_INCOMPLETE} THEN 'incomplete'
|
|
633
|
+
WHEN TASK.{IS_COMPLETED} THEN 'completed'
|
|
634
|
+
WHEN TASK.{IS_CANCELED} THEN 'canceled'
|
|
635
|
+
END AS status,
|
|
636
|
+
CASE
|
|
637
|
+
WHEN AREA.uuid IS NOT NULL THEN AREA.uuid
|
|
638
|
+
END AS area,
|
|
639
|
+
CASE
|
|
640
|
+
WHEN AREA.uuid IS NOT NULL THEN AREA.title
|
|
641
|
+
END AS area_title,
|
|
642
|
+
CASE
|
|
643
|
+
WHEN PROJECT.uuid IS NOT NULL THEN PROJECT.uuid
|
|
644
|
+
END AS project,
|
|
645
|
+
CASE
|
|
646
|
+
WHEN PROJECT.uuid IS NOT NULL THEN PROJECT.title
|
|
647
|
+
END AS project_title,
|
|
648
|
+
CASE
|
|
649
|
+
WHEN HEADING.uuid IS NOT NULL THEN HEADING.uuid
|
|
650
|
+
END AS heading,
|
|
651
|
+
CASE
|
|
652
|
+
WHEN HEADING.uuid IS NOT NULL THEN HEADING.title
|
|
653
|
+
END AS heading_title,
|
|
654
|
+
TASK.notes,
|
|
655
|
+
CASE
|
|
656
|
+
WHEN TAG.uuid IS NOT NULL THEN 1
|
|
657
|
+
END AS tags,
|
|
658
|
+
CASE
|
|
659
|
+
WHEN TASK.{IS_INBOX} THEN 'Inbox'
|
|
660
|
+
WHEN TASK.{IS_ANYTIME} THEN 'Anytime'
|
|
661
|
+
WHEN TASK.{IS_SOMEDAY} THEN 'Someday'
|
|
662
|
+
END AS start,
|
|
663
|
+
CASE
|
|
664
|
+
WHEN CHECKLIST_ITEM.uuid IS NOT NULL THEN 1
|
|
665
|
+
END AS checklist,
|
|
666
|
+
date(TASK.startDate, "unixepoch") AS start_date,
|
|
667
|
+
date(TASK.{DATE_DEADLINE}, "unixepoch") AS deadline,
|
|
668
|
+
date(TASK.stopDate, "unixepoch") AS "stop_date",
|
|
669
|
+
datetime(TASK.{DATE_CREATED}, "unixepoch", "localtime") AS created,
|
|
670
|
+
datetime(TASK.{DATE_MODIFIED}, "unixepoch", "localtime") AS modified,
|
|
671
|
+
TASK.'index',
|
|
672
|
+
TASK.todayIndex AS today_index
|
|
673
|
+
FROM
|
|
674
|
+
{TABLE_TASK} AS TASK
|
|
675
|
+
LEFT OUTER JOIN
|
|
676
|
+
{TABLE_TASK} PROJECT ON TASK.project = PROJECT.uuid
|
|
677
|
+
LEFT OUTER JOIN
|
|
678
|
+
{TABLE_AREA} AREA ON TASK.area = AREA.uuid
|
|
679
|
+
LEFT OUTER JOIN
|
|
680
|
+
{TABLE_TASK} HEADING ON TASK.actionGroup = HEADING.uuid
|
|
681
|
+
LEFT OUTER JOIN
|
|
682
|
+
{TABLE_TASK} HEADPROJ ON HEADING.project = HEADPROJ.uuid
|
|
683
|
+
LEFT OUTER JOIN
|
|
684
|
+
{TABLE_TASKTAG} TAGS ON TASK.uuid = TAGS.tasks
|
|
685
|
+
LEFT OUTER JOIN
|
|
686
|
+
{TABLE_TAG} TAG ON TAGS.tags = TAG.uuid
|
|
687
|
+
LEFT OUTER JOIN
|
|
688
|
+
{TABLE_CHECKLIST_ITEM} CHECKLIST_ITEM
|
|
689
|
+
ON CHECKLIST_ITEM.task = TASK.uuid
|
|
690
|
+
WHERE
|
|
691
|
+
{where_predicate}
|
|
692
|
+
"""
|
|
693
|
+
|
|
694
|
+
|
|
692
695
|
def dict_factory(cursor, row):
|
|
693
696
|
"""
|
|
694
697
|
Convert SQL result into a dictionary.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|