· 7 years ago · Aug 10, 2018, 01:42 AM
1import sys
2import odesk
3from odesk import Q
4from datetime import datetime, timedelta
5import shelve
6import os
7
8# add your desktop app keys
9public_key = ''
10secret_key = ''
11
12storage_path = os.path.join(os.environ['HOME'], '.task_hours.shelve')
13storage = shelve.open(storage_path)
14
15def get_client():
16 client = odesk.Client(public_key, secret_key)
17 auth_token = storage.get('auth_token')
18 if auth_token is None:
19 # perform auth process
20 frob = storage.get('frob')
21 if frob is None:
22 frob = client.auth.get_frob()
23 storage['frob'] = frob
24 print "Please, authorize application using the URL:\n%s" % \
25 client.auth.auth_url(frob)
26 sys.exit(1)
27 try:
28 auth_token, user = client.auth.get_token(frob)
29 except Exception, e:
30 print "Could not get auth token: %s" % e
31 else:
32 storage['auth_token'] = auth_token
33 storage['user'] = user
34 finally:
35 del storage['frob']
36
37 if auth_token is None:
38 sys.exit(1)
39
40 client = odesk.Client(public_key, secret_key, auth_token)
41 return client
42
43
44if __name__=='__main__':
45 task = sys.argv[1]
46
47 try:
48 worked_from = sys.argv[2]
49 except IndexError:
50 # set week back default
51 worked_from = datetime.now().date() - timedelta(days=7)
52
53 client = get_client()
54
55 report = client.time_reports.get_provider_report(
56 'sergray',
57 odesk.Query(
58 select=odesk.Query.DEFAULT_TIMEREPORT_FIELDS,
59 where=(Q('task')==task) & (Q('worked_on') > worked_from)
60 )
61 )
62
63 storage.close()
64
65 print sum(map(lambda r: float(r['c'][-1]['v']), report['table']['rows']))