Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions rxdjango/signal_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,18 +80,27 @@ def prepare_save(sender, instance, **kwargs):
instance.__old_parent = old_parent

def _relay_instance(_layer, instance, tstamp, created):
# This method may receive instances as objectse or already
# serialized. broadcast_instance allows this so microservices
# can send optimistic updates

if not instance:
return

if isinstance(instance, models.Model):
instances = [instance]
elif isinstance(instance, models.Manager):
instances = instance.all()
if isinstance(instance, models.Manager) or isinstance(instance, list):
instances = instance
else:
raise ProgrammingError()
instances = [instance]

for _instance in instances:
serialized = _layer.serialize_instance(_instance, tstamp)
if isinstance(_instance, models.Model):
serialized = _layer.serialize_instance(_instance, tstamp)
elif isinstance(_instance, dict):
serialized = _instance
else:
cls = _instance.__class__
raise ProgrammingError(f'Cannot relay instance of type {cls}')

serialized['_operation'] = 'create' if created else 'update'
self._schedule(serialized, _layer)

Expand Down