12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- from misago.conf import CACHE_KEY
- from misago.core.cache import cache as default_cache
- def get_custom_settings_values(orm, group_key):
- custom_settings_values = {}
- for setting in orm.Setting.objects.filter(group_id=group_key).iterator():
- custom_settings_values[setting.setting] = setting.value
- return custom_settings_values
- def get_group(orm, group_key):
- try:
- return orm.SettingsGroup.objects.get(key=group_key)
- except orm.SettingsGroup.DoesNotExist:
- return orm.SettingsGroup()
- def migrate_settings_group(orm, group_fixture, old_group_key=None):
- group_key = group_fixture['key']
- # Fetch settings group
- if old_group_key:
- custom_settings_values = get_custom_settings_values(orm, old_group_key)
- group = get_group(orm, old_group_key)
- else:
- custom_settings_values = get_custom_settings_values(orm, group_key)
- group = get_group(orm, group_key)
- # Update group's attributes
- group.key = group_fixture['key']
- group.name = group_fixture['name']
- group.description = group_fixture.get('description')
- group.save()
- # Delete groups settings and make new ones
- # Its easier to create news ones and then assign them old values
- group.setting_set.all().delete()
- for order, setting in enumerate(group_fixture['settings']):
- setting['group'] = group
- setting['order'] = order
- try:
- value = custom_settings_values[seting['setting']]
- except KeyError:
- value = setting.pop('value')
- field_extra = setting.pop('field_extra', None)
- setting = orm.Setting(**setting)
- setting.value = value
- setting.field_extra = field_extra
- setting.save()
- def clear_settings_cache():
- default_cache.delete(CACHE_KEY)
|