-
Notifications
You must be signed in to change notification settings - Fork 0
/
balance.py
98 lines (76 loc) · 3.1 KB
/
balance.py
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/usr/bin/python
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from pydrive.files import GoogleDriveFile
from dateutil import tz
import re
import locale as l
import datetime as dt
import dateutil.parser
import requests
balance = 0
l.setlocale(l.LC_ALL, 'pt_BR.utf8')
def fetch_unlock_balance():
unlock_text = requests.get('https://unlock.fund/pt-BR/matehackers').text
match = re.search(r'number\"\>(\d+)\</span.+arrecadados', unlock_text)
return match.groups(0)[0]
def calculate_due_days():
hoje = dt.date.today()
if hoje.day <= 5:
dia_pagamento = hoje.replace(day=5)
else:
ano = hoje.year
if hoje.month == 12:
ano = ano + 1
dia_pagamento = dt.date.today().replace(day=5, month=(hoje.month % 12) + 1, year=ano)
return (dia_pagamento - hoje).days
def find_last_update(file_metadata):
return file_metadata.get('modifiedDate')
def humanize_date(uct_date_string):
# receives a date string and converts it to a brt localized date string
local_tz = tz.gettz('UTC-3')
date = dateutil.parser.parse(uct_date_string)
local_date = date.astimezone(local_tz)
return local_date.strftime("%d/%m/%y %H:%M %Z")
def fetch():
global balance
# Creating an oauth state machine
gauth = GoogleAuth()
if not gauth.LoadCredentialsFile('credentials.json'):
# credentials.json' not found. Initiating a full complete auth flow
gauth.CommandLineAuth()
gauth.SaveCredentialsFile('credentials.json')
# Credentials loaded!
MATEHACKERS_FINANCES_DOCUMENT_ID = "0Ar6ELBV64QUxdHQza0M1bHdOcEJNcUNGelJmRThMcVE"
FINANCE_SHEET_METADATA = {
u'exportLinks': {
u'text/csv': u'https://docs.google.com/feeds/download/spreadsheets/Export?key='+ MATEHACKERS_FINANCES_DOCUMENT_ID+ '&exportFormat=csv'
}
}
# Metadata given by FetchMetadata() is incomplete, it doesn't have the
# exportLink key for csv format so I have to inject it manually
file = GoogleDriveFile(gauth, metadata={ "id": MATEHACKERS_FINANCES_DOCUMENT_ID }, uploaded=True)
file.FetchMetadata()
metadata_copy = file.metadata.copy()
metadata_copy.update(FINANCE_SHEET_METADATA)
file.metadata = metadata_copy
# I couldn't make GetConstentString() that was supposed to bring the text
# only instead of saving a file to work, that's why I am saving a file here
file.GetContentFile('result.csv', mimetype='text/csv')
regex = re.compile("Grana em caixa,\"(-?\d+,?\d*)\"")
# Since we were 'forced' to get a file now we have to read it.
with open('result.csv','r') as f:
for line in f:
m = regex.search(line)
if m:
balance = m.groups(0)[0]
last_update = find_last_update(file)
unlock_balance = fetch_unlock_balance()
return {
'unlockBalance': l.atof(unlock_balance),
'totalBalance': l.atof(balance) + l.atof(unlock_balance),
'balance': l.atof(balance),
'lastUpdate': last_update,
'daysRemaining': calculate_due_days(),
'lastUpdateHuman': humanize_date(last_update)
}