def perform_update(self, serializer): settings_qs = self.get_queryset() user = self.request.user if self.category_slug == 'user' else None settings_change_list = [] for key, value in serializer.validated_data.items(): if key == 'LICENSE' or settings_registry.is_setting_read_only(key): continue if settings_registry.is_setting_encrypted(key) and \ isinstance(value, str) and \ value.startswith('$encrypted$'): continue setattr(serializer.instance, key, value) setting = settings_qs.filter(key=key).order_by('pk').first() if not setting: setting = Setting.objects.create(key=key, user=user, value=value) settings_change_list.append(key) elif setting.value != value: setting.value = value setting.save(update_fields=['value']) settings_change_list.append(key) if settings_change_list: connection.on_commit( lambda: handle_setting_changes.delay(settings_change_list))
def perform_destroy(self, instance): settings_change_list = [] for setting in self.get_queryset().exclude(key='LICENSE'): if settings_registry.get_setting_field(setting.key).read_only: continue setting.delete() settings_change_list.append(setting.key) if settings_change_list and 'migrate_to_database_settings' not in sys.argv: handle_setting_changes.delay(settings_change_list) # When TOWER_URL_BASE is deleted from the API, reset it to the hostname # used to make the request as a default. if hasattr(instance, 'TOWER_URL_BASE'): url = '{}://{}'.format(self.request.scheme, self.request.get_host()) if settings.TOWER_URL_BASE != url: settings.TOWER_URL_BASE = url