Merged revisions 70518,70521,70590,70594-70595 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r70518 | matthias.klose | 2009-03-22 08:08:22 -0500 (Sun, 22 Mar 2009) | 2 lines

  - Fix comment macro in python.man
........
  r70521 | benjamin.peterson | 2009-03-22 12:45:11 -0500 (Sun, 22 Mar 2009) | 1 line

  close the file even if an exception occurs #5536
........
  r70590 | skip.montanaro | 2009-03-24 19:52:11 -0500 (Tue, 24 Mar 2009) | 1 line

  clarify the type of data returned
........
  r70594 | marc-andre.lemburg | 2009-03-25 14:44:58 -0500 (Wed, 25 Mar 2009) | 9 lines

  Remove the sys.version_info shortcut, since they cause the APIs
  to return different information than the _sys_version() output
  used in previous Python versions.

  This also fixes issue5561: platform.python_version_tuple returns tuple of ints, should be strings

  Added more tests for the various platform functions.
........
  r70595 | marc-andre.lemburg | 2009-03-25 14:45:33 -0500 (Wed, 25 Mar 2009) | 3 lines

  News item for the platform.py fix (r70594).
........
This commit is contained in:
Benjamin Peterson 2009-03-26 21:49:58 +00:00
parent b476d59792
commit 5f28b7b797
4 changed files with 74 additions and 65 deletions

View File

@ -1254,10 +1254,10 @@ _sys_version_cache = {}
def _sys_version(sys_version=None): def _sys_version(sys_version=None):
""" Returns a parsed version of Python's sys.version as tuple """ Returns a parsed version of Python's sys.version as tuple
(name, version, branch, revision, buildno, builddate, compiler) (name, version, branch, revision, buildno, builddate, compiler)
referring to the Python implementation name, version, branch, referring to the Python implementation name, version, branch,
revision, build number, build date/time as string and the compiler revision, build number, build date/time as string and the compiler
identification string. identification string.
Note that unlike the Python sys.version, the returned value Note that unlike the Python sys.version, the returned value
for the Python version will always include the patchlevel (it for the Python version will always include the patchlevel (it
@ -1359,8 +1359,6 @@ def python_version():
will always include the patchlevel (it defaults to 0). will always include the patchlevel (it defaults to 0).
""" """
if hasattr(sys, 'version_info'):
return '%i.%i.%i' % sys.version_info[:3]
return _sys_version()[1] return _sys_version()[1]
def python_version_tuple(): def python_version_tuple():
@ -1372,8 +1370,6 @@ def python_version_tuple():
will always include the patchlevel (it defaults to 0). will always include the patchlevel (it defaults to 0).
""" """
if hasattr(sys, 'version_info'):
return sys.version_info[:3]
return tuple(_sys_version()[1].split('.')) return tuple(_sys_version()[1].split('.'))
def python_branch(): def python_branch():

View File

@ -25,40 +25,49 @@ class PlatformTest(unittest.TestCase):
finally: finally:
os.remove(link) os.remove(link)
def test_machine(self):
res = platform.machine()
def test_node(self):
res = platform.node()
def test_platform(self): def test_platform(self):
for aliased in (False, True): for aliased in (False, True):
for terse in (False, True): for terse in (False, True):
res = platform.platform(aliased, terse) res = platform.platform(aliased, terse)
def test_system(self):
res = platform.system()
def test_node(self):
res = platform.node()
def test_release(self):
res = platform.release()
def test_version(self):
res = platform.version()
def test_machine(self):
res = platform.machine()
def test_processor(self): def test_processor(self):
res = platform.processor() res = platform.processor()
def test_python_implementation(self):
res = platform.python_implementation()
def test_python_version(self):
res1 = platform.python_version()
res2 = platform.python_version_tuple()
self.assertEqual(res1, ".".join(res2))
def test_python_branch(self):
res = platform.python_branch()
def test_python_revision(self):
res = platform.python_revision()
def test_python_build(self): def test_python_build(self):
res = platform.python_build() res = platform.python_build()
def test_python_compiler(self): def test_python_compiler(self):
res = platform.python_compiler() res = platform.python_compiler()
def test_version(self):
res1 = platform.version()
res2 = platform.version_tuple()
self.assertEqual(res1, ".".join(res2))
def test_release(self):
res = platform.release()
def test_system(self):
res = platform.system()
def test_version(self):
res = platform.version()
def test_system_alias(self): def test_system_alias(self):
res = platform.system_alias( res = platform.system_alias(
platform.system(), platform.system(),

View File

@ -1474,41 +1474,45 @@ class URLopener:
except IOError as msg: except IOError as msg:
pass pass
fp = self.open(url, data) fp = self.open(url, data)
headers = fp.info() try:
if filename: headers = fp.info()
tfp = open(filename, 'wb') if filename:
else: tfp = open(filename, 'wb')
import tempfile else:
garbage, path = splittype(url) import tempfile
garbage, path = splithost(path or "") garbage, path = splittype(url)
path, garbage = splitquery(path or "") garbage, path = splithost(path or "")
path, garbage = splitattr(path or "") path, garbage = splitquery(path or "")
suffix = os.path.splitext(path)[1] path, garbage = splitattr(path or "")
(fd, filename) = tempfile.mkstemp(suffix) suffix = os.path.splitext(path)[1]
self.__tempfiles.append(filename) (fd, filename) = tempfile.mkstemp(suffix)
tfp = os.fdopen(fd, 'wb') self.__tempfiles.append(filename)
result = filename, headers tfp = os.fdopen(fd, 'wb')
if self.tempcache is not None: try:
self.tempcache[url] = result result = filename, headers
bs = 1024*8 if self.tempcache is not None:
size = -1 self.tempcache[url] = result
read = 0 bs = 1024*8
blocknum = 0 size = -1
if reporthook: read = 0
if "content-length" in headers: blocknum = 0
size = int(headers["Content-Length"]) if reporthook:
reporthook(blocknum, bs, size) if "content-length" in headers:
while 1: size = int(headers["Content-Length"])
block = fp.read(bs) reporthook(blocknum, bs, size)
if not block: while 1:
break block = fp.read(bs)
read += len(block) if not block:
tfp.write(block) break
blocknum += 1 read += len(block)
if reporthook: tfp.write(block)
reporthook(blocknum, bs, size) blocknum += 1
fp.close() if reporthook:
tfp.close() reporthook(blocknum, bs, size)
finally:
tfp.close()
finally:
fp.close()
del fp del fp
del tfp del tfp

View File

@ -1,7 +1,7 @@
.TH PYTHON "1" "$Date$" .TH PYTHON "1" "$Date$"
./" To view this file while editing, run it through groff: .\" To view this file while editing, run it through groff:
./" groff -Tascii -man python.man | less .\" groff -Tascii -man python.man | less
.SH NAME .SH NAME
python \- an interpreted, interactive, object-oriented programming language python \- an interpreted, interactive, object-oriented programming language