SVN: zpkgtools/trunk/ Implemented the ``<exclude>`` section, which is the conf file equivalent

Stephan Richter <[email protected]>
Newsgroups gmane.comp.web.zope.public-cvs
Message-ID <[email protected]>
Log message for revision 38202:
  Implemented the ``<exclude>`` section, which is the conf file equivalent 
  of the `-x` and `--exclude` command line options. 
  

Changed:
  U   zpkgtools/trunk/doc/zpkg.txt
  U   zpkgtools/trunk/zpkgtools/app.py
  U   zpkgtools/trunk/zpkgtools/config.py
  U   zpkgtools/trunk/zpkgtools/config.xml
  A   zpkgtools/trunk/zpkgtools/tests/input/exclude.cfg
  U   zpkgtools/trunk/zpkgtools/tests/test_app.py
  U   zpkgtools/trunk/zpkgtools/tests/test_config.py

-=-
Modified: zpkgtools/trunk/doc/zpkg.txt
===================================================================
--- zpkgtools/trunk/doc/zpkg.txt	2005-08-31 17:17:07 UTC (rev 38201)
+++ zpkgtools/trunk/doc/zpkg.txt	2005-08-31 17:34:59 UTC (rev 38202)
@@ -172,7 +172,12 @@
 Note that all ``<resources>`` sections will be processed before any
 external maps are loaded, regardless of ordering.
 
+Optionally, there is a ``<exclude>`` section in which you can specify the
+packages/resources that should be excluded (in other words not loaded) from
+the package. Every line should specify one package. This is equivalent of
+specifying **-x** or **--exclude** for every excluded package.
 
+
 Resource Maps
 -------------
 

Modified: zpkgtools/trunk/zpkgtools/app.py
===================================================================
--- zpkgtools/trunk/zpkgtools/app.py	2005-08-31 17:17:07 UTC (rev 38201)
+++ zpkgtools/trunk/zpkgtools/app.py	2005-08-31 17:34:59 UTC (rev 38202)
@@ -88,6 +88,8 @@
         if cf.application:
             self.options.application = True
 
+        self.exclude_packages = sets.Set(cf.exclude_packages)
+
         # XXX Hack: This should be part of BuilderApplication
         if options.include_support_code is None:
             options.include_support_code = cf.include_support_code
@@ -135,7 +137,6 @@
         self.support_packages = DEFAULT_SUPPORT_PACKAGES[:]
         self.support_packages.extend(
             [(pkg, None) for pkg in options.support_packages])
-        self.exclude_packages = sets.Set()
         for pkg in options.exclude_packages:
             if pkg not in self.exclude_packages:
                 self.exclude_packages.add(pkg)
@@ -146,7 +147,7 @@
         This method does everything needed to knit a distribution
         together; it should be refactored substantially.
         """
-        dep_sources = {} 
+        dep_sources = {}
         top = self.get_component(self.resource, self.resource_url)
         top.write_package(self.destination)
         distclass = self.options.distribution_class

Modified: zpkgtools/trunk/zpkgtools/config.py
===================================================================
--- zpkgtools/trunk/zpkgtools/config.py	2005-08-31 17:17:07 UTC (rev 38201)
+++ zpkgtools/trunk/zpkgtools/config.py	2005-08-31 17:34:59 UTC (rev 38202)
@@ -38,6 +38,10 @@
     return value.map
 
 
+def exclude(value):
+    return value.mapping.keys()
+
+
 class Configuration:
     """Configuration settings for **zpkg**.
 
@@ -48,6 +52,8 @@
 
       - `include_support_code`: Indicates whether support code should
         be included in distributions.
