diff --git a/docs/design/gui-show-hidden-parameters.md b/docs/design/gui-show-hidden-parameters.md new file mode 100644 index 000000000..4a9f89a66 --- /dev/null +++ b/docs/design/gui-show-hidden-parameters.md @@ -0,0 +1,119 @@ +# Design: `--show-hidden-parameters` for GUI Job Submission + +## Problem + +Open Job Description templates can mark parameters with `userInterface.control: HIDDEN` to +exclude them from the submission UI. This is useful for parameters that are set programmatically, +have fixed values, or are generally not changed by users. However, during development and debugging, +there is no way to inspect or override these values through the GUI — you have to edit `parameter_values.yaml` +by hand and re-submit from the CLI. + +## Solution + +Add a `--show-hidden-parameters` flag to `deadline bundle gui-submit`. When set, every `HIDDEN` parameter +is rendered with the default widget for its type instead of being invisible. Users can see the +current value, modify it, and submit with the override — all within the normal GUI workflow. + +```bash +deadline bundle gui-submit --show-hidden-parameters /path/to/bundle +``` + +Without the flag, behavior is unchanged. + +## How It Works + +### Data flow + +The flag threads through the system as a boolean: + +``` +CLI (--show-hidden-parameters) + → show_job_bundle_submitter(show_hidden_parameters=...) + → JobBundleSettings.show_hidden_parameters + → SubmitJobToDeadlineDialog(show_hidden_parameters=...) + ├─ SharedJobSettingsWidget(show_hidden_parameters=...) # queue environment parameters + │ └─ OpenJDParametersWidget(show_hidden_parameters=...) + └─ JobBundleSettingsWidget(initial_settings) # job bundle parameters + └─ OpenJDParametersWidget(show_hidden_parameters=...) +``` + +Both the job bundle parameters tab and the shared (queue environment) parameters tab receive +the flag, so hidden parameters from any source are revealed. + +### Widget resolution + +The core logic lives in `OpenJDParametersWidget.rebuild_ui`. For each parameter: + +1. Resolve the control type via `get_ui_control_for_parameter_definition(parameter)`. +2. If the result is `HIDDEN` and `show_hidden_parameters` is true, create a shallow copy of the parameter + dict without `userInterface` and re-resolve. This produces the default widget for the + parameter's type (e.g. `LINE_EDIT` for `STRING`, `SPIN_BOX` for `INT`). +3. Construct the widget with the **original** parameter dict so that all constraints + (`allowedValues`, `minValue`, `maxValue`, `decimals`, etc.) are preserved. +4. Mark the widget with an info icon (ℹ️) so the user can tell it is normally hidden. + +The widget mapping when revealed: + +| Parameter type | Has `allowedValues`? | Widget | +|---|---|---| +| `STRING` | No | `LINE_EDIT` | +| `INT` | No | `SPIN_BOX` (integer) | +| `FLOAT` | No | `SPIN_BOX` (float) | +| `PATH` (directory) | No | `CHOOSE_DIRECTORY` | +| `PATH` (file, input) | No | `CHOOSE_INPUT_FILE` | +| `PATH` (file, output) | No | `CHOOSE_OUTPUT_FILE` | +| Any type | Yes | `DROPDOWN_LIST` | + +Note: controls that require an explicit `userInterface.control` hint (like `MULTILINE_EDIT` or +`CHECK_BOX`) cannot be inferred. A revealed hidden `STRING` always becomes `LINE_EDIT`, not +`MULTILINE_EDIT`, because the `HIDDEN` control replaced whatever the author might have intended. + +### Visual indicator + +Revealed hidden parameters display a small ℹ️ icon before the label. The icon has: +- A **tooltip** ("This parameter is normally hidden") for sighted users on hover. +- An **accessibleDescription** with the same text, announced by screen readers. + +This ensures the distinction is conveyed through both visual and non-visual channels. + +### Loading a different bundle + +When the user clicks "Load Bundle" to switch to a different job bundle, `on_load_bundle` +creates a fresh `JobBundleSettings` and propagates `show_hidden_parameters` from the widget's stored +state. This ensures the flag survives bundle switches within the same dialog session. + +### Queue environment parameters + +`--show-hidden-parameters` intentionally applies to queue environment parameters, not just job bundle +parameters. During debugging, users need visibility into all parameters regardless of source. + +### Third-party submitters + +`SubmitJobToDeadlineDialog` accepts `show_hidden_parameters` as an optional keyword argument (default +`False`). DCC submitters (Maya, Blender, etc.) that instantiate the dialog directly can opt in +by passing `show_hidden_parameters=True`. No existing callers are affected. + +## Files Changed + +| File | Change | +|------|--------| +| `cli/_groups/bundle_group.py` | `--show-hidden-parameters` click option | +| `ui/dataclasses/__init__.py` | `show_hidden_parameters` field on `JobBundleSettings` | +| `ui/job_bundle_submitter.py` | Threads flag to dialog | +| `ui/dialogs/submit_job_to_deadline_dialog.py` | Stores and passes flag to tab widgets | +| `ui/widgets/shared_job_settings_tab.py` | Passes flag to queue `OpenJDParametersWidget` | +| `ui/widgets/job_bundle_settings_tab.py` | Passes flag to bundle `OpenJDParametersWidget`; propagates on bundle load | +| `ui/widgets/openjd_parameters_widget.py` | Core logic: widget resolution, info icon indicator | + +## Testing + +Tests: `test/unit/deadline_client/ui/widgets/test_show_hidden_parameters.py` +Test data: `test/unit/deadline_client/ui/test_data/job_bundle_with_hidden_params/` + +| Test | What it verifies | +|------|-----------------| +| `test_hidden_params_not_visible_by_default` | `HIDDEN` parameters use `_JobTemplateHiddenWidget` and are not in the layout | +| `test_show_hidden_makes_hidden_params_visible` | Each type maps to the correct widget, is in the layout, and has its default value | +| `test_get_parameters_round_trip_with_show_hidden` | `get_parameters()` returns correct values after modifying revealed hidden params | +| `test_show_hidden_with_queue_environment_parameters` | Queue environment hidden params are revealed the same way | +| `test_show_hidden_adds_indicator_icon` | Info icon present on revealed params with correct `accessibleDescription`; absent on normal params | diff --git a/src/deadline/client/cli/_groups/bundle_group.py b/src/deadline/client/cli/_groups/bundle_group.py index 21080a0b4..5c2b44b32 100644 --- a/src/deadline/client/cli/_groups/bundle_group.py +++ b/src/deadline/client/cli/_groups/bundle_group.py @@ -418,6 +418,11 @@ def _check_create_job_wait_canceled() -> bool: 'OR --submitter-info \'{"submitter_name": "MyApp", "additional_info": {"render_engine": "Cycles"}}\' ' "OR --submitter-info file://path/to/submitter.json", ) +@click.option( + "--show-hidden-parameters", + is_flag=True, + help="Reveal parameters that are normally hidden from the submission UI, allowing inspection and modification of their values.", +) @_handle_error def bundle_gui_submit( parameter, @@ -428,6 +433,7 @@ def bundle_gui_submit( known_asset_path, submitter_name, submitter_info, + show_hidden_parameters, **args, ): """ @@ -473,6 +479,7 @@ def bundle_gui_submit( submitter_info=submitter_info, known_asset_paths=known_asset_path, job_parameters=parameter, + show_hidden_parameters=show_hidden_parameters, ) if not submitter: diff --git a/src/deadline/client/ui/dataclasses/__init__.py b/src/deadline/client/ui/dataclasses/__init__.py index 0bea06782..e65c65046 100644 --- a/src/deadline/client/ui/dataclasses/__init__.py +++ b/src/deadline/client/ui/dataclasses/__init__.py @@ -46,6 +46,9 @@ class JobBundleSettings: # pylint: disable=too-many-instance-attributes # Whether to allow ability to "Load a different job bundle" browse_enabled: bool = field(default=False) + # Whether to show HIDDEN parameters in the UI + show_hidden_parameters: bool = field(default=False) + @dataclass class CliJobSettings: # pylint: disable=too-many-instance-attributes diff --git a/src/deadline/client/ui/dialogs/submit_job_to_deadline_dialog.py b/src/deadline/client/ui/dialogs/submit_job_to_deadline_dialog.py index 2bd2bba9a..0569bb3b1 100644 --- a/src/deadline/client/ui/dialogs/submit_job_to_deadline_dialog.py +++ b/src/deadline/client/ui/dialogs/submit_job_to_deadline_dialog.py @@ -119,6 +119,7 @@ def __init__( host_requirements: Optional[HostRequirements] = None, submitter_info: Optional[SubmitterInfo] = None, known_asset_paths: Optional[list[str]] = None, + show_hidden_parameters: bool = False, ): # The Qt.Tool flag makes sure our widget stays in front of the main application window super().__init__(parent=parent, f=f) @@ -150,6 +151,7 @@ def __init__( self.show_host_requirements_tab = show_host_requirements_tab self.known_asset_paths = known_asset_paths or [] self.should_close = False + self._show_hidden_parameters = show_hidden_parameters self._build_ui( job_setup_widget_type, @@ -318,6 +320,7 @@ def _build_shared_job_settings_tab(self, initial_job_settings, initial_shared_pa self.shared_job_settings = SharedJobSettingsWidget( initial_settings=initial_job_settings, initial_shared_parameter_values=initial_shared_parameter_values, + show_hidden_parameters=self._show_hidden_parameters, parent=self, ) self.shared_job_settings.parameter_changed.connect(self.on_shared_job_parameter_changed) diff --git a/src/deadline/client/ui/job_bundle_submitter.py b/src/deadline/client/ui/job_bundle_submitter.py index 84a0d2ee0..2bc7769aa 100644 --- a/src/deadline/client/ui/job_bundle_submitter.py +++ b/src/deadline/client/ui/job_bundle_submitter.py @@ -123,6 +123,7 @@ def show_job_bundle_submitter( submitter_info: Optional[SubmitterInfo] = None, known_asset_paths: Optional[list[str]] = None, job_parameters: Optional[list[dict[str, Any]]] = None, + show_hidden_parameters: bool = False, ) -> Optional[SubmitJobToDeadlineDialog]: """ Opens an AWS Deadline Cloud job submission dialog for the provided job bundle. @@ -264,6 +265,7 @@ def on_create_job_bundle_callback( initial_settings = JobBundleSettings(input_job_bundle_dir=input_job_bundle_dir, name=name) initial_settings.parameters = read_job_bundle_parameters(input_job_bundle_dir) initial_settings.browse_enabled = browse + initial_settings.show_hidden_parameters = show_hidden_parameters initial_shared_parameter_values = {} @@ -305,6 +307,7 @@ def on_create_job_bundle_callback( f=f, submitter_info=submitter_info, known_asset_paths=known_asset_paths, + show_hidden_parameters=show_hidden_parameters, ) if job_parameters: diff --git a/src/deadline/client/ui/translations/locales/de_DE.json b/src/deadline/client/ui/translations/locales/de_DE.json index 3acc0c960..122301666 100644 --- a/src/deadline/client/ui/translations/locales/de_DE.json +++ b/src/deadline/client/ui/translations/locales/de_DE.json @@ -121,6 +121,7 @@ "There is a configuration issue with the profile '{profile}'.\n\nTo resolve this issue:\n\u2022 Verify your AWS config and credentials files are correct\n \u2022 By default these files can be found in ~/.aws on Linux/MacOS or %USERPROFILE%/.aws on Windows\n\u2022 Verify that the correct AWS region is set\n \u2022 Check that no environment variables like AWS_DEFAULT_REGION are set to an incorrect region\n\u2022 If you are not using a Deadline Cloud Monitor profile:\n \u2022 Verify that any credential process being used is able to retrieve the credentials or that they aren't expired\n \u2022 You can run the following command to check: aws sts get-caller-identity --profile ": "Es gibt ein Konfigurationsproblem mit dem Profil '{profile}'.\n\nSo beheben Sie dieses Problem:\n\\u2022 Überprüfen Sie, ob Ihre AWS-Konfigurations- und Anmeldeinformationsdateien korrekt sind\n \\u2022 Standardmäßig befinden sich diese Dateien unter ~/.aws unter Linux/MacOS oder %USERPROFILE%/.aws unter Windows\n\\u2022 Überprüfen Sie, ob die richtige AWS-Region festgelegt ist\n \\u2022 Stellen Sie sicher, dass keine Umgebungsvariablen wie AWS_DEFAULT_REGION auf eine falsche Region gesetzt sind\n\\u2022 Wenn Sie kein Deadline Cloud Monitor-Profil verwenden:\n \\u2022 Überprüfen Sie, ob der verwendete Anmeldeinformationsprozess die Anmeldeinformationen abrufen kann oder ob diese nicht abgelaufen sind\n \\u2022 Sie können den folgenden Befehl ausführen, um dies zu überprüfen: aws sts get-caller-identity --profile ", "There was an error with authentication": "Es ist ein Fehler bei der Authentifizierung aufgetreten", "There was an unknown issue when trying to authenticate with the profile '{profile}'.\n\nCheck any available console logs for errors to try and diagnose the problem.\nLogs are commonly found:\n \u2022 In the terminal that the dialog or software the submitter is running in was launched from \u2022 In the built-in console within the software that the submitter is running in": "Beim Versuch, sich mit dem Profil '{profile}' zu authentifizieren, ist ein unbekanntes Problem aufgetreten.\n\nÜberprüfen Sie verfügbare Konsolenprotokolle auf Fehler, um das Problem zu diagnostizieren.\nProtokolle finden Sie normalerweise:\n \\u2022 Im Terminal, von dem aus der Dialog oder die Software, in der der Submitter ausgeführt wird, gestartet wurde \\u2022 In der integrierten Konsole innerhalb der Software, in der der Submitter ausgeführt wird", + "This parameter is normally hidden": "Dieser Parameter ist normalerweise ausgeblendet", "Timeouts": "Timeouts", "Unable to Call AWS Deadline Cloud API": "AWS Deadline Cloud-API kann nicht aufgerufen werden", "Unknown Issue With Configured Profile": "Unbekanntes Problem mit konfiguriertem Profil", @@ -132,4 +133,4 @@ "{profile} - You are logged out.": "{profile} - Sie sind abgemeldet.", "{profile} doesn't have access permissions to submit a job.": "{profile} hat keine Zugriffsberechtigungen zum Übermitteln eines Jobs.", "{submitter} job submission": "{submitter}-Jobübermittlung" -} \ No newline at end of file +} diff --git a/src/deadline/client/ui/translations/locales/en_US.json b/src/deadline/client/ui/translations/locales/en_US.json index 97bed802e..6b388729b 100644 --- a/src/deadline/client/ui/translations/locales/en_US.json +++ b/src/deadline/client/ui/translations/locales/en_US.json @@ -121,6 +121,7 @@ "There is a configuration issue with the profile '{profile}'.\n\nTo resolve this issue:\n\u2022 Verify your AWS config and credentials files are correct\n \u2022 By default these files can be found in ~/.aws on Linux/MacOS or %USERPROFILE%/.aws on Windows\n\u2022 Verify that the correct AWS region is set\n \u2022 Check that no environment variables like AWS_DEFAULT_REGION are set to an incorrect region\n\u2022 If you are not using a Deadline Cloud Monitor profile:\n \u2022 Verify that any credential process being used is able to retrieve the credentials or that they aren't expired\n \u2022 You can run the following command to check: aws sts get-caller-identity --profile ": "There is a configuration issue with the profile '{profile}'.\n\nTo resolve this issue:\n\\u2022 Verify your AWS config and credentials files are correct\n \\u2022 By default these files can be found in ~/.aws on Linux/MacOS or %USERPROFILE%/.aws on Windows\n\\u2022 Verify that the correct AWS region is set\n \\u2022 Check that no environment variables like AWS_DEFAULT_REGION are set to an incorrect region\n\\u2022 If you are not using a Deadline Cloud Monitor profile:\n \\u2022 Verify that any credential process being used is able to retrieve the credentials or that they aren't expired\n \\u2022 You can run the following command to check: aws sts get-caller-identity --profile ", "There was an error with authentication": "There was an error with authentication", "There was an unknown issue when trying to authenticate with the profile '{profile}'.\n\nCheck any available console logs for errors to try and diagnose the problem.\nLogs are commonly found:\n \u2022 In the terminal that the dialog or software the submitter is running in was launched from \u2022 In the built-in console within the software that the submitter is running in": "There was an unknown issue when trying to authenticate with the profile '{profile}'.\n\nCheck any available console logs for errors to try and diagnose the problem.\nLogs are commonly found:\n \\u2022 In the terminal that the dialog or software the submitter is running in was launched from \\u2022 In the built-in console within the software that the submitter is running in", + "This parameter is normally hidden": "This parameter is normally hidden", "Timeouts": "Timeouts", "Unable to Call AWS Deadline Cloud API": "Unable to Call AWS Deadline Cloud API", "Unknown Issue With Configured Profile": "Unknown Issue With Configured Profile", @@ -132,4 +133,4 @@ "{profile} - You are logged out.": "{profile} - You are logged out.", "{profile} doesn't have access permissions to submit a job.": "{profile} doesn't have access permissions to submit a job.", "{submitter} job submission": "{submitter} job submission" -} \ No newline at end of file +} diff --git a/src/deadline/client/ui/translations/locales/es_ES.json b/src/deadline/client/ui/translations/locales/es_ES.json index ec7aefb04..4f7d227fe 100644 --- a/src/deadline/client/ui/translations/locales/es_ES.json +++ b/src/deadline/client/ui/translations/locales/es_ES.json @@ -121,6 +121,7 @@ "There is a configuration issue with the profile '{profile}'.\n\nTo resolve this issue:\n\u2022 Verify your AWS config and credentials files are correct\n \u2022 By default these files can be found in ~/.aws on Linux/MacOS or %USERPROFILE%/.aws on Windows\n\u2022 Verify that the correct AWS region is set\n \u2022 Check that no environment variables like AWS_DEFAULT_REGION are set to an incorrect region\n\u2022 If you are not using a Deadline Cloud Monitor profile:\n \u2022 Verify that any credential process being used is able to retrieve the credentials or that they aren't expired\n \u2022 You can run the following command to check: aws sts get-caller-identity --profile ": "Hay un problema de configuración con el perfil '{profile}'.\n\nPara resolver este problema:\n\\u2022 Verifique que sus archivos de configuración y credenciales de AWS sean correctos\n \\u2022 De forma predeterminada, estos archivos se encuentran en ~/.aws en Linux/MacOS o %USERPROFILE%/.aws en Windows\n\\u2022 Verifique que esté configurada la región de AWS correcta\n \\u2022 Compruebe que no haya variables de entorno como AWS_DEFAULT_REGION configuradas en una región incorrecta\n\\u2022 Si no está utilizando un perfil de Deadline Cloud Monitor:\n \\u2022 Verifique que cualquier proceso de credenciales que se esté utilizando pueda recuperar las credenciales o que no hayan caducado\n \\u2022 Puede ejecutar el siguiente comando para comprobarlo: aws sts get-caller-identity --profile ", "There was an error with authentication": "Se produjo un error con la autenticación", "There was an unknown issue when trying to authenticate with the profile '{profile}'.\n\nCheck any available console logs for errors to try and diagnose the problem.\nLogs are commonly found:\n \u2022 In the terminal that the dialog or software the submitter is running in was launched from \u2022 In the built-in console within the software that the submitter is running in": "Se produjo un problema desconocido al intentar autenticarse con el perfil '{profile}'.\n\nCompruebe los registros de consola disponibles en busca de errores para intentar diagnosticar el problema.\nLos registros se encuentran comúnmente:\n \\u2022 En el terminal desde el que se inició el cuadro de diálogo o el software en el que se ejecuta el remitente \\u2022 En la consola integrada dentro del software en el que se ejecuta el remitente", + "This parameter is normally hidden": "Este parámetro está normalmente oculto", "Timeouts": "Tiempos de espera", "Unable to Call AWS Deadline Cloud API": "No se puede llamar a la API de AWS Deadline Cloud", "Unknown Issue With Configured Profile": "Problema desconocido con el perfil configurado", @@ -132,4 +133,4 @@ "{profile} - You are logged out.": "{profile} - Ha cerrado sesión.", "{profile} doesn't have access permissions to submit a job.": "{profile} no tiene permisos de acceso para enviar un trabajo.", "{submitter} job submission": "Envío de trabajo de {submitter}" -} \ No newline at end of file +} diff --git a/src/deadline/client/ui/translations/locales/fr_FR.json b/src/deadline/client/ui/translations/locales/fr_FR.json index e8edb1cfb..91d03aaaa 100644 --- a/src/deadline/client/ui/translations/locales/fr_FR.json +++ b/src/deadline/client/ui/translations/locales/fr_FR.json @@ -121,6 +121,7 @@ "There is a configuration issue with the profile '{profile}'.\n\nTo resolve this issue:\n\u2022 Verify your AWS config and credentials files are correct\n \u2022 By default these files can be found in ~/.aws on Linux/MacOS or %USERPROFILE%/.aws on Windows\n\u2022 Verify that the correct AWS region is set\n \u2022 Check that no environment variables like AWS_DEFAULT_REGION are set to an incorrect region\n\u2022 If you are not using a Deadline Cloud Monitor profile:\n \u2022 Verify that any credential process being used is able to retrieve the credentials or that they aren't expired\n \u2022 You can run the following command to check: aws sts get-caller-identity --profile ": "Il y a un problème de configuration avec le profil '{profile}'.\n\nPour résoudre ce problème :\n\\u2022 Vérifiez que vos fichiers de configuration et d'informations d'identification AWS sont corrects\n \\u2022 Par défaut, ces fichiers se trouvent dans ~/.aws sur Linux/MacOS ou %USERPROFILE%/.aws sur Windows\n\\u2022 Vérifiez que la région AWS correcte est définie\n \\u2022 Vérifiez qu'aucune variable d'environnement comme AWS_DEFAULT_REGION n'est définie sur une région incorrecte\n\\u2022 Si vous n'utilisez pas un profil Deadline Cloud Monitor :\n \\u2022 Vérifiez que tout processus d'informations d'identification utilisé est capable de récupérer les informations d'identification ou qu'elles ne sont pas expirées\n \\u2022 Vous pouvez exécuter la commande suivante pour vérifier : aws sts get-caller-identity --profile ", "There was an error with authentication": "Une erreur s'est produite lors de l'authentification", "There was an unknown issue when trying to authenticate with the profile '{profile}'.\n\nCheck any available console logs for errors to try and diagnose the problem.\nLogs are commonly found:\n \u2022 In the terminal that the dialog or software the submitter is running in was launched from \u2022 In the built-in console within the software that the submitter is running in": "Un problème inconnu s'est produit lors de la tentative d'authentification avec le profil '{profile}'.\n\nVérifiez les journaux de console disponibles pour détecter les erreurs et essayer de diagnostiquer le problème.\nLes journaux se trouvent généralement :\n \\u2022 Dans le terminal à partir duquel la boîte de dialogue ou le logiciel dans lequel le soumetteur s'exécute a été lancé \\u2022 Dans la console intégrée du logiciel dans lequel le soumetteur s'exécute", + "This parameter is normally hidden": "Ce paramètre est normalement masqué", "Timeouts": "Délais d'expiration", "Unable to Call AWS Deadline Cloud API": "Impossible d'appeler l'API AWS Deadline Cloud", "Unknown Issue With Configured Profile": "Problème inconnu avec le profil configuré", @@ -132,4 +133,4 @@ "{profile} - You are logged out.": "{profile} - Vous êtes déconnecté.", "{profile} doesn't have access permissions to submit a job.": "{profile} n'a pas les autorisations d'accès pour soumettre une tâche.", "{submitter} job submission": "Soumission de tâche {submitter}" -} \ No newline at end of file +} diff --git a/src/deadline/client/ui/translations/locales/id_ID.json b/src/deadline/client/ui/translations/locales/id_ID.json index 4b3c1e41a..d3f442382 100644 --- a/src/deadline/client/ui/translations/locales/id_ID.json +++ b/src/deadline/client/ui/translations/locales/id_ID.json @@ -121,6 +121,7 @@ "There is a configuration issue with the profile '{profile}'.\n\nTo resolve this issue:\n\u2022 Verify your AWS config and credentials files are correct\n \u2022 By default these files can be found in ~/.aws on Linux/MacOS or %USERPROFILE%/.aws on Windows\n\u2022 Verify that the correct AWS region is set\n \u2022 Check that no environment variables like AWS_DEFAULT_REGION are set to an incorrect region\n\u2022 If you are not using a Deadline Cloud Monitor profile:\n \u2022 Verify that any credential process being used is able to retrieve the credentials or that they aren't expired\n \u2022 You can run the following command to check: aws sts get-caller-identity --profile ": "Ada masalah konfigurasi dengan profil '{profile}'.\n\nUntuk mengatasi masalah ini:\n\\u2022 Verifikasi bahwa file konfigurasi dan kredensial AWS Anda benar\n \\u2022 Secara default, file ini dapat ditemukan di ~/.aws di Linux/MacOS atau %USERPROFILE%/.aws di Windows\n\\u2022 Verifikasi bahwa wilayah AWS yang benar telah diatur\n \\u2022 Periksa bahwa tidak ada variabel lingkungan seperti AWS_DEFAULT_REGION yang diatur ke wilayah yang salah\n\\u2022 Jika Anda tidak menggunakan profil Deadline Cloud Monitor:\n \\u2022 Verifikasi bahwa proses kredensial apa pun yang digunakan dapat mengambil kredensial atau bahwa kredensial tersebut tidak kedaluwarsa\n \\u2022 Anda dapat menjalankan perintah berikut untuk memeriksa: aws sts get-caller-identity --profile ", "There was an error with authentication": "Terjadi kesalahan dengan autentikasi", "There was an unknown issue when trying to authenticate with the profile '{profile}'.\n\nCheck any available console logs for errors to try and diagnose the problem.\nLogs are commonly found:\n \u2022 In the terminal that the dialog or software the submitter is running in was launched from \u2022 In the built-in console within the software that the submitter is running in": "Terjadi masalah yang tidak diketahui saat mencoba mengautentikasi dengan profil '{profile}'.\n\nPeriksa log konsol yang tersedia untuk kesalahan untuk mencoba mendiagnosis masalah.\nLog biasanya ditemukan:\n \\u2022 Di terminal tempat dialog atau perangkat lunak yang menjalankan submitter diluncurkan \\u2022 Di konsol bawaan dalam perangkat lunak yang menjalankan submitter", + "This parameter is normally hidden": "Parameter ini biasanya tersembunyi", "Timeouts": "Timeout", "Unable to Call AWS Deadline Cloud API": "Tidak dapat memanggil API AWS Deadline Cloud", "Unknown Issue With Configured Profile": "Masalah tidak diketahui dengan profil yang dikonfigurasi", @@ -132,4 +133,4 @@ "{profile} - You are logged out.": "{profile} - Anda telah keluar.", "{profile} doesn't have access permissions to submit a job.": "{profile} tidak memiliki izin akses untuk mengirim pekerjaan.", "{submitter} job submission": "Pengiriman pekerjaan {submitter}" -} \ No newline at end of file +} diff --git a/src/deadline/client/ui/translations/locales/it_IT.json b/src/deadline/client/ui/translations/locales/it_IT.json index efed438f1..dbbc9d9dd 100644 --- a/src/deadline/client/ui/translations/locales/it_IT.json +++ b/src/deadline/client/ui/translations/locales/it_IT.json @@ -121,6 +121,7 @@ "There is a configuration issue with the profile '{profile}'.\n\nTo resolve this issue:\n\u2022 Verify your AWS config and credentials files are correct\n \u2022 By default these files can be found in ~/.aws on Linux/MacOS or %USERPROFILE%/.aws on Windows\n\u2022 Verify that the correct AWS region is set\n \u2022 Check that no environment variables like AWS_DEFAULT_REGION are set to an incorrect region\n\u2022 If you are not using a Deadline Cloud Monitor profile:\n \u2022 Verify that any credential process being used is able to retrieve the credentials or that they aren't expired\n \u2022 You can run the following command to check: aws sts get-caller-identity --profile ": "Si è verificato un problema di configurazione con il profilo '{profile}'.\n\nPer risolvere questo problema:\n\\u2022 Verifica che i file di configurazione e credenziali AWS siano corretti\n \\u2022 Per impostazione predefinita, questi file si trovano in ~/.aws su Linux/MacOS o %USERPROFILE%/.aws su Windows\n\\u2022 Verifica che sia impostata la regione AWS corretta\n \\u2022 Verifica che nessuna variabile d'ambiente come AWS_DEFAULT_REGION sia impostata su una regione errata\n\\u2022 Se non stai utilizzando un profilo Deadline Cloud Monitor:\n \\u2022 Verifica che qualsiasi processo di credenziali utilizzato sia in grado di recuperare le credenziali o che non siano scadute\n \\u2022 Puoi eseguire il seguente comando per verificare: aws sts get-caller-identity --profile ", "There was an error with authentication": "Si è verificato un errore con l'autenticazione", "There was an unknown issue when trying to authenticate with the profile '{profile}'.\n\nCheck any available console logs for errors to try and diagnose the problem.\nLogs are commonly found:\n \u2022 In the terminal that the dialog or software the submitter is running in was launched from \u2022 In the built-in console within the software that the submitter is running in": "Si è verificato un problema sconosciuto durante il tentativo di autenticazione con il profilo '{profile}'.\n\nControlla i log della console disponibili per errori per provare a diagnosticare il problema.\nI log si trovano comunemente:\n \\u2022 Nel terminale da cui è stata avviata la finestra di dialogo o il software in cui è in esecuzione il submitter \\u2022 Nella console integrata all'interno del software in cui è in esecuzione il submitter", + "This parameter is normally hidden": "Questo parametro è normalmente nascosto", "Timeouts": "Timeout", "Unable to Call AWS Deadline Cloud API": "Impossibile chiamare l'API AWS Deadline Cloud", "Unknown Issue With Configured Profile": "Problema sconosciuto con il profilo configurato", @@ -132,4 +133,4 @@ "{profile} - You are logged out.": "{profile} - Hai effettuato il logout.", "{profile} doesn't have access permissions to submit a job.": "{profile} non dispone delle autorizzazioni di accesso per inviare un lavoro.", "{submitter} job submission": "Invio lavoro {submitter}" -} \ No newline at end of file +} diff --git a/src/deadline/client/ui/translations/locales/ja_JP.json b/src/deadline/client/ui/translations/locales/ja_JP.json index b018acf58..b76f072fc 100644 --- a/src/deadline/client/ui/translations/locales/ja_JP.json +++ b/src/deadline/client/ui/translations/locales/ja_JP.json @@ -121,6 +121,7 @@ "There is a configuration issue with the profile '{profile}'.\n\nTo resolve this issue:\n\u2022 Verify your AWS config and credentials files are correct\n \u2022 By default these files can be found in ~/.aws on Linux/MacOS or %USERPROFILE%/.aws on Windows\n\u2022 Verify that the correct AWS region is set\n \u2022 Check that no environment variables like AWS_DEFAULT_REGION are set to an incorrect region\n\u2022 If you are not using a Deadline Cloud Monitor profile:\n \u2022 Verify that any credential process being used is able to retrieve the credentials or that they aren't expired\n \u2022 You can run the following command to check: aws sts get-caller-identity --profile ": "プロファイル '{profile}' に設定の問題があります。\n\nこの問題を解決するには:\n\\u2022 AWS 設定ファイルと認証情報ファイルが正しいことを確認してください\n \\u2022 デフォルトでは、これらのファイルは Linux/MacOS では ~/.aws、Windows では %USERPROFILE%/.aws にあります\n\\u2022 正しい AWS リージョンが設定されていることを確認してください\n \\u2022 AWS_DEFAULT_REGION などの環境変数が誤ったリージョンに設定されていないことを確認してください\n\\u2022 Deadline Cloud Monitor プロファイルを使用していない場合:\n \\u2022 使用されている認証情報プロセスが認証情報を取得できること、または有効期限が切れていないことを確認してください\n \\u2022 次のコマンドを実行して確認できます: aws sts get-caller-identity --profile ", "There was an error with authentication": "認証でエラーが発生しました", "There was an unknown issue when trying to authenticate with the profile '{profile}'.\n\nCheck any available console logs for errors to try and diagnose the problem.\nLogs are commonly found:\n \u2022 In the terminal that the dialog or software the submitter is running in was launched from \u2022 In the built-in console within the software that the submitter is running in": "プロファイル '{profile}' で認証しようとしたときに不明な問題が発生しました。\n\n利用可能なコンソールログでエラーを確認して、問題を診断してください。\nログは通常、次の場所にあります:\n \\u2022 ダイアログまたはサブミッターが実行されているソフトウェアが起動されたターミナル \\u2022 サブミッターが実行されているソフトウェア内の組み込みコンソール", + "This parameter is normally hidden": "このパラメータは通常非表示です", "Timeouts": "タイムアウト", "Unable to Call AWS Deadline Cloud API": "AWS Deadline Cloud API を呼び出せません", "Unknown Issue With Configured Profile": "設定されたプロファイルに不明な問題があります", @@ -132,4 +133,4 @@ "{profile} - You are logged out.": "{profile} - ログアウトしています。", "{profile} doesn't have access permissions to submit a job.": "{profile} にはジョブを送信するアクセス許可がありません。", "{submitter} job submission": "{submitter} ジョブ送信" -} \ No newline at end of file +} diff --git a/src/deadline/client/ui/translations/locales/ko_KR.json b/src/deadline/client/ui/translations/locales/ko_KR.json index 95844d2d6..89921e072 100644 --- a/src/deadline/client/ui/translations/locales/ko_KR.json +++ b/src/deadline/client/ui/translations/locales/ko_KR.json @@ -121,6 +121,7 @@ "There is a configuration issue with the profile '{profile}'.\n\nTo resolve this issue:\n\u2022 Verify your AWS config and credentials files are correct\n \u2022 By default these files can be found in ~/.aws on Linux/MacOS or %USERPROFILE%/.aws on Windows\n\u2022 Verify that the correct AWS region is set\n \u2022 Check that no environment variables like AWS_DEFAULT_REGION are set to an incorrect region\n\u2022 If you are not using a Deadline Cloud Monitor profile:\n \u2022 Verify that any credential process being used is able to retrieve the credentials or that they aren't expired\n \u2022 You can run the following command to check: aws sts get-caller-identity --profile ": "프로필 '{profile}'에 구성 문제가 있습니다.\n\n이 문제를 해결하려면:\n\\u2022 AWS 구성 및 자격 증명 파일이 올바른지 확인하세요\n \\u2022 기본적으로 이러한 파일은 Linux/MacOS의 ~/.aws 또는 Windows의 %USERPROFILE%/.aws에서 찾을 수 있습니다\n\\u2022 올바른 AWS 리전이 설정되어 있는지 확인하세요\n \\u2022 AWS_DEFAULT_REGION과 같은 환경 변수가 잘못된 리전으로 설정되어 있지 않은지 확인하세요\n\\u2022 Deadline Cloud Monitor 프로필을 사용하지 않는 경우:\n \\u2022 사용 중인 자격 증명 프로세스가 자격 증명을 검색할 수 있는지 또는 만료되지 않았는지 확인하세요\n \\u2022 다음 명령을 실행하여 확인할 수 있습니다: aws sts get-caller-identity --profile ", "There was an error with authentication": "인증 오류가 발생했습니다", "There was an unknown issue when trying to authenticate with the profile '{profile}'.\n\nCheck any available console logs for errors to try and diagnose the problem.\nLogs are commonly found:\n \u2022 In the terminal that the dialog or software the submitter is running in was launched from \u2022 In the built-in console within the software that the submitter is running in": "프로필 '{profile}'로 인증을 시도하는 동안 알 수 없는 문제가 발생했습니다.\n\n사용 가능한 콘솔 로그에서 오류를 확인하여 문제를 진단하세요.\n로그는 일반적으로 다음 위치에서 찾을 수 있습니다:\n \\u2022 대화 상자 또는 제출자가 실행 중인 소프트웨어가 시작된 터미널 \\u2022 제출자가 실행 중인 소프트웨어 내의 기본 제공 콘솔", + "This parameter is normally hidden": "이 파라미터는 일반적으로 숨겨져 있습니다", "Timeouts": "제한 시간", "Unable to Call AWS Deadline Cloud API": "AWS Deadline Cloud API를 호출할 수 없습니다", "Unknown Issue With Configured Profile": "구성된 프로필의 알 수 없는 문제", @@ -132,4 +133,4 @@ "{profile} - You are logged out.": "{profile} - 로그아웃되었습니다.", "{profile} doesn't have access permissions to submit a job.": "{profile}에 작업을 제출할 액세스 권한이 없습니다.", "{submitter} job submission": "{submitter} 작업 제출" -} \ No newline at end of file +} diff --git a/src/deadline/client/ui/translations/locales/pt_BR.json b/src/deadline/client/ui/translations/locales/pt_BR.json index 5d8637de4..20a13400f 100644 --- a/src/deadline/client/ui/translations/locales/pt_BR.json +++ b/src/deadline/client/ui/translations/locales/pt_BR.json @@ -121,6 +121,7 @@ "There is a configuration issue with the profile '{profile}'.\n\nTo resolve this issue:\n\u2022 Verify your AWS config and credentials files are correct\n \u2022 By default these files can be found in ~/.aws on Linux/MacOS or %USERPROFILE%/.aws on Windows\n\u2022 Verify that the correct AWS region is set\n \u2022 Check that no environment variables like AWS_DEFAULT_REGION are set to an incorrect region\n\u2022 If you are not using a Deadline Cloud Monitor profile:\n \u2022 Verify that any credential process being used is able to retrieve the credentials or that they aren't expired\n \u2022 You can run the following command to check: aws sts get-caller-identity --profile ": "Há um problema de configuração com o perfil '{profile}'.\n\nPara resolver este problema:\n\\u2022 Verifique se seus arquivos de configuração e credenciais da AWS estão corretos\n \\u2022 Por padrão, esses arquivos podem ser encontrados em ~/.aws no Linux/MacOS ou %USERPROFILE%/.aws no Windows\n\\u2022 Verifique se a região da AWS correta está definida\n \\u2022 Verifique se nenhuma variável de ambiente como AWS_DEFAULT_REGION está definida para uma região incorreta\n\\u2022 Se você não estiver usando um perfil do Deadline Cloud Monitor:\n \\u2022 Verifique se qualquer processo de credencial que está sendo usado é capaz de recuperar as credenciais ou se elas não expiraram\n \\u2022 Você pode executar o seguinte comando para verificar: aws sts get-caller-identity --profile ", "There was an error with authentication": "Ocorreu um erro com a autenticação", "There was an unknown issue when trying to authenticate with the profile '{profile}'.\n\nCheck any available console logs for errors to try and diagnose the problem.\nLogs are commonly found:\n \u2022 In the terminal that the dialog or software the submitter is running in was launched from \u2022 In the built-in console within the software that the submitter is running in": "Ocorreu um problema desconhecido ao tentar autenticar com o perfil '{profile}'.\n\nVerifique os logs do console disponíveis em busca de erros para tentar diagnosticar o problema.\nOs logs geralmente são encontrados:\n \\u2022 No terminal do qual a caixa de diálogo ou o software em que o remetente está sendo executado foi iniciado \\u2022 No console integrado dentro do software em que o remetente está sendo executado", + "This parameter is normally hidden": "Este parâmetro normalmente está oculto", "Timeouts": "Tempos limite", "Unable to Call AWS Deadline Cloud API": "Não é possível chamar a API do AWS Deadline Cloud", "Unknown Issue With Configured Profile": "Problema desconhecido com o perfil configurado", @@ -132,4 +133,4 @@ "{profile} - You are logged out.": "{profile} - Você está desconectado.", "{profile} doesn't have access permissions to submit a job.": "{profile} não tem permissões de acesso para enviar um trabalho.", "{submitter} job submission": "Envio de trabalho {submitter}" -} \ No newline at end of file +} diff --git a/src/deadline/client/ui/translations/locales/tr_TR.json b/src/deadline/client/ui/translations/locales/tr_TR.json index 7c981364e..170979ea5 100644 --- a/src/deadline/client/ui/translations/locales/tr_TR.json +++ b/src/deadline/client/ui/translations/locales/tr_TR.json @@ -121,6 +121,7 @@ "There is a configuration issue with the profile '{profile}'.\n\nTo resolve this issue:\n\u2022 Verify your AWS config and credentials files are correct\n \u2022 By default these files can be found in ~/.aws on Linux/MacOS or %USERPROFILE%/.aws on Windows\n\u2022 Verify that the correct AWS region is set\n \u2022 Check that no environment variables like AWS_DEFAULT_REGION are set to an incorrect region\n\u2022 If you are not using a Deadline Cloud Monitor profile:\n \u2022 Verify that any credential process being used is able to retrieve the credentials or that they aren't expired\n \u2022 You can run the following command to check: aws sts get-caller-identity --profile ": "'{profile}' profiliyle ilgili bir yapılandırma sorunu var.\n\nBu sorunu çözmek için:\n\\u2022 AWS yapılandırma ve kimlik bilgileri dosyalarınızın doğru olduğunu doğrulayın\n \\u2022 Varsayılan olarak bu dosyalar Linux/MacOS'ta ~/.aws veya Windows'ta %USERPROFILE%/.aws konumunda bulunabilir\n\\u2022 Doğru AWS bölgesinin ayarlandığını doğrulayın\n \\u2022 AWS_DEFAULT_REGION gibi ortam değişkenlerinin yanlış bir bölgeye ayarlanmadığını kontrol edin\n\\u2022 Deadline Cloud Monitor profili kullanmıyorsanız:\n \\u2022 Kullanılan kimlik bilgisi işleminin kimlik bilgilerini alabileceğini veya sürelerinin dolmadığını doğrulayın\n \\u2022 Kontrol etmek için şu komutu çalıştırabilirsiniz: aws sts get-caller-identity --profile ", "There was an error with authentication": "Kimlik doğrulamada bir hata oluştu", "There was an unknown issue when trying to authenticate with the profile '{profile}'.\n\nCheck any available console logs for errors to try and diagnose the problem.\nLogs are commonly found:\n \u2022 In the terminal that the dialog or software the submitter is running in was launched from \u2022 In the built-in console within the software that the submitter is running in": "'{profile}' profiliyle kimlik doğrulamaya çalışırken bilinmeyen bir sorun oluştu.\n\nSorunu teşhis etmeye çalışmak için hataları görmek üzere mevcut konsol günlüklerini kontrol edin.\nGünlükler genellikle şurada bulunur:\n \\u2022 Gönderenin çalıştığı iletişim kutusunun veya yazılımın başlatıldığı terminalde \\u2022 Gönderenin çalıştığı yazılımın içindeki yerleşik konsolda", + "This parameter is normally hidden": "Bu parametre normalde gizlidir", "Timeouts": "Zaman aşımları", "Unable to Call AWS Deadline Cloud API": "AWS Deadline Cloud API'si çağrılamıyor", "Unknown Issue With Configured Profile": "Yapılandırılmış profille ilgili bilinmeyen sorun", @@ -132,4 +133,4 @@ "{profile} - You are logged out.": "{profile} - Oturumunuz kapatıldı.", "{profile} doesn't have access permissions to submit a job.": "{profile} bir iş göndermek için erişim izinlerine sahip değil.", "{submitter} job submission": "{submitter} iş gönderimi" -} \ No newline at end of file +} diff --git a/src/deadline/client/ui/translations/locales/zh_CN.json b/src/deadline/client/ui/translations/locales/zh_CN.json index b65800c6e..a8547fc29 100644 --- a/src/deadline/client/ui/translations/locales/zh_CN.json +++ b/src/deadline/client/ui/translations/locales/zh_CN.json @@ -121,6 +121,7 @@ "There is a configuration issue with the profile '{profile}'.\n\nTo resolve this issue:\n\u2022 Verify your AWS config and credentials files are correct\n \u2022 By default these files can be found in ~/.aws on Linux/MacOS or %USERPROFILE%/.aws on Windows\n\u2022 Verify that the correct AWS region is set\n \u2022 Check that no environment variables like AWS_DEFAULT_REGION are set to an incorrect region\n\u2022 If you are not using a Deadline Cloud Monitor profile:\n \u2022 Verify that any credential process being used is able to retrieve the credentials or that they aren't expired\n \u2022 You can run the following command to check: aws sts get-caller-identity --profile ": "配置文件 '{profile}' 存在配置问题。\n\n要解决此问题:\n\\u2022 验证您的 AWS 配置和凭证文件是否正确\n \\u2022 默认情况下,这些文件可以在 Linux/MacOS 上的 ~/.aws 或 Windows 上的 %USERPROFILE%/.aws 中找到\n\\u2022 验证是否设置了正确的 AWS 区域\n \\u2022 检查是否没有将 AWS_DEFAULT_REGION 等环境变量设置为错误的区域\n\\u2022 如果您未使用 Deadline Cloud Monitor 配置文件:\n \\u2022 验证正在使用的任何凭证进程是否能够检索凭证或凭证是否未过期\n \\u2022 您可以运行以下命令进行检查: aws sts get-caller-identity --profile ", "There was an error with authentication": "身份验证出错", "There was an unknown issue when trying to authenticate with the profile '{profile}'.\n\nCheck any available console logs for errors to try and diagnose the problem.\nLogs are commonly found:\n \u2022 In the terminal that the dialog or software the submitter is running in was launched from \u2022 In the built-in console within the software that the submitter is running in": "尝试使用配置文件 '{profile}' 进行身份验证时出现未知问题。\n\n检查任何可用的控制台日志以查找错误,以尝试诊断问题。\n日志通常位于:\n \\u2022 在启动对话框或提交者正在运行的软件的终端中 \\u2022 在提交者正在运行的软件内的内置控制台中", + "This parameter is normally hidden": "此参数通常处于隐藏状态", "Timeouts": "超时", "Unable to Call AWS Deadline Cloud API": "无法调用 AWS Deadline Cloud API", "Unknown Issue With Configured Profile": "配置的配置文件存在未知问题", @@ -132,4 +133,4 @@ "{profile} - You are logged out.": "{profile} - 您已登出。", "{profile} doesn't have access permissions to submit a job.": "{profile} 没有提交作业的访问权限。", "{submitter} job submission": "{submitter} 作业提交" -} \ No newline at end of file +} diff --git a/src/deadline/client/ui/translations/locales/zh_TW.json b/src/deadline/client/ui/translations/locales/zh_TW.json index bfac49f9c..038e1a3f3 100644 --- a/src/deadline/client/ui/translations/locales/zh_TW.json +++ b/src/deadline/client/ui/translations/locales/zh_TW.json @@ -121,6 +121,7 @@ "There is a configuration issue with the profile '{profile}'.\n\nTo resolve this issue:\n\u2022 Verify your AWS config and credentials files are correct\n \u2022 By default these files can be found in ~/.aws on Linux/MacOS or %USERPROFILE%/.aws on Windows\n\u2022 Verify that the correct AWS region is set\n \u2022 Check that no environment variables like AWS_DEFAULT_REGION are set to an incorrect region\n\u2022 If you are not using a Deadline Cloud Monitor profile:\n \u2022 Verify that any credential process being used is able to retrieve the credentials or that they aren't expired\n \u2022 You can run the following command to check: aws sts get-caller-identity --profile ": "設定檔 '{profile}' 存在組態問題。\n\n若要解決此問題:\n\\u2022 驗證您的 AWS 組態和憑證檔案是否正確\n \\u2022 根據預設,這些檔案可以在 Linux/MacOS 上的 ~/.aws 或 Windows 上的 %USERPROFILE%/.aws 中找到\n\\u2022 驗證是否設定了正確的 AWS 區域\n \\u2022 檢查是否沒有將 AWS_DEFAULT_REGION 等環境變數設定為錯誤的區域\n\\u2022 如果您未使用 Deadline Cloud Monitor 設定檔:\n \\u2022 驗證正在使用的任何憑證程序是否能夠擷取憑證或憑證是否未過期\n \\u2022 您可以執行下列命令進行檢查: aws sts get-caller-identity --profile ", "There was an error with authentication": "身分驗證發生錯誤", "There was an unknown issue when trying to authenticate with the profile '{profile}'.\n\nCheck any available console logs for errors to try and diagnose the problem.\nLogs are commonly found:\n \u2022 In the terminal that the dialog or software the submitter is running in was launched from \u2022 In the built-in console within the software that the submitter is running in": "嘗試使用設定檔 '{profile}' 進行身分驗證時發生未知問題。\n\n檢查任何可用的主控台日誌以查找錯誤,以嘗試診斷問題。\n日誌通常位於:\n \\u2022 在啟動對話方塊或提交者正在執行的軟體的終端機中 \\u2022 在提交者正在執行的軟體內的內建主控台中", + "This parameter is normally hidden": "此參數通常處於隱藏狀態", "Timeouts": "逾時", "Unable to Call AWS Deadline Cloud API": "無法呼叫 AWS Deadline Cloud API", "Unknown Issue With Configured Profile": "設定的設定檔存在未知問題", @@ -132,4 +133,4 @@ "{profile} - You are logged out.": "{profile} - 您已登出。", "{profile} doesn't have access permissions to submit a job.": "{profile} 沒有提交任務的存取許可。", "{submitter} job submission": "{submitter} 任務提交" -} \ No newline at end of file +} diff --git a/src/deadline/client/ui/widgets/job_bundle_settings_tab.py b/src/deadline/client/ui/widgets/job_bundle_settings_tab.py index fa07d5d66..75818de06 100644 --- a/src/deadline/client/ui/widgets/job_bundle_settings_tab.py +++ b/src/deadline/client/ui/widgets/job_bundle_settings_tab.py @@ -46,6 +46,7 @@ class JobBundleSettingsWidget(QWidget): def __init__(self, initial_settings: JobBundleSettings, parent: Optional[QWidget] = None): super().__init__(parent=parent) + self._show_hidden_parameters = initial_settings.show_hidden_parameters self.param_layout = QVBoxLayout() self._build_ui(initial_settings) @@ -69,7 +70,9 @@ def refresh_ui(self, settings: JobBundleSettings): widget.deleteLater() self.parameters_widget = OpenJDParametersWidget( - parameter_definitions=settings.parameters, parent=self + parameter_definitions=settings.parameters, + show_hidden_parameters=self._show_hidden_parameters, + parent=self, ) self.param_layout.addWidget(self.parameters_widget) self.parameters_widget.parameter_changed.connect( @@ -109,6 +112,7 @@ def on_load_bundle(self): ) job_settings = JobBundleSettings(input_job_bundle_dir=input_job_bundle_dir, name=name) job_settings.parameters = read_job_bundle_parameters(input_job_bundle_dir) + job_settings.show_hidden_parameters = self._show_hidden_parameters except Exception as e: msg = str(e) diff --git a/src/deadline/client/ui/widgets/openjd_parameters_widget.py b/src/deadline/client/ui/widgets/openjd_parameters_widget.py index 4cfd23bca..90d2a23be 100644 --- a/src/deadline/client/ui/widgets/openjd_parameters_widget.py +++ b/src/deadline/client/ui/widgets/openjd_parameters_widget.py @@ -7,12 +7,13 @@ import os from pathlib import Path -from typing import Any, Dict, List, Optional +from typing import Any, Dict, List, Optional, cast from copy import deepcopy from qtpy.QtCore import QRegularExpression, Qt, Signal # type: ignore from qtpy.QtGui import QValidator from qtpy.QtWidgets import ( # type: ignore + QApplication, QCheckBox, QComboBox, QDoubleSpinBox, @@ -23,6 +24,7 @@ QSizePolicy, QSpacerItem, QSpinBox, + QStyle, QTextEdit, QVBoxLayout, QWidget, @@ -30,6 +32,7 @@ from ...job_bundle.job_template import ControlType from ...job_bundle.parameters import JobParameter, get_ui_control_for_parameter_definition +from .._utils import tr from .path_widgets import ( DirectoryPickerWidget, InputFilePickerWidget, @@ -63,10 +66,12 @@ def __init__( *, parameter_definitions: List[JobParameter] = [], async_loading_state: str = "", + show_hidden_parameters: bool = False, parent: Optional[QWidget] = None, ): super().__init__(parent=parent) + self._show_hidden_parameters = show_hidden_parameters self.rebuild_ui( parameter_definitions=parameter_definitions, async_loading_state=async_loading_state ) @@ -144,6 +149,15 @@ def rebuild_ui( control_type_name = get_ui_control_for_parameter_definition(parameter) + # When show_hidden_parameters is enabled, replace HIDDEN controls with the + # default control for the parameter's type so the value is visible. + originally_hidden = False + if self._show_hidden_parameters and control_type_name == ControlType.HIDDEN.name: + originally_hidden = True + unhidden_param = cast(JobParameter, dict(parameter)) + unhidden_param.pop("userInterface", None) + control_type_name = get_ui_control_for_parameter_definition(unhidden_param) + if parameter["type"] == "INT" and control_type_name == "SPIN_BOX": control_widget = _JobTemplateIntSpinBoxWidget elif parameter["type"] == "FLOAT" and control_type_name == "SPIN_BOX": @@ -157,6 +171,9 @@ def rebuild_ui( self.controls[control.name()] = control control.connect_parameter_changed(lambda message: self.parameter_changed.emit(message)) + if originally_hidden: + _mark_label_as_revealed_hidden(control) + if control_type_name != ControlType.HIDDEN.name: if group_label: group_layout = self.findChild(_JobTemplateGroupLayout, group_label) @@ -209,6 +226,28 @@ def _get_parameter_label(parameter): return name +_HIDDEN_PARAMETER_HINT = tr("This parameter is normally hidden") + + +def _mark_label_as_revealed_hidden(control: QWidget) -> None: + """Add a visual and accessible indicator that this parameter is normally hidden.""" + label = getattr(control, "label", None) + if not isinstance(label, QLabel): + return + hint = _HIDDEN_PARAMETER_HINT + icon = QApplication.style().standardIcon(QStyle.SP_MessageBoxInformation) + icon_label = QLabel(parent=control) + icon_label.setPixmap(icon.pixmap(14, 14)) + icon_label.setToolTip(hint) + icon_label.setAccessibleDescription(hint) + # Insert the icon before the text label in the control's layout + control_layout = control.layout() + if control_layout is not None: + idx = control_layout.indexOf(label) + if idx >= 0: + control_layout.insertWidget(idx, icon_label) + + class _JobTemplateLineEditValidator(QValidator): def __init__(self, parameter_name, min_length: int, max_length: int, allowed_pattern: str): super().__init__() @@ -514,7 +553,6 @@ def _build_ui(self, parameter): ) self.edit_control.setMaximum(max_value) - # Control customizations # Control customizations if "userInterface" in parameter: decimals = parameter["userInterface"].get("decimals", -1) diff --git a/src/deadline/client/ui/widgets/shared_job_settings_tab.py b/src/deadline/client/ui/widgets/shared_job_settings_tab.py index fb873fb47..eed93eb2e 100644 --- a/src/deadline/client/ui/widgets/shared_job_settings_tab.py +++ b/src/deadline/client/ui/widgets/shared_job_settings_tab.py @@ -58,6 +58,7 @@ def __init__( *, initial_settings: Any, initial_shared_parameter_values: dict[str, Any], + show_hidden_parameters: bool = False, parent: Optional[QWidget] = None, ): super().__init__(parent=parent) @@ -76,7 +77,9 @@ def __init__( layout.addWidget(self.deadline_cloud_settings_box) self.queue_parameters_box = OpenJDParametersWidget( - async_loading_state="Loading Queue Environments...", parent=self + async_loading_state="Loading Queue Environments...", + show_hidden_parameters=show_hidden_parameters, + parent=self, ) layout.addWidget(self.queue_parameters_box) self.queue_parameters_box.parameter_changed.connect( diff --git a/src/deadline/client/ui/widgets/spinbox_widgets.py b/src/deadline/client/ui/widgets/spinbox_widgets.py index b4d765810..da771d337 100644 --- a/src/deadline/client/ui/widgets/spinbox_widgets.py +++ b/src/deadline/client/ui/widgets/spinbox_widgets.py @@ -42,6 +42,7 @@ def __init__(self, parent: QWidget = None): self.setMinimum(self.MIN_FLOAT_VALUE) self.setDragMultiplier(0.1) self.setDecimalMode(DecimalMode.ADAPTIVE_DECIMAL) + self.setDecimals(self.MAX_ADAPTIVE_DECIMALS) self.setStepType(QDoubleSpinBox.AdaptiveDecimalStepType) self.lineEdit().installEventFilter(self) diff --git a/test/unit/deadline_client/ui/test_data/job_bundle_with_hidden_params/template.yaml b/test/unit/deadline_client/ui/test_data/job_bundle_with_hidden_params/template.yaml new file mode 100644 index 000000000..3e39ad0f8 --- /dev/null +++ b/test/unit/deadline_client/ui/test_data/job_bundle_with_hidden_params/template.yaml @@ -0,0 +1,88 @@ +specificationVersion: 'jobtemplate-2023-09' +name: Hidden Parameters Test +description: | + Test bundle exercising both visible and HIDDEN parameters across all types. + +parameterDefinitions: +# Visible parameters +- name: VisibleString + type: STRING + userInterface: + control: LINE_EDIT + label: Visible String + default: hello +- name: VisibleInt + type: INT + userInterface: + control: SPIN_BOX + label: Visible Int + default: 42 +- name: VisibleFloat + type: FLOAT + userInterface: + control: SPIN_BOX + label: Visible Float + default: 3.14 +- name: VisiblePath + type: PATH + objectType: DIRECTORY + dataFlow: IN + userInterface: + control: CHOOSE_DIRECTORY + label: Visible Path + default: outputs + +# Hidden parameters (one per type) +- name: HiddenString + type: STRING + userInterface: + control: HIDDEN + default: secret-value +- name: HiddenInt + type: INT + userInterface: + control: HIDDEN + default: 99 +- name: HiddenFloat + type: FLOAT + userInterface: + control: HIDDEN + default: 2.718 +- name: HiddenPath + type: PATH + objectType: DIRECTORY + dataFlow: IN + userInterface: + control: HIDDEN + default: hidden +- name: HiddenInputFile + type: PATH + objectType: FILE + dataFlow: IN + userInterface: + control: HIDDEN + default: input.txt +- name: HiddenOutputFile + type: PATH + objectType: FILE + dataFlow: OUT + userInterface: + control: HIDDEN + default: output.txt +- name: HiddenDropdown + type: STRING + userInterface: + control: HIDDEN + allowedValues: + - alpha + - beta + - gamma + default: beta + +steps: +- name: Step + script: + actions: + onRun: + command: bash + args: ['--help'] diff --git a/test/unit/deadline_client/ui/widgets/test_show_hidden_parameters.py b/test/unit/deadline_client/ui/widgets/test_show_hidden_parameters.py new file mode 100644 index 000000000..9f9f485f3 --- /dev/null +++ b/test/unit/deadline_client/ui/widgets/test_show_hidden_parameters.py @@ -0,0 +1,191 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +import os +import pytest +from typing import List, cast + +pytest.importorskip("deadline.client.ui.widgets.openjd_parameters_widget") + + +from deadline.client.ui.widgets.openjd_parameters_widget import ( + OpenJDParametersWidget, + _JobTemplateHiddenWidget, + _JobTemplateLineEditWidget, + _JobTemplateIntSpinBoxWidget, + _JobTemplateFloatSpinBoxWidget, + _JobTemplateDirectoryWidget, + _JobTemplateInputFileWidget, + _JobTemplateOutputFileWidget, + _JobTemplateDropdownListWidget, + _HIDDEN_PARAMETER_HINT, +) +from deadline.client.job_bundle.parameters import JobParameter, read_job_bundle_parameters + + +BUNDLE_DIR = os.path.join( + os.path.dirname(os.path.dirname(__file__)), + "test_data", + "job_bundle_with_hidden_params", +) + + +@pytest.fixture +def hidden_params_definitions(): + return read_job_bundle_parameters(BUNDLE_DIR) + + +def _is_in_layout(parent_widget, child_widget): + """Check whether *child_widget* has been added to *parent_widget*'s layout.""" + layout = parent_widget.layout() + if layout is None: + return False + for i in range(layout.count()): + item = layout.itemAt(i) + if item and item.widget() is child_widget: + return True + return False + + +def test_hidden_params_not_visible_by_default(qtbot, hidden_params_definitions): + """HIDDEN parameters should have controls but not be added to the layout.""" + widget = OpenJDParametersWidget(parameter_definitions=hidden_params_definitions) + qtbot.addWidget(widget) + + # All 11 parameters should have controls + assert len(widget.controls) == 11 + + # Hidden params should use _JobTemplateHiddenWidget + assert isinstance(widget.controls["HiddenString"], _JobTemplateHiddenWidget) + assert isinstance(widget.controls["HiddenInt"], _JobTemplateHiddenWidget) + assert isinstance(widget.controls["HiddenFloat"], _JobTemplateHiddenWidget) + assert isinstance(widget.controls["HiddenPath"], _JobTemplateHiddenWidget) + assert isinstance(widget.controls["HiddenInputFile"], _JobTemplateHiddenWidget) + assert isinstance(widget.controls["HiddenOutputFile"], _JobTemplateHiddenWidget) + assert isinstance(widget.controls["HiddenDropdown"], _JobTemplateHiddenWidget) + + # Hidden widgets should not be in the layout + assert not _is_in_layout(widget, widget.controls["HiddenString"]) + + # Visible params should be in the layout + assert _is_in_layout(widget, widget.controls["VisibleString"]) + + +def test_show_hidden_makes_hidden_params_visible(qtbot, hidden_params_definitions): + """With show_hidden_parameters=True, HIDDEN parameters should use default widgets and be visible.""" + widget = OpenJDParametersWidget( + parameter_definitions=hidden_params_definitions, show_hidden_parameters=True + ) + qtbot.addWidget(widget) + + assert len(widget.controls) == 11 + + # Hidden params should now use the default widget for their type + assert isinstance(widget.controls["HiddenString"], _JobTemplateLineEditWidget) + assert isinstance(widget.controls["HiddenInt"], _JobTemplateIntSpinBoxWidget) + assert isinstance(widget.controls["HiddenFloat"], _JobTemplateFloatSpinBoxWidget) + assert isinstance(widget.controls["HiddenPath"], _JobTemplateDirectoryWidget) + assert isinstance(widget.controls["HiddenInputFile"], _JobTemplateInputFileWidget) + assert isinstance(widget.controls["HiddenOutputFile"], _JobTemplateOutputFileWidget) + assert isinstance(widget.controls["HiddenDropdown"], _JobTemplateDropdownListWidget) + + # All controls should be in the layout + assert _is_in_layout(widget, widget.controls["HiddenString"]) + assert _is_in_layout(widget, widget.controls["HiddenInt"]) + assert _is_in_layout(widget, widget.controls["HiddenFloat"]) + assert _is_in_layout(widget, widget.controls["HiddenPath"]) + assert _is_in_layout(widget, widget.controls["HiddenInputFile"]) + assert _is_in_layout(widget, widget.controls["HiddenOutputFile"]) + assert _is_in_layout(widget, widget.controls["HiddenDropdown"]) + + # Values should be populated from defaults + assert widget.controls["HiddenString"].value() == "secret-value" + assert widget.controls["HiddenInt"].value() == 99 + assert widget.controls["HiddenFloat"].value() == pytest.approx(2.718) + expected_hidden_path = os.path.normpath(os.path.join(BUNDLE_DIR, "hidden")) + assert widget.controls["HiddenPath"].value() == expected_hidden_path + assert widget.controls["HiddenDropdown"].value() == "beta" + + # Visible params should still work normally + assert isinstance(widget.controls["VisibleString"], _JobTemplateLineEditWidget) + assert widget.controls["VisibleString"].value() == "hello" + + +def test_get_parameters_round_trip_with_show_hidden(qtbot, hidden_params_definitions): + """Editing a revealed hidden parameter must update the value returned by get_parameters(), ensuring the widget is fully interactive and not just display-only.""" + widget = OpenJDParametersWidget( + parameter_definitions=hidden_params_definitions, show_hidden_parameters=True + ) + qtbot.addWidget(widget) + + # Modify a revealed hidden parameter + widget.controls["HiddenString"].set_value("modified-value") + widget.controls["HiddenInt"].set_value(42) + + params = {p["name"]: p for p in widget.get_parameters()} + + # Values should reflect the modifications + assert params["HiddenString"]["value"] == "modified-value" + assert params["HiddenInt"]["value"] == 42 + # Unmodified params keep their defaults + assert params["HiddenFloat"]["value"] == pytest.approx(2.718) + assert params["HiddenDropdown"]["value"] == "beta" + # Visible params still work + assert params["VisibleString"]["value"] == "hello" + + +def test_show_hidden_with_queue_environment_parameters(qtbot): + """Queue environment hidden parameters should also be revealed with show_hidden_parameters.""" + queue_params = cast( + List[JobParameter], + [ + { + "name": "QueueEnvVisible", + "type": "STRING", + "userInterface": {"control": "LINE_EDIT", "label": "Visible Env Param"}, + "default": "visible", + }, + { + "name": "QueueEnvHidden", + "type": "STRING", + "userInterface": {"control": "HIDDEN"}, + "default": "internal-config", + }, + ], + ) + widget = OpenJDParametersWidget(parameter_definitions=queue_params, show_hidden_parameters=True) + qtbot.addWidget(widget) + + assert isinstance(widget.controls["QueueEnvVisible"], _JobTemplateLineEditWidget) + assert isinstance(widget.controls["QueueEnvHidden"], _JobTemplateLineEditWidget) + assert widget.controls["QueueEnvHidden"].value() == "internal-config" + assert _is_in_layout(widget, widget.controls["QueueEnvHidden"]) + + +def test_show_hidden_adds_indicator_icon(qtbot, hidden_params_definitions): + """Revealed hidden parameters should have an info icon with accessible description.""" + from qtpy.QtWidgets import QLabel # type: ignore + + hidden_hint = _HIDDEN_PARAMETER_HINT + + widget = OpenJDParametersWidget( + parameter_definitions=hidden_params_definitions, show_hidden_parameters=True + ) + qtbot.addWidget(widget) + + # A revealed hidden param should have an icon label with the hint + control = widget.controls["HiddenString"] + icon_labels = [ + child + for child in control.findChildren(QLabel) + if child.accessibleDescription() == hidden_hint + ] + assert len(icon_labels) == 1 + + # A normally visible param should NOT have the icon + visible_control = widget.controls["VisibleString"] + visible_icon_labels = [ + child + for child in visible_control.findChildren(QLabel) + if child.accessibleDescription() == hidden_hint + ] + assert len(visible_icon_labels) == 0