From be25715c57912a66e26d47f3cca79ef2239ced32 Mon Sep 17 00:00:00 2001 From: Kwaizer Date: Wed, 4 Dec 2024 00:47:44 +0000 Subject: [PATCH 1/3] Fix cyclic import --- alws/dramatiq/__init__.py | 17 ++++++----------- alws/dramatiq/tasks/__init__.py | 13 +++++++++++++ alws/dramatiq/{ => tasks}/build.py | 2 +- alws/dramatiq/{ => tasks}/errata.py | 2 +- alws/dramatiq/{ => tasks}/products.py | 2 +- alws/dramatiq/{ => tasks}/releases.py | 4 +--- alws/dramatiq/{ => tasks}/sign_task.py | 2 +- alws/dramatiq/{ => tasks}/tests.py | 2 +- alws/dramatiq/{ => tasks}/user.py | 2 +- alws/routers/releases.py | 6 +++--- alws/routers/sign_task.py | 2 +- alws/routers/tests.py | 2 +- tests/fixtures/builds.py | 2 +- tests/fixtures/dramatiq.py | 2 +- tests/test_api/test_products.py | 2 +- tests/test_unit/test_products.py | 4 ++-- 16 files changed, 36 insertions(+), 30 deletions(-) create mode 100644 alws/dramatiq/tasks/__init__.py rename alws/dramatiq/{ => tasks}/build.py (99%) rename alws/dramatiq/{ => tasks}/errata.py (98%) rename alws/dramatiq/{ => tasks}/products.py (99%) rename alws/dramatiq/{ => tasks}/releases.py (93%) rename alws/dramatiq/{ => tasks}/sign_task.py (95%) rename alws/dramatiq/{ => tasks}/tests.py (97%) rename alws/dramatiq/{ => tasks}/user.py (96%) diff --git a/alws/dramatiq/__init__.py b/alws/dramatiq/__init__.py index d7a4ede20..89444ff06 100644 --- a/alws/dramatiq/__init__.py +++ b/alws/dramatiq/__init__.py @@ -8,12 +8,10 @@ and it's important for all tasks which involves user interaction to have priority 0. 4. If you need to use async function in your dramatiq task - ALWAYS use - loop from this __init__.py, since creating multiple loops for tasks + loop from tasks/__init__.py, since creating multiple loops for tasks will break your tasks. """ -import asyncio - import dramatiq from dramatiq.brokers.rabbitmq import RabbitmqBroker @@ -27,11 +25,10 @@ f"{settings.rabbitmq_default_vhost}", ) dramatiq.set_broker(rabbitmq_broker) -event_loop = asyncio.get_event_loop() # Tasks import started from here -from alws.dramatiq.build import build_done, start_build -from alws.dramatiq.errata import ( +from alws.dramatiq.tasks.build import build_done, start_build +from alws.dramatiq.tasks.errata import ( bulk_errata_release, bulk_new_errata_release, release_errata, @@ -40,8 +37,6 @@ ) # dramatiq.user and dramatiq.products need to go before dramatiq.releases -from alws.dramatiq.products import perform_product_modification -from alws.dramatiq.releases import execute_release_plan, revert_release -from alws.dramatiq.sign_task import complete_sign_task -from alws.dramatiq.tests import complete_test_task -from alws.dramatiq.user import perform_user_removal +from alws.dramatiq.tasks.products import perform_product_modification +from alws.dramatiq.tasks.sign_task import complete_sign_task +from alws.dramatiq.tasks.user import perform_user_removal diff --git a/alws/dramatiq/tasks/__init__.py b/alws/dramatiq/tasks/__init__.py new file mode 100644 index 000000000..9c2c23d69 --- /dev/null +++ b/alws/dramatiq/tasks/__init__.py @@ -0,0 +1,13 @@ +import asyncio + +__all__ = [ + 'build', + 'errata', + 'products', + 'releases', + 'sign_task', + 'tests', + 'user' +] + +event_loop = asyncio.get_event_loop() \ No newline at end of file diff --git a/alws/dramatiq/build.py b/alws/dramatiq/tasks/build.py similarity index 99% rename from alws/dramatiq/build.py rename to alws/dramatiq/tasks/build.py index e5df5cb97..713ec26c9 100644 --- a/alws/dramatiq/build.py +++ b/alws/dramatiq/tasks/build.py @@ -21,7 +21,7 @@ from alws.crud import build_node as build_node_crud from alws.crud import test from alws.dependencies import get_async_db_key -from alws.dramatiq import event_loop +from alws.dramatiq.tasks import event_loop from alws.errors import ( ArtifactConversionError, ModuleUpdateError, diff --git a/alws/dramatiq/errata.py b/alws/dramatiq/tasks/errata.py similarity index 98% rename from alws/dramatiq/errata.py rename to alws/dramatiq/tasks/errata.py index d4ecfcd9d..f6cd232b5 100644 --- a/alws/dramatiq/errata.py +++ b/alws/dramatiq/tasks/errata.py @@ -10,7 +10,7 @@ release_new_errata_record, reset_matched_erratas_packages_threshold, ) -from alws.dramatiq import event_loop +from alws.dramatiq.tasks import event_loop from alws.utils.fastapi_sqla_setup import setup_all __all__ = ["release_errata"] diff --git a/alws/dramatiq/products.py b/alws/dramatiq/tasks/products.py similarity index 99% rename from alws/dramatiq/products.py rename to alws/dramatiq/tasks/products.py index db88dfd33..76309171b 100644 --- a/alws/dramatiq/products.py +++ b/alws/dramatiq/tasks/products.py @@ -13,7 +13,7 @@ from alws.config import settings from alws.constants import DRAMATIQ_TASK_TIMEOUT, BuildTaskStatus from alws.dependencies import get_async_db_key -from alws.dramatiq import event_loop +from alws.dramatiq.tasks import event_loop from alws.utils.fastapi_sqla_setup import setup_all from alws.utils.log_utils import setup_logger from alws.utils.pulp_client import PulpClient diff --git a/alws/dramatiq/releases.py b/alws/dramatiq/tasks/releases.py similarity index 93% rename from alws/dramatiq/releases.py rename to alws/dramatiq/tasks/releases.py index b9e035cd9..7638758ca 100644 --- a/alws/dramatiq/releases.py +++ b/alws/dramatiq/tasks/releases.py @@ -1,12 +1,10 @@ -from contextlib import asynccontextmanager - import dramatiq from fastapi_sqla import open_async_session from alws.constants import DRAMATIQ_TASK_TIMEOUT from alws.crud import release as r_crud from alws.dependencies import get_async_db_key -from alws.dramatiq import event_loop +from alws.dramatiq.tasks import event_loop from alws.utils.fastapi_sqla_setup import setup_all __all__ = ["execute_release_plan"] diff --git a/alws/dramatiq/sign_task.py b/alws/dramatiq/tasks/sign_task.py similarity index 95% rename from alws/dramatiq/sign_task.py rename to alws/dramatiq/tasks/sign_task.py index dd7699992..27fdc81af 100644 --- a/alws/dramatiq/sign_task.py +++ b/alws/dramatiq/tasks/sign_task.py @@ -4,7 +4,7 @@ from alws.constants import DRAMATIQ_TASK_TIMEOUT from alws.crud import sign_task -from alws.dramatiq import event_loop +from alws.dramatiq.tasks import event_loop from alws.schemas import sign_schema from alws.utils.fastapi_sqla_setup import setup_all diff --git a/alws/dramatiq/tests.py b/alws/dramatiq/tasks/tests.py similarity index 97% rename from alws/dramatiq/tests.py rename to alws/dramatiq/tasks/tests.py index f3aef1a88..0b68dcac4 100644 --- a/alws/dramatiq/tests.py +++ b/alws/dramatiq/tasks/tests.py @@ -7,7 +7,7 @@ from alws.constants import DRAMATIQ_TASK_TIMEOUT, TestTaskStatus from alws.crud import test as t_crud from alws.dependencies import get_async_db_key -from alws.dramatiq import event_loop +from alws.dramatiq.tasks import event_loop from alws.schemas.test_schema import TestTaskResult from alws.utils.fastapi_sqla_setup import setup_all diff --git a/alws/dramatiq/user.py b/alws/dramatiq/tasks/user.py similarity index 96% rename from alws/dramatiq/user.py rename to alws/dramatiq/tasks/user.py index 0c7d918f9..6da1db2de 100644 --- a/alws/dramatiq/user.py +++ b/alws/dramatiq/tasks/user.py @@ -7,7 +7,7 @@ from alws.constants import DRAMATIQ_TASK_TIMEOUT from alws.crud import build as build_crud from alws.dependencies import get_async_db_key -from alws.dramatiq import event_loop +from alws.dramatiq.tasks import event_loop from alws.utils.fastapi_sqla_setup import setup_all __all__ = ['perform_user_removal'] diff --git a/alws/routers/releases.py b/alws/routers/releases.py index de00e6fe7..0e58afe38 100644 --- a/alws/routers/releases.py +++ b/alws/routers/releases.py @@ -5,12 +5,12 @@ from sqlalchemy import update from sqlalchemy.ext.asyncio import AsyncSession +from alws import dramatiq from alws import models from alws.auth import get_current_user from alws.constants import ReleaseStatus from alws.crud import release as r_crud from alws.dependencies import get_async_db_key -from alws.dramatiq import execute_release_plan, revert_release from alws.schemas import release_schema router = APIRouter( @@ -102,7 +102,7 @@ async def commit_release( .values(status=ReleaseStatus.IN_PROGRESS) ) await db.flush() - execute_release_plan.send(release_id, user.id) + dramatiq.tasks.releases.execute_release_plan.send(release_id, user.id) return {"message": "Release plan execution has been started"} @@ -124,7 +124,7 @@ async def revert_db_release( .values(status=ReleaseStatus.IN_PROGRESS) ) await db.flush() - revert_release.send(release_id, user.id) + dramatiq.tasks.releases.revert_release.send(release_id, user.id) return {"message": "Release plan revert has been started"} diff --git a/alws/routers/sign_task.py b/alws/routers/sign_task.py index ae19feefc..436e82755 100644 --- a/alws/routers/sign_task.py +++ b/alws/routers/sign_task.py @@ -71,7 +71,7 @@ async def complete_sign_task( task = await sign_task.get_sign_task(db, sign_task_id) task.ts = datetime.datetime.utcnow() + datetime.timedelta(hours=2) await db.flush() - dramatiq.sign_task.complete_sign_task.send( + dramatiq.tasks.sign_task.complete_sign_task.send( sign_task_id, payload.model_dump() ) return {'success': True} diff --git a/alws/routers/tests.py b/alws/routers/tests.py index 98bb30aab..7b2cddf2d 100644 --- a/alws/routers/tests.py +++ b/alws/routers/tests.py @@ -27,7 +27,7 @@ async def update_test_task_result( test_task_id: int, result: test_schema.TestTaskResult, ): - dramatiq.tests.complete_test_task.send(test_task_id, result.model_dump()) + dramatiq.tasks.tests.complete_test_task.send(test_task_id, result.model_dump()) return {'ok': True} diff --git a/tests/fixtures/builds.py b/tests/fixtures/builds.py index aaf3eaa9c..db95c251c 100644 --- a/tests/fixtures/builds.py +++ b/tests/fixtures/builds.py @@ -8,7 +8,7 @@ from sqlalchemy.orm.session import Session from alws.crud.build import create_build, get_builds -from alws.dramatiq.build import _start_build +from alws.dramatiq.tasks.build import _start_build from alws.models import Build, Product from alws.schemas.build_schema import BuildCreate from tests.constants import ADMIN_USER_ID diff --git a/tests/fixtures/dramatiq.py b/tests/fixtures/dramatiq.py index ec78d19c6..ba2fb753c 100644 --- a/tests/fixtures/dramatiq.py +++ b/tests/fixtures/dramatiq.py @@ -8,7 +8,7 @@ from alws.crud import test from alws.crud.build import get_builds from alws.crud.build_node import safe_build_done -from alws.dramatiq.build import _start_build, _build_done +from alws.dramatiq.tasks.build import _start_build, _build_done from alws.models import Build from alws.schemas.build_node_schema import BuildDone from alws.schemas.build_schema import BuildCreate diff --git a/tests/test_api/test_products.py b/tests/test_api/test_products.py index 98ee279dd..24ecf24d8 100644 --- a/tests/test_api/test_products.py +++ b/tests/test_api/test_products.py @@ -3,7 +3,7 @@ from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.orm import selectinload -from alws.dramatiq.products import _perform_product_modification +from alws.dramatiq.tasks.products import _perform_product_modification from alws.models import Build, Product from tests.mock_classes import BaseAsyncTestCase diff --git a/tests/test_unit/test_products.py b/tests/test_unit/test_products.py index 54719edcf..8dfc31263 100644 --- a/tests/test_unit/test_products.py +++ b/tests/test_unit/test_products.py @@ -8,8 +8,8 @@ from alws.constants import BuildTaskStatus from alws.crud.build import create_build -from alws.dramatiq.build import _start_build -from alws.dramatiq.products import ( +from alws.dramatiq.tasks.build import _start_build +from alws.dramatiq.tasks.products import ( get_packages_to_blacklist, group_tasks_by_ref_id, ) From 0d15f26b7b6a4203e7513e54b848e080d285e2e7 Mon Sep 17 00:00:00 2001 From: Kwaizer Date: Wed, 4 Dec 2024 10:35:24 +0000 Subject: [PATCH 2/3] Revert "Fix cyclic import" This reverts commit 57d7fb7e78ad8729f2811defedce7764576f128b. --- alws/dramatiq/__init__.py | 17 +++++++++++------ alws/dramatiq/{tasks => }/build.py | 2 +- alws/dramatiq/{tasks => }/errata.py | 2 +- alws/dramatiq/{tasks => }/products.py | 2 +- alws/dramatiq/{tasks => }/releases.py | 4 +++- alws/dramatiq/{tasks => }/sign_task.py | 2 +- alws/dramatiq/tasks/__init__.py | 13 ------------- alws/dramatiq/{tasks => }/tests.py | 2 +- alws/dramatiq/{tasks => }/user.py | 2 +- alws/routers/releases.py | 8 ++++---- alws/routers/sign_task.py | 2 +- alws/routers/tests.py | 2 +- tests/fixtures/builds.py | 2 +- tests/fixtures/dramatiq.py | 2 +- tests/test_api/test_products.py | 2 +- tests/test_unit/test_products.py | 4 ++-- 16 files changed, 31 insertions(+), 37 deletions(-) rename alws/dramatiq/{tasks => }/build.py (99%) rename alws/dramatiq/{tasks => }/errata.py (98%) rename alws/dramatiq/{tasks => }/products.py (99%) rename alws/dramatiq/{tasks => }/releases.py (93%) rename alws/dramatiq/{tasks => }/sign_task.py (95%) delete mode 100644 alws/dramatiq/tasks/__init__.py rename alws/dramatiq/{tasks => }/tests.py (97%) rename alws/dramatiq/{tasks => }/user.py (96%) diff --git a/alws/dramatiq/__init__.py b/alws/dramatiq/__init__.py index 89444ff06..d7a4ede20 100644 --- a/alws/dramatiq/__init__.py +++ b/alws/dramatiq/__init__.py @@ -8,10 +8,12 @@ and it's important for all tasks which involves user interaction to have priority 0. 4. If you need to use async function in your dramatiq task - ALWAYS use - loop from tasks/__init__.py, since creating multiple loops for tasks + loop from this __init__.py, since creating multiple loops for tasks will break your tasks. """ +import asyncio + import dramatiq from dramatiq.brokers.rabbitmq import RabbitmqBroker @@ -25,10 +27,11 @@ f"{settings.rabbitmq_default_vhost}", ) dramatiq.set_broker(rabbitmq_broker) +event_loop = asyncio.get_event_loop() # Tasks import started from here -from alws.dramatiq.tasks.build import build_done, start_build -from alws.dramatiq.tasks.errata import ( +from alws.dramatiq.build import build_done, start_build +from alws.dramatiq.errata import ( bulk_errata_release, bulk_new_errata_release, release_errata, @@ -37,6 +40,8 @@ ) # dramatiq.user and dramatiq.products need to go before dramatiq.releases -from alws.dramatiq.tasks.products import perform_product_modification -from alws.dramatiq.tasks.sign_task import complete_sign_task -from alws.dramatiq.tasks.user import perform_user_removal +from alws.dramatiq.products import perform_product_modification +from alws.dramatiq.releases import execute_release_plan, revert_release +from alws.dramatiq.sign_task import complete_sign_task +from alws.dramatiq.tests import complete_test_task +from alws.dramatiq.user import perform_user_removal diff --git a/alws/dramatiq/tasks/build.py b/alws/dramatiq/build.py similarity index 99% rename from alws/dramatiq/tasks/build.py rename to alws/dramatiq/build.py index 713ec26c9..e5df5cb97 100644 --- a/alws/dramatiq/tasks/build.py +++ b/alws/dramatiq/build.py @@ -21,7 +21,7 @@ from alws.crud import build_node as build_node_crud from alws.crud import test from alws.dependencies import get_async_db_key -from alws.dramatiq.tasks import event_loop +from alws.dramatiq import event_loop from alws.errors import ( ArtifactConversionError, ModuleUpdateError, diff --git a/alws/dramatiq/tasks/errata.py b/alws/dramatiq/errata.py similarity index 98% rename from alws/dramatiq/tasks/errata.py rename to alws/dramatiq/errata.py index f6cd232b5..d4ecfcd9d 100644 --- a/alws/dramatiq/tasks/errata.py +++ b/alws/dramatiq/errata.py @@ -10,7 +10,7 @@ release_new_errata_record, reset_matched_erratas_packages_threshold, ) -from alws.dramatiq.tasks import event_loop +from alws.dramatiq import event_loop from alws.utils.fastapi_sqla_setup import setup_all __all__ = ["release_errata"] diff --git a/alws/dramatiq/tasks/products.py b/alws/dramatiq/products.py similarity index 99% rename from alws/dramatiq/tasks/products.py rename to alws/dramatiq/products.py index 76309171b..db88dfd33 100644 --- a/alws/dramatiq/tasks/products.py +++ b/alws/dramatiq/products.py @@ -13,7 +13,7 @@ from alws.config import settings from alws.constants import DRAMATIQ_TASK_TIMEOUT, BuildTaskStatus from alws.dependencies import get_async_db_key -from alws.dramatiq.tasks import event_loop +from alws.dramatiq import event_loop from alws.utils.fastapi_sqla_setup import setup_all from alws.utils.log_utils import setup_logger from alws.utils.pulp_client import PulpClient diff --git a/alws/dramatiq/tasks/releases.py b/alws/dramatiq/releases.py similarity index 93% rename from alws/dramatiq/tasks/releases.py rename to alws/dramatiq/releases.py index 7638758ca..b9e035cd9 100644 --- a/alws/dramatiq/tasks/releases.py +++ b/alws/dramatiq/releases.py @@ -1,10 +1,12 @@ +from contextlib import asynccontextmanager + import dramatiq from fastapi_sqla import open_async_session from alws.constants import DRAMATIQ_TASK_TIMEOUT from alws.crud import release as r_crud from alws.dependencies import get_async_db_key -from alws.dramatiq.tasks import event_loop +from alws.dramatiq import event_loop from alws.utils.fastapi_sqla_setup import setup_all __all__ = ["execute_release_plan"] diff --git a/alws/dramatiq/tasks/sign_task.py b/alws/dramatiq/sign_task.py similarity index 95% rename from alws/dramatiq/tasks/sign_task.py rename to alws/dramatiq/sign_task.py index 27fdc81af..dd7699992 100644 --- a/alws/dramatiq/tasks/sign_task.py +++ b/alws/dramatiq/sign_task.py @@ -4,7 +4,7 @@ from alws.constants import DRAMATIQ_TASK_TIMEOUT from alws.crud import sign_task -from alws.dramatiq.tasks import event_loop +from alws.dramatiq import event_loop from alws.schemas import sign_schema from alws.utils.fastapi_sqla_setup import setup_all diff --git a/alws/dramatiq/tasks/__init__.py b/alws/dramatiq/tasks/__init__.py deleted file mode 100644 index 9c2c23d69..000000000 --- a/alws/dramatiq/tasks/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -import asyncio - -__all__ = [ - 'build', - 'errata', - 'products', - 'releases', - 'sign_task', - 'tests', - 'user' -] - -event_loop = asyncio.get_event_loop() \ No newline at end of file diff --git a/alws/dramatiq/tasks/tests.py b/alws/dramatiq/tests.py similarity index 97% rename from alws/dramatiq/tasks/tests.py rename to alws/dramatiq/tests.py index 0b68dcac4..f3aef1a88 100644 --- a/alws/dramatiq/tasks/tests.py +++ b/alws/dramatiq/tests.py @@ -7,7 +7,7 @@ from alws.constants import DRAMATIQ_TASK_TIMEOUT, TestTaskStatus from alws.crud import test as t_crud from alws.dependencies import get_async_db_key -from alws.dramatiq.tasks import event_loop +from alws.dramatiq import event_loop from alws.schemas.test_schema import TestTaskResult from alws.utils.fastapi_sqla_setup import setup_all diff --git a/alws/dramatiq/tasks/user.py b/alws/dramatiq/user.py similarity index 96% rename from alws/dramatiq/tasks/user.py rename to alws/dramatiq/user.py index 6da1db2de..0c7d918f9 100644 --- a/alws/dramatiq/tasks/user.py +++ b/alws/dramatiq/user.py @@ -7,7 +7,7 @@ from alws.constants import DRAMATIQ_TASK_TIMEOUT from alws.crud import build as build_crud from alws.dependencies import get_async_db_key -from alws.dramatiq.tasks import event_loop +from alws.dramatiq import event_loop from alws.utils.fastapi_sqla_setup import setup_all __all__ = ['perform_user_removal'] diff --git a/alws/routers/releases.py b/alws/routers/releases.py index 0e58afe38..acd20ce28 100644 --- a/alws/routers/releases.py +++ b/alws/routers/releases.py @@ -2,15 +2,15 @@ from fastapi import APIRouter, Depends from fastapi_sqla import AsyncSessionDependency -from sqlalchemy import update +from sqlalchemy import select, update from sqlalchemy.ext.asyncio import AsyncSession -from alws import dramatiq from alws import models from alws.auth import get_current_user from alws.constants import ReleaseStatus from alws.crud import release as r_crud from alws.dependencies import get_async_db_key +from alws.dramatiq import execute_release_plan, revert_release from alws.schemas import release_schema router = APIRouter( @@ -102,7 +102,7 @@ async def commit_release( .values(status=ReleaseStatus.IN_PROGRESS) ) await db.flush() - dramatiq.tasks.releases.execute_release_plan.send(release_id, user.id) + execute_release_plan.send(release_id, user.id) return {"message": "Release plan execution has been started"} @@ -124,7 +124,7 @@ async def revert_db_release( .values(status=ReleaseStatus.IN_PROGRESS) ) await db.flush() - dramatiq.tasks.releases.revert_release.send(release_id, user.id) + revert_release.send(release_id, user.id) return {"message": "Release plan revert has been started"} diff --git a/alws/routers/sign_task.py b/alws/routers/sign_task.py index 436e82755..ae19feefc 100644 --- a/alws/routers/sign_task.py +++ b/alws/routers/sign_task.py @@ -71,7 +71,7 @@ async def complete_sign_task( task = await sign_task.get_sign_task(db, sign_task_id) task.ts = datetime.datetime.utcnow() + datetime.timedelta(hours=2) await db.flush() - dramatiq.tasks.sign_task.complete_sign_task.send( + dramatiq.sign_task.complete_sign_task.send( sign_task_id, payload.model_dump() ) return {'success': True} diff --git a/alws/routers/tests.py b/alws/routers/tests.py index 7b2cddf2d..98bb30aab 100644 --- a/alws/routers/tests.py +++ b/alws/routers/tests.py @@ -27,7 +27,7 @@ async def update_test_task_result( test_task_id: int, result: test_schema.TestTaskResult, ): - dramatiq.tasks.tests.complete_test_task.send(test_task_id, result.model_dump()) + dramatiq.tests.complete_test_task.send(test_task_id, result.model_dump()) return {'ok': True} diff --git a/tests/fixtures/builds.py b/tests/fixtures/builds.py index db95c251c..aaf3eaa9c 100644 --- a/tests/fixtures/builds.py +++ b/tests/fixtures/builds.py @@ -8,7 +8,7 @@ from sqlalchemy.orm.session import Session from alws.crud.build import create_build, get_builds -from alws.dramatiq.tasks.build import _start_build +from alws.dramatiq.build import _start_build from alws.models import Build, Product from alws.schemas.build_schema import BuildCreate from tests.constants import ADMIN_USER_ID diff --git a/tests/fixtures/dramatiq.py b/tests/fixtures/dramatiq.py index ba2fb753c..ec78d19c6 100644 --- a/tests/fixtures/dramatiq.py +++ b/tests/fixtures/dramatiq.py @@ -8,7 +8,7 @@ from alws.crud import test from alws.crud.build import get_builds from alws.crud.build_node import safe_build_done -from alws.dramatiq.tasks.build import _start_build, _build_done +from alws.dramatiq.build import _start_build, _build_done from alws.models import Build from alws.schemas.build_node_schema import BuildDone from alws.schemas.build_schema import BuildCreate diff --git a/tests/test_api/test_products.py b/tests/test_api/test_products.py index 24ecf24d8..98ee279dd 100644 --- a/tests/test_api/test_products.py +++ b/tests/test_api/test_products.py @@ -3,7 +3,7 @@ from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.orm import selectinload -from alws.dramatiq.tasks.products import _perform_product_modification +from alws.dramatiq.products import _perform_product_modification from alws.models import Build, Product from tests.mock_classes import BaseAsyncTestCase diff --git a/tests/test_unit/test_products.py b/tests/test_unit/test_products.py index 8dfc31263..54719edcf 100644 --- a/tests/test_unit/test_products.py +++ b/tests/test_unit/test_products.py @@ -8,8 +8,8 @@ from alws.constants import BuildTaskStatus from alws.crud.build import create_build -from alws.dramatiq.tasks.build import _start_build -from alws.dramatiq.tasks.products import ( +from alws.dramatiq.build import _start_build +from alws.dramatiq.products import ( get_packages_to_blacklist, group_tasks_by_ref_id, ) From 154875aa472e7d8a8c9df451b8e14653f5c8675d Mon Sep 17 00:00:00 2001 From: Kwaizer Date: Wed, 4 Dec 2024 10:40:21 +0000 Subject: [PATCH 3/3] Fix cyclic import with a new file --- alws/dramatiq/__init__.py | 5 +---- alws/dramatiq/_event_loop.py | 3 +++ alws/dramatiq/build.py | 2 +- alws/dramatiq/errata.py | 2 +- alws/dramatiq/products.py | 2 +- alws/dramatiq/releases.py | 4 +--- alws/dramatiq/sign_task.py | 2 +- alws/dramatiq/tests.py | 2 +- alws/dramatiq/user.py | 2 +- 9 files changed, 11 insertions(+), 13 deletions(-) create mode 100644 alws/dramatiq/_event_loop.py diff --git a/alws/dramatiq/__init__.py b/alws/dramatiq/__init__.py index d7a4ede20..60a26b804 100644 --- a/alws/dramatiq/__init__.py +++ b/alws/dramatiq/__init__.py @@ -8,12 +8,10 @@ and it's important for all tasks which involves user interaction to have priority 0. 4. If you need to use async function in your dramatiq task - ALWAYS use - loop from this __init__.py, since creating multiple loops for tasks + loop from this _event_loop.py, since creating multiple loops for tasks will break your tasks. """ -import asyncio - import dramatiq from dramatiq.brokers.rabbitmq import RabbitmqBroker @@ -27,7 +25,6 @@ f"{settings.rabbitmq_default_vhost}", ) dramatiq.set_broker(rabbitmq_broker) -event_loop = asyncio.get_event_loop() # Tasks import started from here from alws.dramatiq.build import build_done, start_build diff --git a/alws/dramatiq/_event_loop.py b/alws/dramatiq/_event_loop.py new file mode 100644 index 000000000..62c54dfe6 --- /dev/null +++ b/alws/dramatiq/_event_loop.py @@ -0,0 +1,3 @@ +import asyncio + +event_loop = asyncio.get_event_loop() diff --git a/alws/dramatiq/build.py b/alws/dramatiq/build.py index e5df5cb97..04361f52b 100644 --- a/alws/dramatiq/build.py +++ b/alws/dramatiq/build.py @@ -21,7 +21,7 @@ from alws.crud import build_node as build_node_crud from alws.crud import test from alws.dependencies import get_async_db_key -from alws.dramatiq import event_loop +from alws.dramatiq._event_loop import event_loop from alws.errors import ( ArtifactConversionError, ModuleUpdateError, diff --git a/alws/dramatiq/errata.py b/alws/dramatiq/errata.py index d4ecfcd9d..ffb04cfa7 100644 --- a/alws/dramatiq/errata.py +++ b/alws/dramatiq/errata.py @@ -10,7 +10,7 @@ release_new_errata_record, reset_matched_erratas_packages_threshold, ) -from alws.dramatiq import event_loop +from alws.dramatiq._event_loop import event_loop from alws.utils.fastapi_sqla_setup import setup_all __all__ = ["release_errata"] diff --git a/alws/dramatiq/products.py b/alws/dramatiq/products.py index db88dfd33..9dadbf918 100644 --- a/alws/dramatiq/products.py +++ b/alws/dramatiq/products.py @@ -13,7 +13,7 @@ from alws.config import settings from alws.constants import DRAMATIQ_TASK_TIMEOUT, BuildTaskStatus from alws.dependencies import get_async_db_key -from alws.dramatiq import event_loop +from alws.dramatiq._event_loop import event_loop from alws.utils.fastapi_sqla_setup import setup_all from alws.utils.log_utils import setup_logger from alws.utils.pulp_client import PulpClient diff --git a/alws/dramatiq/releases.py b/alws/dramatiq/releases.py index b9e035cd9..5a3a8f9c5 100644 --- a/alws/dramatiq/releases.py +++ b/alws/dramatiq/releases.py @@ -1,12 +1,10 @@ -from contextlib import asynccontextmanager - import dramatiq from fastapi_sqla import open_async_session from alws.constants import DRAMATIQ_TASK_TIMEOUT from alws.crud import release as r_crud from alws.dependencies import get_async_db_key -from alws.dramatiq import event_loop +from alws.dramatiq._event_loop import event_loop from alws.utils.fastapi_sqla_setup import setup_all __all__ = ["execute_release_plan"] diff --git a/alws/dramatiq/sign_task.py b/alws/dramatiq/sign_task.py index dd7699992..6d4b731c2 100644 --- a/alws/dramatiq/sign_task.py +++ b/alws/dramatiq/sign_task.py @@ -4,7 +4,7 @@ from alws.constants import DRAMATIQ_TASK_TIMEOUT from alws.crud import sign_task -from alws.dramatiq import event_loop +from alws.dramatiq._event_loop import event_loop from alws.schemas import sign_schema from alws.utils.fastapi_sqla_setup import setup_all diff --git a/alws/dramatiq/tests.py b/alws/dramatiq/tests.py index f3aef1a88..d68e9ff70 100644 --- a/alws/dramatiq/tests.py +++ b/alws/dramatiq/tests.py @@ -7,7 +7,7 @@ from alws.constants import DRAMATIQ_TASK_TIMEOUT, TestTaskStatus from alws.crud import test as t_crud from alws.dependencies import get_async_db_key -from alws.dramatiq import event_loop +from alws.dramatiq._event_loop import event_loop from alws.schemas.test_schema import TestTaskResult from alws.utils.fastapi_sqla_setup import setup_all diff --git a/alws/dramatiq/user.py b/alws/dramatiq/user.py index 0c7d918f9..127f47afe 100644 --- a/alws/dramatiq/user.py +++ b/alws/dramatiq/user.py @@ -7,7 +7,7 @@ from alws.constants import DRAMATIQ_TASK_TIMEOUT from alws.crud import build as build_crud from alws.dependencies import get_async_db_key -from alws.dramatiq import event_loop +from alws.dramatiq._event_loop import event_loop from alws.utils.fastapi_sqla_setup import setup_all __all__ = ['perform_user_removal']