Let's put this into a separate file (e.g. `settings/newsletters.py`) and import it in base.py. This is a lot of cruft.

The other possibility is that we could do a write-through cache that just saves the JSON from the api call to disk, to which we can then refer if basket goes down. We should use the DB for this, but we don't have it quite yet.