def test_double_tr_ru(self):
     game = Game('Saboteur II')
     file = GameFile('Saboteur II (19xx)(-)[h Crudesoft ru][t][tr ru].tap')
     file.getParamsFromTOSECPath('Saboteur II (19xx)(-)[tr ru Rybkin].tap')
     self.assertEqual(file.mod_flags, '[h Crudesoft ru][t][tr ru Rybkin]')
     file = GameFile(
         'Saboteur II (19xx)(-)[h Crudesoft ru][t][tr ru Rybkin].tap')
     file.getParamsFromTOSECPath('Saboteur II (19xx)(-)[tr ru].tap')
     file.sortModFlags()
     self.assertEqual(file.mod_flags, '[h Crudesoft ru][t][tr ru Rybkin]')
 def test_hashsums(self):
     print(os.getcwd())
     game = Game(zxdb_id=1660)
     game_file = GameFile('\pub\sinclair\games\e\E.T.X..tap.zip', game=game)
     expected_md5 = 'b04c5d9bf88eb5a008696d83eeee69ac'
     self.assertEqual(expected_md5, game_file.getMD5())
     expected_sha1 = 'a879037fd3ba64170e83d4d44652681b1eb097e3'
     self.assertEqual(expected_sha1, game_file.getSHA1())
     expected_crc32 = '3699934d'
     self.assertEqual(expected_crc32, game_file.getCRC32())
 def test_badanov_bug(self):
     file = GameFile('Треугольник.scl')
     self.assertEqual('Треугольник', file.getGameName())
     # file = GameFile('Mini-draiver diskovyh operatsiy.scl')
     # self.assertEqual('Mini-draiver diskovyh operatsiy', file.getGameName())
     file = GameFile('Минидрайвер дисковых операций.scl')
     game_name = file.getGameName()
     self.assertEqual('Минидрайвер дисковых операций', game_name)
     file = GameFile('Мини-драйвер дисковых операций.scl')
     self.assertEqual('Мини-драйвер дисковых операций', file.getGameName())
 def test_set_part(self):
     game_file = GameFile('Test(Part5).tap')
     game_file.setPart('Test(Part5).tap')
     self.assertEqual(game_file.part, 5)
     game_file = GameFile(
         'tosec\fikus-pikus\renamed\Compilations\Demos\[TRD]\Fikus Pikus Demos (19xx)(Flash)(Disk 5 of 140).trd'
     )
     self.assertEqual(game_file.getType(), 'Compilations\\Demos')
     self.assertEqual(game_file.part, 5)
     game_file = GameFile(
         'tosec\fikus-pikus\renamed\Compilations\Demos\[TRD]\Fikus Pikus Demos (19xx)(Flash)(Disk 101 of 140).trd'
     )
     self.assertEqual(game_file.getType(), 'Compilations\\Demos')
     self.assertEqual(game_file.part, 101)
 def test_weird_md5(self):
     game_file = GameFile(
         'ftp/pub/sinclair/utils/3DGameMaker(GraphicEditor3D).tap.zip')
     self.assertTrue(os.path.exists(game_file.getLocalPath()))
     self.assertGreater(len(game_file.getMD5()), 0)
     game_file = GameFile(
         'ftp\zxdb\sinclair\entries\\0030083\DogmoleTuppowski.scl.zip')
     self.assertTrue(os.path.exists(game_file.getLocalPath()))
     self.assertGreater(len(game_file.getMD5()), 0)
 def test_tape_as_part(self):
     file = GameFile(
         'Bridge Master (1983)(Serin Software)(Tape 1 of 2 Side A).tzx')
     self.assertEqual(file.part, 1)
     self.assertEqual(file.side, 1)
     file = GameFile(
         'tosec\Games\[TZX]\Blood of Bogmole, The (1986)(Compass Software)[Master Tape].tap'
     )
     self.assertEqual(file.part, 0)
     file = GameFile(
         'tosec\Games\[TZX]\Blood of Bogmole, The (1986)(Compass Software)(Tape 1).tap'
     )
     self.assertEqual(file.part, 1)
     file = GameFile(
         'tosec\Games\[TZX]\Blood of Bogmole, The (1986)(Compass Software)(Part 2).tap'
     )
     self.assertEqual(file.part, 2)
 def test_game_type(self):
     game_file = GameFile(
         'Sinclair ZX Spectrum\Applications\[TZX]\MGT Plus D - System Tape (1987)(Miles Gordon Technology).tzx'
     )
     game_file.game.genre = 'Hardware - Disk'
     self.assertEqual(game_file.getType(), 'Applications')
     game_file = GameFile(
         'Sinclair ZX Spectrum\Games\[ROM]\Shadow of the Unicorn ROM Loader (2001)(Ross, Fraser)(GB).rom'
     )
     self.assertEqual(game_file.getType(), 'Games')
     game_file = GameFile(
         'C:\ZX Pokemaster\\tosec\\reviewed files\\CSSCGC Games Reviewed\\1997\\Advanced Advocacy Simulator (1997)(Jolly, Derek)[CSSCGC].sna'
     )
     self.assertEqual(game_file.getTOSECDatName(),
                      'Sinclair ZX Spectrum - Games - [SNA]')
     self.assertEqual(game_file.game.getGenre(), 'Various Games')
     self.assertEqual(game_file.getType(), 'Games')
 def test_file_length(self):
     game_file = GameFile(
         "ZX Spectrum+ User Guide Companion Cassette (1984)(Dorling Kindersley)(GB)(es)(Side A).tap"
     )
     game_file.notes = "[aka ZX Spectrum+ GuideCassette De L'Utilisateur][aka ZX Spectrum+ Kaseta sa Uputstvom za Upotrebu][aka ZX Spectrum+ Guia Para el Empleo][aka Cassetta Di Guida Per L'Utente][aka Kilavuz Ve Yardimci Kaset][aka Cassette Bij Handleiding][aka Kassette fur Benutzer][aka Kayttajan Opaskasetti]"
     game_file.alt_dest = game_file.getTOSECName()
     MAX_GAME_NAME_LENGTH = 200
     MAX_DESTINATION_PATH_LENGTH = 200
     if len(game_file.alt_dest) > MAX_DESTINATION_PATH_LENGTH:
         for game_name_length in range(MAX_GAME_NAME_LENGTH,
                                       MIN_GAME_NAME_LENGTH - 10, -10):
             game_file.removeAka()
             game_file.alt_dest = game_file.getTOSECName(
                 game_name_length=game_name_length)
             if len(game_file.alt_dest) <= MAX_DESTINATION_PATH_LENGTH:
                 break
     self.assertLessEqual(len(game_file.alt_dest), 200)
 def test_strip_name_if_no_mod_flags(self):
     pattern = '{GameName} ({Year}) ({Publisher}) ({MachineType}) {ModFlags}'
     game_file = GameFile('Game (19xx)(-).tap')
     output_name = game_file.getOutputName(pattern)
     self.assertEqual(output_name, 'Game (19xx) (-).tap')
     game_file = GameFile('Game (19xx)(-)[m].tap')
     output_name = game_file.getOutputName(pattern)
     self.assertEqual(output_name, 'Game (19xx) (-) [m].tap')
 def scrapeGameFiles(self, game, game_files):
     for i, game_file_info in enumerate(game_files[1:]):
         game_file_info = Selector(game_file_info)
         cells = game_file_info.xpath('//td').extract()
         java_link = Selector(cells[0]).xpath('//a/@title').extract_first()
         file_link = Selector(cells[2]).xpath('//a/@href').extract_first()
         file_size = Selector(cells[3]).xpath('//text()').extract_first()
         game_file = GameFile(file_link, file_size, game)
         if game_file.format not in GAME_EXTENSIONS:
             continue
         if java_link:
             if '128K' in java_link:
                 game.setMachineType('128K')
         game.addFile(game_file)
 def test_getting_info_from_tosec_name(self):
     file = GameFile('Gonzzalezz (1989)(Opera Soft)(es)(Side B).tap')
     self.assertEqual(file.game.name, 'Gonzzalezz')
     self.assertEqual(file.game.getYear(), '1989')
     self.assertEqual(file.game.getPublisher(), 'Opera Soft')
     self.assertEqual(file.getLanguage(), 'es')
     self.assertEqual(file.getSide(), 'Side B')
     file = GameFile('Gonzzalezz.tap')
     self.assertEqual(file.game.name, 'Gonzzalezz')
 def test_mod_flags(self):
     file = GameFile("Test (19xx)(Publisher)[a]")
     self.assertEqual(file.mod_flags, '')
     file = GameFile("Test (19xx)(Publisher)[m]")
     self.assertEqual(file.mod_flags, '[m]')
     file = GameFile("Test (19xx)(Publisher)[a][m][hacked]")
     self.assertEqual(file.mod_flags, '[m]')
     file = GameFile("Test (19xx)(Publisher)[a][h by SKiDROW][m]")
     self.assertEqual(file.mod_flags, '[h by SKiDROW][m]')
     file = GameFile("Test (19xx)(Publisher)[a][re-release]")
     self.assertEqual(file.mod_flags, '')
     file = GameFile("Test (19xx)(Publisher)[t][a]")
     self.assertEqual(file.mod_flags, '[t]')
 def test_preserve_date(self):
     game_file = GameFile('Game (2017-06-06)(Company).tzx')
     tosec_output_name = game_file.getTOSECName()
     self.assertEqual(tosec_output_name, 'Game (2017-06-06)(Company).tzx')
     db = Database()
     game = db.getGameByWosID(30408)
     game_file = GameFile(
         'tosec\itch.io\Games\Robot 1 in... The Ship of Doom (2017-06-18)(Recardo, Mat)(48K-128K).tzx',
         source='tosec')
     game.addFile(game_file)
     self.assertEqual(game_file.release.year, '2017-06-18')
     tosec_output_name = game_file.getTOSECName()
     self.assertEqual(
         tosec_output_name,
         'Robot 1 in... The Ship of Doom (2017-06-18)(Recardo, Mat)(48K-128K).tzx'
     )
 def test_demo(self):
     file = GameFile('A Treat! (demo) (1985)(Firebird Software).tap')
     self.assertEqual(file.game.getPublisher(), 'Firebird')
     self.assertEqual(file.game.getYear(), '1985')
     self.assertEqual(file.game.name, 'A Treat!')
 def test_cascade_games(self):
     file = GameFile('Spectral Skiing (1983)(Cascade Games)[16K].tap')
     self.assertEqual(file.game.publisher, 'Cascade Games')
     self.assertEqual(file.game.getPublisher(), 'Cascade Games')
 def test_notes(self):
     path = 'Sinclair ZX Spectrum\Games\[TAP]\Backpackers Guide to the Universe (1984)(Fantasy Software)[passworded].tap'
     file = GameFile(path)
     self.assertEqual(file.notes, '[passworded]')
     file = GameFile("Test (19xx)(Publisher)[t][a][re-release]")
     self.assertEqual(file.notes, '')
 def test_country(self):
     game_file = GameFile('Game (19xx)(Publisher).tap')
     game_file.release.country = 'GB'
     game_file.language = 'en'
     self.assertEqual(game_file.getTOSECName(),
                      'Game (19xx)(Publisher).tap')
     game_file.release.country = 'CZ'
     game_file.language = 'cz'
     self.assertEqual(game_file.getTOSECName(),
                      'Game (19xx)(Publisher)(CZ).tap')
     game_file.release.country = 'GB'
     game_file.language = 'es'
     self.assertEqual(game_file.getTOSECName(),
                      'Game (19xx)(Publisher)(GB)(es).tap')
     game_file.release.country = 'RU'
     game_file.language = 'en'
     self.assertEqual(game_file.getTOSECName(),
                      'Game (19xx)(Publisher)(RU)(en).tap')
     game_file.release.country = ''
     game_file.language = 'en'
     self.assertEqual(game_file.getTOSECName(),
                      'Game (19xx)(Publisher).tap')
     game_file = GameFile(
         'Sinclair ZX Spectrum\Games\[TAP]\Mihotabpa (19xx)(-)(ru).tap')
     self.assertEqual(game_file.getTOSECName(),
                      'Mihotabpa (19xx)(-)(ru).tap')
     game_file = GameFile(
         'Sinclair ZX Spectrum\Games\[TAP]\Mihotabpa (19xx)(-)(ru)[tr ru].tap'
     )
     self.assertEqual(game_file.getTOSECName(),
                      'Mihotabpa (19xx)(-)[tr ru].tap')
 def test_lord_bromleys_estate(self):
     file = GameFile("007 - Lord Bromley's Estate (1990)(Domark)[cr].tap")
     self.assertEqual(file.game.name, "007 - Lord Bromley's Estate")
     self.assertEqual(file.game.getYear(), '1990')
     self.assertEqual(file.game.getLanguage(), 'en')
     self.assertEqual(file.mod_flags, '[cr]')
 def test_preserve_version(self):
     game_file = GameFile(
         "DreamWalker v1.0 (2014)(RetroSouls)(48K-128K)(RU)(en)[aka Alter Ego 2][aka DreamWalker].tap"
     )
     self.assertEqual(game_file.game.name, 'DreamWalker')
     self.assertEqual(game_file.content_desc, ' v1.0')
