Browse Source

Working on region fix

JoostSijm 5 years ago
parent
commit
0d8f76e8a4
4 changed files with 37 additions and 20 deletions
  1. 9 4
      app/__init__.py
  2. 13 9
      app/__main__.py
  3. 4 4
      app/api.py
  4. 11 3
      app/database.py

+ 9 - 4
app/__init__.py

@@ -14,12 +14,17 @@ from app.models import Base, State, Region, Player
 load_dotenv()
 
 # database
-engine = create_engine(os.environ["DATABASE_URI"], client_encoding='utf8')
-Session = sessionmaker(bind=engine)
+ENGINE = create_engine(os.environ["DATABASE_URI"], client_encoding='utf8')
+SESSION = sessionmaker(bind=ENGINE)
 
 # scheduler
-scheduler = BackgroundScheduler()
-scheduler.start()
+SCHEDULER = BackgroundScheduler(
+    daemon=True,
+    job_defaults={
+    	'misfire_grace_time': 900
+    },
+)
+SCHEDULER.start()
 
 # logging
 logging.basicConfig(

+ 13 - 9
app/__main__.py

@@ -2,9 +2,9 @@
 
 import time
 
-from app import scheduler, LOGGER
+from app import SCHEDULER, LOGGER
 from app.api import get_factories
-from app.database import get_state, save_factories
+from app.database import get_state, get_regions, save_factories
 
 
 def print_factories(factories):
@@ -22,17 +22,20 @@ def job_update_factories(state_id):
     """Update factories"""
     LOGGER.info('Run update factories for state "%s"', state_id)
     state = get_state(state_id)
-    LOGGER.info('"%s": get factories', state.name)
-    factories = get_factories(state.id)
-    LOGGER.info('"%s": "%s" factories', state.name, len(factories))
-    # print_factories(factories)
-    save_factories(state.id, factories)
+    LOGGER.info('"%s": get regions', state.name)
+    regions = get_regions(state.id)
+    for region in regions:
+        LOGGER.info('"%s": get factories', region.name)
+        factories = get_factories(region.id)
+        LOGGER.info('"%s": "%s" factories', region.name, len(factories))
+        print_factories(factories)
+        # save_factories(region.id, factories)
     LOGGER.info('"%s": done saving factories', state.name)
 
 
 def add_update_factories(state_id):
     """Add jobs"""
-    scheduler.add_job(
+    SCHEDULER.add_job(
         job_update_factories,
         'cron',
         args=[state_id],
@@ -42,7 +45,7 @@ def add_update_factories(state_id):
     )
 
 if __name__ == '__main__':
-    # job_update_factories(2788)
+    job_update_factories(2788)
 
     # jobs
     # Verenigde Nederlanden
@@ -57,4 +60,5 @@ if __name__ == '__main__':
             time.sleep(100)
     except KeyboardInterrupt:
         LOGGER.info('Exiting application')
+        SCHEDULER.shutdown()
         exit()

+ 4 - 4
app/api.py

@@ -17,10 +17,10 @@ TYPES = {
     'diamond': 15,
 }
 
-def get_factories(state_id):
+def get_factories(region_id):
     """Get factories from state"""
     # return read_factories()
-    return download_factories(state_id)
+    return download_factories(region_id)
 
 def read_factories():
     """Read factories file"""
@@ -28,14 +28,14 @@ def read_factories():
         factories, more = parse_factories(file)
         return factories
 
-def download_factories(state_id):
+def download_factories(region_id):
     """Download the factories"""
     factories = []
     more = True
     page = 0
     while more:
         response = requests.get(
-            '{}factory/state/{}/0/0/{}'.format(BASE_URL, state_id, page*25),
+            '{}factory/search/{}/0/0/{}'.format(BASE_URL, region_id, page*25),
             headers=HEADERS
         )
         tmp_factories, more = parse_factories(response.text)

+ 11 - 3
app/database.py

@@ -2,20 +2,28 @@
 
 from datetime import datetime
 
-from app import Session
+from app import SESSION
 from app.models import State, Region, Factory, FactoryTrack, FactoryStat, FactoryLocation
 
 
 def get_state(state_id):
     """Get regions from state"""
-    session = Session()
+    session = SESSION()
     state = session.query(State).get(state_id)
     session.close()
     return state
 
+def get_regions(state_id):
+    """Get region from state"""
+    session = SESSION()
+    state = session.query(State).get(state_id)
+    regions = state.regions
+    session.close()
+    return regions
+
 def save_factories(state_id, factories):
     """Save factories to database"""
-    session = Session()
+    session = SESSION()
     session.close()
 
     factory_track = FactoryTrack()