Skip to content

Instantly share code, notes, and snippets.

@oivoodoo
Created August 5, 2018 04:40
Show Gist options
  • Save oivoodoo/c263512c979e6fea3f93f909e8fbf183 to your computer and use it in GitHub Desktop.
Save oivoodoo/c263512c979e6fea3f93f909e8fbf183 to your computer and use it in GitHub Desktop.
Export from Wunderlist
import wunderpy2
from dateutil import parser
from datetime import date
from csv import writer
ACCESS_TOKEN = '<WUNDERLIST_ACCESS_TOKEN>'
CLIENT_ID = '<WUNDERLIST_CLIENT_ID>'
PROJECT_BOARD = 'LIST_TITLE'
HOUR_RATE = 1
def __build_hour(task):
'''
Example:
dict(title='1 hour CORE-1234')
dict(title='5 hours CORE-4321')
dict(title='1 minute CORE-1234')
'''
columns = task['title'].strip().split(' ')
time, measure, task_id = columns
if measure == 'hour' or measure == 'hours':
hours = float(time)
elif measure == 'minute' or measure == 'minutes':
hours = float(time) / 60
elif measure == 'day' or measure == 'days':
hours = 24 * float(time)
else:
raise 'unknown measure from the task title: ' + task['title']
return dict(
task_id=task_id,
created_at=parser.parse(task['created_at']),
hours=hours)
def __main__():
api = wunderpy2.WunderApi()
client = api.get_client(ACCESS_TOKEN, CLIENT_ID)
board = [l for l in client.get_lists() if l['title'] == PROJECT_BOARD][0]
active_tasks = [t for t in client.get_tasks(board['id']) if not t['completed']]
report = [__build_hour(task) for task in active_tasks]
estimated_earnings = sum([task['hours'] for task in report]) * HOUR_RATE
print(estimated_earnings)
with open(f"report-{date.today()}.csv", 'w+') as f:
w = writer(f)
rows = [[task['task_id'], task['hours'], task['created_at'].date()]
for task in report]
w.writerows(rows)
for task in active_tasks:
client.update_task(task['id'], task['revision'], completed=True)
# TODO: make monthly output report to pdf file based on created_at field.
if __name__ == '__main__':
__main__()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment