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
Labels
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
nexedi
cython
Commits
e86f7378
Commit
e86f7378
authored
5 years ago
by
Dr Alex Meakins
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added PEP420 namespace support.
parent
709aafb2
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
49 additions
and
13 deletions
+49
-13
Cython/Compiler/Main.py
Cython/Compiler/Main.py
+35
-9
Cython/Utils.py
Cython/Utils.py
+14
-4
No files found.
Cython/Compiler/Main.py
View file @
e86f7378
...
...
@@ -621,32 +621,58 @@ def search_include_directories(dirs, qualified_name, suffix, pos, include=False)
else
:
dirs
=
(
Utils
.
find_root_package_dir
(
file_desc
.
filename
),)
+
dirs
# search for dotted filename e.g. <dir>/foo.bar.pxd
dotted_filename
=
qualified_name
if
suffix
:
dotted_filename
+=
suffix
for
dirname
in
dirs
:
path
=
os
.
path
.
join
(
dirname
,
dotted_filename
)
if
os
.
path
.
exists
(
path
):
return
path
# search for filename in package structure e.g. <dir>/foo/bar.pxd or <dir>/foo/bar/__init__.pxd
if
not
include
:
names
=
qualified_name
.
split
(
'.'
)
package_names
=
tuple
(
names
[:
-
1
])
module_name
=
names
[
-
1
]
module_filename
=
module_name
+
suffix
package_filename
=
"__init__"
+
suffix
for
dirname
in
dirs
:
path
=
os
.
path
.
join
(
dirname
,
dotted_filename
)
if
os
.
path
.
exists
(
path
):
return
path
if
not
include
:
package_dir
=
Utils
.
check_package_dir
(
dirname
,
package_names
)
# search for standard packages first - PEP420
namespace_dirs
=
[]
for
dirname
in
dirs
:
package_dir
,
is_namespace
=
Utils
.
check_package_dir
(
dirname
,
package_names
)
if
package_dir
is
not
None
:
if
is_namespace
:
namespace_dirs
.
append
(
package_dir
)
continue
# matches modules of the form: <dir>/foo/bar.pxd
path
=
os
.
path
.
join
(
package_dir
,
module_filename
)
if
os
.
path
.
exists
(
path
):
return
path
path
=
os
.
path
.
join
(
package_dir
,
module_name
,
package_filename
)
# matches modules of the form: <dir>/foo/bar/__init__.pxd
path
=
os
.
path
.
join
(
package_dir
,
module_name
,
package_filename
)
if
os
.
path
.
exists
(
path
):
return
path
# search for namespaces second - PEP420
for
package_dir
in
namespace_dirs
:
# matches modules of the form: <dir>/foo/bar.pxd
path
=
os
.
path
.
join
(
package_dir
,
module_filename
)
if
os
.
path
.
exists
(
path
):
return
path
# matches modules of the form: <dir>/foo/bar/__init__.pxd
path
=
os
.
path
.
join
(
package_dir
,
module_name
,
package_filename
)
if
os
.
path
.
exists
(
path
):
return
path
return
None
...
...
This diff is collapsed.
Click to expand it.
Cython/Utils.py
View file @
e86f7378
...
...
@@ -148,21 +148,31 @@ def find_root_package_dir(file_path):
@
cached_function
def
check_package_dir
(
dir
,
package_names
):
namespace
=
True
for
dirname
in
package_names
:
dir
=
os
.
path
.
join
(
dir
,
dirname
)
if
not
is_package_dir
(
dir
):
return
None
return
dir
has_init
=
contains_init
(
dir
)
if
not
namespace
and
not
has_init
:
return
None
,
False
elif
has_init
:
namespace
=
False
return
dir
,
namespace
@
cached_function
def
is_package_dir
(
dir_path
):
def
contains_init
(
dir_path
):
for
filename
in
PACKAGE_FILES
:
path
=
os
.
path
.
join
(
dir_path
,
filename
)
if
path_exists
(
path
):
return
1
@
cached_function
def
is_package_dir
(
dir_path
):
if
contains_init
(
dir_path
):
return
1
@
cached_function
def
path_exists
(
path
):
# try on the filesystem first
...
...
This diff is collapsed.
Click to expand it.
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