|
@@ -2,22 +2,39 @@
|
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
-from app import Session, LOGGER
|
|
|
-from app.models import State, Player, StateRegion, \
|
|
|
+from app import SESSION, LOGGER
|
|
|
+from app.models import State, Region, Player, StateRegion, \
|
|
|
PlayerLocation, PlayerResidency, StateWorkPermit
|
|
|
|
|
|
|
|
|
+def get_regions(region_ids):
|
|
|
+ """Get regions from list"""
|
|
|
+ session = SESSION()
|
|
|
+ regions = []
|
|
|
+ for region_id in region_ids:
|
|
|
+ region = session.query(Region).get(region_id)
|
|
|
+ if not region:
|
|
|
+ region = save_region(session, region_id)
|
|
|
+ regions.append(region)
|
|
|
+ session.close()
|
|
|
+ return regions
|
|
|
+
|
|
|
def get_state_regions(state_id):
|
|
|
"""Get regions from state"""
|
|
|
- session = Session()
|
|
|
+ session = SESSION()
|
|
|
state = session.query(State).get(state_id)
|
|
|
- regions = state.regions.filter(StateRegion.until_date_time == None).all()
|
|
|
+ region_list = []
|
|
|
+ if state:
|
|
|
+ region_list = state.regions.filter(StateRegion.until_date_time == None).all()
|
|
|
+ else:
|
|
|
+ save_state(session, state_id)
|
|
|
+ LOGGER.error('State %6s: not found', state_id)
|
|
|
session.close()
|
|
|
- return regions
|
|
|
+ return region_list
|
|
|
|
|
|
def save_citizens(region_id, citizens):
|
|
|
"""Save citizens to database"""
|
|
|
- session = Session()
|
|
|
+ session = SESSION()
|
|
|
player_ids = []
|
|
|
new_citizens = 0
|
|
|
for player_dict in citizens:
|
|
@@ -25,8 +42,11 @@ def save_citizens(region_id, citizens):
|
|
|
if player is None:
|
|
|
player = save_player(session, player_dict)
|
|
|
player_ids.append(player.id)
|
|
|
- last_region = player.locations.first()
|
|
|
- if not last_region or last_region.id != region_id:
|
|
|
+ last_location = player.locations \
|
|
|
+ .filter(PlayerLocation.region_id == region_id) \
|
|
|
+ .filter(PlayerLocation.until_date_time == None) \
|
|
|
+ .first()
|
|
|
+ if not last_location:
|
|
|
new_citizens += 1
|
|
|
player_location = PlayerLocation()
|
|
|
player_location.player_id = player.id
|
|
@@ -50,21 +70,27 @@ def save_citizens(region_id, citizens):
|
|
|
|
|
|
def save_residents(region_id, residents):
|
|
|
"""Save residents to database"""
|
|
|
- session = Session()
|
|
|
+ session = SESSION()
|
|
|
player_ids = []
|
|
|
+ new_residents = 0
|
|
|
for player_dict in residents:
|
|
|
player = session.query(Player).get(player_dict['id'])
|
|
|
if player is None:
|
|
|
player = save_player(session, player_dict)
|
|
|
player_ids.append(player.id)
|
|
|
- last_residency = player.residencies.first()
|
|
|
- if not last_residency or last_residency.id != region_id:
|
|
|
+ last_residency = player.residencies \
|
|
|
+ .filter(PlayerResidency.region_id == region_id) \
|
|
|
+ .filter(PlayerResidency.until_date_time == None) \
|
|
|
+ .first()
|
|
|
+ if not last_residency:
|
|
|
+ new_residents += 1
|
|
|
player_location = PlayerResidency()
|
|
|
player_location.player_id = player.id
|
|
|
player_location.region_id = region_id
|
|
|
player_location.from_date_time = datetime.now().replace(second=0, minute=0)
|
|
|
session.add(player_location)
|
|
|
- session.commit()
|
|
|
+ LOGGER.info('regio %6s: "%s" new residents', region_id, new_residents)
|
|
|
+ session.commit()
|
|
|
current_residents = session.query(PlayerResidency) \
|
|
|
.filter(PlayerResidency.region_id == region_id) \
|
|
|
.filter(PlayerResidency.until_date_time == None).all()
|
|
@@ -77,21 +103,27 @@ def save_residents(region_id, residents):
|
|
|
|
|
|
def save_work_permits(state_id, work_permits):
|
|
|
"""Save residents to database"""
|
|
|
- session = Session()
|
|
|
+ session = SESSION()
|
|
|
player_ids = []
|
|
|
+ new_work_permits = 0
|
|
|
for player_dict in work_permits:
|
|
|
player = session.query(Player).get(player_dict['id'])
|
|
|
if player is None:
|
|
|
player = save_player(session, player_dict)
|
|
|
player_ids.append(player.id)
|
|
|
- last_work_permit = player.state_work_permits.first()
|
|
|
- if not last_work_permit or last_work_permit.id != state_id:
|
|
|
+ last_work_permit = player.state_work_permits \
|
|
|
+ .filter(StateWorkPermit.state_id == state_id) \
|
|
|
+ .filter(StateWorkPermit.until_date_time == None) \
|
|
|
+ .first()
|
|
|
+ if not last_work_permit:
|
|
|
+ new_residents += 1
|
|
|
state_work_permit = StateWorkPermit()
|
|
|
state_work_permit.player_id = player.id
|
|
|
state_work_permit.state_id = state_id
|
|
|
state_work_permit.from_date_time = player_dict['from']
|
|
|
session.add(state_work_permit)
|
|
|
- session.commit()
|
|
|
+ session.commit()
|
|
|
+ LOGGER.info('state %6s: "%s" new work permits', state_id, new_work_permits)
|
|
|
current_work_permits = session.query(StateWorkPermit) \
|
|
|
.filter(StateWorkPermit.state_id == state_id) \
|
|
|
.filter(StateWorkPermit.until_date_time == None).all()
|
|
@@ -112,3 +144,19 @@ def save_player(session, player_dict):
|
|
|
session.add(player)
|
|
|
session.commit()
|
|
|
return player
|
|
|
+
|
|
|
+def save_state(session, state_id):
|
|
|
+ """Save state to database"""
|
|
|
+ state = State()
|
|
|
+ state.id = state_id
|
|
|
+ session.add(state)
|
|
|
+ session.commit()
|
|
|
+ return state
|
|
|
+
|
|
|
+def save_region(session, region_id):
|
|
|
+ """Save region to database"""
|
|
|
+ region = Region()
|
|
|
+ region.id = region_id
|
|
|
+ session.add(region)
|
|
|
+ session.commit()
|
|
|
+ return region
|