SVN: zpkgtools/trunk/zpkgtools/ make the configuration loader determine the URLs for location maps,

"Fred L. Drake, Jr." <[email protected]>
Newsgroups gmane.comp.web.zope.public-cvs
Message-ID <[email protected]>
Log message for revision 30705:
  make the configuration loader determine the URLs for location maps,
  since it knows the location of the configuration file;
  add specific test for Jim's use case
  

Changed:
  U   zpkgtools/trunk/zpkgtools/config.py
  U   zpkgtools/trunk/zpkgtools/locationmap.py
  U   zpkgtools/trunk/zpkgtools/tests/test_config.py

-=-
Modified: zpkgtools/trunk/zpkgtools/config.py
===================================================================
--- zpkgtools/trunk/zpkgtools/config.py	2005-06-09 13:20:59 UTC (rev 30704)
+++ zpkgtools/trunk/zpkgtools/config.py	2005-06-09 14:35:16 UTC (rev 30705)
@@ -25,8 +25,10 @@
 
 import os
 import urllib
+import urlparse
 
 from zpkgsetup import cfgparser
+from zpkgsetup import urlutils
 from zpkgtools import locationmap
 
 
@@ -107,12 +109,9 @@
         """
         p = cfgparser.Parser(f, path, SCHEMA)
         cf = p.load()
+        base = urlutils.file_url(os.path.abspath(basedir)) + "/"
         for value in cf.resource_map:
-            type, rest = urllib.splittype(value)
-            if basedir and not type:
-                # local path references are relative to the file
-                # we're loading
-                value = os.path.join(basedir, value)
+            value = urlparse.urljoin(base, value)
             self.location_maps.append(value)
         if len(cf.include_support_code) > 1:
             raise cfgparser.ConfigurationError(

Modified: zpkgtools/trunk/zpkgtools/locationmap.py
===================================================================
--- zpkgtools/trunk/zpkgtools/locationmap.py	2005-06-09 13:20:59 UTC (rev 30704)
+++ zpkgtools/trunk/zpkgtools/locationmap.py	2005-06-09 14:35:16 UTC (rev 30705)
@@ -255,7 +255,7 @@
             f = urllib2.urlopen(path, "rU")
         else:
             f = loader.open(path, "rU")
-        base = loader.baseUrl(path)
+        base = path
     if mapping is None:
         mapping = LocationMap()
     try:

Modified: zpkgtools/trunk/zpkgtools/tests/test_config.py
===================================================================
--- zpkgtools/trunk/zpkgtools/tests/test_config.py	2005-06-09 13:20:59 UTC (rev 30704)
+++ zpkgtools/trunk/zpkgtools/tests/test_config.py	2005-06-09 14:35:16 UTC (rev 30705)
@@ -14,11 +14,14 @@
 """Tests for zpkgtools.config."""
 
 import os
+import shutil
+import tempfile
 import unittest
 
 from StringIO import StringIO
 
 from zpkgsetup import cfgparser
+from zpkgsetup import urlutils
 from zpkgtools import config
 
 
@@ -46,7 +49,7 @@
         self.assertEqual(
             cf.location_maps,
             ["cvs://cvs.example.org/cvsroot:module/package/PACKAGES.txt",
-             os.path.join(here, "relative/path.txt")])
+             urlutils.file_url(os.path.join(here, "relative/path.txt"))])
 
     def test_constructor_bad_config_setting(self):
         # unknown option:
@@ -78,10 +81,65 @@
         sio = StringIO(text)
         cf.loadStream(sio, path, basedir)
         return cf
-        
 
+
+class ConfigurationLocationMapIntegrationTestCase(unittest.TestCase):
+
+    def setUp(self):
+        self.tmpdir = tempfile.mkdtemp()
+
+    def tearDown(self):
+        shutil.rmtree(self.tmpdir)
+
+    def test_relative_paths_mapped(self):
+        os.mkdir(os.path.join(self.tmpdir, "releases"))
+        reldir = os.path.join(self.tmpdir, "releases", "Thing")
+        os.mkdir(reldir)
+        cfgpath = os.path.join(reldir, "zpkg.conf")
+        f = open(cfgpath, "w")
+        f.write("resource-map one.map\n")
+                #"resource-map two.map\n")
+        f.close()
+        mapfile = os.path.join(reldir, "one.map")
+        f = open(mapfile, "w")
+        f.write("pkg1 ../../src/pkg1\n"
+                "pkg2 ../Thong\n"
+                "pkg3 some/dir\n")
+        f.close()
+
+        cf = config.Configuration()
+        old_path = os.getcwd()
+        os.chdir(self.tmpdir)
+        try:
+            cf.loadPath("releases/Thing/zpkg.conf")
+        finally:
+            os.chdir(old_path)
+
+        # make sure we're looking at the right location map:
+        self.assertEqual(cf.location_maps, [urlutils.file_url(mapfile)])
+
+        # load the finished map and make sure we get the right values:
+        cf.finalize()
+        expected = urlutils.file_url(
+            os.path.join(self.tmpdir, "src", "pkg1"))
+        self.assertEqual(cf.locations["pkg1"], expected)
+
+        expected = urlutils.file_url(
+            os.path.join(self.tmpdir, "releases", "Thong"))
+        self.assertEqual(cf.locations["pkg2"], expected)
+
+        expected = urlutils.file_url(
+            os.path.join(self.tmpdir, "releases", "Thing", "some", "dir"))
+        self.assertEqual(cf.locations["pkg3"], expected)
+
+
 def test_suite():
-    return unittest.makeSuite(ConfigTestCase)
+    suite = unittest.TestSuite()
+    suite.addTest(
+        unittest.makeSuite(ConfigTestCase))
+    suite.addTest(
+        unittest.makeSuite(ConfigurationLocationMapIntegrationTestCase))
+    return suite
 
 if __name__ == "__main__":
     unittest.main(defaultTest="test_suite")

_______________________________________________
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.