From 4d4820eadf6c973e9fece3ec3e9259dc278d498b Mon Sep 17 00:00:00 2001 From: Patrick Gerken Date: Fri, 25 Mar 2016 19:05:33 +0100 Subject: [PATCH 1/3] Adding support for pip. This unfortunately removes support for having package names totally different from the modules they provide. This is not an issue with current Plone packages. There are packages providing modules with different names, ZODB3 comes to mind, but these packages did not trigger any problems with auto include. Also, unfortunately, there is no way around it if one wants to support pip, because pip installs everything in such a way, that all eggs can share the same sys.path entry. When I see the physical location of a python module, I cannot see, from which egg this was coming. This is a breaking change, but it does not affect the consumer Plone in a negative way. I can't speak for other frameworks using this. --- CHANGES.rst | 4 ++- src/z3c/autoinclude/dependency.txt | 24 +++++++-------- src/z3c/autoinclude/plugin.txt | 2 +- .../tests/{APackage => A}/a/__init__.py | 0 .../tests/{APackage => A}/a/configure.zcml | 0 .../tests/{APackage => A}/setup.py | 4 +-- .../tests/{BCPackage => b.c}/b/__init__.py | 0 .../tests/{BCPackage => b.c}/b/c/__init__.py | 0 .../{BCPackage => b.c}/b/c/configure.zcml | 2 +- .../tests/{BCPackage => b.c}/setup.py | 4 +-- .../F => base2.plug/base2}/__init__.py | 0 .../base2/plug/__init__.py | 0 .../base2/plug/configure.zcml | 0 .../tests/{base2_plug => base2.plug}/setup.py | 2 +- .../{SiblingPackage => f.g}/F/G/__init__.py | 0 .../{SiblingPackage => f.g}/F/G/meta.zcml | 0 .../{SiblingPackage => f.g}/F/H/__init__.py | 0 .../F/H/configure.zcml | 0 .../{SiblingPackage => f.g}/F/H/meta.zcml | 0 .../tests/{XYZPackage/x => f.g/F}/__init__.py | 0 .../tests/{SiblingPackage => f.g}/setup.py | 2 +- .../tests/{FooPackage => foo}/foo/__init__.py | 0 .../{FooPackage => foo}/foo/configure.zcml | 0 .../tests/{FooPackage => foo}/setup.py | 2 +- src/z3c/autoinclude/tests/tests.py | 10 +++---- .../tests/{XYZPackage => x.y.z}/setup.py | 2 +- .../{XYZPackage/x/y => x.y.z/x}/__init__.py | 0 .../base2 => x.y.z/x/y}/__init__.py | 0 .../{XYZPackage => x.y.z}/x/y/z/__init__.py | 0 src/z3c/autoinclude/utils.py | 29 ++++++++++++++----- src/z3c/autoinclude/utils.txt | 13 ++------- 31 files changed, 52 insertions(+), 48 deletions(-) rename src/z3c/autoinclude/tests/{APackage => A}/a/__init__.py (100%) rename src/z3c/autoinclude/tests/{APackage => A}/a/configure.zcml (100%) rename src/z3c/autoinclude/tests/{APackage => A}/setup.py (93%) rename src/z3c/autoinclude/tests/{BCPackage => b.c}/b/__init__.py (100%) rename src/z3c/autoinclude/tests/{BCPackage => b.c}/b/c/__init__.py (100%) rename src/z3c/autoinclude/tests/{BCPackage => b.c}/b/c/configure.zcml (87%) rename src/z3c/autoinclude/tests/{BCPackage => b.c}/setup.py (93%) rename src/z3c/autoinclude/tests/{SiblingPackage/F => base2.plug/base2}/__init__.py (100%) rename src/z3c/autoinclude/tests/{base2_plug => base2.plug}/base2/plug/__init__.py (100%) rename src/z3c/autoinclude/tests/{base2_plug => base2.plug}/base2/plug/configure.zcml (100%) rename src/z3c/autoinclude/tests/{base2_plug => base2.plug}/setup.py (96%) rename src/z3c/autoinclude/tests/{SiblingPackage => f.g}/F/G/__init__.py (100%) rename src/z3c/autoinclude/tests/{SiblingPackage => f.g}/F/G/meta.zcml (100%) rename src/z3c/autoinclude/tests/{SiblingPackage => f.g}/F/H/__init__.py (100%) rename src/z3c/autoinclude/tests/{SiblingPackage => f.g}/F/H/configure.zcml (100%) rename src/z3c/autoinclude/tests/{SiblingPackage => f.g}/F/H/meta.zcml (100%) rename src/z3c/autoinclude/tests/{XYZPackage/x => f.g/F}/__init__.py (100%) rename src/z3c/autoinclude/tests/{SiblingPackage => f.g}/setup.py (96%) rename src/z3c/autoinclude/tests/{FooPackage => foo}/foo/__init__.py (100%) rename src/z3c/autoinclude/tests/{FooPackage => foo}/foo/configure.zcml (100%) rename src/z3c/autoinclude/tests/{FooPackage => foo}/setup.py (96%) rename src/z3c/autoinclude/tests/{XYZPackage => x.y.z}/setup.py (96%) rename src/z3c/autoinclude/tests/{XYZPackage/x/y => x.y.z/x}/__init__.py (100%) rename src/z3c/autoinclude/tests/{base2_plug/base2 => x.y.z/x/y}/__init__.py (100%) rename src/z3c/autoinclude/tests/{XYZPackage => x.y.z}/x/y/z/__init__.py (100%) diff --git a/CHANGES.rst b/CHANGES.rst index 0aa1cc8..ad64a3e 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,9 @@ Changes 0.3.7 (unreleased) ------------------ -- Nothing changed yet. +- Add support for pip installed packages. This removes support + for packages those names are different to the package paths + they provide. 0.3.6 (2016-01-29) diff --git a/src/z3c/autoinclude/dependency.txt b/src/z3c/autoinclude/dependency.txt index 114c305..9232db5 100644 --- a/src/z3c/autoinclude/dependency.txt +++ b/src/z3c/autoinclude/dependency.txt @@ -8,8 +8,8 @@ zcml from all dependencies of a project. We have created a test environment to simulate setuptools dependencies. -``APackage`` depends on ``BCPackage`` -``BCPackage`` depends on ``SiblingPackage`` +``APackage`` depends on ``b.c`` +``b.c`` depends on ``SiblingPackage`` Given the distribution for the project named ``APackage``, we can ask for the requirements of that distribution:: @@ -20,8 +20,8 @@ for the requirements of that distribution:: >>> reqs = a_dist.requires() >>> pprint(sorted(reqs, key=lambda r:r.project_name)) - [Requirement.parse('BCPackage'), - Requirement.parse('TestDirective'), + [Requirement.parse('TestDirective'), + Requirement.parse('b.c'), Requirement.parse('z3c.autoinclude')] We can turn this requirement into a distribution:: @@ -109,15 +109,15 @@ both dotted names:: ... 'meta.zcml'])) {'configure.zcml': ['F.H'], 'meta.zcml': ['testdirective', 'F.G', 'F.H']} -``APackage`` depends on ``BCPackage``, which depends on -``SiblingPackage``. ``APackage`` and ``BCPackage`` both contain the +``APackage`` depends on ``b.c``, which depends on +``SiblingPackage``. ``APackage`` and ``b.c`` both contain the autoinclude directive, which will automatically include any meta.zcml and configure.zcml files (in that order) that their dependencies contain. These dependencies' zcml actually contain a test directive that will append a logging message to a global variable in testdirective.zcml. So let's trigger the loading of the configure.zcml -in ``APackage`` and see whether its ``BCPackage`` dependency, and -``BCPackage``'s dependencies, were indeed loaded and in the correct +in ``APackage`` and see whether its ``b.c`` dependency, and +``b.c``'s dependencies, were indeed loaded and in the correct order:: >>> from pkg_resources import resource_filename @@ -127,9 +127,7 @@ order:: ... package=a) >>> from testdirective.zcml import test_log >>> pprint(test_log) - [u'f.g meta has been loaded', - u'f.h has been loaded', - u'BCPackage has been loaded'] + [u'f.g meta has been loaded', u'f.h has been loaded', u'b.c has been loaded'] There is also a directive for including overrides, which calls ``autoIncludeOverridesDirective``; however, I have no idea how to test @@ -139,14 +137,14 @@ Finally, there is a convenience API for finding the files we need to include from the requirements of a given package:: >>> from z3c.autoinclude import package_includes - >>> pprint(package_includes('BCPackage')) + >>> pprint(package_includes('b.c')) {'configure.zcml': ['F.H'], 'meta.zcml': ['testdirective', 'F.G', 'F.H'], 'overrides.zcml': []} As with ``includableInfo``, we can also supply a list of ZCML filenames to search for:: - >>> pprint(package_includes('BCPackage', ['configure.zcml', 'silly.zcml'])) + >>> pprint(package_includes('b.c', ['configure.zcml', 'silly.zcml'])) {'configure.zcml': ['F.H'], 'silly.zcml': []} Note that it will not catch DistributionNotFound errors:: diff --git a/src/z3c/autoinclude/plugin.txt b/src/z3c/autoinclude/plugin.txt index 104cd94..916b431 100644 --- a/src/z3c/autoinclude/plugin.txt +++ b/src/z3c/autoinclude/plugin.txt @@ -16,7 +16,7 @@ themselves as plugging into that module via entry points:: >>> from z3c.autoinclude.plugin import find_plugins >>> sorted(find_plugins('basepackage')) # doctest: +IGNORECASE - [FooPackage 0.0 (...), TestDirective 0.0 (...)] + [foo 0.0 (...), TestDirective 0.0 (...)] Armed with a valid module name we can find the ZCML files within it which must be loaded:: diff --git a/src/z3c/autoinclude/tests/APackage/a/__init__.py b/src/z3c/autoinclude/tests/A/a/__init__.py similarity index 100% rename from src/z3c/autoinclude/tests/APackage/a/__init__.py rename to src/z3c/autoinclude/tests/A/a/__init__.py diff --git a/src/z3c/autoinclude/tests/APackage/a/configure.zcml b/src/z3c/autoinclude/tests/A/a/configure.zcml similarity index 100% rename from src/z3c/autoinclude/tests/APackage/a/configure.zcml rename to src/z3c/autoinclude/tests/A/a/configure.zcml diff --git a/src/z3c/autoinclude/tests/APackage/setup.py b/src/z3c/autoinclude/tests/A/setup.py similarity index 93% rename from src/z3c/autoinclude/tests/APackage/setup.py rename to src/z3c/autoinclude/tests/A/setup.py index 8e71c6e..7efeac0 100644 --- a/src/z3c/autoinclude/tests/APackage/setup.py +++ b/src/z3c/autoinclude/tests/A/setup.py @@ -3,7 +3,7 @@ version = '0.0' -setup(name='APackage', +setup(name='A', version=version, description="", long_description="""\ @@ -19,7 +19,7 @@ include_package_data=True, zip_safe=False, install_requires=[ - 'BCPackage', + 'b.c', 'z3c.autoinclude', 'TestDirective', ], diff --git a/src/z3c/autoinclude/tests/BCPackage/b/__init__.py b/src/z3c/autoinclude/tests/b.c/b/__init__.py similarity index 100% rename from src/z3c/autoinclude/tests/BCPackage/b/__init__.py rename to src/z3c/autoinclude/tests/b.c/b/__init__.py diff --git a/src/z3c/autoinclude/tests/BCPackage/b/c/__init__.py b/src/z3c/autoinclude/tests/b.c/b/c/__init__.py similarity index 100% rename from src/z3c/autoinclude/tests/BCPackage/b/c/__init__.py rename to src/z3c/autoinclude/tests/b.c/b/c/__init__.py diff --git a/src/z3c/autoinclude/tests/BCPackage/b/c/configure.zcml b/src/z3c/autoinclude/tests/b.c/b/c/configure.zcml similarity index 87% rename from src/z3c/autoinclude/tests/BCPackage/b/c/configure.zcml rename to src/z3c/autoinclude/tests/b.c/b/c/configure.zcml index 5b0c0d5..0d6af4e 100644 --- a/src/z3c/autoinclude/tests/BCPackage/b/c/configure.zcml +++ b/src/z3c/autoinclude/tests/b.c/b/c/configure.zcml @@ -1,7 +1,7 @@ - +