migrationutils.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. if setting.has_custom_value:
  15. custom_settings_values[setting.setting] = setting.value
  16. return custom_settings_values
  17. def get_group(orm, group_key):
  18. try:
  19. return orm['conf.SettingsGroup'].objects.get(key=group_key)
  20. except orm['conf.SettingsGroup'].DoesNotExist:
  21. return orm['conf.SettingsGroup']()
  22. def migrate_settings_group(orm, group_fixture, old_group_key=None):
  23. group_key = group_fixture['key']
  24. # Fetch settings group
  25. if old_group_key:
  26. group = get_group(orm, old_group_key)
  27. custom_settings_values = get_custom_settings_values(orm, group)
  28. else:
  29. group = get_group(orm, group_key)
  30. if group.pk:
  31. custom_settings_values = get_custom_settings_values(orm, group)
  32. else:
  33. custom_settings_values = {}
  34. # Update group's attributes
  35. group.key = group_fixture['key']
  36. group.name = group_fixture['name']
  37. group.description = group_fixture.get('description')
  38. group.save()
  39. # Delete groups settings and make new ones
  40. # Its easier to create news ones and then assign them old values
  41. group.setting_set.all().delete()
  42. for order, setting in enumerate(group_fixture['settings']):
  43. setting['group'] = group
  44. setting['order'] = order
  45. try:
  46. value = custom_settings_values[setting['setting']]
  47. except KeyError:
  48. value = setting.pop('value', None)
  49. field_extra = setting.pop('field_extra', None)
  50. setting = orm['conf.Setting'](**setting)
  51. setting.value = value
  52. setting.field_extra = field_extra
  53. setting.save()
  54. def delete_settings_cache():
  55. default_cache.delete(CACHE_KEY)