Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cython
Commits
cec82f45
Commit
cec82f45
authored
May 14, 2019
by
Egor Dranischnikow
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
extract create_args_parser(), add hook parse_args_raw and add unit-tests
parent
652f061d
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
278 additions
and
2 deletions
+278
-2
Cython/Build/Cythonize.py
Cython/Build/Cythonize.py
+10
-2
Cython/Build/Tests/TestCythonizeArgsParser.py
Cython/Build/Tests/TestCythonizeArgsParser.py
+268
-0
No files found.
Cython/Build/Cythonize.py
View file @
cec82f45
...
...
@@ -148,7 +148,7 @@ def run_distutils(args):
shutil
.
rmtree
(
temp_dir
)
def
parse_args
(
args
):
def
create_args_parser
(
):
from
optparse
import
OptionParser
parser
=
OptionParser
(
usage
=
'%prog [options] [sources and packages]+'
)
...
...
@@ -196,8 +196,16 @@ def parse_args(args):
help
=
'compile as much as possible, ignore compilation failures'
)
parser
.
add_option
(
'--no-docstrings'
,
dest
=
'no_docstrings'
,
action
=
'store_true'
,
help
=
'strip docstrings'
)
return
parser
def
parse_args_raw
(
parser
,
args
):
return
parser
.
parse_args
(
args
)
options
,
args
=
parser
.
parse_args
(
args
)
def
parse_args
(
args
):
parser
=
create_args_parser
()
options
,
args
=
parse_args_raw
(
parser
,
args
)
if
not
args
:
parser
.
error
(
"no source files provided"
)
if
options
.
build_inplace
:
...
...
Cython/Build/Tests/TestCythonizeArgsParser.py
0 → 100644
View file @
cec82f45
from
Cython.Build.Cythonize
import
create_args_parser
,
parse_args_raw
,
parse_args
from
Cython.TestUtils
import
CythonTest
class
TestCythonizeArgsParser
(
CythonTest
):
def
setUp
(
self
):
CythonTest
.
setUp
(
self
)
self
.
parse_args
=
lambda
x
,
parser
=
create_args_parser
()
:
parse_args_raw
(
parser
,
x
)
def
are_default
(
self
,
options
,
skip
):
# empty containers
empty_containers
=
[
'directives'
,
'compile_time_env'
,
'options'
,
'excludes'
]
are_none
=
[
'language_level'
,
'annotate'
,
'build'
,
'build_inplace'
,
'force'
,
'quiet'
,
'lenient'
,
'keep_going'
,
'no_docstrings'
]
for
opt_name
in
empty_containers
:
if
len
(
getattr
(
options
,
opt_name
))
!=
0
and
(
not
opt_name
in
skip
):
self
.
assertEqual
(
opt_name
,
""
)
return
False
for
opt_name
in
are_none
:
if
(
getattr
(
options
,
opt_name
)
is
not
None
)
and
(
not
opt_name
in
skip
):
self
.
assertEqual
(
opt_name
,
""
)
return
False
if
options
.
parallel
!=
3
and
(
not
'parallel'
in
skip
):
return
False
return
True
def
test_directive_short
(
self
):
options
,
args
=
self
.
parse_args
([
'-X'
,
'cdivision=True'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'directives'
]))
self
.
assertEqual
(
options
.
directives
[
'cdivision'
],
True
)
def
test_directive_long
(
self
):
options
,
args
=
self
.
parse_args
([
'--directive'
,
'cdivision=True'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'directives'
]))
self
.
assertEqual
(
options
.
directives
[
'cdivision'
],
True
)
def
test_directive_multiple
(
self
):
options
,
args
=
self
.
parse_args
([
'-X'
,
'cdivision=True'
,
'-X'
,
'c_string_type=bytes'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'directives'
]))
self
.
assertEqual
(
options
.
directives
[
'cdivision'
],
True
)
self
.
assertEqual
(
options
.
directives
[
'c_string_type'
],
'bytes'
)
def
test_directive_multiple_v2
(
self
):
options
,
args
=
self
.
parse_args
([
'-X'
,
'cdivision=True,c_string_type=bytes'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'directives'
]))
self
.
assertEqual
(
options
.
directives
[
'cdivision'
],
True
)
self
.
assertEqual
(
options
.
directives
[
'c_string_type'
],
'bytes'
)
def
test_compile_time_env_short
(
self
):
options
,
args
=
self
.
parse_args
([
'-E'
,
'MYSIZE=10'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'compile_time_env'
]))
self
.
assertEqual
(
options
.
compile_time_env
[
'MYSIZE'
],
10
)
def
test_compile_time_env_long
(
self
):
options
,
args
=
self
.
parse_args
([
'--compile-time-env'
,
'MYSIZE=10'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'compile_time_env'
]))
self
.
assertEqual
(
options
.
compile_time_env
[
'MYSIZE'
],
10
)
def
test_compile_time_env_multiple
(
self
):
options
,
args
=
self
.
parse_args
([
'-E'
,
'MYSIZE=10'
,
'-E'
,
'ARRSIZE=11'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'compile_time_env'
]))
self
.
assertEqual
(
options
.
compile_time_env
[
'MYSIZE'
],
10
)
self
.
assertEqual
(
options
.
compile_time_env
[
'ARRSIZE'
],
11
)
def
test_compile_time_env_multiple_v2
(
self
):
options
,
args
=
self
.
parse_args
([
'-E'
,
'MYSIZE=10,ARRSIZE=11'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'compile_time_env'
]))
self
.
assertEqual
(
options
.
compile_time_env
[
'MYSIZE'
],
10
)
self
.
assertEqual
(
options
.
compile_time_env
[
'ARRSIZE'
],
11
)
def
test_option_short
(
self
):
options
,
args
=
self
.
parse_args
([
'-s'
,
'docstrings=True'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'options'
]))
self
.
assertEqual
(
options
.
options
[
'docstrings'
],
True
)
def
test_option_long
(
self
):
options
,
args
=
self
.
parse_args
([
'--option'
,
'docstrings=True'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'options'
]))
self
.
assertEqual
(
options
.
options
[
'docstrings'
],
True
)
def
test_option_multiple
(
self
):
options
,
args
=
self
.
parse_args
([
'-s'
,
'docstrings=True'
,
'-s'
,
'buffer_max_dims=8'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'options'
]))
self
.
assertEqual
(
options
.
options
[
'docstrings'
],
True
)
self
.
assertEqual
(
options
.
options
[
'buffer_max_dims'
],
True
)
# really?
def
test_option_multiple_v2
(
self
):
options
,
args
=
self
.
parse_args
([
'-s'
,
'docstrings=True,buffer_max_dims=8'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'options'
]))
self
.
assertEqual
(
options
.
options
[
'docstrings'
],
True
)
self
.
assertEqual
(
options
.
options
[
'buffer_max_dims'
],
True
)
# really?
def
test_language_level_2
(
self
):
options
,
args
=
self
.
parse_args
([
'-2'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'language_level'
]))
self
.
assertEqual
(
options
.
language_level
,
2
)
def
test_language_level_3
(
self
):
options
,
args
=
self
.
parse_args
([
'-3'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'language_level'
]))
self
.
assertEqual
(
options
.
language_level
,
3
)
def
test_language_level_3str
(
self
):
options
,
args
=
self
.
parse_args
([
'--3str'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'language_level'
]))
self
.
assertEqual
(
options
.
language_level
,
'3str'
)
def
test_annotate_short
(
self
):
options
,
args
=
self
.
parse_args
([
'-a'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'annotate'
]))
self
.
assertEqual
(
options
.
annotate
,
True
)
def
test_annotate_long
(
self
):
options
,
args
=
self
.
parse_args
([
'--annotate'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'annotate'
]))
self
.
assertEqual
(
options
.
annotate
,
True
)
def
test_exclude_short
(
self
):
options
,
args
=
self
.
parse_args
([
'-x'
,
'*.pyx'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'excludes'
]))
self
.
assertTrue
(
'*.pyx'
in
options
.
excludes
)
def
test_exclude_long
(
self
):
options
,
args
=
self
.
parse_args
([
'--exclude'
,
'*.pyx'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'excludes'
]))
self
.
assertTrue
(
'*.pyx'
in
options
.
excludes
)
def
test_exclude_multiple
(
self
):
options
,
args
=
self
.
parse_args
([
'--exclude'
,
'*.pyx'
,
'--exclude'
,
'*.py'
,
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'excludes'
]))
self
.
assertEqual
(
options
.
excludes
,
[
'*.pyx'
,
'*.py'
])
def
test_build_short
(
self
):
options
,
args
=
self
.
parse_args
([
'-b'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'build'
]))
self
.
assertEqual
(
options
.
build
,
True
)
def
test_build_long
(
self
):
options
,
args
=
self
.
parse_args
([
'--build'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'build'
]))
self
.
assertEqual
(
options
.
build
,
True
)
def
test_inplace_short
(
self
):
options
,
args
=
self
.
parse_args
([
'-i'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'build_inplace'
]))
self
.
assertEqual
(
options
.
build_inplace
,
True
)
def
test_inplace_long
(
self
):
options
,
args
=
self
.
parse_args
([
'--inplace'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'build_inplace'
]))
self
.
assertEqual
(
options
.
build_inplace
,
True
)
def
test_parallel_short
(
self
):
options
,
args
=
self
.
parse_args
([
'-j'
,
'42'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'parallel'
]))
self
.
assertEqual
(
options
.
parallel
,
42
)
def
test_parallel_long
(
self
):
options
,
args
=
self
.
parse_args
([
'--parallel'
,
'42'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'parallel'
]))
self
.
assertEqual
(
options
.
parallel
,
42
)
def
test_force_short
(
self
):
options
,
args
=
self
.
parse_args
([
'-f'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'force'
]))
self
.
assertEqual
(
options
.
force
,
True
)
def
test_force_long
(
self
):
options
,
args
=
self
.
parse_args
([
'--force'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'force'
]))
self
.
assertEqual
(
options
.
force
,
True
)
def
test_quite_short
(
self
):
options
,
args
=
self
.
parse_args
([
'-q'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'quiet'
]))
self
.
assertEqual
(
options
.
quiet
,
True
)
def
test_quite_long
(
self
):
options
,
args
=
self
.
parse_args
([
'--quiet'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'quiet'
]))
self
.
assertEqual
(
options
.
quiet
,
True
)
def
test_lenient_long
(
self
):
options
,
args
=
self
.
parse_args
([
'--lenient'
])
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'lenient'
]))
self
.
assertFalse
(
args
)
self
.
assertEqual
(
options
.
lenient
,
True
)
def
test_keep_going_short
(
self
):
options
,
args
=
self
.
parse_args
([
'-k'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'keep_going'
]))
self
.
assertEqual
(
options
.
keep_going
,
True
)
def
test_keep_going_long
(
self
):
options
,
args
=
self
.
parse_args
([
'--keep-going'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'keep_going'
]))
self
.
assertEqual
(
options
.
keep_going
,
True
)
def
test_no_docstrings_long
(
self
):
options
,
args
=
self
.
parse_args
([
'--no-docstrings'
])
self
.
assertFalse
(
args
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'no_docstrings'
]))
self
.
assertEqual
(
options
.
no_docstrings
,
True
)
def
test_file_name
(
self
):
options
,
args
=
self
.
parse_args
([
'file1.pyx'
,
'file2.pyx'
])
self
.
assertEqual
(
len
(
args
),
2
)
self
.
assertEqual
(
args
[
0
],
'file1.pyx'
)
self
.
assertEqual
(
args
[
1
],
'file2.pyx'
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[]))
def
test_option_first
(
self
):
options
,
args
=
self
.
parse_args
([
'-i'
,
'file.pyx'
])
self
.
assertEqual
(
args
,
[
'file.pyx'
])
self
.
assertEqual
(
options
.
build_inplace
,
True
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'build_inplace'
]))
def
test_file_inbetween
(
self
):
options
,
args
=
self
.
parse_args
([
'-i'
,
'file.pyx'
,
'-a'
])
self
.
assertEqual
(
args
,
[
'file.pyx'
])
self
.
assertEqual
(
options
.
build_inplace
,
True
)
self
.
assertEqual
(
options
.
annotate
,
True
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'build_inplace'
,
'annotate'
]))
def
test_option_trailing
(
self
):
options
,
args
=
self
.
parse_args
([
'file.pyx'
,
'-i'
])
self
.
assertEqual
(
args
,
[
'file.pyx'
])
self
.
assertEqual
(
options
.
build_inplace
,
True
)
self
.
assertTrue
(
self
.
are_default
(
options
,
[
'build_inplace'
]))
class
TestParseArgs
(
CythonTest
):
def
test_build_set_for_inplace
(
self
):
options
,
args
=
parse_args
([
'foo.pyx'
,
'-i'
])
self
.
assertEqual
(
options
.
build
,
True
)
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