Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
MPT_API_BASE_URL=https://api.example.com/

MPT_API_TOKEN=idt:TKN-4138-9324:...
MPT_API_TOKEN_CLIENT=idt:TKN...
MPT_API_TOKEN_OPERATIONS=idt:TKN-4138-9324:...
MPT_API_TOKEN_VENDOR=idt:TKN-8857-1729:...
RP_API_KEY="pytest_Ox...
RP_ENDPOINT="https://reportportal.example.com"
RP_LAUNCH="dev-env"
2 changes: 0 additions & 2 deletions .env.sample

This file was deleted.

67 changes: 67 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,68 @@
# mpt-api-python-client

A Python client for interacting with the MPT API.

## Installation

Install as a uv dependency:

```bash
uv add mpt-api-client
cp .env.example .env
```

## Usage

```python
from mpt_api_client import MPTClient

#client = MPTClient(api_key=os.getenv("MPT_API_KEY"), base_url=os.getenv("MPT_API_URL"))
client = MPTClient() # Will get the api_key and base_url from the environment variables

for product in client.catalog.products.iterate():
print(product.name)
```

## Async Usage

```python
import asyncio
from mpt_api_client import AsyncMPTClient

async def main():
# client = AsyncMPTClient(api_key=os.getenv("MPT_API_KEY"), base_url=os.getenv("MPT_API_URL"))
client = AsyncMPTClient() # Will get the api_key and base_url from the environment variables
async for product in client.catalog.products.iterate():
print(product.name)

asyncio.run(main())
```

## Development

Clone the repository and install dependencies:

```bash
git clone https://github.com/albertsola/mpt-api-python-client.git
cd mpt-api-python-client
uv add -r requirements.txt
```

## Testing

Run all validations with:

```bash
docker compose run --rm app_test
```

Run pytest with:

```bash
pytest tests/unit
pytest tests/e2e
pytest tests/seed
```
## License

MIT
4 changes: 2 additions & 2 deletions mpt_api_client/resources/catalog/products.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ def documents(self, product_id: str) -> DocumentService:
http_client=self.http_client, endpoint_params={"product_id": product_id}
)

def product_parameters(self, product_id: str) -> ParametersService:
def parameters(self, product_id: str) -> ParametersService: # noqa: WPS110
"""Return product_parameters service."""
return ParametersService(
http_client=self.http_client, endpoint_params={"product_id": product_id}
Expand Down Expand Up @@ -191,7 +191,7 @@ def documents(self, product_id: str) -> AsyncDocumentService:
http_client=self.http_client, endpoint_params={"product_id": product_id}
)

def product_parameters(self, product_id: str) -> AsyncParametersService:
def parameters(self, product_id: str) -> AsyncParametersService: # noqa: WPS110
"""Return product_parameters service."""
return AsyncParametersService(
http_client=self.http_client, endpoint_params={"product_id": product_id}
Expand Down
8 changes: 2 additions & 6 deletions seed/catalog/product_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,7 @@ async def get_parameter(
except ValueError:
logger.debug("Loading parameter: %s", parameter_id)
product_id = context.get_string("catalog.product.id")
parameter = await mpt_vendor.catalog.products.product_parameters(product_id).get(
parameter_id
)
parameter = await mpt_vendor.catalog.products.parameters(product_id).get(parameter_id)
context.set_resource(namespace, parameter)
return parameter

Expand Down Expand Up @@ -72,9 +70,7 @@ async def create_parameter(
if not product_id:
raise ValueError("Product id is required.")
parameter_data = build_parameter(context=context)
parameter = await mpt_vendor.catalog.products.product_parameters(product_id).create(
parameter_data
)
parameter = await mpt_vendor.catalog.products.parameters(product_id).create(parameter_data)
logger.debug("Parameter created: %s", parameter.id)
context[f"{namespace}.id"] = parameter.id
context.set_resource(namespace, parameter)
Expand Down
6 changes: 3 additions & 3 deletions tests/seed/catalog/test_product_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ async def test_get_parameter(
context["catalog.product.id"] = "product-123"
service = AsyncMock(spec=AsyncParametersService)
service.get.return_value = parameter
vendor_client.catalog.products.product_parameters.return_value = service
vendor_client.catalog.products.parameters.return_value = service

fetched_parameter = await get_parameter(context=context, mpt_vendor=vendor_client)

Expand Down Expand Up @@ -67,7 +67,7 @@ async def test_get_or_create_parameter_create_new(
) -> None:
context["catalog.product.id"] = "product-123"
parameters_service.create.return_value = parameter
vendor_client.catalog.products.product_parameters.return_value = parameters_service
vendor_client.catalog.products.parameters.return_value = parameters_service

with (
patch("seed.catalog.product_parameters.get_parameter", return_value=None),
Expand Down Expand Up @@ -96,7 +96,7 @@ async def test_create_parameter_success(
context["catalog.parameter_group.id"] = "group-123"
service = AsyncMock(spec=AsyncParametersService)
service.create.return_value = parameter
vendor_client.catalog.products.product_parameters.return_value = service
vendor_client.catalog.products.parameters.return_value = service

created = await create_parameter(context=context, mpt_vendor=vendor_client)

Expand Down
4 changes: 2 additions & 2 deletions tests/unit/resources/catalog/test_products.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ def test_async_mixins_present(async_products_service, method):
("parameter_groups", ParameterGroupsService),
("media", MediaService),
("documents", DocumentService),
("product_parameters", ParametersService),
("parameters", ParametersService),
("templates", TemplatesService),
("terms", TermService),
],
Expand All @@ -85,7 +85,7 @@ def test_property_services(products_service, service_method, expected_service_cl
("parameter_groups", AsyncParameterGroupsService),
("media", AsyncMediaService),
("documents", AsyncDocumentService),
("product_parameters", AsyncParametersService),
("parameters", AsyncParametersService),
("templates", AsyncTemplatesService),
("terms", AsyncTermService),
],
Expand Down