def __call__(self, message, status=None, overwrite=False, **extra_payload): if response is None: raise ValueError("Must provide a response object or " "configure a callable that provides one") payload = [] if not overwrite and request: try: # Get payload, if already set before payload = request.environ['webflash.payload'] payload = json.loads(url_unquote(payload)) log.debug("Got payload from environ %d", id(request.environ)) if isinstance(payload, dict): log.debug('Upgrading old-style payload...') payload = [payload] except: # No previous payload set before pass payload.append( dict( # Force the message to be unicode so lazystrings, etc... are coerced message=unicode_text(message), status=status or self.default_status, **extra_payload )) payload = url_quote(json.dumps(payload)) if request: # Save the payload in environ too in case JavaScript is not being # used and the message is being displayed in the same request. request.environ['webflash.payload'] = payload log.debug("Setting payload in environ %d", id(request.environ)) log.debug("Setting payload in cookie") response.set_cookie(self.cookie_name, payload) if len(response.headers['Set-Cookie']) > 4096: raise ValueError('Flash value is too long (cookie would be >4k)')
def _prepare_payload(self, **data): return url_quote(json.dumps(data))
def prepare_payload(self, **data): return url_quote(json.dumps(data))