-
Notifications
You must be signed in to change notification settings - Fork 0
/
__main__.py
69 lines (56 loc) · 2.64 KB
/
__main__.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
import requests
import time
from API_mediators.coingecko import CoingeckoAPI
from API_mediators.exceptions import CoinNotFoundError
from API_mediators.exceptions import ServerError
from API_mediators.exceptions import NoValueError
"""
[Nomenclatura do código main]
Neste caso em concreto, este modulo é na verdade o modulo executável do teu projecto.
Neste momento isso não está evidente.
É good practice dares o nome de __main__.py a este tipo de modulos, para ser mais facil a outros developers
saberem que este é o modulo que é suposto ser executado.
Deves seguir o standard:
def main():
print("Hello World!")
if __name__ == "__main__":
main()
Tens aqui uma explicação:
https://realpython.com/python-main-function/
[Outras Notas]
Neste csao há varias razões que podem levar a que CoingeckoAPI_prices(coin) == False.
-Falhas de rede
-Erro de servidor
-Inexistencia de preço para o coin
-Etc...
E em cada um desses casos tu vais parar completamente a execução do loop.
O mais correto aqui seria do lado do coingecko seres um pouco mais verboso com os erros.
-Caso encontres um erro 404 (not found): Retornas um CoinNotFoundError.
-Caso encontres um erro 5xx (server error): Retornas um ServerError.
E nesta função, dás handle desses erros, de maneira mais explicita:
-Caso recebas um CoinNotFoundError -> Passas à frente.
-Caso recebas um ServerError -> Dás retry mais N vezes.
"""
def main():
coins_dictionary = CoingeckoAPI.coingecko_api_list()
for coin in coins_dictionary:
retries = 0
should_ignore = False
while retries < 3 and not should_ignore:
time.sleep(1) # 1 second on hold for each try
try:
coin_value = CoingeckoAPI.coingecko_api_prices(coin["id"]) # get coin's value
except CoinNotFoundError: # jumps to the next coin
should_ignore = True
except ServerError: # on server error retries three times
retries = retries + 1
except NoValueError: #value did not exist, then jump to the next
should_ignore = True
else:
print ("{} : {} $" .format(coin["name"],str(coin_value))) # print it in the terminal
break
if retries >=3 : # in case of not responding on the third time Stop fetching
print ("Server Error")
break
if __name__ == "__main__":
main()