Skip to content

Latest commit

 

History

History
859 lines (767 loc) · 43.3 KB

CHANGELOG.md

File metadata and controls

859 lines (767 loc) · 43.3 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Added

  • Added the headers option to the Translator, DeepLClient and DeepLAdminClient constructors: extra HTTP headers sent with every request to the DeepL API. A header replaces the library's header of the same name, including User-Agent and Authorization; Content-Type, Content-Length, Transfer-Encoding, Host and an Accept the library sets for a call keep the library's value. Translation memory storage URLs get only the User-Agent.
  • Added the app_info option, an AppInfo(app_name, app_version), to the Translator, DeepLClient and DeepLAdminClient constructors, the same as calling set_app_info().
  • Added NotFoundException, raised for HTTP 404 on every endpoint. GlossaryNotFoundException is now its subclass.
  • Added is_free_account_auth_key(), which replaces auth_key_is_free_account().
  • Added the extra_body_parameters option to create_style_rule(), update_style_rule_name(), update_style_rule_configured_rules(), create_style_rule_custom_instruction() and update_style_rule_custom_instruction().
  • get_style_rule_custom_instruction(), update_style_rule_custom_instruction() and delete_style_rule_custom_instruction() accept a CustomInstruction object as instruction_id, as well as an ID string.
  • Added the max_retries and timeout_s options to the Translator, DeepLClient and DeepLAdminClient constructors, to set the maximum number of retries and the minimum per-attempt timeout in seconds for each client.
  • Added the style_profile option to translate_text() and the document translation functions (translate_document(), translate_document_from_filepath(), translate_document_upload()) to translate with a style profile, as a style profile ID or StyleProfile object. The CLI accepts it as --style-profile-id.
  • Added the DeepLAdminClient class for the Admin API. It must be created with an admin API key and supports managing developer keys (create_developer_key(), list_developer_keys(), deactivate_developer_key(), rename_developer_key(), set_developer_key_usage_limits()) and retrieving usage analytics (get_usage_analytics(), get_custom_tag_usage_analytics()) with the result types DeveloperKey, DeveloperKeyUsageLimits, AdminUsageReport, AdminUsageBreakdown, KeyUsage, CustomTagUsageReport, CustomTagUsage and CustomTagUsageBreakdown, and the request options DeveloperKeyUsageLimitsUpdate, AdminUsageGroupBy and CustomTagUsageAggregateBy. The developer key methods that send a request body accept extra_body_parameters. create_developer_key() is retried only when the request was not sent: after HTTP 429, a DNS resolution failure, a refused connection or a connect timeout. AdminUsageReport.total_usage, AdminUsageBreakdown.speech_to_speech_minutes and CustomTagUsageBreakdown.speech_to_speech_minutes are None when the report does not contain them, and a response without usage_report or custom_tag_usage_report raises DeepLException.
  • Added get_languages_for_resource() method to the DeepLClient class to retrieve the languages supported by a resource, with per-feature support information, via the /v3/languages endpoint. Resources are given as LanguageResourceName values or strings; results are LanguageSupport objects. Malformed responses raise DeepLException.
  • Added get_language_resources() method to the DeepLClient class to retrieve the API resources and their features via the /v3/languages/resources endpoint. Results are returned as LanguageResource and ResourceFeature objects; needs_source_support and needs_target_support are False when the API omits them.
  • Added Language constants for the target variants de-CH, de-DE, es-ES, fr-CA, and fr-FR.
  • Added the enable_watermark option to translate_document(), translate_document_upload() and translate_document_from_filepath(). Set it to True to add a "Translated by DeepL" watermark to docx and pdf output.
  • Added the API Pro usage fields to Usage: api_key_character, speech_to_text_minutes and speech_to_speech_minutes (as Optional[Usage.Detail]), start_time and end_time (the billing period), and products, a list of Usage.Product objects with per-product usage. They are None when the response does not contain them; products entries that are not JSON objects are skipped.
  • Added the Spoken Terms API (/v3/spoken-terms) to the DeepLClient class: create_spoken_terms(), list_spoken_terms(), get_spoken_terms(), update_spoken_terms(), get_spoken_terms_entries(), replace_spoken_terms_list(), delete_spoken_terms() and delete_spoken_terms_list(), with the SpokenTerms, SpokenTermsList and SpokenTermsEntries types. create_spoken_terms(), update_spoken_terms() and replace_spoken_terms_list() accept extra_body_parameters. Collection IDs are URL-encoded in the request path, terms are stripped of leading and trailing whitespace before they are validated and sent, and a malformed response raises DeepLException.
  • Added the style profile API (/v3/style_profiles) to the DeepLClient class: list_style_profiles(), create_style_profile(), get_style_profile(), update_style_profile() and delete_style_profile(), with the StyleProfile type. The glossary_ids, style_rule_ids and translation_memory_ids options of create_style_profile() and update_style_profile() accept IDs or GlossaryInfo, MultilingualGlossaryInfo, StyleRuleInfo and TranslationMemoryInfo objects, and both functions accept extra_body_parameters. A style profile response that is not a JSON object, or lacks a valid style_profile_id, name, creation_time or updated_time, raises DeepLException.
  • Added the TagHandlingMode (HTML, XML) and TagHandlingVersion (V1, V2) enums. The tag_handling and tag_handling_version options of translate_text() accept them as well as strings.
  • Added tag_handling_version to TextResult: the tag handling version the API used, or None when the response does not contain it.
  • translate_text() accepts source_lang and target_lang positionally after the text, for example translate_text("Hello", None, "DE"). Keyword use is unchanged; omitting target_lang still raises TypeError.
  • Added the document_id property to DocumentStatus, read from the status response of translate_document_get_status() (falling back to the handle's document ID).
  • translate_document(), translate_document_from_filepath() and translate_document_upload() now also accept source_lang and target_lang as positional arguments after the input (and output) arguments, for example translate_document_upload(file, "EN", "DE"). Keyword use is unchanged.
  • Added the writing_style and extra_body_parameters options to rephrase_text(), and the extra_body_parameters option to correct_text(). writing_style and tone accept a WritingStyle or WritingTone member or a string.
  • Added update_multilingual_glossary() to the DeepLClient class to rename a multilingual glossary and/or merge dictionaries into it in one request, sending only the options that are set.
  • Added get_multilingual_glossary_dictionary_entries() to the DeepLClient class, returning the MultilingualGlossaryDictionaryEntries of one dictionary and raising GlossaryNotFoundException if the glossary has none for the language pair.
  • Added the extra_body_parameters option to create_multilingual_glossary(), create_multilingual_glossary_from_csv(), update_multilingual_glossary_name(), update_multilingual_glossary_dictionary(), update_multilingual_glossary_dictionary_from_csv(), replace_multilingual_glossary_dictionary() and replace_multilingual_glossary_dictionary_from_csv().
  • get_multilingual_glossary() accepts a MultilingualGlossaryInfo object, as glossary, besides a glossary ID.
  • Added the argument names dictionaries (create_multilingual_glossary()), dictionary (update_multilingual_glossary_dictionary(), replace_multilingual_glossary_dictionary()), csv (the *_multilingual_glossary*_from_csv() functions) and glossary (get_multilingual_glossary()).
  • MultilingualGlossaryInfo, MultilingualGlossaryDictionaryInfo and MultilingualGlossaryDictionaryEntries are exported from the deepl package.
  • Added MultilingualGlossaryDictionaryInfo.to_json().
  • Added the content_type and extra_body_parameters options to import_translation_memory_from_filepath(), and the extra_body_parameters option to create_translation_memory_import(). content_type is declared when creating the import job and sent with the upload; extra body parameters are added to the request that creates the import job and replace keys of the same name.
  • Added the TranslationMemoryJobStatus enum. TranslationMemoryJob.status and TranslationMemoryJobResult.status now return its members for the statuses awaiting_input, processing, completed, failed and expired, and the plain string for any other value. Members are strings that compare equal to the API value, so existing comparisons with strings and the TranslationMemoryJobResult.STATUS_* constants keep working.
  • Added the content parameter name to upload_translation_memory_file() for the file content, replacing input_file. Positional calls are unaffected.
  • DocumentTranslationException accepts should_retry and http_status_code. translate_document() and translate_document_from_filepath() copy both from the underlying DeepLException; before they were always False and None.

Changed

  • With timeout_s, wait_until_translation_memory_job_done() now cuts its last sleep short; previously it could run up to 5 seconds past the timeout.
  • import_translation_memory_from_filepath() now reads the file and export_translation_memory_to_filepath() now checks the output path before creating the job, so these OSErrors are raised without creating a job; previously the job was created first.
  • translate_text() now accepts glossary and glossary_ids without source_lang, and DeepL uses the glossary dictionary for the detected language pair; previously it raised ValueError. Document translation with a glossary still requires source_lang.
  • A path in server_url is now kept; previously the last path segment was dropped.
  • HTTP 401 responses now raise AuthorizationException; previously DeepLException.
  • Creating a Translator now emits a DeprecationWarning; previously it did not.
  • HTTP 404 responses raise NotFoundException instead of DeepLException (glossary functions keep raising GlossaryNotFoundException, now a subclass of NotFoundException).
  • The User-Agent platform information now ends with python/<version>; previously it also included the requests version.
  • Target languages EN and PT are now sent to the API, which translates them into EN-US and PT-PT; previously they were rejected client-side.
  • get_source_languages(), get_target_languages(), and get_glossary_languages() now use the /v3/languages endpoint internally instead of the deprecated /v2/languages and /v2/glossary-language-pairs endpoints. Public signatures and return types are unchanged, but the returned language lists may now include additional languages.
  • The default chunk_size of translate_document_download() and download_translation_memory_export() is now 64 KiB instead of 1 byte, so downloads into output_file no longer write one byte per call. The written content is unchanged; an explicit chunk_size still applies.
  • DocumentStatus.status is now typed Union[DocumentStatus.Status, str]: a status value the API returns that this version does not know is kept as a string instead of raising ValueError. Type-checked code that reads status.status.value may need an isinstance(..., DocumentStatus.Status) guard; str(status) returns the status string in both cases.

Deprecated

  • Translator is deprecated in favour of DeepLClient, which supports all its functions, and will be removed in the next major version.
  • GlossaryNotFoundException is deprecated, catch NotFoundException instead. It will be removed in the next major version.
  • auth_key_is_free_account() is deprecated, use is_free_account_auth_key(). Calling it emits a DeprecationWarning.
  • The module-level setting deepl.http_client.user_agent is deprecated in favour of a User-Agent entry in the headers option, and will be removed in the next major version. Assigning it emits a DeprecationWarning.
  • Calling translate_document_download() or download_translation_memory_export() without output_file now emits a DeprecationWarning. It still returns the streaming requests.Response; in the next major version output_file will be required and both methods will return None.
  • Passing skip_language_check to Translator() or DeepLClient(), or skip_cache to get_source_languages() or get_target_languages(), now emits a DeprecationWarning. Both parameters have no effect and will be removed in the next major version. Their defaults changed from False to None; passing False explicitly also warns.
  • The module-level settings deepl.http_client.max_network_retries and deepl.http_client.min_connection_timeout are deprecated in favour of the max_retries and timeout_s client options, and will be removed in the next major version. They still apply to clients created without these options. Assigning either setting emits a DeprecationWarning.
  • The language code constants of Language (Language.GERMAN, Language.ENGLISH_AMERICAN, ...) are deprecated and will be removed in the next major version. Pass language codes as strings, for example "de", or use the codes returned by get_source_languages() and get_target_languages(). The constants keep working and emit no warning.
  • The style keyword of rephrase_text() is deprecated in favour of writing_style and emits a DeprecationWarning. It keeps working; if both are given, writing_style is used.
  • get_multilingual_glossary_entries() is deprecated, use get_multilingual_glossary_dictionary_entries().
  • The argument names glossary_dicts, glossary_dict, csv_data and glossary_id of the multilingual glossary functions are deprecated, use dictionaries, dictionary, csv and glossary.
  • The input_file keyword of upload_translation_memory_file() is deprecated in favour of content and will be removed in the next major version. Passing it emits a DeprecationWarning.
  • SplitSentences.DEFAULT is deprecated, use SplitSentences.ALL, which it is an alias of.
  • translate_text_with_glossary() is deprecated, use translate_text() with the glossary parameter. Calling it emits a DeprecationWarning.

Fixed

  • A glossary CSV row without a target term now raises a ValueError naming the row; previously a bare IndexError (it is still an IndexError).
  • A connection that is reset or breaks off while a non-streamed response body is read is now retried like other connection failures, and raises ConnectionException with should_retry True once retries are used up. create_developer_key() is still not retried after it.
  • translate_document_download() now streams the translated document to output_file in chunks, instead of first reading the whole document into memory for the debug log.
  • A connection reset or timeout while translate_document_download() or download_translation_memory_export() reads the downloaded file now raises ConnectionException, instead of a requests exception.
  • HTTP 3xx responses that are not followed as redirects (e.g. 300, 304, or a redirect without Location) now raise DeepLException with http_status_code, instead of being parsed as a successful response.
  • TLS and certificate failures, and proxy failures (including a failure to connect to the proxy), are no longer retried and raise ConnectionException with should_retry False.
  • Query string values encode a space as %20 instead of +.
  • Fixed errors from the pre-signed translation memory upload and download URLs reporting should_retry as false for HTTP 429 and 5xx, and dropping the response body of a failed download from the message.
  • A failed export_translation_memory_to_filepath() no longer leaves a partially written file behind.
  • DeepLException.should_retry is now True for every HTTP 5xx error. It was False for all of them except 503, although they are retried.
  • An error response whose message or detail is not a string (a number, object or null) no longer raises TypeError; the value is included as JSON, null is left out.
  • Leading and trailing whitespace in the authentication key is removed before it is sent and before the :fx check that selects the API Free server. A key of only whitespace is rejected with ValueError.
  • Fixed translate_text() raising TypeError when a translation in the response has no billed_characters. TextResult.billed_characters is now None in that case.
  • Fixed translate_text() raising IndexError when the response holds fewer translations than texts sent. It now raises DeepLException.
  • Fixed translate_document_get_status() raising ValueError and translate_document_wait_until_done() stopping when the API returns a document status this version does not know. DocumentStatus.status keeps such a status as a string, and polling continues.
  • Fixed translate_document() and translate_document_from_filepath() sending formality=default when formality was not set. It is now sent only when given.
  • Fixed translate_document_get_status() and translate_document_download() not URL-encoding the document ID in the request path.
  • Fixed translate_document_upload() returning an empty DocumentHandle when the response lacks document_id or document_key, and raising AttributeError when the response body is not a JSON object. Both now raise DeepLException.
  • Fixed the type annotation of DocumentStatus.error_message, which is a string, not an integer.
  • Fixed the style rule functions inserting the style rule ID and custom instruction ID into the request path without escaping them, so an ID containing /, ? or # addressed a different resource.
  • Fixed the style rule functions raising a raw KeyError, ValueError, TypeError or AttributeError on a malformed StyleRuleInfo or CustomInstruction response. They now raise DeepLException.
  • Fixed the DeprecationWarning messages of Usage.Detail.limit_exceeded and Usage.any_limit_exceeded, which named the replacement instead of the deprecated property. They now read "limit_exceeded is deprecated, use limit_reached" and "any_limit_exceeded is deprecated, use any_limit_reached".
  • Fixed the Language.ENGLISH and Language.PORTUGUESE comments that claimed they are only usable as source languages.
  • Fixed create_glossary_from_csv() failing with "Object of type bytes is not JSON serializable" when the CSV data is given as bytes or as a file opened in binary mode.
  • Fixed the rephrase CLI command always failing with an unexpected keyword argument error. --show-detected-source now prints the detected source language of each text.
  • Fixed the translate CLI alias of the text command failing with 'action_translate'.
  • Fixed the extra_body_parameters documentation, which claimed that entries do not overwrite request fields set by the library. They do, since 1.24.0.
  • Fixed MultilingualGlossaryInfo.to_json() raising TypeError when called on an instance.
  • Fixed rephrase_text() and correct_text() failing with "Object of type ... is not JSON serializable" when target_lang is a Language object or the style or tone is a WritingStyle or WritingTone member. The value is now sent as its string code.
  • rephrase_text() and correct_text() now raise DeepLException when the response has no improvements list, fewer improvements than input texts, or an improvement without text. Before, this raised IndexError or AttributeError, or silently returned a shorter list.
  • get_source_languages() and get_target_languages() now raise DeepLException when the response is not a list (they returned an empty list before) or a language in it is missing its code or name (instead of a raw KeyError, AttributeError or TypeError). A null features field is treated as no features.
  • Glossary IDs are URL-encoded in /v3/glossaries request paths, and the language pair in the query of get_multilingual_glossary_entries() and delete_multilingual_glossary_dictionary() is URL-encoded. delete_multilingual_glossary_dictionary() now also strips regional variants (EN-GB becomes EN), like the other multilingual glossary functions.
  • A malformed multilingual glossary response raises DeepLException instead of a raw KeyError, TypeError or ValueError.
  • MultilingualGlossaryInfo.to_json() returns a JSON-serialisable dictionary: creation_time as an ISO 8601 string and dictionaries as dictionaries.
  • Fixed the translation memory functions sending translation memory and job IDs unencoded in the request path. IDs are now URL-encoded, so characters such as /, ? or spaces no longer change the requested URL.
  • Fixed the translation memory functions raising a raw KeyError, TypeError or AttributeError when the API returns a malformed response. They now raise DeepLException. list_translation_memories() also raises DeepLException for a non-JSON response instead of returning an empty list.
  • Fixed get_usage() returning a Usage with every value invalid when the response body is not a JSON object. It now raises DeepLException.
  • translate_document_download() now raises errors with the API's error message. Before, a 400, 404 or 456 response raised without it, and other statuses reported content: <file>.
  • translate_document_wait_until_done() (and translate_document() with timeout_s) shortens its last wait to the timeout, so it no longer runs up to 5 seconds past timeout_s.

1.32.0 - 2026-08-12

Added

  • Added correct_text() method to the DeepLClient class for fixing spelling and grammar errors in text(s) via the /v2/write/correct endpoint.

1.31.0 - 2026-08-11

Added

  • Added support for using multiple glossaries via the glossary_ids parameter (up to 5 glossaries) in translate_text(), translate_document(), translate_document_upload(), and translate_document_from_filepath().
  • Added support for style rules in document translation via the style_rule parameter in translate_document(), translate_document_upload(), and translate_document_from_filepath().
  • Added support for translation memories in document translation via the translation_memory and translation_memory_threshold parameters in translate_document(), translate_document_upload(), and translate_document_from_filepath().
  • Added --glossary-ids CLI argument for the text and document commands, allowing up to 5 glossaries to be used per translation.
  • Added --style-id, --translation-memory-id, and --translation-memory-threshold CLI arguments to the document command.
  • Added support for the translation memory management APIs: get_translation_memory(), list_translation_memory_segments(), delete_translation_memory(), create_translation_memory_import(), upload_translation_memory_file(), create_translation_memory_export(), get_translation_memory_job(), wait_until_translation_memory_job_done(), and download_translation_memory_export(), along with the import_translation_memory_from_filepath() and export_translation_memory_to_filepath() convenience functions that create the job, transfer the TMX file, and wait for the job to finish. Because the API detects the file upload asynchronously, an import job keeps reporting awaiting_input for a while after the upload; the wait loop polls through that status, so pass timeout_s to bound the wait.
  • Added the TranslationMemorySegments, TranslationMemorySegment, TranslationMemoryTargetSegment, TranslationMemoryImport, TranslationMemoryExport, TranslationMemoryJob, and TranslationMemoryJobResult types.
  • Added creation_time and updated_time properties to TranslationMemoryInfo.
  • Added the translation-memory CLI command with the list, get, segments, import, export, job, and delete subcommands.

1.30.0 - 2026-04-09

Added

  • Added support for translation memories in text translation via translation_memory and translation_memory_threshold parameters in translate_text().
  • Added list_translation_memories() method to the DeepLClient class for listing available translation memories.
  • Added --translation-memory-id and --translation-memory-threshold CLI arguments.

Fixed

  • Fixed "gitlab release" CI job to explicitly set the release-cli image, avoiding issues with missing $HOME from the global image.

1.29.0 - 2026-03-26

Added

  • Added new language constants from January 2026 API release of 81 new languages.
  • Added support for style rules CRUD endpoints in the DeepLClient class: create_style_rule(), get_style_rule(), update_style_rule_name(), update_style_rule_configured_rules(), and delete_style_rule().
  • Added support for style rule custom instruction CRUD endpoints in the DeepLClient class: create_style_rule_custom_instruction(), get_style_rule_custom_instruction(), update_style_rule_custom_instruction(), and delete_style_rule_custom_instruction(). Please refer to the README for usage instructions.

Changed

  • Updated formality tests to accept either formal or informal output when using default formality, since the default formality is automatic.

1.28.0 - 2026-02-05

Changed

  • Updated three tests to be less flakey and reflect new behavior regarding the model type.
  • Improved NotFoundException error message by removing the misleading "check server_url" suggestion.

Fixed

  • Fixed a bug where translating with style rules would sometimes incorrectly result in a "target_lang must match style rule language" error

Security

  • Updated dependencies to fix CVE-2025-66418 and CVE-2025-66471

1.27.0 - 2025-12-10

Added

  • Added tag_handling_version parameter to translate_text() to specify which version of the tag handling algorithm to use. Options are v1 and v2.
  • Added an example CLI script for realtime audio translation using DeepL's Voice API.

1.26.0 - 2025-12-03

Added

  • Added custom_instructions parameter to translate_text() to customize translation behavior with up to 10 instructions (max 300 characters each). Only supported for target languages: de, en, es, fr, it, ja, ko, zh and their variants. Note: using the custom_instructions parameter will use the quality_optimized model type as the default. Requests combining custom_instructions and the latency_optimized model type will be rejected.

Fixed

  • Fixed the cleanup of multilingual glossaries in the test suite where glossaries were not properly deleted after the test execution

1.25.0 - 2025-11-12

Added

  • Added support for the GET /v3/style_rules endpoint in the client library, the implementation can be found in the DeepLClient class. Please refer to the README for usage instructions
  • Added style_id option to translate_text() which allows text translation with style rules.

1.24.0 - 2025-11-04

Changed

  • extra_body_parameters will now overwrite already set HTTP parameters

1.23.0 - 2025-09-30

Added

  • Added feature to add arbitrary body parameters in translate_text

Deprecated

  • Dropped support for Python 3.8 and older.

Security

  • Updated requests minimum version to 2.32.4 to resolve security advisories CVE-2024-47081 and CVE-2024-35195.

1.22.0 - 2025-04-30

Added

  • Added support for the /v3 Glossary APIs in the client library while providing backwards compatability for the previous /v2 Glossary endpoints. Please refer to the README for usage instructions.

1.21.1 - 2025-03-12

Added

  • (beta) optional parameter to specify timeout for document translation calls

1.21.0 - 2025-01-15

Added

  • Added support for the Write API in the client library, the implementation can be found in the DeepLClient class. Please refer to the README for usage instructions.

Changed

  • The main functionality of the library is now also exposed via the DeepLClient class. Please change your code to use this over the Translator class whenever convenient.

1.20.0 - 2024-11-15

Added

  • Added model_type option to translate_text() to use models with higher translation quality (available for some language pairs), or better latency. Options are 'quality_optimized', 'latency_optimized', and 'prefer_quality_optimized'
  • Added the model_type_used field to translate_text() response, that indicates the translation model used when the model_type option is specified.

1.19.1 - 2024-09-17

Fixed

  • Fixed typing issues, black-formatting and a test case failure.

1.19.0 - 2024-09-17

Added

  • Added billed_characters to response from translate_text().

1.18.0 - 2024-04-26

Added

  • New language available: Arabic ('ar'). Add language code constants and tests. Arabic is currently supported only for text translation; document translation support for Arabic is coming soon.

    Note: older library versions also support the new language, this update only adds new code constants.

  • Added a section in the readme on how to configure retry options in http_client.py

1.17.0 - 2024-02-06

Added

  • Added output_format parameter for document upload function, that indicates the file extension of the desired file format for the translated document.
  • Added basic usage example of the library

Fixed

  • Fixed typechecking errors when using mypy's strict mode

1.16.1 - 2023-11-07

Fixed

  • Fixed typo in error message when no auth key is provided.
  • Removed dependency on packaging by replacing version comparison.

1.16.0 - 2023-11-03

Added

  • Add optional context parameter for text translation, that specifies additional context to influence translations, that is not translated itself.

Changed

  • Added notice in Readme that starting in 2024 the library will drop support for Python versions that are officially end-of-life.
  • DeepL API calls now send requests with JSON-encoded bodies where possible.

Fixed

  • Catch failures while constructing the user agent string.
  • Added py.typed to the package so that our package is typed for our users.
  • Fixed most type errors in the package.

1.15.0 - 2023-06-09

Fixed

  • Removed CHANGELOG.md and SECURITY.md from the python package. The LICENSE file is no longer installed, but still included in package tarball and wheel files.
  • Fix a dependency error in our CI by updating to a higher poetry version in most cases.
  • Fix getUsage request to be a HTTP GET request, not POST.
  • Change document translation to poll the server every 5 seconds. This should greatly reduce observed document translation processing time.

1.14.0 - 2023-02-21

Added

  • Add example to translate JSON inputs.
  • Added platform and python version information to the user-agent string that is sent with API calls, along with an opt-out.
  • Added method for applications that use this library to identify themselves in API requests they make.
  • Added verify_ssl option to Translator to control underlying requests session.

1.13.0 - 2023-01-26

Added

  • Add example script to translate Mustache templates.

  • Add support for storing your API Key in a keyring via the keyring module.

  • Added a CI check for copyright headers.

  • New languages available: Korean ('ko') and Norwegian (bokmål) ('nb'). Add language code constants and tests.

    Note: older library versions also support the new languages, this update only adds new code constants.

Fixed

  • Copyright headers are updated for 2023

Security

  • Update certifi to resolve security advisory.
    • certifi is a development-only dependency; library users are unaffected.

1.12.0 - 2023-01-09

Added

  • State explicitly that this library supports Python 3.11.
  • Added the should_retry and http_status_code properties to all exceptions thrown by the library.

Fixed

  • Fix py dependency by upgrading pytest version to 7.2.0 for Python 3.7+. For Python 3.6 tests pytest needs to be added manually.
  • Remove unused tox dependency.
  • Update coverage dependency.
  • Also send options in API requests even if they are default values.

1.11.0 - 2022-09-26

Added

  • Add formality options PREFER_LESS and PREFER_MORE.

Changed

  • Requests resulting in 503 Service Unavailable errors are now retried. Attempting to download a document before translation is completed will now wait and retry (up to 5 times by default), rather than raising an exception.

1.10.0 - 2022-09-09

Added

  • New language available: Ukrainian ('uk'). Add language code constant and tests.

    Note: older library versions also support new languages, this update only adds new code constant.

Changed

  • Add note and workaround to README about Poetry error on Ubuntu 22.04.

1.9.0 - 2022-07-07

Added

  • Add Translator.create_glossary_from_csv() allowing glossaries downloaded from website to be easily uploaded to API.

1.8.0 - 2022-06-10

Added

  • Optional filename parameter added to Translator.translate_document(), only required if uploading string or bytes containing file content.

Changed

  • Update contributing guidelines, we can now accept Pull Requests.

Fixed

  • Fix GitLab CI config.

1.7.0 - 2022-05-18

Added

  • New languages available: Indonesian ('id') and Turkish ('tr'). Add language code constants and tests.

    Note: older library versions also support the new languages, this update only adds new code constants.

  • Add limit_reached and any_limit_reached properties to Usage object returned by get_usage().

  • Add Translator.translate_document_wait_until_done() to poll translation status until translation is complete or fails.

  • Add auth_key_is_free_account() utility function.

Changed

  • Improve readme usage examples.

Deprecated

  • Deprecate limit_exceeded and any_limit_exceeded properties of Usage object returned by get_usage(), use limit_reached and any_limit_reached instead.

1.6.0 - 2022-04-12

Added

  • Add error_message property to DocumentStatus, describing the error in case of document translation failure.

Changed

  • Improve error message if translate_text_with_glossary is called without an instance of GlossaryInfo.
  • translate_document and translate_document_from_filepath return final DocumentStatus, allowing the number of billed characters to be queried.

1.5.1 - 2022-04-11

Fixed

  • Fix bug in CLI languages command causing some target languages to be omitted.
  • Fix some tests that intermittently failed.

1.5.0 - 2022-02-28

Added

  • Add support for HTML tag handling in translate_text().

Deprecated

  • DocumentTranslationException.document_request is deprecated, use document_handle instead.

1.4.1 - 2022-02-04

Fixed

  • Fix bug in DocumentTranslationException stringize function.

1.4.0 - 2022-01-19

Added

  • Add contribution guidelines -- currently we are unable to accept Pull Requests.
  • Add --glossary-id argument for CLI document command.

Changed

  • Improve README.
  • Raise DocumentNotReadyException when attempting to download a document before it has been translated. Previously the base class DeepLException was thrown.

Fixed

  • Add optional filename argument to translate_document_upload() to fix uploading file content as string or bytes.

1.3.1 - 2021-11-15

Changed

  • Limit document status update wait time to 60 seconds, and log wait times.

1.3.0 - 2021-11-15

Note: the PyPI package for 1.3.0 included changes from 1.3.1, so it has been yanked.

Added

  • Add glossary support for document translation.
  • Add proxy support.

Fixed

  • Fix issues with parallelized tests by changing how test glossaries are created and deleted.

1.2.1 - 2021-10-19

Added

  • Add support for Python 3.10.

Fixed

  • Fix bug that caused User-Agent header to be omitted from HTTP requests.
  • Fix glossary name prefix used in unit-tests to match git repository name.
  • Add workaround for possible issue in datetime.strptime in Python 3.6.

1.2.0 - 2021-10-07

Added

  • Add Translator.get_glossary_languages() to query language pairs supported for glossaries.
  • Add constants for all supported languages codes, for example: Language.GERMAN.

Changed

  • Internal language caching and client-side checking of language codes are removed.

Deprecated

  • Some optional arguments related to language caching are now deprecated, and will be removed in a future version:
    • Translator(): the skip_language_check argument
    • Translator.get_source_languages() and Translator.get_target_languages(): the skip_cache argument

Fixed

  • Fix HTTP request retries for document uploads.

1.1.3 - 2021-09-27

Changed

  • Loosen requirement for requests to 2.0 or higher.

1.1.2 - 2021-09-21

Changed

  • Improve request exception messages and include exception stacktraces.
  • Update unit tests for server error message changes.

1.1.1 - 2021-09-13

Fixed

  • Fix typing.List issue on Python 3.6.
  • Add workaround for datetime.strptime bug in Python 3.6.

1.1.0 - 2021-09-13

Added

  • Add security policy.
  • Add support for glossary API functions.

Fixed

  • README and comments improvements, type hints and other minor fixes.

1.0.1 - 2021-08-13

Added

  • Add explicit copyright notice to all source files.

Fixed

  • Force response encoding to UTF-8 to avoid issues with older versions of requests package.

1.0.0 - 2021-08-12

Changed

  • All API calls use Authorization header instead of auth_key parameter.

0.4.1 - 2021-08-10

Changed

  • Minor updates to pyproject.toml and README.md.

0.4.0 - 2021-08-05

Version increased to avoid conflicts with old packages on PyPI.

0.3.0 - 2021-08-05

Added

  • Package uploaded to PyPI. Thanks to Adrian Freund for transferring the deepl package name.
  • Clarify minimum version of requests module to 2.18.

0.2.0 - 2021-07-28

Changed

  • Improve exception hierarchy.
  • Translator() server_url argument works with and without trailing slash.
  • Translator.translate_text() accepts a single text argument, which may be a list or other iterable.

Fixed

  • Fix examples in readme to match function interface changes.

0.1.0 - 2021-07-26

Initial version.