MCPcopy
hub / github.com/jazzband/django-constance / set

Method set

constance/backends/database.py:130–162  ·  view source on GitHub ↗
(self, key, value)

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 5

add_prefixMethod · 0.95
dumpsFunction · 0.90
loadsFunction · 0.90
saveMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected