diff --git a/bin/ctt b/bin/ctt index 9a9e09f..0819948 100755 --- a/bin/ctt +++ b/bin/ctt @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# 2012 Nico Schottelius (nico-ctt at schottelius.org) +# 2012-2013 Nico Schottelius (nico-ctt at schottelius.org) # # This file is part of ctt. # @@ -66,12 +66,13 @@ def parse_argv(argv, version): parser['report'] = parser['sub'].add_parser('report', parents=[parser['loglevel']]) parser['report'].set_defaults(func=Report.commandline) - parser['report'].add_argument("project", help="project to report time for", nargs=1) + parser['report'].add_argument("project", help="project to report time for", nargs='*') parser['report'].add_argument("--sd", "--start", help="start date (default: first of this month, format: %s)" % ctt.DATEFORMAT_PLAIN, nargs=1, dest="start") parser['report'].add_argument("--ed", "--end", help="end date (default: last of this month, format: %s)" % ctt.DATEFORMAT_PLAIN, nargs=1, default=None, dest="end") + parser['report'].add_argument("-a", "--all", help="List entries for all projects", action='store_true') parser['report'].add_argument("-e", "--regexp", help="regular expression to match", default=None) parser['report'].add_argument("-i", "--ignore-case", help="ignore case distinctions", action="store_true") @@ -96,7 +97,8 @@ def parse_argv(argv, version): except ctt.Error as e: log.error(e) sys.exit(1) - except AttributeError: + except AttributeError as e: + print(e) parser['main'].print_help() diff --git a/lib/ctt/listprojects.py b/lib/ctt/listprojects.py index 731b4b0..9b28b7c 100755 --- a/lib/ctt/listprojects.py +++ b/lib/ctt/listprojects.py @@ -33,6 +33,12 @@ class ListProjects(object): cls.print_projects() + @classmethod def print_projects(): - for project in ctt.list_projects(ctt.ctt_dir()): + for project in cls.list_projects(): print(project) + + @staticmethod + def list_projects(): + for project in ctt.list_projects(ctt.ctt_dir()): + yield project diff --git a/lib/ctt/report.py b/lib/ctt/report.py index da1776e..83c6842 100755 --- a/lib/ctt/report.py +++ b/lib/ctt/report.py @@ -32,6 +32,7 @@ import re import sys import ctt +import ctt.listprojects log = logging.getLogger(__name__) @@ -57,8 +58,20 @@ class Report(object): @classmethod def commandline(cls, args): - report = cls(args.project[0], args.start, args.end, args.output_format, args.regexp, args.ignore_case) - report.report() + # Report time for all projects + if args.all: + projects=ctt.listprojects.ListProjects.list_projects() + + else: + projects=[args.projects[0]] + + total_time = 0 + for project in projects: + report = cls(project, args.start, args.end, args.output_format, args.regexp, args.ignore_case) + report.report() + total_time = total_time + report.total_time + + cls.summary(total_time) def _init_date(self, start_date, end_date): @@ -133,17 +146,22 @@ class Report(object): log.debug("Skipping: %s" % dirname) def report(self): + self.header() self.list_entries() - self.summary() + self.summary(self.total_time) - def summary(self): - """Show report to the user""" + def header(self): + print("Report for %s between %s and %s" % + (self.project, self.start_date, self.end_date)) - hours, minutes, seconds = ctt.user_timedelta(self.total_time()) + @staticmethod + def summary(total_time): + hours, minutes, seconds = ctt.user_timedelta(total_time) - print("Tracked time between %s and %s: %sh %sm %ss." % - (self.start_date, self.end_date, hours, minutes, seconds)) + print("Total time tracked: %sh %sm %ss." % + (hours, minutes, seconds)) + @property def total_time(self): """Return all entries""" @@ -160,7 +178,6 @@ class Report(object): """Return total time tracked""" sorted_times = sorted(self._report_db.keys()) - #for time, entry in self._report_db.items(): for time in sorted_times: entry = self._report_db[time]