From 260e4cc7df602024590381db37d11f258321dfbd Mon Sep 17 00:00:00 2001 From: Willem Adnet Date: Mon, 30 Dec 2024 12:49:32 +0100 Subject: [PATCH 1/9] feat: adding the possibility to choose on wich language you want to display informations this is just a first version that is not yet efficient and must be implemented to be more efficient --- commitizen/cli.py | 6 ++ .../.cache_multilanguage.txt | 12 +++ .../conventional_commits.py | 85 +++++++++++++------ .../translation_multilanguage.py | 45 ++++++++++ 4 files changed, 122 insertions(+), 26 deletions(-) create mode 100644 commitizen/cz/conventional_commits/.cache_multilanguage.txt create mode 100644 commitizen/cz/conventional_commits/translation_multilanguage.py diff --git a/commitizen/cli.py b/commitizen/cli.py index 2ee7d41eba..4139ff1776 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -108,6 +108,12 @@ def __call__( "required": False, "help": "comma separated error codes that won't rise error, e.g: cz -nr 1,2,3 bump. See codes at https://commitizen-tools.github.io/commitizen/exit_codes/", }, + { + "name": ["-language"], + "type": str, + "default": "en", + "help": "language of the commit message (default: en). Available languages: enGLISH, frENCH. others are welcome", + }, ], "subcommands": { "title": "commands", diff --git a/commitizen/cz/conventional_commits/.cache_multilanguage.txt b/commitizen/cz/conventional_commits/.cache_multilanguage.txt new file mode 100644 index 0000000000..e896e46fe6 --- /dev/null +++ b/commitizen/cz/conventional_commits/.cache_multilanguage.txt @@ -0,0 +1,12 @@ +prefix_en=Select the type of change you are committing +fix_en=A bug fix. Correlates with PATCH in SemVer +feat_en=A new feature. Correlates with MINOR in SemVer +docs_en=Documentation only changes +style_en=Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc) +refactor_en=A code change that neither fixes a bug nor adds a feature +perf_en=A code change that improves performance +test_en=Adding missing or correcting existing tests +build_en=Changes that affect the build system or external dependencies (example scopes: pip, docker, npm) +ci_en=Changes to CI configuration files and scripts (example scopes: GitLabCI) +scope_en=What is the scope of this change? (class or file name): (press [enter] to skip) +subject_en=Write a short and imperative summary of the code changes: (lower case and no period) diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index dcfd7bab89..5061ad7c9a 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -3,6 +3,9 @@ from commitizen import defaults from commitizen.cz.base import BaseCommitizen +from commitizen.cz.conventional_commits.translation_multilanguage import ( + translate_text_from_eng, +) from commitizen.cz.utils import multiple_line_breaker, required_validator from commitizen.defaults import Questions @@ -40,70 +43,98 @@ class ConventionalCommitsCz(BaseCommitizen): } changelog_pattern = defaults.bump_pattern - def questions(self) -> Questions: + def questions(self, language: str) -> Questions: questions: Questions = [ { "type": "list", "name": "prefix", - "message": "Select the type of change you are committing", + "message": translate_text_from_eng( + "Select the type of change you are committing", language, "prefix" + ), "choices": [ { "value": "fix", - "name": "fix: A bug fix. Correlates with PATCH in SemVer", + "name": "fix: " + + translate_text_from_eng( + "A bug fix. Correlates with PATCH in SemVer", + language, + "fix", + ), "key": "x", }, { "value": "feat", - "name": "feat: A new feature. Correlates with MINOR in SemVer", + "name": "feat: " + + translate_text_from_eng( + "A new feature. Correlates with MINOR in SemVer", + language, + "feat", + ), "key": "f", }, { "value": "docs", - "name": "docs: Documentation only changes", + "name": "docs: " + + translate_text_from_eng( + "Documentation only changes", language, "docs" + ), "key": "d", }, { "value": "style", - "name": ( - "style: Changes that do not affect the " - "meaning of the code (white-space, formatting," - " missing semi-colons, etc)" + "name": "style: " + + translate_text_from_eng( + """Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)""", + language, + "style", ), "key": "s", }, { "value": "refactor", - "name": ( - "refactor: A code change that neither fixes " - "a bug nor adds a feature" + "name": "refactor: " + + translate_text_from_eng( + """A code change that neither fixes a bug nor adds a feature""", + language, + "refactor", ), "key": "r", }, { "value": "perf", - "name": "perf: A code change that improves performance", + "name": "perf: " + + translate_text_from_eng( + "A code change that improves performance", language, "perf" + ), "key": "p", }, { "value": "test", - "name": ( - "test: Adding missing or correcting " "existing tests" + "name": "test: " + + translate_text_from_eng( + "Adding missing or correcting existing tests", + language, + "test", ), "key": "t", }, { "value": "build", - "name": ( - "build: Changes that affect the build system or " - "external dependencies (example scopes: pip, docker, npm)" + "name": "build: " + + translate_text_from_eng( + """Changes that affect the build system or external dependencies (example scopes: pip, docker, npm)""", + language, + "build", ), "key": "b", }, { "value": "ci", - "name": ( - "ci: Changes to CI configuration files and " - "scripts (example scopes: GitLabCI)" + "name": "ci: " + + translate_text_from_eng( + """Changes to CI configuration files and scripts (example scopes: GitLabCI)""", + language, + "ci", ), "key": "c", }, @@ -112,8 +143,10 @@ def questions(self) -> Questions: { "type": "input", "name": "scope", - "message": ( - "What is the scope of this change? (class or file name): (press [enter] to skip)\n" + "message": translate_text_from_eng( + "What is the scope of this change? (class or file name): (press [enter] to skip)\n", + language, + "scope", ), "filter": parse_scope, }, @@ -121,9 +154,9 @@ def questions(self) -> Questions: "type": "input", "name": "subject", "filter": parse_subject, - "message": ( - "Write a short and imperative summary of the code changes: (lower case and no period)\n" - ), + "message": translate_text_from_eng( + "Write a short and imperative summary of the code changes: (lower case and no period)\n", + language, "subject"), }, { "type": "input", diff --git a/commitizen/cz/conventional_commits/translation_multilanguage.py b/commitizen/cz/conventional_commits/translation_multilanguage.py new file mode 100644 index 0000000000..4b1fc521de --- /dev/null +++ b/commitizen/cz/conventional_commits/translation_multilanguage.py @@ -0,0 +1,45 @@ +from translate import Translator + +FILENAME = "commitizen/cz/conventional_commits/.cache_multilanguage.txt" +MULTILANGUAGE = {} + + +def load_multilanguage(): + global MULTILANGUAGE + MULTILANGUAGE = {} + with open(FILENAME) as file: + for line in file: + if not line.strip(): + continue + key, value = line.strip().split("=", 1) + MULTILANGUAGE[key] = value + +def generate_key(original_key, to_lang): + return f"{original_key}_{to_lang}" + +def save_multilanguage(key, value): + if "\n" in value: + value = value.replace("\n", "") + with open(FILENAME, "a") as file: + file.write(f"{key}={value}\n") + +def translate_text(text, from_lang, to_lang): + translator = Translator(from_lang=from_lang, to_lang=to_lang) + translation = translator.translate(text) + return translation + +def translate_text_from_eng(text, to_lang, key): + global MULTILANGUAGE + key_generated = generate_key(key, to_lang) + if not MULTILANGUAGE: + load_multilanguage() + if key_generated in MULTILANGUAGE: + return MULTILANGUAGE[key_generated] + else: + if to_lang == "en": + MULTILANGUAGE[key_generated] = text + save_multilanguage(key_generated, MULTILANGUAGE[key_generated]) + return text + MULTILANGUAGE[key_generated] = translate_text(text, "en", to_lang) + save_multilanguage(key_generated, MULTILANGUAGE[key_generated]) + return MULTILANGUAGE[key_generated] From 4c9fb24024ed92d012ca1703d2a294bf56a0195b Mon Sep 17 00:00:00 2001 From: Willem Adnet Date: Tue, 31 Dec 2024 11:44:41 +0100 Subject: [PATCH 2/9] fix: giving the opportunity to choose on wich language you want to see informations --- .pre-commit-config.yaml | 1 + commitizen/commands/commit.py | 2 +- .../.cache_multilanguage.txt | 135 +++++++++++++ .../conventional_commits.py | 22 ++- .../translation_multilanguage.py | 22 ++- poetry.lock | 184 +++++++++++++++++- pyproject.toml | 1 + 7 files changed, 356 insertions(+), 11 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 986b63f875..f8c5890b3d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,6 +47,7 @@ repos: args: [ "--write-changes" ] additional_dependencies: - tomli + exclude: "commitizen/cz/conventional_commits/\\.cache_multilanguage\\.txt" - repo: https://github.com/commitizen-tools/commitizen rev: v4.1.0 # automatically updated by Commitizen diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index abecb3b3ca..501668ca80 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -51,7 +51,7 @@ def read_backup_message(self) -> str | None: def prompt_commit_questions(self) -> str: # Prompt user for the commit message cz = self.cz - questions = cz.questions() + questions = cz.questions(self.arguments["language"]) for question in filter(lambda q: q["type"] == "list", questions): question["use_shortcuts"] = self.config.settings["use_shortcuts"] try: diff --git a/commitizen/cz/conventional_commits/.cache_multilanguage.txt b/commitizen/cz/conventional_commits/.cache_multilanguage.txt index e896e46fe6..fc2a1cb210 100644 --- a/commitizen/cz/conventional_commits/.cache_multilanguage.txt +++ b/commitizen/cz/conventional_commits/.cache_multilanguage.txt @@ -10,3 +10,138 @@ build_en=Changes that affect the build system or external dependencies (example ci_en=Changes to CI configuration files and scripts (example scopes: GitLabCI) scope_en=What is the scope of this change? (class or file name): (press [enter] to skip) subject_en=Write a short and imperative summary of the code changes: (lower case and no period) +prefix_fr=Sélectionnez le type de changement que vous engagez +fix_fr=Une correction de bogue. Corrèle avec LE CORRECTIF dans SemVer +feat_fr=Une nouvelle fonctionnalité. Corréle avec MINEUR dans SemVer +docs_fr=Modifications de la documentation uniquement +style_fr=Modifications qui n'affectent pas la signification du code (escape blanc, mise en forme, points-virgules manquants, etc.) +refactor_fr=Un changement de code qui ne corrige pas un bogue ni n'ajoute une fonctionnalité +perf_fr=Un changement de code qui améliore les performances +test_fr=Ajout de tests manquants ou correction de tests existants +build_fr=Modifications affectant le système de génération ou les dépendances externes (par example, étendues : pip, docker, npm) +ci_fr=Modifications apportées aux fichiers et scripts de configuration CI (example de portée : GitLabCI) +scope_fr=Quelle est la portée de ce changement ? (nom de classe ou de fichier) : (appuyez sur [ENTER] pour ignorer) +subject_fr=Rédigez un résumé court et impératif des changements de code : (minuscules et sans point) +body_fr=Fournir des information contextuelles supplémentaires sur les changements de code : (appuyez sur [ENTER] pour ignorer) +is_breaking_change_fr=S'agit-il d'un CHANGEMENT RADICAL ? Corrèle avec la MAJEURE en SemVer +footer_fr=Pied de page. Information sur les modifications de rupture et les problèmes de référence que cette validation ferme : (appuyez sur [ENTER] pour ignorer) +prefix_es=Selecciona el tipo de cambio que estás realizando +fix_es=Una corrección de errores. Se correlaciona con EL PARCHE en SemVer +feat_es=Una nueva función. Se correlaciona con MENOR en SemVer +docs_es=Solo cambios en la documentación +style_es=Cambios que no afectan el significado del código (espacios en blanco, formato, puntos y comas faltantes, etc.) +refactor_es=Un cambio de código que no corrige un error ni añade una característica +perf_es=Un cambio de código que mejora el rendimiento +test_es=Añadiendo pruebas faltantes o corrección de pruebas existentes +build_es=Cambios que afectan al sistema de compilación o dependencias externas (por ejemplo, ámbitos: pip, docker, npm) +ci_es=Cambios en los archivos de configuración y scripts de CI (ámbitos de ejemplo: GitLabCI) +scope_es=¿Cuál es el alcance de este cambio? (nombre de clase o archivo): (pulse [enter] para omitir) +subject_es=Escriba un resumen breve e imperativo de los cambios en el código: (minúsculas y sin punto) +body_es=Proporcione información contextual adicional sobre los cambios en el código: (pulse [enter] para omitir) +is_breaking_change_es=¿Es este un CAMBIO RADICAL? Se correlaciona con la ESPECIALIZACIÓN en SemVer +footer_es=Pie de página. Información sobre los cambios de última hora y los problemas de referencia que este compromiso cierra: (presione [enter] para omitir) +prefix_de=Wählen Sie die Art der Änderung aus, die Sie vornehmen +fix_de=Ein Bugfix. Korreliert mit PATCH in SemVer +feat_de=Ein neues Feature. Korreliert mit MINOR in SemVer +docs_de=Dokumentation nur Änderungen +style_de=Änderungen, die die Bedeutung des Codes nicht beeinflussen (Leerzeichen, Formatierung, fehlende Semikolons usw.) +refactor_de=Eine Codeänderung, die weder einen Fehler behebt noch eine Function hinzufügt +perf_de=Eine Codeänderung, die die Leistung verbessert +test_de=Hinzufügen fehlender oder Korrigieren vorhandener Tests +build_de=Änderungen, die sich auf das Buildsystem oder externe Abhängigkeiten auswirken (Beispielumfänge: Pip, Docker, npm) +ci_de=Änderungen an CI-Konfigurationsdateien und Skripten (Beispielumfänge: GitLabCI) +scope_de=Was ist der Umfang dieser Änderung? (Klassen- oder Dateiname): (Drücken Sie [ENTER], um zu überspringen) +subject_de=Schreiben Sie eine kurze und zwingende Zusammenfassung der Codeänderungen: (Kleinbuchstaben und kein Punkt) +body_de=Geben Sie zusätzliche kontextbezogene Informationen zu den Codeänderungen an: (drücken Sie [ENTER], um zu überspringen) +is_breaking_change_de=Ist das eine BAHNBRECHENDE VERÄNDERUNG? Korreliert mit HAUPTFACH in SemVer +footer_de=Fußzeile. Informationen über Breaking Changes und Referenzprobleme, die mit diesem Commit geschlossen werden: (drücken Sie [ENTER], um zu überspringen) +prefix_zh=选择您要提交的变更类型 +fix_zh=错误修复。与SemVer中的补丁相关 +feat_zh=新功能。与SemVer中的次要功能相关 +docs_zh=仅文档更改 +style_zh=不影响代码含义的更改(空格、格式、缺少分号等) +refactor_zh=既不修复错误也不添加功能的代码更改 +perf_zh=改进性能的代码更改 +test_zh=添加缺失的测试或更正现有测试 +build_zh=影响构建系统或外部依赖项的更改(示例作用域: pip、docker、npm ) +ci_zh=对CI配置文件和脚本的更改(示例范围: GitLabCI ) +scope_zh=此更改的范围是什么? (类或文件名) : (按[ENTER]跳过) +subject_zh=撰写简短而必要的代码更改摘要: (小写且无句点) +body_zh=提供有关代码更改的其他上下文信息: (按[ENTER]跳过) +is_breaking_change_zh=这是一个突破性的变化吗?与SemVer中的专业相关 +footer_zh=页脚。有关此提交关闭的重大更改和引用问题的信息: (按[ENTER]跳过) +prefix_it=Seleziona il tipo di modifica che stai apportando +fix_it=Una correzione di bug. Correla con la PATCH in SemVer +feat_it=Una nuova funzionalità. Correla con MINORE in SemVer +docs_it=Modifiche solo della documentazione +style_it=Modifiche che non influiscono sul significato del codice (spazi bianchi, formattazione, punti e virgola mancanti, ecc.) +refactor_it=Una modifica del codice che non corregge un bug né aggiunge una funzionalità +perf_it=Una modifica del codice che migliora le prestazioni +test_it=Aggiunta di test mancanti o correzione di test esistenti +build_it=Modifiche che interessano il sistema di compilazione o dipendenze esterne (ambiti di esempio: pip, docker, npm) +ci_it=Modifiche ai file e agli script di configurazione CI (ambiti di esempio: GitLabCI) +scope_it=Qual è l'ambito di questa modifica? (classe o gnome file): (premere [enter] per saltare) +subject_it=Scrivi un breve e imperativo riepilogo delle modifiche al codice: (minuscolo e senza punto) +body_it=Fornisci ulteriori informazioni contestuali sulle modifiche al codice: (premi [Invio] per saltare) +is_breaking_change_it=È un CAMBIAMENTO RADICALE? Correla con MAGGIORE in SemVer +footer_it=Piè di pagina. Informazioni sulle Breaking Change e sui problemi di riferimento che questo commit chiude: (premi [invio] per saltare) +prefix_pt=Seleccione o tipo de alteração que está a cometer +fix_pt=Uma correção de bugs. Correlaciona com o PATCH no SemVer +feat_pt=Um novo recurso. Correlaciona com MENOR no SemVer +docs_pt=Apenas alterações na documentação +style_pt=Alterações que não afetam o significado do código (espaço em branco, formatação, ponto e vírgula ausente, etc.) +refactor_pt=Uma alteração de código que não corrige um bug nem adiciona um recurso +perf_pt=Uma mudança de código que melhora o desempenho +test_pt=Adição de testes ausentes ou correção de testes existentes +build_pt=Mudanças que afetam o sistema de compilação ou dependências externas (escopos de exemplo: pip, docker, npm) +ci_pt=Alterações em arquivos e scripts de configuração de CI (escopos de exemplo: GitLabCI) +scope_pt=Qual é o escopo desta alteração? (gnome da classe ou do arquivo): (pressione [ENTER] para pular) +subject_pt=Escreva um resumo curto e imperativo das alterações de código: (minúsculas e sem ponto final) +body_pt=Forneça informações contextuais adicionais sobre as alterações de código: (pressione [ENTER] para pular) +is_breaking_change_pt=Esta é uma MUDANÇA RADICAL? Correlaciona com ESPECIALIZAÇÃO em SemVer +footer_pt=Rodapé. Informações sobre Breaking Changes e problemas de referência que este commit fecha: (pressione [ENTER] para pular) +prefix_ru=Выберите тип изменения, которое вы вносите +fix_ru=Исправление ошибки. Корреляция с ПАТЧЕМ в SemVer +feat_ru=Новая функция. Соотносится с МИНОРОМ в SemVer +docs_ru=Изменения только в документации +style_ru=Изменения, которые не влияют на значение кода (пробелы, форматирование, отсутствующие точки с запятой и т. д.) +refactor_ru=Изменение кода, которое не исправляет ошибку и не добавляет функцию +perf_ru=Изменение кода, повышающее производительность +test_ru=Добавление отсутствующих или исправление существующих тестов +build_ru=Изменения, которые влияют на систему сборки или внешние зависимости (примеры областей: pip, docker, npm) +ci_ru=Изменения в файлах конфигурации и сценариях CI (примеры областей: GitLabCI) +scope_ru=Какова область применения этого изменения? (имя класса или файла): (нажмите [Enter], чтобы пропустить) +subject_ru=Напишите краткое и обязательное резюме изменений кода: (строчные буквы и без точки) +body_ru=Предоставьте дополнительную контекстную информацию об изменениях кода: (нажмите [Enter], чтобы пропустить) +is_breaking_change_ru=Это кардинальное ИЗМЕНЕНИЕ? Коррелирует с МАЙОРОМ в SemVer +footer_ru=Нижний колонтитул. Информация о нарушении изменений и проблемах со ссылками, которые закрывает эта фиксация: (нажмите [Enter], чтобы пропустить) +prefix_ja=コミットする変更の種類を選択してください +fix_ja=バグ修正。SemVerのパッチと関連しています +feat_ja=新機能。SemVerのマイナーと関連します +docs_ja=文書のみの変更 +style_ja=コードの意味に影響を与えない変更(空白、書式設定、セミコロンの欠落など) +refactor_ja=バグを修正したり、機能を追加したりしないコードの変更 +perf_ja=パフォーマンスを向上させるコードの変更 +test_ja=不足しているテストの追加または既存のテストの修正 +build_ja=ビルドシステムまたは外部依存関係に影響する変更(スコープの例: pip、docker、npm) +ci_ja=CI構成ファイルとスクリプトの変更(スコープの例: GitLabCI) +scope_ja=この変更の範囲は何ですか? (クラス名またはファイル名) : ( [ENTER]を押してスキップ) +subject_ja=コード変更の簡潔かつ必須の要約を記入してください: (小文字、ピリオドなし) +body_ja=コードの変更に関する追加のコンテキスト情報を提供します: ( [ENTER]を押してスキップ) +is_breaking_change_ja=これは画期的な変更ですか? SemVerのメジャーと相関する +footer_ja=フッター。このコミットが閉じる重大な変更と参照の問題に関する情報: ( [ENTER]を押してスキップ) +prefix_ko=커밋할 변경 유형 선택 +fix_ko=버그 수정. SemVer의 패치와 상관 관계 +feat_ko=새로운 기능입니다. SemVer에서 미성년자와 상관 관계가 있습니다. +docs_ko=증빙 자료만 변경됨 +style_ko=코드의 의미에 영향을 미치지 않는 변경 사항 (공백, 서식, 누락된 세미콜론 등) +refactor_ko=버그를 수정하거나 기능을 추가하지 않은 코드 변경 +perf_ko=성능을 향상시키는 코드 변경 +test_ko=누락되거나 수정된 기존 테스트 추가 +build_ko=빌드 시스템 또는 외부 종속성에 영향을 미치는 변경 사항 (예: 범위: pip, docker, npm) +ci_ko=CI 구성 파일 및 스크립트 변경 (예: 범위: GitLabCI) +scope_ko=변경 범위는 어떻게 됩니까? (클래스 또는 파일 이름): (건너뛰려면 [ENTER] 키를 누르세요) +subject_ko=코드 변경 사항에 대한 짧고 필수적인 요약을 작성하십시오: (소문자 및 마침표 없음) +body_ko=코드 변경에 대한 추가 문맥 정보 제공: (건너뛰려면 [ENTER] 키를 누르세요) +is_breaking_change_ko=획기적인 변화인가요? SemVer의 전공과 상관 관계 있음 +footer_ko=Footer. Breaking Changes 및 이 커밋이 종료되는 참조 문제에 대한 정보: (건너뛰려면 [ENTER] 키를 누르세요) diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index 5061ad7c9a..0cbe49de54 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -156,28 +156,38 @@ def questions(self, language: str) -> Questions: "filter": parse_subject, "message": translate_text_from_eng( "Write a short and imperative summary of the code changes: (lower case and no period)\n", - language, "subject"), + language, + "subject", + ), }, { "type": "input", "name": "body", - "message": ( - "Provide additional contextual information about the code changes: (press [enter] to skip)\n" + "message": translate_text_from_eng( + "Provide additional contextual information about the code changes: (press [enter] to skip)\n", + language, + "body", ), "filter": multiple_line_breaker, }, { "type": "confirm", - "message": "Is this a BREAKING CHANGE? Correlates with MAJOR in SemVer", + "message": translate_text_from_eng( + "Is this a BREAKING CHANGE? Correlates with MAJOR in SemVer", + language, + "is_breaking_change", + ), "name": "is_breaking_change", "default": False, }, { "type": "input", "name": "footer", - "message": ( + "message": translate_text_from_eng( "Footer. Information about Breaking Changes and " - "reference issues that this commit closes: (press [enter] to skip)\n" + "reference issues that this commit closes: (press [enter] to skip)\n", + language, + "footer", ), }, ] diff --git a/commitizen/cz/conventional_commits/translation_multilanguage.py b/commitizen/cz/conventional_commits/translation_multilanguage.py index 4b1fc521de..1259a97d93 100644 --- a/commitizen/cz/conventional_commits/translation_multilanguage.py +++ b/commitizen/cz/conventional_commits/translation_multilanguage.py @@ -1,6 +1,7 @@ from translate import Translator FILENAME = "commitizen/cz/conventional_commits/.cache_multilanguage.txt" +IS_TRANSLATING = True MULTILANGUAGE = {} @@ -14,22 +15,34 @@ def load_multilanguage(): key, value = line.strip().split("=", 1) MULTILANGUAGE[key] = value + def generate_key(original_key, to_lang): return f"{original_key}_{to_lang}" + def save_multilanguage(key, value): if "\n" in value: value = value.replace("\n", "") with open(FILENAME, "a") as file: file.write(f"{key}={value}\n") + def translate_text(text, from_lang, to_lang): + global IS_TRANSLATING + if not IS_TRANSLATING: + return text translator = Translator(from_lang=from_lang, to_lang=to_lang) translation = translator.translate(text) + if "IS AN INVALID TARGET LANGUAGE" in translation: + IS_TRANSLATING = False + print("Error translating text") + return text return translation + def translate_text_from_eng(text, to_lang, key): global MULTILANGUAGE + global IS_TRANSLATING key_generated = generate_key(key, to_lang) if not MULTILANGUAGE: load_multilanguage() @@ -40,6 +53,9 @@ def translate_text_from_eng(text, to_lang, key): MULTILANGUAGE[key_generated] = text save_multilanguage(key_generated, MULTILANGUAGE[key_generated]) return text - MULTILANGUAGE[key_generated] = translate_text(text, "en", to_lang) - save_multilanguage(key_generated, MULTILANGUAGE[key_generated]) - return MULTILANGUAGE[key_generated] + output = translate_text(text, "en", to_lang) + if IS_TRANSLATING: + MULTILANGUAGE[key_generated] = output + save_multilanguage(key_generated, MULTILANGUAGE[key_generated]) + return MULTILANGUAGE[key_generated] + return text diff --git a/poetry.lock b/poetry.lock index b9d5210294..ca4013187e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -545,6 +545,171 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "libretranslatepy" +version = "2.1.1" +description = "Python bindings for LibreTranslate API" +optional = false +python-versions = "*" +files = [ + {file = "libretranslatepy-2.1.1-py3-none-any.whl", hash = "sha256:bf9f8b0003c94f34e141553b7ec0a02876297c06955f5efea49afbc9f85303a9"}, + {file = "libretranslatepy-2.1.1.tar.gz", hash = "sha256:3f28e1b990ba5f514ae215c08ace0c4e2327eeccaa356983aefbca3a25ecc568"}, +] + +[[package]] +name = "lxml" +version = "5.3.0" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +optional = false +python-versions = ">=3.6" +files = [ + {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, + {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7"}, + {file = "lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80"}, + {file = "lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3"}, + {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b"}, + {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be"}, + {file = "lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9"}, + {file = "lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1"}, + {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859"}, + {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d"}, + {file = "lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30"}, + {file = "lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f"}, + {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a"}, + {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b"}, + {file = "lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957"}, + {file = "lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d"}, + {file = "lxml-5.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8f0de2d390af441fe8b2c12626d103540b5d850d585b18fcada58d972b74a74e"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1afe0a8c353746e610bd9031a630a95bcfb1a720684c3f2b36c4710a0a96528f"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56b9861a71575f5795bde89256e7467ece3d339c9b43141dbdd54544566b3b94"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:9fb81d2824dff4f2e297a276297e9031f46d2682cafc484f49de182aa5e5df99"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2c226a06ecb8cdef28845ae976da407917542c5e6e75dcac7cc33eb04aaeb237"}, + {file = "lxml-5.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:7d3d1ca42870cdb6d0d29939630dbe48fa511c203724820fc0fd507b2fb46577"}, + {file = "lxml-5.3.0-cp36-cp36m-win32.whl", hash = "sha256:094cb601ba9f55296774c2d57ad68730daa0b13dc260e1f941b4d13678239e70"}, + {file = "lxml-5.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:eafa2c8658f4e560b098fe9fc54539f86528651f61849b22111a9b107d18910c"}, + {file = "lxml-5.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb83f8a875b3d9b458cada4f880fa498646874ba4011dc974e071a0a84a1b033"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25f1b69d41656b05885aa185f5fdf822cb01a586d1b32739633679699f220391"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23e0553b8055600b3bf4a00b255ec5c92e1e4aebf8c2c09334f8368e8bd174d6"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ada35dd21dc6c039259596b358caab6b13f4db4d4a7f8665764d616daf9cc1d"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:81b4e48da4c69313192d8c8d4311e5d818b8be1afe68ee20f6385d0e96fc9512"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:2bc9fd5ca4729af796f9f59cd8ff160fe06a474da40aca03fcc79655ddee1a8b"}, + {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07da23d7ee08577760f0a71d67a861019103e4812c87e2fab26b039054594cc5"}, + {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:ea2e2f6f801696ad7de8aec061044d6c8c0dd4037608c7cab38a9a4d316bfb11"}, + {file = "lxml-5.3.0-cp37-cp37m-win32.whl", hash = "sha256:5c54afdcbb0182d06836cc3d1be921e540be3ebdf8b8a51ee3ef987537455f84"}, + {file = "lxml-5.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f2901429da1e645ce548bf9171784c0f74f0718c3f6150ce166be39e4dd66c3e"}, + {file = "lxml-5.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c56a1d43b2f9ee4786e4658c7903f05da35b923fb53c11025712562d5cc02753"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ee8c39582d2652dcd516d1b879451500f8db3fe3607ce45d7c5957ab2596040"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdf3a3059611f7585a78ee10399a15566356116a4288380921a4b598d807a22"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:146173654d79eb1fc97498b4280c1d3e1e5d58c398fa530905c9ea50ea849b22"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0a7056921edbdd7560746f4221dca89bb7a3fe457d3d74267995253f46343f15"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:9e4b47ac0f5e749cfc618efdf4726269441014ae1d5583e047b452a32e221920"}, + {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f914c03e6a31deb632e2daa881fe198461f4d06e57ac3d0e05bbcab8eae01945"}, + {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:213261f168c5e1d9b7535a67e68b1f59f92398dd17a56d934550837143f79c42"}, + {file = "lxml-5.3.0-cp38-cp38-win32.whl", hash = "sha256:218c1b2e17a710e363855594230f44060e2025b05c80d1f0661258142b2add2e"}, + {file = "lxml-5.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:315f9542011b2c4e1d280e4a20ddcca1761993dda3afc7a73b01235f8641e903"}, + {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1ffc23010330c2ab67fac02781df60998ca8fe759e8efde6f8b756a20599c5de"}, + {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b3778cb38212f52fac9fe913017deea2fdf4eb1a4f8e4cfc6b009a13a6d3fcc"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b0c7a688944891086ba192e21c5229dea54382f4836a209ff8d0a660fac06be"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:747a3d3e98e24597981ca0be0fd922aebd471fa99d0043a3842d00cdcad7ad6a"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86a6b24b19eaebc448dc56b87c4865527855145d851f9fc3891673ff97950540"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b11a5d918a6216e521c715b02749240fb07ae5a1fefd4b7bf12f833bc8b4fe70"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b87753c784d6acb8a25b05cb526c3406913c9d988d51f80adecc2b0775d6aa"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:109fa6fede314cc50eed29e6e56c540075e63d922455346f11e4d7a036d2b8cf"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02ced472497b8362c8e902ade23e3300479f4f43e45f4105c85ef43b8db85229"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:6b038cc86b285e4f9fea2ba5ee76e89f21ed1ea898e287dc277a25884f3a7dfe"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7437237c6a66b7ca341e868cda48be24b8701862757426852c9b3186de1da8a2"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7f41026c1d64043a36fda21d64c5026762d53a77043e73e94b71f0521939cc71"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:482c2f67761868f0108b1743098640fbb2a28a8e15bf3f47ada9fa59d9fe08c3"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1483fd3358963cc5c1c9b122c80606a3a79ee0875bcac0204149fa09d6ff2727"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dec2d1130a9cda5b904696cec33b2cfb451304ba9081eeda7f90f724097300a"}, + {file = "lxml-5.3.0-cp39-cp39-win32.whl", hash = "sha256:a0eabd0a81625049c5df745209dc7fcef6e2aea7793e5f003ba363610aa0a3ff"}, + {file = "lxml-5.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:89e043f1d9d341c52bf2af6d02e6adde62e0a46e6755d5eb60dc6e4f0b8aeca2"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:94d6c3782907b5e40e21cadf94b13b0842ac421192f26b84c45f13f3c9d5dc27"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c300306673aa0f3ed5ed9372b21867690a17dba38c68c44b287437c362ce486b"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d9b952e07aed35fe2e1a7ad26e929595412db48535921c5013edc8aa4a35ce"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:01220dca0d066d1349bd6a1726856a78f7929f3878f7e2ee83c296c69495309e"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2d9b8d9177afaef80c53c0a9e30fa252ff3036fb1c6494d427c066a4ce6a282f"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:20094fc3f21ea0a8669dc4c61ed7fa8263bd37d97d93b90f28fc613371e7a875"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ace2c2326a319a0bb8a8b0e5b570c764962e95818de9f259ce814ee666603f19"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e67a0be1639c251d21e35fe74df6bcc40cba445c2cda7c4a967656733249e2"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd5350b55f9fecddc51385463a4f67a5da829bc741e38cf689f38ec9023f54ab"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c1fefd7e3d00921c44dc9ca80a775af49698bbfd92ea84498e56acffd4c5469"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:71a8dd38fbd2f2319136d4ae855a7078c69c9a38ae06e0c17c73fd70fc6caad8"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:97acf1e1fd66ab53dacd2c35b319d7e548380c2e9e8c54525c6e76d21b1ae3b1"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:68934b242c51eb02907c5b81d138cb977b2129a0a75a8f8b60b01cb8586c7b21"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bc2b8292966b23a6a0121f7a6c51d45d2347edcc75f016ac123b8054d3f2"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18feb4b93302091b1541221196a2155aa296c363fd233814fa11e181adebc52f"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3eb44520c4724c2e1a57c0af33a379eee41792595023f367ba3952a2d96c2aab"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:609251a0ca4770e5a8768ff902aa02bf636339c5a93f9349b48eb1f606f7f3e9"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:516f491c834eb320d6c843156440fe7fc0d50b33e44387fcec5b02f0bc118a4c"}, + {file = "lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f"}, +] + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html-clean = ["lxml-html-clean"] +html5 = ["html5lib"] +htmlsoup = ["BeautifulSoup4"] +source = ["Cython (>=3.0.11)"] + [[package]] name = "markdown" version = "3.7" @@ -1525,6 +1690,23 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] +[[package]] +name = "translate" +version = "3.6.1" +description = "This is a simple, yet powerful command line translator with google translate behind it. You can also use it as a Python module in your code." +optional = false +python-versions = "*" +files = [ + {file = "translate-3.6.1-py2.py3-none-any.whl", hash = "sha256:cebfb004989d9a2ab0d24c0c5805783c7f4e07243ea4ed2a8f1809d072bf712b"}, + {file = "translate-3.6.1.tar.gz", hash = "sha256:7e70ffa46f193cc744be7c88b8e1323f10f6b2bb90d24bb5d29fdf1e56618783"}, +] + +[package.dependencies] +click = "*" +libretranslatepy = "2.1.1" +lxml = "*" +requests = "*" + [[package]] name = "types-deprecated" version = "1.2.15.20241117" @@ -1766,4 +1948,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.9" -content-hash = "36ac305c62f5139da82126a1b3bc71f86320af1abab5c473b3c0d21c81e214bd" +content-hash = "fa9c69ee7854186da9f4a78db660141c80323ab7412662e09d751522c36c77ba" diff --git a/pyproject.toml b/pyproject.toml index e1b884f479..e22980436e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,6 +49,7 @@ typing-extensions = { version = "^4.0.1", python = "<3.11" } charset-normalizer = ">=2.1.0,<4" # Use the Python 3.11 and 3.12 compatible API: https://github.com/python/importlib_metadata#compatibility importlib_metadata = { version = ">=8.0.0,<9", python = "<3.10" } +translate = "^3.6.1" [tool.poetry.group.dev.dependencies] # dev tool From e7fd011f85d9ec10fda5025f775e2f6f0de80807 Mon Sep 17 00:00:00 2001 From: Willem Adnet Date: Tue, 31 Dec 2024 11:49:50 +0100 Subject: [PATCH 3/9] feat(fichier): gestion de la nouvelle branche egstion des differnts porbleme, il faut encore gerer les tests --- .../conventional_commits/.cache_multilanguage.txt | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/commitizen/cz/conventional_commits/.cache_multilanguage.txt b/commitizen/cz/conventional_commits/.cache_multilanguage.txt index fc2a1cb210..fc55a59216 100644 --- a/commitizen/cz/conventional_commits/.cache_multilanguage.txt +++ b/commitizen/cz/conventional_commits/.cache_multilanguage.txt @@ -130,18 +130,3 @@ subject_ja=コード変更の簡潔かつ必須の要約を記入してくださ body_ja=コードの変更に関する追加のコンテキスト情報を提供します: ( [ENTER]を押してスキップ) is_breaking_change_ja=これは画期的な変更ですか? SemVerのメジャーと相関する footer_ja=フッター。このコミットが閉じる重大な変更と参照の問題に関する情報: ( [ENTER]を押してスキップ) -prefix_ko=커밋할 변경 유형 선택 -fix_ko=버그 수정. SemVer의 패치와 상관 관계 -feat_ko=새로운 기능입니다. SemVer에서 미성년자와 상관 관계가 있습니다. -docs_ko=증빙 자료만 변경됨 -style_ko=코드의 의미에 영향을 미치지 않는 변경 사항 (공백, 서식, 누락된 세미콜론 등) -refactor_ko=버그를 수정하거나 기능을 추가하지 않은 코드 변경 -perf_ko=성능을 향상시키는 코드 변경 -test_ko=누락되거나 수정된 기존 테스트 추가 -build_ko=빌드 시스템 또는 외부 종속성에 영향을 미치는 변경 사항 (예: 범위: pip, docker, npm) -ci_ko=CI 구성 파일 및 스크립트 변경 (예: 범위: GitLabCI) -scope_ko=변경 범위는 어떻게 됩니까? (클래스 또는 파일 이름): (건너뛰려면 [ENTER] 키를 누르세요) -subject_ko=코드 변경 사항에 대한 짧고 필수적인 요약을 작성하십시오: (소문자 및 마침표 없음) -body_ko=코드 변경에 대한 추가 문맥 정보 제공: (건너뛰려면 [ENTER] 키를 누르세요) -is_breaking_change_ko=획기적인 변화인가요? SemVer의 전공과 상관 관계 있음 -footer_ko=Footer. Breaking Changes 및 이 커밋이 종료되는 참조 문제에 대한 정보: (건너뛰려면 [ENTER] 키를 누르세요) From 34787a70d9759262ad1733e96c4eff042acccec3 Mon Sep 17 00:00:00 2001 From: Willem Adnet Date: Tue, 31 Dec 2024 12:00:12 +0100 Subject: [PATCH 4/9] feat: adding datas into cache --- .../.cache_multilanguage.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/commitizen/cz/conventional_commits/.cache_multilanguage.txt b/commitizen/cz/conventional_commits/.cache_multilanguage.txt index fc55a59216..cd95f6ca52 100644 --- a/commitizen/cz/conventional_commits/.cache_multilanguage.txt +++ b/commitizen/cz/conventional_commits/.cache_multilanguage.txt @@ -130,3 +130,21 @@ subject_ja=コード変更の簡潔かつ必須の要約を記入してくださ body_ja=コードの変更に関する追加のコンテキスト情報を提供します: ( [ENTER]を押してスキップ) is_breaking_change_ja=これは画期的な変更ですか? SemVerのメジャーと相関する footer_ja=フッター。このコミットが閉じる重大な変更と参照の問題に関する情報: ( [ENTER]を押してスキップ) +prefix_ko=커밋할 변경 유형 선택 +fix_ko=버그 수정. SemVer의 패치와 상관 관계 +feat_ko=새로운 기능입니다. SemVer에서 미성년자와 상관 관계가 있습니다. +docs_ko=증빙 자료만 변경됨 +style_ko=코드의 의미에 영향을 미치지 않는 변경 사항 (공백, 서식, 누락된 세미콜론 등) +refactor_ko=버그를 수정하거나 기능을 추가하지 않은 코드 변경 +perf_ko=성능을 향상시키는 코드 변경 +test_ko=누락되거나 수정된 기존 테스트 추가 +build_ko=빌드 시스템 또는 외부 종속성에 영향을 미치는 변경 사항 (예: 범위: pip, docker, npm) +ci_ko=CI 구성 파일 및 스크립트 변경 (예: 범위: GitLabCI) +scope_ko=변경 범위는 어떻게 됩니까? (클래스 또는 파일 이름): (건너뛰려면 [ENTER] 키를 누르세요) +subject_ko=코드 변경 사항에 대한 짧고 필수적인 요약을 작성하십시오: (소문자 및 마침표 없음) +body_ko=코드 변경에 대한 추가 문맥 정보 제공: (건너뛰려면 [ENTER] 키를 누르세요) +is_breaking_change_ko=획기적인 변화인가요? SemVer의 전공과 상관 관계 있음 +footer_ko=Footer. Breaking Changes 및 이 커밋이 종료되는 참조 문제에 대한 정보: (건너뛰려면 [ENTER] 키를 누르세요) +body_en=Provide additional contextual information about the code changes: (press [enter] to skip) +is_breaking_change_en=Is this a BREAKING CHANGE? Correlates with MAJOR in SemVer +footer_en=Footer. Information about Breaking Changes and reference issues that this commit closes: (press [enter] to skip) From ae5a1b1a0391f656b5bf400c8e9dff518b4bd8b6 Mon Sep 17 00:00:00 2001 From: Willem Adnet Date: Tue, 31 Dec 2024 13:09:52 +0100 Subject: [PATCH 5/9] fix: passing tests corrcet the part of code that do not matched --- .pre-commit-config.yaml | 2 +- commitizen/cli.py | 8 +++++++- commitizen/commands/commit.py | 5 ++++- .../{.cache_multilanguage.txt => cache_multilanguage.txt} | 0 .../cz/conventional_commits/conventional_commits.py | 2 +- .../cz/conventional_commits/translation_multilanguage.py | 5 ++++- ...mit_command_shows_description_when_use_help_option.txt | 3 ++- 7 files changed, 19 insertions(+), 6 deletions(-) rename commitizen/cz/conventional_commits/{.cache_multilanguage.txt => cache_multilanguage.txt} (100%) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f8c5890b3d..8d44a0b3a7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,7 +47,7 @@ repos: args: [ "--write-changes" ] additional_dependencies: - tomli - exclude: "commitizen/cz/conventional_commits/\\.cache_multilanguage\\.txt" + exclude: "commitizen/cz/conventional_commits/cache_multilanguage\\.txt" - repo: https://github.com/commitizen-tools/commitizen rev: v4.1.0 # automatically updated by Commitizen diff --git a/commitizen/cli.py b/commitizen/cli.py index 4139ff1776..ad1b16c2e8 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -112,7 +112,7 @@ def __call__( "name": ["-language"], "type": str, "default": "en", - "help": "language of the commit message (default: en). Available languages: enGLISH, frENCH. others are welcome", + "help": "Choose the language that you want to use with the conventional format : en, fr, etc", }, ], "subcommands": { @@ -181,6 +181,12 @@ def __call__( "dest": "double_dash", "help": "Positional arguments separator (recommended)", }, + { + "name": ["-language"], + "type": str, + "default": "en", + "help": "Select a language for the commit message [en/fr/...]", + }, ], }, { diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 501668ca80..348106935d 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -51,7 +51,10 @@ def read_backup_message(self) -> str | None: def prompt_commit_questions(self) -> str: # Prompt user for the commit message cz = self.cz - questions = cz.questions(self.arguments["language"]) + language = "en" + if "language" in self.arguments: + language = self.arguments["language"] + questions = cz.questions(language) for question in filter(lambda q: q["type"] == "list", questions): question["use_shortcuts"] = self.config.settings["use_shortcuts"] try: diff --git a/commitizen/cz/conventional_commits/.cache_multilanguage.txt b/commitizen/cz/conventional_commits/cache_multilanguage.txt similarity index 100% rename from commitizen/cz/conventional_commits/.cache_multilanguage.txt rename to commitizen/cz/conventional_commits/cache_multilanguage.txt diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index 0cbe49de54..c6ad77ecc5 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -43,7 +43,7 @@ class ConventionalCommitsCz(BaseCommitizen): } changelog_pattern = defaults.bump_pattern - def questions(self, language: str) -> Questions: + def questions(self, language: str = "en") -> Questions: questions: Questions = [ { "type": "list", diff --git a/commitizen/cz/conventional_commits/translation_multilanguage.py b/commitizen/cz/conventional_commits/translation_multilanguage.py index 1259a97d93..15345caa5c 100644 --- a/commitizen/cz/conventional_commits/translation_multilanguage.py +++ b/commitizen/cz/conventional_commits/translation_multilanguage.py @@ -1,6 +1,9 @@ +import os + from translate import Translator -FILENAME = "commitizen/cz/conventional_commits/.cache_multilanguage.txt" +FILENAME = os.path.join(os.path.dirname(__file__), "cache_multilanguage.txt") + IS_TRANSLATING = True MULTILANGUAGE = {} diff --git a/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt b/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt index dd1f53f3da..eab8458853 100644 --- a/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt @@ -1,6 +1,6 @@ usage: cz commit [-h] [--retry] [--no-retry] [--dry-run] [--write-message-to-file FILE_PATH] [-s] [-a] [-e] - [-l MESSAGE_LENGTH_LIMIT] [--] + [-l MESSAGE_LENGTH_LIMIT] [--] [-language LANGUAGE] create new commit @@ -20,3 +20,4 @@ options: -l, --message-length-limit MESSAGE_LENGTH_LIMIT length limit of the commit message; 0 for no limit -- Positional arguments separator (recommended) + -language LANGUAGE Select a language for the commit message [en/fr/...] From aa8cd2fa0548923c24e389b04fcad979ff2e61f7 Mon Sep 17 00:00:00 2001 From: Willem Adnet Date: Thu, 2 Jan 2025 11:18:19 +0100 Subject: [PATCH 6/9] fix: correciton de la lecture de la ligne d argument --- .github/.codecov.yml | 7 -- .github/CODEOWNERS | 1 - .github/FUNDING.yml | 4 - .github/ISSUE_TEMPLATE/bug_report.yml | 61 --------------- .github/ISSUE_TEMPLATE/config.yml | 6 -- .github/ISSUE_TEMPLATE/documentation.yml | 29 ------- .github/ISSUE_TEMPLATE/feature_request.yml | 31 -------- .github/dependabot.yml | 24 ------ .github/labeler.yml | 3 - .github/pull_request_template.md | 29 ------- .github/workflows/bumpversion.yml | 29 ------- .github/workflows/docspublish.yml | 76 ------------------- .github/workflows/homebrewpublish.yml | 32 -------- .github/workflows/label_issues.yml | 23 ------ .github/workflows/label_pr.yml | 19 ----- .github/workflows/pythonpackage.yml | 38 ---------- .github/workflows/pythonpublish.yml | 30 -------- .pre-commit-config.yaml | 2 +- commitizen/cli.py | 8 +- commitizen/commands/commit.py | 5 +- ...ilanguage.txt => .cache_multilanguage.txt} | 0 .../conventional_commits.py | 2 +- .../translation_multilanguage.py | 5 +- ...shows_description_when_use_help_option.txt | 3 +- 24 files changed, 6 insertions(+), 461 deletions(-) delete mode 100644 .github/.codecov.yml delete mode 100644 .github/CODEOWNERS delete mode 100644 .github/FUNDING.yml delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/documentation.yml delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml delete mode 100644 .github/dependabot.yml delete mode 100644 .github/labeler.yml delete mode 100644 .github/pull_request_template.md delete mode 100644 .github/workflows/bumpversion.yml delete mode 100644 .github/workflows/docspublish.yml delete mode 100644 .github/workflows/homebrewpublish.yml delete mode 100644 .github/workflows/label_issues.yml delete mode 100644 .github/workflows/label_pr.yml delete mode 100644 .github/workflows/pythonpackage.yml delete mode 100644 .github/workflows/pythonpublish.yml rename commitizen/cz/conventional_commits/{cache_multilanguage.txt => .cache_multilanguage.txt} (100%) diff --git a/.github/.codecov.yml b/.github/.codecov.yml deleted file mode 100644 index 85b43f3fef..0000000000 --- a/.github/.codecov.yml +++ /dev/null @@ -1,7 +0,0 @@ -coverage: - status: - project: - default: - # minimum of 97% (real 96%) - target: 97% - threshold: 1% diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index 5d29c85b70..0000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1 +0,0 @@ -* @woile @Lee-W @noirbizarre diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 68203f28bd..0000000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,4 +0,0 @@ -# These are supported funding model platforms - -open_collective: commitizen-tools -github: commitizen-tools diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index 10d782d30b..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: 🛠 Bug report -description: Create a report to help us improve -title: Good bug title tells us about precise symptom, not about the root cause. -labels: [bug] -body: - - type: textarea - id: description - attributes: - label: Description - description: | - A clear and concise description of what the bug is - validations: - required: true - - type: textarea - id: steps-to-reproduce - attributes: - label: Steps to reproduce - description: Steps to reproduce the behavior - placeholder: | - 1. Run ... - 2. ... - 3. ... - validations: - required: true - - type: textarea - id: current-behavior - attributes: - label: Current behavior - description: What happens actually so you think this is a bug. - validations: - required: true - - type: textarea - id: desired-behavior - attributes: - label: Desired behavior - description: | - A clear and concise description of what you expected to happen. - validations: - required: true - - type: textarea - id: screenshots - attributes: - label: Screenshots - description: | - If applicable, add screenshots to help explain your problem. - - type: textarea - id: environment - attributes: - label: Environment - description: | - For older commitizen versions, please include the output of the following commands manually - placeholder: | - - commitizen version: `cz version` - - python version: `python --version` - - operating system: `python3 -c "import platform; print(platform.system())"` - - ```bash - cz version --report - ``` - validations: - required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 884fe1663a..0000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,6 +0,0 @@ -# Configuration: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository - -blank_issues_enabled: false -contact_links: - - name: Security Contact - about: Please report security vulnerabilities to santiwilly@gmail.com diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml deleted file mode 100644 index 51d378b747..0000000000 --- a/.github/ISSUE_TEMPLATE/documentation.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: 📖 Documentation -description: Suggest an improvement for the documentation of this project -title: Content to be added or fixed -labels: [documentation] -body: - - type: checkboxes - id: type - attributes: - label: Type - options: - - label: Content inaccurate - - label: Content missing - - label: Typo - - type: input - id: url - attributes: - label: URL - placeholder: | - URL to the code we did not clearly describe or the document page where the content is inaccurate - validations: - required: true - - type: textarea - id: description - attributes: - label: Description - description: | - A clear and concise description of what content should be added or fixed - validations: - required: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index 7d67eb18af..0000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: 🚀 Feature request -description: Suggest an idea for this project -title: "" -labels: [feature] -body: - - type: textarea - id: description - attributes: - label: Description - description: | - A clear and concise description for us to know your idea. - validations: - required: true - - type: textarea - id: possible-solution - attributes: - label: Possible Solution - description: | - A clear and concise description of what you want to happen. - - type: textarea - id: additional-context - attributes: - label: Additional context - description: | - Add any other context or screenshots about the feature request here. - - type: textarea - id: related-issue - attributes: - label: Additional context - description: | - If applicable, add link to existing issue also help us know better. diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 82fb674f7f..0000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,24 +0,0 @@ -version: 2 -updates: - - - # Maintain dependencies for GitHub Actions - package-ecosystem: github-actions - directory: / - schedule: - interval: daily - labels: - - dependencies - commit-message: - prefix: "ci" - include: "scope" - - - # Maintain python dependencies - package-ecosystem: pip - directory: / - schedule: - interval: daily - labels: - - dependencies - commit-message: - prefix: "build" - include: "scope" diff --git a/.github/labeler.yml b/.github/labeler.yml deleted file mode 100644 index 5f3f5b82dc..0000000000 --- a/.github/labeler.yml +++ /dev/null @@ -1,3 +0,0 @@ -'pr-status: wait-for-review': -- changed-files: - - any-glob-to-any-file: '**' diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index 14bee6b434..0000000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,29 +0,0 @@ - - -## Description - - - -## Checklist - -- [ ] Add test cases to all the changes you introduce -- [ ] Run `./scripts/format` and `./scripts/test` locally to ensure this change passes linter check and test -- [ ] Test the changes on the local machine manually -- [ ] Update the documentation for the changes - -## Expected behavior - - - -## Steps to Test This Pull Request - - - -## Additional context - diff --git a/.github/workflows/bumpversion.yml b/.github/workflows/bumpversion.yml deleted file mode 100644 index ed0c8cffce..0000000000 --- a/.github/workflows/bumpversion.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Bump version - -on: - push: - branches: - - master - -jobs: - bump-version: - if: "!startsWith(github.event.head_commit.message, 'bump:')" - runs-on: ubuntu-latest - name: "Bump version and create changelog with commitizen" - steps: - - name: Check out - uses: actions/checkout@v4 - with: - fetch-depth: 0 - token: "${{ secrets.PERSONAL_ACCESS_TOKEN }}" - - name: Create bump and changelog - uses: commitizen-tools/commitizen-action@master - with: - github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - changelog_increment_filename: body.md - - name: Release - uses: ncipollo/release-action@v1 - with: - tag: v${{ env.REVISION }} - bodyFile: "body.md" - skipIfReleaseExists: true diff --git a/.github/workflows/docspublish.yml b/.github/workflows/docspublish.yml deleted file mode 100644 index f318b86858..0000000000 --- a/.github/workflows/docspublish.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: Publish documentation - -on: - push: - branches: - - master - -jobs: - update-cli-screenshots: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - fetch-depth: 0 - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: "3.x" - - name: Install dependencies - run: | - python -m pip install -U pip poetry - poetry --version - poetry install - - name: Update CLI screenshots - run: | - poetry run python scripts/gen_cli_help_screenshots.py - - name: Commit and push updated CLI screenshots - run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - git add docs/images/cli_help - - if [[ -n "$(git status --porcelain)" ]]; then - git commit -m "docs(cli/screenshots): update CLI screenshots" -m "[skip ci]" - git push - else - echo "No changes to commit. Skipping." - fi - - publish-documentation: - runs-on: ubuntu-latest - needs: update-cli-screenshots - steps: - - uses: actions/checkout@v4 - with: - token: "${{ secrets.PERSONAL_ACCESS_TOKEN }}" - fetch-depth: 0 - - name: Pull latest changes - run: | - git pull origin master - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: "3.x" - - name: Install dependencies - run: | - python -m pip install -U mkdocs mkdocs-material - - name: Build docs - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - python -m mkdocs build - - name: Generate Sponsors 💖 - uses: JamesIves/github-sponsors-readme-action@v1 - with: - token: ${{ secrets.PERSONAL_ACCESS_TOKEN_FOR_ORG }} - file: "docs/README.md" - - name: Push doc to Github Page - uses: peaceiris/actions-gh-pages@v4 - with: - personal_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - publish_branch: gh-pages - publish_dir: ./site - user_name: "github-actions[bot]" - user_email: "github-actions[bot]@users.noreply.github.com" diff --git a/.github/workflows/homebrewpublish.yml b/.github/workflows/homebrewpublish.yml deleted file mode 100644 index 443a13b1ba..0000000000 --- a/.github/workflows/homebrewpublish.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Publish to Homebrew - -on: - workflow_run: - workflows: ["Upload Python Package"] - types: - - completed - -jobs: - deploy: - runs-on: macos-latest - if: ${{ github.event.workflow_run.conclusion == 'success' }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: "3.x" - - name: Install dependencies - run: | - python -m pip install -U commitizen - - name: Set Project version env variable - run: | - echo "project_version=$(cz version --project)" >> $GITHUB_ENV - - name: Update Homebrew formula - uses: dawidd6/action-homebrew-bump-formula@v4 - with: - token: ${{secrets.PERSONAL_ACCESS_TOKEN}} - formula: commitizen - tag: v${{ env.project_version }} - force: true diff --git a/.github/workflows/label_issues.yml b/.github/workflows/label_issues.yml deleted file mode 100644 index 45ca450f89..0000000000 --- a/.github/workflows/label_issues.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Label issues - -on: - issues: - types: - - opened - - reopened - -jobs: - label-issue: - permissions: - issues: write - runs-on: ubuntu-latest - steps: - - uses: actions/github-script@v7 - with: - script: | - github.rest.issues.addLabels({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - labels: ['issue-status: needs-triage'] - }) diff --git a/.github/workflows/label_pr.yml b/.github/workflows/label_pr.yml deleted file mode 100644 index b409c8b757..0000000000 --- a/.github/workflows/label_pr.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: "Label Pull Request" -on: -- pull_request_target - -jobs: - label-pr: - permissions: - contents: read - pull-requests: write - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - sparse-checkout: | - .github/labeler.yml - sparse-checkout-cone-mode: false - - uses: actions/labeler@v5 - with: - configuration-path: .github/labeler.yml diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml deleted file mode 100644 index 4f99a595c7..0000000000 --- a/.github/workflows/pythonpackage.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Python package - -on: [workflow_dispatch, pull_request] - -jobs: - python-check: - strategy: - matrix: - python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] - platform: [ubuntu-20.04, macos-latest, windows-latest] - runs-on: ${{ matrix.platform }} - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install -U pip poetry - poetry --version - poetry install - - name: Run tests and linters - run: | - git config --global user.email "action@github.com" - git config --global user.name "GitHub Action" - SKIP=no-commit-to-branch,commitizen-branch poetry run pre-commit run --all-files --hook-stage pre-push - shell: bash - - name: Upload coverage to Codecov - if: runner.os == 'Linux' - uses: codecov/codecov-action@v5 - with: - token: ${{ secrets.CODECOV_TOKEN }} - file: ./coverage.xml - flags: unittests - name: codecov-umbrella diff --git a/.github/workflows/pythonpublish.yml b/.github/workflows/pythonpublish.yml deleted file mode 100644 index e3b3aa6f30..0000000000 --- a/.github/workflows/pythonpublish.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Upload Python Package - -on: - push: - tags: - - "v*" - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - token: "${{ secrets.PERSONAL_ACCESS_TOKEN }}" - fetch-depth: 0 - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: "3.x" - - name: Install dependencies - run: | - python -m pip install -U pip poetry mkdocs mkdocs-material - poetry --version - poetry install - - name: Publish - env: - PYPI_USERNAME: ${{ secrets.PYPI_USERNAME }} - PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: | - ./scripts/publish diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8d44a0b3a7..f8c5890b3d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,7 +47,7 @@ repos: args: [ "--write-changes" ] additional_dependencies: - tomli - exclude: "commitizen/cz/conventional_commits/cache_multilanguage\\.txt" + exclude: "commitizen/cz/conventional_commits/\\.cache_multilanguage\\.txt" - repo: https://github.com/commitizen-tools/commitizen rev: v4.1.0 # automatically updated by Commitizen diff --git a/commitizen/cli.py b/commitizen/cli.py index ad1b16c2e8..4139ff1776 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -112,7 +112,7 @@ def __call__( "name": ["-language"], "type": str, "default": "en", - "help": "Choose the language that you want to use with the conventional format : en, fr, etc", + "help": "language of the commit message (default: en). Available languages: enGLISH, frENCH. others are welcome", }, ], "subcommands": { @@ -181,12 +181,6 @@ def __call__( "dest": "double_dash", "help": "Positional arguments separator (recommended)", }, - { - "name": ["-language"], - "type": str, - "default": "en", - "help": "Select a language for the commit message [en/fr/...]", - }, ], }, { diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 348106935d..501668ca80 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -51,10 +51,7 @@ def read_backup_message(self) -> str | None: def prompt_commit_questions(self) -> str: # Prompt user for the commit message cz = self.cz - language = "en" - if "language" in self.arguments: - language = self.arguments["language"] - questions = cz.questions(language) + questions = cz.questions(self.arguments["language"]) for question in filter(lambda q: q["type"] == "list", questions): question["use_shortcuts"] = self.config.settings["use_shortcuts"] try: diff --git a/commitizen/cz/conventional_commits/cache_multilanguage.txt b/commitizen/cz/conventional_commits/.cache_multilanguage.txt similarity index 100% rename from commitizen/cz/conventional_commits/cache_multilanguage.txt rename to commitizen/cz/conventional_commits/.cache_multilanguage.txt diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index c6ad77ecc5..0cbe49de54 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -43,7 +43,7 @@ class ConventionalCommitsCz(BaseCommitizen): } changelog_pattern = defaults.bump_pattern - def questions(self, language: str = "en") -> Questions: + def questions(self, language: str) -> Questions: questions: Questions = [ { "type": "list", diff --git a/commitizen/cz/conventional_commits/translation_multilanguage.py b/commitizen/cz/conventional_commits/translation_multilanguage.py index 15345caa5c..1259a97d93 100644 --- a/commitizen/cz/conventional_commits/translation_multilanguage.py +++ b/commitizen/cz/conventional_commits/translation_multilanguage.py @@ -1,9 +1,6 @@ -import os - from translate import Translator -FILENAME = os.path.join(os.path.dirname(__file__), "cache_multilanguage.txt") - +FILENAME = "commitizen/cz/conventional_commits/.cache_multilanguage.txt" IS_TRANSLATING = True MULTILANGUAGE = {} diff --git a/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt b/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt index eab8458853..dd1f53f3da 100644 --- a/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt +++ b/tests/commands/test_commit_command/test_commit_command_shows_description_when_use_help_option.txt @@ -1,6 +1,6 @@ usage: cz commit [-h] [--retry] [--no-retry] [--dry-run] [--write-message-to-file FILE_PATH] [-s] [-a] [-e] - [-l MESSAGE_LENGTH_LIMIT] [--] [-language LANGUAGE] + [-l MESSAGE_LENGTH_LIMIT] [--] create new commit @@ -20,4 +20,3 @@ options: -l, --message-length-limit MESSAGE_LENGTH_LIMIT length limit of the commit message; 0 for no limit -- Positional arguments separator (recommended) - -language LANGUAGE Select a language for the commit message [en/fr/...] From 7d7b9686585156ccb2bae3bcd3e8c22ff4b09449 Mon Sep 17 00:00:00 2001 From: Willem Adnet Date: Thu, 2 Jan 2025 12:12:12 +0100 Subject: [PATCH 7/9] fix: correciton des tests J ai corrige le format de cz afin d y introduire le langage BREAKING CHANGE: --- commitizen/commands/commit.py | 5 ++++- commitizen/cz/base.py | 2 ++ .../cz/conventional_commits/conventional_commits.py | 4 +++- .../cz/conventional_commits/translation_multilanguage.py | 8 +++++++- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 501668ca80..aaf32ff33c 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -51,7 +51,10 @@ def read_backup_message(self) -> str | None: def prompt_commit_questions(self) -> str: # Prompt user for the commit message cz = self.cz - questions = cz.questions(self.arguments["language"]) + if "language" in self.arguments: + cz.language = self.arguments["language"] + questions = cz.questions() + for question in filter(lambda q: q["type"] == "list", questions): question["use_shortcuts"] = self.config.settings["use_shortcuts"] try: diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index 43455a74ca..ebb0831d55 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -62,6 +62,8 @@ class BaseCommitizen(metaclass=ABCMeta): template_loader: BaseLoader = PackageLoader("commitizen", "templates") template_extras: dict[str, Any] = {} + language: str = "en" + def __init__(self, config: BaseConfig) -> None: self.config = config if not self.config.settings.get("style"): diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index 0cbe49de54..d702391ee1 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -43,7 +43,9 @@ class ConventionalCommitsCz(BaseCommitizen): } changelog_pattern = defaults.bump_pattern - def questions(self, language: str) -> Questions: + def questions(self) -> Questions: + language = self.language + print(language) questions: Questions = [ { "type": "list", diff --git a/commitizen/cz/conventional_commits/translation_multilanguage.py b/commitizen/cz/conventional_commits/translation_multilanguage.py index 1259a97d93..562f6e5c1a 100644 --- a/commitizen/cz/conventional_commits/translation_multilanguage.py +++ b/commitizen/cz/conventional_commits/translation_multilanguage.py @@ -1,9 +1,15 @@ +import os + +# mypy: ignore-errors from translate import Translator -FILENAME = "commitizen/cz/conventional_commits/.cache_multilanguage.txt" +FILENAME = os.path.join(os.path.dirname(__file__), ".cache_multilanguage.txt") + IS_TRANSLATING = True MULTILANGUAGE = {} +# test + def load_multilanguage(): global MULTILANGUAGE From e153dcdcbd2d9bd369ed346308c753ff472ee8f0 Mon Sep 17 00:00:00 2001 From: Willem Adnet Date: Thu, 2 Jan 2025 13:10:27 +0100 Subject: [PATCH 8/9] feat(file): adding tests for the multilanguage version test to be sure that all the case are looked. The language option give the oppotunity to choose on wich language you want to display infomation during the commit --- .../.cache_multilanguage.txt | 1 + .../translation_multilanguage.py | 16 ++-- tests/test_cz_conventional_commits.py | 91 +++++++++++++++++++ 3 files changed, 101 insertions(+), 7 deletions(-) diff --git a/commitizen/cz/conventional_commits/.cache_multilanguage.txt b/commitizen/cz/conventional_commits/.cache_multilanguage.txt index cd95f6ca52..68e80fb65c 100644 --- a/commitizen/cz/conventional_commits/.cache_multilanguage.txt +++ b/commitizen/cz/conventional_commits/.cache_multilanguage.txt @@ -148,3 +148,4 @@ footer_ko=Footer. Breaking Changes 및 이 커밋이 종료되는 참조 문제 body_en=Provide additional contextual information about the code changes: (press [enter] to skip) is_breaking_change_en=Is this a BREAKING CHANGE? Correlates with MAJOR in SemVer footer_en=Footer. Information about Breaking Changes and reference issues that this commit closes: (press [enter] to skip) +hello_fr=bonjour diff --git a/commitizen/cz/conventional_commits/translation_multilanguage.py b/commitizen/cz/conventional_commits/translation_multilanguage.py index 562f6e5c1a..b8e5b231ce 100644 --- a/commitizen/cz/conventional_commits/translation_multilanguage.py +++ b/commitizen/cz/conventional_commits/translation_multilanguage.py @@ -8,18 +8,20 @@ IS_TRANSLATING = True MULTILANGUAGE = {} -# test - -def load_multilanguage(): +def load_multilanguage(file=FILENAME): global MULTILANGUAGE MULTILANGUAGE = {} - with open(FILENAME) as file: - for line in file: + with open(file) as f: + for line in f: if not line.strip(): continue - key, value = line.strip().split("=", 1) - MULTILANGUAGE[key] = value + try: + key, value = line.strip().split("=", 1) + MULTILANGUAGE[key] = value + except ValueError: + print(f"Skipping malformed line: {line.strip()}") + return MULTILANGUAGE def generate_key(original_key, to_lang): diff --git a/tests/test_cz_conventional_commits.py b/tests/test_cz_conventional_commits.py index 04d0522174..9b52e021e1 100644 --- a/tests/test_cz_conventional_commits.py +++ b/tests/test_cz_conventional_commits.py @@ -1,3 +1,5 @@ +from unittest.mock import mock_open, patch + import pytest from commitizen.cz.conventional_commits.conventional_commits import ( @@ -5,6 +7,15 @@ parse_scope, parse_subject, ) +from commitizen.cz.conventional_commits.translation_multilanguage import ( + FILENAME, + MULTILANGUAGE, + generate_key, + load_multilanguage, + save_multilanguage, + translate_text, + translate_text_from_eng, +) from commitizen.cz.exceptions import AnswerRequiredError valid_scopes = ["", "simple", "dash-separated", "camelCase" "UPPERCASE"] @@ -153,3 +164,83 @@ def test_process_commit(commit_message, expected_message, config): conventional_commits = ConventionalCommitsCz(config) message = conventional_commits.process_commit(commit_message) assert message == expected_message + + +def test_load_multilanguage(): + mock_data = "hello_en=hello\nworld_fr=monde\n" + + file = "builtins.open" + with patch(file, mock_open(read_data=mock_data)): + MULTILANGUAGE = load_multilanguage(file) + + assert MULTILANGUAGE == {"hello_en": "hello", "world_fr": "monde"} + + +def test_save_multilanguage(): + key = "hello_fr" + value = "bonjour" + with patch("builtins.open", mock_open()) as mocked_file: + save_multilanguage(key, value) + mocked_file.assert_called_once_with(FILENAME, "a") + mocked_file().write.assert_called_once_with(f"{key}={value}\n") + + +def test_generate_key(): + original_key = "hello" + to_lang = "fr" + expected_key = "hello_fr" + assert generate_key(original_key, to_lang) == expected_key + + +def test_translate_text_error(): + with patch("translate.Translator") as MockTranslator: + mock_translator = MockTranslator.return_value + mock_translator.translate.return_value = "IS AN INVALID TARGET LANGUAGE" + + text = "hello" + from_lang = "en" + to_lang = "xx" # Langue invalid + translated = translate_text(text, from_lang, to_lang) + + assert translated == text + + +def test_translate_text_from_eng_default_language(): + text = "hello" + to_lang = "en" + key = "hello" + + translated = translate_text_from_eng(text, to_lang, key) + + # La langue de destination est l'anglais, donc le texte doit être renvoyé tel quel + assert translated == "hello" + + +def test_translate_text_with_is_translating_false(): + global IS_TRANSLATING + IS_TRANSLATING = False # Simuler que la traduction est désactivée + + text = "hello" + from_lang = "en" + to_lang = "fr" + + translated = translate_text(text, from_lang, to_lang) + + # IS_TRANSLATING est False, donc le texte doit être retourné sans modification + assert translated == text + + +def test_load_multilanguage_empty_file(): + with patch("builtins.open", mock_open(read_data="")): + load_multilanguage() + assert MULTILANGUAGE == {} + + +def test_load_multilanguage_malformed_file(): + malformed_data = "hello=bonjour\ninvalid-line\nworld=monde\n" + file = "builtins.open" + with patch(file, mock_open(read_data=malformed_data)): + MULTILANGUAGE = load_multilanguage(file) + + # Devrait ignorer les lignes malformées + assert MULTILANGUAGE == {"hello": "bonjour", "world": "monde"} From 3b7e12237346e11221d9d7311e9ab81122f5bd61 Mon Sep 17 00:00:00 2001 From: Willem Adnet Date: Thu, 2 Jan 2025 20:11:12 +0100 Subject: [PATCH 9/9] fix: adding the file .github wich was deleated ny mistake --- .github/.codecov.yml | 7 + .github/CODEOWNERS | 1 + .github/FUNDING.yml | 4 + .github/ISSUE_TEMPLATE/bug_report.yml | 61 +++ .github/ISSUE_TEMPLATE/config.yml | 6 + .github/ISSUE_TEMPLATE/documentation.yml | 29 ++ .github/ISSUE_TEMPLATE/feature_request.yml | 31 ++ .github/dependabot.yml | 24 ++ .github/labeler.yml | 3 + .github/pull_request_template.md | 29 ++ .github/workflows/bumpversion.yml | 29 ++ .github/workflows/docspublish.yml | 76 ++++ .github/workflows/homebrewpublish.yml | 32 ++ .github/workflows/label_issues.yml | 23 ++ .github/workflows/label_pr.yml | 19 + .github/workflows/pythonpackage.yml | 38 ++ .github/workflows/pythonpublish.yml | 30 ++ poetry.lock | 439 ++++++++++----------- pyproject.toml | 2 +- 19 files changed, 656 insertions(+), 227 deletions(-) create mode 100644 .github/.codecov.yml create mode 100644 .github/CODEOWNERS create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/documentation.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/dependabot.yml create mode 100644 .github/labeler.yml create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/bumpversion.yml create mode 100644 .github/workflows/docspublish.yml create mode 100644 .github/workflows/homebrewpublish.yml create mode 100644 .github/workflows/label_issues.yml create mode 100644 .github/workflows/label_pr.yml create mode 100644 .github/workflows/pythonpackage.yml create mode 100644 .github/workflows/pythonpublish.yml diff --git a/.github/.codecov.yml b/.github/.codecov.yml new file mode 100644 index 0000000000..85b43f3fef --- /dev/null +++ b/.github/.codecov.yml @@ -0,0 +1,7 @@ +coverage: + status: + project: + default: + # minimum of 97% (real 96%) + target: 97% + threshold: 1% diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000000..5d29c85b70 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @woile @Lee-W @noirbizarre diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000000..68203f28bd --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,4 @@ +# These are supported funding model platforms + +open_collective: commitizen-tools +github: commitizen-tools diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000000..10d782d30b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,61 @@ +name: 🛠 Bug report +description: Create a report to help us improve +title: Good bug title tells us about precise symptom, not about the root cause. +labels: [bug] +body: + - type: textarea + id: description + attributes: + label: Description + description: | + A clear and concise description of what the bug is + validations: + required: true + - type: textarea + id: steps-to-reproduce + attributes: + label: Steps to reproduce + description: Steps to reproduce the behavior + placeholder: | + 1. Run ... + 2. ... + 3. ... + validations: + required: true + - type: textarea + id: current-behavior + attributes: + label: Current behavior + description: What happens actually so you think this is a bug. + validations: + required: true + - type: textarea + id: desired-behavior + attributes: + label: Desired behavior + description: | + A clear and concise description of what you expected to happen. + validations: + required: true + - type: textarea + id: screenshots + attributes: + label: Screenshots + description: | + If applicable, add screenshots to help explain your problem. + - type: textarea + id: environment + attributes: + label: Environment + description: | + For older commitizen versions, please include the output of the following commands manually + placeholder: | + - commitizen version: `cz version` + - python version: `python --version` + - operating system: `python3 -c "import platform; print(platform.system())"` + + ```bash + cz version --report + ``` + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000..884fe1663a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,6 @@ +# Configuration: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository + +blank_issues_enabled: false +contact_links: + - name: Security Contact + about: Please report security vulnerabilities to santiwilly@gmail.com diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml new file mode 100644 index 0000000000..51d378b747 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.yml @@ -0,0 +1,29 @@ +name: 📖 Documentation +description: Suggest an improvement for the documentation of this project +title: Content to be added or fixed +labels: [documentation] +body: + - type: checkboxes + id: type + attributes: + label: Type + options: + - label: Content inaccurate + - label: Content missing + - label: Typo + - type: input + id: url + attributes: + label: URL + placeholder: | + URL to the code we did not clearly describe or the document page where the content is inaccurate + validations: + required: true + - type: textarea + id: description + attributes: + label: Description + description: | + A clear and concise description of what content should be added or fixed + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000000..7d67eb18af --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,31 @@ +name: 🚀 Feature request +description: Suggest an idea for this project +title: "" +labels: [feature] +body: + - type: textarea + id: description + attributes: + label: Description + description: | + A clear and concise description for us to know your idea. + validations: + required: true + - type: textarea + id: possible-solution + attributes: + label: Possible Solution + description: | + A clear and concise description of what you want to happen. + - type: textarea + id: additional-context + attributes: + label: Additional context + description: | + Add any other context or screenshots about the feature request here. + - type: textarea + id: related-issue + attributes: + label: Additional context + description: | + If applicable, add link to existing issue also help us know better. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..82fb674f7f --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,24 @@ +version: 2 +updates: + - + # Maintain dependencies for GitHub Actions + package-ecosystem: github-actions + directory: / + schedule: + interval: daily + labels: + - dependencies + commit-message: + prefix: "ci" + include: "scope" + - + # Maintain python dependencies + package-ecosystem: pip + directory: / + schedule: + interval: daily + labels: + - dependencies + commit-message: + prefix: "build" + include: "scope" diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 0000000000..5f3f5b82dc --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,3 @@ +'pr-status: wait-for-review': +- changed-files: + - any-glob-to-any-file: '**' diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000000..14bee6b434 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,29 @@ + + +## Description + + + +## Checklist + +- [ ] Add test cases to all the changes you introduce +- [ ] Run `./scripts/format` and `./scripts/test` locally to ensure this change passes linter check and test +- [ ] Test the changes on the local machine manually +- [ ] Update the documentation for the changes + +## Expected behavior + + + +## Steps to Test This Pull Request + + + +## Additional context + diff --git a/.github/workflows/bumpversion.yml b/.github/workflows/bumpversion.yml new file mode 100644 index 0000000000..ed0c8cffce --- /dev/null +++ b/.github/workflows/bumpversion.yml @@ -0,0 +1,29 @@ +name: Bump version + +on: + push: + branches: + - master + +jobs: + bump-version: + if: "!startsWith(github.event.head_commit.message, 'bump:')" + runs-on: ubuntu-latest + name: "Bump version and create changelog with commitizen" + steps: + - name: Check out + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: "${{ secrets.PERSONAL_ACCESS_TOKEN }}" + - name: Create bump and changelog + uses: commitizen-tools/commitizen-action@master + with: + github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + changelog_increment_filename: body.md + - name: Release + uses: ncipollo/release-action@v1 + with: + tag: v${{ env.REVISION }} + bodyFile: "body.md" + skipIfReleaseExists: true diff --git a/.github/workflows/docspublish.yml b/.github/workflows/docspublish.yml new file mode 100644 index 0000000000..f318b86858 --- /dev/null +++ b/.github/workflows/docspublish.yml @@ -0,0 +1,76 @@ +name: Publish documentation + +on: + push: + branches: + - master + +jobs: + update-cli-screenshots: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: Install dependencies + run: | + python -m pip install -U pip poetry + poetry --version + poetry install + - name: Update CLI screenshots + run: | + poetry run python scripts/gen_cli_help_screenshots.py + - name: Commit and push updated CLI screenshots + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git add docs/images/cli_help + + if [[ -n "$(git status --porcelain)" ]]; then + git commit -m "docs(cli/screenshots): update CLI screenshots" -m "[skip ci]" + git push + else + echo "No changes to commit. Skipping." + fi + + publish-documentation: + runs-on: ubuntu-latest + needs: update-cli-screenshots + steps: + - uses: actions/checkout@v4 + with: + token: "${{ secrets.PERSONAL_ACCESS_TOKEN }}" + fetch-depth: 0 + - name: Pull latest changes + run: | + git pull origin master + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: Install dependencies + run: | + python -m pip install -U mkdocs mkdocs-material + - name: Build docs + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + python -m mkdocs build + - name: Generate Sponsors 💖 + uses: JamesIves/github-sponsors-readme-action@v1 + with: + token: ${{ secrets.PERSONAL_ACCESS_TOKEN_FOR_ORG }} + file: "docs/README.md" + - name: Push doc to Github Page + uses: peaceiris/actions-gh-pages@v4 + with: + personal_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + publish_branch: gh-pages + publish_dir: ./site + user_name: "github-actions[bot]" + user_email: "github-actions[bot]@users.noreply.github.com" diff --git a/.github/workflows/homebrewpublish.yml b/.github/workflows/homebrewpublish.yml new file mode 100644 index 0000000000..443a13b1ba --- /dev/null +++ b/.github/workflows/homebrewpublish.yml @@ -0,0 +1,32 @@ +name: Publish to Homebrew + +on: + workflow_run: + workflows: ["Upload Python Package"] + types: + - completed + +jobs: + deploy: + runs-on: macos-latest + if: ${{ github.event.workflow_run.conclusion == 'success' }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: Install dependencies + run: | + python -m pip install -U commitizen + - name: Set Project version env variable + run: | + echo "project_version=$(cz version --project)" >> $GITHUB_ENV + - name: Update Homebrew formula + uses: dawidd6/action-homebrew-bump-formula@v4 + with: + token: ${{secrets.PERSONAL_ACCESS_TOKEN}} + formula: commitizen + tag: v${{ env.project_version }} + force: true diff --git a/.github/workflows/label_issues.yml b/.github/workflows/label_issues.yml new file mode 100644 index 0000000000..45ca450f89 --- /dev/null +++ b/.github/workflows/label_issues.yml @@ -0,0 +1,23 @@ +name: Label issues + +on: + issues: + types: + - opened + - reopened + +jobs: + label-issue: + permissions: + issues: write + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v7 + with: + script: | + github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ['issue-status: needs-triage'] + }) diff --git a/.github/workflows/label_pr.yml b/.github/workflows/label_pr.yml new file mode 100644 index 0000000000..b409c8b757 --- /dev/null +++ b/.github/workflows/label_pr.yml @@ -0,0 +1,19 @@ +name: "Label Pull Request" +on: +- pull_request_target + +jobs: + label-pr: + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + sparse-checkout: | + .github/labeler.yml + sparse-checkout-cone-mode: false + - uses: actions/labeler@v5 + with: + configuration-path: .github/labeler.yml diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml new file mode 100644 index 0000000000..4f99a595c7 --- /dev/null +++ b/.github/workflows/pythonpackage.yml @@ -0,0 +1,38 @@ +name: Python package + +on: [workflow_dispatch, pull_request] + +jobs: + python-check: + strategy: + matrix: + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + platform: [ubuntu-20.04, macos-latest, windows-latest] + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install -U pip poetry + poetry --version + poetry install + - name: Run tests and linters + run: | + git config --global user.email "action@github.com" + git config --global user.name "GitHub Action" + SKIP=no-commit-to-branch,commitizen-branch poetry run pre-commit run --all-files --hook-stage pre-push + shell: bash + - name: Upload coverage to Codecov + if: runner.os == 'Linux' + uses: codecov/codecov-action@v5 + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: ./coverage.xml + flags: unittests + name: codecov-umbrella diff --git a/.github/workflows/pythonpublish.yml b/.github/workflows/pythonpublish.yml new file mode 100644 index 0000000000..e3b3aa6f30 --- /dev/null +++ b/.github/workflows/pythonpublish.yml @@ -0,0 +1,30 @@ +name: Upload Python Package + +on: + push: + tags: + - "v*" + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + token: "${{ secrets.PERSONAL_ACCESS_TOKEN }}" + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: Install dependencies + run: | + python -m pip install -U pip poetry mkdocs mkdocs-material + poetry --version + poetry install + - name: Publish + env: + PYPI_USERNAME: ${{ secrets.PYPI_USERNAME }} + PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }} + run: | + ./scripts/publish diff --git a/poetry.lock b/poetry.lock index ca4013187e..16537950c5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,13 +2,13 @@ [[package]] name = "argcomplete" -version = "3.5.2" +version = "3.5.3" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.5.2-py3-none-any.whl", hash = "sha256:036d020d79048a5d525bc63880d7a4b8d1668566b8a76daf1144c0bbe0f63472"}, - {file = "argcomplete-3.5.2.tar.gz", hash = "sha256:23146ed7ac4403b70bd6026402468942ceba34a6732255b9edf5b7354f68a6bb"}, + {file = "argcomplete-3.5.3-py3-none-any.whl", hash = "sha256:2ab2c4a215c59fd6caaff41a869480a23e8f6a5f910b266c1808037f4e375b61"}, + {file = "argcomplete-3.5.3.tar.gz", hash = "sha256:c12bf50eded8aebb298c7b7da7a5ff3ee24dffd9f5281867dfe1424b58c55392"}, ] [package.extras] @@ -16,21 +16,18 @@ test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] [[package]] name = "asttokens" -version = "2.4.1" +version = "3.0.0" description = "Annotate AST trees with source code positions" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, - {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, + {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, + {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, ] -[package.dependencies] -six = ">=1.12.0" - [package.extras] -astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] -test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] +astroid = ["astroid (>=2,<4)"] +test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "babel" @@ -48,13 +45,13 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] [[package]] name = "certifi" -version = "2024.8.30" +version = "2024.12.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, - {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, + {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, + {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, ] [[package]] @@ -171,13 +168,13 @@ files = [ [[package]] name = "click" -version = "8.1.7" +version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, ] [package.dependencies] @@ -196,73 +193,73 @@ files = [ [[package]] name = "coverage" -version = "7.6.8" +version = "7.6.10" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" files = [ - {file = "coverage-7.6.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b39e6011cd06822eb964d038d5dff5da5d98652b81f5ecd439277b32361a3a50"}, - {file = "coverage-7.6.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:63c19702db10ad79151a059d2d6336fe0c470f2e18d0d4d1a57f7f9713875dcf"}, - {file = "coverage-7.6.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3985b9be361d8fb6b2d1adc9924d01dec575a1d7453a14cccd73225cb79243ee"}, - {file = "coverage-7.6.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:644ec81edec0f4ad17d51c838a7d01e42811054543b76d4ba2c5d6af741ce2a6"}, - {file = "coverage-7.6.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f188a2402f8359cf0c4b1fe89eea40dc13b52e7b4fd4812450da9fcd210181d"}, - {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e19122296822deafce89a0c5e8685704c067ae65d45e79718c92df7b3ec3d331"}, - {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:13618bed0c38acc418896005732e565b317aa9e98d855a0e9f211a7ffc2d6638"}, - {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:193e3bffca48ad74b8c764fb4492dd875038a2f9925530cb094db92bb5e47bed"}, - {file = "coverage-7.6.8-cp310-cp310-win32.whl", hash = "sha256:3988665ee376abce49613701336544041f2117de7b7fbfe91b93d8ff8b151c8e"}, - {file = "coverage-7.6.8-cp310-cp310-win_amd64.whl", hash = "sha256:f56f49b2553d7dd85fd86e029515a221e5c1f8cb3d9c38b470bc38bde7b8445a"}, - {file = "coverage-7.6.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:86cffe9c6dfcfe22e28027069725c7f57f4b868a3f86e81d1c62462764dc46d4"}, - {file = "coverage-7.6.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d82ab6816c3277dc962cfcdc85b1efa0e5f50fb2c449432deaf2398a2928ab94"}, - {file = "coverage-7.6.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13690e923a3932e4fad4c0ebfb9cb5988e03d9dcb4c5150b5fcbf58fd8bddfc4"}, - {file = "coverage-7.6.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4be32da0c3827ac9132bb488d331cb32e8d9638dd41a0557c5569d57cf22c9c1"}, - {file = "coverage-7.6.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44e6c85bbdc809383b509d732b06419fb4544dca29ebe18480379633623baafb"}, - {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:768939f7c4353c0fac2f7c37897e10b1414b571fd85dd9fc49e6a87e37a2e0d8"}, - {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e44961e36cb13c495806d4cac67640ac2866cb99044e210895b506c26ee63d3a"}, - {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ea8bb1ab9558374c0ab591783808511d135a833c3ca64a18ec927f20c4030f0"}, - {file = "coverage-7.6.8-cp311-cp311-win32.whl", hash = "sha256:629a1ba2115dce8bf75a5cce9f2486ae483cb89c0145795603d6554bdc83e801"}, - {file = "coverage-7.6.8-cp311-cp311-win_amd64.whl", hash = "sha256:fb9fc32399dca861584d96eccd6c980b69bbcd7c228d06fb74fe53e007aa8ef9"}, - {file = "coverage-7.6.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e683e6ecc587643f8cde8f5da6768e9d165cd31edf39ee90ed7034f9ca0eefee"}, - {file = "coverage-7.6.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1defe91d41ce1bd44b40fabf071e6a01a5aa14de4a31b986aa9dfd1b3e3e414a"}, - {file = "coverage-7.6.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7ad66e8e50225ebf4236368cc43c37f59d5e6728f15f6e258c8639fa0dd8e6d"}, - {file = "coverage-7.6.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fe47da3e4fda5f1abb5709c156eca207eacf8007304ce3019eb001e7a7204cb"}, - {file = "coverage-7.6.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:202a2d645c5a46b84992f55b0a3affe4f0ba6b4c611abec32ee88358db4bb649"}, - {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4674f0daa1823c295845b6a740d98a840d7a1c11df00d1fd62614545c1583787"}, - {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:74610105ebd6f33d7c10f8907afed696e79c59e3043c5f20eaa3a46fddf33b4c"}, - {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37cda8712145917105e07aab96388ae76e787270ec04bcb9d5cc786d7cbb8443"}, - {file = "coverage-7.6.8-cp312-cp312-win32.whl", hash = "sha256:9e89d5c8509fbd6c03d0dd1972925b22f50db0792ce06324ba069f10787429ad"}, - {file = "coverage-7.6.8-cp312-cp312-win_amd64.whl", hash = "sha256:379c111d3558272a2cae3d8e57e6b6e6f4fe652905692d54bad5ea0ca37c5ad4"}, - {file = "coverage-7.6.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0b0c69f4f724c64dfbfe79f5dfb503b42fe6127b8d479b2677f2b227478db2eb"}, - {file = "coverage-7.6.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c15b32a7aca8038ed7644f854bf17b663bc38e1671b5d6f43f9a2b2bd0c46f63"}, - {file = "coverage-7.6.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63068a11171e4276f6ece913bde059e77c713b48c3a848814a6537f35afb8365"}, - {file = "coverage-7.6.8-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f4548c5ead23ad13fb7a2c8ea541357474ec13c2b736feb02e19a3085fac002"}, - {file = "coverage-7.6.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b4b4299dd0d2c67caaaf286d58aef5e75b125b95615dda4542561a5a566a1e3"}, - {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c9ebfb2507751f7196995142f057d1324afdab56db1d9743aab7f50289abd022"}, - {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c1b4474beee02ede1eef86c25ad4600a424fe36cff01a6103cb4533c6bf0169e"}, - {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d9fd2547e6decdbf985d579cf3fc78e4c1d662b9b0ff7cc7862baaab71c9cc5b"}, - {file = "coverage-7.6.8-cp313-cp313-win32.whl", hash = "sha256:8aae5aea53cbfe024919715eca696b1a3201886ce83790537d1c3668459c7146"}, - {file = "coverage-7.6.8-cp313-cp313-win_amd64.whl", hash = "sha256:ae270e79f7e169ccfe23284ff5ea2d52a6f401dc01b337efb54b3783e2ce3f28"}, - {file = "coverage-7.6.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:de38add67a0af869b0d79c525d3e4588ac1ffa92f39116dbe0ed9753f26eba7d"}, - {file = "coverage-7.6.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b07c25d52b1c16ce5de088046cd2432b30f9ad5e224ff17c8f496d9cb7d1d451"}, - {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62a66ff235e4c2e37ed3b6104d8b478d767ff73838d1222132a7a026aa548764"}, - {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09b9f848b28081e7b975a3626e9081574a7b9196cde26604540582da60235fdf"}, - {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:093896e530c38c8e9c996901858ac63f3d4171268db2c9c8b373a228f459bbc5"}, - {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9a7b8ac36fd688c8361cbc7bf1cb5866977ece6e0b17c34aa0df58bda4fa18a4"}, - {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:38c51297b35b3ed91670e1e4efb702b790002e3245a28c76e627478aa3c10d83"}, - {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2e4e0f60cb4bd7396108823548e82fdab72d4d8a65e58e2c19bbbc2f1e2bfa4b"}, - {file = "coverage-7.6.8-cp313-cp313t-win32.whl", hash = "sha256:6535d996f6537ecb298b4e287a855f37deaf64ff007162ec0afb9ab8ba3b8b71"}, - {file = "coverage-7.6.8-cp313-cp313t-win_amd64.whl", hash = "sha256:c79c0685f142ca53256722a384540832420dff4ab15fec1863d7e5bc8691bdcc"}, - {file = "coverage-7.6.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ac47fa29d8d41059ea3df65bd3ade92f97ee4910ed638e87075b8e8ce69599e"}, - {file = "coverage-7.6.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:24eda3a24a38157eee639ca9afe45eefa8d2420d49468819ac5f88b10de84f4c"}, - {file = "coverage-7.6.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4c81ed2820b9023a9a90717020315e63b17b18c274a332e3b6437d7ff70abe0"}, - {file = "coverage-7.6.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd55f8fc8fa494958772a2a7302b0354ab16e0b9272b3c3d83cdb5bec5bd1779"}, - {file = "coverage-7.6.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f39e2f3530ed1626c66e7493be7a8423b023ca852aacdc91fb30162c350d2a92"}, - {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:716a78a342679cd1177bc8c2fe957e0ab91405bd43a17094324845200b2fddf4"}, - {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:177f01eeaa3aee4a5ffb0d1439c5952b53d5010f86e9d2667963e632e30082cc"}, - {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:912e95017ff51dc3d7b6e2be158dedc889d9a5cc3382445589ce554f1a34c0ea"}, - {file = "coverage-7.6.8-cp39-cp39-win32.whl", hash = "sha256:4db3ed6a907b555e57cc2e6f14dc3a4c2458cdad8919e40b5357ab9b6db6c43e"}, - {file = "coverage-7.6.8-cp39-cp39-win_amd64.whl", hash = "sha256:428ac484592f780e8cd7b6b14eb568f7c85460c92e2a37cb0c0e5186e1a0d076"}, - {file = "coverage-7.6.8-pp39.pp310-none-any.whl", hash = "sha256:5c52a036535d12590c32c49209e79cabaad9f9ad8aa4cbd875b68c4d67a9cbce"}, - {file = "coverage-7.6.8.tar.gz", hash = "sha256:8b2b8503edb06822c86d82fa64a4a5cb0760bb8f31f26e138ec743f422f37cfc"}, + {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, + {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5"}, + {file = "coverage-7.6.10-cp310-cp310-win32.whl", hash = "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244"}, + {file = "coverage-7.6.10-cp310-cp310-win_amd64.whl", hash = "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e"}, + {file = "coverage-7.6.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3"}, + {file = "coverage-7.6.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377"}, + {file = "coverage-7.6.10-cp311-cp311-win32.whl", hash = "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8"}, + {file = "coverage-7.6.10-cp311-cp311-win_amd64.whl", hash = "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609"}, + {file = "coverage-7.6.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853"}, + {file = "coverage-7.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852"}, + {file = "coverage-7.6.10-cp312-cp312-win32.whl", hash = "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359"}, + {file = "coverage-7.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247"}, + {file = "coverage-7.6.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9"}, + {file = "coverage-7.6.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694"}, + {file = "coverage-7.6.10-cp313-cp313-win32.whl", hash = "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6"}, + {file = "coverage-7.6.10-cp313-cp313-win_amd64.whl", hash = "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e"}, + {file = "coverage-7.6.10-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe"}, + {file = "coverage-7.6.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2"}, + {file = "coverage-7.6.10-cp313-cp313t-win32.whl", hash = "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312"}, + {file = "coverage-7.6.10-cp313-cp313t-win_amd64.whl", hash = "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d"}, + {file = "coverage-7.6.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a"}, + {file = "coverage-7.6.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d"}, + {file = "coverage-7.6.10-cp39-cp39-win32.whl", hash = "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18"}, + {file = "coverage-7.6.10-cp39-cp39-win_amd64.whl", hash = "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59"}, + {file = "coverage-7.6.10-pp39.pp310-none-any.whl", hash = "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f"}, + {file = "coverage-7.6.10.tar.gz", hash = "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23"}, ] [package.dependencies] @@ -412,13 +409,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "identify" -version = "2.6.3" +version = "2.6.4" description = "File identification library for Python" optional = false python-versions = ">=3.9" files = [ - {file = "identify-2.6.3-py2.py3-none-any.whl", hash = "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd"}, - {file = "identify-2.6.3.tar.gz", hash = "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02"}, + {file = "identify-2.6.4-py2.py3-none-any.whl", hash = "sha256:993b0f01b97e0568c179bb9196391ff391bfb88a99099dbf5ce392b68f42d0af"}, + {file = "identify-2.6.4.tar.gz", hash = "sha256:285a7d27e397652e8cafe537a6cc97dd470a970f48fb2e9d979aa38eae5513ac"}, ] [package.extras] @@ -438,29 +435,6 @@ files = [ [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] -[[package]] -name = "importlib-metadata" -version = "8.5.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, - {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, -] - -[package.dependencies] -zipp = ">=3.20" - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -perf = ["ipython"] -test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] -type = ["pytest-mypy"] - [[package]] name = "iniconfig" version = "2.0.0" @@ -474,13 +448,13 @@ files = [ [[package]] name = "ipython" -version = "8.18.0" +version = "8.31.0" description = "IPython: Productive Interactive Computing" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "ipython-8.18.0-py3-none-any.whl", hash = "sha256:d538a7a98ad9b7e018926447a5f35856113a85d08fd68a165d7871ab5175f6e0"}, - {file = "ipython-8.18.0.tar.gz", hash = "sha256:4feb61210160f75e229ce932dbf8b719bff37af123c0b985fd038b14233daa16"}, + {file = "ipython-8.31.0-py3-none-any.whl", hash = "sha256:46ec58f8d3d076a61d128fe517a51eb730e3aaf0c184ea8c17d16e366660c6a6"}, + {file = "ipython-8.31.0.tar.gz", hash = "sha256:b6a2274606bec6166405ff05e54932ed6e5cfecaca1fc05f2cacde7bb074d70b"}, ] [package.dependencies] @@ -489,25 +463,26 @@ decorator = "*" exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} +prompt_toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" -stack-data = "*" -traitlets = ">=5" -typing-extensions = {version = "*", markers = "python_version < \"3.10\""} +stack_data = "*" +traitlets = ">=5.13.0" +typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} [package.extras] -all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] black = ["black"] -doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli", "typing_extensions"] kernel = ["ipykernel"] +matplotlib = ["matplotlib"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] -test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] +test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] [[package]] name = "jedi" @@ -721,9 +696,6 @@ files = [ {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, ] -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - [package.extras] docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] @@ -873,7 +845,6 @@ files = [ click = ">=7.0" colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} jinja2 = ">=2.11.1" markdown = ">=3.3.6" markupsafe = ">=2.0.1" @@ -901,7 +872,6 @@ files = [ ] [package.dependencies] -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} mergedeep = ">=1.3.4" platformdirs = ">=2.2.0" pyyaml = ">=5.1" @@ -948,43 +918,49 @@ files = [ [[package]] name = "mypy" -version = "1.14.0" +version = "1.14.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e971c1c667007f9f2b397ffa80fa8e1e0adccff336e5e77e74cb5f22868bee87"}, - {file = "mypy-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e86aaeaa3221a278c66d3d673b297232947d873773d61ca3ee0e28b2ff027179"}, - {file = "mypy-1.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1628c5c3ce823d296e41e2984ff88c5861499041cb416a8809615d0c1f41740e"}, - {file = "mypy-1.14.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fadb29b77fc14a0dd81304ed73c828c3e5cde0016c7e668a86a3e0dfc9f3af3"}, - {file = "mypy-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:3fa76988dc760da377c1e5069200a50d9eaaccf34f4ea18428a3337034ab5a44"}, - {file = "mypy-1.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6e73c8a154eed31db3445fe28f63ad2d97b674b911c00191416cf7f6459fd49a"}, - {file = "mypy-1.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:273e70fcb2e38c5405a188425aa60b984ffdcef65d6c746ea5813024b68c73dc"}, - {file = "mypy-1.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1daca283d732943731a6a9f20fdbcaa927f160bc51602b1d4ef880a6fb252015"}, - {file = "mypy-1.14.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7e68047bedb04c1c25bba9901ea46ff60d5eaac2d71b1f2161f33107e2b368eb"}, - {file = "mypy-1.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:7a52f26b9c9b1664a60d87675f3bae00b5c7f2806e0c2800545a32c325920bcc"}, - {file = "mypy-1.14.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d5326ab70a6db8e856d59ad4cb72741124950cbbf32e7b70e30166ba7bbf61dd"}, - {file = "mypy-1.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bf4ec4980bec1e0e24e5075f449d014011527ae0055884c7e3abc6a99cd2c7f1"}, - {file = "mypy-1.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:390dfb898239c25289495500f12fa73aa7f24a4c6d90ccdc165762462b998d63"}, - {file = "mypy-1.14.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7e026d55ddcd76e29e87865c08cbe2d0104e2b3153a523c529de584759379d3d"}, - {file = "mypy-1.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:585ed36031d0b3ee362e5107ef449a8b5dfd4e9c90ccbe36414ee405ee6b32ba"}, - {file = "mypy-1.14.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9f6f4c0b27401d14c483c622bc5105eff3911634d576bbdf6695b9a7c1ba741"}, - {file = "mypy-1.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56b2280cedcb312c7a79f5001ae5325582d0d339bce684e4a529069d0e7ca1e7"}, - {file = "mypy-1.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:342de51c48bab326bfc77ce056ba08c076d82ce4f5a86621f972ed39970f94d8"}, - {file = "mypy-1.14.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:00df23b42e533e02a6f0055e54de9a6ed491cd8b7ea738647364fd3a39ea7efc"}, - {file = "mypy-1.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:e8c8387e5d9dff80e7daf961df357c80e694e942d9755f3ad77d69b0957b8e3f"}, - {file = "mypy-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b16738b1d80ec4334654e89e798eb705ac0c36c8a5c4798496cd3623aa02286"}, - {file = "mypy-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10065fcebb7c66df04b05fc799a854b1ae24d9963c8bb27e9064a9bdb43aa8ad"}, - {file = "mypy-1.14.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fbb7d683fa6bdecaa106e8368aa973ecc0ddb79a9eaeb4b821591ecd07e9e03c"}, - {file = "mypy-1.14.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3498cb55448dc5533e438cd13d6ddd28654559c8c4d1fd4b5ca57a31b81bac01"}, - {file = "mypy-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:c7b243408ea43755f3a21a0a08e5c5ae30eddb4c58a80f415ca6b118816e60aa"}, - {file = "mypy-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:14117b9da3305b39860d0aa34b8f1ff74d209a368829a584eb77524389a9c13e"}, - {file = "mypy-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af98c5a958f9c37404bd4eef2f920b94874507e146ed6ee559f185b8809c44cc"}, - {file = "mypy-1.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0b343a1d3989547024377c2ba0dca9c74a2428ad6ed24283c213af8dbb0710b"}, - {file = "mypy-1.14.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cdb5563c1726c85fb201be383168f8c866032db95e1095600806625b3a648cb7"}, - {file = "mypy-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:74e925649c1ee0a79aa7448baf2668d81cc287dc5782cff6a04ee93f40fb8d3f"}, - {file = "mypy-1.14.0-py3-none-any.whl", hash = "sha256:2238d7f93fc4027ed1efc944507683df3ba406445a2b6c96e79666a045aadfab"}, - {file = "mypy-1.14.0.tar.gz", hash = "sha256:822dbd184d4a9804df5a7d5335a68cf7662930e70b8c1bc976645d1509f9a9d6"}, + {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"}, + {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"}, + {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d"}, + {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b"}, + {file = "mypy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427"}, + {file = "mypy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f"}, + {file = "mypy-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c"}, + {file = "mypy-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1"}, + {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8"}, + {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f"}, + {file = "mypy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1"}, + {file = "mypy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae"}, + {file = "mypy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14"}, + {file = "mypy-1.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9"}, + {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11"}, + {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e"}, + {file = "mypy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89"}, + {file = "mypy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b"}, + {file = "mypy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255"}, + {file = "mypy-1.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34"}, + {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a"}, + {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9"}, + {file = "mypy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd"}, + {file = "mypy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107"}, + {file = "mypy-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31"}, + {file = "mypy-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6"}, + {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319"}, + {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac"}, + {file = "mypy-1.14.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b"}, + {file = "mypy-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837"}, + {file = "mypy-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35"}, + {file = "mypy-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc"}, + {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9"}, + {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb"}, + {file = "mypy-1.14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60"}, + {file = "mypy-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c"}, + {file = "mypy-1.14.1-py3-none-any.whl", hash = "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1"}, + {file = "mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6"}, ] [package.dependencies] @@ -1138,13 +1114,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prompt-toolkit" -version = "3.0.36" +version = "3.0.48" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, - {file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"}, + {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, + {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, ] [package.dependencies] @@ -1191,13 +1167,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.12" +version = "10.13" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.12-py3-none-any.whl", hash = "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77"}, - {file = "pymdown_extensions-10.12.tar.gz", hash = "sha256:b0ee1e0b2bef1071a47891ab17003bfe5bf824a398e13f49f8ed653b699369a7"}, + {file = "pymdown_extensions-10.13-py3-none-any.whl", hash = "sha256:80bc33d715eec68e683e04298946d47d78c7739e79d808203df278ee8ef89428"}, + {file = "pymdown_extensions-10.13.tar.gz", hash = "sha256:e0b351494dc0d8d14a1f52b39b1499a00ef1566b4ba23dc74f1eba75c736f5dd"}, ] [package.dependencies] @@ -1427,17 +1403,17 @@ pyyaml = "*" [[package]] name = "questionary" -version = "2.0.1" +version = "2.1.0" description = "Python library to build pretty command line user prompts ⭐️" optional = false python-versions = ">=3.8" files = [ - {file = "questionary-2.0.1-py3-none-any.whl", hash = "sha256:8ab9a01d0b91b68444dff7f6652c1e754105533f083cbe27597c8110ecc230a2"}, - {file = "questionary-2.0.1.tar.gz", hash = "sha256:bcce898bf3dbb446ff62830c86c5c6fb9a22a54146f0f5597d3da43b10d8fc8b"}, + {file = "questionary-2.1.0-py3-none-any.whl", hash = "sha256:44174d237b68bc828e4878c763a9ad6790ee61990e0ae72927694ead57bab8ec"}, + {file = "questionary-2.1.0.tar.gz", hash = "sha256:6302cdd645b19667d8f6e6634774e9538bfcd1aad9be287e743d96cacaf95587"}, ] [package.dependencies] -prompt_toolkit = ">=2.0,<=3.0.36" +prompt_toolkit = ">=2.0,<4.0" [[package]] name = "regex" @@ -1584,40 +1560,40 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.8.4" +version = "0.8.5" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.8.4-py3-none-linux_armv6l.whl", hash = "sha256:58072f0c06080276804c6a4e21a9045a706584a958e644353603d36ca1eb8a60"}, - {file = "ruff-0.8.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ffb60904651c00a1e0b8df594591770018a0f04587f7deeb3838344fe3adabac"}, - {file = "ruff-0.8.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6ddf5d654ac0d44389f6bf05cee4caeefc3132a64b58ea46738111d687352296"}, - {file = "ruff-0.8.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e248b1f0fa2749edd3350a2a342b67b43a2627434c059a063418e3d375cfe643"}, - {file = "ruff-0.8.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf197b98ed86e417412ee3b6c893f44c8864f816451441483253d5ff22c0e81e"}, - {file = "ruff-0.8.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c41319b85faa3aadd4d30cb1cffdd9ac6b89704ff79f7664b853785b48eccdf3"}, - {file = "ruff-0.8.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:9f8402b7c4f96463f135e936d9ab77b65711fcd5d72e5d67597b543bbb43cf3f"}, - {file = "ruff-0.8.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4e56b3baa9c23d324ead112a4fdf20db9a3f8f29eeabff1355114dd96014604"}, - {file = "ruff-0.8.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:736272574e97157f7edbbb43b1d046125fce9e7d8d583d5d65d0c9bf2c15addf"}, - {file = "ruff-0.8.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5fe710ab6061592521f902fca7ebcb9fabd27bc7c57c764298b1c1f15fff720"}, - {file = "ruff-0.8.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:13e9ec6d6b55f6da412d59953d65d66e760d583dd3c1c72bf1f26435b5bfdbae"}, - {file = "ruff-0.8.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:97d9aefef725348ad77d6db98b726cfdb075a40b936c7984088804dfd38268a7"}, - {file = "ruff-0.8.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ab78e33325a6f5374e04c2ab924a3367d69a0da36f8c9cb6b894a62017506111"}, - {file = "ruff-0.8.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:8ef06f66f4a05c3ddbc9121a8b0cecccd92c5bf3dd43b5472ffe40b8ca10f0f8"}, - {file = "ruff-0.8.4-py3-none-win32.whl", hash = "sha256:552fb6d861320958ca5e15f28b20a3d071aa83b93caee33a87b471f99a6c0835"}, - {file = "ruff-0.8.4-py3-none-win_amd64.whl", hash = "sha256:f21a1143776f8656d7f364bd264a9d60f01b7f52243fbe90e7670c0dfe0cf65d"}, - {file = "ruff-0.8.4-py3-none-win_arm64.whl", hash = "sha256:9183dd615d8df50defa8b1d9a074053891ba39025cf5ae88e8bcb52edcc4bf08"}, - {file = "ruff-0.8.4.tar.gz", hash = "sha256:0d5f89f254836799af1615798caa5f80b7f935d7a670fad66c5007928e57ace8"}, + {file = "ruff-0.8.5-py3-none-linux_armv6l.whl", hash = "sha256:5ad11a5e3868a73ca1fa4727fe7e33735ea78b416313f4368c504dbeb69c0f88"}, + {file = "ruff-0.8.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:f69ab37771ea7e0715fead8624ec42996d101269a96e31f4d31be6fc33aa19b7"}, + {file = "ruff-0.8.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b5462d7804558ccff9c08fe8cbf6c14b7efe67404316696a2dde48297b1925bb"}, + {file = "ruff-0.8.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d56de7220a35607f9fe59f8a6d018e14504f7b71d784d980835e20fc0611cd50"}, + {file = "ruff-0.8.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9d99cf80b0429cbebf31cbbf6f24f05a29706f0437c40413d950e67e2d4faca4"}, + {file = "ruff-0.8.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b75ac29715ac60d554a049dbb0ef3b55259076181c3369d79466cb130eb5afd"}, + {file = "ruff-0.8.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c9d526a62c9eda211b38463528768fd0ada25dad524cb33c0e99fcff1c67b5dc"}, + {file = "ruff-0.8.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:587c5e95007612c26509f30acc506c874dab4c4abbacd0357400bd1aa799931b"}, + {file = "ruff-0.8.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:622b82bf3429ff0e346835ec213aec0a04d9730480cbffbb6ad9372014e31bbd"}, + {file = "ruff-0.8.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f99be814d77a5dac8a8957104bdd8c359e85c86b0ee0e38dca447cb1095f70fb"}, + {file = "ruff-0.8.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c01c048f9c3385e0fd7822ad0fd519afb282af9cf1778f3580e540629df89725"}, + {file = "ruff-0.8.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7512e8cb038db7f5db6aae0e24735ff9ea03bb0ed6ae2ce534e9baa23c1dc9ea"}, + {file = "ruff-0.8.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:762f113232acd5b768d6b875d16aad6b00082add40ec91c927f0673a8ec4ede8"}, + {file = "ruff-0.8.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:03a90200c5dfff49e4c967b405f27fdfa81594cbb7c5ff5609e42d7fe9680da5"}, + {file = "ruff-0.8.5-py3-none-win32.whl", hash = "sha256:8710ffd57bdaa6690cbf6ecff19884b8629ec2a2a2a2f783aa94b1cc795139ed"}, + {file = "ruff-0.8.5-py3-none-win_amd64.whl", hash = "sha256:4020d8bf8d3a32325c77af452a9976a9ad6455773bcb94991cf15bd66b347e47"}, + {file = "ruff-0.8.5-py3-none-win_arm64.whl", hash = "sha256:134ae019ef13e1b060ab7136e7828a6d83ea727ba123381307eb37c6bd5e01cb"}, + {file = "ruff-0.8.5.tar.gz", hash = "sha256:1098d36f69831f7ff2a1da3e6407d5fbd6dfa2559e4f74ff2d260c5588900317"}, ] [[package]] name = "six" -version = "1.16.0" +version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] [[package]] @@ -1655,13 +1631,43 @@ tests = ["pytest", "pytest-cov"] [[package]] name = "tomli" -version = "2.1.0" +version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" files = [ - {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, - {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] [[package]] @@ -1731,13 +1737,13 @@ files = [ [[package]] name = "types-pyyaml" -version = "6.0.12.20241221" +version = "6.0.12.20241230" description = "Typing stubs for PyYAML" optional = false python-versions = ">=3.8" files = [ - {file = "types_PyYAML-6.0.12.20241221-py3-none-any.whl", hash = "sha256:0657a4ff8411a030a2116a196e8e008ea679696b5b1a8e1a6aa8ebb737b34688"}, - {file = "types_pyyaml-6.0.12.20241221.tar.gz", hash = "sha256:4f149aa893ff6a46889a30af4c794b23833014c469cc57cbc3ad77498a58996f"}, + {file = "types_PyYAML-6.0.12.20241230-py3-none-any.whl", hash = "sha256:fa4d32565219b68e6dee5f67534c722e53c00d1cfc09c435ef04d7353e1e96e6"}, + {file = "types_pyyaml-6.0.12.20241230.tar.gz", hash = "sha256:7f07622dbd34bb9c8b264fe860a17e0efcad00d50b5f27e93984909d9363498c"}, ] [[package]] @@ -1764,13 +1770,13 @@ files = [ [[package]] name = "urllib3" -version = "2.2.3" +version = "2.3.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, - {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, + {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, + {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, ] [package.extras] @@ -1781,13 +1787,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.27.1" +version = "20.28.0" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" files = [ - {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, - {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, + {file = "virtualenv-20.28.0-py3-none-any.whl", hash = "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0"}, + {file = "virtualenv-20.28.0.tar.gz", hash = "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa"}, ] [package.dependencies] @@ -1926,26 +1932,7 @@ files = [ {file = "wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801"}, ] -[[package]] -name = "zipp" -version = "3.21.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.9" -files = [ - {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, - {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, -] - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] -type = ["pytest-mypy"] - [metadata] lock-version = "2.0" -python-versions = ">=3.9" -content-hash = "fa9c69ee7854186da9f4a78db660141c80323ab7412662e09d751522c36c77ba" +python-versions = ">=3.10,<4.0" +content-hash = "39073bb45c47ae1df76dcd67a9c51a6fa53aea3293ab5e58c3af4d177b3a76a5" diff --git a/pyproject.toml b/pyproject.toml index e22980436e..79f0e92f5f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ classifiers = [ packages = [{ include = "commitizen" }, { include = "commitizen/py.typed" }] [tool.poetry.dependencies] -python = ">=3.9" +python = ">=3.10,<4.0" questionary = "^2.0" decli = "^0.6.0" colorama = "^0.4.1"