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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: things.py
3
- Version: 0.0.9.dev0
3
+ Version: 0.0.10
4
4
  Summary: A simple Python 3 library to read your Things app data.
5
5
  Home-page: https://github.com/thingsapi/things.py
6
6
  Author: Alexander Willner, Michael B.
@@ -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.9.dev"
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 = self.make_task_sql_query(where_predicate)
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(self.make_task_sql_query(where_predicate))
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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: things.py
3
- Version: 0.0.9.dev0
3
+ Version: 0.0.10
4
4
  Summary: A simple Python 3 library to read your Things app data.
5
5
  Home-page: https://github.com/thingsapi/things.py
6
6
  Author: Alexander Willner, Michael B.
File without changes
File without changes
File without changes
File without changes