import click from flask.cli import AppGroup from ..models import db npc_cli = AppGroup('npc') @npc_cli.command('populate') def populate_npc_database(): import csv from .models import ( CharacterClass, ClassLevelProgression, EquipmentArmour, EquipmentRangedWeapon, EquipmentMeleeWeapon, Spell ) def load_csv_data(file_name, cls): rows = [] with open('acks/npc/data/{}'.format(file_name), newline='') as data: reader = csv.DictReader(data) for row in reader: rows.append(cls(**row)) return rows # Character Classes db.session.bulk_save_objects(load_csv_data('default_classes.csv', CharacterClass)) # Equipment Armour db.session.bulk_save_objects(load_csv_data('default_armours.csv', EquipmentArmour)) # Ranged Weapons db.session.bulk_save_objects(load_csv_data('default_ranged.csv', EquipmentRangedWeapon)) # Melee Weapons melee_weps = load_csv_data('default_melee.csv', EquipmentMeleeWeapon) for wep in melee_weps: wep.two_handed = (wep.two_handed == 'True') db.session.bulk_save_objects(melee_weps) # Level Progressions progressions = load_csv_data('default_progression.csv', ClassLevelProgression) classes = {c.name: c.id for c in CharacterClass.query.all()} for prog in progressions: prog.guild_id = classes[prog.guild_id] db.session.bulk_save_objects(progressions) # Spells spells = load_csv_data('default_spells.csv', Spell) for spell in spells: if spell.arcane == '': spell.arcane = 0 if spell.divine == '': spell.divine = 0 spell.description = spell.description.strip() db.session.bulk_save_objects(spells) db.session.commit()