Files
@ 956f8c6fdaad
Branch filter:
Location: website/conservancy/__init__.py - annotation
956f8c6fdaad
1.2 KiB
text/x-python
podjango: Add "Podcast" model to support multiple podcasts
Each Cast (episode) can belong to one or more Podcast, allowing episodes to be
shared between podcasts. This enables us introductory episodes to be delivered
in their own feed, but also included in the main "The Corresponding Source"
feed.
This required adding an additional `podcast_slug` argument to most views. The
date archive views were dropped because they're not linked to from anywhere.
Added a `podcasts` view as an index of all available Podcasts.
Each Cast (episode) can belong to one or more Podcast, allowing episodes to be
shared between podcasts. This enables us introductory episodes to be delivered
in their own feed, but also included in the main "The Corresponding Source"
feed.
This required adding an additional `podcast_slug` argument to most views. The
date archive views were dropped because they're not linked to from anywhere.
Added a `podcasts` view as an index of all available Podcasts.
ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 d0464e870c1a ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 813446c568bd ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 ce6be591bde2 | import hashlib
class ParameterValidator:
def __init__(self, given_hash_or_params, params_hash_key=None):
from django.conf import settings
if params_hash_key is None:
self.given_hash = given_hash_or_params
else:
self.given_hash = given_hash_or_params.get(params_hash_key)
seed = settings.SECRET_KEY.encode('utf-8')
self.hasher = hashlib.sha256(seed)
if isinstance(self.given_hash, str):
self.hash_type = type(self.given_hash)
else:
self.hash_type = type(self.hasher.hexdigest())
self.valid = None
if not (self.given_hash and seed):
self.fail()
def __enter__(self):
self.valid = self.valid and None
return self
def __exit__(self, exc_type, exc_value, exc_tb):
if exc_type is None:
self.check()
else:
self.fail()
def validate(self, data):
self.valid = self.valid and None
self.hasher.update(data)
def check(self):
if self.valid or (self.valid is None):
self.valid = self.hash_type(self.hasher.hexdigest()) == self.given_hash
return self.valid
def fail(self):
self.valid = False
|