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
c9fb348e
Unverified
Commit
c9fb348e
authored
Feb 28, 2020
by
Sébastien Eustace
Committed by
GitHub
Feb 28, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix the url used for installation when fallbacking on PyPI (#2099)
parent
ae6d64de
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
32 additions
and
17 deletions
+32
-17
poetry/repositories/pypi_repository.py
+9
-17
poetry/repositories/remote_repository.py
+16
-0
tests/repositories/test_pypi_repository.py
+7
-0
No files found.
poetry/repositories/pypi_repository.py
View file @
c9fb348e
...
@@ -32,7 +32,7 @@ from poetry.version.markers import InvalidMarker
...
@@ -32,7 +32,7 @@ from poetry.version.markers import InvalidMarker
from
poetry.version.markers
import
parse_marker
from
poetry.version.markers
import
parse_marker
from
.exceptions
import
PackageNotFound
from
.exceptions
import
PackageNotFound
from
.re
pository
import
Repository
from
.re
mote_repository
import
Remote
Repository
try
:
try
:
...
@@ -46,12 +46,14 @@ cache_control_logger.setLevel(logging.ERROR)
...
@@ -46,12 +46,14 @@ cache_control_logger.setLevel(logging.ERROR)
logger
=
logging
.
getLogger
(
__name__
)
logger
=
logging
.
getLogger
(
__name__
)
class
PyPiRepository
(
Repository
):
class
PyPiRepository
(
Re
moteRe
pository
):
CACHE_VERSION
=
parse_constraint
(
"1.0.0"
)
CACHE_VERSION
=
parse_constraint
(
"1.0.0"
)
def
__init__
(
self
,
url
=
"https://pypi.org/"
,
disable_cache
=
False
,
fallback
=
True
):
def
__init__
(
self
,
url
=
"https://pypi.org/"
,
disable_cache
=
False
,
fallback
=
True
):
self
.
_url
=
url
super
(
PyPiRepository
,
self
)
.
__init__
(
url
.
rstrip
(
"/"
)
+
"/simple/"
)
self
.
_base_url
=
url
self
.
_disable_cache
=
disable_cache
self
.
_disable_cache
=
disable_cache
self
.
_fallback
=
fallback
self
.
_fallback
=
fallback
...
@@ -71,18 +73,8 @@ class PyPiRepository(Repository):
...
@@ -71,18 +73,8 @@ class PyPiRepository(Repository):
self
.
_session
=
CacheControl
(
session
(),
cache
=
self
.
_cache_control_cache
)
self
.
_session
=
CacheControl
(
session
(),
cache
=
self
.
_cache_control_cache
)
self
.
_inspector
=
Inspector
()
self
.
_inspector
=
Inspector
()
super
(
PyPiRepository
,
self
)
.
__init__
()
self
.
_name
=
"PyPI"
self
.
_name
=
"PyPI"
@property
def
url
(
self
):
# type: () -> str
return
self
.
_url
@property
def
authenticated_url
(
self
):
# type: () -> str
return
self
.
_url
def
find_packages
(
def
find_packages
(
self
,
self
,
name
,
# type: str
name
,
# type: str
...
@@ -224,7 +216,7 @@ class PyPiRepository(Repository):
...
@@ -224,7 +216,7 @@ class PyPiRepository(Repository):
search
=
{
"q"
:
query
}
search
=
{
"q"
:
query
}
response
=
session
()
.
get
(
self
.
_url
+
"search"
,
params
=
search
)
response
=
session
()
.
get
(
self
.
_
base_
url
+
"search"
,
params
=
search
)
content
=
parse
(
response
.
content
,
namespaceHTMLElements
=
False
)
content
=
parse
(
response
.
content
,
namespaceHTMLElements
=
False
)
for
result
in
content
.
findall
(
".//*[@class='package-snippet']"
):
for
result
in
content
.
findall
(
".//*[@class='package-snippet']"
):
name
=
result
.
find
(
"h3/*[@class='package-snippet__name']"
)
.
text
name
=
result
.
find
(
"h3/*[@class='package-snippet__name']"
)
.
text
...
@@ -361,12 +353,12 @@ class PyPiRepository(Repository):
...
@@ -361,12 +353,12 @@ class PyPiRepository(Repository):
def
_get
(
self
,
endpoint
):
# type: (str) -> Union[dict, None]
def
_get
(
self
,
endpoint
):
# type: (str) -> Union[dict, None]
try
:
try
:
json_response
=
self
.
_session
.
get
(
self
.
_url
+
endpoint
)
json_response
=
self
.
_session
.
get
(
self
.
_
base_
url
+
endpoint
)
except
TooManyRedirects
:
except
TooManyRedirects
:
# Cache control redirect loop.
# Cache control redirect loop.
# We try to remove the cache and try again
# We try to remove the cache and try again
self
.
_cache_control_cache
.
delete
(
self
.
_url
+
endpoint
)
self
.
_cache_control_cache
.
delete
(
self
.
_
base_
url
+
endpoint
)
json_response
=
self
.
_session
.
get
(
self
.
_url
+
endpoint
)
json_response
=
self
.
_session
.
get
(
self
.
_
base_
url
+
endpoint
)
if
json_response
.
status_code
==
404
:
if
json_response
.
status_code
==
404
:
return
None
return
None
...
...
poetry/repositories/remote_repository.py
0 → 100644
View file @
c9fb348e
from
.repository
import
Repository
class
RemoteRepository
(
Repository
):
def
__init__
(
self
,
url
):
# type: (str) -> None
self
.
_url
=
url
super
(
RemoteRepository
,
self
)
.
__init__
()
@property
def
url
(
self
):
# type: () -> str
return
self
.
_url
@property
def
authenticated_url
(
self
):
# type: () -> str
return
self
.
_url
tests/repositories/test_pypi_repository.py
View file @
c9fb348e
...
@@ -208,3 +208,10 @@ def test_get_should_invalid_cache_on_too_many_redirects_error(mocker):
...
@@ -208,3 +208,10 @@ def test_get_should_invalid_cache_on_too_many_redirects_error(mocker):
repository
.
_get
(
"https://pypi.org/pypi/async-timeout/json"
)
repository
.
_get
(
"https://pypi.org/pypi/async-timeout/json"
)
assert
delete_cache
.
called
assert
delete_cache
.
called
def
test_urls
():
repository
=
PyPiRepository
()
assert
"https://pypi.org/simple/"
==
repository
.
url
assert
"https://pypi.org/simple/"
==
repository
.
authenticated_url
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