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.

50 lines
1.5 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. ClassLevelProgression,
  11. EquipmentArmour,
  12. EquipmentRangedWeapon,
  13. EquipmentMeleeWeapon
  14. )
  15. def load_csv_data(file_name, cls):
  16. rows = []
  17. with open('acks/npc/data/{}'.format(file_name), newline='') as data:
  18. reader = csv.DictReader(data)
  19. for row in reader:
  20. rows.append(cls(**row))
  21. return rows
  22. # Character Classes
  23. db.session.bulk_save_objects(load_csv_data('default_classes.csv', CharacterClass))
  24. # Equipment Armour
  25. db.session.bulk_save_objects(load_csv_data('default_armours.csv', EquipmentArmour))
  26. # Ranged Weapons
  27. db.session.bulk_save_objects(load_csv_data('default_ranged.csv', EquipmentRangedWeapon))
  28. # Melee Weapons
  29. melee_weps = load_csv_data('default_melee.csv', EquipmentMeleeWeapon)
  30. for wep in melee_weps:
  31. wep.two_handed = (wep.two_handed == 'True')
  32. db.session.bulk_save_objects(melee_weps)
  33. # Level Progressions
  34. progressions = load_csv_data('default_progression.csv', ClassLevelProgression)
  35. classes = {c.name: c.id for c in CharacterClass.query.all()}
  36. for prog in progressions:
  37. prog.guild_id = classes[prog.guild_id]
  38. db.session.bulk_save_objects(progressions)
  39. db.session.commit()