Skip to content

Commit dd97401

Browse files
committed
Move errata record creation to dramatiq task
1 parent a8b98ff commit dd97401

File tree

6 files changed

+63
-18
lines changed

6 files changed

+63
-18
lines changed

alws/dramatiq/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
bulk_errata_release,
3636
bulk_new_errata_release,
3737
create_new_errata,
38+
create_errata,
3839
release_errata,
3940
release_new_errata,
4041
reset_records_threshold,

alws/dramatiq/errata.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
bulk_errata_records_release,
88
bulk_new_errata_records_release,
99
create_new_errata_record,
10+
create_errata_record,
1011
release_errata_record,
1112
release_new_errata_record,
1213
reset_matched_erratas_packages_threshold,
@@ -21,6 +22,10 @@ async def _create_new_errata(errata):
2122
await create_new_errata_record(errata)
2223

2324

25+
async def _create_errata(errata):
26+
await create_errata_record(errata)
27+
28+
2429
async def _release_new_errata_record(
2530
record_id: str, platform_id: int, force: bool
2631
):
@@ -68,6 +73,19 @@ def create_new_errata(errata):
6873
)
6974

7075

76+
@dramatiq.actor(
77+
max_retries=0,
78+
priority=0,
79+
queue_name="errata",
80+
time_limit=DRAMATIQ_TASK_TIMEOUT,
81+
)
82+
def create_errata(errata):
83+
event_loop.run_until_complete(setup_all())
84+
event_loop.run_until_complete(
85+
_create_errata(errata)
86+
)
87+
88+
7189
@dramatiq.actor(
7290
max_retries=0,
7391
priority=0,

alws/routers/errata.py

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
bulk_errata_release,
1818
bulk_new_errata_release,
1919
create_new_errata,
20+
create_errata,
2021
release_errata,
2122
release_new_errata,
2223
reset_records_threshold,
@@ -39,22 +40,35 @@
3940
async def create_new_errata_record(
4041
errata: errata_schema.BaseErrataRecord
4142
):
42-
create_new_errata.send(errata)
43+
try:
44+
errata_data = errata.model_dump()
45+
46+
# Convert date fields to strings
47+
errata_data["issued_date"] = errata_data["issued_date"].isoformat()
48+
errata_data["updated_date"] = errata_data["updated_date"].isoformat()
4349

44-
message = f"Record {errata.id} is scheduled for creation"
45-
return {"ok": message}
50+
create_new_errata.send(errata_data)
51+
52+
return {"ok": True}
53+
except ValueError as e:
54+
return {"ok": False, "error": str(e)}
4655

4756

4857
@router.post("/", response_model=errata_schema.CreateErrataResponse)
4958
async def create_errata_record(
50-
errata: errata_schema.BaseErrataRecord,
51-
db: AsyncSession = Depends(AsyncSessionDependency(key=get_async_db_key())),
59+
errata: errata_schema.BaseErrataRecord
5260
):
53-
record = await errata_crud.create_errata_record(
54-
db,
55-
errata,
56-
)
57-
return {"ok": bool(record)}
61+
try:
62+
errata_data = errata.model_dump()
63+
64+
errata_data["issued_date"] = errata_data["issued_date"].isoformat()
65+
errata_data["updated_date"] = errata_data["updated_date"].isoformat()
66+
67+
create_errata.send(errata_data)
68+
69+
return {"ok": True}
70+
except ValueError as e:
71+
return {"ok": False, "error": str(e)}
5872

5973

6074
@public_router.get("/", response_model=errata_schema.ErrataRecord)

alws/schemas/errata_schema.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ class CompactErrataRecord(BaseModel):
132132

133133
class CreateErrataResponse(BaseModel):
134134
ok: bool
135+
error: Optional[str] = None
135136

136137

137138
class ChangeErrataPackageStatusResponse(BaseModel):

tests/fixtures/errata.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
import pytest
55
from sqlalchemy.ext.asyncio import AsyncSession
66

7-
from alws.crud.errata import create_errata_record
7+
from alws.crud.errata import create_errata_record, create_new_errata_record
8+
from alws.dramatiq.errata import create_new_errata
89
from alws.schemas.errata_schema import BaseErrataRecord
910

1011

@@ -107,15 +108,26 @@ async def create_errata(
107108
async_session: AsyncSession,
108109
errata_create_payload: typing.Dict[str, typing.Any],
109110
):
110-
await create_errata_record(
111-
async_session,
112-
BaseErrataRecord(**errata_create_payload),
113-
)
111+
await create_errata_record(errata_create_payload)
114112
await async_session.commit()
115113
yield
116114
await async_session.rollback()
117115

118116

117+
@pytest.fixture
118+
async def create_errata_dramatiq(
119+
async_session: AsyncSession,
120+
errata_create_payload: typing.Dict[str, typing.Any],
121+
monkeypatch,
122+
):
123+
async def func(*args, **kwargs):
124+
await create_new_errata_record(errata_create_payload)
125+
126+
monkeypatch.setattr(create_new_errata, "send", func)
127+
await create_new_errata.send(errata_create_payload)
128+
await async_session.commit()
129+
yield
130+
119131
@pytest.fixture
120132
def pulp_updateinfos():
121133
return [

tests/test_api/test_errata.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
from datetime import datetime
2-
31
import pytest
4-
52
from tests.mock_classes import BaseAsyncTestCase
63

74

@@ -35,7 +32,9 @@ async def test_get_updateinfo_xml(
3532
async def test_list_errata_all_records(
3633
self,
3734
errata_create_payload,
35+
create_errata_dramatiq
3836
):
37+
3938
response = await self.make_request("get", "/api/v1/errata/all/")
4039
errata = response.json()
4140
assert (

0 commit comments

Comments
 (0)