There is none - all I can see is that the logging I placed att he very end 
of the post_save method logs, but the logger.debug('
SupportPingMutation:post-save') that I placed after the .save() never runs. 
After the channels message, the request is stale, and just freezes the 
server.


On Monday, 19 June 2017 16:33:16 UTC+2, Andrew Godwin wrote:
>
> What's the traceback when the code exits? There has to be some reason it 
> stops there, and whatever your Python code is running in should be able to 
> tell you why (traceback, status code, anything)
>
> Without that, I can't help, as it could be anything - your code or 
> Django's.
>
> Andrew
>
> On Mon, Jun 19, 2017 at 7:21 AM, Mattias Olsson <[email protected] 
> <javascript:>> wrote:
>
>> Hi all,
>>
>> I'm having some issues with integrating automatic group messaging based 
>> on a post save signal from Django models.
>>
>> I'm currently running a Graphene environment (graphene-python.org) to 
>> support a webapp running React/Relay. In this setup we're performing 
>> *Mutations* which will manipulate data, and return a payload based on 
>> the data that was mutated. During a data mutation process I'm saving a 
>> model, which triggers a post_save, which in turn seems to hijack the 
>> process and terminate it, before the mutation can return its payload.
>>
>> I have a simple JsonWebsocketConsumer to handle my connections.
>> class MyConsumers(JsonWebsocketConsumer):
>>     channel_session_user = True
>>
>>     strict_ordering = True
>>
>>     method_mapping = {
>>         "websocket.connect": "connect",
>>         "websocket.receive": "receive",
>>         "websocket.disconnect": "disconnect",
>>     }
>>
>>     def connection_groups(self, **kwargs):
>>       return ["all-clients", ]
>>
>>     def connect(self, message, **kwargs):
>>       # Accepts connections and returns {'Accepted': Trie}
>>       subscription_manager.SubscriptionManager.connect_endpoint(message)
>>
>>     def receive(self, content, **kwargs):
>>       # Registers groups and stores data in redis cache.
>>       subscription_manager.SubscriptionManager.receive_endpoint(content)
>>
>>     def disconnect(self, message, **kwargs):
>>       ...
>>
>> A mutation comes in through urls as a normal http-request (through the 
>> /graphql match):
>> urlpatterns = [
>>   ...
>>   url(r'^graphql', 
>> csrf_exempt(GraphQLView.as_view(graphiql=settings.DEBUG))),
>>   url(r'^admin/', admin.site.urls),
>>   url(r'^support/', include(support_urls)),
>>   url(r'^django-rq/', include('django_rq.urls')),
>> ]
>>
>> The routing is as simple as can be:
>> subscription_routing = [
>>     route_class(consumers.QuantumConsumers)
>> ]
>>
>> channel_routing = [
>>     include(subscription_routing, path=r"^/ws/subscriptions"),
>> ]
>>
>> The post save is attached through a util on each model:
>> class Ping(models.Model):
>>     support_session = models.OneToOneField(SupportSession, 
>> related_name="ping")
>>     client_ping = models.DateTimeField(...)
>>     support_ping = models.DateTimeField(...)
>>
>> # Sets up a post_save
>> ModelSignalReceiver.connect_receivers(Ping)
>>
>> Finally, a mutation is a simple method that executes a save:
>> class PingMutation(graphene.ClientIDMutation):
>>
>>     class Input:
>>         support_session_id = graphene.ID()
>>
>>     ping = graphene.Field(PingNode)
>>
>>     @classmethod
>>     def mutate_and_get_payload(cls, args, context, info):
>>         session_id = from_global_id(args.get('support_session_id'))[1]
>>         pings = 
>> support_models.Ping.objects.get(support_session__id=session_id)
>>
>>         pings.support_last_ping = datetime.datetime.now()
>>
>>         # I can see this debug message, before the save.
>>         logger.debug('SupportPingMutation:pre-save')
>>
>>         # Will trigger the signal...
>>         pings.save()
>>
>>         # The code never reaches this point.
>>         logger.debug('SupportPingMutation:post-save')
>>
>>         return cls(ping=pings)
>>
>>
>> Any ideas on why the process gets hijacked? Should the post_save which 
>> triggers a consumer response not be dispatched?
>>
>> Thank you in advance.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/django-users.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/2ae1ece5-24ff-4754-9d21-b8207117292e%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/django-users/2ae1ece5-24ff-4754-9d21-b8207117292e%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/b12520a9-cc7e-4e3e-9962-7fa0e3b7c7e6%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to