def write(self, data): """\ Return data as a stream HTML data may be returned using a stream-oriented interface. This allows the browser to display partial results while computation of a response to proceed. The published object should first set any output headers or cookies on the response object. Note that published objects must not generate any errors after beginning stream-oriented output. """ if type(data) != type(''): raise TypeError('Value must be a string') stdout = self.stdout if not self._wrote: notify(PubBeforeStreaming(self)) l = self.headers.get('content-length', None) if l is not None: try: if type(l) is type(''): l = int(l) if l > 128000: self._tempfile = tempfile.TemporaryFile() self._templock = thread.allocate_lock() except: pass self._streaming = 1 stdout.write(str(self)) self._wrote = 1 if not data: return if self._chunking: data = '%x\r\n%s\r\n' % (len(data), data) l = len(data) t = self._tempfile if t is None or l < 200: stdout.write(data) else: b = self._tempstart e = b + l self._templock.acquire() try: t.seek(b) t.write(data) finally: self._templock.release() self._tempstart = e stdout.write(file_part_producer(t, self._templock, b, e), l)
def write(self,data): """\ Return data as a stream HTML data may be returned using a stream-oriented interface. This allows the browser to display partial results while computation of a response to proceed. The published object should first set any output headers or cookies on the response object. Note that published objects must not generate any errors after beginning stream-oriented output. """ if type(data) != type(''): raise TypeError('Value must be a string') stdout = self.stdout if not self._wrote: notify(PubBeforeStreaming(self)) l = self.headers.get('content-length', None) if l is not None: try: if type(l) is type(''): l = int(l) if l > 128000: self._tempfile = tempfile.TemporaryFile() self._templock = thread.allocate_lock() except: pass self._streaming = 1 stdout.write(str(self)) self._wrote = 1 if not data: return if self._chunking: data = '%x\r\n%s\r\n' % (len(data),data) l = len(data) t = self._tempfile if t is None or l<200: stdout.write(data) else: b = self._tempstart e = b + l self._templock.acquire() try: t.seek(b) t.write(data) finally: self._templock.release() self._tempstart = e stdout.write(file_part_producer(t,self._templock,b,e), l)
def write(self, data): if not isinstance(data, str): raise TypeError('Value must be a string') stdout = self.stdout if not self._wrote: l = self.headers.get('content-length', None) if l is not None: try: if isinstance(l, str): l = string.atoi(l) if l > 128000: self._tempfile = TemporaryFile() self._templock = thread.allocate_lock() except Exception: pass stdout.write(str(self)) self._wrote = 1 if not data: return t = self._tempfile if t is None: stdout.write(data) else: while data: # write file producers # each producer holds 32K data chunk = data[:32768] data = data[32768:] l = len(chunk) b = self._tempstart e = b + l self._templock.acquire() try: t.seek(b) t.write(chunk) finally: self._templock.release() self._tempstart = e stdout.write((file_part_producer(t, self._templock, b, e), l))