Skip to content

Collect Perforce Login - Pywin32 error in not compatible hosts #15

Description

@antirotor

Is there an existing issue for this?

  • I have searched the existing issues and added correct labels.

Description

Current Behavior

Whenever https://github.com/ynput/ayon-perforce/blob/develop/client/ayon_perforce/plugins/publish/collect_perforce_login.py
runs, it needs pywin32 because AYON is accessing keyring and that in turn needs pywin32. It is binary dependency and currently it is shipped with the launcher. If host python differs from what we have in launcher (currently python 3.9), it crashes.

Note

This is specific for Windows.

Expected Behavior

We either need to provide working pywin32 to every supported hosts (but for that we would need to build it) or we need to delegate keyring access to AYON process - call subprocess from pyblish plugin to get the information.

Steps To Reproduce:

Run Maya 2025 (or any other host without python 3.9) along with the ayon-perforce. collect_perforce_login plugin will crash on publish.

Additional context:

Version

This happens on 84193f8

Note

Workaround is to limit the plugin to Unreal host right now so it won't break anything else until resolved

Relevant log output:

Traceback (most recent call last):
  File "C:\Users\annat\AppData\Local\Ynput\AYON\dependency_packages\ayon_2502241810_windows.zip\dependencies\pyblish\plugin.py", line 528, in __explicit_process
    runner(*args)
  File "C:\Users\annat\Documents\Projects\Ayon\ayon-perforce\client\ayon_perforce\plugins\publish\collect_perforce_login.py", line 50, in process
    conn_info = self._get_conn_info(
                ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\annat\Documents\Projects\Ayon\ayon-perforce\client\ayon_perforce\plugins\publish\collect_perforce_login.py", line 101, in _get_conn_info
    conn_info = perforce_addon.get_connection_info(**conn_info_payload)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\annat\Documents\Projects\Ayon\ayon-perforce\client\ayon_perforce\addon.py", line 96, in get_connection_info
    username, password = get_local_login()
                         ^^^^^^^^^^^^^^^^^
  File "C:\Users\annat\Documents\Projects\Ayon\ayon-perforce\client\ayon_perforce\lib.py", line 20, in get_local_login
    username = reg.get_item("value")
               ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\annat\Documents\Projects\Ayon\ayon-core\client\ayon_core\lib\local_settings.py", line 170, in get_item
    value = keyring.get_password(self._name, name)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\annat\Documents\Projects\Ayon\ayon-launcher\.venv\lib\site-packages\keyring\core.py", line 56, in get_password
    return get_keyring().get_password(service_name, username)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\annat\Documents\Projects\Ayon\ayon-launcher\.venv\lib\site-packages\keyring\backends\Windows.py", line 100, in get_password
    res = self._get_password(service)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\annat\Documents\Projects\Ayon\ayon-launcher\.venv\lib\site-packages\keyring\backends\Windows.py", line 113, in _get_password
    except pywintypes.error as e:
           ^^^^^^^^^^
NameError: name 'pywintypes' is not defined

Metadata

Metadata

Assignees

No one assigned

    Labels

    type: bugSomething isn't working

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions