Example #1
0
    def add_test_data_to_db():
        """Adds test data to the database, create_db must be called first.
        """
        ships = [
            {'name': 'Achilles', 'sh_class': 'Leander', 'type': 'Light Cruiser', 'country': 'NZL',
             'build_date': '1000-01-01'},
            {'name': 'Admiral Graf Spee', 'sh_class': 'Deutschland', 'type': 'Heavy Cruiser',
             'country': 'GER', 'build_date': '1000-01-01'},
            {'name': 'Cumberland', 'sh_class': 'County-Kent', 'type': 'Heavy Cruiser',
             'country': 'UK', 'build_date': '1000-01-01'},
            {'name': 'Exeter', 'sh_class': 'York', 'type': 'Heavy Cruiser', 'country': 'UK',
             'build_date': '1000-01-01'},
            {'name': 'Ajax', 'sh_class': 'Leander', 'type': 'Light Cruiser', 'country': 'UK',
             'build_date': '1000-01-01'}
        ]

        battles = [
            {'name': 'River Platte', 'conflict': 'WWII', 'date': '1939-12-13'},
            {'name': 'Battle of the Java Sea', 'conflict': 'WWII', 'date': '1942-02-27'}
        ]

        with models.database.atomic():
            Ship.insert_many(ships).execute()
            Battle.insert_many(battles).execute()

            river_platte = Battle.select().where(Battle.name == 'River Platte').get()
            java_sea = Battle.select().where(Battle.name == 'Battle of the Java Sea').get()

            for ship in Ship.select():
                if ship.name == 'Ajax':
                    ShipBattle.create(ship=ship, battle=java_sea)
                ShipBattle.create(ship=ship, battle=river_platte)
        models.database.close()
 def write_logs_in_file(self, log_file):
     today = datetime.date.today()
     date_from = today - datetime.timedelta(days=31)
     battles = Battle.select().filter(
         Battle.happened_at >= date_from).order_by(
             Battle.happened_at.desc())
     rows = [
         ('Дата сражения', 'Продолжительность (шагов игры)',
          'Первый результат', 'Второй результат', 'Третий результат',
          'Четвертый результат'),
         [
             '---',
         ] * 6,
     ]
     for battle in battles:
         battle_result = json.loads(battle.result)
         collected = list(battle_result['collected'].items())
         collected.sort(key=lambda x: -x[1])
         dead = battle_result.get('dead')
         cells = [
             battle.happened_at.strftime('%Y-%m-%d %H:%M:%S'),
             str(battle_result['game_steps']),
         ]
         for student, result in collected:
             cell = f'{result} - {student}'
             if dead and dead[student]:
                 cell += ' /dead/'
             cells.append(cell)
         rows.append(cells)
     with open(log_file, 'w') as table:
         table.write(
             f"##### Результаты соревнований с {date_from.strftime('%d.%m.%Y')} "
             f"по {today.strftime('%d.%m.%Y')}\n\n")
         for row in rows:
             table.write('{}\n'.format(' | '.join(row)))
Example #3
0
 def test_reset_db_message(self, create_db, clean_up):
     db_creator = DbCreatorActor.start(self._db_path)
     db_creator.tell(PopulateDbMessage(None).to_dict())
     db_creator.ask(ResetDbMessage(None).to_dict())
     assert len(Ship.select()) == 0
     assert len(Battle.select()) == 0
     assert len(ShipBattle.select()) == 0
     db_creator.stop()
     clean_up()
Example #4
0
 def test_populate_db_message(self, create_db, clean_up):
     db_creator = DbCreatorActor.start(self._db_path)
     db_creator.ask(PopulateDbMessage(None).to_dict())
     assert self._db_path.exists()
     assert len(Ship.select()) == 5
     assert len(Battle.select()) == 2
     assert len(ShipBattle.select()) == 6
     db_creator.stop()
     clean_up()