def apply_data(self, object): if not self.form: if not hasattr(self.req, 'form'): # no existing form, so need to create one, # form has to be saved back to request object # so that error page can access it if need be self.form = util.FieldStorage(self.req, keep_blank_values=1) self.req.form = self.form else: self.form = self.req.form return util.apply_fs_data(object, self.form, req=self.req)
def publish_object(req, object): if callable(object): # To publish callables, we call them an recursively publish the result # of the call (as done by util.apply_fs_data) req.form = util.FieldStorage(req, keep_blank_values=1) return publish_object(req,util.apply_fs_data(object, req.form, req=req)) # TODO : we removed this as of mod_python 3.2, let's see if we can put it back # in mod_python 3.3 # elif hasattr(object,'__iter__'): # # # To publish iterables, we recursively publish each item # # This way, generators can be published # result = False # for item in object: # result |= publish_object(req,item) # return result # else: if object is None: # Nothing to publish return False elif isinstance(object,UnicodeType): # We've got an Unicode string to publish, so we have to encode # it to bytes. We try to detect the character encoding # from the Content-Type header if req._content_type_set: charset = re_charset.search(req.content_type) if charset: charset = charset.group(1) else: # If no character encoding was set, we use UTF8 charset = 'UTF8' req.content_type += '; charset=UTF8' else: # If no character encoding was set, we use UTF8 charset = 'UTF8' result = object.encode(charset) else: charset = None result = str(object) if not req._content_type_set: # make an attempt to guess content-type # we look for a </HTML in the last 100 characters. # re.search works OK with a negative start index (it starts from 0 # in that case) if re_html.search(result,len(result)-100): req.content_type = 'text/html' else: req.content_type = 'text/plain' if charset is not None: req.content_type += '; charset=%s'%charset # Write result even if req.method is 'HEAD' as Apache # will discard the final output anyway. Truncating # output here if req.method is 'HEAD' is likely the # wrong thing to do as it may cause problems for any # output filters. See MODPYTHON-105 for details. We # also do not flush output as that will prohibit use # of 'CONTENT_LENGTH' filter to add 'Content-Length' # header automatically. See MODPYTHON-107 for details. req.write(result, 0) return True