(self, key, value)
| 128 | return results |
| 129 | |
| 130 | def set(self, key, value): |
| 131 | key = self.add_prefix(key) |
| 132 | created = False |
| 133 | queryset = self._model._default_manager.all() |
| 134 | # Set _for_write attribute as get_or_create method does |
| 135 | # https://github.com/django/django/blob/2.2.11/django/db/models/query.py#L536 |
| 136 | queryset._for_write = True |
| 137 | |
| 138 | try: |
| 139 | constance = queryset.get(key=key) |
| 140 | except (OperationalError, ProgrammingError): |
| 141 | # database is not created, noop |
| 142 | return |
| 143 | except self._model.DoesNotExist: |
| 144 | try: |
| 145 | with transaction.atomic(using=queryset.db): |
| 146 | queryset.create(key=key, value=dumps(value)) |
| 147 | created = True |
| 148 | except IntegrityError: |
| 149 | # Allow concurrent writes |
| 150 | constance = queryset.get(key=key) |
| 151 | |
| 152 | if not created: |
| 153 | old_value = loads(constance.value) |
| 154 | constance.value = dumps(value) |
| 155 | constance.save(update_fields=["value"]) |
| 156 | else: |
| 157 | old_value = None |
| 158 | |
| 159 | if self._cache: |
| 160 | self._cache.set(key, value) |
| 161 | |
| 162 | signals.config_updated.send(sender=config, key=key, old_value=old_value, new_value=value) |
| 163 | |
| 164 | async def aset(self, key, value): |
| 165 | from asgiref.sync import sync_to_async |
nothing calls this directly
no test coverage detected