New upstream release.
Debian Janitor
1 year, 3 months ago
0 | 0 | name: tests |
1 | 1 | |
2 | 2 | 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 | ||
3 | 35 | |
4 | 36 | jobs: |
5 | 37 | test: |
6 | 38 | strategy: |
7 | 39 | matrix: |
8 | 40 | 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 | |
12 | 47 | platform: |
13 | 48 | - ubuntu-latest |
14 | 49 | - macos-latest |
15 | 50 | - 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 | |
16 | 60 | runs-on: ${{ matrix.platform }} |
61 | continue-on-error: ${{ matrix.python == '3.12' }} | |
17 | 62 | steps: |
18 | 63 | - uses: actions/checkout@v3 |
19 | 64 | - name: Setup Python |
20 | 65 | uses: actions/setup-python@v4 |
21 | 66 | with: |
22 | python-version: ${{ matrix.python }}-dev | |
67 | python-version: ${{ matrix.python }}${{ matrix.dev }} | |
23 | 68 | - name: Install tox |
24 | 69 | run: | |
25 | 70 | python -m pip install tox |
51 | 96 | - name: Setup Python |
52 | 97 | uses: actions/setup-python@v4 |
53 | 98 | with: |
54 | python-version: "3.11-dev" | |
99 | python-version: 3.11-dev | |
55 | 100 | - name: Install tox |
56 | 101 | run: | |
57 | 102 | 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 | 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 | ||
0 | 37 | v23.9.3 |
1 | 38 | ------- |
2 | 39 |
0 | 0 | Metadata-Version: 2.1 |
1 | 1 | Name: keyring |
2 | Version: 23.9.3 | |
2 | Version: 23.13.1 | |
3 | 3 | Summary: Store and access your passwords safely. |
4 | 4 | Home-page: https://github.com/jaraco/keyring |
5 | 5 | Author: Kang Zhang |
8 | 8 | Maintainer-email: jaraco@jaraco.com |
9 | 9 | Classifier: Development Status :: 5 - Production/Stable |
10 | 10 | Classifier: Intended Audience :: Developers |
11 | Classifier: License :: OSI Approved :: Python Software Foundation License | |
12 | 11 | Classifier: License :: OSI Approved :: MIT License |
13 | 12 | Classifier: Programming Language :: Python :: 3 |
14 | 13 | Classifier: Programming Language :: Python :: 3 :: Only |
15 | 14 | Requires-Python: >=3.7 |
16 | 15 | Provides-Extra: testing |
17 | 16 | Provides-Extra: docs |
17 | Provides-Extra: completion | |
18 | 18 | License-File: LICENSE |
19 | 19 | |
20 | 20 | .. image:: https://img.shields.io/pypi/v/keyring.svg |
21 | :target: `PyPI link`_ | |
21 | :target: https://pypi.org/project/keyring | |
22 | 22 | |
23 | 23 | .. image:: https://img.shields.io/pypi/pyversions/keyring.svg |
24 | :target: `PyPI link`_ | |
25 | ||
26 | .. _PyPI link: https://pypi.org/project/keyring | |
27 | 24 | |
28 | 25 | .. image:: https://github.com/jaraco/keyring/workflows/tests/badge.svg |
29 | 26 | :target: https://github.com/jaraco/keyring/actions?query=workflow%3A%22tests%22 |
114 | 111 | Password for 'username' in 'system': |
115 | 112 | $ python -m keyring get system username |
116 | 113 | 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. | |
117 | 149 | |
118 | 150 | Configuring |
119 | 151 | =========== |
420 | 452 | |
421 | 453 | 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. |
422 | 454 | |
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>`_. | |
424 | 456 | |
425 | 457 | Security Contact |
426 | 458 | ================ |
0 | 0 | .. image:: https://img.shields.io/pypi/v/keyring.svg |
1 | :target: `PyPI link`_ | |
1 | :target: https://pypi.org/project/keyring | |
2 | 2 | |
3 | 3 | .. image:: https://img.shields.io/pypi/pyversions/keyring.svg |
4 | :target: `PyPI link`_ | |
5 | ||
6 | .. _PyPI link: https://pypi.org/project/keyring | |
7 | 4 | |
8 | 5 | .. image:: https://github.com/jaraco/keyring/workflows/tests/badge.svg |
9 | 6 | :target: https://github.com/jaraco/keyring/actions?query=workflow%3A%22tests%22 |
94 | 91 | Password for 'username' in 'system': |
95 | 92 | $ python -m keyring get system username |
96 | 93 | 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. | |
97 | 129 | |
98 | 130 | Configuring |
99 | 131 | =========== |
400 | 432 | |
401 | 433 | 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. |
402 | 434 | |
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>`_. | |
404 | 436 | |
405 | 437 | Security Contact |
406 | 438 | ================ |
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 | ||
0 | 6 | python-keyring (23.9.3-2) unstable; urgency=medium |
1 | 7 | |
2 | 8 | [ 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 | ] | |
5 | 4 | |
6 | 5 | master_doc = "index" |
6 | html_theme = "furo" | |
7 | 7 | |
8 | # Link dates and other references in the changelog | |
9 | extensions += ['rst.linker'] | |
8 | 10 | link_files = { |
9 | 11 | '../CHANGES.rst': dict( |
10 | 12 | using=dict(GH='https://github.com'), |
25 | 27 | ) |
26 | 28 | } |
27 | 29 | |
28 | # Be strict about any broken references: | |
30 | # Be strict about any broken references | |
29 | 31 | nitpicky = True |
30 | 32 | |
31 | 33 | # Include Python intersphinx mapping to prevent failures |
35 | 37 | 'python': ('https://docs.python.org/3', None), |
36 | 38 | } |
37 | 39 | |
40 | # Preserve authored syntax for defaults | |
41 | autodoc_preserve_defaults = True | |
42 | ||
38 | 43 | extensions += ['jaraco.tidelift'] |
5 | 5 | |
6 | 6 | 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). |
7 | 7 | |
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. | |
9 | 9 | |
10 | 10 | 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". |
11 | 11 |
1 | 1 | Hook used by pyinstaller to expose hidden imports. |
2 | 2 | """ |
3 | 3 | |
4 | from keyring.py310compat import metadata | |
4 | from keyring.py312compat import metadata | |
5 | 5 | |
6 | 6 | hiddenimports = [ep.value for ep in metadata.entry_points(group='keyring.backends')] |
9 | 9 | |
10 | 10 | from typing import Optional |
11 | 11 | |
12 | from .py310compat import metadata | |
12 | from .py312compat import metadata | |
13 | 13 | from . import credentials, errors, util |
14 | 14 | from ._compat import properties |
15 | 15 |
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 | } |
6 | 6 | from ..errors import ( |
7 | 7 | PasswordDeleteError, |
8 | 8 | PasswordSetError, |
9 | ExceptionRaisedContext, | |
10 | 9 | KeyringLocked, |
11 | 10 | ) |
12 | 11 | |
49 | 48 | |
50 | 49 | @properties.classproperty |
51 | 50 | def priority(cls): |
52 | with ExceptionRaisedContext() as exc: | |
53 | Secret.__name__ | |
54 | if exc: | |
51 | if not available: | |
55 | 52 | 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 | ||
56 | 60 | return 4.8 |
57 | 61 | |
58 | 62 | def get_password(self, service, username): |
0 | import contextlib | |
0 | 1 | import ctypes |
1 | 2 | from ctypes import ( |
2 | 3 | c_void_p, |
146 | 147 | |
147 | 148 | |
148 | 149 | 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): | |
150 | 151 | delete_generic_password(name, service, username) |
151 | 152 | |
152 | 153 | q = create_query( |
6 | 6 | |
7 | 7 | from . import core |
8 | 8 | from . import backend |
9 | from . import completion | |
9 | 10 | from . import set_keyring, get_password, set_password, delete_password |
10 | 11 | |
11 | 12 | |
36 | 37 | ) |
37 | 38 | self.parser.add_argument( |
38 | 39 | 'operation', |
39 | help="get|set|del", | |
40 | choices=["get", "set", "del"], | |
40 | 41 | nargs="?", |
41 | 42 | ) |
42 | 43 | self.parser.add_argument( |
47 | 48 | 'username', |
48 | 49 | nargs="?", |
49 | 50 | ) |
51 | completion.install(self.parser) | |
50 | 52 | |
51 | 53 | def run(self, argv): |
52 | 54 | 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 | 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 |
69 | 69 | username = random_string(20) |
70 | 70 | service = random_string(20) |
71 | 71 | 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") | |
72 | 78 | |
73 | 79 | def test_difficult_chars(self): |
74 | 80 | password = random_string(20, self.DIFFICULT_CHARS) |
0 | 0 | Metadata-Version: 2.1 |
1 | 1 | Name: keyring |
2 | Version: 23.9.3 | |
2 | Version: 23.13.1 | |
3 | 3 | Summary: Store and access your passwords safely. |
4 | 4 | Home-page: https://github.com/jaraco/keyring |
5 | 5 | Author: Kang Zhang |
8 | 8 | Maintainer-email: jaraco@jaraco.com |
9 | 9 | Classifier: Development Status :: 5 - Production/Stable |
10 | 10 | Classifier: Intended Audience :: Developers |
11 | Classifier: License :: OSI Approved :: Python Software Foundation License | |
12 | 11 | Classifier: License :: OSI Approved :: MIT License |
13 | 12 | Classifier: Programming Language :: Python :: 3 |
14 | 13 | Classifier: Programming Language :: Python :: 3 :: Only |
15 | 14 | Requires-Python: >=3.7 |
16 | 15 | Provides-Extra: testing |
17 | 16 | Provides-Extra: docs |
17 | Provides-Extra: completion | |
18 | 18 | License-File: LICENSE |
19 | 19 | |
20 | 20 | .. image:: https://img.shields.io/pypi/v/keyring.svg |
21 | :target: `PyPI link`_ | |
21 | :target: https://pypi.org/project/keyring | |
22 | 22 | |
23 | 23 | .. image:: https://img.shields.io/pypi/pyversions/keyring.svg |
24 | :target: `PyPI link`_ | |
25 | ||
26 | .. _PyPI link: https://pypi.org/project/keyring | |
27 | 24 | |
28 | 25 | .. image:: https://github.com/jaraco/keyring/workflows/tests/badge.svg |
29 | 26 | :target: https://github.com/jaraco/keyring/actions?query=workflow%3A%22tests%22 |
114 | 111 | Password for 'username' in 'system': |
115 | 112 | $ python -m keyring get system username |
116 | 113 | 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. | |
117 | 149 | |
118 | 150 | Configuring |
119 | 151 | =========== |
420 | 452 | |
421 | 453 | 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. |
422 | 454 | |
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>`_. | |
424 | 456 | |
425 | 457 | Security Contact |
426 | 458 | ================ |
2 | 2 | .flake8 |
3 | 3 | .gitignore |
4 | 4 | .pre-commit-config.yaml |
5 | .readthedocs.yml | |
5 | .readthedocs.yaml | |
6 | 6 | .travis-macos |
7 | 7 | CHANGES.rst |
8 | 8 | Dockerfile |
28 | 28 | keyring/_compat.py |
29 | 29 | keyring/_properties_compat.py |
30 | 30 | keyring/backend.py |
31 | keyring/backend_complete.zsh | |
31 | 32 | keyring/cli.py |
33 | keyring/completion.py | |
32 | 34 | keyring/core.py |
33 | 35 | keyring/credentials.py |
34 | 36 | keyring/devpi_client.py |
35 | 37 | keyring/errors.py |
36 | 38 | keyring/http.py |
37 | 39 | keyring/py.typed |
38 | keyring/py310compat.py | |
40 | keyring/py312compat.py | |
39 | 41 | keyring.egg-info/PKG-INFO |
40 | 42 | keyring.egg-info/SOURCES.txt |
41 | 43 | keyring.egg-info/dependency_links.txt |
0 | 0 | jaraco.classes |
1 | 1 | |
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 | |
4 | 7 | |
5 | 8 | [:sys_platform == "linux"] |
6 | 9 | SecretStorage>=3.2 |
7 | 10 | jeepney>=0.4.2 |
8 | 11 | |
9 | 12 | [:sys_platform == "win32"] |
10 | pywin32-ctypes!=0.1.0,!=0.1.1 | |
13 | pywin32-ctypes>=0.2.0 | |
14 | ||
15 | [completion] | |
16 | shtab | |
11 | 17 | |
12 | 18 | [docs] |
13 | sphinx | |
19 | sphinx>=3.5 | |
14 | 20 | jaraco.packaging>=9 |
15 | 21 | rst.linker>=1.9 |
22 | furo | |
16 | 23 | jaraco.tidelift>=1.4 |
17 | 24 | |
18 | 25 | [testing] |
19 | 26 | pytest>=6 |
20 | 27 | pytest-checkdocs>=2.4 |
21 | pytest-flake8 | |
22 | 28 | flake8<5 |
23 | 29 | pytest-cov |
24 | 30 | pytest-enabler>=1.3 |
26 | 32 | [testing:platform_python_implementation != "PyPy"] |
27 | 33 | pytest-black>=0.3.7 |
28 | 34 | pytest-mypy>=0.9.1 |
35 | ||
36 | [testing:python_version < "3.12"] | |
37 | pytest-flake8 |
0 | 0 | [mypy] |
1 | 1 | ignore_missing_imports = True |
2 | # required to support namespace packages | |
3 | # https://github.com/python/mypy/issues/14057 | |
4 | explicit_package_bases = True |
13 | 13 | addopts = "--mypy" |
14 | 14 | |
15 | 15 | [tool.pytest-enabler.flake8] |
16 | addopts = "--flake8" | |
16 | # addopts = "--flake8" | |
17 | 17 | |
18 | 18 | [tool.pytest-enabler.cov] |
19 | 19 | addopts = "--cov" |
2 | 2 | addopts=--doctest-modules |
3 | 3 | doctest_optionflags=ALLOW_UNICODE ELLIPSIS |
4 | 4 | filterwarnings= |
5 | # Ensure ResourceWarnings are emitted | |
6 | default::ResourceWarning | |
7 | ||
5 | 8 | # Suppress deprecation warning in flake8 |
6 | 9 | ignore:SelectableGroups dict interface is deprecated::flake8 |
7 | 10 |
9 | 9 | classifiers = |
10 | 10 | Development Status :: 5 - Production/Stable |
11 | 11 | Intended Audience :: Developers |
12 | License :: OSI Approved :: Python Software Foundation License | |
13 | 12 | License :: OSI Approved :: MIT License |
14 | 13 | Programming Language :: Python :: 3 |
15 | 14 | Programming Language :: Python :: 3 :: Only |
19 | 18 | include_package_data = true |
20 | 19 | python_requires = >=3.7 |
21 | 20 | install_requires = |
22 | pywin32-ctypes!=0.1.0,!=0.1.1; sys_platform=="win32" | |
21 | pywin32-ctypes>=0.2.0; sys_platform=="win32" | |
23 | 22 | SecretStorage>=3.2; sys_platform=="linux" |
24 | 23 | 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" | |
26 | 25 | jaraco.classes |
26 | importlib_resources; python_version < "3.9" | |
27 | 27 | |
28 | 28 | [options.packages.find] |
29 | 29 | exclude = |
36 | 36 | testing = |
37 | 37 | pytest >= 6 |
38 | 38 | pytest-checkdocs >= 2.4 |
39 | pytest-flake8 | |
39 | pytest-flake8; \ | |
40 | python_version < "3.12" | |
40 | 41 | flake8 < 5 |
41 | 42 | pytest-black >= 0.3.7; \ |
42 | 43 | python_implementation != "PyPy" |
45 | 46 | python_implementation != "PyPy" |
46 | 47 | pytest-enabler >= 1.3 |
47 | 48 | docs = |
48 | sphinx | |
49 | sphinx >= 3.5 | |
49 | 50 | jaraco.packaging >= 9 |
50 | 51 | rst.linker >= 1.9 |
52 | furo | |
51 | 53 | jaraco.tidelift >= 1.4 |
54 | completion = | |
55 | shtab | |
52 | 56 | |
53 | 57 | [options.entry_points] |
54 | 58 | console_scripts = |