[Python-checkins] distutils2: added verification to finalize_options

tarek.ziade python-checkins at python.org
Sun Jul 4 11:48:38 CEST 2010


tarek.ziade pushed 4d2e03cda556 to distutils2:

http://hg.python.org/distutils2/rev/4d2e03cda556
changeset:   276:4d2e03cda556
user:        Konrad Delong <konryd at gmail.com>
date:        Tue Jun 01 15:28:49 2010 +0200
summary:     added verification to finalize_options
files:       src/distutils2/command/upload_docs.py, src/distutils2/tests/test_upload_docs.py

diff --git a/src/distutils2/command/upload_docs.py b/src/distutils2/command/upload_docs.py
--- a/src/distutils2/command/upload_docs.py
+++ b/src/distutils2/command/upload_docs.py
@@ -1,6 +1,7 @@
 import base64, httplib, os.path, socket, tempfile, urlparse, zipfile
 from cStringIO import StringIO
 from distutils2 import log
+from distutils2.command.upload import upload
 from distutils2.core import PyPIRCCommand
 from distutils2.errors import DistutilsFileError
 
@@ -50,17 +51,24 @@
 class upload_docs(PyPIRCCommand):
 
     user_options = [
+        #('repository=', 'r',
+         #"url of repository [default: %s]" % upload.DEFAULT_REPOSITORY),
+        #('show-response', None,
+         #'display full response text from server'),
         ('upload-dir=', None, 'directory to upload'),
         ]
 
     def initialize_options(self):
-        self.upload_dir = None
+        PyPIRCCommand.initialize_options(self)
+        self.upload_dir = "build/docs"
 
     def finalize_options(self):
         PyPIRCCommand.finalize_options(self)
         if self.upload_dir == None:
             build = self.get_finalized_command('build')
             self.upload_dir = os.path.join(build.build_base, "docs")
+        self.announce('Using upload directory %s' % self.upload_dir)
+        self.verify_upload_dir(self.upload_dir)
         config = self._read_pypirc()
         if config != {}:
             self.username = config['username']
@@ -69,16 +77,15 @@
             self.realm = config['realm']
 
     def verify_upload_dir(self, upload_dir):
+        self.ensure_dirname('upload_dir')
         index_location = os.path.join(upload_dir, "index.html")
         if not os.path.exists(index_location):
             mesg = "No 'index.html found in docs directory (%s)"
             raise DistutilsFileError(mesg % upload_dir)
 
-
     def run(self):
         tmp_dir = tempfile.mkdtemp()
         name = self.distribution.metadata['Name']
-        self.verify_upload_dir(self.upload_dir)
         zip_file = zip_dir(self.upload_dir)
 
         fields = {':action': 'doc_upload', 'name': name}.items()
diff --git a/src/distutils2/tests/test_upload_docs.py b/src/distutils2/tests/test_upload_docs.py
--- a/src/distutils2/tests/test_upload_docs.py
+++ b/src/distutils2/tests/test_upload_docs.py
@@ -1,6 +1,6 @@
 """Tests for distutils.command.upload_docs."""
 # -*- encoding: utf8 -*-
-import httplib, os, os.path, tempfile, unittest2, zipfile
+import httplib, os, os.path, shutil, tempfile, unittest2, zipfile
 from cStringIO import StringIO
 
 from distutils2.command import upload_docs as upload_docs_mod
@@ -8,7 +8,7 @@
                                     encode_multipart)
 from distutils2.core import Distribution
 
-from distutils2.errors import DistutilsFileError
+from distutils2.errors import DistutilsFileError, DistutilsOptionError
 
 from distutils2.tests import support
 from distutils2.tests.pypi_server import PyPIServer, PyPIServerTestCase
@@ -54,15 +54,23 @@
         self.dist.metadata['Name'] = "distr-name"
         self.cmd = upload_docs(self.dist)
 
-    def test_generates_uploaddir_if_not_given(self):
-        self.assertEqual(self.cmd.upload_dir, None)
-        self.cmd.ensure_finalized()
-        self.assertEqual(self.cmd.upload_dir, os.path.join("build", "docs"))
+    def test_default_uploaddir(self):
+        sandbox = tempfile.mkdtemp()
+        previous = os.getcwd()
+        os.chdir(sandbox)
+        try:
+            os.mkdir("build")
+            self.prepare_sample_dir("build")
+            self.cmd.ensure_finalized()
+            self.assertEqual(self.cmd.upload_dir, os.path.join("build", "docs"))
+        finally:
+            os.chdir(previous)
 
-    def prepare_sample_dir(self):
-        sample_dir = tempfile.mkdtemp()
-        os.mkdir(os.path.join(sample_dir, "some_dir"))
-        self.write_file(os.path.join(sample_dir, "some_dir", "index.html"), "Ce mortel ennui")
+    def prepare_sample_dir(self, sample_dir=None):
+        if sample_dir is None:
+            sample_dir = tempfile.mkdtemp()
+        os.mkdir(os.path.join(sample_dir, "docs"))
+        self.write_file(os.path.join(sample_dir, "docs", "index.html"), "Ce mortel ennui")
         self.write_file(os.path.join(sample_dir, "index.html"), "Oh la la")
         return sample_dir
 
@@ -71,7 +79,7 @@
         compressed = zip_dir(source_dir)
 
         zip_f = zipfile.ZipFile(compressed)
-        self.assertEqual(zip_f.namelist(), ['index.html', 'some_dir/index.html'])
+        self.assertEqual(zip_f.namelist(), ['index.html', 'docs/index.html'])
 
     def test_encode_multipart(self):
         fields = [("a", "b"), ("c", "d")]
@@ -81,9 +89,9 @@
         self.assertEqual(body, EXPECTED_MULTIPART_OUTPUT)
 
     def prepare_command(self):
+        self.cmd.upload_dir = self.prepare_sample_dir()
         self.cmd.ensure_finalized()
         self.cmd.repository = self.pypi.full_address
-        self.cmd.upload_dir = self.prepare_sample_dir()
         self.cmd.username = "username"
         self.cmd.password = "password"
 
@@ -109,7 +117,7 @@
         # check their contents
         self.assertIn("doc_upload", action)
         self.assertIn("distr-name", name)
-        self.assertIn("some_dir/index.html", content)
+        self.assertIn("docs/index.html", content)
         self.assertIn("Ce mortel ennui", content)
 
     def test_https_connection(self):
@@ -151,14 +159,20 @@
     def test_reads_pypirc_data(self):
         self.write_file(self.rc, PYPIRC % self.pypi.full_address)
         self.cmd.repository = self.pypi.full_address
+        self.cmd.upload_dir = self.prepare_sample_dir()
         self.cmd.ensure_finalized()
         self.assertEqual(self.cmd.username, "real_slim_shady")
         self.assertEqual(self.cmd.password, "long_island")
 
     def test_checks_index_html_presence(self):
-        self.prepare_command()
+        self.cmd.upload_dir = self.prepare_sample_dir()
         os.remove(os.path.join(self.cmd.upload_dir, "index.html"))
-        self.assertRaises(DistutilsFileError, self.cmd.run)
+        self.assertRaises(DistutilsFileError, self.cmd.ensure_finalized)
+
+    def test_checks_upload_dir(self):
+        self.cmd.upload_dir = self.prepare_sample_dir()
+        shutil.rmtree(os.path.join(self.cmd.upload_dir))
+        self.assertRaises(DistutilsOptionError, self.cmd.ensure_finalized)
 
 def test_suite():
     return unittest2.makeSuite(UploadDocsTestCase)

--
Repository URL: http://hg.python.org/distutils2


More information about the Python-checkins mailing list