Codebase list python-keyring / c4a3743d-785a-4189-8b7c-aabe3f457caf/main
New upstream release. Debian Janitor 1 year, 3 months ago
28 changed file(s) with 366 addition(s) and 70 deletion(s). Raw diff Collapse all Expand all
0 tidelift: pypi/PROJECT
0 github: jaraco
1 tidelift: pypi/keyring
00 name: tests
11
22 on: [push, pull_request]
3
4 env:
5 # Environment variables to support color support (jaraco/skeleton#66):
6 # Request colored output from CLI tools supporting it. Different tools
7 # interpret the value differently. For some, just being set is sufficient.
8 # For others, it must be a non-zero integer. For yet others, being set
9 # to a non-empty value is sufficient. For tox, it must be one of
10 # <blank>, 0, 1, false, no, off, on, true, yes. The only enabling value
11 # in common is "1".
12 FORCE_COLOR: 1
13 # MyPy's color enforcement (must be a non-zero number)
14 MYPY_FORCE_COLOR: -42
15 # Recognized by the `py` package, dependency of `pytest` (must be "1")
16 PY_COLORS: 1
17 # Make tox-wrapped tools see color requests
18 TOX_TESTENV_PASSENV: >-
19 FORCE_COLOR
20 MYPY_FORCE_COLOR
21 NO_COLOR
22 PY_COLORS
23 PYTEST_THEME
24 PYTEST_THEME_MODE
25
26 # Suppress noisy pip warnings
27 PIP_DISABLE_PIP_VERSION_CHECK: 'true'
28 PIP_NO_PYTHON_VERSION_WARNING: 'true'
29 PIP_NO_WARN_SCRIPT_LOCATION: 'true'
30
31 # Disable the spinner, noise in GHA; TODO(webknjaz): Fix this upstream
32 # Must be "1".
33 TOX_PARALLEL_NO_SPINNER: 1
34
335
436 jobs:
537 test:
638 strategy:
739 matrix:
840 python:
9 - 3.7
10 - '3.10'
11 - '3.11'
41 - "3.7"
42 - "3.11"
43 - "3.12"
44 # Workaround for actions/setup-python#508
45 dev:
46 - -dev
1247 platform:
1348 - ubuntu-latest
1449 - macos-latest
1550 - windows-latest
51 include:
52 - python: "3.8"
53 platform: ubuntu-latest
54 - python: "3.9"
55 platform: ubuntu-latest
56 - python: "3.10"
57 platform: ubuntu-latest
58 - python: pypy3.9
59 platform: ubuntu-latest
1660 runs-on: ${{ matrix.platform }}
61 continue-on-error: ${{ matrix.python == '3.12' }}
1762 steps:
1863 - uses: actions/checkout@v3
1964 - name: Setup Python
2065 uses: actions/setup-python@v4
2166 with:
22 python-version: ${{ matrix.python }}-dev
67 python-version: ${{ matrix.python }}${{ matrix.dev }}
2368 - name: Install tox
2469 run: |
2570 python -m pip install tox
5196 - name: Setup Python
5297 uses: actions/setup-python@v4
5398 with:
54 python-version: "3.11-dev"
99 python-version: 3.11-dev
55100 - name: Install tox
56101 run: |
57102 python -m pip install tox
0 version: 2
1 python:
2 install:
3 - path: .
4 extra_requirements:
5 - docs
6
7 # workaround for readthedocs/readthedocs.org#9623
8 build:
9 # workaround for readthedocs/readthedocs.org#9635
10 os: ubuntu-22.04
11 tools:
12 python: "3"
+0
-6
.readthedocs.yml less more
0 version: 2
1 python:
2 install:
3 - path: .
4 extra_requirements:
5 - docs
0 v23.13.1
1 --------
2
3 * #573: Fixed failure in macOS backend when attempting to set a
4 password after previously setting a blank password, including a
5 test applying to all backends.
6
7 v23.13.0
8 --------
9
10 * #608: Added support for tab completion on the ``keyring`` command
11 if the ``completion`` extra is installed (``keyring[completion]``).
12
13 v23.12.1
14 --------
15
16 * #612: Prevent installation of ``pywin32-ctypes 0.1.2`` with broken
17 ``use2to3`` directive.
18
19 v23.12.0
20 --------
21
22 * #607: Removed PSF license as it was unused and confusing. Project
23 remains MIT licensed as always.
24
25 v23.11.0
26 --------
27
28 * #603: In ``libsecret``, check that the service is available before
29 declaring viability.
30
31 v23.10.0
32 --------
33
34 * #526: Bump requirement on ``importlib_metadata`` to pull in fix for
35 improperly-normalized names on egg-info.
36
037 v23.9.3
138 -------
239
00 Metadata-Version: 2.1
11 Name: keyring
2 Version: 23.9.3
2 Version: 23.13.1
33 Summary: Store and access your passwords safely.
44 Home-page: https://github.com/jaraco/keyring
55 Author: Kang Zhang
88 Maintainer-email: jaraco@jaraco.com
99 Classifier: Development Status :: 5 - Production/Stable
1010 Classifier: Intended Audience :: Developers
11 Classifier: License :: OSI Approved :: Python Software Foundation License
1211 Classifier: License :: OSI Approved :: MIT License
1312 Classifier: Programming Language :: Python :: 3
1413 Classifier: Programming Language :: Python :: 3 :: Only
1514 Requires-Python: >=3.7
1615 Provides-Extra: testing
1716 Provides-Extra: docs
17 Provides-Extra: completion
1818 License-File: LICENSE
1919
2020 .. image:: https://img.shields.io/pypi/v/keyring.svg
21 :target: `PyPI link`_
21 :target: https://pypi.org/project/keyring
2222
2323 .. image:: https://img.shields.io/pypi/pyversions/keyring.svg
24 :target: `PyPI link`_
25
26 .. _PyPI link: https://pypi.org/project/keyring
2724
2825 .. image:: https://github.com/jaraco/keyring/workflows/tests/badge.svg
2926 :target: https://github.com/jaraco/keyring/actions?query=workflow%3A%22tests%22
114111 Password for 'username' in 'system':
115112 $ python -m keyring get system username
116113 password
114
115 Tab Completion
116 --------------
117
118 If installed via a package manager (apt, pacman, nix, homebrew, etc),
119 these shell completions may already have been distributed with the package
120 (no action required).
121
122 Keyring provides tab completion if the ``completion`` extra is installed::
123
124 $ pip install 'keyring[completion]'
125
126 Then, generate shell completions, something like::
127
128 $ keyring --print-completion bash | sudo tee /usr/share/bash-completion/completions/keyring
129 $ keyring --print-completion zsh | sudo tee /usr/share/zsh/site-functions/_keyring
130 $ keyring --print-completion tcsh | sudo tee /etc/profile.d/keyring.csh
131
132 **Note**: the path of `/usr/share` is mainly for GNU/Linux. For other OSs,
133 consider:
134
135 - macOS (Homebrew x86): /usr/local/share
136 - macOS (Homebrew ARM): /opt/homebrew/share
137 - Android (Termux): /data/data/com.termux/files/usr/share
138 - Windows (mingw64 of msys2): /mingw64/share
139 - ...
140
141 After installing the shell completions, enable them following your shell's
142 recommended instructions. e.g.:
143
144 - bash: install [bash-completion](https://github.com/scop/bash-completion),
145 and ensure ``. /usr/share/bash-completion/bash_completion`` in ``~/.bashrc``.
146 - zsh: ensure ``autoload -Uz compinit && compinit`` appears in ``~/.zshrc``,
147 then ``grep -w keyring ~/.zcompdump`` to verify keyring appears, indicating
148 it was installed correctly.
117149
118150 Configuring
119151 ===========
420452
421453 This project and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.
422454
423 `Learn more <https://tidelift.com/subscription/pkg/pypi-PROJECT?utm_source=pypi-PROJECT&utm_medium=referral&utm_campaign=github>`_.
455 `Learn more <https://tidelift.com/subscription/pkg/pypi-keyring?utm_source=pypi-keyring&utm_medium=referral&utm_campaign=github>`_.
424456
425457 Security Contact
426458 ================
00 .. image:: https://img.shields.io/pypi/v/keyring.svg
1 :target: `PyPI link`_
1 :target: https://pypi.org/project/keyring
22
33 .. image:: https://img.shields.io/pypi/pyversions/keyring.svg
4 :target: `PyPI link`_
5
6 .. _PyPI link: https://pypi.org/project/keyring
74
85 .. image:: https://github.com/jaraco/keyring/workflows/tests/badge.svg
96 :target: https://github.com/jaraco/keyring/actions?query=workflow%3A%22tests%22
9491 Password for 'username' in 'system':
9592 $ python -m keyring get system username
9693 password
94
95 Tab Completion
96 --------------
97
98 If installed via a package manager (apt, pacman, nix, homebrew, etc),
99 these shell completions may already have been distributed with the package
100 (no action required).
101
102 Keyring provides tab completion if the ``completion`` extra is installed::
103
104 $ pip install 'keyring[completion]'
105
106 Then, generate shell completions, something like::
107
108 $ keyring --print-completion bash | sudo tee /usr/share/bash-completion/completions/keyring
109 $ keyring --print-completion zsh | sudo tee /usr/share/zsh/site-functions/_keyring
110 $ keyring --print-completion tcsh | sudo tee /etc/profile.d/keyring.csh
111
112 **Note**: the path of `/usr/share` is mainly for GNU/Linux. For other OSs,
113 consider:
114
115 - macOS (Homebrew x86): /usr/local/share
116 - macOS (Homebrew ARM): /opt/homebrew/share
117 - Android (Termux): /data/data/com.termux/files/usr/share
118 - Windows (mingw64 of msys2): /mingw64/share
119 - ...
120
121 After installing the shell completions, enable them following your shell's
122 recommended instructions. e.g.:
123
124 - bash: install [bash-completion](https://github.com/scop/bash-completion),
125 and ensure ``. /usr/share/bash-completion/bash_completion`` in ``~/.bashrc``.
126 - zsh: ensure ``autoload -Uz compinit && compinit`` appears in ``~/.zshrc``,
127 then ``grep -w keyring ~/.zcompdump`` to verify keyring appears, indicating
128 it was installed correctly.
97129
98130 Configuring
99131 ===========
400432
401433 This project and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.
402434
403 `Learn more <https://tidelift.com/subscription/pkg/pypi-PROJECT?utm_source=pypi-PROJECT&utm_medium=referral&utm_campaign=github>`_.
435 `Learn more <https://tidelift.com/subscription/pkg/pypi-keyring?utm_source=pypi-keyring&utm_medium=referral&utm_campaign=github>`_.
404436
405437 Security Contact
406438 ================
0 python-keyring (23.13.1-1) UNRELEASED; urgency=low
1
2 * New upstream release.
3
4 -- Debian Janitor <janitor@jelmer.uk> Tue, 31 Jan 2023 17:29:03 -0000
5
06 python-keyring (23.9.3-2) unstable; urgency=medium
17
28 [ Debian Janitor ]
0 #!/usr/bin/env python3
1 # -*- coding: utf-8 -*-
2 # flake8: noqa
3
4 extensions = ['sphinx.ext.autodoc', 'jaraco.packaging.sphinx', 'rst.linker']
0 extensions = [
1 'sphinx.ext.autodoc',
2 'jaraco.packaging.sphinx',
3 ]
54
65 master_doc = "index"
6 html_theme = "furo"
77
8 # Link dates and other references in the changelog
9 extensions += ['rst.linker']
810 link_files = {
911 '../CHANGES.rst': dict(
1012 using=dict(GH='https://github.com'),
2527 )
2628 }
2729
28 # Be strict about any broken references:
30 # Be strict about any broken references
2931 nitpicky = True
3032
3133 # Include Python intersphinx mapping to prevent failures
3537 'python': ('https://docs.python.org/3', None),
3638 }
3739
40 # Preserve authored syntax for defaults
41 autodoc_preserve_defaults = True
42
3843 extensions += ['jaraco.tidelift']
55
66 When keyring runs, it invokes init_backend which attempts to load a backend either as indicated by the environment, the config, or using heuristics [based on priorities](https://github.com/jaraco/keyring/blob/053e79bc101c45af2b86fb2c323bfb3e96a083cc/keyring/core.py#L93-L97).
77
8 Assuming no config is detected from environment variables (it might be worth double-checking), when loading from config, it determines the filename by calling [`keyring.util._platform.config_root()`](https://github.com/jaraco/keyring/blob/053e79bc101c45af2b86fb2c323bfb3e96a083cc/keyring/core.py#L152), which as you can see varies by platform.
8 Assuming no config is detected from environment variables (it might be worth double-checking), when loading from config, it determines the filename by calling [`keyring.util.platform_.config_root()`](https://github.com/jaraco/keyring/blob/053e79bc101c45af2b86fb2c323bfb3e96a083cc/keyring/core.py#L152), which as you can see varies by platform.
99
1010 Unless you're on Mac or Windows, the [Linux behavior is used](https://github.com/jaraco/keyring/blob/053e79bc101c45af2b86fb2c323bfb3e96a083cc/keyring/util/platform_.py#L53-L62). That setting also is dependent on the environment. If `XDG_CONFIG_HOME` is configured, that is where it will be looking for the config file. If not, it will look for it in `~/.local/share` (however that resolves using `os.expanduser`). The config file is always named "python_keyring".
1111
11 Hook used by pyinstaller to expose hidden imports.
22 """
33
4 from keyring.py310compat import metadata
4 from keyring.py312compat import metadata
55
66 hiddenimports = [ep.value for ep in metadata.entry_points(group='keyring.backends')]
99
1010 from typing import Optional
1111
12 from .py310compat import metadata
12 from .py312compat import metadata
1313 from . import credentials, errors, util
1414 from ._compat import properties
1515
0 # Complete keyring backends for `keyring -b` from `keyring --list-backends`
1 # % keyring -b <TAB>
2 # keyring priority
3 # keyring.backends.chainer.ChainerBackend 10
4 # keyring.backends.fail.Keyring 0
5 # ... ...
6
7 backend_complete() {
8 local line
9 while read -r line; do
10 choices+=(${${line/ \(priority: /\\\\:}/)/})
11 done <<< "$($words[1] --list-backends)"
12 _arguments "*:keyring priority:(($choices))"
13 }
66 from ..errors import (
77 PasswordDeleteError,
88 PasswordSetError,
9 ExceptionRaisedContext,
109 KeyringLocked,
1110 )
1211
4948
5049 @properties.classproperty
5150 def priority(cls):
52 with ExceptionRaisedContext() as exc:
53 Secret.__name__
54 if exc:
51 if not available:
5552 raise RuntimeError("libsecret required")
53
54 # Make sure there is actually a secret service running
55 try:
56 Secret.Service.get_sync(Secret.ServiceFlags.OPEN_SESSION, None)
57 except GLib.Error as error:
58 raise RuntimeError("Can't open a session to the secret service") from error
59
5660 return 4.8
5761
5862 def get_password(self, service, username):
0 import contextlib
01 import ctypes
12 from ctypes import (
23 c_void_p,
146147
147148
148149 def set_generic_password(name, service, username, password):
149 if find_generic_password(name, service, username, not_found_ok=True):
150 with contextlib.suppress(NotFound):
150151 delete_generic_password(name, service, username)
151152
152153 q = create_query(
66
77 from . import core
88 from . import backend
9 from . import completion
910 from . import set_keyring, get_password, set_password, delete_password
1011
1112
3637 )
3738 self.parser.add_argument(
3839 'operation',
39 help="get|set|del",
40 choices=["get", "set", "del"],
4041 nargs="?",
4142 )
4243 self.parser.add_argument(
4748 'username',
4849 nargs="?",
4950 )
51 completion.install(self.parser)
5052
5153 def run(self, argv):
5254 args = self.parser.parse_args(argv)
0 import argparse
1 import sys
2
3 try:
4 import shtab
5 except ImportError:
6 pass
7
8 if sys.version_info < (3, 9):
9 from importlib_resources import files
10 else:
11 from importlib.resources import files
12
13
14 class _MissingCompletionAction(argparse.Action):
15 def __call__(self, parser, namespace, values, option_string):
16 print("Install keyring[completion] for completion support.")
17 parser.exit(0)
18
19
20 def add_completion_notice(parser):
21 """Add completion argument to parser."""
22 parser.add_argument(
23 "--print-completion",
24 choices=["bash", "zsh", "tcsh"],
25 action=_MissingCompletionAction,
26 help="print shell completion script",
27 )
28 return parser
29
30
31 def get_action(parser, option):
32 (match,) = (action for action in parser._actions if option in action.option_strings)
33 return match
34
35
36 def install_completion(parser):
37 preamble = dict(
38 zsh=files(__package__).joinpath('backend_complete.zsh').read_text(),
39 )
40 shtab.add_argument_to(parser, preamble=preamble)
41 get_action(parser, '--keyring-path').completion = shtab.DIR
42 get_action(parser, '--keyring-backend').completion = dict(zsh='backend_complete')
43 return parser
44
45
46 def install(parser):
47 try:
48 install_completion(parser)
49 except NameError:
50 add_completion_notice(parser)
+0
-10
keyring/py310compat.py less more
0 import sys
1
2
3 __all__ = ['metadata']
4
5
6 if sys.version_info > (3, 10):
7 import importlib.metadata as metadata
8 else:
9 import importlib_metadata as metadata # type: ignore
0 import sys
1
2
3 __all__ = ['metadata']
4
5
6 if sys.version_info > (3, 12):
7 import importlib.metadata as metadata
8 else:
9 import importlib_metadata as metadata # type: ignore
6969 username = random_string(20)
7070 service = random_string(20)
7171 self.check_set_get(service, username, password)
72
73 def test_set_after_set_blank(self):
74 service = random_string(20)
75 username = random_string(20)
76 self.keyring.set_password(service, username, "")
77 self.keyring.set_password(service, username, "non-blank")
7278
7379 def test_difficult_chars(self):
7480 password = random_string(20, self.DIFFICULT_CHARS)
00 Metadata-Version: 2.1
11 Name: keyring
2 Version: 23.9.3
2 Version: 23.13.1
33 Summary: Store and access your passwords safely.
44 Home-page: https://github.com/jaraco/keyring
55 Author: Kang Zhang
88 Maintainer-email: jaraco@jaraco.com
99 Classifier: Development Status :: 5 - Production/Stable
1010 Classifier: Intended Audience :: Developers
11 Classifier: License :: OSI Approved :: Python Software Foundation License
1211 Classifier: License :: OSI Approved :: MIT License
1312 Classifier: Programming Language :: Python :: 3
1413 Classifier: Programming Language :: Python :: 3 :: Only
1514 Requires-Python: >=3.7
1615 Provides-Extra: testing
1716 Provides-Extra: docs
17 Provides-Extra: completion
1818 License-File: LICENSE
1919
2020 .. image:: https://img.shields.io/pypi/v/keyring.svg
21 :target: `PyPI link`_
21 :target: https://pypi.org/project/keyring
2222
2323 .. image:: https://img.shields.io/pypi/pyversions/keyring.svg
24 :target: `PyPI link`_
25
26 .. _PyPI link: https://pypi.org/project/keyring
2724
2825 .. image:: https://github.com/jaraco/keyring/workflows/tests/badge.svg
2926 :target: https://github.com/jaraco/keyring/actions?query=workflow%3A%22tests%22
114111 Password for 'username' in 'system':
115112 $ python -m keyring get system username
116113 password
114
115 Tab Completion
116 --------------
117
118 If installed via a package manager (apt, pacman, nix, homebrew, etc),
119 these shell completions may already have been distributed with the package
120 (no action required).
121
122 Keyring provides tab completion if the ``completion`` extra is installed::
123
124 $ pip install 'keyring[completion]'
125
126 Then, generate shell completions, something like::
127
128 $ keyring --print-completion bash | sudo tee /usr/share/bash-completion/completions/keyring
129 $ keyring --print-completion zsh | sudo tee /usr/share/zsh/site-functions/_keyring
130 $ keyring --print-completion tcsh | sudo tee /etc/profile.d/keyring.csh
131
132 **Note**: the path of `/usr/share` is mainly for GNU/Linux. For other OSs,
133 consider:
134
135 - macOS (Homebrew x86): /usr/local/share
136 - macOS (Homebrew ARM): /opt/homebrew/share
137 - Android (Termux): /data/data/com.termux/files/usr/share
138 - Windows (mingw64 of msys2): /mingw64/share
139 - ...
140
141 After installing the shell completions, enable them following your shell's
142 recommended instructions. e.g.:
143
144 - bash: install [bash-completion](https://github.com/scop/bash-completion),
145 and ensure ``. /usr/share/bash-completion/bash_completion`` in ``~/.bashrc``.
146 - zsh: ensure ``autoload -Uz compinit && compinit`` appears in ``~/.zshrc``,
147 then ``grep -w keyring ~/.zcompdump`` to verify keyring appears, indicating
148 it was installed correctly.
117149
118150 Configuring
119151 ===========
420452
421453 This project and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.
422454
423 `Learn more <https://tidelift.com/subscription/pkg/pypi-PROJECT?utm_source=pypi-PROJECT&utm_medium=referral&utm_campaign=github>`_.
455 `Learn more <https://tidelift.com/subscription/pkg/pypi-keyring?utm_source=pypi-keyring&utm_medium=referral&utm_campaign=github>`_.
424456
425457 Security Contact
426458 ================
22 .flake8
33 .gitignore
44 .pre-commit-config.yaml
5 .readthedocs.yml
5 .readthedocs.yaml
66 .travis-macos
77 CHANGES.rst
88 Dockerfile
2828 keyring/_compat.py
2929 keyring/_properties_compat.py
3030 keyring/backend.py
31 keyring/backend_complete.zsh
3132 keyring/cli.py
33 keyring/completion.py
3234 keyring/core.py
3335 keyring/credentials.py
3436 keyring/devpi_client.py
3537 keyring/errors.py
3638 keyring/http.py
3739 keyring/py.typed
38 keyring/py310compat.py
40 keyring/py312compat.py
3941 keyring.egg-info/PKG-INFO
4042 keyring.egg-info/SOURCES.txt
4143 keyring.egg-info/dependency_links.txt
00 jaraco.classes
11
2 [:python_version < "3.10"]
3 importlib_metadata>=3.6
2 [:python_version < "3.12"]
3 importlib_metadata>=4.11.4
4
5 [:python_version < "3.9"]
6 importlib_resources
47
58 [:sys_platform == "linux"]
69 SecretStorage>=3.2
710 jeepney>=0.4.2
811
912 [:sys_platform == "win32"]
10 pywin32-ctypes!=0.1.0,!=0.1.1
13 pywin32-ctypes>=0.2.0
14
15 [completion]
16 shtab
1117
1218 [docs]
13 sphinx
19 sphinx>=3.5
1420 jaraco.packaging>=9
1521 rst.linker>=1.9
22 furo
1623 jaraco.tidelift>=1.4
1724
1825 [testing]
1926 pytest>=6
2027 pytest-checkdocs>=2.4
21 pytest-flake8
2228 flake8<5
2329 pytest-cov
2430 pytest-enabler>=1.3
2632 [testing:platform_python_implementation != "PyPy"]
2733 pytest-black>=0.3.7
2834 pytest-mypy>=0.9.1
35
36 [testing:python_version < "3.12"]
37 pytest-flake8
00 [mypy]
11 ignore_missing_imports = True
2 # required to support namespace packages
3 # https://github.com/python/mypy/issues/14057
4 explicit_package_bases = True
1313 addopts = "--mypy"
1414
1515 [tool.pytest-enabler.flake8]
16 addopts = "--flake8"
16 # addopts = "--flake8"
1717
1818 [tool.pytest-enabler.cov]
1919 addopts = "--cov"
22 addopts=--doctest-modules
33 doctest_optionflags=ALLOW_UNICODE ELLIPSIS
44 filterwarnings=
5 # Ensure ResourceWarnings are emitted
6 default::ResourceWarning
7
58 # Suppress deprecation warning in flake8
69 ignore:SelectableGroups dict interface is deprecated::flake8
710
99 classifiers =
1010 Development Status :: 5 - Production/Stable
1111 Intended Audience :: Developers
12 License :: OSI Approved :: Python Software Foundation License
1312 License :: OSI Approved :: MIT License
1413 Programming Language :: Python :: 3
1514 Programming Language :: Python :: 3 :: Only
1918 include_package_data = true
2019 python_requires = >=3.7
2120 install_requires =
22 pywin32-ctypes!=0.1.0,!=0.1.1; sys_platform=="win32"
21 pywin32-ctypes>=0.2.0; sys_platform=="win32"
2322 SecretStorage>=3.2; sys_platform=="linux"
2423 jeepney>=0.4.2; sys_platform=="linux"
25 importlib_metadata >= 3.6; python_version < "3.10"
24 importlib_metadata >= 4.11.4; python_version < "3.12"
2625 jaraco.classes
26 importlib_resources; python_version < "3.9"
2727
2828 [options.packages.find]
2929 exclude =
3636 testing =
3737 pytest >= 6
3838 pytest-checkdocs >= 2.4
39 pytest-flake8
39 pytest-flake8; \
40 python_version < "3.12"
4041 flake8 < 5
4142 pytest-black >= 0.3.7; \
4243 python_implementation != "PyPy"
4546 python_implementation != "PyPy"
4647 pytest-enabler >= 1.3
4748 docs =
48 sphinx
49 sphinx >= 3.5
4950 jaraco.packaging >= 9
5051 rst.linker >= 1.9
52 furo
5153 jaraco.tidelift >= 1.4
54 completion =
55 shtab
5256
5357 [options.entry_points]
5458 console_scripts =
00 from keyring import backend
1 from keyring.py310compat import metadata
1 from keyring.py312compat import metadata
22
33
44 def test_entry_point():