Skip to content

Commit a70702a

Browse files
hive-botclaude
andcommitted
refactor: merge extra body parameters with one helper
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 1916101 commit a70702a

4 files changed

Lines changed: 37 additions & 60 deletions

File tree

‎deepl/admin_client.py‎

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
DeveloperKeyUsageLimitsUpdate,
1414
)
1515
from deepl._base_client import BaseClient
16+
from deepl import util
1617
import datetime
1718
import re
1819
import urllib.parse
@@ -186,7 +187,7 @@ def create_developer_key(
186187
request_data = {}
187188
if label is not None:
188189
request_data["label"] = label
189-
_add_extra_body_parameters(request_data, extra_body_parameters)
190+
util._add_extra_body_parameters(request_data, extra_body_parameters)
190191

191192
status, content, json = self._api_call(
192193
"v2/admin/developer-keys",
@@ -290,22 +291,14 @@ def _put_developer_key(
290291
request_data: dict,
291292
extra_body_parameters: Optional[dict],
292293
) -> DeveloperKey:
293-
_add_extra_body_parameters(request_data, extra_body_parameters)
294+
util._add_extra_body_parameters(request_data, extra_body_parameters)
294295
status, content, json = self._api_call(
295296
url, method="PUT", json=request_data
296297
)
297298
self._raise_for_status(status, content, json)
298299
return _parse_key(json)
299300

300301

301-
def _add_extra_body_parameters(
302-
request_data: dict, extra_body_parameters: Optional[dict]
303-
) -> None:
304-
# Entries replace keys of the same name set by the client.
305-
if extra_body_parameters:
306-
request_data.update(extra_body_parameters)
307-
308-
309302
def _date_range_params(
310303
start_date: Union[datetime.date, str], end_date: Union[datetime.date, str]
311304
) -> Dict[str, str]:

‎deepl/deepl_client.py‎

Lines changed: 22 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,6 @@
5959
_T = TypeVar("_T")
6060

6161

62-
def _apply_extra_body_parameters(
63-
request_data: dict, extra_body_parameters: Optional[dict]
64-
) -> None:
65-
# Entries replace keys of the same name set by the client.
66-
if extra_body_parameters:
67-
for k, v in extra_body_parameters.items():
68-
request_data[k] = v
69-
70-
7162
def _parse_improvements(json: Any, text_count: int) -> List[WriteResult]:
7263
improvements = json.get("improvements") if isinstance(json, dict) else None
7364
if not isinstance(improvements, list) or len(improvements) < text_count:
@@ -115,14 +106,6 @@ def _renamed_argument(
115106
return value
116107

117108

118-
def _add_extra_body_parameters(
119-
request_data: Dict[str, Any], extra_body_parameters: Optional[dict]
120-
) -> None:
121-
# Entries replace keys of the same name set by the SDK.
122-
if extra_body_parameters:
123-
request_data.update(extra_body_parameters)
124-
125-
126109
class DeepLClient(Translator):
127110
def __init__(
128111
self,
@@ -216,7 +199,7 @@ def rephrase_text(
216199
request_data["writing_style"] = str(writing_style)
217200
if tone:
218201
request_data["tone"] = str(tone)
219-
_apply_extra_body_parameters(request_data, extra_body_parameters)
202+
util._add_extra_body_parameters(request_data, extra_body_parameters)
220203

221204
status, content, json = self._api_call(
222205
"v2/write/rephrase", json=request_data
@@ -267,7 +250,7 @@ def correct_text(
267250
request_data: dict = {"text": text}
268251
if target_lang:
269252
request_data["target_lang"] = str(target_lang)
270-
_apply_extra_body_parameters(request_data, extra_body_parameters)
253+
util._add_extra_body_parameters(request_data, extra_body_parameters)
271254

272255
status, content, json = self._api_call(
273256
"v2/write/correct", json=request_data
@@ -414,7 +397,7 @@ def _create_multilingual_glossary(
414397
"name": name,
415398
"dictionaries": self._dictionaries_json(dictionaries),
416399
}
417-
_add_extra_body_parameters(request_data, extra_body_parameters)
400+
util._add_extra_body_parameters(request_data, extra_body_parameters)
418401

419402
status, content, json = self._api_call(
420403
"v3/glossaries", json=request_data
@@ -625,7 +608,7 @@ def _update_multilingual_glossary(
625608
request_data["dictionaries"] = self._dictionaries_json(
626609
dictionaries
627610
)
628-
_add_extra_body_parameters(request_data, extra_body_parameters)
611+
util._add_extra_body_parameters(request_data, extra_body_parameters)
629612

630613
status, content, json = self._api_call(
631614
f"v3/glossaries/{glossary_id}", method="PATCH", json=request_data
@@ -761,7 +744,7 @@ def _replace_multilingual_glossary_dictionary(
761744
source_lang, target_lang, entries
762745
)
763746
)
764-
_add_extra_body_parameters(request_data, extra_body_parameters)
747+
util._add_extra_body_parameters(request_data, extra_body_parameters)
765748

766749
status, content, json = self._api_call(
767750
f"v3/glossaries/{glossary_id}/dictionaries",
@@ -1032,7 +1015,7 @@ def create_spoken_terms(
10321015
self._spoken_terms_json(entries) for entries in term_lists
10331016
],
10341017
}
1035-
request_data.update(extra_body_parameters or {})
1018+
util._add_extra_body_parameters(request_data, extra_body_parameters)
10361019
status, content, json = self._api_call(
10371020
"v3/spoken-terms", json=request_data
10381021
)
@@ -1104,7 +1087,7 @@ def update_spoken_terms(
11041087
request_data["term_lists"] = [
11051088
self._spoken_terms_json(entries) for entries in term_lists
11061089
]
1107-
request_data.update(extra_body_parameters or {})
1090+
util._add_extra_body_parameters(request_data, extra_body_parameters)
11081091
status, content, json = self._api_call(
11091092
f"v3/spoken-terms/{spoken_terms_id}",
11101093
method="PATCH",
@@ -1156,7 +1139,7 @@ def replace_spoken_terms_list(
11561139
"""
11571140
spoken_terms_id = self._spoken_terms_id(spoken_terms)
11581141
request_data = self._spoken_terms_json(entries)
1159-
request_data.update(extra_body_parameters or {})
1142+
util._add_extra_body_parameters(request_data, extra_body_parameters)
11601143
status, content, json = self._api_call(
11611144
f"v3/spoken-terms/{spoken_terms_id}/term-lists",
11621145
method="PUT",
@@ -1355,9 +1338,10 @@ def create_style_rule(
13551338
if custom_instructions is not None:
13561339
request_data["custom_instructions"] = custom_instructions
13571340

1341+
util._add_extra_body_parameters(request_data, extra_body_parameters)
13581342
status, content, json = self._api_call(
13591343
"v3/style_rules",
1360-
json=self._with_extra_body(request_data, extra_body_parameters),
1344+
json=request_data,
13611345
)
13621346
self._raise_for_status(status, content, json)
13631347
return self._parse_style_rule_response(StyleRuleInfo.from_json, json)
@@ -1399,10 +1383,11 @@ def update_style_rule_name(
13991383
if not name:
14001384
raise ValueError("name must not be empty")
14011385
request_data = {"name": name}
1386+
util._add_extra_body_parameters(request_data, extra_body_parameters)
14021387
status, content, json = self._api_call(
14031388
f"v3/style_rules/{style_id}",
14041389
method="PATCH",
1405-
json=self._with_extra_body(request_data, extra_body_parameters),
1390+
json=request_data,
14061391
)
14071392
self._raise_for_status(status, content, json)
14081393
return self._parse_style_rule_response(StyleRuleInfo.from_json, json)
@@ -1439,12 +1424,13 @@ def update_style_rule_configured_rules(
14391424
:return: Updated StyleRuleInfo.
14401425
"""
14411426
style_id = self._style_rule_id(style_rule)
1427+
# Copy so the caller's configured_rules dict is not modified.
1428+
request_data = dict(configured_rules)
1429+
util._add_extra_body_parameters(request_data, extra_body_parameters)
14421430
status, content, json = self._api_call(
14431431
f"v3/style_rules/{style_id}/configured_rules",
14441432
method="PUT",
1445-
json=self._with_extra_body(
1446-
configured_rules, extra_body_parameters
1447-
),
1433+
json=request_data,
14481434
)
14491435
self._raise_for_status(status, content, json)
14501436
return self._parse_style_rule_response(StyleRuleInfo.from_json, json)
@@ -1478,9 +1464,10 @@ def create_style_rule_custom_instruction(
14781464
request_data = {"label": label, "prompt": prompt}
14791465
if source_language is not None:
14801466
request_data["source_language"] = source_language
1467+
util._add_extra_body_parameters(request_data, extra_body_parameters)
14811468
status, content, json = self._api_call(
14821469
f"v3/style_rules/{style_id}/custom_instructions",
1483-
json=self._with_extra_body(request_data, extra_body_parameters),
1470+
json=request_data,
14841471
)
14851472
self._raise_for_status(status, content, json)
14861473
return self._parse_style_rule_response(
@@ -1545,10 +1532,11 @@ def update_style_rule_custom_instruction(
15451532
if source_language is not None:
15461533
request_data["source_language"] = source_language
15471534
url = f"v3/style_rules/{style_id}/custom_instructions/{instruction}"
1535+
util._add_extra_body_parameters(request_data, extra_body_parameters)
15481536
status, content, json = self._api_call(
15491537
url,
15501538
method="PUT",
1551-
json=self._with_extra_body(request_data, extra_body_parameters),
1539+
json=request_data,
15521540
)
15531541
self._raise_for_status(status, content, json)
15541542
return self._parse_style_rule_response(
@@ -1801,16 +1789,9 @@ def _style_profile_json(
18011789
]
18021790
# Unset (None) fields are not sent; "" and [] are sent as given.
18031791
request_data = {k: v for k, v in fields.items() if v is not None}
1804-
# Entries replace keys of the same name set above.
1805-
if extra_body_parameters:
1806-
request_data.update(extra_body_parameters)
1792+
util._add_extra_body_parameters(request_data, extra_body_parameters)
18071793
return request_data
18081794

1809-
@staticmethod
1810-
def _with_extra_body(body: dict, extra: Optional[dict]) -> dict:
1811-
# Entries replace keys of the same name set by the client.
1812-
return {**body, **extra} if extra else body
1813-
18141795
@staticmethod
18151796
def _parse_style_rule_response(
18161797
parse: Callable[[Any], _T], json: Any
@@ -2053,9 +2034,7 @@ def create_translation_memory_import(
20532034
if display_name is not None:
20542035
request_data["parameters"] = {"display_name": display_name}
20552036

2056-
# Entries replace keys of the same name set above.
2057-
if extra_body_parameters:
2058-
request_data.update(extra_body_parameters)
2037+
util._add_extra_body_parameters(request_data, extra_body_parameters)
20592038

20602039
status, content, json = self._api_call(
20612040
"v3/translation_memories/import", json=request_data

‎deepl/translator.py‎

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -501,10 +501,7 @@ def join_tags(tag_argument: Union[str, Iterable[str]]) -> List[str]:
501501
if custom_instructions is not None:
502502
request_data["custom_instructions"] = custom_instructions
503503

504-
# Entries replace keys of the same name set above.
505-
if extra_body_parameters:
506-
for k, v in extra_body_parameters.items():
507-
request_data[k] = v
504+
util._add_extra_body_parameters(request_data, extra_body_parameters)
508505

509506
status, content, json = self._api_call(
510507
"v2/translate", json=request_data
@@ -904,9 +901,7 @@ def translate_document_upload(
904901
files = {"file": (filename, input_document)}
905902
else:
906903
files = {"file": input_document}
907-
if extra_body_parameters:
908-
for k, v in extra_body_parameters.items():
909-
request_data[k] = v
904+
util._add_extra_body_parameters(request_data, extra_body_parameters)
910905

911906
status, content, json = self._api_call(
912907
"v2/document", data=request_data, files=files

‎deepl/util.py‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,16 @@ def _get_log_text(message, **kwargs):
4444
)
4545

4646

47+
def _add_extra_body_parameters(
48+
request_data: Dict[str, Any], extra_body_parameters: Optional[dict]
49+
) -> None:
50+
"""Merges extra_body_parameters into request_data in place. Entries
51+
replace keys of the same name set by the library; None or {} adds
52+
nothing."""
53+
if extra_body_parameters:
54+
request_data.update(extra_body_parameters)
55+
56+
4757
def log_debug(message, **kwargs):
4858
text = _get_log_text(message, **kwargs)
4959
logger.debug(text)

0 commit comments

Comments
 (0)