убрал packages из cdek payload
Deploy / deploy (push) Successful in 52s

This commit is contained in:
Раис Юсупалиев
2026-06-26 20:46:21 +03:00
parent 843175f12e
commit 6906db7739
2 changed files with 51 additions and 23 deletions
@@ -126,7 +126,9 @@ def map_cdek_order_info_response(payload: dict[str, Any]) -> CDEKOrderInfo:
"CDEK order info response must include entity.uuid." "CDEK order info response must include entity.uuid."
) )
status_code = _latest_status_code(entity.get("statuses")) status_code = _invalid_create_request_status(
payload.get("requests")
) or _latest_status_code(entity.get("statuses"))
waybill_uuid, _ = _extract_waybill(payload) waybill_uuid, _ = _extract_waybill(payload)
return CDEKOrderInfo( return CDEKOrderInfo(
order_uuid=order_uuid, order_uuid=order_uuid,
@@ -172,6 +174,20 @@ def _latest_status_code(statuses: object) -> str | None:
return dated[-1][1] return dated[-1][1]
def _invalid_create_request_status(requests: object) -> str | None:
if not isinstance(requests, list):
return None
for entry in requests:
if not isinstance(entry, dict):
continue
if entry.get("type") != "CREATE" or entry.get("state") != "INVALID":
continue
errors = entry.get("errors")
if isinstance(errors, list) and errors:
return "INVALID"
return None
def _extract_waybill(payload: dict[str, Any]) -> tuple[str | None, str | None]: def _extract_waybill(payload: dict[str, Any]) -> tuple[str | None, str | None]:
entity = payload.get("entity") entity = payload.get("entity")
related_entities = ( related_entities = (
@@ -306,16 +322,6 @@ def _map_package(request: InitPaymentRequest, order_uuid: str) -> dict[str, Any]
"number": order_uuid, "number": order_uuid,
"weight": weight_grams, "weight": weight_grams,
"comment": description, "comment": description,
"items": [
{
"name": description,
"ware_key": order_uuid,
"payment": {"value": 0},
"cost": request.content.declared_value,
"amount": 1,
"weight": weight_grams,
}
],
} }
if system_data.parcel_type == "parcel" and system_data.dimensions is not None: if system_data.parcel_type == "parcel" and system_data.dimensions is not None:
package.update(_map_dimensions(system_data.dimensions)) package.update(_map_dimensions(system_data.dimensions))
@@ -198,21 +198,12 @@ def test_order_payload_includes_company_requisites_for_legal_entity() -> None:
assert sender["kpp"] == "770701001" assert sender["kpp"] == "770701001"
def test_order_payload_maps_content_to_comments_and_declared_value_item() -> None: def test_order_payload_maps_content_to_comments_without_items() -> None:
payload = map_cdek_order_request(make_init_payment_request(), "order-uuid-1") payload = map_cdek_order_request(make_init_payment_request(), "order-uuid-1")
assert payload["comment"] == "Headphones" assert payload["comment"] == "Headphones"
assert payload["packages"][0]["comment"] == "Headphones" assert payload["packages"][0]["comment"] == "Headphones"
assert payload["packages"][0]["items"] == [ assert "items" not in payload["packages"][0]
{
"name": "Headphones",
"ware_key": "order-uuid-1",
"payment": {"value": 0},
"cost": 50000,
"amount": 1,
"weight": 1000,
}
]
def test_order_payload_falls_back_package_comment_to_order_uuid() -> None: def test_order_payload_falls_back_package_comment_to_order_uuid() -> None:
@@ -224,7 +215,7 @@ def test_order_payload_falls_back_package_comment_to_order_uuid() -> None:
) )
assert payload["packages"][0]["comment"] == "order-uuid-1" assert payload["packages"][0]["comment"] == "order-uuid-1"
assert payload["packages"][0]["items"][0]["name"] == "order-uuid-1" assert "items" not in payload["packages"][0]
def test_order_payload_includes_company_for_individual_sender_as_full_name() -> None: def test_order_payload_includes_company_for_individual_sender_as_full_name() -> None:
@@ -285,6 +276,37 @@ def test_map_cdek_order_info_response_returns_none_status_when_statuses_empty()
) )
def test_map_cdek_order_info_response_maps_invalid_create_request_to_invalid_status() -> None:
result = map_cdek_order_info_response(
{
"entity": {
"uuid": "cdek-order-uuid",
"statuses": [
{"code": "ACCEPTED", "date_time": "2026-05-24T10:00:00+0000"}
],
},
"requests": [
{
"type": "CREATE",
"state": "INVALID",
"errors": [
{
"code": "ve_delivery_can_not_has_goods",
"message": "Заказ типа доставка не может содержать товары",
}
],
}
],
}
)
assert result == CDEKOrderInfo(
order_uuid="cdek-order-uuid",
status_code="INVALID",
waybill_uuid=None,
)
def test_map_cdek_order_info_response_raises_for_missing_entity() -> None: def test_map_cdek_order_info_response_raises_for_missing_entity() -> None:
with pytest.raises(CDEKOrderMappingError): with pytest.raises(CDEKOrderMappingError):
map_cdek_order_info_response({"requests": []}) map_cdek_order_info_response({"requests": []})