syncfixtures.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from optparse import make_option
  2. import traceback
  3. import os.path
  4. import pkgutil
  5. from django.core.management.base import BaseCommand
  6. from misago.models import Fixture
  7. from misago.utils.fixtures import load_fixture, update_fixture
  8. import misago.fixtures
  9. class Command(BaseCommand):
  10. """
  11. Loads Misago fixtures
  12. """
  13. help = 'Load Misago fixtures'
  14. option_list = BaseCommand.option_list + (
  15. make_option('--quiet',
  16. action='store_true',
  17. dest='quiet',
  18. default=False,
  19. help='Dont display output from this message'),
  20. )
  21. def handle(self, *args, **options):
  22. if not options['quiet']:
  23. self.stdout.write('\nLoading data from fixtures...')
  24. fixture_data = {}
  25. for fixture in Fixture.objects.all():
  26. fixture_data[fixture.name] = fixture
  27. loaded = 0
  28. updated = 0
  29. fixtures_path = os.path.dirname(misago.fixtures.__file__)
  30. try:
  31. for _, name, _ in pkgutil.iter_modules([fixtures_path]):
  32. if name in fixture_data:
  33. if update_fixture('misago.fixtures.' + name):
  34. updated += 1
  35. if not options['quiet']:
  36. self.stdout.write('Updating "%s" fixture...' % name)
  37. else:
  38. if load_fixture('misago.fixtures.' + name):
  39. loaded += 1
  40. Fixture.objects.create(name=name)
  41. if not options['quiet']:
  42. self.stdout.write('Loading "%s" fixture...' % name)
  43. except:
  44. self.stderr.write(traceback.format_exc())
  45. if not options['quiet']:
  46. self.stdout.write('\nLoaded %s fixtures and updated %s fixtures.\n' % (loaded, updated))