+
+      - `exclude_packages`: Resources to exclude from the package.
     """
 
     def __init__(self):
@@ -56,6 +62,7 @@
         self.collect_dependencies = False
         self.location_maps = []
         self.locations = locationmap.LocationMap()
+        self.exclude_packages = []
         self.include_support_code = True
         self.default_collection = None
 
@@ -115,6 +122,7 @@
         self.default_collection = cf.default_collection
         self.include_support_code = cf.include_support_code
         self.resource_maps = cf.resource_maps
+        self.exclude_packages = cf.exclude_packages
         for value in cf.location_maps:
             value = urlparse.urljoin(url, value)
             self.location_maps.append(value)

Modified: zpkgtools/trunk/zpkgtools/config.xml
===================================================================
--- zpkgtools/trunk/zpkgtools/config.xml	2005-08-31 17:17:07 UTC (rev 38201)
+++ zpkgtools/trunk/zpkgtools/config.xml	2005-08-31 17:34:59 UTC (rev 38202)
@@ -33,6 +33,24 @@
     </description>
   </multikey>
 
+  <sectiontype name="exclude"
+               datatype=".config.exclude"
+               keytype=".config.non_empty_string"
+               >
+    <key name="+"
+         attribute="mapping"
+         type=".config.non_empty_string"
+         />
+  </sectiontype>
+
+  <section type="exclude"
+           attribute="exclude_packages"
+           >
+    <description>
+      A list of packages that are excluded from the collection.
+    </description>
+  </section>
+
   <key name="build-application"
        datatype="boolean"
        required="no"

Added: zpkgtools/trunk/zpkgtools/tests/input/exclude.cfg
===================================================================
--- zpkgtools/trunk/zpkgtools/tests/input/exclude.cfg	2005-08-31 17:17:07 UTC (rev 38201)
+++ zpkgtools/trunk/zpkgtools/tests/input/exclude.cfg	2005-08-31 17:34:59 UTC (rev 38202)
@@ -0,0 +1,5 @@
+# Test file for exclude section
+<exclude>
+  foo.bar
+  blah
+</exclude>
\ No newline at end of file

Modified: zpkgtools/trunk/zpkgtools/tests/test_app.py
===================================================================
--- zpkgtools/trunk/zpkgtools/tests/test_app.py	2005-08-31 17:17:07 UTC (rev 38201)
+++ zpkgtools/trunk/zpkgtools/tests/test_app.py	2005-08-31 17:34:59 UTC (rev 38202)
@@ -411,6 +411,19 @@
         # convert package_map to URL so relative names are resolved properly
         return "file://" + urllib.pathname2url(package_map)
 
+    def test_creating_complete_exclude_resources_list(self):
+        config = os.path.join(os.path.dirname(os.path.abspath(__file__)),
+                              "input", "exclude.cfg")
+        package_map = self.createPackageMap()
+
+        app = self.createApplication(
+            ["-x", "foo.baz", "--exclude", "this",
+             "-C", config, "-m", package_map, "package"])
+        excluded = list(app.exclude_packages)
+        excluded.sort()
+        self.assertEqual(excluded,
+                         ["blah", "foo.bar", "foo.baz", "this"])
+
     def test_building_distribution_tree_only(self):
         # This builds a package and checks that the tree_only flag
         # causes the application to build a tree in the current

Modified: zpkgtools/trunk/zpkgtools/tests/test_config.py
===================================================================
--- zpkgtools/trunk/zpkgtools/tests/test_config.py	2005-08-31 17:17:07 UTC (rev 38201)
+++ zpkgtools/trunk/zpkgtools/tests/test_config.py	2005-08-31 17:34:59 UTC (rev 38202)
@@ -152,6 +152,27 @@
         finally:
             os.unlink(path)
 
+    def test_exclude_packages(self):
+        cf = config.Configuration()
+        fd, path = tempfile.mkstemp(".conf", text=True)
+        f = os.fdopen(fd, "w+")
+        f.write(
+            "<exclude>\n"
+            "  reportlab\n"
+            "  zope.app\n"
+            "  zpkgsetup\n"
+            "</exclude>\n")
+        f.close()
+        where = os.path.dirname(path)
+        whereurl = urlutils.file_url(where)
+        try:
+            cf.loadPath(path)
+            cf.exclude_packages.sort()
+            self.assertEqual(cf.exclude_packages,
+                             ['reportlab', 'zope.app', 'zpkgsetup'])
+        finally:
+            os.unlink(path)
+
     def load_text(self, text, path=None, basedir=None):
         if path is None:
             if basedir is None:

_______________________________________________
Zope-CVS maillist  -  [email protected]
http://mail.zope.org/mailman/listinfo/zope-cvs

Zope CVS instructions: http://dev.zope.org/CVS
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.