-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcsvexport
executable file
·54 lines (49 loc) · 2.02 KB
/
csvexport
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/python3
"""
Script to export current timelog to csv
"""
import os
import sys
# add git repo subdirs to search path
basedir = os.path.dirname(os.path.realpath(__file__))
pkgdir = os.path.join(basedir, 'src')
sys.path.insert(0, pkgdir)
# handle parameters
import argparse
parser = argparse.ArgumentParser(
description="Parse gtimelog files, export data (possibly a range) to CSV")
parser.add_argument("-o", "--output", default=sys.stdout,
type=argparse.FileType('w', encoding='UTF-8'),
help="Write output to given <file> (default: stdout)")
parser.add_argument("-t", "--type", default='aggregated', choices=['aggregated', 'detailed', 'daily'],
help='choose type of export (default: %(default)s)')
parser.add_argument("-m", "--min", default='',
help="start export from given date string (format is %%Y-%%m-%%d %%H:%%M)")
parser.add_argument("-x", "--max", default='',
help="export until given date string (format is %%Y-%%m-%%d %%H:%%M)")
parser.add_argument("input", help="gtimelog input file")
args = parser.parse_args()
window = None
# possibly limit time frame we're exporting
from datetime import datetime
from gtimelog.timelog import TimeWindow
from gtimelog.timelog import TZOffset
if args.min or args.max:
min = datetime.min.replace(tzinfo=TZOffset())
max = datetime.max.replace(tzinfo=TZOffset())
if args.min:
min = datetime.strptime(args.min, '%Y-%m-%d %H:%M').replace(tzinfo=TZOffset())
if args.max:
max = datetime.strptime(args.max, '%Y-%m-%d %H:%M').replace(tzinfo=TZOffset())
window = TimeWindow(args.input, min, max)
else:
# load entire timelog file, perhaps with subset reporting period
window = TimeWindow(args.input)
# export entire file
import csv
if args.type == "aggregated":
window.to_csv_aggregated(csv.writer(args.output))
elif args.type == "detailed":
window.to_csv_detailed(csv.writer(args.output))
elif args.type == "daily":
window.to_csv_daily(csv.writer(args.output))