Skip to content

GitLab

  • Menu
Projects Groups Snippets
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • M mercurial_keyring
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 6
    • Issues 6
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • mercurial
  • mercurial_keyring
  • Issues
  • #28

Closed
Open
Created Aug 23, 2013 by Bitbucket Importer@bitbucket_importerOwner

demandimport error - mercurial_keyring fails with latest keyring (2.0)

Created originally on Bitbucket by sutupud

After upgrading keyring to version 2.0 mercurial_keyring stopped working.

After adding some traceback, this is what I'm getting:

:::none
    $ hg push
    Traceback (most recent call last):
      File "/home/sutu/.local/lib/python2.7/site-packages/mercurial_keyring.py", line 70, in <module>
        import keyring
      File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 95, in _demandimport
        return _import(name, globals, locals, fromlist, level)
      File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/__init__.py", line 9, in <module>
        from core import (set_keyring, get_keyring, set_password, get_password,
      File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 114, in _demandimport
        mod = _origimport(name, globals, locals)
      File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/core.py", line 13, in <module>
        from keyring import backend
      File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 95, in _demandimport
        return _import(name, globals, locals, fromlist, level)
      File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/backend.py", line 130, in <module>
        from keyring.backends.Windows import EncryptedKeyring as Win32CryptoKeyring
      File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 114, in _demandimport
        mod = _origimport(name, globals, locals)
      File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/backends/Windows.py", line 26, in <module>
        from . import _win_crypto
      File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 112, in _demandimport
        return _origimport(name, globals, locals, fromlist, level)
      File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/backends/_win_crypto.py", line 15, in <module>
        class DATA_BLOB(Structure):
      File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/backends/_win_crypto.py", line 16, in DATA_BLOB
        _fields_ = [('cbData', wintypes.DWORD),
      File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 86, in __getattribute__
        self._load()
      File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 58, in _load
        mod = _origimport(head, globals, locals)
      File "/usr/lib/python2.7/ctypes/wintypes.py", line 23, in <module>
        class VARIANT_BOOL(_SimpleCData):
    ValueError: _type_ 'v' not supported
    *** failed to import extension mercurial_keyring: _type_ 'v' not supported

Adding ctypes to the list of blocked modules for demandimport fixes the problem.


update:

Seems the problem is a little more serious then I thought previously, I missed it because I was setting my keyring in keyringrc.conf.
When disabling that, there are more errors:

Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/mercurial/extensions.py", line 88, in loadall
    load(ui, name, path)
  File "/usr/lib/python2.7/dist-packages/mercurial/extensions.py", line 75, in load
    mod = importh(name)
  File "/usr/lib/python2.7/dist-packages/mercurial/extensions.py", line 65, in importh
    mod = __import__(name)
  File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 95, in _demandimport
    return _import(name, globals, locals, fromlist, level)
  File "/home/sutu/.local/lib/python2.7/site-packages/mercurial_keyring.py", line 71, in <module>
    import keyring
  File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 95, in _demandimport
    return _import(name, globals, locals, fromlist, level)
  File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/__init__.py", line 9, in <module>
    from core import (set_keyring, get_keyring, set_password, get_password,
  File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 114, in _demandimport
    mod = _origimport(name, globals, locals)
  File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/core.py", line 166, in <module>
    init_backend()
  File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/core.py", line 63, in init_backend
    keyrings = backend.get_all_keyring()
  File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/util/__init__.py", line 24, in wrapper
    func.always_returns = func(*args, **kwargs)
  File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/backend.py", line 119, in get_all_keyring
    exceptions=TypeError))
  File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/util/__init__.py", line 35, in suppress_exceptions
    for callable in callables:
  File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/backend.py", line 111, in is_class_viable
    keyring_cls.priority
  File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/util/properties.py", line 20, in __get__
    return self.fget.__get__(None, owner)()
  File "/home/sutu/.local/lib/python2.7/site-packages/keyring-2.0-py2.7.egg/keyring/backends/SecretService.py", line 26, in priority
    except secretstorage.exceptions.SecretServiceNotAvailableException:
  File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 86, in __getattribute__
    self._load()
  File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 58, in _load
    mod = _origimport(head, globals, locals)
ImportError: No module named secretstorage

Unfortunately I adding secretstorage to the block list doesn't help. The only way to fix this I could find is to disable demandimport when importing keyring:

from mercurial import demandimport

if __import__ == demandimport._import:
    demandimport.disable()
    try:
        import keyring
    finally:
        demandimport.enable()
else:
    import keyring
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
Time tracking