Mercurial > getan
diff scripts/zeiterfassung.py @ 380:20fde79f8e12
Move all scripts in a common scripts directory
Currently console scripts were kept in several directories. Now use a common
directory for all scripts.
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Mon, 05 Jan 2015 10:54:20 +0100 |
parents | getan/contrib/zeiterfassung.py@1b190fa27482 |
children | b8cd8751cba0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/zeiterfassung.py Mon Jan 05 10:54:20 2015 +0100 @@ -0,0 +1,100 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# zeiterfassung +# ------------- +# (c) 2008 by Sascha L. Teichmann <sascha.teichmann@intevation.de> +# (c) 2011, 2012 by Björn Ricks <bjoern.ricks@intevation.de> +# +# Simple script which generates lines for zeiterfassung.txt files. +# +# This is Free Software licensed under the terms of GPLv3 or later. +# For details see LICENSE coming with the source of 'getan'. +# +import sys +import getopt +import codecs +import locale + +from datetime import datetime, timedelta + +from getan.template import render + +DEFAULT_DATABASE = "time.db" + +ZEITERFASSUNG_TEMPLATE = "zeiterfassung" + +USAGE = '''usage: %s <options> + with <options> + [--user=|-u <user>] : Name of user, default: $USER + [--database=|-d <database>]: getan database, default: time.db + [--project=|-p <key>] : Key of output project, default: all + [--encoding=|-e encoding] : encoding of output, default: none + [--week=]|-w <week>] : week of year + [--year=]|-y <year>] : year + [--list|-l] : list all projects + [--help|-h] : This text + [--emtpy|-m] : show empty projects + [--lastweek|-c] : entries of last working week''' + + +def usage(exit_code=0): + print USAGE % sys.argv[0] + sys.exit(exit_code) + + +def main(): + + database = DEFAULT_DATABASE + user = None + list_projects = False + project = None + encoding = None + week = None + year = None + empty_proj = False + database = None + template = ZEITERFASSUNG_TEMPLATE + + opts, args = getopt.getopt( + sys.argv[1:], + 'd:u:p:e:hl:w:y:mc', + ['database=', 'user=', 'project=', 'encoding=', 'help', 'list', 'week=', + 'year=', 'empty', 'lastweek']) + + for opt, val in opts: + if opt in ("--database", "-d"): + database = val + elif opt in ("--user", "-u"): + user = val + elif opt in ("--project", "-p"): + project = val + elif opt in ("--encoding", "-e"): + encoding = val + elif opt in ("--help", "-h"): + usage() + elif opt in ("--list", "-l"): + list_projects = True + elif opt in ("--year", "-y"): + year = val + elif opt in ("--week", "-w"): + week = int(val) + elif opt in ("--lastweek", "-c") and not week: + week = (datetime.now() - timedelta(7)).isocalendar()[1] + elif opt in ("--empty", "-m"): + empty_proj = True + + if not encoding: + encoding = locale.getdefaultlocale()[1] + + Writer = codecs.getwriter(encoding) + sys.stdout = Writer(sys.stdout) + + print render(user=user, database=database, week=week, year=year, + template=template, project=project, empty_projects=empty_proj) + + +if __name__ == '__main__': + main() + +# vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: