about summary refs log tree commit diff
path: root/.venv/lib/python3.12/site-packages/requests_toolbelt/threaded/thread.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/requests_toolbelt/threaded/thread.py')
-rw-r--r--.venv/lib/python3.12/site-packages/requests_toolbelt/threaded/thread.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/requests_toolbelt/threaded/thread.py b/.venv/lib/python3.12/site-packages/requests_toolbelt/threaded/thread.py
new file mode 100644
index 00000000..542813c1
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/requests_toolbelt/threaded/thread.py
@@ -0,0 +1,53 @@
+"""Module containing the SessionThread class."""
+import threading
+import uuid
+
+import requests.exceptions as exc
+
+from .._compat import queue
+
+
+class SessionThread(object):
+    def __init__(self, initialized_session, job_queue, response_queue,
+                 exception_queue):
+        self._session = initialized_session
+        self._jobs = job_queue
+        self._create_worker()
+        self._responses = response_queue
+        self._exceptions = exception_queue
+
+    def _create_worker(self):
+        self._worker = threading.Thread(
+            target=self._make_request,
+            name=uuid.uuid4(),
+        )
+        self._worker.daemon = True
+        self._worker._state = 0
+        self._worker.start()
+
+    def _handle_request(self, kwargs):
+        try:
+            response = self._session.request(**kwargs)
+        except exc.RequestException as e:
+            self._exceptions.put((kwargs, e))
+        else:
+            self._responses.put((kwargs, response))
+        finally:
+            self._jobs.task_done()
+
+    def _make_request(self):
+        while True:
+            try:
+                kwargs = self._jobs.get_nowait()
+            except queue.Empty:
+                break
+
+            self._handle_request(kwargs)
+
+    def is_alive(self):
+        """Proxy to the thread's ``is_alive`` method."""
+        return self._worker.is_alive()
+
+    def join(self):
+        """Join this thread to the master thread."""
+        self._worker.join()