That looks like a problem with the version of Python you are running - what version is it?
Andrew On Fri, Feb 2, 2018 at 11:36 PM, Ahmed Magdy <[email protected]> wrote: > Since you closed the issue, I'm posting here. > Ok, so I've updated asgiref package to 2.1.1 and now getting different > exception. > > > [2018/02/03 09:29:23] WebSocket HANDSHAKING /sessions/ [127.0.0.1:13235] >> ERROR:root:Exception inside application: '_WindowsSelectorEventLoop' >> object has no attribute 'create_future' >> File "c:\python35\Lib\asyncio\tasks.py", line 241, in _step >> result = coro.throw(exc) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\consumer.py", >> line 51, in __call__ >> await await_many_dispatch([receive, self.channel_receive], >> self.dispatch) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\utils.py", >> line 48, in await_many_dispatch >> await dispatch(result) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >> line 99, in inner >> return await async_func(*args, **kwargs) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >> line 79, in __call__ >> return await asyncio.wait_for(future, timeout=None) >> File "c:\python35\Lib\asyncio\tasks.py", line 367, in wait_for >> return (yield from fut) >> File "c:\python35\Lib\asyncio\futures.py", line 358, in __iter__ >> yield self # This tells Task to wait for completion. >> File "c:\python35\Lib\asyncio\tasks.py", line 290, in _wakeup >> future.result() >> File "c:\python35\Lib\asyncio\futures.py", line 274, in result >> raise self._exception >> File "c:\python35\Lib\concurrent\futures\thread.py", line 55, in run >> result = self.fn(*self.args, **self.kwargs) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >> line 91, in thread_handler >> raise e >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >> line 89, in thread_handler >> self.func(*args, **kwargs) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\consumer.py", >> line 93, in dispatch >> handler(message) >> File "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\ >> channels\generic\websocket.py", line 19, in websocket_connect >> self.connect() >> File "D:\Programming\DjangoWebsite\HUWebsite\husite\ >> djangoChannels\djangoChannels\consumers.py", line 7, in connect >> AsyncToSync(self.channel_layer.group_add)("chat", self.channel_name) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >> line 45, in __call__ >> call_result.result() >> File "c:\python35\Lib\concurrent\futures\_base.py", line 405, in result >> return self.__get_result() >> File "c:\python35\Lib\concurrent\futures\_base.py", line 357, in >> __get_result >> raise self._exception >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >> line 53, in main_wrap >> result = await self.awaitable(*args, **kwargs) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py", >> line 280, in group_add >> pool = await self.connection(self.consistent_hash(group)) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py", >> line 377, in connection >> self.pools[index] = await aioredis.create_redis_pool(** >> self.hosts[index]) >> File "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\ >> aioredis\commands\__init__.py", line 197, in create_redis_pool >> loop=loop) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\pool.py", >> line 56, in create_pool >> await pool._fill_free(override_min=False) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\pool.py", >> line 388, in _fill_free >> conn = await self._create_new_connection(address) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\connection.py", >> line 124, in create_connection >> loop=loop) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\connection.py", >> line 163, in __init__ >> self._close_waiter = loop.create_future() >> '_WindowsSelectorEventLoop' object has no attribute 'create_future' >> [2018/02/03 09:29:24] WebSocket DISCONNECT /sessions/ [127.0.0.1:13235] >> [2018/02/03 09:30:24] HTTP GET /sessions/ 503 [60.64, 127.0.0.1:13235] >> ERROR:asyncio:Task exception was never retrieved >> future: <Task finished coro=<receive() done, defined at >> D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py:137> >> exception=AttributeError("'_WindowsSelectorEventLoop' >> object has no attribute 'create_future'",)> >> Traceback (most recent call last): >> File "c:\python35\Lib\asyncio\tasks.py", line 239, in _step >> result = coro.send(None) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py", >> line 158, in receive >> return await self.receive_buffer_lpop(channel) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py", >> line 220, in receive_buffer_lpop >> task.result() >> File "c:\python35\Lib\asyncio\futures.py", line 274, in result >> raise self._exception >> File "c:\python35\Lib\asyncio\tasks.py", line 239, in _step >> result = coro.send(None) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py", >> line 171, in receive_loop >> real_channel, message = await self.receive_single(channel) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py", >> line 187, in receive_single >> pool = await self.connection(index) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py", >> line 377, in connection >> self.pools[index] = await aioredis.create_redis_pool(** >> self.hosts[index]) >> File "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\ >> aioredis\commands\__init__.py", line 197, in create_redis_pool >> loop=loop) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\pool.py", >> line 56, in create_pool >> await pool._fill_free(override_min=False) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\pool.py", >> line 388, in _fill_free >> conn = await self._create_new_connection(address) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\connection.py", >> line 124, in create_connection >> loop=loop) >> File >> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\connection.py", >> line 163, in __init__ >> self._close_waiter = loop.create_future() >> AttributeError: '_WindowsSelectorEventLoop' object has no attribute >> 'create_future' >> >> > On Saturday, February 3, 2018 at 8:47:01 AM UTC+2, Andrew Godwin wrote: >> >> Yup, that looks like a genuine bug, I have opened a GitHub issue to track >> it: https://github.com/django/channels/issues/848 >> >> Andrew >> >> On Fri, Feb 2, 2018 at 10:35 PM, Ahmed Magdy <[email protected]> wrote: >> >>> I even made sure to read the docs multiple times before posting. :/ >>> >>> I've been reading about Redis, and since I got windows OS, I installed >>> the port for Windows based redis >>> <https://github.com/MicrosoftArchive/redis>, tested the server and >>> client they are working ok <https://i.imgur.com/78Ycvvj.jpg>. >>> >>> # settings.py >>> # ... >>> ASGI_APPLICATION = 'djangoChannels.routing.application' >>> >>> CHANNEL_LAYERS = { >>> "default": { >>> "BACKEND": "channels_redis.core.RedisChannelLayer", >>> "CONFIG": { >>> "hosts": [("localhost", 6379)], >>> }, >>> }, >>> } >>> >>> >>> # consumers.py >>> from asgiref.sync import AsyncToSync >>> from channels.generic.websocket import WebsocketConsumer >>> >>> class ChatConsumer(WebsocketConsumer): >>> def connect(self): >>> AsyncToSync(self.channel_layer.group_add)("chat", self >>> .channel_name) >>> >>> def disconnect(self): >>> AsyncToSync(self.channel_layer.group_discard)("chat", self >>> .channel_name) >>> >>> raises an exception >>> >>> [2018/02/03 08:30:19] WebSocket HANDSHAKING /sessions/ [127.0.0.1:12778] >>>> ERROR:root:Exception inside application: There is no current event loop >>>> in thread 'Thread-3'. >>>> File "c:\python35\Lib\asyncio\tasks.py", line 241, in _step >>>> result = coro.throw(exc) >>>> File >>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\consumer.py", >>>> line 51, in __call__ >>>> await await_many_dispatch([receive, self.channel_receive], >>>> self.dispatch) >>>> File >>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\utils.py", >>>> line 48, in await_many_dispatch >>>> await dispatch(result) >>>> File >>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >>>> line 84, in inner >>>> return await async_func(*args, **kwargs) >>>> File >>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >>>> line 67, in __call__ >>>> return await asyncio.wait_for(future, timeout=None) >>>> File "c:\python35\Lib\asyncio\tasks.py", line 367, in wait_for >>>> return (yield from fut) >>>> File "c:\python35\Lib\asyncio\futures.py", line 358, in __iter__ >>>> yield self # This tells Task to wait for completion. >>>> File "c:\python35\Lib\asyncio\tasks.py", line 290, in _wakeup >>>> future.result() >>>> File "c:\python35\Lib\asyncio\futures.py", line 274, in result >>>> raise self._exception >>>> File "c:\python35\Lib\concurrent\futures\thread.py", line 55, in run >>>> result = self.fn(*self.args, **self.kwargs) >>>> File >>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >>>> line 76, in thread_handler >>>> raise e >>>> File >>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >>>> line 74, in thread_handler >>>> self.func(*args, **kwargs) >>>> File >>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\consumer.py", >>>> line 93, in dispatch >>>> handler(message) >>>> File >>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\generic\websocket.py", >>>> line 19, in websocket_connect >>>> self.connect() >>>> File "D:\Programming\DjangoWebsite\HUWebsite\husite\djangoChannel >>>> s\djangoChannels\consumers.py", line 7, in connect >>>> AsyncToSync(self.channel_layer.group_add)("chat", >>>> self.channel_name) >>>> File >>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >>>> line 17, in __init__ >>>> self.main_event_loop = asyncio.get_event_loop() >>>> File "c:\python35\Lib\asyncio\events.py", line 626, in get_event_loop >>>> return get_event_loop_policy().get_event_loop() >>>> File "c:\python35\Lib\asyncio\events.py", line 572, in get_event_loop >>>> % threading.current_thread().name) >>>> There is no current event loop in thread 'Thread-3'. >>>> >>> >>> Thanks for what you did so far! >>> >>> On Saturday, February 3, 2018 at 6:58:56 AM UTC+2, Andrew Godwin wrote: >>>> >>>> The docs do mention this in a big callout at the top of the Channel >>>> Layers page :) http://channels.readthedocs.io/en/latest/topics/channel_ >>>> layers.html >>>> >>>> Andrew >>>> >>>> On Fri, Feb 2, 2018 at 8:52 PM, Ahmed Magdy <[email protected]> wrote: >>>> >>>>> Aha thanks for making it clear, I will read more about redis then. >>>>> Shouldn't the docs mention that though? >>>>> >>>>> On Saturday, February 3, 2018 at 6:47:47 AM UTC+2, Andrew Godwin wrote: >>>>>> >>>>>> No, there is no in-memory channel layer any more, only Redis is >>>>>> available at the moment. You must put something into the settings in >>>>>> order >>>>>> to make it function. >>>>>> >>>>>> Andrew >>>>>> >>>>>> On Fri, Feb 2, 2018 at 8:42 PM, Ahmed Magdy <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> I thought it uses in memory channel layer by default if it's empty? >>>>>>> I didn't try setting a value, because only redis was available in v2.0.0 >>>>>>> and I don't like using stuff I don't understand. >>>>>>> >>>>>>> On Saturday, February 3, 2018 at 6:08:02 AM UTC+2, Andrew Godwin >>>>>>> wrote: >>>>>>>> >>>>>>>> It needs to contain a value to work - what value were you trying >>>>>>>> that was not empty? >>>>>>>> >>>>>>>> Andrew >>>>>>>> >>>>>>>> On Fri, Feb 2, 2018 at 8:04 PM, Ahmed Magdy <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> I tried not having CHANNEL_LAYERS or setting it to {} >>>>>>>>> same exception >>>>>>>>> >>>>>>>>> On Saturday, February 3, 2018 at 3:36:43 AM UTC+2, Andrew Godwin >>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> Do you have a CHANNEL_LAYERS setting in your settings file? If >>>>>>>>>> so, what is it set to? >>>>>>>>>> >>>>>>>>>> Andrew >>>>>>>>>> >>>>>>>>>> On Fri, Feb 2, 2018 at 5:17 PM, Ahmed Magdy <[email protected]> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> That's what I did after reading the documentation here's how my >>>>>>>>>>> channels files look like >>>>>>>>>>> >>>>>>>>>>> # settings.py >>>>>>>>>>> # ... >>>>>>>>>>> ASGI_APPLICATION = 'djangoChannels.routing.application' >>>>>>>>>>> # ... >>>>>>>>>>> >>>>>>>>>>> # routing.py >>>>>>>>>>> from django.conf.urls import url >>>>>>>>>>> >>>>>>>>>>> from channels.routing import ProtocolTypeRouter, URLRouter >>>>>>>>>>> from channels.auth import AuthMiddlewareStack >>>>>>>>>>> >>>>>>>>>>> from .consumers import ChatConsumer >>>>>>>>>>> >>>>>>>>>>> application = ProtocolTypeRouter({ >>>>>>>>>>> # Empty for now (http->django views is added by default) >>>>>>>>>>> 'websocket': AuthMiddlewareStack( >>>>>>>>>>> URLRouter([ >>>>>>>>>>> url('^sessions/$', ChatConsumer) >>>>>>>>>>> ]) >>>>>>>>>>> ) >>>>>>>>>>> }) >>>>>>>>>>> >>>>>>>>>>> # consumers.py >>>>>>>>>>> from asgiref.sync import AsyncToSync >>>>>>>>>>> from channels.generic.websocket import WebsocketConsumer >>>>>>>>>>> >>>>>>>>>>> class ChatConsumer(WebsocketConsumer): >>>>>>>>>>> >>>>>>>>>>> def connect(self): >>>>>>>>>>> AsyncToSync(self.channel_layer.group_add)("chat", self >>>>>>>>>>> .channel_name) >>>>>>>>>>> >>>>>>>>>>> def disconnect(self): >>>>>>>>>>> AsyncToSync(self.channel_layer.group_discard)("chat", >>>>>>>>>>> self.channel_name) >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> After connecting with JS websocket to >>>>>>>>>>> >>>>>>>>>>> ws://127.0.0.1:8000/sessions/ >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Raises an exception >>>>>>>>>>> >>>>>>>>>>> Performing system checks... >>>>>>>>>>>> >>>>>>>>>>>> System check identified no issues (0 silenced). >>>>>>>>>>>> February 03, 2018 - 03:14:29 >>>>>>>>>>>> Django version 2.0.2, using settings 'djangoChannels.settings' >>>>>>>>>>>> Starting ASGI/Channels development server at >>>>>>>>>>>> http://127.0.0.1:8000/ >>>>>>>>>>>> Quit the server with CTRL-BREAK. >>>>>>>>>>>> 2018-02-03 03:14:29,799 - INFO - server - HTTP/2 support not >>>>>>>>>>>> enabled (install the http2 and tls Twisted extras) >>>>>>>>>>>> 2018-02-03 03:14:29,800 - INFO - server - Listening on endpoint >>>>>>>>>>>> tcp:port=8000:interface=127.0.0.1 >>>>>>>>>>>> [2018/02/03 03:14:32] WebSocket HANDSHAKING /sessions/ [ >>>>>>>>>>>> 127.0.0.1:8631] >>>>>>>>>>>> ERROR:root:Exception inside application: 'NoneType' object has >>>>>>>>>>>> no attribute 'group_add' >>>>>>>>>>>> File "c:\python35\Lib\asyncio\tasks.py", line 241, in _step >>>>>>>>>>>> result = coro.throw(exc) >>>>>>>>>>>> File "D:\Programming\DjangoWebsite\ >>>>>>>>>>>> HUWebsite\lib\site-packages\channels\consumer.py", line 53, in >>>>>>>>>>>> __call__ >>>>>>>>>>>> await await_many_dispatch([receive], self.dispatch) >>>>>>>>>>>> File "D:\Programming\DjangoWebsite\ >>>>>>>>>>>> HUWebsite\lib\site-packages\channels\utils.py", line 48, in >>>>>>>>>>>> await_many_dispatch >>>>>>>>>>>> await dispatch(result) >>>>>>>>>>>> File "D:\Programming\DjangoWebsite\ >>>>>>>>>>>> HUWebsite\lib\site-packages\asgiref\sync.py", line 84, in inner >>>>>>>>>>>> return await async_func(*args, **kwargs) >>>>>>>>>>>> File "D:\Programming\DjangoWebsite\ >>>>>>>>>>>> HUWebsite\lib\site-packages\asgiref\sync.py", line 67, in >>>>>>>>>>>> __call__ >>>>>>>>>>>> return await asyncio.wait_for(future, timeout=None) >>>>>>>>>>>> File "c:\python35\Lib\asyncio\tasks.py", line 367, in >>>>>>>>>>>> wait_for >>>>>>>>>>>> return (yield from fut) >>>>>>>>>>>> File "c:\python35\Lib\asyncio\futures.py", line 358, in >>>>>>>>>>>> __iter__ >>>>>>>>>>>> yield self # This tells Task to wait for completion. >>>>>>>>>>>> File "c:\python35\Lib\asyncio\tasks.py", line 290, in _wakeup >>>>>>>>>>>> future.result() >>>>>>>>>>>> File "c:\python35\Lib\asyncio\futures.py", line 274, in >>>>>>>>>>>> result >>>>>>>>>>>> raise self._exception >>>>>>>>>>>> File "c:\python35\Lib\concurrent\futures\thread.py", line >>>>>>>>>>>> 55, in run >>>>>>>>>>>> result = self.fn(*self.args, **self.kwargs) >>>>>>>>>>>> File "D:\Programming\DjangoWebsite\ >>>>>>>>>>>> HUWebsite\lib\site-packages\asgiref\sync.py", line 76, in >>>>>>>>>>>> thread_handler >>>>>>>>>>>> raise e >>>>>>>>>>>> File "D:\Programming\DjangoWebsite\ >>>>>>>>>>>> HUWebsite\lib\site-packages\asgiref\sync.py", line 74, in >>>>>>>>>>>> thread_handler >>>>>>>>>>>> self.func(*args, **kwargs) >>>>>>>>>>>> File "D:\Programming\DjangoWebsite\ >>>>>>>>>>>> HUWebsite\lib\site-packages\channels\consumer.py", line 93, in >>>>>>>>>>>> dispatch >>>>>>>>>>>> handler(message) >>>>>>>>>>>> File "D:\Programming\DjangoWebsite\ >>>>>>>>>>>> HUWebsite\lib\site-packages\channels\generic\websocket.py", >>>>>>>>>>>> line 19, in websocket_connect >>>>>>>>>>>> self.connect() >>>>>>>>>>>> File "D:\Programming\DjangoWebsite\ >>>>>>>>>>>> HUWebsite\husite\djangoChannels\djangoChannels\consumers.py", >>>>>>>>>>>> line 8, in connect >>>>>>>>>>>> AsyncToSync(self.channel_layer.group_add)("chat", >>>>>>>>>>>> self.channel_name) >>>>>>>>>>>> 'NoneType' object has no attribute 'group_add' >>>>>>>>>>>> [2018/02/03 03:14:32] WebSocket DISCONNECT /sessions/ [ >>>>>>>>>>>> 127.0.0.1:8631] >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Friday, February 2, 2018 at 7:37:36 PM UTC+2, Andrew Godwin >>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>> Hi Ahmed, >>>>>>>>>>>> >>>>>>>>>>>> In the new release channel layers are optional - if you don't >>>>>>>>>>>> configure them they will indeed come through as None. The settings >>>>>>>>>>>> format >>>>>>>>>>>> changed slightly too - you can read more here: >>>>>>>>>>>> http://channels.readthedocs.io/en/latest/topics/ >>>>>>>>>>>> channel_layers.html >>>>>>>>>>>> >>>>>>>>>>>> Andrew >>>>>>>>>>>> >>>>>>>>>>>> On Fri, Feb 2, 2018 at 3:31 AM, Ahmed Magdy <[email protected] >>>>>>>>>>>> > wrote: >>>>>>>>>>>> >>>>>>>>>>>>> I'm relatively new to channels and was using Channels v1.x.x >>>>>>>>>>>>> groups easily, but after v2.0.0 update and reading the >>>>>>>>>>>>> documentation >>>>>>>>>>>>> >>>>>>>>>>>>> # This example uses WebSocket consumer, which is synchronous, and >>>>>>>>>>>>> so >>>>>>>>>>>>> # needs the async channel layer functions to be converted. >>>>>>>>>>>>> from asgiref.sync import AsyncToSync >>>>>>>>>>>>> >>>>>>>>>>>>> class ChatConsumer(WebsocketConsumer): >>>>>>>>>>>>> >>>>>>>>>>>>> def connect(self): >>>>>>>>>>>>> AsyncToSync(self.channel_layer.group_add)("chat", >>>>>>>>>>>>> self.channel_name) >>>>>>>>>>>>> >>>>>>>>>>>>> def disconnect(self): >>>>>>>>>>>>> AsyncToSync(self.channel_layer.group_discard)("chat", >>>>>>>>>>>>> self.channel_name) >>>>>>>>>>>>> >>>>>>>>>>>>> Enter code here... >>>>>>>>>>>>> >>>>>>>>>>>>> channel_layer, channel_name are always NoneType and exception >>>>>>>>>>>>> occurs. >>>>>>>>>>>>> >>>>>>>>>>>>> Is that because I didn't configure channel layers? But in the >>>>>>>>>>>>> old version I also used the in memory type and Groups were >>>>>>>>>>>>> working well. >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> 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/grou >>>>>>>>>>>>> p/django-users. >>>>>>>>>>>>> To view this discussion on the web visit >>>>>>>>>>>>> https://groups.google.com/d/msgid/django-users/fff84d59-da69 >>>>>>>>>>>>> -47d5-a7c3-ee0221680642%40googlegroups.com >>>>>>>>>>>>> <https://groups.google.com/d/msgid/django-users/fff84d59-da69-47d5-a7c3-ee0221680642%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>>>>>> . >>>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> <https://lh3.googleusercontent.com/-fvPoTzCZOwo/WnUNLrDzVZI/AAAAAAAAC6Q/lNyrJjyOUtkudo5F--8pKqzlX23r25i4gCLcBGAs/s1600/Capture.JPG> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> 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/8ca34830-d807 >>>>>>>>>>> -447c-836b-d2e52ee87b6d%40googlegroups.com >>>>>>>>>>> <https://groups.google.com/d/msgid/django-users/8ca34830-d807-447c-836b-d2e52ee87b6d%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/d0fc9f6a-43f4 >>>>>>>>> -41c1-8a5e-b988a9fa7870%40googlegroups.com >>>>>>>>> <https://groups.google.com/d/msgid/django-users/d0fc9f6a-43f4-41c1-8a5e-b988a9fa7870%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/fb9aa942-8d53 >>>>>>> -472c-bec0-a1c4a46171d3%40googlegroups.com >>>>>>> <https://groups.google.com/d/msgid/django-users/fb9aa942-8d53-472c-bec0-a1c4a46171d3%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/3329c3e6-a7db >>>>> -4879-9b87-1c478ba4f0da%40googlegroups.com >>>>> <https://groups.google.com/d/msgid/django-users/3329c3e6-a7db-4879-9b87-1c478ba4f0da%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/ms >>> gid/django-users/1790fdec-3855-4f19-bc28-9736b9dad005%40googlegroups.com >>> <https://groups.google.com/d/msgid/django-users/1790fdec-3855-4f19-bc28-9736b9dad005%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/02948f71-38ed-4f6b-a9f3-ed0ae15d856b%40googlegroups.com > <https://groups.google.com/d/msgid/django-users/02948f71-38ed-4f6b-a9f3-ed0ae15d856b%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/CAFwN1uoTm1FffVVNLwHMcfS0kgRbxmarLs76GOVJ99bZz9Y0pQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

