From 56bd4f335b0cbf1625f8f55f9172b3809205c47d Mon Sep 17 00:00:00 2001 From: norohind <60548839+norohind@users.noreply.github.com> Date: Sun, 21 Nov 2021 00:50:20 +0300 Subject: [PATCH] move `insert_leaderboard_db` from main.py to model.py --- main.py | 47 +++-------------------------------------------- model.py | 39 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 46 deletions(-) diff --git a/main.py b/main.py index bb0b294..458b1f2 100644 --- a/main.py +++ b/main.py @@ -23,15 +23,13 @@ import typing import requests import sqlite3 - +import model import sql_requests # from EDMCLogging import get_main_logger import utils db: sqlite3.Connection = sqlite3.connect('squads_stat.sqlite3') -db.executescript(sql_requests.schema_create) - def request_leaderboard(platform_enum: utils.Platform, leaderboard_type_enum: utils.LeaderboardTypes) -> dict: """ @@ -55,57 +53,18 @@ def request_leaderboard(platform_enum: utils.Platform, leaderboard_type_enum: ut 'type': leaderboard_type # str } - # return SAPIRequest.json()['leaderboards'][leaderboard_type] - -def insert_leaderboard_db(db_conn: sqlite3.Connection, leaderboard_list: dict) -> None: - """ - Takes leaderboard as list, it platform, type, db connection and insert leaderboard to DB - - :param db_conn: Connection to DB - :param leaderboard_list: list from request_leaderboard - :return: - """ - - platform: str = leaderboard_list['platform'] - LB_type: str = leaderboard_list['type'] - leaderboard: list = leaderboard_list['leaderboard'] - - action_id: int # not last, current that we will use - - sql_req_action_id: sqlite3.Cursor = db_conn.execute(sql_requests.select_last_action_id) - action_id_fetch_one: typing.Union[None, tuple[int]] = sql_req_action_id.fetchone() - if action_id_fetch_one is None: - # i.e. first launch - action_id = 1 # yep, not 0 - - else: - action_id = action_id_fetch_one[0] + 1 - - # Patch for additional values - for squad in leaderboard: - squad.update({'action_id': action_id, 'LB_type': LB_type, 'platform': platform}) - - with db_conn: - db_conn.executemany( - sql_requests.insert_leader_board, - leaderboard) - - -def get_and_save_leaderboard(platform_enum: utils.Platform, - leaderboard_type_enum: utils.LeaderboardTypes, - db_conn: sqlite3.Connection) -> None: +def get_and_save_leaderboard(platform_enum: utils.Platform, leaderboard_type_enum: utils.LeaderboardTypes) -> None: """ High logic function to get and save information about specified for type and platform leaderboard :param platform_enum: :param leaderboard_type_enum: - :param db_conn: :return: """ req = request_leaderboard(platform_enum, leaderboard_type_enum) - insert_leaderboard_db(db_conn, req) + model.insert_leaderboard_db(req) def main(): diff --git a/model.py b/model.py index c75bacb..a815517 100644 --- a/model.py +++ b/model.py @@ -1,15 +1,17 @@ import sqlite3 +import typing + import sql_requests import utils db: sqlite3.Connection = sqlite3.connect('squads_stat.sqlite3', check_same_thread=False) +db.executescript(sql_requests.schema_create) # schema creation + # thx https://stackoverflow.com/a/48789604 db.row_factory = lambda c, r: dict(zip([col[0] for col in c.description], r)) -cur = db.cursor() - def get_activity_changes(platform: str, leaderboard_type: str, limit: int, low_timestamp, high_timestamp) -> list: sql_req: sqlite3.Cursor = db.execute(sql_requests.select_activity, { @@ -21,3 +23,36 @@ def get_activity_changes(platform: str, leaderboard_type: str, limit: int, low_t }) return sql_req.fetchall() + + +def insert_leaderboard_db(leaderboard_list: dict) -> None: + """ + Takes leaderboard as list, it platform, type, db connection and insert leaderboard to DB + + :param leaderboard_list: list from request_leaderboard + :return: + """ + + platform: str = leaderboard_list['platform'] + LB_type: str = leaderboard_list['type'] + leaderboard: list = leaderboard_list['leaderboard'] + + action_id: int # not last, current that we will use + + sql_req_action_id: sqlite3.Cursor = db.execute(sql_requests.select_last_action_id) + action_id_fetch_one: typing.Union[None, dict[str, int]] = sql_req_action_id.fetchone() + if action_id_fetch_one is None: + # i.e. first launch + action_id = 1 # yep, not 0 + + else: + action_id = action_id_fetch_one['action_id'] + 1 + + # Patch for additional values + for squad in leaderboard: + squad.update({'action_id': action_id, 'LB_type': LB_type, 'platform': platform}) + + with db: + db.executemany( + sql_requests.insert_leader_board, + leaderboard)