migrationutils.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from misago.conf import CACHE_KEY
  2. from misago.core.cache import cache as default_cache
  3. def get_custom_settings_values(orm, group_key):
  4. custom_settings_values = {}
  5. for setting in orm.Setting.objects.filter(group_id=group_key).iterator():
  6. custom_settings_values[setting.setting] = setting.value
  7. return custom_settings_values
  8. def get_group(orm, group_key):
  9. try:
  10. return orm.SettingsGroup.objects.get(key=group_key)
  11. except orm.SettingsGroup.DoesNotExist:
  12. return orm.SettingsGroup()
  13. def migrate_settings_group(orm, group_fixture, old_group_key=None):
  14. group_key = group_fixture['key']
  15. # Fetch settings group
  16. if old_group_key:
  17. custom_settings_values = get_custom_settings_values(orm, old_group_key)
  18. group = get_group(orm, old_group_key)
  19. else:
  20. custom_settings_values = get_custom_settings_values(orm, group_key)
  21. group = get_group(orm, group_key)
  22. # Update group's attributes
  23. group.key = group_fixture['key']
  24. group.name = group_fixture['name']
  25. group.description = group_fixture.get('description')
  26. group.save()
  27. # Delete groups settings and make new ones
  28. # Its easier to create news ones and then assign them old values
  29. group.setting_set.all().delete()
  30. for order, setting in enumerate(group_fixture['settings']):
  31. setting['group'] = group
  32. setting['order'] = order
  33. try:
  34. value = custom_settings_values[seting['setting']]
  35. except KeyError:
  36. value = setting.pop('value')
  37. field_extra = setting.pop('field_extra', None)
  38. setting = orm.Setting(**setting)
  39. setting.value = value
  40. setting.field_extra = field_extra
  41. setting.save()
  42. def clear_settings_cache():
  43. default_cache.delete(CACHE_KEY)