def commit(options, args): """Usage: commit Commits your work to the server.""" parser = get_parser(options.file) check_entries_file(parser, settings) pusher = Pusher( settings.get('default', 'site'), settings.get('default', 'username'), settings.get('default', 'password') ) entries = parser.get_entries(date=options.date) today = datetime.date.today() # Get the number of days required to go to the previous open day (ie. not on # a week-end) if today.weekday() == 6: days = 2 elif today.weekday() == 0: days = 3 else: days = 1 yesterday = today - datetime.timedelta(days=days) if options.date is None and not options.ignore_date_error: for (date, entry) in entries: # Don't take ignored entries into account when checking the date ignored_only = True for e in entry: if not e.is_ignored(): ignored_only = False break if ignored_only: continue if date not in (today, yesterday) or date.strftime('%w') in [6, 0]: raise Exception('Error: you\'re trying to commit for a day that\'s either'\ ' on a week-end or that\'s not yesterday nor today (%s).\nTo ignore this'\ ' error, re-run taxi with the option `--ignore-date-error`' % date.strftime('%A %d %B')) pusher.push(parser.get_entries(date=options.date)) total_hours = 0 ignored_hours = 0 for date, entries in parser.get_entries(date=options.date): for entry in entries: if entry.pushed: total_hours += entry.get_duration() elif entry.is_ignored(): ignored_hours += entry.get_duration() print '\n%-29s %5.2f' % ('Total', total_hours) if ignored_hours > 0: print '%-29s %5.2f' % ('Total ignored', ignored_hours) parser.update_file()