support -e/-i & changelog entry

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
This commit is contained in:
Nico Schottelius 2013-04-27 22:55:02 +02:00
parent 5003b935f4
commit ab362be637
4 changed files with 25 additions and 11 deletions

13
bin/ctt
View file

@ -67,11 +67,16 @@ def parse_argv(argv, version):
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("-s", "--start", help="Start date (default: first of last month, format: %s)" % ctt.DATEFORMAT_PLAIN,
nargs=1)
parser['report'].add_argument("-e", "--end", help="End date (default: last of last month, format: %s)" % ctt.DATEFORMAT_PLAIN, nargs=1, default=None)
parser['report'].add_argument("--sd", "--start", help="Start date (default: first of last month, format: %s)" % ctt.DATEFORMAT_PLAIN,
nargs=1, dest="start")
parser['report'].add_argument("--ed", "--end", help="End date (default: last of last month, format: %s)" % ctt.DATEFORMAT_PLAIN,
nargs=1, default=None, dest="end")
parser['report'].add_argument("-f", "--format", help="Output format (default: %s)" % ctt.REPORTFORMAT, default=ctt.REPORTFORMAT, dest="output_format")
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")
parser['report'].add_argument("-f", "--format", help="Output format (default: %s)" % ctt.REPORTFORMAT,
default=ctt.REPORTFORMAT, dest="output_format")
#parser['track'].add_argument("-t", "--tag", help="Add tags",
# action="store_true")

View file

@ -1,5 +1,10 @@
Changelog
---------
0.8: 2013-04-27
* Added -e / --regexp support for filtering entries on report
* Added -i / --ignore-case support
* Renamed -s/-e to --sd / --ed (to allow -e for expression)
0.7:
* Added -f / --format support for reporting

View file

@ -23,7 +23,7 @@
import os
import os.path
VERSION = "0.6"
VERSION = "0.8"
FILE_DELTA = "delta"
FILE_COMMENT = "comment"
DATEFORMAT = "%Y-%m-%d"

View file

@ -38,19 +38,26 @@ log = logging.getLogger(__name__)
class Report(object):
"""Create a report on tracked time"""
def __init__(self, project, start_date, end_date, output_format):
def __init__(self, project, start_date, end_date,
output_format, regexp, ignore_case):
self.project = project
self.project_dir = ctt.project_dir(self.project)
self.output_format = output_format
self.regexp = regexp
if ignore_case:
self.search_flags = re.IGNORECASE
else:
self.search_flags = 0
self._init_date(start_date, end_date)
self._init_report_db()
@classmethod
def commandline(cls, args):
report = cls(args.project[0], args.start, args.end, args.output_format)
report = cls(args.project[0], args.start, args.end, args.output_format, args.regexp, args.ignore_case)
report.report()
@ -95,9 +102,6 @@ class Report(object):
if not os.path.isdir(self.project_dir):
raise ctt.Error("Project does not exist: %s" % (self.project))
# self.regexp = "^rails19"
self.regexp = None
self._report_db = {}
for dirname in os.listdir(self.project_dir):
dir_datetime = datetime.datetime.strptime(dirname, ctt.DISKFORMAT)
@ -112,7 +116,7 @@ class Report(object):
comment = fd.read().rstrip('\n')
# If regular expression given, but not matching, skip entry
if self.regexp and not re.search(self.regexp, comment):
if self.regexp and not re.search(self.regexp, comment, self.search_flags):
continue