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
a2cf6acd
Unverified
Commit
a2cf6acd
authored
Nov 05, 2018
by
Sébastien Eustace
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix reading of some setup.py files
parent
713b813f
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
55 additions
and
7 deletions
+55
-7
CHANGELOG.md
+7
-0
poetry/utils/setup_reader.py
+31
-7
tests/utils/fixtures/setups/pyyaml/setup.py
+0
-0
tests/utils/test_setup_reader.py
+17
-0
No files found.
CHANGELOG.md
View file @
a2cf6acd
# Change Log
## [Unreleased]
### Fixed
-
Fixed reading of some
`setup.py`
files.
## [0.12.6] - 2018-11-05
### Changed
...
...
poetry/utils/setup_reader.py
View file @
a2cf6acd
...
...
@@ -40,19 +40,21 @@ class SetupReader(object):
if
isinstance
(
directory
,
basestring
):
directory
=
Path
(
directory
)
result
=
cls
.
DEFAULT
.
copy
()
for
filename
in
cls
.
FILES
:
filepath
=
directory
/
filename
if
not
filepath
.
exists
():
continue
result
=
getattr
(
cls
(),
"read_{}"
.
format
(
filename
.
replace
(
"."
,
"_"
)))(
new_
result
=
getattr
(
cls
(),
"read_{}"
.
format
(
filename
.
replace
(
"."
,
"_"
)))(
filepath
)
if
not
cls
.
_is_empty_result
(
result
):
return
result
for
key
in
result
.
keys
():
if
new_result
[
key
]:
result
[
key
]
=
new_result
[
key
]
return
cls
.
DEFAULT
return
result
@classmethod
def
_is_empty_result
(
cls
,
result
):
# type: (Dict[str, Any]) -> bool
...
...
@@ -146,7 +148,27 @@ class SetupReader(object):
self
,
elements
):
# type: (List[Any]) -> Tuple[Optional[ast.Call], Optional[List[Any]]]
funcdefs
=
[]
for
element
in
elements
:
for
i
,
element
in
enumerate
(
elements
):
if
isinstance
(
element
,
ast
.
If
)
and
i
==
len
(
elements
)
-
1
:
# Checking if the last element is an if statement
# and if it is 'if __name__ == "__main__"' which
# could contain the call to setup()
test
=
element
.
test
if
not
isinstance
(
test
,
ast
.
Compare
):
continue
left
=
test
.
left
if
not
isinstance
(
left
,
ast
.
Name
):
continue
if
left
.
id
!=
"__name__"
:
continue
setup_call
,
body
=
self
.
_find_sub_setup_call
([
element
])
if
not
setup_call
:
continue
return
setup_call
,
body
+
elements
if
not
isinstance
(
element
,
ast
.
Expr
):
if
isinstance
(
element
,
ast
.
FunctionDef
):
funcdefs
.
append
(
element
)
...
...
@@ -173,17 +195,19 @@ class SetupReader(object):
self
,
elements
):
# type: (List[Any]) -> Tuple[Optional[ast.Call], Optional[List[Any]]]
for
element
in
elements
:
if
not
isinstance
(
element
,
ast
.
FunctionDef
):
if
not
isinstance
(
element
,
(
ast
.
FunctionDef
,
ast
.
If
)
):
continue
setup_call
=
self
.
_find_setup_call
(
element
.
body
)
if
setup_call
:
if
setup_call
!=
(
None
,
None
)
:
setup_call
,
body
=
setup_call
body
=
elements
+
body
return
setup_call
,
body
return
None
,
None
def
_find_install_requires
(
self
,
call
,
body
):
# type: (ast.Call, Iterable[Any]) -> List[str]
...
...
tests/utils/fixtures/setups/pyyaml/setup.py
0 → 100644
View file @
a2cf6acd
This diff is collapsed.
Click to expand it.
tests/utils/test_setup_reader.py
View file @
a2cf6acd
...
...
@@ -132,3 +132,20 @@ def test_setup_reader_read_setup_kwargs(setup):
assert
expected_install_requires
==
result
[
"install_requires"
]
assert
expected_extras_require
==
result
[
"extras_require"
]
assert
expected_python_requires
==
result
[
"python_requires"
]
@pytest.mark.skipif
(
not
PY35
,
reason
=
"AST parsing does not work for Python <3.4"
)
def
test_setup_reader_read_setup_call_in_main
(
setup
):
result
=
SetupReader
.
read_from_directory
(
setup
(
"pyyaml"
))
expected_name
=
"PyYAML"
expected_version
=
"3.13"
expected_install_requires
=
[]
expected_extras_require
=
{}
expected_python_requires
=
None
assert
expected_name
==
result
[
"name"
]
assert
expected_version
==
result
[
"version"
]
assert
expected_install_requires
==
result
[
"install_requires"
]
assert
expected_extras_require
==
result
[
"extras_require"
]
assert
expected_python_requires
==
result
[
"python_requires"
]
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