2121from things_cli import __version__
2222
2323
24- class ThingsCLI :
24+ class ThingsCLI : # pylint: disable=R0902
2525 """A simple Python 3 CLI to read your Things app data."""
2626
2727 print_json = False
@@ -30,6 +30,9 @@ class ThingsCLI:
3030 # anonymize = False
3131 database = None
3232 recursive = False
33+ filter_project = None
34+ filter_area = None
35+ filter_tag = None
3336
3437 def __init__ (self , database = None ):
3538 self .database = database
@@ -153,6 +156,7 @@ def get_parser(cls):
153156 subparsers .add_parser ("completed" , help = "Shows completed tasks" )
154157 subparsers .add_parser ("canceled" , help = "Shows canceled tasks" )
155158 subparsers .add_parser ("trash" , help = "Shows trashed tasks" )
159+ subparsers .add_parser ("todos" , help = "Shows all todos" )
156160 subparsers .add_parser ("all" , help = "Shows all tasks" )
157161 subparsers .add_parser ("areas" , help = "Shows all areas" )
158162 subparsers .add_parser ("projects" , help = "Shows all projects" )
@@ -216,6 +220,16 @@ def get_parser(cls):
216220 # action="store_true", default=False,
217221 # help="anonymize output", dest="anonymize")
218222
223+ parser .add_argument (
224+ "-p" , "--filter-project" , dest = "filter_project" , help = "Filter by project"
225+ )
226+ parser .add_argument (
227+ "-a" , "--filter-area" , dest = "filter_area" , help = "Filter by area"
228+ )
229+ parser .add_argument (
230+ "-t" , "--filtertag" , dest = "filter_tag" , help = "Filter by tag"
231+ )
232+
219233 parser .add_argument (
220234 "-o" ,
221235 "--opml" ,
@@ -267,6 +281,16 @@ def get_parser(cls):
267281
268282 return parser
269283
284+ def defaults (self ):
285+ """Some default options for the new API."""
286+ return dict (
287+ project = self .filter_project ,
288+ area = self .filter_area ,
289+ tag = self .filter_tag ,
290+ include_items = self .recursive ,
291+ filepath = self .database ,
292+ )
293+
270294 def main (self , args = None ):
271295 """ Main entry point of the app """
272296
@@ -278,29 +302,30 @@ def main(self, args=None):
278302 self .print_csv = args .csv
279303 self .print_opml = args .opml
280304 self .database = args .database or self .database
305+ self .filter_project = args .filter_project or None
306+ self .filter_area = args .filter_area or None
307+ self .filter_tag = args .filter_tag or None
281308 self .recursive = args .recursive
282309 # self.anonymize = args.anonymize
283310 # self.things3.anonymize = self.anonymize ## not implemented
311+ defaults = self .defaults ()
312+
313+ remove_filter = ["all" , "areas" , "tags" ]
314+ if command in remove_filter :
315+ defaults .pop ("area" )
316+ defaults .pop ("project" )
317+ defaults .pop ("tag" )
284318
285319 if command == "all" :
286- inbox = api .inbox (filepath = self .database , include_items = self .recursive )
287- today = api .today (filepath = self .database , include_items = self .recursive )
288- upcoming = api .upcoming (
289- filepath = self .database , include_items = self .recursive
290- )
291- anytime = api .anytime (
292- filepath = self .database , include_items = self .recursive
293- )
294- someday = api .someday (
295- filepath = self .database , include_items = self .recursive
296- )
297- logbook = api .logbook (
298- filepath = self .database , include_items = self .recursive
299- )
300- no_area = api .projects (
301- area = False , filepath = self .database , include_items = self .recursive
302- )
303- areas = api .areas (filepath = self .database , include_items = self .recursive )
320+ inbox = api .inbox (** defaults )
321+ today = api .today (** defaults )
322+ upcoming = api .upcoming (** defaults )
323+ anytime = api .anytime (** defaults )
324+ someday = api .someday (** defaults )
325+ logbook = api .logbook (** defaults )
326+
327+ no_area = api .projects (** defaults )
328+ areas = api .areas (** defaults )
304329 structure = [
305330 {"title" : "Inbox" , "items" : inbox },
306331 {"title" : "Today" , "items" : today },
@@ -313,9 +338,7 @@ def main(self, args=None):
313338 ]
314339 self .print_tasks (structure )
315340 elif command == "upcoming" :
316- result = getattr (api , command )(
317- filepath = self .database , include_items = self .recursive
318- )
341+ result = getattr (api , command )(** defaults )
319342 result .sort (key = lambda task : task ["start_date" ], reverse = False )
320343 self .print_tasks (result )
321344 elif command == "search" :
@@ -329,11 +352,7 @@ def main(self, args=None):
329352 elif command == "feedback" : # pragma: no cover
330353 webbrowser .open ("https://github.com/thingsapi/things-cli/issues" )
331354 elif command in dir (api ):
332- self .print_tasks (
333- getattr (api , command )(
334- filepath = self .database , include_items = self .recursive
335- )
336- )
355+ self .print_tasks (getattr (api , command )(** defaults ))
337356 else : # pragma: no cover
338357 ThingsCLI .print_unimplemented (command )
339358 sys .exit (3 )
0 commit comments