Tom,

That's great! Thanks for the feedback.

I've updated the PR <https://github.com/django/djangoproject.com/pull/870>
with something along the lines of what you suggested (along with the
corresponding configuration in Fastly).

Take a look and let me know what you think.

Cheers,
Tobias



On Sun, Feb 24, 2019 at 10:40 AM Tom Forbes <t...@tomforb.es> wrote:

> Awesome work! For my location (Lisbon, Portugal) it takes about 130ms to
> retrieve the HTML for a docs page (
> https://django-docs.global.ssl.fastly.net/en/2.1/intro/reusable-apps/ to
> be specific). The same page on docs.djangoproject.com responds in
> 800–900ms.
>
>
>
>
> On 24 February 2019 at 14:35:55, Tobias McNulty (tob...@caktusgroup.com)
> wrote:
>
> Hi Tom,
>
> Thanks for your message. I think we'll end up with Fastly since it would
> be free, but I'm waiting to see their sponsorship contract. CloudFront
> would work too but I don't know of any such open source sponsorship options
> with AWS.
>
> I will say wildcard purging looks a bit simpler in CloudFront, but your
> idea purging the whole cache only for non-dev builds could work (provided
> we have a lower cache timeout or a single wildcard purge condition set up
> for the dev builds, I guess).
>
> Feel free to test and post any feedback about Fastly prior to the
> potential transition here:
> https://django-docs.global.ssl.fastly.net/en/2.1/ (this is set up on a
> free dev account, so no custom SSL)
>
> For the sake of comparison I'm working on getting a distribution set up
> for CloudFront too, but it won't be so simple to test (without a DNS or
> server configuration change) since I don't think CloudFront supports
> passing a custom Host header to the origin like Fastly does (i.e., you'll
> probably need to edit /etc/hosts).
>
> Cheers,
> Tobias
>
>
> On Sat, Feb 23, 2019, 7:15 PM Tom Forbes <t...@tomforb.es> wrote:
>
>> Sorry, I did not completely grok your message. I would be in favour of
>> just invalidating the whole cache if needed, it seems the simplest
>> solution. Invalidating most of the cache on every non-dev deploy would also
>> be OK I think.
>>
>> On Sun, 24 Feb 2019, 00:10 Tom Forbes, <t...@tomforb.es> wrote:
>>
>>> Which CDN are we going to use? Fastly has awesome sub 100ms global
>>> invalidation which we can trigger on every deploy, and cloudflare has
>>> something similar.
>>>
>>> On Sun, 24 Feb 2019, 00:00 Tobias McNulty, <tob...@caktusgroup.com>
>>> wrote:
>>>
>>>> Hi all,
>>>>
>>>> An implementation question has come up regarding cache lifetime (see this
>>>> PR <https://github.com/django/djangoproject.com/pull/870>). Right now,
>>>> the whole site (including docs) has the site-wide Django cache enabled
>>>> <https://github.com/django/djangoproject.com/blob/master/djangoproject/settings/prod.py#L43-L45>,
>>>> with a timeout of 5 minutes
>>>> <https://github.com/django/djangoproject.com/blob/master/djangoproject/settings/common.py#L27>.
>>>> A couple docs views (search_suggestions
>>>> <https://github.com/django/djangoproject.com/blob/master/docs/views.py#L248-L250>
>>>> and search_description
>>>> <https://github.com/django/djangoproject.com/blob/master/docs/views.py#L272-L274>)
>>>> views have longer timeouts set (to 1 hour and 1 week, respectively).
>>>>
>>>> Once released, the vast majority of Django docs won't change much,
>>>> except for the release notes section and any (likely minor) related updates
>>>> to the docs themselves. To get the most benefit out of a CDN, it would
>>>> obviously be desirable to set the timeout to something greater than 5
>>>> minutes.
>>>>
>>>> At the same time, there are moments when a quick update to the docs
>>>> *is* desired, and waiting an hour or more for any cached pages to
>>>> expire may cause significant confusion, for example, in conjunction with a
>>>> security release for which stubbed (non-final) release notes may have
>>>> already been pushed out and cached.
>>>>
>>>> I see two main options at this point (which could even be combined):
>>>>
>>>> 1) Invalidate the whole cache (or at least some key release notes URLs)
>>>> any time there's a docs build that has changes. It would be pretty easy to
>>>> piggyback off of the existing business logic for avoiding a rebuild
>>>> <https://github.com/django/djangoproject.com/blob/master/docs/management/commands/update_docs.py#L86-L93>
>>>> if the git checkout hasn't changed (in the update_docs management command).
>>>> 2) Pick subsections of the docs (e.g., for anything matching
>>>> '/<lang>/<version>/releases/*' and perhaps the development docs) that would
>>>> keep a shorter cache timeout of 5-10 minutes. All URLs not specifically
>>>> requiring this special treatment would get a longer timeout, perhaps
>>>> somewhere between 1 and 24 hours.
>>>>
>>>> So, some questions for the list:
>>>>
>>>> * Are there sections of the docs besides '/<lang>/<version>/releases/'
>>>> and '/<lang>/dev/' that might update frequently and merit some combination
>>>> of invalidation and/or a shorter cache time? And what's a good cache
>>>> timeout for such pages?
>>>> * How long are we comfortable waiting for *other* (not frequently
>>>> updated) pages to timeout, in the event they do change?
>>>>
>>>> Tobias
>>>>
>>>> On Fri, Feb 15, 2019 at 7:13 AM Tobias McNulty <tob...@caktusgroup.com>
>>>> wrote:
>>>>
>>>>> Thanks for sharing the results.
>>>>>
>>>>> I did manage to get a domain set up with working SSL, in case you want
>>>>> to use it: https://django-docs.global.ssl.fastly.net/en/2.1/
>>>>>
>>>>> Tobias
>>>>>
>>>>> On Thu, Feb 14, 2019, 11:49 PM Cheng C <coupohol...@chicheng.me wrote:
>>>>>
>>>>>> Thanks for the test site, Tobias.
>>>>>>
>>>>>> Tested from Melbourne, Australia:
>>>>>>
>>>>>> https://docs.djangoproject.com/en/2.1/
>>>>>> Average Ping: 268ms
>>>>>>  Browser: 22 requests, 238KB transferred, Finish: 2.72s,
>>>>>> DOMContentLoaded: 1.37s, Load: 1.68s
>>>>>>
>>>>>> https://docs.djangoproject.com.global.prod.fastly.net/en/2.1/
>>>>>> Average Ping: 28ms
>>>>>>  Browser: 22 requests, 240KB transferred, Finish: 947ms,
>>>>>> DOMContentLoaded: 627ms, Load: 910ms
>>>>>>
>>>>>> Tested on Chrome with "Disable cache" checked, and no render issue
>>>>>> was found.
>>>>>>
>>>>>> On Friday, February 15, 2019 at 2:09:09 PM UTC+11, Tobias McNulty
>>>>>> wrote:
>>>>>>>
>>>>>>> Adam, is there another provider you would recommend instead, that
>>>>>>> does not require changing DNS providers? FWIW, python.org does in
>>>>>>> fact use Fastly:
>>>>>>>
>>>>>>> $ host www.python.org
>>>>>>> www.python.org is an alias for dualstack.python.map.fastly.net.
>>>>>>> dualstack.python.map.fastly.net has address 151.101.248.223
>>>>>>> dualstack.python.map.fastly.net has IPv6 address 2a04:4e42:2f::223
>>>>>>>
>>>>>>> Fastly did write back to say they're happy to help, though there's a
>>>>>>> contract which I guess the DSF would need to review and sign, if it's
>>>>>>> acceptable.
>>>>>>>
>>>>>>> In the meantime, feel free to give this a try and let me know if you
>>>>>>> see any issues:
>>>>>>> https://docs.djangoproject.com.global.prod.fastly.net/en/2.1/ (Not
>>>>>>> for permanent use, obviously; you'll get a cert warning, and some pages
>>>>>>> will redirect you back to https://docs.djangoproject.com.)
>>>>>>>
>>>>>>> To keep this thread from getting too noisy, you can find me
>>>>>>> (tobias1) in #django-dev on FreeNode.
>>>>>>>
>>>>>>> Cheers,
>>>>>>> Tobias
>>>>>>>
>>>>>>> On Thu, Feb 14, 2019 at 8:26 AM Adam Johnson <m...@adamj.eu> wrote:
>>>>>>>
>>>>>>>> I have not had great experience with Fastly in the past and would
>>>>>>>> avoid them. They run an old fork of Varnish which is not fun to 
>>>>>>>> configure.
>>>>>>>>
>>>>>>>> On Thu, 14 Feb 2019 at 11:16, Josh Smeaton <josh.s...@gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Cloudflare have many SSL options, including fully encrypted and
>>>>>>>>> authenticated comms all the way through (terminate and reconnect).
>>>>>>>>> Typically done by having a “hidden” origin domain that also hosts a
>>>>>>>>> certificate. I’m unsure if it’s possible to have both origin and front
>>>>>>>>> hosting the same name so that DNS alone can decide to hit cdn or 
>>>>>>>>> origin.
>>>>>>>>>
>>>>>>>>> Anyway, it seems weird to me to dismiss a CDN offhand “because
>>>>>>>>> security”. Especially considering the size of the providers and the
>>>>>>>>> expertise their teams have.
>>>>>>>>>
>>>>>>>>> Cloudflare (fastly, cloudfront, whatever) aren’t some “random TLS”
>>>>>>>>> providers. I would probably go as far to say that putting a CDN in 
>>>>>>>>> front of
>>>>>>>>> both the docs and the release packages would likely be a net 
>>>>>>>>> improvement in
>>>>>>>>> security for users.
>>>>>>>>>
>>>>>>>>> On Thu, 14 Feb 2019 at 21:58, Tom Forbes <t...@tomforb.es> wrote:
>>>>>>>>>
>>>>>>>>>> That makes sense, but in this case we are only talking about
>>>>>>>>>> potentially yielding control of the docs subdomain which is not used 
>>>>>>>>>> to
>>>>>>>>>> serve sensitive build artefacts?
>>>>>>>>>>
>>>>>>>>>> Another option is fastly.com, who support other large open
>>>>>>>>>> source projects for free. They essentially give you geographically
>>>>>>>>>> distributed HAProxy instances and you have a lot more control over 
>>>>>>>>>> them. I
>>>>>>>>>> believe several large Linux distributions use them to serve cached 
>>>>>>>>>> apt
>>>>>>>>>> packages.
>>>>>>>>>>
>>>>>>>>>> Regarding TLS termination, unfortunately any CDN we use will
>>>>>>>>>> likely need to do this for the whole domain to get any benefit. The 
>>>>>>>>>> Django
>>>>>>>>>> docs are text/html heavy with very few, if any, images. So the real 
>>>>>>>>>> speed
>>>>>>>>>> benefit will have to come from serving that, which requires TLS 
>>>>>>>>>> termination
>>>>>>>>>> (and therefore interception) at their end.
>>>>>>>>>>
>>>>>>>>>> On Thu, 14 Feb 2019, 06:32 Markus Holtermann, <
>>>>>>>>>> in...@markusholtermann.eu> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi all
>>>>>>>>>>>
>>>>>>>>>>> to elaborate on what Tobias said: we deliberately have the
>>>>>>>>>>> infrastructure spread across multiple service providers: DNS 
>>>>>>>>>>> registry,
>>>>>>>>>>> nameservers, hosting, TLS certificate authority, … None of them 
>>>>>>>>>>> have access
>>>>>>>>>>> to everything. The reason is that we offer the download of the 
>>>>>>>>>>> release
>>>>>>>>>>> artifacts from the djangoproject.com website. And we would like
>>>>>>>>>>> to ensure that the TLS termination happens by us and not some random
>>>>>>>>>>> service provider. After all, Django is used by enterprises that do 
>>>>>>>>>>> have
>>>>>>>>>>> some restrictions on where you're allowed to download software from.
>>>>>>>>>>>
>>>>>>>>>>> By handing over DNS to some CDN provider, we loose the ability
>>>>>>>>>>> to ensure that happens.
>>>>>>>>>>>
>>>>>>>>>>> That said, if there's a CDN that works as a reverse proxy and
>>>>>>>>>>> doesn't require us to hand over control of DNS, I guess we could be
>>>>>>>>>>> interested in moving the docs behind that.
>>>>>>>>>>>
>>>>>>>>>>> /Markus
>>>>>>>>>>>
>>>>>>>>>>> On Thu, Feb 14, 2019, at 2:22 AM, Tobias McNulty wrote:
>>>>>>>>>>> > For me it's the trust factor (allowing someone else to decrypt
>>>>>>>>>>> and
>>>>>>>>>>> > re-encrypt all our data). This may be less of an issue for the
>>>>>>>>>>> docs
>>>>>>>>>>> > site, *if* we don't have to assign DNS authority for the whole
>>>>>>>>>>> domain
>>>>>>>>>>> > to the CDN provider.
>>>>>>>>>>> >
>>>>>>>>>>> > Tobias
>>>>>>>>>>> >
>>>>>>>>>>> >
>>>>>>>>>>> > On Wed, Feb 13, 2019, 7:47 PM Kye Russell <m...@kye.id.au
>>>>>>>>>>> wrote:
>>>>>>>>>>> > > I’ve been hearing that there are other CDN providers that
>>>>>>>>>>> offer a very comparable service for a fraction of the cost of 
>>>>>>>>>>> CloudFront.
>>>>>>>>>>> > >
>>>>>>>>>>> > > Anyways, at this stage let’s not get bogged down on provider
>>>>>>>>>>> decisions. I’m curious if anyone has any general objections to a 
>>>>>>>>>>> CDN of any
>>>>>>>>>>> kind.
>>>>>>>>>>> > >
>>>>>>>>>>> > > It shouldn’t be that big a deal to automatically invalidate
>>>>>>>>>>> when the docs are updated. But I’m sure there’s something I’m 
>>>>>>>>>>> missing.
>>>>>>>>>>> > >
>>>>>>>>>>> > > On Thu, 14 Feb 2019 at 8:36 am, Cristiano Coelho <
>>>>>>>>>>> cristia...@gmail.com> wrote:
>>>>>>>>>>> > >> Consider AWS's cloudfront then :)
>>>>>>>>>>> > >>
>>>>>>>>>>> > >> El martes, 12 de febrero de 2019, 2:34:09 (UTC-5), Florian
>>>>>>>>>>> Apolloner escribió:
>>>>>>>>>>> > >>> Especially cloudflare is a service we do not want to use.
>>>>>>>>>>> as for the docs only, does the mirror on rtd work better for you? 
>>>>>>>>>>> They are
>>>>>>>>>>> probably behind a CDN.
>>>>>>>>>>> > >>>
>>>>>>>>>>> > >>> Cheers,
>>>>>>>>>>> > >>> Florian
>>>>>>>>>>> > >>>
>>>>>>>>>>> > >>> On Tuesday, February 12, 2019 at 6:43:41 AM UTC+1, Cheng C
>>>>>>>>>>> wrote:
>>>>>>>>>>> > >>>> Hi,
>>>>>>>>>>> > >>>>
>>>>>>>>>>> > >>>> Is it possible to utilize a CDN service for
>>>>>>>>>>> djangoproject.com, or at least on docs.djangoproject.com? The
>>>>>>>>>>> site is actually quite fast for me but I think there is still room 
>>>>>>>>>>> for
>>>>>>>>>>> improvement. Cloudflare sponsored dozens of open source projects <
>>>>>>>>>>> https://developers.cloudflare.com/sponsorships/>, probably they
>>>>>>>>>>> can provide free service for django as well.
>>>>>>>>>>> > >>>>
>>>>>>>>>>> > >>>> Tested from Melbourne, Australia:
>>>>>>>>>>> > >>>>
>>>>>>>>>>> > >>>> https://www.djangoproject.com/
>>>>>>>>>>> > >>>>  Average Ping: 245ms
>>>>>>>>>>> > >>>>  Browser: 21 requests, 211KB transferred, Finish: 2.52s,
>>>>>>>>>>> DOMContentLoaded: 1.16s, Load: 1.48s
>>>>>>>>>>> > >>>>
>>>>>>>>>>> > >>>> https://git-scm.com/
>>>>>>>>>>> > >>>>  Average Ping: 5ms
>>>>>>>>>>> > >>>>  Browser: 42 requests, 351KB transferred, Finish: 717ms,
>>>>>>>>>>> DOMContentLoaded: 564ms, Load: 699ms
>>>>>>>>>>> > >>>>
>>>>>>>>>>> > >>>> Tested on Chrome with "Disable cache" checked (but not
>>>>>>>>>>> the first time visit, so DNS query time might not be included).
>>>>>>>>>>> > >>>>
>>>>>>>>>>> > >>>> Best regards and thanks for all your great work.
>>>>>>>>>>> > >>
>>>>>>>>>>> >
>>>>>>>>>>> >
>>>>>>>>>>> > >>  --
>>>>>>>>>>> > >>  You received this message because you are subscribed to
>>>>>>>>>>> the Google Groups "Django developers (Contributions to Django 
>>>>>>>>>>> itself)"
>>>>>>>>>>> group.
>>>>>>>>>>> > >>  To unsubscribe from this group and stop receiving emails
>>>>>>>>>>> from it, send an email to django-develop...@googlegroups.com.
>>>>>>>>>>> > >>  To post to this group, send email to
>>>>>>>>>>> django-d...@googlegroups.com.
>>>>>>>>>>> > >>  Visit this group at
>>>>>>>>>>> https://groups.google.com/group/django-developers.
>>>>>>>>>>> > >>  To view this discussion on the web visit
>>>>>>>>>>> https://groups.google.com/d/msgid/django-developers/548db807-647f-4d0b-99c2-f9f229f7175e%40googlegroups.com
>>>>>>>>>>> <
>>>>>>>>>>> https://groups.google.com/d/msgid/django-developers/548db807-647f-4d0b-99c2-f9f229f7175e%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 developers (Contributions to Django itself)" 
>>>>>>>>>>> group.
>>>>>>>>>>> > >  To unsubscribe from this group and stop receiving emails
>>>>>>>>>>> from it, send an email to django-develop...@googlegroups.com.
>>>>>>>>>>> > >  To post to this group, send email to
>>>>>>>>>>> django-d...@googlegroups.com.
>>>>>>>>>>> > >  Visit this group at
>>>>>>>>>>> https://groups.google.com/group/django-developers.
>>>>>>>>>>> > >  To view this discussion on the web visit
>>>>>>>>>>> https://groups.google.com/d/msgid/django-developers/CANK-yknQ1Auf6CFD-%2B94qoATQ2K%2By0poLw%3DaxyJYjO3PaHOQWA%40mail.gmail.com
>>>>>>>>>>> <
>>>>>>>>>>> https://groups.google.com/d/msgid/django-developers/CANK-yknQ1Auf6CFD-%2B94qoATQ2K%2By0poLw%3DaxyJYjO3PaHOQWA%40mail.gmail.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 developers (Contributions to Django itself)"
>>>>>>>>>>> group.
>>>>>>>>>>> >  To unsubscribe from this group and stop receiving emails from
>>>>>>>>>>> it, send
>>>>>>>>>>> > an email to django-develop...@googlegroups.com.
>>>>>>>>>>> >  To post to this group, send email to
>>>>>>>>>>> > django-d...@googlegroups.com.
>>>>>>>>>>> >  Visit this group at
>>>>>>>>>>> https://groups.google.com/group/django-developers.
>>>>>>>>>>> >  To view this discussion on the web visit
>>>>>>>>>>> >
>>>>>>>>>>> https://groups.google.com/d/msgid/django-developers/CAMGFDKTAVv_3HJCTHqd-vSOFt9-WUvUDEGR8sYuawyVT7MAotQ%40mail.gmail.com
>>>>>>>>>>> <
>>>>>>>>>>> https://groups.google.com/d/msgid/django-developers/CAMGFDKTAVv_3HJCTHqd-vSOFt9-WUvUDEGR8sYuawyVT7MAotQ%40mail.gmail.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 developers  (Contributions to Django itself)" 
>>>>>>>>>>> group.
>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from
>>>>>>>>>>> it, send an email to django-develop...@googlegroups.com.
>>>>>>>>>>> To post to this group, send email to
>>>>>>>>>>> django-d...@googlegroups.com.
>>>>>>>>>>> Visit this group at
>>>>>>>>>>> https://groups.google.com/group/django-developers.
>>>>>>>>>>>
>>>>>>>>>> To view this discussion on the web visit
>>>>>>>>>>> https://groups.google.com/d/msgid/django-developers/fbb5c67a-8803-43ce-8fe3-ee6f42251d8a%40www.fastmail.com
>>>>>>>>>>> .
>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> You received this message because you are subscribed to a topic
>>>>>>>>>> in the Google Groups "Django developers (Contributions to Django 
>>>>>>>>>> itself)"
>>>>>>>>>> group.
>>>>>>>>>> To unsubscribe from this topic, visit
>>>>>>>>>> https://groups.google.com/d/topic/django-developers/UovZxrUPWLU/unsubscribe
>>>>>>>>>> .
>>>>>>>>>> To unsubscribe from this group and all its topics, send an email
>>>>>>>>>> to django-develop...@googlegroups.com.
>>>>>>>>>> To post to this group, send email to django-d...@googlegroups.com
>>>>>>>>>> .
>>>>>>>>>> Visit this group at
>>>>>>>>>> https://groups.google.com/group/django-developers.
>>>>>>>>>> To view this discussion on the web visit
>>>>>>>>>> https://groups.google.com/d/msgid/django-developers/CAFNZOJOpXjJEgq4iEEaiZqYzQDc9XwZ8Jba4-RP2-Lahr7jOgQ%40mail.gmail.com
>>>>>>>>>> <https://groups.google.com/d/msgid/django-developers/CAFNZOJOpXjJEgq4iEEaiZqYzQDc9XwZ8Jba4-RP2-Lahr7jOgQ%40mail.gmail.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 developers (Contributions to Django itself)" group.
>>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>>> send an email to django-develop...@googlegroups.com.
>>>>>>>>> To post to this group, send email to django-d...@googlegroups.com.
>>>>>>>>> Visit this group at
>>>>>>>>> https://groups.google.com/group/django-developers.
>>>>>>>>> To view this discussion on the web visit
>>>>>>>>> https://groups.google.com/d/msgid/django-developers/CAPbDM0dBnO4_yko9qQVjgR25T758bT8%3DThUMszA3eOb30tuYYA%40mail.gmail.com
>>>>>>>>> <https://groups.google.com/d/msgid/django-developers/CAPbDM0dBnO4_yko9qQVjgR25T758bT8%3DThUMszA3eOb30tuYYA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>>>> .
>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Adam
>>>>>>>> --
>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>> Groups "Django developers (Contributions to Django itself)" group.
>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>> send an email to django-develop...@googlegroups.com.
>>>>>>>> To post to this group, send email to django-d...@googlegroups.com.
>>>>>>>> Visit this group at
>>>>>>>> https://groups.google.com/group/django-developers.
>>>>>>>> To view this discussion on the web visit
>>>>>>>> https://groups.google.com/d/msgid/django-developers/CAMyDDM3vZJ6V%2BTvavmDS-rU1JkQcMnWy0FfPpq-%3DY52kepeYjA%40mail.gmail.com
>>>>>>>> <https://groups.google.com/d/msgid/django-developers/CAMyDDM3vZJ6V%2BTvavmDS-rU1JkQcMnWy0FfPpq-%3DY52kepeYjA%40mail.gmail.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 developers (Contributions to Django itself)" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to django-developers+unsubscr...@googlegroups.com.
>>>>>> To post to this group, send email to
>>>>>> django-developers@googlegroups.com.
>>>>>> Visit this group at https://groups.google.com/group/django-developers
>>>>>> .
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/django-developers/aa3e7806-f896-4125-afcb-4f886b70ace0%40googlegroups.com
>>>>>> <https://groups.google.com/d/msgid/django-developers/aa3e7806-f896-4125-afcb-4f886b70ace0%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 developers (Contributions to Django itself)" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to django-developers+unsubscr...@googlegroups.com.
>>>> To post to this group, send email to django-developers@googlegroups.com
>>>> .
>>>> Visit this group at https://groups.google.com/group/django-developers.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/django-developers/CAMGFDKRVHxL82tNOuknMm1UhvJ9-fpknpAa%3DwMbsaMghEHhcAw%40mail.gmail.com
>>>> <https://groups.google.com/d/msgid/django-developers/CAMGFDKRVHxL82tNOuknMm1UhvJ9-fpknpAa%3DwMbsaMghEHhcAw%40mail.gmail.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 developers (Contributions to Django itself)" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to django-developers+unsubscr...@googlegroups.com.
>> To post to this group, send email to django-developers@googlegroups.com.
>> Visit this group at https://groups.google.com/group/django-developers.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/django-developers/CAFNZOJM4AppwiAMdbHkaJ7d%3Dbc02j%3D5zPZ6RMs4p81FGaO2D4Q%40mail.gmail.com
>> <https://groups.google.com/d/msgid/django-developers/CAFNZOJM4AppwiAMdbHkaJ7d%3Dbc02j%3D5zPZ6RMs4p81FGaO2D4Q%40mail.gmail.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 developers (Contributions to Django itself)" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to django-developers+unsubscr...@googlegroups.com.
> To post to this group, send email to django-developers@googlegroups.com.
> Visit this group at https://groups.google.com/group/django-developers.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-developers/CAMGFDKT8G6BvBANW-_weObNrX1faPV_QE-gjK2gn9qSbbsRdFQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/django-developers/CAMGFDKT8G6BvBANW-_weObNrX1faPV_QE-gjK2gn9qSbbsRdFQ%40mail.gmail.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 developers (Contributions to Django itself)" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to django-developers+unsubscr...@googlegroups.com.
> To post to this group, send email to django-developers@googlegroups.com.
> Visit this group at https://groups.google.com/group/django-developers.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-developers/CAFNZOJMM%2B7p3d4Ujmz8zbLy1rVRL1%2BZjm-s3wa_8_P%3D7y47FOQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/django-developers/CAFNZOJMM%2B7p3d4Ujmz8zbLy1rVRL1%2BZjm-s3wa_8_P%3D7y47FOQ%40mail.gmail.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 developers  (Contributions to Django itself)" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-developers+unsubscr...@googlegroups.com.
To post to this group, send email to django-developers@googlegroups.com.
Visit this group at https://groups.google.com/group/django-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-developers/CAMGFDKTtg5KWKf9ZzFxOwkC0U7kE78RuYKfY-jy-QKdLKhu_1A%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to