diff --git a/erepublik/citizen.py b/erepublik/citizen.py index 666fba0..b19acac 100644 --- a/erepublik/citizen.py +++ b/erepublik/citizen.py @@ -5,7 +5,7 @@ import sys import threading import time from json import loads, dumps -from typing import Dict, List, Tuple, Any, Union, Mapping +from typing import Dict, List, Tuple, Any, Union import requests from requests import Response, RequestException @@ -18,9 +18,9 @@ class Citizen(classes.CitizenAPI): division = 0 - all_battles: Dict[int, classes.Battle] = dict() - countries: Dict[int, Dict[str, Union[str, List[int]]]] = dict() - __last_war_update_data = {} + all_battles: Dict[int, classes.Battle] = None + countries: Dict[int, Dict[str, Union[str, List[int]]]] = None + __last_war_update_data = None __last_full_update: datetime.datetime = utils.now().min active_fs: bool = False @@ -44,8 +44,8 @@ class Citizen(classes.CitizenAPI): work_units = 0 ot_points = 0 - tg_contract = {} - promos = {} + tg_contract = None + promos = None eday = 0 @@ -293,7 +293,7 @@ class Citizen(classes.CitizenAPI): html = self.r.text ugly_js = re.search(r"promotions: (\[{?.*}?]),\s+", html).group(1) promos = loads(utils.normalize_html_json(ugly_js)) - self.promos = {k: v for k, v in self.promos.items() if v > self.now} + self.promos = {k: v for k, v in (self.promos.items() if self.promos else {}) if v > self.now} send_mail = False for promo in promos: promo_name = promo.get("id") @@ -443,8 +443,9 @@ class Citizen(classes.CitizenAPI): self.update_citizen_info() resp_json = self._get_military_campaigns().json() - self.all_battles = {} if resp_json.get("countries"): + self.all_battles = {} + self.countries = {} for c_id, c_data in resp_json.get("countries").items(): if int(c_id) not in self.countries: self.countries.update({ @@ -807,7 +808,7 @@ class Citizen(classes.CitizenAPI): r = self._get_training_grounds_json() tg_json = r.json() self.details.gold = tg_json["page_details"]["gold"] - self.tg_contract.update({"free_train": tg_json["hasFreeTrain"]}) + self.tg_contract = {"free_train": tg_json["hasFreeTrain"]} if tg_json["contracts"]: self.tg_contract.update(**tg_json["contracts"][0]) diff --git a/erepublik/classes.py b/erepublik/classes.py index 96f9466..43fcf93 100644 --- a/erepublik/classes.py +++ b/erepublik/classes.py @@ -26,11 +26,13 @@ class ErepublikNetworkException(Exception): class MyCompanies: work_units: int = 0 next_ot_time: datetime.datetime - holdings: Dict[int, Dict] = dict() - companies: Dict[int, Dict] = dict() + holdings: Dict[int, Dict] = None + companies: Dict[int, Dict] = None ff_lockdown: int = 0 def __init__(self): + self.holdings = dict() + self.companies = dict() self.next_ot_time = utils.now() def prepare_holdings(self, holdings: dict): @@ -970,8 +972,8 @@ class MyJSONEncoder(JSONEncoder): class BattleSide: id: int points: int - deployed: List[int] = list() - allies: List[int] = list() + deployed: List[int] = None + allies: List[int] = None def __init__(self, country_id: int, points: int, allies: List[int], deployed: List[int]): self.id = country_id @@ -983,8 +985,8 @@ class BattleSide: class BattleDivision: end: datetime.datetime epic: bool - dom_pts: Dict[str, int] = dict() - wall: Dict[str, Union[int, float]] = dict() + dom_pts: Dict[str, int] = None + wall: Dict[str, Union[int, float]] = None @property def div_end(self) -> bool: @@ -993,8 +995,8 @@ class BattleDivision: def __init__(self, end: datetime.datetime, epic: bool, inv_pts: int, def_pts: int, wall_for: int, wall_dom: float): self.end = end self.epic = epic - self.dom_pts.update({"inv": inv_pts, "def": def_pts}) - self.wall.update({"for": wall_for, "dom": wall_dom}) + self.dom_pts = dict({"inv": inv_pts, "def": def_pts}) + self.wall = dict({"for": wall_for, "dom": wall_dom}) class Battle(object): @@ -1006,13 +1008,13 @@ class Battle(object): start: datetime.datetime = None invader: BattleSide = None defender: BattleSide = None - div: Dict[int, BattleDivision] = dict() + div: Dict[int, BattleDivision] = None @property def is_air(self) -> bool: return not bool(self.zone_id % 4) - def __init__(self, battle: dict): + def __init__(self, battle: Dict[str, Any]): self.id = int(battle.get('id', 0)) self.war_id = int(battle.get('war_id', 0)) self.zone_id = int(battle.get('zone_id', 0)) @@ -1029,6 +1031,7 @@ class Battle(object): [row.get('id') for row in battle.get('def', {}).get('ally_list')], [row.get('id') for row in battle.get('def', {}).get('ally_list') if row['deployed']]) + self.div = {} for div, data in battle.get('div', {}).items(): div = int(div) if data.get('end'):