migrationutils.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from importlib import import_module
  2. from misago.conf.dbsettings import CACHE_KEY
  3. from misago.core.cache import cache as default_cache
  4. def with_conf_models(migration, this_migration=None):
  5. module_name = 'misago.conf.migrations.%s' % migration
  6. migration_module = import_module(module_name)
  7. conf_models = migration_module.Migration.models
  8. if this_migration:
  9. conf_models.update(this_migration)
  10. return conf_models
  11. def get_custom_settings_values(orm, group):
  12. custom_settings_values = {}
  13. for setting in group.setting_set.iterator():
  14. custom_settings_values[setting.setting] = setting.value
  15. return custom_settings_values
  16. def get_group(orm, group_key):
  17. try:
  18. return orm['conf.SettingsGroup'].objects.get(key=group_key)
  19. except orm['conf.SettingsGroup'].DoesNotExist:
  20. return orm['conf.SettingsGroup']()
  21. def migrate_settings_group(orm, group_fixture, old_group_key=None):
  22. group_key = group_fixture['key']
  23. # Fetch settings group
  24. if old_group_key:
  25. group = get_group(orm, old_group_key)
  26. custom_settings_values = get_custom_settings_values(orm, group)
  27. else:
  28. group = get_group(orm, group_key)
  29. if group.pk:
  30. custom_settings_values = get_custom_settings_values(orm, group)
  31. else:
  32. custom_settings_values = {}
  33. # Update group's attributes
  34. group.key = group_fixture['key']
  35. group.name = group_fixture['name']
  36. group.description = group_fixture.get('description')
  37. group.save()
  38. # Delete groups settings and make new ones
  39. # Its easier to create news ones and then assign them old values
  40. group.setting_set.all().delete()
  41. for order, setting in enumerate(group_fixture['settings']):
  42. setting['group'] = group
  43. setting['order'] = order
  44. try:
  45. value = custom_settings_values[setting['setting']]
  46. except KeyError:
  47. value = setting.pop('value', None)
  48. field_extra = setting.pop('field_extra', None)
  49. setting = orm['conf.Setting'](**setting)
  50. setting.value = value
  51. setting.field_extra = field_extra
  52. setting.save()
  53. def delete_settings_cache():
  54. default_cache.delete(CACHE_KEY)