Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
python-poetry
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open
python-poetry
Commits
ab2a0e8f
Commit
ab2a0e8f
authored
May 26, 2022
by
Arun Babu Neelicattu
Committed by
Bjorn Neergaard
May 26, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: cleanup keyring logging and class naming
parent
146c2af8
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
31 additions
and
24 deletions
+31
-24
src/poetry/utils/password_manager.py
+20
-13
tests/utils/test_password_manager.py
+11
-11
No files found.
src/poetry/utils/password_manager.py
View file @
ab2a0e8f
...
@@ -18,7 +18,7 @@ class PasswordManagerError(Exception):
...
@@ -18,7 +18,7 @@ class PasswordManagerError(Exception):
pass
pass
class
KeyR
ingError
(
Exception
):
class
PoetryKeyr
ingError
(
Exception
):
pass
pass
...
@@ -29,7 +29,7 @@ class HTTPAuthCredential:
...
@@ -29,7 +29,7 @@ class HTTPAuthCredential:
password
:
str
|
None
=
dataclasses
.
field
(
default
=
None
)
password
:
str
|
None
=
dataclasses
.
field
(
default
=
None
)
class
KeyR
ing
:
class
PoetryKeyr
ing
:
def
__init__
(
self
,
namespace
:
str
)
->
None
:
def
__init__
(
self
,
namespace
:
str
)
->
None
:
self
.
_namespace
=
namespace
self
.
_namespace
=
namespace
self
.
_is_available
=
True
self
.
_is_available
=
True
...
@@ -70,7 +70,7 @@ class KeyRing:
...
@@ -70,7 +70,7 @@ class KeyRing:
try
:
try
:
return
keyring
.
get_password
(
name
,
username
)
return
keyring
.
get_password
(
name
,
username
)
except
(
RuntimeError
,
keyring
.
errors
.
KeyringError
):
except
(
RuntimeError
,
keyring
.
errors
.
KeyringError
):
raise
KeyR
ingError
(
raise
PoetryKeyr
ingError
(
f
"Unable to retrieve the password for {name} from the key ring"
f
"Unable to retrieve the password for {name} from the key ring"
)
)
...
@@ -86,7 +86,7 @@ class KeyRing:
...
@@ -86,7 +86,7 @@ class KeyRing:
try
:
try
:
keyring
.
set_password
(
name
,
username
,
password
)
keyring
.
set_password
(
name
,
username
,
password
)
except
(
RuntimeError
,
keyring
.
errors
.
KeyringError
)
as
e
:
except
(
RuntimeError
,
keyring
.
errors
.
KeyringError
)
as
e
:
raise
KeyR
ingError
(
raise
PoetryKeyr
ingError
(
f
"Unable to store the password for {name} in the key ring: {e}"
f
"Unable to store the password for {name} in the key ring: {e}"
)
)
...
@@ -94,7 +94,6 @@ class KeyRing:
...
@@ -94,7 +94,6 @@ class KeyRing:
if
not
self
.
is_available
():
if
not
self
.
is_available
():
return
return
import
keyring
import
keyring.errors
import
keyring.errors
name
=
self
.
get_entry_name
(
name
)
name
=
self
.
get_entry_name
(
name
)
...
@@ -102,7 +101,7 @@ class KeyRing:
...
@@ -102,7 +101,7 @@ class KeyRing:
try
:
try
:
keyring
.
delete_password
(
name
,
username
)
keyring
.
delete_password
(
name
,
username
)
except
(
RuntimeError
,
keyring
.
errors
.
KeyringError
):
except
(
RuntimeError
,
keyring
.
errors
.
KeyringError
):
raise
KeyR
ingError
(
raise
PoetryKeyr
ingError
(
f
"Unable to delete the password for {name} from the key ring"
f
"Unable to delete the password for {name} from the key ring"
)
)
...
@@ -141,27 +140,34 @@ class KeyRing:
...
@@ -141,27 +140,34 @@ class KeyRing:
self
.
_is_available
=
False
self
.
_is_available
=
False
if
not
self
.
_is_available
:
if
not
self
.
_is_available
:
logger
.
warnin
g
(
"No suitable keyring backends were found"
)
logger
.
debu
g
(
"No suitable keyring backends were found"
)
class
PasswordManager
:
class
PasswordManager
:
def
__init__
(
self
,
config
:
Config
)
->
None
:
def
__init__
(
self
,
config
:
Config
)
->
None
:
self
.
_config
=
config
self
.
_config
=
config
self
.
_keyring
:
KeyR
ing
|
None
=
None
self
.
_keyring
:
PoetryKeyr
ing
|
None
=
None
@property
@property
def
keyring
(
self
)
->
KeyR
ing
:
def
keyring
(
self
)
->
PoetryKeyr
ing
:
if
self
.
_keyring
is
None
:
if
self
.
_keyring
is
None
:
self
.
_keyring
=
KeyRing
(
"poetry-repository"
)
self
.
_keyring
=
PoetryKeyring
(
"poetry-repository"
)
if
not
self
.
_keyring
.
is_available
():
if
not
self
.
_keyring
.
is_available
():
logger
.
warning
(
logger
.
debug
(
"Using a plaintext file to store and retrieve credentials"
"<warning>Keyring is not available, credentials will be stored and "
"retrieved from configuration files as plaintext.</>"
)
)
return
self
.
_keyring
return
self
.
_keyring
@staticmethod
def
warn_plaintext_credentials_stored
()
->
None
:
logger
.
warning
(
"Using a plaintext file to store credentials"
)
def
set_pypi_token
(
self
,
name
:
str
,
token
:
str
)
->
None
:
def
set_pypi_token
(
self
,
name
:
str
,
token
:
str
)
->
None
:
if
not
self
.
keyring
.
is_available
():
if
not
self
.
keyring
.
is_available
():
self
.
warn_plaintext_credentials_stored
()
self
.
_config
.
auth_config_source
.
add_property
(
f
"pypi-token.{name}"
,
token
)
self
.
_config
.
auth_config_source
.
add_property
(
f
"pypi-token.{name}"
,
token
)
else
:
else
:
self
.
keyring
.
set_password
(
name
,
"__token__"
,
token
)
self
.
keyring
.
set_password
(
name
,
"__token__"
,
token
)
...
@@ -200,6 +206,7 @@ class PasswordManager:
...
@@ -200,6 +206,7 @@ class PasswordManager:
auth
=
{
"username"
:
username
}
auth
=
{
"username"
:
username
}
if
not
self
.
keyring
.
is_available
():
if
not
self
.
keyring
.
is_available
():
self
.
warn_plaintext_credentials_stored
()
auth
[
"password"
]
=
password
auth
[
"password"
]
=
password
else
:
else
:
self
.
keyring
.
set_password
(
name
,
username
,
password
)
self
.
keyring
.
set_password
(
name
,
username
,
password
)
...
@@ -215,7 +222,7 @@ class PasswordManager:
...
@@ -215,7 +222,7 @@ class PasswordManager:
if
username
is
None
:
if
username
is
None
:
return
return
with
suppress
(
KeyR
ingError
):
with
suppress
(
PoetryKeyr
ingError
):
self
.
keyring
.
delete_password
(
name
,
username
)
self
.
keyring
.
delete_password
(
name
,
username
)
self
.
_config
.
auth_config_source
.
remove_property
(
f
"http-basic.{name}"
)
self
.
_config
.
auth_config_source
.
remove_property
(
f
"http-basic.{name}"
)
tests/utils/test_password_manager.py
View file @
ab2a0e8f
...
@@ -6,9 +6,9 @@ from typing import TYPE_CHECKING
...
@@ -6,9 +6,9 @@ from typing import TYPE_CHECKING
import
pytest
import
pytest
from
poetry.utils.password_manager
import
KeyRing
from
poetry.utils.password_manager
import
KeyRingError
from
poetry.utils.password_manager
import
PasswordManager
from
poetry.utils.password_manager
import
PasswordManager
from
poetry.utils.password_manager
import
PoetryKeyring
from
poetry.utils.password_manager
import
PoetryKeyringError
if
TYPE_CHECKING
:
if
TYPE_CHECKING
:
...
@@ -174,23 +174,23 @@ def test_delete_pypi_token_with_unavailable_backend(
...
@@ -174,23 +174,23 @@ def test_delete_pypi_token_with_unavailable_backend(
def
test_keyring_raises_errors_on_keyring_errors
(
def
test_keyring_raises_errors_on_keyring_errors
(
mocker
:
MockerFixture
,
with_fail_keyring
:
None
mocker
:
MockerFixture
,
with_fail_keyring
:
None
):
):
mocker
.
patch
(
"poetry.utils.password_manager.
KeyR
ing._check"
)
mocker
.
patch
(
"poetry.utils.password_manager.
PoetryKeyr
ing._check"
)
key_ring
=
KeyR
ing
(
"poetry"
)
key_ring
=
PoetryKeyr
ing
(
"poetry"
)
with
pytest
.
raises
(
KeyR
ingError
):
with
pytest
.
raises
(
PoetryKeyr
ingError
):
key_ring
.
set_password
(
"foo"
,
"bar"
,
"baz"
)
key_ring
.
set_password
(
"foo"
,
"bar"
,
"baz"
)
with
pytest
.
raises
(
KeyR
ingError
):
with
pytest
.
raises
(
PoetryKeyr
ingError
):
key_ring
.
get_password
(
"foo"
,
"bar"
)
key_ring
.
get_password
(
"foo"
,
"bar"
)
with
pytest
.
raises
(
KeyR
ingError
):
with
pytest
.
raises
(
PoetryKeyr
ingError
):
key_ring
.
delete_password
(
"foo"
,
"bar"
)
key_ring
.
delete_password
(
"foo"
,
"bar"
)
def
test_keyring_with_chainer_backend_and_fail_keyring_should_be_unavailable
(
def
test_keyring_with_chainer_backend_and_fail_keyring_should_be_unavailable
(
with_chained_fail_keyring
:
None
,
with_chained_fail_keyring
:
None
,
):
):
key_ring
=
KeyR
ing
(
"poetry"
)
key_ring
=
PoetryKeyr
ing
(
"poetry"
)
assert
not
key_ring
.
is_available
()
assert
not
key_ring
.
is_available
()
...
@@ -198,7 +198,7 @@ def test_keyring_with_chainer_backend_and_fail_keyring_should_be_unavailable(
...
@@ -198,7 +198,7 @@ def test_keyring_with_chainer_backend_and_fail_keyring_should_be_unavailable(
def
test_keyring_with_chainer_backend_and_null_keyring_should_be_unavailable
(
def
test_keyring_with_chainer_backend_and_null_keyring_should_be_unavailable
(
with_chained_null_keyring
:
None
,
with_chained_null_keyring
:
None
,
):
):
key_ring
=
KeyR
ing
(
"poetry"
)
key_ring
=
PoetryKeyr
ing
(
"poetry"
)
assert
not
key_ring
.
is_available
()
assert
not
key_ring
.
is_available
()
...
@@ -206,7 +206,7 @@ def test_keyring_with_chainer_backend_and_null_keyring_should_be_unavailable(
...
@@ -206,7 +206,7 @@ def test_keyring_with_chainer_backend_and_null_keyring_should_be_unavailable(
def
test_null_keyring_should_be_unavailable
(
def
test_null_keyring_should_be_unavailable
(
with_null_keyring
:
None
,
with_null_keyring
:
None
,
):
):
key_ring
=
KeyR
ing
(
"poetry"
)
key_ring
=
PoetryKeyr
ing
(
"poetry"
)
assert
not
key_ring
.
is_available
()
assert
not
key_ring
.
is_available
()
...
@@ -214,7 +214,7 @@ def test_null_keyring_should_be_unavailable(
...
@@ -214,7 +214,7 @@ def test_null_keyring_should_be_unavailable(
def
test_fail_keyring_should_be_unavailable
(
def
test_fail_keyring_should_be_unavailable
(
with_fail_keyring
:
None
,
with_fail_keyring
:
None
,
):
):
key_ring
=
KeyR
ing
(
"poetry"
)
key_ring
=
PoetryKeyr
ing
(
"poetry"
)
assert
not
key_ring
.
is_available
()
assert
not
key_ring
.
is_available
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment