# To build out the data you'll need to jump into the Django shell # # $ python manage.py shell # # and run the build script with # # $ from data.v2.build import build_all # $ build_all() # # Each time the build script is run it will iterate over each table in the database, # wipe it and rewrite each row using the data found in data/v2/csv. import csv import os import os.path import re import json from django.db import connection from pokemon_v2.models import * # why this way? how about use `__file__` DATA_LOCATION = "data/v2/csv/" DATA_LOCATION2 = os.path.join(os.path.dirname(__file__), "csv") GROUP_RGX = r"\[(.*?)\]\{(.*?)\}" SUB_RGX = r"\[.*?\]\{.*?\}" DB_CURSOR = connection.cursor() DB_VENDOR = connection.vendor MEDIA_DIR = "{prefix}{{file_name}}".format( prefix=os.environ.get( "POKEAPI_SPRITES_PREFIX", "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/", ) ) SOUND_DIR = "{prefix}{{file_name}}".format( prefix=os.environ.get( "POKEAPI_CRIES_PREFIX", "https://raw.githubusercontent.com/PokeAPI/cries/main/cries/", ) ) IMAGE_DIR = os.getcwd() + "/data/v2/sprites/sprites/" CRIES_DIR = os.getcwd() + "/data/v2/cries/cries/" RESOURCE_IMAGES = [] RESOURCE_CRIES = [] for root, dirs, files in os.walk(IMAGE_DIR): for file in files: image_path = os.path.join(root.replace(IMAGE_DIR, ""), file) image_path = image_path.replace("\\", "/") # convert Windows-style path to Unix RESOURCE_IMAGES.append(image_path) for root, dirs, files in os.walk(CRIES_DIR): for file in files: cry_path = os.path.join(root.replace(CRIES_DIR, ""), file) cry_path = cry_path.replace("\\", "/") # convert Windows-style path to Unix RESOURCE_CRIES.append(cry_path) def file_path_or_none(file_name, image_file=True): if not image_file: return ( SOUND_DIR.format(file_name=file_name) if file_name in RESOURCE_CRIES else None ) return ( MEDIA_DIR.format(file_name=file_name) if file_name in RESOURCE_IMAGES else None ) def with_iter(context, iterable=None): if iterable is None: iterable = context with context: for value in iterable: yield value def load_data(file_name): # with_iter closes the file when it has finished return csv.reader( with_iter(open(DATA_LOCATION + file_name, "rt", encoding="utf8")), delimiter="," ) def clear_table(model): table_name = model._meta.db_table model.objects.all().delete() print("building " + table_name) # Reset DB auto increments to start at 1 if DB_VENDOR == "sqlite": DB_CURSOR.execute( "DELETE FROM sqlite_sequence WHERE name = " + "'" + table_name + "'" ) else: DB_CURSOR.execute( "SELECT setval(pg_get_serial_sequence(" + "'" + table_name + "'" + ",'id'), 1, false);" ) def build_generic(model_classes, file_name, csv_record_to_objects): batches = {} for model_class in model_classes: clear_table(model_class) batches[model_class] = [] # one batch per model class csv_data = load_data(file_name) next(csv_data, None) # skip header for csv_record in csv_data: for obj in csv_record_to_objects(csv_record): model_class = type(obj) batches[model_class].append(obj) # Limit the batch size if len(batches[model_class]) > 200: model_class.objects.bulk_create(batches[model_class]) batches[model_class] = [] for model_class, batch in batches.items(): model_class.objects.bulk_create(batch) def scrub_str(string): """ The purpose of this function is to scrub the weird template mark-up out of strings that Veekun is using for their pokedex. Example: []{move:dragon-tail} will effect the opponents [HP]{mechanic:hp}. Becomes: dragon tail will effect the opponents HP. If you find this results in weird strings please take a stab at improving or re-writing. """ groups = re.findall(GROUP_RGX, string) for group in groups: if group[0]: sub = group[0] else: sub = group[1].split(":") if len(sub) >= 2: sub = sub[1] else: sub = sub[0] sub = sub.replace("-", " ") string = re.sub(SUB_RGX, sub, string, 1) return string ############## # LANGUAGE # ############## def _build_languages(): def csv_record_to_objects(info): yield Language( id=int(info[0]), iso639=info[1], iso3166=info[2], name=info[3], official=bool(int(info[4])), order=info[5], ) build_generic((Language,), "languages.csv", csv_record_to_objects) def csv_record_to_objects(info): yield LanguageName( language_id=int(info[0]), local_language_id=int(info[1]), name=info[2] ) build_generic((LanguageName,), "language_names.csv", csv_record_to_objects) ############ # REGION # ############ def _build_regions(): def csv_record_to_objects(info): yield Region(id=int(info[0]), name=info[1]) build_generic((Region,), "regions.csv", csv_record_to_objects) def csv_record_to_objects(info): yield RegionName(region_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((RegionName,), "region_names.csv", csv_record_to_objects) ################ # GENERATION # ################ def _build_generations(): def csv_record_to_objects(info): yield Generation(id=int(info[0]), region_id=int(info[1]), name=info[2]) build_generic((Generation,), "generations.csv", csv_record_to_objects) def csv_record_to_objects(info): yield GenerationName( generation_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic((GenerationName,), "generation_names.csv", csv_record_to_objects) ############# # VERSION # ############# def _build_versions(): def csv_record_to_objects(info): yield VersionGroup( id=int(info[0]), name=info[1], generation_id=int(info[2]), order=int(info[3]), ) build_generic((VersionGroup,), "version_groups.csv", csv_record_to_objects) def csv_record_to_objects(info): yield VersionGroupRegion(version_group_id=int(info[0]), region_id=int(info[1])) build_generic( (VersionGroupRegion,), "version_group_regions.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield Version(id=int(info[0]), version_group_id=int(info[1]), name=info[2]) build_generic((Version,), "versions.csv", csv_record_to_objects) def csv_record_to_objects(info): yield VersionName( version_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic((VersionName,), "version_names.csv", csv_record_to_objects) ################## # DAMAGE CLASS # ################## def _build_damage_classes(): def csv_record_to_objects(info): yield MoveDamageClass(id=int(info[0]), name=info[1]) build_generic((MoveDamageClass,), "move_damage_classes.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveDamageClassName( move_damage_class_id=int(info[0]), language_id=int(info[1]), name=info[2] ) yield MoveDamageClassDescription( move_damage_class_id=int(info[0]), language_id=int(info[1]), description=info[3], ) build_generic( (MoveDamageClassName, MoveDamageClassDescription), "move_damage_class_prose.csv", csv_record_to_objects, ) ########### # STATS # ########### def _build_stats(): def csv_record_to_objects(info): yield Stat( id=int(info[0]), move_damage_class_id=int(info[1]) if info[1] != "" else None, name=info[2], is_battle_only=bool(int(info[3])), game_index=int(info[4]) if info[4] else 0, ) build_generic((Stat,), "stats.csv", csv_record_to_objects) def csv_record_to_objects(info): yield StatName(stat_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((StatName,), "stat_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokeathlonStat(id=int(info[0]), name=info[1]) build_generic((PokeathlonStat,), "pokeathlon_stats.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokeathlonStatName( pokeathlon_stat_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic( (PokeathlonStatName,), "pokeathlon_stat_names.csv", csv_record_to_objects ) # ############### # # ABILITIES # # ############### def _build_abilities(): def csv_record_to_objects(info): yield Ability( id=int(info[0]), name=info[1], generation_id=int(info[2]), is_main_series=bool(int(info[3])), ) build_generic((Ability,), "abilities.csv", csv_record_to_objects) def csv_record_to_objects(info): yield AbilityName( ability_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic((AbilityName,), "ability_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield AbilityChange( id=int(info[0]), ability_id=int(info[1]), version_group_id=int(info[2]) ) build_generic((AbilityChange,), "ability_changelog.csv", csv_record_to_objects) def csv_record_to_objects(info): yield AbilityEffectText( ability_id=int(info[0]), language_id=int(info[1]), short_effect=scrub_str(info[2]), effect=scrub_str(info[3]), ) build_generic((AbilityEffectText,), "ability_prose.csv", csv_record_to_objects) def csv_record_to_objects(info): yield AbilityChangeEffectText( ability_change_id=int(info[0]), language_id=int(info[1]), effect=scrub_str(info[2]), ) build_generic( (AbilityChangeEffectText,), "ability_changelog_prose.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield AbilityFlavorText( ability_id=int(info[0]), version_group_id=int(info[1]), language_id=int(info[2]), flavor_text=info[3], ) build_generic( (AbilityFlavorText,), "ability_flavor_text.csv", csv_record_to_objects ) #################### # CHARACTERISTIC # #################### def _build_characteristics(): def csv_record_to_objects(info): yield Characteristic( id=int(info[0]), stat_id=int(info[1]), gene_mod_5=int(info[2]) ) build_generic((Characteristic,), "characteristics.csv", csv_record_to_objects) def csv_record_to_objects(info): yield CharacteristicDescription( characteristic_id=int(info[0]), language_id=int(info[1]), description=info[2], ) build_generic( (CharacteristicDescription,), "characteristic_text.csv", csv_record_to_objects ) ############### # EGG GROUP # ############### def _build_egg_groups(): def csv_record_to_objects(info): yield EggGroup(id=int(info[0]), name=info[1]) build_generic((EggGroup,), "egg_groups.csv", csv_record_to_objects) def csv_record_to_objects(info): yield EggGroupName( egg_group_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic((EggGroupName,), "egg_group_prose.csv", csv_record_to_objects) ################# # GROWTH RATE # ################# def _build_growth_rates(): def csv_record_to_objects(info): yield GrowthRate(id=int(info[0]), name=info[1], formula=info[2]) build_generic((GrowthRate,), "growth_rates.csv", csv_record_to_objects) def csv_record_to_objects(info): yield GrowthRateDescription( growth_rate_id=int(info[0]), language_id=int(info[1]), description=info[2] ) build_generic( (GrowthRateDescription,), "growth_rate_prose.csv", csv_record_to_objects ) # ########### # # ITEMS # # ########### def _build_items(): def csv_record_to_objects(info): yield ItemPocket(id=int(info[0]), name=info[1]) build_generic((ItemPocket,), "item_pockets.csv", csv_record_to_objects) def csv_record_to_objects(info): yield ItemPocketName( item_pocket_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic((ItemPocketName,), "item_pocket_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield ItemFlingEffect(id=int(info[0]), name=info[1]) build_generic((ItemFlingEffect,), "item_fling_effects.csv", csv_record_to_objects) def csv_record_to_objects(info): yield ItemFlingEffectEffectText( item_fling_effect_id=int(info[0]), language_id=int(info[1]), effect=scrub_str(info[2]), ) build_generic( (ItemFlingEffectEffectText,), "item_fling_effect_prose.csv", csv_record_to_objects, ) def csv_record_to_objects(info): yield ItemCategory(id=int(info[0]), item_pocket_id=int(info[1]), name=info[2]) build_generic((ItemCategory,), "item_categories.csv", csv_record_to_objects) def csv_record_to_objects(info): yield ItemCategoryName( item_category_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic((ItemCategoryName,), "item_category_prose.csv", csv_record_to_objects) def csv_record_to_objects(info): yield Item( id=int(info[0]), name=info[1], item_category_id=int(info[2]), cost=int(info[3]), fling_power=int(info[4]) if info[4] != "" else None, item_fling_effect_id=int(info[5]) if info[5] != "" else None, ) build_generic((Item,), "items.csv", csv_record_to_objects) def csv_record_to_objects(info): if re.search(r"^data-card", info[1]): file_name = "data-card.png" elif re.search(r"^tm[0-9]", info[1]): file_name = "tm-normal.png" elif re.search(r"^hm[0-9]", info[1]): file_name = "hm-normal.png" else: file_name = "%s.png" % info[1] item_sprites = "items/{0}" sprites = {"default": file_path_or_none(item_sprites.format(file_name))} yield ItemSprites(id=int(info[0]), item_id=int(info[0]), sprites=sprites) build_generic((ItemSprites,), "items.csv", csv_record_to_objects) def csv_record_to_objects(info): yield ItemName(item_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((ItemName,), "item_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield ItemEffectText( item_id=int(info[0]), language_id=int(info[1]), short_effect=scrub_str(info[2]), effect=scrub_str(info[3]), ) build_generic((ItemEffectText,), "item_prose.csv", csv_record_to_objects) def csv_record_to_objects(info): yield ItemGameIndex( item_id=int(info[0]), generation_id=int(info[1]), game_index=int(info[2]) ) build_generic((ItemGameIndex,), "item_game_indices.csv", csv_record_to_objects) def csv_record_to_objects(info): yield ItemFlavorText( item_id=int(info[0]), version_group_id=int(info[1]), language_id=int(info[2]), flavor_text=info[3], ) build_generic((ItemFlavorText,), "item_flavor_text.csv", csv_record_to_objects) def csv_record_to_objects(info): yield ItemAttribute(id=int(info[0]), name=info[1]) build_generic((ItemAttribute,), "item_flags.csv", csv_record_to_objects) def csv_record_to_objects(info): yield ItemAttributeName( item_attribute_id=int(info[0]), language_id=int(info[1]), name=info[2] ) yield ItemAttributeDescription( item_attribute_id=int(info[0]), language_id=int(info[1]), description=info[3], ) build_generic( (ItemAttributeName, ItemAttributeDescription), "item_flag_prose.csv", csv_record_to_objects, ) def csv_record_to_objects(info): yield ItemAttributeMap(item_id=int(info[0]), item_attribute_id=int(info[1])) build_generic((ItemAttributeMap,), "item_flag_map.csv", csv_record_to_objects) ########### # TYPES # ########### def _build_types(): def csv_record_to_objects(info): yield Type( id=int(info[0]), name=info[1], generation_id=int(info[2]), move_damage_class_id=int(info[3]) if info[3] != "" else None, ) build_generic((Type,), "types.csv", csv_record_to_objects) def csv_record_to_objects(info): yield TypeName(type_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((TypeName,), "type_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield TypeGameIndex( type_id=int(info[0]), generation_id=int(info[1]), game_index=int(info[2]) ) build_generic((TypeGameIndex,), "type_game_indices.csv", csv_record_to_objects) def csv_record_to_objects(info): yield TypeEfficacy( damage_type_id=int(info[0]), target_type_id=int(info[1]), damage_factor=int(info[2]), ) build_generic((TypeEfficacy,), "type_efficacy.csv", csv_record_to_objects) def csv_record_to_objects(info): yield TypeEfficacyPast( damage_type_id=int(info[0]), target_type_id=int(info[1]), damage_factor=int(info[2]), generation_id=int(info[3]), ) build_generic((TypeEfficacyPast,), "type_efficacy_past.csv", csv_record_to_objects) ############# # CONTEST # ############# def _build_contests(): def csv_record_to_objects(info): yield ContestType(id=int(info[0]), name=info[1]) build_generic((ContestType,), "contest_types.csv", csv_record_to_objects) def csv_record_to_objects(info): yield ContestTypeName( contest_type_id=int(info[0]), language_id=int(info[1]), name=info[2], flavor=info[3], color=info[4], ) build_generic((ContestTypeName,), "contest_type_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield ContestEffect(id=int(info[0]), appeal=int(info[1]), jam=int(info[2])) build_generic((ContestEffect,), "contest_effects.csv", csv_record_to_objects) def csv_record_to_objects(info): yield ContestEffectEffectText( contest_effect_id=int(info[0]), language_id=int(info[1]), effect=info[3] ) yield ContestEffectFlavorText( contest_effect_id=int(info[0]), language_id=int(info[1]), flavor_text=info[2], ) build_generic( (ContestEffectEffectText, ContestEffectFlavorText), "contest_effect_prose.csv", csv_record_to_objects, ) def csv_record_to_objects(info): yield SuperContestEffect(id=int(info[0]), appeal=int(info[1])) build_generic( (SuperContestEffect,), "super_contest_effects.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield SuperContestEffectFlavorText( super_contest_effect_id=int(info[0]), language_id=int(info[1]), flavor_text=info[2], ) build_generic( (SuperContestEffectFlavorText,), "super_contest_effect_prose.csv", csv_record_to_objects, ) ########### # MOVES # ########### def _build_moves(): def csv_record_to_objects(info): yield MoveEffect(id=int(info[0])) build_generic((MoveEffect,), "move_effects.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveEffectEffectText( move_effect_id=int(info[0]), language_id=int(info[1]), short_effect=scrub_str(info[2]), effect=scrub_str(info[3]), ) build_generic( (MoveEffectEffectText,), "move_effect_prose.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield MoveEffectChange( id=int(info[0]), move_effect_id=int(info[1]), version_group_id=int(info[2]) ) build_generic( (MoveEffectChange,), "move_effect_changelog.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield MoveEffectChangeEffectText( move_effect_change_id=int(info[0]), language_id=int(info[1]), effect=scrub_str(info[2]), ) build_generic( (MoveEffectChangeEffectText,), "move_effect_changelog_prose.csv", csv_record_to_objects, ) def csv_record_to_objects(info): yield MoveLearnMethod(id=int(info[0]), name=info[1]) build_generic((MoveLearnMethod,), "pokemon_move_methods.csv", csv_record_to_objects) def csv_record_to_objects(info): yield VersionGroupMoveLearnMethod( version_group_id=int(info[0]), move_learn_method_id=int(info[1]) ) build_generic( (VersionGroupMoveLearnMethod,), "version_group_pokemon_move_methods.csv", csv_record_to_objects, ) def csv_record_to_objects(info): yield MoveLearnMethodName( move_learn_method_id=int(info[0]), language_id=int(info[1]), name=info[2] ) yield MoveLearnMethodDescription( move_learn_method_id=int(info[0]), language_id=int(info[1]), description=info[3], ) build_generic( (MoveLearnMethodName, MoveLearnMethodDescription), "pokemon_move_method_prose.csv", csv_record_to_objects, ) def csv_record_to_objects(info): yield MoveTarget(id=int(info[0]), name=info[1]) build_generic((MoveTarget,), "move_targets.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveTargetName( move_target_id=int(info[0]), language_id=int(info[1]), name=info[2] ) yield MoveTargetDescription( move_target_id=int(info[0]), language_id=int(info[1]), description=info[3] ) build_generic( (MoveTargetName, MoveTargetDescription), "move_target_prose.csv", csv_record_to_objects, ) def csv_record_to_objects(info): yield Move( id=int(info[0]), name=info[1], generation_id=int(info[2]), type_id=int(info[3]), power=int(info[4]) if info[4] != "" else None, pp=int(info[5]) if info[5] != "" else None, accuracy=int(info[6]) if info[6] != "" else None, priority=int(info[7]) if info[7] != "" else None, move_target_id=int(info[8]) if info[8] != "" else None, move_damage_class_id=int(info[9]) if info[9] != "" else None, move_effect_id=int(info[10]) if info[10] != "" else None, move_effect_chance=int(info[11]) if info[11] != "" else None, contest_type_id=int(info[12]) if info[12] != "" else None, contest_effect_id=int(info[13]) if info[13] != "" else None, super_contest_effect_id=int(info[14]) if info[14] != "" else None, ) build_generic((Move,), "moves.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveName(move_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((MoveName,), "move_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveFlavorText( move_id=int(info[0]), version_group_id=int(info[1]), language_id=int(info[2]), flavor_text=info[3], ) build_generic((MoveFlavorText,), "move_flavor_text.csv", csv_record_to_objects) def csv_record_to_objects(info): _move_effect = None try: _move_effect = ( MoveEffect.objects.get(pk=int(info[6])) if info[6] != "" else None ) except: pass yield MoveChange( move_id=int(info[0]), version_group_id=int(info[1]), type_id=int(info[2]) if info[2] != "" else None, power=int(info[3]) if info[3] != "" else None, pp=int(info[4]) if info[4] != "" else None, accuracy=int(info[5]) if info[5] != "" else None, move_effect_id=_move_effect.pk if _move_effect else None, move_effect_chance=int(info[7]) if info[7] != "" else None, ) build_generic((MoveChange,), "move_changelog.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveBattleStyle(id=int(info[0]), name=info[1]) build_generic((MoveBattleStyle,), "move_battle_styles.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveBattleStyleName( move_battle_style_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic( (MoveBattleStyleName,), "move_battle_style_prose.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield MoveAttribute(id=int(info[0]), name=info[1]) build_generic((MoveAttribute,), "move_flags.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveAttributeMap(move_id=int(info[0]), move_attribute_id=int(info[1])) build_generic((MoveAttributeMap,), "move_flag_map.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveAttributeName( move_attribute_id=int(info[0]), language_id=int(info[1]), name=info[2] ) yield MoveAttributeDescription( move_attribute_id=int(info[0]), language_id=int(info[1]), description=scrub_str(info[3]), ) build_generic( (MoveAttributeName, MoveAttributeDescription), "move_flag_prose.csv", csv_record_to_objects, ) def csv_record_to_objects(info): yield MoveMetaAilment(id=int(info[0]), name=info[1]) build_generic((MoveMetaAilment,), "move_meta_ailments.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveMetaAilmentName( move_meta_ailment_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic( (MoveMetaAilmentName,), "move_meta_ailment_names.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield MoveMetaCategory(id=int(info[0]), name=info[1]) build_generic( (MoveMetaCategory,), "move_meta_categories.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield MoveMetaCategoryDescription( move_meta_category_id=int(info[0]), language_id=int(info[1]), description=info[2], ) build_generic( (MoveMetaCategoryDescription,), "move_meta_category_prose.csv", csv_record_to_objects, ) def csv_record_to_objects(info): yield MoveMeta( move_id=int(info[0]), move_meta_category_id=int(info[1]), move_meta_ailment_id=int(info[2]), min_hits=int(info[3]) if info[3] != "" else None, max_hits=int(info[4]) if info[4] != "" else None, min_turns=int(info[5]) if info[5] != "" else None, max_turns=int(info[6]) if info[6] != "" else None, drain=int(info[7]) if info[7] != "" else None, healing=int(info[8]) if info[8] != "" else None, crit_rate=int(info[9]) if info[9] != "" else None, ailment_chance=int(info[10]) if info[10] != "" else None, flinch_chance=int(info[11]) if info[11] != "" else None, stat_chance=int(info[12]) if info[12] != "" else None, ) build_generic((MoveMeta,), "move_meta.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveMetaStatChange( move_id=int(info[0]), stat_id=int(info[1]), change=int(info[2]) ) build_generic( (MoveMetaStatChange,), "move_meta_stat_changes.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield ContestCombo(first_move_id=int(info[0]), second_move_id=int(info[1])) build_generic((ContestCombo,), "contest_combos.csv", csv_record_to_objects) def csv_record_to_objects(info): yield SuperContestCombo(first_move_id=int(info[0]), second_move_id=int(info[1])) build_generic( (SuperContestCombo,), "super_contest_combos.csv", csv_record_to_objects ) ############# # BERRIES # ############# def _build_berries(): def csv_record_to_objects(info): yield BerryFirmness(id=int(info[0]), name=info[1]) build_generic((BerryFirmness,), "berry_firmness.csv", csv_record_to_objects) def csv_record_to_objects(info): yield BerryFirmnessName( berry_firmness_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic( (BerryFirmnessName,), "berry_firmness_names.csv", csv_record_to_objects ) def csv_record_to_objects(info): item = Item.objects.get(pk=int(info[1])) yield Berry( id=int(info[0]), item_id=int(info[1]), name=item.name[: item.name.index("-")], berry_firmness_id=int(info[2]), natural_gift_power=int(info[3]), natural_gift_type_id=int(info[4]), size=int(info[5]), max_harvest=int(info[6]), growth_time=int(info[7]), soil_dryness=int(info[8]), smoothness=int(info[9]), ) build_generic((Berry,), "berries.csv", csv_record_to_objects) def csv_record_to_objects(info): # Get the english name for this contest type contest_type_name = ContestTypeName.objects.get( contest_type_id=int(info[0]), language_id=9 ) yield BerryFlavor( id=int(info[0]), name=contest_type_name.flavor.lower(), contest_type=ContestType.objects.get(pk=int(info[0])), ) # This is not an error build_generic((BerryFlavor,), "contest_types.csv", csv_record_to_objects) def csv_record_to_objects(info): yield BerryFlavorName( berry_flavor_id=int(info[0]), language_id=int(info[1]), name=info[3] ) # This is not an error build_generic((BerryFlavorName,), "contest_type_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield BerryFlavorMap( berry_id=int(info[0]), berry_flavor_id=int(info[1]), potency=int(info[2]) ) # This is not an error build_generic((BerryFlavorMap,), "berry_flavors.csv", csv_record_to_objects) ############ # NATURE # ############ def _build_natures(): def csv_record_to_objects(info): decreased_stat = None increased_stat = None hates_flavor = None likes_flavor = None if info[2] != info[3]: decreased_stat = Stat.objects.get(pk=int(info[2])) increased_stat = Stat.objects.get(pk=int(info[3])) if info[4] != info[5]: hates_flavor = BerryFlavor.objects.get(pk=int(info[4])) likes_flavor = BerryFlavor.objects.get(pk=int(info[5])) yield Nature( id=int(info[0]), name=info[1], decreased_stat=decreased_stat, increased_stat=increased_stat, hates_flavor=hates_flavor, likes_flavor=likes_flavor, game_index=info[6], ) build_generic((Nature,), "natures.csv", csv_record_to_objects) def csv_record_to_objects(info): yield NatureName(nature_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((NatureName,), "nature_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield NaturePokeathlonStat( nature_id=(info[0]), pokeathlon_stat_id=(info[1]), max_change=info[2] ) build_generic( (NaturePokeathlonStat,), "nature_pokeathlon_stats.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield NatureBattleStylePreference( nature_id=int(info[0]), move_battle_style_id=int(info[1]), low_hp_preference=info[2], high_hp_preference=info[3], ) build_generic( (NatureBattleStylePreference,), "nature_battle_style_preferences.csv", csv_record_to_objects, ) ########### # GENDER # ########### def _build_genders(): def csv_record_to_objects(info): yield Gender(id=int(info[0]), name=info[1]) build_generic((Gender,), "genders.csv", csv_record_to_objects) ################ # EXPERIENCE # ################ def _build_experiences(): def csv_record_to_objects(info): yield Experience( growth_rate_id=int(info[0]), level=int(info[1]), experience=int(info[2]) ) build_generic((Experience,), "experience.csv", csv_record_to_objects) ############## # MACHINES # ############## def _build_machines(): def csv_record_to_objects(info): yield Machine( machine_number=int(info[0]), version_group_id=int(info[1]), item_id=int(info[2]), move_id=int(info[3]), ) build_generic((Machine,), "machines.csv", csv_record_to_objects) ############### # EVOLUTION # ############### def _build_evolutions(): def csv_record_to_objects(info): yield EvolutionChain( id=int(info[0]), baby_trigger_item_id=int(info[1]) if info[1] != "" else None, ) build_generic((EvolutionChain,), "evolution_chains.csv", csv_record_to_objects) def csv_record_to_objects(info): yield EvolutionTrigger(id=int(info[0]), name=info[1]) build_generic((EvolutionTrigger,), "evolution_triggers.csv", csv_record_to_objects) def csv_record_to_objects(info): yield EvolutionTriggerName( evolution_trigger_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic( (EvolutionTriggerName,), "evolution_trigger_prose.csv", csv_record_to_objects ) ############# # POKEDEX # ############# def _build_pokedexes(): def csv_record_to_objects(info): yield Pokedex( id=int(info[0]), region_id=int(info[1]) if info[1] != "" else None, name=info[2], is_main_series=bool(int(info[3])), ) build_generic((Pokedex,), "pokedexes.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokedexName( pokedex_id=int(info[0]), language_id=int(info[1]), name=info[2] ) yield PokedexDescription( pokedex_id=int(info[0]), language_id=int(info[1]), description=info[3] ) build_generic( (PokedexName, PokedexDescription), "pokedex_prose.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield PokedexVersionGroup( pokedex_id=int(info[0]), version_group_id=int(info[1]) ) build_generic( (PokedexVersionGroup,), "pokedex_version_groups.csv", csv_record_to_objects ) ############## # LOCATION # ############## def _build_locations(): def csv_record_to_objects(info): yield Location( id=int(info[0]), region_id=int(info[1]) if info[1] != "" else None, name=info[2], ) build_generic((Location,), "locations.csv", csv_record_to_objects) def csv_record_to_objects(info): yield LocationName( location_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic((LocationName,), "location_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield LocationGameIndex( location_id=int(info[0]), generation_id=int(info[1]), game_index=int(info[2]), ) build_generic( (LocationGameIndex,), "location_game_indices.csv", csv_record_to_objects ) def csv_record_to_objects(info): location = Location.objects.get(pk=int(info[1])) yield LocationArea( id=int(info[0]), location_id=int(info[1]), game_index=int(info[2]), name=( "{}-{}".format(location.name, info[3]) if info[3] else "{}-{}".format(location.name, "area") ), ) build_generic((LocationArea,), "location_areas.csv", csv_record_to_objects) def csv_record_to_objects(info): yield LocationAreaName( location_area_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic((LocationAreaName,), "location_area_prose.csv", csv_record_to_objects) ############# # POKEMON # ############# def _build_pokemons(): def csv_record_to_objects(info): yield PokemonColor(id=int(info[0]), name=info[1]) build_generic((PokemonColor,), "pokemon_colors.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonColorName( pokemon_color_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic((PokemonColorName,), "pokemon_color_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonShape(id=int(info[0]), name=info[1]) build_generic((PokemonShape,), "pokemon_shapes.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonShapeName( pokemon_shape_id=int(info[0]), language_id=int(info[1]), name=info[2], awesome_name=info[3], ) build_generic((PokemonShapeName,), "pokemon_shape_prose.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonHabitat(id=int(info[0]), name=info[1]) build_generic((PokemonHabitat,), "pokemon_habitats.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonSpecies( id=int(info[0]), name=info[1], generation_id=int(info[2]) if info[2] != "" else None, evolves_from_species=None, evolution_chain_id=int(info[4]) if info[4] != "" else None, pokemon_color_id=int(info[5]) if info[5] != "" else None, pokemon_shape_id=int(info[6]) if info[6] != "" else None, pokemon_habitat_id=int(info[7]) if info[7] != "" else None, gender_rate=int(info[8]) if info[8] != "" else None, capture_rate=int(info[9]) if info[9] != "" else None, base_happiness=int(info[10]) if info[10] != "" else None, is_baby=bool(int(info[11])) if info[11] != "" else None, hatch_counter=int(info[12]) if info[12] != "" else None, has_gender_differences=bool(int(info[13])) if info[13] != "" else False, growth_rate_id=int(info[14]) if info[14] != "" else None, forms_switchable=bool(int(info[15])) if info[15] != "" else None, is_legendary=bool(int(info[16])) if info[16] != "" else None, is_mythical=bool(int(info[17])) if info[17] != "" else None, order=int(info[18]) if info[18] != "" else None, ) build_generic((PokemonSpecies,), "pokemon_species.csv", csv_record_to_objects) # PokemonSpecies.evolves_from_species can't be set until all the species are created data = load_data("pokemon_species.csv") for index, info in enumerate(data): if index > 0: evolves = ( PokemonSpecies.objects.get(pk=int(info[3])) if info[3] != "" else None ) if evolves: species = PokemonSpecies.objects.get(pk=int(info[0])) species.evolves_from_species = evolves species.save() def csv_record_to_objects(info): yield PokemonSpeciesName( pokemon_species_id=int(info[0]), language_id=int(info[1]), name=info[2], genus=info[3], ) build_generic( (PokemonSpeciesName,), "pokemon_species_names.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield PokemonSpeciesDescription( pokemon_species_id=int(info[0]), language_id=int(info[1]), description=scrub_str(info[2]), ) build_generic( (PokemonSpeciesDescription,), "pokemon_species_prose.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield PokemonSpeciesFlavorText( pokemon_species_id=int(info[0]), version_id=int(info[1]), language_id=int(info[2]), flavor_text=info[3], ) build_generic( (PokemonSpeciesFlavorText,), "pokemon_species_flavor_text.csv", csv_record_to_objects, ) def csv_record_to_objects(info): yield Pokemon( id=int(info[0]), name=info[1], pokemon_species_id=int(info[2]) if info[2] != "" else None, height=int(info[3]) if info[3] != "" else None, weight=int(info[4]) if info[4] != "" else None, base_experience=int(info[5]) if info[5] != "" else None, order=int(info[6]) if info[6] != "" else -1, is_default=bool(int(info[7])) if info[7] != "" else None, ) build_generic((Pokemon,), "pokemon.csv", csv_record_to_objects) def try_image_names(path, info, extension): # poke_sprites = "pokemon/{0}" pokemon_id = info[0] identifier = info[1] species_id = info[2] if "-" in identifier: form_file_name = "%s.%s" % ( species_id + "-" + identifier.split("-", 1)[1], extension, ) id_file_name = "%s.%s" % (pokemon_id, extension) file_name = ( id_file_name if file_path_or_none(path + id_file_name) else form_file_name ) else: file_name = "%s.%s" % (info[0], extension) return file_path_or_none(path + file_name) def csv_record_to_objects(info): poke_sprites = "pokemon/" dream_world = "other/dream-world/" home = "other/home/" official_art = "other/official-artwork/" showdown = "other/showdown/" gen_i = "versions/generation-i/" gen_ii = "versions/generation-ii/" gen_iii = "versions/generation-iii/" gen_iv = "versions/generation-iv/" gen_v = "versions/generation-v/" gen_vi = "versions/generation-vi/" gen_vii = "versions/generation-vii/" gen_viii = "versions/generation-viii/" sprites = { "front_default": try_image_names(poke_sprites, info, "png"), "front_female": try_image_names(poke_sprites + "female/", info, "png"), "front_shiny": try_image_names(poke_sprites + "shiny/", info, "png"), "front_shiny_female": try_image_names( poke_sprites + "shiny/female/", info, "png" ), "back_default": try_image_names(poke_sprites + "back/", info, "png"), "back_female": try_image_names(poke_sprites + "back/female/", info, "png"), "back_shiny": try_image_names(poke_sprites + "back/shiny/", info, "png"), "back_shiny_female": try_image_names( poke_sprites + "back/shiny/female/", info, "png" ), "other": { "dream_world": { "front_default": try_image_names( poke_sprites + dream_world, info, "svg" ), "front_female": try_image_names( poke_sprites + dream_world + "female/", info, "svg" ), }, "home": { "front_default": try_image_names(poke_sprites + home, info, "png"), "front_female": try_image_names( poke_sprites + home + "female/", info, "png" ), "front_shiny": try_image_names( poke_sprites + home + "shiny/", info, "png" ), "front_shiny_female": try_image_names( poke_sprites + home + "shiny/female/", info, "png" ), }, "official-artwork": { "front_default": try_image_names( poke_sprites + official_art, info, "png" ), "front_shiny": try_image_names( poke_sprites + official_art + "shiny/", info, "png" ), }, "showdown": { "front_default": try_image_names( poke_sprites + showdown, info, "gif" ), "front_shiny": try_image_names( poke_sprites + showdown + "shiny/", info, "gif" ), "front_female": try_image_names( poke_sprites + showdown + "female/", info, "gif" ), "front_shiny_female": try_image_names( poke_sprites + showdown + "shiny/female/", info, "gif" ), "back_default": try_image_names( poke_sprites + showdown + "back/", info, "gif" ), "back_shiny": try_image_names( poke_sprites + showdown + "back/shiny/", info, "gif" ), "back_female": try_image_names( poke_sprites + showdown + "back/female/", info, "gif" ), "back_shiny_female": try_image_names( poke_sprites + showdown + "back/shiny/female", info, "gif" ), }, }, "versions": { "generation-i": { "red-blue": { "front_default": try_image_names( poke_sprites + gen_i + "red-blue/", info, "png" ), "front_gray": try_image_names( poke_sprites + gen_i + "red-blue/gray/", info, "png" ), "back_default": try_image_names( poke_sprites + gen_i + "red-blue/back/", info, "png" ), "back_gray": try_image_names( poke_sprites + gen_i + "red-blue/back/gray/", info, "png" ), "front_transparent": try_image_names( poke_sprites + gen_i + "red-blue/transparent/", info, "png" ), "back_transparent": try_image_names( poke_sprites + gen_i + "red-blue/transparent/back/", info, "png", ), }, "yellow": { "front_default": try_image_names( poke_sprites + gen_i + "yellow/", info, "png" ), "front_gray": try_image_names( poke_sprites + gen_i + "yellow/gray/", info, "png" ), "back_default": try_image_names( poke_sprites + gen_i + "yellow/back/", info, "png" ), "back_gray": try_image_names( poke_sprites + gen_i + "yellow/back/gray/", info, "png" ), "front_transparent": try_image_names( poke_sprites + gen_i + "yellow/transparent/", info, "png" ), "back_transparent": try_image_names( poke_sprites + gen_i + "yellow/transparent/back/", info, "png", ), }, }, "generation-ii": { "crystal": { "front_default": try_image_names( poke_sprites + gen_ii + "crystal/", info, "png" ), "front_shiny": try_image_names( poke_sprites + gen_ii + "crystal/shiny/", info, "png" ), "back_default": try_image_names( poke_sprites + gen_ii + "crystal/back/", info, "png" ), "back_shiny": try_image_names( poke_sprites + gen_ii + "crystal/back/shiny/", info, "png" ), "front_transparent": try_image_names( poke_sprites + gen_ii + "crystal/transparent/", info, "png" ), "front_shiny_transparent": try_image_names( poke_sprites + gen_ii + "crystal/transparent/shiny/", info, "png", ), "back_transparent": try_image_names( poke_sprites + gen_ii + "crystal/transparent/back/", info, "png", ), "back_shiny_transparent": try_image_names( poke_sprites + gen_ii + "crystal/transparent/back/shiny/", info, "png", ), }, "gold": { "front_default": try_image_names( poke_sprites + gen_ii + "gold/", info, "png" ), "front_shiny": try_image_names( poke_sprites + gen_ii + "gold/shiny/", info, "png" ), "back_default": try_image_names( poke_sprites + gen_ii + "gold/back/", info, "png" ), "back_shiny": try_image_names( poke_sprites + gen_ii + "gold/back/shiny/", info, "png" ), "front_transparent": try_image_names( poke_sprites + gen_ii + "gold/transparent/", info, "png" ), }, "silver": { "front_default": try_image_names( poke_sprites + gen_ii + "silver/", info, "png" ), "front_shiny": try_image_names( poke_sprites + gen_ii + "silver/shiny/", info, "png" ), "back_default": try_image_names( poke_sprites + gen_ii + "silver/back/", info, "png" ), "back_shiny": try_image_names( poke_sprites + gen_ii + "silver/back/shiny/", info, "png" ), "front_transparent": try_image_names( poke_sprites + gen_ii + "silver/transparent/", info, "png" ), }, }, "generation-iii": { "emerald": { "front_default": try_image_names( poke_sprites + gen_iii + "emerald/", info, "png" ), "front_shiny": try_image_names( poke_sprites + gen_iii + "emerald/shiny/", info, "png" ), }, "firered-leafgreen": { "front_default": try_image_names( poke_sprites + gen_iii + "firered-leafgreen/", info, "png" ), "front_shiny": try_image_names( poke_sprites + gen_iii + "firered-leafgreen/shiny/", info, "png", ), "back_default": try_image_names( poke_sprites + gen_iii + "firered-leafgreen/back/", info, "png", ), "back_shiny": try_image_names( poke_sprites + gen_iii + "firered-leafgreen/back/shiny/", info, "png", ), }, "ruby-sapphire": { "front_default": try_image_names( poke_sprites + gen_iii + "ruby-sapphire/", info, "png" ), "front_shiny": try_image_names( poke_sprites + gen_iii + "ruby-sapphire/shiny/", info, "png", ), "back_default": try_image_names( poke_sprites + gen_iii + "ruby-sapphire/back/", info, "png", ), "back_shiny": try_image_names( poke_sprites + gen_iii + "ruby-sapphire/back/shiny/", info, "png", ), }, }, "generation-iv": { "diamond-pearl": { "front_default": try_image_names( poke_sprites + gen_iv + "diamond-pearl/", info, "png" ), "front_female": try_image_names( poke_sprites + gen_iv + "diamond-pearl/female/", info, "png", ), "front_shiny": try_image_names( poke_sprites + gen_iv + "diamond-pearl/shiny/", info, "png", ), "front_shiny_female": try_image_names( poke_sprites + gen_iv + "diamond-pearl/shiny/female/", info, "png", ), "back_default": try_image_names( poke_sprites + gen_iv + "diamond-pearl/back/", info, "png" ), "back_female": try_image_names( poke_sprites + gen_iv + "diamond-pearl/back/female/", info, "png", ), "back_shiny": try_image_names( poke_sprites + gen_iv + "diamond-pearl/back/shiny/", info, "png", ), "back_shiny_female": try_image_names( poke_sprites + gen_iv + "diamond-pearl/back/shiny/female/", info, "png", ), }, "heartgold-soulsilver": { "front_default": try_image_names( poke_sprites + gen_iv + "heartgold-soulsilver/", info, "png", ), "front_female": try_image_names( poke_sprites + gen_iv + "heartgold-soulsilver/female/", info, "png", ), "front_shiny": try_image_names( poke_sprites + gen_iv + "heartgold-soulsilver/shiny/", info, "png", ), "front_shiny_female": try_image_names( poke_sprites + gen_iv + "heartgold-soulsilver/shiny/female/", info, "png", ), "back_default": try_image_names( poke_sprites + gen_iv + "heartgold-soulsilver/back/", info, "png", ), "back_female": try_image_names( poke_sprites + gen_iv + "heartgold-soulsilver/back/female/", info, "png", ), "back_shiny": try_image_names( poke_sprites + gen_iv + "heartgold-soulsilver/back/shiny/", info, "png", ), "back_shiny_female": try_image_names( poke_sprites + gen_iv + "heartgold-soulsilver/back/shiny/female/", info, "png", ), }, "platinum": { "front_default": try_image_names( poke_sprites + gen_iv + "platinum/", info, "png" ), "front_female": try_image_names( poke_sprites + gen_iv + "platinum/female/", info, "png" ), "front_shiny": try_image_names( poke_sprites + gen_iv + "platinum/shiny/", info, "png" ), "front_shiny_female": try_image_names( poke_sprites + gen_iv + "platinum/shiny/female/", info, "png", ), "back_default": try_image_names( poke_sprites + gen_iv + "platinum/back/", info, "png" ), "back_female": try_image_names( poke_sprites + gen_iv + "platinum/back/female/", info, "png", ), "back_shiny": try_image_names( poke_sprites + gen_iv + "platinum/back/shiny/", info, "png", ), "back_shiny_female": try_image_names( poke_sprites + gen_iv + "platinum/back/shiny/female/", info, "png", ), }, }, "generation-v": { "black-white": { "front_default": try_image_names( poke_sprites + gen_v + "black-white/", info, "png" ), "front_female": try_image_names( poke_sprites + gen_v + "black-white/female/", info, "png" ), "front_shiny": try_image_names( poke_sprites + gen_v + "black-white/shiny/", info, "png" ), "front_shiny_female": try_image_names( poke_sprites + gen_v + "black-white/shiny/female/", info, "png", ), "back_default": try_image_names( poke_sprites + gen_v + "black-white/back/", info, "png" ), "back_female": try_image_names( poke_sprites + gen_v + "black-white/back/female/", info, "png", ), "back_shiny": try_image_names( poke_sprites + gen_v + "black-white/back/shiny/", info, "png", ), "back_shiny_female": try_image_names( poke_sprites + gen_v + "black-white/back/shiny/female/", info, "png", ), "animated": { "front_default": try_image_names( poke_sprites + gen_v + "black-white/animated/", info, "gif", ), "front_female": try_image_names( poke_sprites + gen_v + "black-white/animated/female/", info, "gif", ), "front_shiny": try_image_names( poke_sprites + gen_v + "black-white/animated/shiny/", info, "gif", ), "front_shiny_female": try_image_names( poke_sprites + gen_v + "black-white/animated/shiny/female/", info, "gif", ), "back_default": try_image_names( poke_sprites + gen_v + "black-white/animated/back/", info, "gif", ), "back_female": try_image_names( poke_sprites + gen_v + "black-white/animated/back/female/", info, "gif", ), "back_shiny": try_image_names( poke_sprites + gen_v + "black-white/animated/back/shiny/", info, "gif", ), "back_shiny_female": try_image_names( poke_sprites + gen_v + "black-white/animated/back/shiny/female/", info, "gif", ), }, } }, "generation-vi": { "omegaruby-alphasapphire": { "front_default": try_image_names( poke_sprites + gen_vi + "omegaruby-alphasapphire/", info, "png", ), "front_female": try_image_names( poke_sprites + gen_vi + "omegaruby-alphasapphire/female/", info, "png", ), "front_shiny": try_image_names( poke_sprites + gen_vi + "omegaruby-alphasapphire/shiny/", info, "png", ), "front_shiny_female": try_image_names( poke_sprites + gen_vi + "omegaruby-alphasapphire/shiny/female/", info, "png", ), }, "x-y": { "front_default": try_image_names( poke_sprites + gen_vi + "x-y/", info, "png" ), "front_female": try_image_names( poke_sprites + gen_vi + "x-y/female/", info, "png" ), "front_shiny": try_image_names( poke_sprites + gen_vi + "x-y/shiny/", info, "png" ), "front_shiny_female": try_image_names( poke_sprites + gen_vi + "x-y/shiny/female/", info, "png" ), }, }, "generation-vii": { "ultra-sun-ultra-moon": { "front_default": try_image_names( poke_sprites + gen_vii + "ultra-sun-ultra-moon/", info, "png", ), "front_female": try_image_names( poke_sprites + gen_vii + "ultra-sun-ultra-moon/female/", info, "png", ), "front_shiny": try_image_names( poke_sprites + gen_vii + "ultra-sun-ultra-moon/shiny/", info, "png", ), "front_shiny_female": try_image_names( poke_sprites + gen_vii + "ultra-sun-ultra-moon/shiny/female/", info, "png", ), }, "icons": { "front_default": try_image_names( poke_sprites + gen_vii + "icons/", info, "png" ), "front_female": try_image_names( poke_sprites + gen_vii + "icons/female/", info, "png" ), }, }, "generation-viii": { "icons": { "front_default": try_image_names( poke_sprites + gen_viii + "icons/", info, "png" ), "front_female": try_image_names( poke_sprites + gen_viii + "icons/female/", info, "png" ), }, }, }, } yield PokemonSprites( id=int(info[0]), pokemon=Pokemon.objects.get(pk=int(info[0])), sprites=sprites, ) build_generic((PokemonSprites,), "pokemon.csv", csv_record_to_objects) def try_cry_names(path, info, extension): file_name = "%s.%s" % (info[0], extension) return file_path_or_none(path + file_name, image_file=False) def csv_record_to_objects(info): poke_cries = "pokemon" latest = f"{poke_cries}/latest/" legacy = f"{poke_cries}/legacy/" cries = { "latest": try_cry_names(latest, info, "ogg"), "legacy": try_cry_names(legacy, info, "ogg"), } yield PokemonCries( id=int(info[0]), pokemon=Pokemon.objects.get(pk=int(info[0])), cries=cries, ) build_generic((PokemonCries,), "pokemon.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonAbility( pokemon_id=int(info[0]), ability_id=int(info[1]), is_hidden=bool(int(info[2])), slot=int(info[3]), ) build_generic((PokemonAbility,), "pokemon_abilities.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonAbilityPast( pokemon_id=int(info[0]), generation_id=int(info[1]), ability_id=int(info[2]), is_hidden=bool(int(info[3])), slot=int(info[4]), ) build_generic( (PokemonAbilityPast,), "pokemon_abilities_past.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield PokemonDexNumber( pokemon_species_id=int(info[0]), pokedex_id=int(info[1]), pokedex_number=int(info[2]), ) build_generic((PokemonDexNumber,), "pokemon_dex_numbers.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonEggGroup( pokemon_species_id=int(info[0]), egg_group_id=int(info[1]) ) build_generic((PokemonEggGroup,), "pokemon_egg_groups.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonEvolution( id=int(info[0]), evolved_species_id=int(info[1]), evolution_trigger_id=int(info[2]), evolution_item_id=int(info[3]) if info[3] != "" else None, min_level=int(info[4]) if info[4] != "" else None, gender_id=int(info[5]) if info[5] != "" else None, location_id=int(info[6]) if info[6] != "" else None, held_item_id=int(info[7]) if info[7] != "" else None, time_of_day=info[8], known_move_id=int(info[9]) if info[9] != "" else None, known_move_type_id=int(info[10]) if info[10] != "" else None, min_happiness=int(info[11]) if info[11] != "" else None, min_beauty=int(info[12]) if info[12] != "" else None, min_affection=int(info[13]) if info[13] != "" else None, relative_physical_stats=int(info[14]) if info[14] != "" else None, party_species_id=int(info[15]) if info[15] != "" else None, party_type_id=int(info[16]) if info[16] != "" else None, trade_species_id=int(info[17]) if info[17] != "" else None, needs_overworld_rain=bool(int(info[18])), turn_upside_down=bool(int(info[19])), ) build_generic((PokemonEvolution,), "pokemon_evolution.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonForm( id=int(info[0]), name=info[1], form_name=info[2], pokemon_id=int(info[3]), version_group_id=int(info[4]), is_default=bool(int(info[5])), is_battle_only=bool(int(info[6])), is_mega=bool(int(info[7])), form_order=int(info[8]), order=int(info[9]), ) build_generic((PokemonForm,), "pokemon_forms.csv", csv_record_to_objects) def try_image_names(path, info, extension): form_identifier = info[2] pokemon_id = info[3] pokemon = Pokemon.objects.get(pk=int(pokemon_id)) species_id = getattr(pokemon, "pokemon_species_id") is_default = int(info[5]) if form_identifier: form_file_name = "%s-%s.%s" % (species_id, form_identifier, extension) id_file_name = "%s.%s" % (pokemon_id, extension) file_name = ( id_file_name if file_path_or_none(path + id_file_name) else form_file_name ) if id_file_name and form_file_name and (not is_default): file_name = form_file_name else: file_name = "%s.%s" % (species_id, extension) return file_path_or_none(path + file_name) def csv_record_to_objects(info): poke_sprites = "pokemon/" sprites = { "front_default": try_image_names(poke_sprites, info, "png"), "front_shiny": try_image_names(poke_sprites + "shiny/", info, "png"), "back_default": try_image_names(poke_sprites + "back/", info, "png"), "back_shiny": try_image_names(poke_sprites + "back/shiny/", info, "png"), "front_female": try_image_names(poke_sprites + "female/", info, "png"), "front_shiny_female": try_image_names( poke_sprites + "shiny/female/", info, "png" ), "back_female": try_image_names(poke_sprites + "back/female/", info, "png"), "back_shiny_female": try_image_names( poke_sprites + "back/shiny/female/", info, "png" ), } yield PokemonFormSprites( id=int(info[0]), pokemon_form_id=int(info[0]), sprites=sprites ) build_generic((PokemonFormSprites,), "pokemon_forms.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonFormName( pokemon_form=PokemonForm.objects.get(pk=int(info[0])), language=Language.objects.get(pk=int(info[1])), name=info[2], pokemon_name=info[3], ) build_generic((PokemonFormName,), "pokemon_form_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonFormGeneration( pokemon_form_id=int(info[0]), generation_id=int(info[1]), game_index=int(info[2]), ) build_generic( (PokemonFormGeneration,), "pokemon_form_generations.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield PokemonFormType( pokemon_form_id=int(info[0]), type_id=int(info[1]), slot=int(info[2]) ) build_generic((PokemonFormType,), "pokemon_form_types.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonGameIndex( pokemon_id=int(info[0]), version_id=int(info[1]), game_index=int(info[2]) ) build_generic( (PokemonGameIndex,), "pokemon_game_indices.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield PokemonHabitatName( pokemon_habitat_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic( (PokemonHabitatName,), "pokemon_habitat_names.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield PokemonItem( pokemon_id=int(info[0]), version_id=int(info[1]), item_id=int(info[2]), rarity=int(info[3]), ) build_generic((PokemonItem,), "pokemon_items.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonMove( pokemon_id=int(info[0]), version_group_id=int(info[1]), move_id=int(info[2]), move_learn_method_id=int(info[3]), level=int(info[4]), order=int(info[5]) if info[5] != "" else None, ) build_generic((PokemonMove,), "pokemon_moves.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonStat( pokemon_id=int(info[0]), stat_id=int(info[1]), base_stat=int(info[2]), effort=int(info[3]), ) build_generic((PokemonStat,), "pokemon_stats.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonType( pokemon_id=int(info[0]), type_id=int(info[1]), slot=int(info[2]) ) build_generic((PokemonType,), "pokemon_types.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonTypePast( pokemon_id=int(info[0]), generation_id=int(info[1]), type_id=int(info[2]), slot=int(info[3]), ) build_generic((PokemonTypePast,), "pokemon_types_past.csv", csv_record_to_objects) ############### # ENCOUNTER # ############### def _build_encounters(): def csv_record_to_objects(info): yield EncounterMethod(id=int(info[0]), name=info[1], order=int(info[2])) build_generic((EncounterMethod,), "encounter_methods.csv", csv_record_to_objects) def csv_record_to_objects(info): yield LocationAreaEncounterRate( location_area_id=int(info[0]), encounter_method_id=int(info[1]), version_id=int(info[2]), rate=int(info[3]), ) build_generic( (LocationAreaEncounterRate,), "location_area_encounter_rates.csv", csv_record_to_objects, ) def csv_record_to_objects(info): yield EncounterMethodName( encounter_method_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic( (EncounterMethodName,), "encounter_method_prose.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield EncounterCondition(id=int(info[0]), name=info[1]) build_generic( (EncounterCondition,), "encounter_conditions.csv", csv_record_to_objects ) def csv_record_to_objects(info): yield EncounterConditionName( encounter_condition_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic( (EncounterConditionName,), "encounter_condition_prose.csv", csv_record_to_objects, ) def csv_record_to_objects(info): yield EncounterSlot( id=int(info[0]), version_group_id=int(info[1]), encounter_method_id=int(info[2]), slot=int(info[3]) if info[3] != "" else None, rarity=int(info[4]), ) build_generic((EncounterSlot,), "encounter_slots.csv", csv_record_to_objects) def csv_record_to_objects(info): yield Encounter( id=int(info[0]), version_id=int(info[1]), location_area_id=int(info[2]), encounter_slot_id=int(info[3]), pokemon_id=int(info[4]), min_level=int(info[5]), max_level=int(info[6]), ) build_generic((Encounter,), "encounters.csv", csv_record_to_objects) def csv_record_to_objects(info): yield EncounterConditionValue( id=int(info[0]), encounter_condition_id=int(info[1]), name=info[2], is_default=bool(int(info[3])), ) build_generic( (EncounterConditionValue,), "encounter_condition_values.csv", csv_record_to_objects, ) def csv_record_to_objects(info): yield EncounterConditionValueName( encounter_condition_value_id=int(info[0]), language_id=int(info[1]), name=info[2], ) build_generic( (EncounterConditionValueName,), "encounter_condition_value_prose.csv", csv_record_to_objects, ) def csv_record_to_objects(info): yield EncounterConditionValueMap( encounter_id=int(info[0]), encounter_condition_value_id=int(info[1]) ) build_generic( (EncounterConditionValueMap,), "encounter_condition_value_map.csv", csv_record_to_objects, ) ############## # PAL PARK # ############## def _build_pal_parks(): def csv_record_to_objects(info): yield PalParkArea(id=int(info[0]), name=info[1]) build_generic((PalParkArea,), "pal_park_areas.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PalParkAreaName( pal_park_area_id=int(info[0]), language_id=int(info[1]), name=info[2] ) build_generic((PalParkAreaName,), "pal_park_area_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PalPark( pokemon_species_id=int(info[0]), pal_park_area_id=int(info[1]), base_score=int(info[2]), rate=int(info[3]), ) build_generic((PalPark,), "pal_park.csv", csv_record_to_objects) def build_all(): _build_languages() _build_regions() _build_generations() _build_versions() _build_damage_classes() _build_stats() _build_abilities() _build_characteristics() _build_egg_groups() _build_growth_rates() _build_items() _build_types() _build_contests() _build_moves() _build_berries() _build_natures() _build_genders() _build_experiences() _build_machines() _build_evolutions() _build_pokedexes() _build_locations() _build_pokemons() _build_encounters() _build_pal_parks() if __name__ == "__main__": build_all()