summaryrefslogtreecommitdiffhomepage
path: root/test/python/iter_exception/wsgi.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/python/iter_exception/wsgi.py')
-rw-r--r--test/python/iter_exception/wsgi.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/test/python/iter_exception/wsgi.py b/test/python/iter_exception/wsgi.py
new file mode 100644
index 00000000..66a09af7
--- /dev/null
+++ b/test/python/iter_exception/wsgi.py
@@ -0,0 +1,45 @@
+class application:
+ def __init__(self, environ, start_response):
+ self.environ = environ
+ self.start = start_response
+
+ self.next = self.__next__
+
+ def __iter__(self):
+ self.__i = 0
+ self._skip_level = int(self.environ.get('HTTP_X_SKIP', 0))
+ self._not_skip_close = int(self.environ.get('HTTP_X_NOT_SKIP_CLOSE', 0))
+ self._is_chunked = self.environ.get('HTTP_X_CHUNKED')
+
+ headers = [(('Content-Length', '10'))]
+ if self._is_chunked is not None:
+ headers = []
+
+ if self._skip_level < 1:
+ raise Exception('first exception')
+
+ write = self.start('200', headers)
+
+ if self._skip_level < 2:
+ raise Exception('second exception')
+
+ write(b'XXXXX')
+
+ if self._skip_level < 3:
+ raise Exception('third exception')
+
+ return self
+
+ def __next__(self):
+ if self._skip_level < 4:
+ raise Exception('next exception')
+
+ self.__i += 1
+ if self.__i > 2:
+ raise StopIteration
+
+ return b'X'
+
+ def close(self):
+ if self._not_skip_close == 1:
+ raise Exception('close exception')