How about Signer class? signer = Signer(key=...) assert signer.unsign(signer.sign(value)) == value
This way you wouldn't have to pass around key, extra_key, and potential further arguments but a single Signer instance. Plus, you could easyly overwrite hashing, concatenation, and serialization as well as add functionality transparently, eg.: sig = TimestampedSignatureFactory(ttl=3600) # sig.unsign() will raise SigntureExpired after 3600 seconds > 1) request.unsign_cookie('foo') -- This breaks the parallelism with > existing cookies. Sometimes we'll be doing request.COOKIES['foo'] and > sometimes we'll be doing request.unsign_cookie('foo'). > > 2) A decorator for views -- @unsign_cookies("foo", "bar") -- This > doesn't allow any sort of fall-back (you can't customize what to do if > a given cookie is improperly signed) > > 3) COOKIES as an intelligent object -- We can overload .get so we're > doing something like request.COOKIES.get('foo', signed=True) -- I > think this has the best chance at an interface that keeps a consistent > feel. It's completely backward compatible, though it breaks the > traditional expectation of what you can do via the `get` method on a > dictionary. 4) A signed.Cookies object: signed_cookies = signed.Cookies(request, key=...) signed_cookies.set_cookie(key, value, **kwargs) value = signed_cookies[key] or signed_cookies = signer.get_cookies(request) ... __ Johannes --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-developers?hl=en -~----------~----~----~----~------~----~------~--~---