Exemple #1
0
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()