statuspro-openapi-client 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- statuspro_openapi_client-0.1.0.dist-info/METADATA +337 -0
- statuspro_openapi_client-0.1.0.dist-info/RECORD +74 -0
- statuspro_openapi_client-0.1.0.dist-info/WHEEL +4 -0
- statuspro_openapi_client-0.1.0.dist-info/entry_points.txt +3 -0
- statuspro_openapi_client-0.1.0.dist-info/licenses/LICENSE +21 -0
- statuspro_public_api_client/__init__.py +36 -0
- statuspro_public_api_client/_logging.py +33 -0
- statuspro_public_api_client/api/__init__.py +1 -0
- statuspro_public_api_client/api/orders/__init__.py +1 -0
- statuspro_public_api_client/api/orders/add_order_comment.py +215 -0
- statuspro_public_api_client/api/orders/bulk_update_order_status.py +194 -0
- statuspro_public_api_client/api/orders/get_order.py +188 -0
- statuspro_public_api_client/api/orders/get_viable_statuses.py +193 -0
- statuspro_public_api_client/api/orders/list_orders.py +366 -0
- statuspro_public_api_client/api/orders/lookup_order.py +208 -0
- statuspro_public_api_client/api/orders/set_order_due_date.py +215 -0
- statuspro_public_api_client/api/orders/update_order_status.py +215 -0
- statuspro_public_api_client/api/statuses/__init__.py +1 -0
- statuspro_public_api_client/api/statuses/get_statuses.py +161 -0
- statuspro_public_api_client/api_wrapper/__init__.py +15 -0
- statuspro_public_api_client/api_wrapper/_namespace.py +40 -0
- statuspro_public_api_client/api_wrapper/_registry.py +43 -0
- statuspro_public_api_client/api_wrapper/_resource.py +116 -0
- statuspro_public_api_client/client.py +267 -0
- statuspro_public_api_client/client_types.py +54 -0
- statuspro_public_api_client/domain/__init__.py +33 -0
- statuspro_public_api_client/domain/base.py +117 -0
- statuspro_public_api_client/domain/converters.py +71 -0
- statuspro_public_api_client/domain/order.py +87 -0
- statuspro_public_api_client/domain/status.py +30 -0
- statuspro_public_api_client/errors.py +16 -0
- statuspro_public_api_client/helpers/__init__.py +21 -0
- statuspro_public_api_client/helpers/base.py +26 -0
- statuspro_public_api_client/helpers/orders.py +78 -0
- statuspro_public_api_client/helpers/statuses.py +37 -0
- statuspro_public_api_client/log_setup.py +99 -0
- statuspro_public_api_client/models/__init__.py +53 -0
- statuspro_public_api_client/models/add_order_comment_request.py +68 -0
- statuspro_public_api_client/models/bulk_status_update_request.py +124 -0
- statuspro_public_api_client/models/bulk_status_update_response.py +72 -0
- statuspro_public_api_client/models/customer.py +74 -0
- statuspro_public_api_client/models/error_response.py +58 -0
- statuspro_public_api_client/models/history_item.py +171 -0
- statuspro_public_api_client/models/list_orders_financial_status_item.py +15 -0
- statuspro_public_api_client/models/list_orders_fulfillment_status_item.py +11 -0
- statuspro_public_api_client/models/locale_translation.py +66 -0
- statuspro_public_api_client/models/mail_log.py +82 -0
- statuspro_public_api_client/models/message_response.py +58 -0
- statuspro_public_api_client/models/order_list_item.py +180 -0
- statuspro_public_api_client/models/order_list_meta.py +120 -0
- statuspro_public_api_client/models/order_list_response.py +81 -0
- statuspro_public_api_client/models/order_response.py +220 -0
- statuspro_public_api_client/models/progress_timeline_item.py +93 -0
- statuspro_public_api_client/models/set_due_date_request.py +95 -0
- statuspro_public_api_client/models/status.py +190 -0
- statuspro_public_api_client/models/status_definition.py +82 -0
- statuspro_public_api_client/models/status_translations.py +62 -0
- statuspro_public_api_client/models/update_order_status_request.py +92 -0
- statuspro_public_api_client/models/validation_error_response.py +81 -0
- statuspro_public_api_client/models/validation_error_response_errors.py +54 -0
- statuspro_public_api_client/models/viable_status.py +82 -0
- statuspro_public_api_client/models_pydantic/__init__.py +122 -0
- statuspro_public_api_client/models_pydantic/_auto_registry.py +115 -0
- statuspro_public_api_client/models_pydantic/_base.py +349 -0
- statuspro_public_api_client/models_pydantic/_generated/__init__.py +53 -0
- statuspro_public_api_client/models_pydantic/_generated/errors.py +24 -0
- statuspro_public_api_client/models_pydantic/_generated/orders.py +136 -0
- statuspro_public_api_client/models_pydantic/_generated/statuses.py +25 -0
- statuspro_public_api_client/models_pydantic/_registry.py +171 -0
- statuspro_public_api_client/models_pydantic/converters.py +184 -0
- statuspro_public_api_client/py.typed +1 -0
- statuspro_public_api_client/statuspro-openapi.yaml +859 -0
- statuspro_public_api_client/statuspro_client.py +1156 -0
- statuspro_public_api_client/utils.py +290 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import TYPE_CHECKING, Any, TypeVar
|
|
5
|
+
|
|
6
|
+
from attrs import (
|
|
7
|
+
define as _attrs_define,
|
|
8
|
+
field as _attrs_field,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from ..models.locale_translation import LocaleTranslation
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
T = TypeVar("T", bound="StatusTranslations")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@_attrs_define
|
|
19
|
+
class StatusTranslations:
|
|
20
|
+
additional_properties: dict[str, LocaleTranslation] = _attrs_field(
|
|
21
|
+
init=False, factory=dict
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
def to_dict(self) -> dict[str, Any]:
|
|
25
|
+
|
|
26
|
+
field_dict: dict[str, Any] = {}
|
|
27
|
+
for prop_name, prop in self.additional_properties.items():
|
|
28
|
+
field_dict[prop_name] = prop.to_dict()
|
|
29
|
+
|
|
30
|
+
return field_dict
|
|
31
|
+
|
|
32
|
+
@classmethod
|
|
33
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
34
|
+
from ..models.locale_translation import LocaleTranslation
|
|
35
|
+
|
|
36
|
+
d = dict(src_dict)
|
|
37
|
+
status_translations = cls()
|
|
38
|
+
|
|
39
|
+
additional_properties = {}
|
|
40
|
+
for prop_name, prop_dict in d.items():
|
|
41
|
+
additional_property = LocaleTranslation.from_dict(prop_dict)
|
|
42
|
+
|
|
43
|
+
additional_properties[prop_name] = additional_property
|
|
44
|
+
|
|
45
|
+
status_translations.additional_properties = additional_properties
|
|
46
|
+
return status_translations
|
|
47
|
+
|
|
48
|
+
@property
|
|
49
|
+
def additional_keys(self) -> list[str]:
|
|
50
|
+
return list(self.additional_properties.keys())
|
|
51
|
+
|
|
52
|
+
def __getitem__(self, key: str) -> LocaleTranslation:
|
|
53
|
+
return self.additional_properties[key]
|
|
54
|
+
|
|
55
|
+
def __setitem__(self, key: str, value: LocaleTranslation) -> None:
|
|
56
|
+
self.additional_properties[key] = value
|
|
57
|
+
|
|
58
|
+
def __delitem__(self, key: str) -> None:
|
|
59
|
+
del self.additional_properties[key]
|
|
60
|
+
|
|
61
|
+
def __contains__(self, key: str) -> bool:
|
|
62
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar
|
|
5
|
+
|
|
6
|
+
from attrs import (
|
|
7
|
+
define as _attrs_define,
|
|
8
|
+
field as _attrs_field,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
from ..client_types import UNSET, Unset
|
|
12
|
+
|
|
13
|
+
T = TypeVar("T", bound="UpdateOrderStatusRequest")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@_attrs_define
|
|
17
|
+
class UpdateOrderStatusRequest:
|
|
18
|
+
status_code: str
|
|
19
|
+
comment: str | Unset = UNSET
|
|
20
|
+
public: bool | Unset = False
|
|
21
|
+
email_customer: bool | Unset = True
|
|
22
|
+
email_additional: bool | Unset = True
|
|
23
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
24
|
+
|
|
25
|
+
def to_dict(self) -> dict[str, Any]:
|
|
26
|
+
status_code = self.status_code
|
|
27
|
+
|
|
28
|
+
comment = self.comment
|
|
29
|
+
|
|
30
|
+
public = self.public
|
|
31
|
+
|
|
32
|
+
email_customer = self.email_customer
|
|
33
|
+
|
|
34
|
+
email_additional = self.email_additional
|
|
35
|
+
|
|
36
|
+
field_dict: dict[str, Any] = {}
|
|
37
|
+
field_dict.update(self.additional_properties)
|
|
38
|
+
field_dict.update(
|
|
39
|
+
{
|
|
40
|
+
"status_code": status_code,
|
|
41
|
+
}
|
|
42
|
+
)
|
|
43
|
+
if comment is not UNSET:
|
|
44
|
+
field_dict["comment"] = comment
|
|
45
|
+
if public is not UNSET:
|
|
46
|
+
field_dict["public"] = public
|
|
47
|
+
if email_customer is not UNSET:
|
|
48
|
+
field_dict["email_customer"] = email_customer
|
|
49
|
+
if email_additional is not UNSET:
|
|
50
|
+
field_dict["email_additional"] = email_additional
|
|
51
|
+
|
|
52
|
+
return field_dict
|
|
53
|
+
|
|
54
|
+
@classmethod
|
|
55
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
56
|
+
d = dict(src_dict)
|
|
57
|
+
status_code = d.pop("status_code")
|
|
58
|
+
|
|
59
|
+
comment = d.pop("comment", UNSET)
|
|
60
|
+
|
|
61
|
+
public = d.pop("public", UNSET)
|
|
62
|
+
|
|
63
|
+
email_customer = d.pop("email_customer", UNSET)
|
|
64
|
+
|
|
65
|
+
email_additional = d.pop("email_additional", UNSET)
|
|
66
|
+
|
|
67
|
+
update_order_status_request = cls(
|
|
68
|
+
status_code=status_code,
|
|
69
|
+
comment=comment,
|
|
70
|
+
public=public,
|
|
71
|
+
email_customer=email_customer,
|
|
72
|
+
email_additional=email_additional,
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
update_order_status_request.additional_properties = d
|
|
76
|
+
return update_order_status_request
|
|
77
|
+
|
|
78
|
+
@property
|
|
79
|
+
def additional_keys(self) -> list[str]:
|
|
80
|
+
return list(self.additional_properties.keys())
|
|
81
|
+
|
|
82
|
+
def __getitem__(self, key: str) -> Any:
|
|
83
|
+
return self.additional_properties[key]
|
|
84
|
+
|
|
85
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
86
|
+
self.additional_properties[key] = value
|
|
87
|
+
|
|
88
|
+
def __delitem__(self, key: str) -> None:
|
|
89
|
+
del self.additional_properties[key]
|
|
90
|
+
|
|
91
|
+
def __contains__(self, key: str) -> bool:
|
|
92
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import TYPE_CHECKING, Any, TypeVar
|
|
5
|
+
|
|
6
|
+
from attrs import (
|
|
7
|
+
define as _attrs_define,
|
|
8
|
+
field as _attrs_field,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
from ..client_types import UNSET, Unset
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from ..models.validation_error_response_errors import ValidationErrorResponseErrors
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
T = TypeVar("T", bound="ValidationErrorResponse")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@_attrs_define
|
|
21
|
+
class ValidationErrorResponse:
|
|
22
|
+
message: str | Unset = UNSET
|
|
23
|
+
errors: ValidationErrorResponseErrors | Unset = UNSET
|
|
24
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
25
|
+
|
|
26
|
+
def to_dict(self) -> dict[str, Any]:
|
|
27
|
+
message = self.message
|
|
28
|
+
|
|
29
|
+
errors: dict[str, Any] | Unset = UNSET
|
|
30
|
+
if not isinstance(self.errors, Unset):
|
|
31
|
+
errors = self.errors.to_dict()
|
|
32
|
+
|
|
33
|
+
field_dict: dict[str, Any] = {}
|
|
34
|
+
field_dict.update(self.additional_properties)
|
|
35
|
+
field_dict.update({})
|
|
36
|
+
if message is not UNSET:
|
|
37
|
+
field_dict["message"] = message
|
|
38
|
+
if errors is not UNSET:
|
|
39
|
+
field_dict["errors"] = errors
|
|
40
|
+
|
|
41
|
+
return field_dict
|
|
42
|
+
|
|
43
|
+
@classmethod
|
|
44
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
45
|
+
from ..models.validation_error_response_errors import (
|
|
46
|
+
ValidationErrorResponseErrors,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
d = dict(src_dict)
|
|
50
|
+
message = d.pop("message", UNSET)
|
|
51
|
+
|
|
52
|
+
_errors = d.pop("errors", UNSET)
|
|
53
|
+
errors: ValidationErrorResponseErrors | Unset
|
|
54
|
+
if isinstance(_errors, Unset):
|
|
55
|
+
errors = UNSET
|
|
56
|
+
else:
|
|
57
|
+
errors = ValidationErrorResponseErrors.from_dict(_errors)
|
|
58
|
+
|
|
59
|
+
validation_error_response = cls(
|
|
60
|
+
message=message,
|
|
61
|
+
errors=errors,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
validation_error_response.additional_properties = d
|
|
65
|
+
return validation_error_response
|
|
66
|
+
|
|
67
|
+
@property
|
|
68
|
+
def additional_keys(self) -> list[str]:
|
|
69
|
+
return list(self.additional_properties.keys())
|
|
70
|
+
|
|
71
|
+
def __getitem__(self, key: str) -> Any:
|
|
72
|
+
return self.additional_properties[key]
|
|
73
|
+
|
|
74
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
75
|
+
self.additional_properties[key] = value
|
|
76
|
+
|
|
77
|
+
def __delitem__(self, key: str) -> None:
|
|
78
|
+
del self.additional_properties[key]
|
|
79
|
+
|
|
80
|
+
def __contains__(self, key: str) -> bool:
|
|
81
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar, cast
|
|
5
|
+
|
|
6
|
+
from attrs import (
|
|
7
|
+
define as _attrs_define,
|
|
8
|
+
field as _attrs_field,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
T = TypeVar("T", bound="ValidationErrorResponseErrors")
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@_attrs_define
|
|
15
|
+
class ValidationErrorResponseErrors:
|
|
16
|
+
additional_properties: dict[str, list[str]] = _attrs_field(init=False, factory=dict)
|
|
17
|
+
|
|
18
|
+
def to_dict(self) -> dict[str, Any]:
|
|
19
|
+
|
|
20
|
+
field_dict: dict[str, Any] = {}
|
|
21
|
+
for prop_name, prop in self.additional_properties.items():
|
|
22
|
+
field_dict[prop_name] = prop
|
|
23
|
+
|
|
24
|
+
return field_dict
|
|
25
|
+
|
|
26
|
+
@classmethod
|
|
27
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
28
|
+
d = dict(src_dict)
|
|
29
|
+
validation_error_response_errors = cls()
|
|
30
|
+
|
|
31
|
+
additional_properties = {}
|
|
32
|
+
for prop_name, prop_dict in d.items():
|
|
33
|
+
additional_property = cast(list[str], prop_dict)
|
|
34
|
+
|
|
35
|
+
additional_properties[prop_name] = additional_property
|
|
36
|
+
|
|
37
|
+
validation_error_response_errors.additional_properties = additional_properties
|
|
38
|
+
return validation_error_response_errors
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def additional_keys(self) -> list[str]:
|
|
42
|
+
return list(self.additional_properties.keys())
|
|
43
|
+
|
|
44
|
+
def __getitem__(self, key: str) -> list[str]:
|
|
45
|
+
return self.additional_properties[key]
|
|
46
|
+
|
|
47
|
+
def __setitem__(self, key: str, value: list[str]) -> None:
|
|
48
|
+
self.additional_properties[key] = value
|
|
49
|
+
|
|
50
|
+
def __delitem__(self, key: str) -> None:
|
|
51
|
+
del self.additional_properties[key]
|
|
52
|
+
|
|
53
|
+
def __contains__(self, key: str) -> bool:
|
|
54
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, TypeVar
|
|
5
|
+
|
|
6
|
+
from attrs import (
|
|
7
|
+
define as _attrs_define,
|
|
8
|
+
field as _attrs_field,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
from ..client_types import UNSET, Unset
|
|
12
|
+
|
|
13
|
+
T = TypeVar("T", bound="ViableStatus")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@_attrs_define
|
|
17
|
+
class ViableStatus:
|
|
18
|
+
code: str | Unset = UNSET
|
|
19
|
+
name: str | Unset = UNSET
|
|
20
|
+
description: str | Unset = UNSET
|
|
21
|
+
color: str | Unset = UNSET
|
|
22
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
23
|
+
|
|
24
|
+
def to_dict(self) -> dict[str, Any]:
|
|
25
|
+
code = self.code
|
|
26
|
+
|
|
27
|
+
name = self.name
|
|
28
|
+
|
|
29
|
+
description = self.description
|
|
30
|
+
|
|
31
|
+
color = self.color
|
|
32
|
+
|
|
33
|
+
field_dict: dict[str, Any] = {}
|
|
34
|
+
field_dict.update(self.additional_properties)
|
|
35
|
+
field_dict.update({})
|
|
36
|
+
if code is not UNSET:
|
|
37
|
+
field_dict["code"] = code
|
|
38
|
+
if name is not UNSET:
|
|
39
|
+
field_dict["name"] = name
|
|
40
|
+
if description is not UNSET:
|
|
41
|
+
field_dict["description"] = description
|
|
42
|
+
if color is not UNSET:
|
|
43
|
+
field_dict["color"] = color
|
|
44
|
+
|
|
45
|
+
return field_dict
|
|
46
|
+
|
|
47
|
+
@classmethod
|
|
48
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
49
|
+
d = dict(src_dict)
|
|
50
|
+
code = d.pop("code", UNSET)
|
|
51
|
+
|
|
52
|
+
name = d.pop("name", UNSET)
|
|
53
|
+
|
|
54
|
+
description = d.pop("description", UNSET)
|
|
55
|
+
|
|
56
|
+
color = d.pop("color", UNSET)
|
|
57
|
+
|
|
58
|
+
viable_status = cls(
|
|
59
|
+
code=code,
|
|
60
|
+
name=name,
|
|
61
|
+
description=description,
|
|
62
|
+
color=color,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
viable_status.additional_properties = d
|
|
66
|
+
return viable_status
|
|
67
|
+
|
|
68
|
+
@property
|
|
69
|
+
def additional_keys(self) -> list[str]:
|
|
70
|
+
return list(self.additional_properties.keys())
|
|
71
|
+
|
|
72
|
+
def __getitem__(self, key: str) -> Any:
|
|
73
|
+
return self.additional_properties[key]
|
|
74
|
+
|
|
75
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
76
|
+
self.additional_properties[key] = value
|
|
77
|
+
|
|
78
|
+
def __delitem__(self, key: str) -> None:
|
|
79
|
+
del self.additional_properties[key]
|
|
80
|
+
|
|
81
|
+
def __contains__(self, key: str) -> bool:
|
|
82
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"""Pydantic v2 models for StatusPro API.
|
|
2
|
+
|
|
3
|
+
This module provides Pydantic v2 models that mirror the attrs models
|
|
4
|
+
in the main `models/` package. These models offer:
|
|
5
|
+
|
|
6
|
+
- **Strong validation**: Pydantic's validation ensures data integrity
|
|
7
|
+
- **Immutability**: All models are frozen to prevent accidental modification
|
|
8
|
+
- **Serialization**: Easy conversion to/from JSON and dictionaries
|
|
9
|
+
- **IDE support**: Full type hints and autocomplete
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
### Converting from API Responses
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
from statuspro_public_api_client import StatusProClient
|
|
17
|
+
from statuspro_public_api_client.api.product import get_all_products
|
|
18
|
+
from statuspro_public_api_client.models_pydantic import Product
|
|
19
|
+
from statuspro_public_api_client.models_pydantic.converters import (
|
|
20
|
+
convert_response,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
async with StatusProClient() as client:
|
|
24
|
+
response = await get_all_products.asyncio_detailed(client=client)
|
|
25
|
+
products: list[Product] = convert_response(response, Product)
|
|
26
|
+
|
|
27
|
+
for product in products:
|
|
28
|
+
print(f"{product.name}: {product.id}")
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Converting Individual Objects
|
|
32
|
+
|
|
33
|
+
```python
|
|
34
|
+
from statuspro_public_api_client.models_pydantic import Product
|
|
35
|
+
from statuspro_public_api_client.models_pydantic.converters import (
|
|
36
|
+
to_pydantic,
|
|
37
|
+
to_attrs,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
# Convert attrs -> pydantic
|
|
41
|
+
pydantic_product = Product.from_attrs(attrs_product)
|
|
42
|
+
|
|
43
|
+
# Or use the convenience function
|
|
44
|
+
pydantic_product = to_pydantic(attrs_product)
|
|
45
|
+
|
|
46
|
+
# Convert back to attrs for API calls
|
|
47
|
+
attrs_product = pydantic_product.to_attrs()
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Model Layers
|
|
51
|
+
|
|
52
|
+
This package contains three distinct model layers:
|
|
53
|
+
|
|
54
|
+
1. **`models/`** (attrs): Auto-generated from OpenAPI, used by API transport
|
|
55
|
+
2. **`models_pydantic/`** (pydantic): Auto-generated from OpenAPI, user-facing
|
|
56
|
+
3. **`domain/`** (hand-written): Custom business logic models (e.g., ItemSearchResult)
|
|
57
|
+
|
|
58
|
+
The Pydantic models here are designed for user-facing operations while the attrs
|
|
59
|
+
models handle API communication internally.
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
# Import generated models (populated by generation script)
|
|
63
|
+
# This will be updated by the generate_pydantic_models.py script
|
|
64
|
+
import logging
|
|
65
|
+
|
|
66
|
+
from ._base import StatusProPydanticBase
|
|
67
|
+
from ._registry import (
|
|
68
|
+
get_attrs_class,
|
|
69
|
+
get_attrs_class_by_name,
|
|
70
|
+
get_pydantic_class,
|
|
71
|
+
get_pydantic_class_by_name,
|
|
72
|
+
get_registration_stats,
|
|
73
|
+
is_registered,
|
|
74
|
+
list_registered_models,
|
|
75
|
+
register,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
_logger = logging.getLogger(__name__)
|
|
79
|
+
|
|
80
|
+
# Try to import generated models
|
|
81
|
+
try:
|
|
82
|
+
from ._generated import * # noqa: F403
|
|
83
|
+
|
|
84
|
+
_GENERATED_MODELS_AVAILABLE = True
|
|
85
|
+
except ImportError as e:
|
|
86
|
+
# Generated models not yet created - this is expected before running
|
|
87
|
+
# the generation script for the first time
|
|
88
|
+
_GENERATED_MODELS_AVAILABLE = False
|
|
89
|
+
_logger.debug(
|
|
90
|
+
"Pydantic models not yet generated. Run 'uv run poe generate-pydantic' "
|
|
91
|
+
"to generate them. Import error: %s",
|
|
92
|
+
e,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
# Import auto-registration (populated by generation script)
|
|
96
|
+
try:
|
|
97
|
+
from ._auto_registry import register_all_models as _register_all
|
|
98
|
+
|
|
99
|
+
_register_all()
|
|
100
|
+
_REGISTRY_AVAILABLE = True
|
|
101
|
+
except ImportError as e:
|
|
102
|
+
# Auto-registry not yet created - this is expected before generation
|
|
103
|
+
_REGISTRY_AVAILABLE = False
|
|
104
|
+
_logger.debug(
|
|
105
|
+
"Auto-registry not yet generated. Run 'uv run poe generate-pydantic' "
|
|
106
|
+
"to generate it. Import error: %s",
|
|
107
|
+
e,
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
__all__ = [
|
|
111
|
+
# Base class
|
|
112
|
+
"StatusProPydanticBase",
|
|
113
|
+
"get_attrs_class",
|
|
114
|
+
"get_attrs_class_by_name",
|
|
115
|
+
"get_pydantic_class",
|
|
116
|
+
"get_pydantic_class_by_name",
|
|
117
|
+
"get_registration_stats",
|
|
118
|
+
"is_registered",
|
|
119
|
+
"list_registered_models",
|
|
120
|
+
# Registry functions
|
|
121
|
+
"register",
|
|
122
|
+
]
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"""Auto-generated registry mapping attrs <-> Pydantic model classes.
|
|
2
|
+
|
|
3
|
+
DO NOT EDIT - This file is generated by scripts/generate_pydantic_models.py
|
|
4
|
+
|
|
5
|
+
To regenerate, run:
|
|
6
|
+
uv run poe generate-pydantic
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
# Import all model classes
|
|
10
|
+
from statuspro_public_api_client.models.add_order_comment_request import (
|
|
11
|
+
AddOrderCommentRequest as AttrsAddOrderCommentRequest,
|
|
12
|
+
)
|
|
13
|
+
from statuspro_public_api_client.models.bulk_status_update_request import (
|
|
14
|
+
BulkStatusUpdateRequest as AttrsBulkStatusUpdateRequest,
|
|
15
|
+
)
|
|
16
|
+
from statuspro_public_api_client.models.bulk_status_update_response import (
|
|
17
|
+
BulkStatusUpdateResponse as AttrsBulkStatusUpdateResponse,
|
|
18
|
+
)
|
|
19
|
+
from statuspro_public_api_client.models.customer import Customer as AttrsCustomer
|
|
20
|
+
from statuspro_public_api_client.models.error_response import (
|
|
21
|
+
ErrorResponse as AttrsErrorResponse,
|
|
22
|
+
)
|
|
23
|
+
from statuspro_public_api_client.models.history_item import (
|
|
24
|
+
HistoryItem as AttrsHistoryItem,
|
|
25
|
+
)
|
|
26
|
+
from statuspro_public_api_client.models.locale_translation import (
|
|
27
|
+
LocaleTranslation as AttrsLocaleTranslation,
|
|
28
|
+
)
|
|
29
|
+
from statuspro_public_api_client.models.mail_log import MailLog as AttrsMailLog
|
|
30
|
+
from statuspro_public_api_client.models.message_response import (
|
|
31
|
+
MessageResponse as AttrsMessageResponse,
|
|
32
|
+
)
|
|
33
|
+
from statuspro_public_api_client.models.order_list_item import (
|
|
34
|
+
OrderListItem as AttrsOrderListItem,
|
|
35
|
+
)
|
|
36
|
+
from statuspro_public_api_client.models.order_list_meta import (
|
|
37
|
+
OrderListMeta as AttrsOrderListMeta,
|
|
38
|
+
)
|
|
39
|
+
from statuspro_public_api_client.models.order_list_response import (
|
|
40
|
+
OrderListResponse as AttrsOrderListResponse,
|
|
41
|
+
)
|
|
42
|
+
from statuspro_public_api_client.models.order_response import (
|
|
43
|
+
OrderResponse as AttrsOrderResponse,
|
|
44
|
+
)
|
|
45
|
+
from statuspro_public_api_client.models.progress_timeline_item import (
|
|
46
|
+
ProgressTimelineItem as AttrsProgressTimelineItem,
|
|
47
|
+
)
|
|
48
|
+
from statuspro_public_api_client.models.set_due_date_request import (
|
|
49
|
+
SetDueDateRequest as AttrsSetDueDateRequest,
|
|
50
|
+
)
|
|
51
|
+
from statuspro_public_api_client.models.status import Status as AttrsStatus
|
|
52
|
+
from statuspro_public_api_client.models.status_definition import (
|
|
53
|
+
StatusDefinition as AttrsStatusDefinition,
|
|
54
|
+
)
|
|
55
|
+
from statuspro_public_api_client.models.update_order_status_request import (
|
|
56
|
+
UpdateOrderStatusRequest as AttrsUpdateOrderStatusRequest,
|
|
57
|
+
)
|
|
58
|
+
from statuspro_public_api_client.models.validation_error_response import (
|
|
59
|
+
ValidationErrorResponse as AttrsValidationErrorResponse,
|
|
60
|
+
)
|
|
61
|
+
from statuspro_public_api_client.models.viable_status import (
|
|
62
|
+
ViableStatus as AttrsViableStatus,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
from ._generated.errors import (
|
|
66
|
+
ErrorResponse as PydanticErrorResponse,
|
|
67
|
+
MessageResponse as PydanticMessageResponse,
|
|
68
|
+
ValidationErrorResponse as PydanticValidationErrorResponse,
|
|
69
|
+
)
|
|
70
|
+
from ._generated.orders import (
|
|
71
|
+
AddOrderCommentRequest as PydanticAddOrderCommentRequest,
|
|
72
|
+
BulkStatusUpdateRequest as PydanticBulkStatusUpdateRequest,
|
|
73
|
+
BulkStatusUpdateResponse as PydanticBulkStatusUpdateResponse,
|
|
74
|
+
Customer as PydanticCustomer,
|
|
75
|
+
HistoryItem as PydanticHistoryItem,
|
|
76
|
+
LocaleTranslation as PydanticLocaleTranslation,
|
|
77
|
+
MailLog as PydanticMailLog,
|
|
78
|
+
OrderListItem as PydanticOrderListItem,
|
|
79
|
+
OrderListMeta as PydanticOrderListMeta,
|
|
80
|
+
OrderListResponse as PydanticOrderListResponse,
|
|
81
|
+
OrderResponse as PydanticOrderResponse,
|
|
82
|
+
ProgressTimelineItem as PydanticProgressTimelineItem,
|
|
83
|
+
SetDueDateRequest as PydanticSetDueDateRequest,
|
|
84
|
+
Status as PydanticStatus,
|
|
85
|
+
UpdateOrderStatusRequest as PydanticUpdateOrderStatusRequest,
|
|
86
|
+
)
|
|
87
|
+
from ._generated.statuses import (
|
|
88
|
+
StatusDefinition as PydanticStatusDefinition,
|
|
89
|
+
ViableStatus as PydanticViableStatus,
|
|
90
|
+
)
|
|
91
|
+
from ._registry import register
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def register_all_models() -> None:
|
|
95
|
+
"""Register all attrs <-> Pydantic model mappings."""
|
|
96
|
+
register(AttrsAddOrderCommentRequest, PydanticAddOrderCommentRequest)
|
|
97
|
+
register(AttrsBulkStatusUpdateRequest, PydanticBulkStatusUpdateRequest)
|
|
98
|
+
register(AttrsBulkStatusUpdateResponse, PydanticBulkStatusUpdateResponse)
|
|
99
|
+
register(AttrsCustomer, PydanticCustomer)
|
|
100
|
+
register(AttrsErrorResponse, PydanticErrorResponse)
|
|
101
|
+
register(AttrsHistoryItem, PydanticHistoryItem)
|
|
102
|
+
register(AttrsLocaleTranslation, PydanticLocaleTranslation)
|
|
103
|
+
register(AttrsMailLog, PydanticMailLog)
|
|
104
|
+
register(AttrsMessageResponse, PydanticMessageResponse)
|
|
105
|
+
register(AttrsOrderListItem, PydanticOrderListItem)
|
|
106
|
+
register(AttrsOrderListMeta, PydanticOrderListMeta)
|
|
107
|
+
register(AttrsOrderListResponse, PydanticOrderListResponse)
|
|
108
|
+
register(AttrsOrderResponse, PydanticOrderResponse)
|
|
109
|
+
register(AttrsProgressTimelineItem, PydanticProgressTimelineItem)
|
|
110
|
+
register(AttrsSetDueDateRequest, PydanticSetDueDateRequest)
|
|
111
|
+
register(AttrsStatus, PydanticStatus)
|
|
112
|
+
register(AttrsStatusDefinition, PydanticStatusDefinition)
|
|
113
|
+
register(AttrsUpdateOrderStatusRequest, PydanticUpdateOrderStatusRequest)
|
|
114
|
+
register(AttrsValidationErrorResponse, PydanticValidationErrorResponse)
|
|
115
|
+
register(AttrsViableStatus, PydanticViableStatus)
|