You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

42 lines
1.1 KiB

  1. import click
  2. from flask.cli import AppGroup
  3. from ..models import db
  4. npc_cli = AppGroup('npc')
  5. @npc_cli.command('populate')
  6. def populate_npc_database():
  7. import csv
  8. from .models import (
  9. CharacterClass,
  10. EquipmentArmour,
  11. EquipmentRangedWeapon,
  12. EquipmentMeleeWeapon
  13. )
  14. def load_csv_data(file_name, cls):
  15. rows = []
  16. with open('acks/npc/data/{}'.format(file_name), newline='') as data:
  17. reader = csv.DictReader(data)
  18. for row in reader:
  19. rows.append(cls(**row))
  20. return rows
  21. # Character Classes
  22. db.session.bulk_save_objects(load_csv_data('default_classes.csv', CharacterClass))
  23. # Equipment Armour
  24. db.session.bulk_save_objects(load_csv_data('default_armours.csv', EquipmentArmour))
  25. # Ranged Weapons
  26. db.session.bulk_save_objects(load_csv_data('default_ranged.csv', EquipmentRangedWeapon))
  27. # Melee Weapons
  28. melee_weps = load_csv_data('default_melee.csv', EquipmentMeleeWeapon)
  29. for wep in melee_weps:
  30. wep.two_handed = (wep.two_handed == 'True')
  31. db.session.bulk_save_objects(melee_weps)
  32. db.session.commit()