diff --git a/docs/changes/5.5.1.md b/docs/changes/5.5.1.md index a1e0eb8d68..d0823a3801 100644 --- a/docs/changes/5.5.1.md +++ b/docs/changes/5.5.1.md @@ -12,7 +12,8 @@ Release date: `2024-xx-xx` ### Direct Transfer -- [NXDRIVE-2](https://jira.nuxeo.com/browse/NXDRIVE-2): +- [NXDRIVE-2909](https://jira.nuxeo.com/browse/NXDRIVE-2909): Set container title when defining the Folder type from Document Type Selection using Direct Transfer +- [NXDRIVE-2915](https://jira.nuxeo.com/browse/NXDRIVE-2915): Translate "Document type" and "container type" labels on Direct Transfer popup ### Task Management - [NXDRIVE-2](https://jira.nuxeo.com/browse/NXDRIVE-2): @@ -20,10 +21,12 @@ Release date: `2024-xx-xx` ## GUI - [NXDRIVE-2](https://jira.nuxeo.com/browse/NXDRIVE-2): +- [NXDRIVE-2962] (https://jira.nuxeo.com/browse/NXDRIVE-2962): Update Translation Files ## Packaging / Build -- [NXDRIVE-2](https://jira.nuxeo.com/browse/NXDRIVE-2): +- [NXDRIVE-2970](https://jira.nuxeo.com/browse/NXDRIVE-2970): Fix security issue: urllib3's Proxy-Authorization request header isn't stripped during cross-origin redirects +- [NXDRIVE-2971](https://jira.nuxeo.com/browse/NXDRIVE-2971): Fix security issue: pyca/cryptography has a vulnerable OpenSSL included in cryptography wheels ## Tests @@ -36,8 +39,13 @@ Release date: `2024-xx-xx` ## Minor Changes - Upgraded `authlib` from 1.3.0 to 1.3.1 -- Upgraded `black` from 23.12.1 to 24.8.0 +- Upgraded `boto3` from 1.34.17 to 1.35.21 +- Upgraded `botocore` from 1.34.17 to 1.35.21 +- Upgraded `cachetools` from 5.3.3 to 5.5.0 - Upgraded `certifi` from 2023.7.22 to 2024.7.4 +- Upgraded `cryptography` from 42.0.5 to 43.0.1 +- Upgraded `docutils` from 0.20.1 to 0.21.2 +- Upgraded `filelock` from 3.14.0 to 3.16.1 - Upgraded `flake8` from 6.1.0 to 7.1.1 - Upgraded `typing-extensions` from 4.9.0 to 4.12.2 - Upgraded `pre-commit` from 2.16.0 to 3.8.0 @@ -46,6 +54,7 @@ Release date: `2024-xx-xx` - Upgraded `pyflakes` from 3.1.0 to 3.2.0 - Upgraded `pytest-benchmark` from 3.4.1 to 4.0.0 - Upgraded `setuptools` from 69.5.1 to 72.1.0 +- Upgraded `urllib3` from 1.26.12 to 1.26.19 - Upgraded `zipp` from 3.18.0 to 3.20.0 ## Technical Changes diff --git a/nxdrive/client/uploader/direct_transfer.py b/nxdrive/client/uploader/direct_transfer.py index 95143edfe5..d957af4c03 100644 --- a/nxdrive/client/uploader/direct_transfer.py +++ b/nxdrive/client/uploader/direct_transfer.py @@ -90,7 +90,9 @@ def upload( "entity-type": "document", "name": doc_pair.local_name, "type": doc_pair.doc_type, - "properties{'dc:title'}": doc_pair.local_name, + "properties": { + "dc:title": doc_pair.local_name, + }, } item = self.remote.upload_folder_type( doc_pair.remote_parent_path, diff --git a/nxdrive/data/i18n/i18n-fr.json b/nxdrive/data/i18n/i18n-fr.json index b2b50a714f..a68c266b1f 100644 --- a/nxdrive/data/i18n/i18n-fr.json +++ b/nxdrive/data/i18n/i18n-fr.json @@ -29,7 +29,7 @@ "CHANNEL": "Canal", "CHANNEL_CHANGE_SETTINGS": "Canal de mise à jour", "CHANNEL_CONFIRM_DANGEROUS": "Confirmer le canal de développement ?", - "CHOOSE_PARTICIPANTS": "Choisir les participants", + "CHOOSE_PARTICIPANTS": "Choisir les participants %1", "CLOSE": "Fermer", "COMPLETED": "Terminés", "COMPLETED_ON": "Terminée le %1", @@ -49,7 +49,7 @@ "CONNECTION_REFUSED": "Connexion refusée", "CONNECTION_SUCCESS": "Connexion réussie", "CONNECTION_UNKNOWN": "Une erreur inconnue s'est produite lors de la connexion", - "CONSOLIDATE_REVIEW": "Consolider la consultation", + "CONSOLIDATE_REVIEW": "Consolider la consultation %1", "CONTAINER_TYPE": "Type de dossier", "CONTEXT_MENU_1": "Voir en ligne", "CONTEXT_MENU_2": "Copier le lien de partage", @@ -403,7 +403,7 @@ "USE_LIGHT_ICONS": "Utiliser des icônes claires", "USE_SENTRY": "Activer les rapports d'erreur", "USERNAME": "Utilisateur", - "VALIDATE_DOCUMENT": "Valider le document", + "VALIDATE_DOCUMENT": "Valider le document %1", "WEB_AUTHENTICATION_WINDOW_TITLE": "Authentification web", "WELCOME_MESSAGE": "Connectez-vous et synchronisez vos fichiers avec Nuxeo.", "WINDOWS_ERROR_TITLE": "Erreur de document", diff --git a/nxdrive/data/i18n/i18n-ja.json b/nxdrive/data/i18n/i18n-ja.json index fd1a5a8e1f..532c20d440 100644 --- a/nxdrive/data/i18n/i18n-ja.json +++ b/nxdrive/data/i18n/i18n-ja.json @@ -29,7 +29,7 @@ "CHANNEL": "チャンネル", "CHANNEL_CHANGE_SETTINGS": "チャンネルの更新", "CHANNEL_CONFIRM_DANGEROUS": "開発チャンネルを確認しますか?", - "CHOOSE_PARTICIPANTS": "参加者を選択", + "CHOOSE_PARTICIPANTS": "参加者を選択 %1", "CLOSE": "閉じる", "COMPLETED": "完了", "COMPLETED_ON": "%1上で完了", @@ -191,7 +191,7 @@ "FOLDER_USED": "別のNuxeo Driveアカウントによって使用されているフォルダ", "FREE_DISK_SPACE": "(空きディスク容量: %1)", "GENERATING": "生成中…", - "GIVE_OPINION": "ご意見をお聞かせください", + "GIVE_OPINION": "ご意見をお聞かせください %1", "HANDLE_TASKS": "タスクの処理", "HELP": "ヘルプ", "HISTORY": "履歴", diff --git a/nxdrive/data/i18n/i18n.json b/nxdrive/data/i18n/i18n.json index 00964d7e4f..e5a90c2921 100644 --- a/nxdrive/data/i18n/i18n.json +++ b/nxdrive/data/i18n/i18n.json @@ -11,11 +11,13 @@ "ADVANCED_SETTINGS": "Advanced settings", "AGO": "ago", "APPLY": "Apply", + "AUDIO": "Audio", "AUTOLOCK": "Autolock", "AUTH_EXPIRED": "Authentication expired", "AUTH_UPDATE_ACTION": "Click here to log back in", "AUTOMATIC": "Use Automatic Configuration Script", "AUTOSTART": "Start on boot", + "AUTOMATICS": "Automatic", "AUTOUPDATE": "Auto install new updates", "AUTOUPDATE_DOWNGRADE": "Version not compatible with the server, a downgrade to %1 is needed. Synchronization won't start until then.", "AUTOUPDATE_UPGRADE": "A new version %1 is available.", @@ -57,7 +59,7 @@ "CONTEXT_MENU_4": "Upload content", "CONTINUE": "Continue", "CONTINUE_USING": "Continue using Drive %1", - "CREATE": "Create", + "CREATE": "create", "CREATE_REPORT": "Generate bug report", "DATETIME_FORMAT": "%x %X", "DAYS": "Day(s)", @@ -176,12 +178,14 @@ "FEATURE_SYNCHRONIZATION": "Enable or disable the bidirectional synchronization between the local environment and the Nuxeo Platform.\nA restart is needed to apply changes.", "FEATURE_TASKS_MANAGEMENT": "Handle your tasks from Nuxeo Drive and receive notifications and reminders when a new task is assigned to you.", "FEEDBACK_LINK": "Something is missing? Share your feedback here.", + "FILE": "File", "FILE_ALREADY_EXISTS": "There is already a file named \"%1\" in this folder. Do you want to replace it with the one you're moving?", "FILE_ALREADY_EXISTS_HEADER": "A duplicate file has been found.", "FILE_PATH": "Path: %1", "FILTERS_WINDOW_TITLE": "%1 - Filters", "FILTERS_DISABLED": "You must wait for current synchronization actions to be done before filtering some folders.", "FINALIZING": "Finalizing ...", + "FOLDER": "Folder", "FOLDER_DOES_NOT_EXISTS": "This folder does not exist", "FOLDER_DUPLICATES_DETECTED": "Duplicate folder detected", "FOLDER_DUPLICATES_MSG": "The following folder(s) already exist under %2:Please rename them or process to several transfers within those folders.", @@ -197,6 +201,7 @@ "HISTORY": "History", "HOST": "Host", "HOURS_AGO": "%1 hours ago", + "IGNORE": "Ignore", "IGNORES_SYSTRAY": "Ignored Files (%1)", "IGNORE_PAIR": "Ignore this error", "IGNORE_REASON_CORRUPT": "This file is ignored because its integrity cannot be verified.", @@ -295,11 +300,14 @@ "OPEN_ROOT_FOLDER": "Open %1 folder", "OPEN_SETTINGS": "Open settings", "OPEN_WINDOW": "Open window", + "ORDERED_FOLDER": "Ordered Folder", "OTHER": "Other", + "OVERRIDE": "Override", "PASSWORD": "Password", "PENDING_TASKS": "Review required", "PERSONAL_SPACE": "Personal space", "PENDING_TASK_REVIEWS": "New task to review", + "PICTURE": "Picture", "PROXY": "Proxy", "PROXY_APPLIED": "Proxy settings have been updated", "PROXY_CHANGE_SETTINGS": "Proxy", @@ -404,6 +412,7 @@ "USE_SENTRY": "Enable error reporting", "USERNAME": "Username", "VALIDATE_DOCUMENT": "Validate the Document %1", + "VIDEO": "Video", "WEB_AUTHENTICATION_WINDOW_TITLE": "Web Authentication", "WELCOME_MESSAGE": "Set your account and synchronize your files with the Nuxeo Platform.", "WINDOWS_ERROR_TITLE": "Document error", diff --git a/nxdrive/gui/constants.py b/nxdrive/gui/constants.py new file mode 100644 index 0000000000..63224edef6 --- /dev/null +++ b/nxdrive/gui/constants.py @@ -0,0 +1,24 @@ +from ..translator import Translator + + +def get_known_types_translations() -> dict: + KNOWN_FOLDER_TYPES = { + "OrderedFolder": Translator.get("ORDERED_FOLDER"), + "Folder": Translator.get("FOLDER"), + } + KNOWN_FILE_TYPES = { + "Audio": Translator.get("AUDIO"), + "File": Translator.get("FILE"), + "Picture": Translator.get("PICTURE"), + "Video": Translator.get("VIDEO"), + } + DEFAULT_TYPES = { + "Automatic": Translator.get("AUTOMATICS"), + "Create": Translator.get("CREATE"), + } + + return { + "FOLDER_TYPES": KNOWN_FOLDER_TYPES, + "FILE_TYPES": KNOWN_FILE_TYPES, + "DEFAULT": DEFAULT_TYPES, + } diff --git a/nxdrive/gui/folders_dialog.py b/nxdrive/gui/folders_dialog.py index 016cf93f26..891efbda97 100644 --- a/nxdrive/gui/folders_dialog.py +++ b/nxdrive/gui/folders_dialog.py @@ -33,6 +33,7 @@ ) from ..translator import Translator from ..utils import find_icon, get_tree_list, sizeof_fmt +from .constants import get_known_types_translations from .folders_model import FilteredDocuments, FoldersOnly from .folders_treeview import DocumentTreeView, FolderTreeView @@ -269,6 +270,11 @@ def __init__( "dt_last_duplicates_behavior", default="create" ) + _types = get_known_types_translations() + self.KNOWN_FOLDER_TYPES = _types.get("FOLDER_TYPES", {}) + self.KNOWN_FILE_TYPES = _types.get("FILE_TYPES", {}) + self.DEFAULT_TYPES = _types.get("DEFAULT", {}) + self.vertical_layout.addWidget(self._add_group_local()) self.vertical_layout.addWidget(self._add_group_remote()) self.vertical_layout.addWidget(self._add_group_options()) @@ -407,21 +413,35 @@ def _open_duplicates_doc(self, _: bool) -> None: """Open the duplicates management documentation in a browser tab.""" webbrowser.open_new_tab(DOC_URL) + def _check_for_known_types(self, is_folder_type: bool, /) -> None: + if is_folder_type: + for key, val in self.KNOWN_FOLDER_TYPES.items(): + if key in self.containerTypeList: + self.containerTypeList.remove(key) + self.containerTypeList.append(val) + else: + for key, val in self.KNOWN_FILE_TYPES.items(): + if key in self.docTypeList: + self.docTypeList.remove(key) + self.docTypeList.append(val) + def update_file_group(self, /) -> None: self.cbDocType.clear() - self.cbDocType.addItem("Automatic", "create") + self.cbContainerType.clear() + if values := list(self.DEFAULT_TYPES.values()): + self.cbContainerType.addItem(values[0], values[1]) + self.cbDocType.addItem(values[0], values[1]) if self.remote_folder_ref: self.docTypeList = self.engine.remote.get_doc_enricher( self.remote_folder_ref, "subtypes", False ) - + self._check_for_known_types(False) self.cbDocType.addItems(self.docTypeList) - self.cbContainerType.clear() - self.cbContainerType.addItem("Automatic", "create") if self.remote_folder_ref: self.containerTypeList = self.engine.remote.get_doc_enricher( self.remote_folder_ref, "subtypes", True ) + self._check_for_known_types(True) self.cbContainerType.addItems(self.containerTypeList) def _add_subgroup_doc_type(self, layout: QVBoxLayout, /) -> None: @@ -509,6 +529,18 @@ def _find_folders_duplicates(self) -> List[str]: return folders + def get_known_type_key(self, is_folder: bool, type: str, /) -> str: + if type in self.DEFAULT_TYPES.values(): + original_list = self.DEFAULT_TYPES + else: + original_list = ( + self.KNOWN_FOLDER_TYPES if is_folder else self.KNOWN_FILE_TYPES + ) + try: + return list(original_list.keys())[list(original_list.values()).index(type)] + except Exception: + return type + def accept(self) -> None: """Action to do when the OK button is clicked.""" super().accept() @@ -518,9 +550,8 @@ def accept(self) -> None: if self.cbDocType.currentIndex() == 0 else self.cbDocType.currentText() ) - folder_duplicates = self._find_folders_duplicates() - if folder_duplicates: + if folder_duplicates := self._find_folders_duplicates(): self.application.folder_duplicate_warning( folder_duplicates, self.remote_folder_title, @@ -535,6 +566,8 @@ def accept(self) -> None: doc_type = ( self.cbDocType.currentText() if self.cbDocType.currentIndex() != 0 else "" ) + doc_type = self.get_known_type_key(False, doc_type) + cont_type = self.get_known_type_key(True, cont_type) self.engine.direct_transfer_async( self.paths, self.remote_folder.text(), diff --git a/tests/functional/test_document_types.py b/tests/functional/test_document_types.py new file mode 100644 index 0000000000..63a47909bb --- /dev/null +++ b/tests/functional/test_document_types.py @@ -0,0 +1,22 @@ +from pathlib import Path + +from nxdrive.gui.constants import get_known_types_translations +from nxdrive.translator import Translator + + +def get_folder(folder) -> Path: + return Path(__file__).parent.parent / "resources" / folder + + +def test_get_known_types_translations(): + Translator(get_folder("i18n")) + assert Translator.locale() == "en" + res = get_known_types_translations() + + known_folder_types = res.get("FOLDER_TYPES", {}) + known_file_types = res.get("FILE_TYPES", {}) + default_types = res.get("DEFAULT", {}) + + assert known_folder_types["Folder"] == Translator.get("FOLDER") + assert known_file_types["Audio"] == Translator.get("AUDIO") + assert default_types["Automatic"] == Translator.get("AUTOMATICS") diff --git a/tools/deps/requirements-tox.txt b/tools/deps/requirements-tox.txt index c53d0291bf..462bb84655 100644 --- a/tools/deps/requirements-tox.txt +++ b/tools/deps/requirements-tox.txt @@ -6,9 +6,9 @@ appdirs==1.4.4 \ --hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128 \ --hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 # via virtualenv -cachetools==5.3.3 \ - --hash=sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945 \ - --hash=sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105 +cachetools==5.5.0 \ + --hash=sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292 \ + --hash=sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a # via tox chardet==5.2.0 \ --hash=sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7 \ @@ -22,9 +22,9 @@ distlib==0.3.8 \ --hash=sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784 \ --hash=sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64 # via virtualenv -filelock==3.14.0 \ - --hash=sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f \ - --hash=sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a +filelock==3.16.1 \ + --hash=sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0 \ + --hash=sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435 # via tox importlib-metadata==7.0.1 \ --hash=sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e \ diff --git a/tools/deps/requirements.txt b/tools/deps/requirements.txt index 7470c82aeb..67334afb75 100644 --- a/tools/deps/requirements.txt +++ b/tools/deps/requirements.txt @@ -6,13 +6,13 @@ authlib==1.3.1 \ --hash=sha256:7ae843f03c06c5c0debd63c9db91f9fda64fa62a42a77419fa15fbb7e7a58917 \ --hash=sha256:d35800b973099bbadc49b42b256ecb80041ad56b7fe1216a362c7943c088f377 # via nuxeo -boto3==1.34.17 \ - --hash=sha256:1efc02be786884034d503d59c018cf7650d0cff9fcb37cd2eb49b802a6fe6111 \ - --hash=sha256:8ca248cc84e7e859e4e276eb9c4309fa01a3e58473bf48d6c33448be870c2bb8 +boto3==1.35.21 \ + --hash=sha256:247f88eedce9ae4e014a8fc14a9473759bb8e391460d49396a3b600fb649f33b \ + --hash=sha256:db5fbbd10248db060f2ccce3ae17764f1641c99c8b9f51d422c26ebe25703a1e # via nuxeo -botocore==1.34.17 \ - --hash=sha256:7272c39032c6f1d62781e4c8445d9a1d9140c2bf52ba7ee66bf6db559c4b2427 \ - --hash=sha256:e48a662f3a6919219276b55085e8f73c3347966675f55e9d448be30cf79678ee +botocore==1.35.21 \ + --hash=sha256:3db9ddfe521edc0753fc8c68caef71c7806e1d2d21ce8cbabc2065b7d79192f2 \ + --hash=sha256:db917e7d7b3a2eed1310c6496784bc813c91f020a021c2ab5f9df7d28cdb4f1d # via boto3, s3transfer certifi==2024.7.4 \ --hash=sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b \ @@ -80,46 +80,41 @@ charset-normalizer==2.1.1 \ --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f # via requests -cryptography==42.0.5 \ - --hash=sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee \ - --hash=sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576 \ - --hash=sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d \ - --hash=sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30 \ - --hash=sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413 \ - --hash=sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb \ - --hash=sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da \ - --hash=sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4 \ - --hash=sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd \ - --hash=sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc \ - --hash=sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8 \ - --hash=sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1 \ - --hash=sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc \ - --hash=sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e \ - --hash=sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8 \ - --hash=sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940 \ - --hash=sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400 \ - --hash=sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7 \ - --hash=sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16 \ - --hash=sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278 \ - --hash=sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74 \ - --hash=sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec \ - --hash=sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1 \ - --hash=sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2 \ - --hash=sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c \ - --hash=sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922 \ - --hash=sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a \ - --hash=sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6 \ - --hash=sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1 \ - --hash=sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e \ - --hash=sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac \ - --hash=sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7 +cryptography==43.0.1 \ + --hash=sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494 \ + --hash=sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806 \ + --hash=sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d \ + --hash=sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062 \ + --hash=sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2 \ + --hash=sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4 \ + --hash=sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1 \ + --hash=sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85 \ + --hash=sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84 \ + --hash=sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042 \ + --hash=sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d \ + --hash=sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962 \ + --hash=sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2 \ + --hash=sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa \ + --hash=sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d \ + --hash=sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365 \ + --hash=sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96 \ + --hash=sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47 \ + --hash=sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d \ + --hash=sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d \ + --hash=sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c \ + --hash=sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb \ + --hash=sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277 \ + --hash=sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172 \ + --hash=sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034 \ + --hash=sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a \ + --hash=sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289 # via authlib, jwt distro==1.5.0 ; sys_platform == "linux" \ --hash=sha256:df74eed763e18d10d0da624258524ae80486432cd17392d9c3d96f5e83cd2799 \ --hash=sha256:0e58756ae38fbd8fc3020d54badb8eae17c5b9dcbed388b17bb55b8a5928df92 -docutils==0.20.1 \ - --hash=sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6 \ - --hash=sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b +docutils==0.21.2 \ + --hash=sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f \ + --hash=sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2 # via boto3 dukpy==0.3.1 \ --hash=sha256:01a81053d74e6c19b4aac8863503e163efed1ea6609a786e1ea961d09628b4ea \ @@ -425,9 +420,9 @@ tld==0.13 \ --hash=sha256:93dde5e1c04bdf1844976eae440706379d21f4ab235b73c05d7483e074fb5629 \ --hash=sha256:f75b2be080f767ed17c2338a339eaa4fab5792586319ca819119da252f9f3749 # via pypac -urllib3==1.26.12 \ - --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ - --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 +urllib3==1.26.19 \ + --hash=sha256:37a0344459b199fce0e80b0d3569837ec6b6937435c5244e7fd73fa6006830f3 \ + --hash=sha256:3e3d753a8618b86d7de333b4223005f68720bcd6a7d2bcb9fbd2229ec7c1e429 # via # botocore # requests