xref: /unit/test/python/iter_exception/wsgi.py (revision 1848:4bd548074e2c)
11283Szelenkov@nginx.comclass application:
21283Szelenkov@nginx.com    def __init__(self, environ, start_response):
31283Szelenkov@nginx.com        self.environ = environ
41283Szelenkov@nginx.com        self.start = start_response
51283Szelenkov@nginx.com
61283Szelenkov@nginx.com        self.next = self.__next__
71283Szelenkov@nginx.com
81283Szelenkov@nginx.com    def __iter__(self):
91283Szelenkov@nginx.com        self.__i = 0
101283Szelenkov@nginx.com        self._skip_level = int(self.environ.get('HTTP_X_SKIP', 0))
11*1848Szelenkov@nginx.com        self._not_skip_close = int(
12*1848Szelenkov@nginx.com            self.environ.get('HTTP_X_NOT_SKIP_CLOSE', 0)
13*1848Szelenkov@nginx.com        )
141283Szelenkov@nginx.com        self._is_chunked = self.environ.get('HTTP_X_CHUNKED')
151283Szelenkov@nginx.com
161283Szelenkov@nginx.com        headers = [(('Content-Length', '10'))]
171283Szelenkov@nginx.com        if self._is_chunked is not None:
181283Szelenkov@nginx.com            headers = []
191283Szelenkov@nginx.com
201283Szelenkov@nginx.com        if self._skip_level < 1:
211283Szelenkov@nginx.com            raise Exception('first exception')
221283Szelenkov@nginx.com
231283Szelenkov@nginx.com        write = self.start('200', headers)
241283Szelenkov@nginx.com
251283Szelenkov@nginx.com        if self._skip_level < 2:
261283Szelenkov@nginx.com            raise Exception('second exception')
271283Szelenkov@nginx.com
281283Szelenkov@nginx.com        write(b'XXXXX')
291283Szelenkov@nginx.com
301283Szelenkov@nginx.com        if self._skip_level < 3:
311283Szelenkov@nginx.com            raise Exception('third exception')
321283Szelenkov@nginx.com
331283Szelenkov@nginx.com        return self
341283Szelenkov@nginx.com
351283Szelenkov@nginx.com    def __next__(self):
361283Szelenkov@nginx.com        if self._skip_level < 4:
371283Szelenkov@nginx.com            raise Exception('next exception')
381283Szelenkov@nginx.com
391283Szelenkov@nginx.com        self.__i += 1
401283Szelenkov@nginx.com        if self.__i > 2:
411283Szelenkov@nginx.com            raise StopIteration
421283Szelenkov@nginx.com
431283Szelenkov@nginx.com        return b'X'
441283Szelenkov@nginx.com
451283Szelenkov@nginx.com    def close(self):
461283Szelenkov@nginx.com        if self._not_skip_close == 1:
471283Szelenkov@nginx.com            raise Exception('close exception')
48