Beispiel #20
0
 def fileFromRow(self, row):
     if not row['md5']:
         return None
     file = GameFile()
     if 'wos_name' in row.keys():
         file.wos_name = row['wos_name']
         file.wos_path = row['wos_path']
     if 'tosec_path' in row.keys():
         file.tosec_path = row['tosec_path']
     file.format = row['format']
     file.size = row['size']
     file.content_desc = row['content_desc']
     file.release_date = row['release_date']
     file.is_demo = row['is_demo']
     file.setMachineType(row['file_machine_type'])
     file.part = row['part']
     file.side = row['side']
     file.language = row['file_language']
     file.mod_flags = row['mod_flags']
     file.notes = row['notes']
     file.md5 = row['md5']
     file.crc32 = row['crc32']
     file.sha1 = row['sha1']
     return file
Beispiel #21
0
            file.wos_path = row['wos_path']
        if 'tosec_path' in row.keys():
            file.tosec_path = row['tosec_path']
        file.format = row['format']
        file.size = row['size']
        file.content_desc = row['content_desc']
        file.release_date = row['release_date']
        file.is_demo = row['is_demo']
        file.setMachineType(row['file_machine_type'])
        file.part = row['part']
        file.side = row['side']
        file.language = row['file_language']
        file.mod_flags = row['mod_flags']
        file.notes = row['notes']
        file.md5 = row['md5']
        file.crc32 = row['crc32']
        file.sha1 = row['sha1']
        return file


