From 23543669f843db74a368f00a7be130e9124f8df6 Mon Sep 17 00:00:00 2001 From: nggit Date: Sat, 7 Jun 2025 08:57:34 +0700 Subject: [PATCH 1/2] bump to tremolo 0.4.0 --- .github/workflows/tests_and_coverage.yml | 2 -- httpout/httpout.py | 23 +++++++---------------- httpout/response.py | 4 ++-- pyproject.toml | 1 - requirements.txt | 3 +-- 5 files changed, 10 insertions(+), 23 deletions(-) diff --git a/.github/workflows/tests_and_coverage.yml b/.github/workflows/tests_and_coverage.yml index 435b05b..e6fd94e 100644 --- a/.github/workflows/tests_and_coverage.yml +++ b/.github/workflows/tests_and_coverage.yml @@ -48,7 +48,6 @@ jobs: run: | python -m pip install --upgrade pip python -m pip install --upgrade coverage - python -m pip install --upgrade awaiter python -m pip install --upgrade tremolo if: ${{ contains(env.FILES_MODIFIED, '.py') }} @@ -110,7 +109,6 @@ jobs: echo "$HOME/.local/bin" >> $GITHUB_PATH python -m pip install --upgrade pip python -m pip install --upgrade coverage - python -m pip install --upgrade awaiter python -m pip install --upgrade tremolo if: ${{ contains(env.FILES_MODIFIED, '.py') }} diff --git a/httpout/httpout.py b/httpout/httpout.py index 63d71a4..bcd2f31 100644 --- a/httpout/httpout.py +++ b/httpout/httpout.py @@ -7,7 +7,6 @@ from types import ModuleType -from awaiter import MultiThreadExecutor from tremolo.exceptions import BadRequest, NotFound, Forbidden from tremolo.lib.websocket import WebSocket from tremolo.utils import html_escape @@ -22,15 +21,13 @@ class HTTPOut: def __init__(self, app): app.add_hook(self._on_worker_start, 'worker_start') - app.add_hook(self._on_worker_stop, 'worker_stop') + app.add_hook(self._on_close, 'close') app.add_middleware(self._on_request, 'request', priority=9999) # low - app.add_middleware(self._on_close, 'close') async def _on_worker_start(self, **worker): loop = worker['loop'] logger = worker['logger'] g = worker['globals'] - thread_pool_size = g.options.get('thread_pool_size', 5) document_root = os.path.abspath( g.options.get('document_root', os.getcwd()) ) @@ -152,17 +149,10 @@ def ho_import(name, globals=None, locals=None, fromlist=(), level=0): g.wait = wait g.caches = {} - g.executor = MultiThreadExecutor(thread_pool_size) - g.executor.start() if module: exec_module(module) - async def _on_worker_stop(self, **worker): - g = worker['globals'] - - await g.executor.shutdown() - async def _on_request(self, **server): request = server['request'] response = server['response'] @@ -258,7 +248,8 @@ async def _on_request(self, **server): try: # execute module in another thread - result = await g.executor.submit(exec_module, module, code) + result = await g.executor.submit(exec_module, + args=(module, code)) await server['response'].join() if result: @@ -273,7 +264,8 @@ async def _on_request(self, **server): await server['response'].handle_exception(exc) finally: await g.executor.submit( - cleanup_modules, server['modules'], g.options['debug'] + cleanup_modules, + args=(server['modules'], g.options['debug']) ) await server['response'].join() server['modules'].clear() @@ -285,9 +277,8 @@ async def _on_request(self, **server): raise Forbidden(f'Disallowed file extension: {ext}') logger.info('%s -> %s: %s', path, mime_types[ext], module_path) - await response.sendfile( - module_path, content_type=mime_types[ext], executor=g.executor - ) + await response.sendfile(module_path, content_type=mime_types[ext]) + # exit middleware without closing the connection return True diff --git a/httpout/response.py b/httpout/response.py index 24aef5e..aff4869 100644 --- a/httpout/response.py +++ b/httpout/response.py @@ -10,8 +10,8 @@ class HTTPResponse: def __init__(self, response): self.response = response - self.loop = response.request.protocol.loop - self.logger = response.request.protocol.logger + self.loop = response.request.server.loop + self.logger = response.request.server.logger self.tasks = set() def __getattr__(self, name): diff --git a/pyproject.toml b/pyproject.toml index 1f4fbc9..654a198 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,6 @@ description = """\ """ requires-python = '>=3.7' dependencies = [ - 'awaiter', 'tremolo>=0.2.0', ] license = { text = 'MIT License' } diff --git a/requirements.txt b/requirements.txt index ca13626..f9f1ae2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1 @@ -awaiter -tremolo>=0.2.0 +tremolo>=0.4.0 From 3b7081a1f4ad0b6e2c12a082f43d660d3f0708e2 Mon Sep 17 00:00:00 2001 From: nggit Date: Sat, 7 Jun 2025 09:03:45 +0700 Subject: [PATCH 2/2] update ci --- .github/workflows/build_and_release.yml | 2 +- .github/workflows/tests_and_coverage.yml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build_and_release.yml b/.github/workflows/build_and_release.yml index 8a7d0a1..43fe471 100644 --- a/.github/workflows/build_and_release.yml +++ b/.github/workflows/build_and_release.yml @@ -50,7 +50,7 @@ jobs: - 'cp311-*' - 'cp312-*' - 'cp313-*' - - 'pp310-*' + - 'pp311-*' cibw_arch: ['x86_64'] timeout-minutes: 10 steps: diff --git a/.github/workflows/tests_and_coverage.yml b/.github/workflows/tests_and_coverage.yml index e6fd94e..314e7f8 100644 --- a/.github/workflows/tests_and_coverage.yml +++ b/.github/workflows/tests_and_coverage.yml @@ -16,12 +16,12 @@ jobs: python_version: - '3.13' - '3.12' - - '3.11' + - '3.10' - '3.9' - '3.8' - '3.7' - - 'pypy3.10' - os: ['ubuntu-20.04', 'windows-latest'] + - 'pypy3.11' + os: ['ubuntu-22.04', 'windows-latest'] timeout-minutes: 10 steps: - uses: actions/checkout@v4 @@ -59,7 +59,7 @@ jobs: python -m flake8 httpout/ if: | contains(env.FILES_MODIFIED, '.py') && - matrix.os == 'ubuntu-20.04' && matrix.python_version == '3.13' + matrix.os == 'ubuntu-22.04' && matrix.python_version == '3.13' - name: Run tests run: python -m tests