-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmiddleware.py
More file actions
125 lines (92 loc) · 2.77 KB
/
middleware.py
File metadata and controls
125 lines (92 loc) · 2.77 KB
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import dota2api
import config
import logger
from data_access import DataAccess
from middleware_etl import fill_database_detail as fill_database_detail_internal
from middleware_message import received_message as received_message_internal
from middleware_postback import received_postback as received_postback_internal
LOGGER = logger.getLogger(__name__)
API = dota2api.Initialise(api_key=config.dota2api['D2_API_KEY'])
DATA = None
def initialize_data_access(app):
global DATA
DATA = DataAccess(app)
"""
Metadata
"""
def initialise_database():
DATA.initialise_database()
"""
Master
"""
def fill_database_master():
# Heroes
heroes = API.get_heroes()
if heroes is None:
return
for hero in heroes['heroes']:
hero_id = hero['id']
hero_name = hero['localized_name']
portrait_url = hero['url_full_portrait']
data_hero = DATA.get_hero(hero_id=hero_id)
if data_hero:
data_hero.hero_name = hero_name
data_hero.portrait_url = portrait_url
DATA.update_hero(hero=data_hero)
LOGGER.info('Updated hero id: %d', hero_id)
else:
DATA.add_hero(hero_id=hero_id,
hero_name=hero_name,
portrait_url=portrait_url)
LOGGER.info('Created hero id: %d', hero_id)
# Items
items = API.get_game_items()
if items is None:
return
for item in items['items']:
item_id = item['id']
item_name = item['localized_name']
image_url = item['url_image']
data_item = DATA.get_item(item_id=item_id)
if data_item:
data_item.item_name = item_name
data_item.image_url = image_url
DATA.update_item(data_item)
LOGGER.info('Updated item id: %d', item_id)
else:
DATA.add_item(item_id=item_id,
item_name=item_name,
image_url=image_url)
LOGGER.info('Created item id: %d', item_id)
"""
ETL
"""
def fill_database_detail():
fill_database_detail_internal(data=DATA, api=API)
"""
TOKEN
"""
def validate_token(mode=None, token=None):
LOGGER.info('Validating token for mode: %s', mode)
return mode == 'subscribe' and token == config.dota2messenger['VALIDATION_TOKEN']
"""
Message
"""
def received_message(event):
received_message_internal(data=DATA, event=event)
"""
Postback
"""
def received_postback(event):
received_postback_internal(data=DATA, event=event)
"""
Main for scheduled job recommendation
"""
from flask import Flask
if __name__ == '__main__':
app = Flask(__name__)
initialize_data_access(app=app)
with app.app_context():
initialise_database()
fill_database_master()
fill_database_detail()