if __name__ == '__main__':
    os.chdir('..')
    from scripts.restore_db import *
    restoreDB()
    db = Database()
    game_file = GameFile(
        "Sinclair ZX Spectrum\Games\[TAP]\Robin of the Wood (1985)(Odin Computer Graphics).tap"
    )
    game_file.md5 = "f16538ac3cb55bbbb878c42c04b17de5"
    game = db.getGameByFile(game_file)
    print(game)
 def test_adult_game(self):
     game_file = GameFile('Game (19xx)(-).tap')
     game_file.game.x_rated = True
     game_file.alt_mod_flag = '[a]'
     tosec_name = game_file.getTOSECName()
     self.assertEqual(tosec_name, 'Game (19xx)(-)[a][adult].tap')
 def test_bilinguic_file(self):
     game_file = GameFile('Game (19xx)(-)(en-es).tap')
     language = game_file.getLanguage()
     self.assertEqual(language, 'en-es')
 def test_set_country(self):
     game_file = GameFile(
         'Sinclair ZX Spectrum\Demos\[SCL]\#AAABOG (2016)(wbr)(128K)(RU).tap',
         source='tosec')
     self.assertEqual(game_file.release.country, 'RU')
 def test_multipublisher(self):
     file = GameFile('test (19xx)(Your Sinclair - crash - Orion)')
     file.sortPublishers()
     self.assertEqual('crash - Orion - Your Sinclair', file.getPublisher())
 def test_trainer_as_machine_type(self):
     game_file = GameFile(
         'Sinclair ZX Spectrum\Games\[TAP]\Predator (1987)(Activision)[t +2].tap'
     )
     self.assertFalse(game_file.machine_type == '+2')
