Skip to content

Commit 0e2d804

Browse files
committed
fix: get custom field name from model
#31
1 parent c067717 commit 0e2d804

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

yatracker/tracker/base.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from .client import BaseClient
1919

2020
T = TypeVar("T")
21+
B = TypeVar("B", bound=Base)
2122

2223
logger = logging.getLogger(__name__)
2324

@@ -70,12 +71,16 @@ def _decode(self, type_: type[T], data: bytes) -> T:
7071
def _prepare_payload(
7172
payload: dict[str, Any],
7273
exclude: Collection[str] | None = None,
74+
type_: type[B] | None = None,
7375
) -> dict[str, Any]:
7476
"""Remove empty fields from payload."""
7577
payload = payload.copy()
7678
exclude = exclude or []
7779
kwargs = payload.pop("kwargs", None)
80+
7881
if kwargs:
82+
if type_ is not None:
83+
kwargs = _replace_custom_fields(kwargs, type_)
7984
payload.update(kwargs)
8085

8186
return {
@@ -135,3 +140,14 @@ def _convert_value(obj: Any) -> Any: # noqa: ANN401
135140
return {k: _convert_value(v) for k, v in obj.items()}
136141
case _:
137142
return obj
143+
144+
145+
def _replace_custom_fields(kwargs: dict[str, Any], type_: type[B]) -> dict[str, Any]:
146+
"""Replace kwarg key with original field name."""
147+
new_kwargs: dict[str, Any] = {}
148+
for key, value in kwargs.items():
149+
if not hasattr(type_, key):
150+
continue
151+
field = getattr(type_, key)
152+
new_kwargs[field.name] = value
153+
return new_kwargs

yatracker/tracker/categories/issues.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ async def edit_issue(
9595
method="PATCH",
9696
uri=f"/issues/{issue_id}",
9797
params={"version": str(version)} if version else None,
98-
payload=self._prepare_payload(kwargs),
98+
payload=self._prepare_payload(kwargs, type_=_type),
9999
)
100100
return self._decode(_type, data)
101101

@@ -161,7 +161,7 @@ async def create_issue(
161161
Source:
162162
https://cloud.yandex.ru/docs/tracker/concepts/issues/create-issue
163163
"""
164-
payload = self._prepare_payload(locals())
164+
payload = self._prepare_payload(locals(), type_=_type)
165165
data = await self._client.request(
166166
method="POST",
167167
uri="/issues/",
@@ -262,7 +262,7 @@ async def move_issue(
262262
method="POST",
263263
uri=f"/issues/{issue_id}/_move",
264264
params=params,
265-
payload=self._prepare_payload(kwargs),
265+
payload=self._prepare_payload(kwargs, type_=_type),
266266
)
267267
return self._decode(_type, data)
268268

@@ -330,7 +330,11 @@ async def find_issues(
330330
If there are more than 10,000 issues in the response, use paging.
331331
:return:
332332
"""
333-
payload = self._prepare_payload(locals(), exclude=["expand", "order"])
333+
payload = self._prepare_payload(
334+
locals(),
335+
exclude=["expand", "order"],
336+
type_=_type,
337+
)
334338

335339
params = {}
336340
if order:

0 commit comments

Comments
 (0)