source: stamper/bin/stamp2json@ 18:f8c2304728ba

Last change on this file since 18:f8c2304728ba was 18:f8c2304728ba, checked in by Borja Lopez <borja@…>, 10 years ago

Set proper start time for an entry when it did not have a stamp start
line in the workstamps.txt file. For example:

2014-07-01 08:20 start
2014-07-01 09:30 customer task A
2014-07-01 10:30 customer task B
2014-07-01 11:30 customer task C

  • Property exe set to *
File size: 2.4 KB
Line 
1#!/usr/bin/env python
2
3import json
4import sys
5from argparse import ArgumentParser
6from os.path import expanduser, isfile, isdir
7
8
9def args_cmd():
10 """Parse the command line arguments via argparse"""
11 parser = ArgumentParser(description='Convert tool from txt to json format')
12 parser.add_argument(
13 '--input', '-i', default=expanduser('~/.workstamps.txt'),
14 help='Input filename (default ~/.workstamps.txt')
15 parser.add_argument(
16 '--output', '-o', default=expanduser('~/.workstamps.json'),
17 help='Input filename (default: ~/.workstamps.json)')
18 return parser.parse_args()
19
20
21def itemify(line):
22 """Split a line, returning date and the rest of data"""
23 line = line.strip()
24 end_time = line[:16]
25 info = line[17:]
26 return(line[:16], line[17:])
27
28
29if __name__ == '__main__':
30 args = args_cmd()
31
32 stamps = []
33
34 with open(args.input, 'r') as infile:
35
36 for line in infile:
37 time, info = itemify(line)
38
39 if info == 'start':
40 customer = None
41 action = None
42 start_time = time
43 end_time = None
44
45 elif time == 'restarttotals':
46 continue
47
48 else:
49 info_items = info.split(' ', 1)
50 customer = info_items[0]
51 action = ''
52 if len(info_items) > 1:
53 action = info_items[1].lstrip('- ')
54 # if the previous line was not a start line, took the previous
55 # line end time as start time
56 if end_time is not None:
57 start_time = end_time
58 end_time = time
59
60 stamps.append({
61 'start': start_time,
62 'end': end_time,
63 'customer': customer,
64 'action': action,
65 })
66
67 if isfile(args.output):
68 print('[warning] %(out)s already exist'
69 % {'out': args.output})
70 confirm = raw_input('overwrite? (y/n) ')
71 while confirm not in ['y','n','Y','N']:
72 confirm = raw_input('overwrite? (y/n) ')
73 if confirm in ['n', 'N']:
74 print('[warning] exiting without converting')
75 sys.exit()
76
77 elif isdir(args.output):
78 print('[error] %(out)s is a directory, remove it first'
79 % {'out': args.output})
80 sys.exit(1)
81
82 with open(args.output, 'w') as stamps_file:
83 json.dump(stamps, stamps_file, indent=4)
Note: See TracBrowser for help on using the repository browser.