Beispiel #27
0
 def getGameByFilePath(self, filepath):
     filename = os.path.basename(filepath)
     game_release = re.sub(TOSEC_REGEX, '', filename).strip()
     version = re.findall('v[0-9].*', game_release)
     if version:
         game_release = game_release.replace(version[0], '').strip()
     if self.cache_by_name:
         search_string = getSearchStringFromGameName(game_release)
         games = self.cache_by_name.get(search_string)
         if not games:
             if ' - ' in game_release:
                 search_string = getSearchStringFromGameName(
                     game_release.split(' - ')[0])
                 games = self.cache_by_name.get(search_string)
             elif ' + ' in game_release:
                 search_string = getSearchStringFromGameName(
                     game_release.split(' + ')[0])
                 games = self.cache_by_name.get(search_string)
     else:
         game_release = '%' + '%'.join([
             x for x in game_release.split(' ') if x not in GAME_PREFIXES
         ]) + '%'
         sql = SELECT_GAME_SQL_START
         sql += 'WHERE game.wos_id IN ' \
                '(SELECT wos_id FROM game_release ' \
                'WHERE game_release.name LIKE ?)'
         sql += SELECT_GAME_SQL_END
         raw_data = self.cur.execute(sql, [game_release]).fetchall()
         games = self.getGamesFromRawData(raw_data)
         if not games:
             if '%-%' in game_release:
                 game_release = game_release.split('%-%')[0] + "%"
                 raw_data = self.cur.execute(sql, [game_release]).fetchall()
                 games = self.getGamesFromRawData(raw_data)
             elif '%+%' in game_release:
                 game_release = game_release.split('%+%')[0] + "%"
                 raw_data = self.cur.execute(sql, [game_release]).fetchall()
                 games = self.getGamesFromRawData(raw_data)
     if not games:
         return None
     game_file = GameFile(filepath)
     if len(games) == 1:
         game = games[0]
         for release in game.releases:
             if release.getYear() == game_file.game.getYear():
                 return game
             release_publisher = getSearchStringFromGameName(
                 release.getPublisher())
             game_file_publisher = getSearchStringFromGameName(
                 game_file.game.getPublisher())
             if release_publisher == game_file_publisher:
                 return game
     candidates = []
     for game in games:
         for release in game.releases:
             release_publisher = getSearchStringFromGameName(
                 release.getPublisher())
             game_file_publisher = getSearchStringFromGameName(
                 game_file.game.getPublisher())
             if game_file_publisher in release_publisher:
                 candidates.append(game)
     if len(candidates) == 1:
         return candidates[0]
     else:
         for game in candidates:
             for release in game.releases:
                 if release.getYear() == game_file.game.getYear():
                     return game
     return None
 def test_language_detection(self):
     game_file = GameFile('Three Octopuses (2017)(kas29)(RU).tap')
     self.assertEqual(game_file.getLanguage(), 'ru')
Beispiel #29
0
    def gameFileFromRow(self, row, game):
        game_file = GameFile(row['file_link'], game=game, source='wos')
        game_file.size_zipped = row['file_size']
        game_file.setMachineType(row['machine_type'])
        game_file.setProtectionScheme(row['protection_scheme'])
        if row['file_language']:
            if row['file_language'] in IDIOM_IDS_TO_TOSEC_LANGS:
                game_file.setLanguage(
                    IDIOM_IDS_TO_TOSEC_LANGS[row['file_language']])
            else:
                game_file.setLanguage(row['file_language'])
        if row['file_version'] and row['file_version'].lower().startswith('v') \
                and row['file_version'][1].isdigit():
            game_file.content_desc = ' ' + remove_brackets_regex.sub(
                '', row['file_version']).strip()

        return game_file
 def test_dot_in_game_name(self):
     game = Game('H.E.R.O.')
     file = GameFile('H.E.R.O. (19xx)(-).tap')
     file.game = game
     self.assertEqual(file.getTOSECName(), 'H.E.R.O. (19xx)(-).tap')