Skip to content

Commit 8b3156d

Browse files
committed
Update seeding for Catalog
1 parent 3c15f02 commit 8b3156d

20 files changed

Lines changed: 780 additions & 608 deletions

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ per-file-ignores = [
121121
"mpt_api_client/resources/catalog/mixins.py: WPS110 WPS202 WPS214 WPS215 WPS235",
122122
"mpt_api_client/resources/catalog/products.py: WPS204 WPS214 WPS215 WPS235",
123123
"mpt_api_client/rql/query_builder.py: WPS110 WPS115 WPS210 WPS214",
124+
"seed/catalog/product.py: WPS202 WPS217 WPS201 WPS213",
124125
"tests/unit/http/test_async_service.py: WPS204 WPS202",
125126
"tests/unit/http/test_service.py: WPS204 WPS202",
126127
"tests/unit/http/test_mixins.py: WPS204 WPS202 WPS210",
@@ -131,6 +132,7 @@ per-file-ignores = [
131132
"tests/e2e/accounts/*.py: WPS430 WPS202",
132133
"tests/e2e/catalog/*.py: WPS202 WPS421",
133134
"tests/e2e/catalog/items/*.py: WPS110 WPS202",
135+
"tests/seed/catalog/test_product.py: WPS202 WPS219",
134136
"tests/*: WPS432 WPS202",
135137
"seed/accounts/*.py: WPS453",
136138
]

seed/accounts/buyer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
logger = logging.getLogger(__name__)
1313

14-
icon = pathlib.Path("seed/data/logo.png").resolve()
14+
icon = pathlib.Path(__file__).parent.parent / "data/logo.png"
1515

1616

1717
@inject

seed/catalog/authorization.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import uuid
2+
3+
from mpt_api_client import AsyncMPTClient
4+
from mpt_api_client.resources.catalog.authorizations import Authorization
5+
from seed.context import Context
6+
from seed.defaults import DEFAULT_CONTEXT, DEFAULT_MPT_OPERATIONS
7+
from seed.helper import init_resource, require_context_id
8+
9+
10+
async def seed_authorization(context: Context = DEFAULT_CONTEXT) -> None:
11+
"""Seed authorization."""
12+
await init_resource("catalog.authorization.id", create_authorization, context)
13+
14+
15+
async def create_authorization(
16+
operations: AsyncMPTClient = DEFAULT_MPT_OPERATIONS, context: Context = DEFAULT_CONTEXT
17+
) -> Authorization:
18+
"""Creates an authorization."""
19+
product_id = require_context_id(context, "catalog.product.id", "Create authorization")
20+
seller_id = require_context_id(context, "accounts.seller.id", "Create authorization")
21+
account_id = require_context_id(context, "accounts.account.id", "Create authorization")
22+
short_uuid = uuid.uuid4().hex[:8]
23+
24+
authorization_data = {
25+
"externalIds": {"operations": f"e2e-seeded-{short_uuid}"},
26+
"product": {"id": product_id},
27+
"owner": {"id": seller_id},
28+
"journal": {"firstInvoiceDate": "2025-12-01", "frequency": "1m"},
29+
"eligibility": {"client": True, "partner": True},
30+
"currency": "USD",
31+
"notes": "E2E Seeded",
32+
"name": "E2E Seeded",
33+
"vendor": {"id": account_id},
34+
}
35+
return await operations.catalog.authorizations.create(authorization_data)

seed/catalog/catalog.py

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,19 @@
1-
import asyncio
21
import logging
3-
from typing import Any
42

5-
from seed.catalog.item import seed_items
6-
from seed.catalog.item_group import seed_item_group
3+
from seed.catalog.authorization import seed_authorization
4+
from seed.catalog.listing import seed_listing
5+
from seed.catalog.price_list import seed_price_list
76
from seed.catalog.product import seed_product
8-
from seed.catalog.product_parameters import seed_parameters
9-
from seed.catalog.product_parameters_group import seed_parameter_group
107

118
logger = logging.getLogger(__name__)
129

1310

14-
async def seed_groups_and_group_params() -> None:
15-
"""Seed parallel tasks for item groups and parameter groups."""
16-
tasks: list[asyncio.Task[Any]] = [
17-
asyncio.create_task(seed_item_group()),
18-
asyncio.create_task(seed_parameter_group()),
19-
]
20-
await asyncio.gather(*tasks)
21-
22-
23-
async def seed_items_and_params() -> None:
24-
"""Seed final tasks for items and parameters."""
25-
tasks: list[asyncio.Task[Any]] = [
26-
asyncio.create_task(seed_items()),
27-
asyncio.create_task(seed_parameters()),
28-
]
29-
await asyncio.gather(*tasks)
30-
31-
3211
async def seed_catalog() -> None:
3312
"""Seed catalog data including products, item groups, and parameters."""
3413
logger.debug("Seeding catalog ...")
3514
await seed_product()
36-
await seed_groups_and_group_params()
37-
await seed_items_and_params()
15+
await seed_authorization()
16+
await seed_price_list()
17+
await seed_listing()
3818

3919
logger.debug("Seeded catalog completed.")

seed/catalog/listing.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from mpt_api_client import AsyncMPTClient
2+
from mpt_api_client.resources.catalog.listings import Listing
3+
from seed.context import Context
4+
from seed.defaults import DEFAULT_CONTEXT, DEFAULT_MPT_OPERATIONS
5+
from seed.helper import init_resource, require_context_id
6+
7+
8+
async def seed_listing(context: Context = DEFAULT_CONTEXT) -> None:
9+
"""Seed listing."""
10+
await init_resource("catalog.listing.id", create_listing, context)
11+
12+
13+
async def create_listing( # noqa: WPS210
14+
operations: AsyncMPTClient = DEFAULT_MPT_OPERATIONS, context: Context = DEFAULT_CONTEXT
15+
) -> Listing:
16+
"""Creates a listing."""
17+
product_id = require_context_id(context, "catalog.product.id", "Create listing")
18+
seller_id = require_context_id(context, "accounts.seller.id", "Create authorization")
19+
authorization_id = require_context_id(context, "accounts.authorization.id", "Create listing")
20+
account_id = require_context_id(context, "accounts.account.id", "Create listing")
21+
price_list_id = require_context_id(context, "accounts.price_list.id", "Create listing")
22+
23+
listing_data = {
24+
"name": "e2e - please delete",
25+
"authorization": {
26+
"id": authorization_id,
27+
},
28+
"product": {
29+
"id": product_id,
30+
},
31+
"vendor": {
32+
"id": account_id,
33+
},
34+
"seller": {
35+
"id": seller_id,
36+
},
37+
"priceList": {"id": price_list_id},
38+
"primary": False,
39+
"notes": "",
40+
"eligibility": {"client": True, "partner": False},
41+
}
42+
return await operations.catalog.listings.create(listing_data)

seed/catalog/price_list.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from mpt_api_client import AsyncMPTClient
2+
from mpt_api_client.resources.catalog.price_lists import PriceList
3+
from seed.context import Context
4+
from seed.defaults import DEFAULT_CONTEXT, DEFAULT_MPT_OPERATIONS
5+
from seed.helper import init_resource, require_context_id
6+
7+
8+
async def seed_price_list(context: Context = DEFAULT_CONTEXT) -> None:
9+
"""Seed price list."""
10+
await init_resource("catalog.price_list.id", create_price_list, context)
11+
12+
13+
async def create_price_list(
14+
operations: AsyncMPTClient = DEFAULT_MPT_OPERATIONS, context: Context = DEFAULT_CONTEXT
15+
) -> PriceList:
16+
"""Creates a price list."""
17+
product_id = require_context_id(context, "catalog.product.id", "Create authorization")
18+
19+
price_list_data = {
20+
"notes": "E2E Seeded",
21+
"defaultMarkup": "20.0",
22+
"product": {"id": product_id},
23+
"currency": "USD",
24+
"default": False,
25+
}
26+
return await operations.catalog.price_lists.create(price_list_data)

0 commit comments

Comments
 (0)