コード例 #1
0
ファイル: HTTPResponse.py プロジェクト: tseaver/Zope-RFA
    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)
コード例 #2
0
    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)
コード例 #3
0
ファイル: FCGIServer.py プロジェクト: parruc/ZServer
    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))
コード例 #4
0
ファイル: FCGIServer.py プロジェクト: zopefoundation/ZServer
    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))