def _charset__del(self): header = self.headers.pop('Content-Type', None) if header is None: # Don't need to remove anything return match = CHARSET_RE.search(header) if match: header = header[:match.start()] + header[match.end():] self.headers['Content-Type'] = header
def _charset__get(self): """ Get/set the charset (in the Content-Type) """ header = self.headers.get('Content-Type') if not header: return None match = CHARSET_RE.search(header) if match: return match.group(1) return None
def _charset__set(self, charset): if charset is None: del self.charset return header = self.headers.pop("Content-Type", None) if header is None: raise AttributeError("You cannot set the charset when no " "content-type is defined") match = CHARSET_RE.search(header) if match: header = header[: match.start()] + header[match.end() :] header += "; charset=%s" % charset self.headers["Content-Type"] = header
def _charset__set(self, charset): if charset is None: del self.charset return header = self.headers.pop('Content-Type', None) if header is None: raise AttributeError("You cannot set the charset when no " "content-type is defined") match = CHARSET_RE.search(header) if match: header = header[:match.start()] + header[match.end():] header += '; charset=%s' % charset self.headers['Content-Type'] = header
def _charset__get(self): """ Get/set the charset specified in Content-Type. In the case JSON content where the charset param is not standards compliant, we ignore this. """ header = self.headers.get('Content-Type') if not header: return None match = CHARSET_RE.search(header) if match: return match.group(1) return None
def _charset__set(self, charset): if charset is None: del self.charset return header = self.headers.get('Content-Type', None) if header is None: raise AttributeError("You cannot set the charset when no " "content-type is defined") if _is_json(header): return match = CHARSET_RE.search(header) if match: header = header[:match.start()] + header[match.end():] header += '; charset=%s' % charset self.headers['Content-Type'] = header
def __init__(self, body=None, status=None, headerlist=None, app_iter=None, content_type=None, conditional_response=None, **kw): if app_iter is None and body is None and ('json_body' in kw or 'json' in kw): if 'json_body' in kw: json_body = kw.pop('json_body') else: json_body = kw.pop('json') body = json.dumps(json_body, separators=(',', ':')) if content_type is None: content_type = 'application/json' if app_iter is None: if body is None: body = b'' elif body is not None: raise TypeError( "You may only give one of the body and app_iter arguments") if status is None: self._status = '200 OK' else: self.status = status # initialize headers, content_type, and charset self._headers = None if headerlist is None: self._headerlist = [] else: self._headerlist = headerlist content_type = content_type or self.headers.get('Content-Type') or \ self.default_content_type if 'Content-Type' not in self.headers: self.headers['Content-Type'] = content_type charset = kw.get('charset') if content_type: if charset: self.charset = charset elif self.default_charset: charset_match = CHARSET_RE.search(content_type) if charset_match: charset = self.charset elif (content_type == 'text/html' or content_type.startswith('text/') or _is_xml(content_type)): charset = self.default_charset self.charset = charset elif _is_json(content_type): # don't set charset on the Content-Type for standards # compliance, but still need it locally to encode body text self.charset = None charset = self.default_charset if conditional_response is None: self.conditional_response = self.default_conditional_response else: self.conditional_response = bool(conditional_response) if app_iter is None: if isinstance(body, text_type): if charset is None: raise TypeError( "You cannot set the body to a text value without a " "charset") body = body.encode(charset) app_iter = [body] self.headers['Content-Length'] = str(len(body)) self._app_iter = app_iter for name, value in kw.items(): if not hasattr(self.__class__, name): # Not a basic attribute raise TypeError( "Unexpected keyword: %s=%r" % (name, value)) setattr(self, name, value)