浏览代码

Finish first version of the application

JoostSijm 5 年之前
父节点
当前提交
5128b08b17
共有 4 个文件被更改,包括 93 次插入43 次删除
  1. 2 1
      app/__init__.py
  2. 38 15
      app/__main__.py
  3. 13 12
      app/api.py
  4. 40 15
      app/database.py

+ 2 - 1
app/__init__.py

@@ -13,8 +13,9 @@ from app.models import Base, Player, State, Department, DepartmentStat
 load_dotenv()
 
 # database
-engine = create_engine(os.environ["DATABASE_URI"])
+engine = create_engine(os.environ["DATABASE_URI"], client_encoding='utf8')
 Session = sessionmaker(bind=engine)
+session = Session()
 
 # scheduler
 scheduler = BackgroundScheduler()

+ 38 - 15
app/__main__.py

@@ -1,20 +1,21 @@
 """Main app"""
 
-from datetime import datetime, timedelta
-import random
 import time
 
-from app import scheduler
+from app import scheduler, session
 from app.api import get_professors
 from app.database import get_latest_professor, save_professors
 
 
 def job_update_department(state_id, department_type):
     """Update department professors"""
-    # last_professor = get_last_professor(state_id, department_type)
-    professors = get_professors(state_id, department_type, None)
+    latest_professor = get_latest_professor(state_id, department_type)
+    date = None
+    if latest_professor:
+        date = latest_professor.date_time
+    professors = get_professors(state_id, department_type, date)
     print_professors(professors)
-    # save_professors(state_id, department_type, professors)
+    save_professors(state_id, department_type, professors)
 
 def print_professors(professors):
     """Print professors"""
@@ -22,21 +23,43 @@ def print_professors(professors):
         print('{:30} {:2} {:>25}'.format(
             professor['name'],
             professor['points'],
-            professor['date'].strftime('%d %B %Y %H:%M'),
+            professor['date_time'].strftime('%d %B %Y %H:%M'),
         ))
 
-
-if __name__ == '__main__':
-    # jobs
-    job_update_department(2788, 6)
+def add_update_department(state_id, department_type):
+    """Add jobs"""
     scheduler.add_job(
         job_update_department,
         'cron',
-        args=[2788, 6],
-        id='vn_update_department',
+        args=[state_id, department_type],
+        id='{}_{}'.format(state_id, department_type),
         replace_existing=True,
         hour='20'
     )
 
-    while True:
-        time.sleep(100)
+if __name__ == '__main__':
+    # jobs
+    # job_update_department(2788, 6)
+    # VN
+    # uranium
+    job_update_department(2788, 6)
+    # gold
+    job_update_department(2788, 2)
+    # construction
+    job_update_department(2788, 1)
+    # oil
+    job_update_department(2788, 3)
+    # Belgium
+    # gold
+    job_update_department(2604, 2)
+    # De Provincien
+    # gold
+    job_update_department(2620, 2)
+
+    try:
+        while True:
+            time.sleep(100)
+    except KeyboardInterrupt:
+        print('Exiting application')
+        session.close()
+        exit()

+ 13 - 12
app/api.py

@@ -14,17 +14,20 @@ def get_professors(state_id, department_type, start_date):
     not_reached_date = True
     page = 0
     while not_reached_date:
-        # tmp_professors = download_department(state_id, department_type, page)
-        tmp_professors = read_department()
+        tmp_professors = download_department(state_id, department_type, page)
+        if not tmp_professors:
+            not_reached_date = False
+            break
+        # tmp_professors = read_department()
         for professor in tmp_professors:
-            if start_date is not None: # and start_date >=:
+            if start_date is not None and professor['date_time'] <= start_date:
                 not_reached_date = False
                 break
             professors.append(professor)
 
         page += 1
-        break
 
+    professors.reverse()
     return professors
 
 def download_department(state_id, department_type, page):
@@ -53,12 +56,10 @@ def parse_department(html):
         date = date.replace('Today ', today)
         date = date.replace('Yesterday ', yesterday)
         datetime.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')
-        professors.append(
-            {
-                'id': int(professor_tree['user']),
-                'name': re.sub(r'\s\(.*$', '', columns[1].string),
-                'points': int(re.sub(r'^.*\(\+|\)$', '', columns[1].string)),
-                'date': datetime.strptime(date, '%d %B %Y %H:%M'),
-            }
-        )
+        professors.append({
+            'id': int(re.sub(r'^.*\/', '', columns[1]['action'])),
+            'name': re.sub(r'\s\(.*$', '', columns[1].string),
+            'points': int(re.sub(r'^.*\(\+|\)$', '', columns[1].string)),
+            'date_time': datetime.strptime(date, '%d %B %Y %H:%M'),
+        })
     return professors

+ 40 - 15
app/database.py

@@ -1,26 +1,51 @@
 """Database module"""
 
-from app import Session
-from app.models import Player, State, Department, DepartmentStat
+from app import session
+from app.models import Player, Department, DepartmentStat
 
 
 def get_latest_professor(state_id, department_type):
     """Get latest professor from database"""
-    return None
+    department = get_department(state_id, department_type)
+    professor = department.department_stats.order_by(DepartmentStat.date_time.desc()).first()
+    return professor
+
+def get_player(player_id, player_name):
+    """Get player from database"""
+    player = session.query(Player).get(player_id)
+    if player is None:
+        player = Player()
+        player.id = player_id
+        player.name = player_name
+        session.add(player)
+        session.commit()
+    return player
+
+def get_department(state_id, department_type):
+    """Get department from database"""
+    department = session.query(Department).filter(
+        Department.state_id == state_id
+    ).filter(
+        Department.department_type == department_type
+    ).first()
+    if department is None:
+        department = Department()
+        department.state_id = state_id
+        department.department_type = department_type
+        session.add(department)
+        session.commit()
+    return department
 
 def save_professors(state_id, department_type, professors):
     """Save professors to database"""
-    session = Session()
-    resource_track.state_id = state_id
-    resource_track.resource_id = resource_id
-    session.add(resource_track)
-    session.commit()
+    department = get_department(state_id, department_type)
 
-    for region_id, region in regions.items():
-        resource_stat = ResourceStat()
-        resource_stat.region_id = region_id
-        resource_stat.explored = region['explored']
-        resource_stat.deep_exploration = region['deep_exploration']
-        resource_stat.limit_left = region['limit_left']
-        session.add(resource_stat)
+    for professor in professors:
+        player = get_player(professor['id'], professor['name'])
+        department_stat = DepartmentStat()
+        department_stat.department_id = department.id
+        department_stat.date_time = professor['date_time']
+        department_stat.points = professor['points']
+        department_stat.player_id = player.id
+        session.add(department_stat)
     session.commit()