mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Add parameter sys_version to _sys_version().
Change the cache for _sys_version() to take the parameter into account. Add support for parsing the IronPython 1.0.1 sys.version value - even though it still returns '1.0.0'; the version string no longer includes the patch level.
This commit is contained in:
		
							parent
							
								
									4b86f8b88b
								
							
						
					
					
						commit
						2be9d43c18
					
				
					 1 changed files with 47 additions and 16 deletions
				
			
		|  | @ -1201,9 +1201,10 @@ def processor(): | |||
|     '([\d\.]+)' | ||||
|     '(?: \(([\d\.]+)\))?' | ||||
|     ' on (.NET [\d\.]+)') | ||||
| _sys_version_cache = None | ||||
| 
 | ||||
| def _sys_version(): | ||||
| _sys_version_cache = {} | ||||
| 
 | ||||
| def _sys_version(sys_version=None): | ||||
| 
 | ||||
|     """ Returns a parsed version of Python's sys.version as tuple | ||||
|        (name, version, branch, revision, buildno, builddate, compiler) | ||||
|  | @ -1218,21 +1219,30 @@ def _sys_version(): | |||
|         The function returns empty strings for tuple entries that | ||||
|         cannot be determined. | ||||
| 
 | ||||
|         sys_version may be given to parse an alternative version | ||||
|         string, e.g. if the version was read from a different Python | ||||
|         interpreter. | ||||
| 
 | ||||
|     """ | ||||
|     global _sys_version_cache | ||||
|     # Get the Python version | ||||
|     if sys_version is None: | ||||
|         sys_version = sys.version | ||||
| 
 | ||||
|     if _sys_version_cache is not None: | ||||
|         return _sys_version_cache | ||||
|     # Try the cache first | ||||
|     result = _sys_version_cache.get(sys_version, None) | ||||
|     if result is not None: | ||||
|         return result | ||||
| 
 | ||||
|     if sys.version[:10] == 'IronPython': | ||||
|     # Parse it | ||||
|     if sys_version[:10] == 'IronPython': | ||||
|         # IronPython | ||||
|         name = 'IronPython' | ||||
|         match = _ironpython_sys_version_parser.match(sys.version) | ||||
|         match = _ironpython_sys_version_parser.match(sys_version) | ||||
|         if match is None: | ||||
|             raise ValueError( | ||||
|                 'failed to parse IronPython sys.version: %s' % | ||||
|                 repr(sys.version)) | ||||
|         version, compiler = match.groups() | ||||
|                 repr(sys_version)) | ||||
|         version, alt_version, compiler = match.groups() | ||||
|         branch = '' | ||||
|         revision = '' | ||||
|         buildno = '' | ||||
|  | @ -1241,11 +1251,11 @@ def _sys_version(): | |||
|     elif sys.platform[:4] == 'java': | ||||
|         # Jython | ||||
|         name = 'Jython' | ||||
|         match = _jython_sys_version_parser.match(sys.version) | ||||
|         match = _jython_sys_version_parser.match(sys_version) | ||||
|         if match is None: | ||||
|             raise ValueError( | ||||
|                 'failed to parse Jython sys.version: %s' % | ||||
|                 repr(sys.version)) | ||||
|                 repr(sys_version)) | ||||
|         version, = match.groups() | ||||
|         branch = '' | ||||
|         revision = '' | ||||
|  | @ -1255,27 +1265,47 @@ def _sys_version(): | |||
| 
 | ||||
|     else: | ||||
|         # CPython | ||||
|         match = _sys_version_parser.match(sys.version) | ||||
|         match = _sys_version_parser.match(sys_version) | ||||
|         if match is None: | ||||
|             raise ValueError( | ||||
|                 'failed to parse CPython sys.version: %s' % | ||||
|                 repr(sys.version)) | ||||
|                 repr(sys_version)) | ||||
|         version, buildno, builddate, buildtime, compiler = \ | ||||
|               match.groups() | ||||
|         if hasattr(sys, 'subversion'): | ||||
|             # sys.subversion was added in Python 2.5 | ||||
|             name, branch, revision = sys.subversion | ||||
|         else: | ||||
|             name = 'CPython' | ||||
|             branch = '' | ||||
|             revision = '' | ||||
|         builddate = builddate + ' ' + buildtime | ||||
| 
 | ||||
|     # Add the patchlevel version if missing | ||||
|     l = string.split(version, '.') | ||||
|     if len(l) == 2: | ||||
|         l.append('0') | ||||
|         version = string.join(l, '.') | ||||
|     _sys_version_cache = (name, version, branch, revision, buildno, | ||||
|                           builddate, compiler) | ||||
|     return _sys_version_cache | ||||
| 
 | ||||
|     # Build and cache the result | ||||
|     result = (name, version, branch, revision, buildno, builddate, compiler) | ||||
|     _sys_version_cache[sys_version] = result | ||||
|     return result | ||||
| 
 | ||||
| def _test_sys_version(): | ||||
| 
 | ||||
|     _sys_version_cache.clear() | ||||
|     for input, output in ( | ||||
|         ('2.4.3 (#1, Jun 21 2006, 13:54:21) \n[GCC 3.3.4 (pre 3.3.5 20040809)]', | ||||
|          ('CPython', '2.4.3', '', '', '1', 'Jun 21 2006 13:54:21', 'GCC 3.3.4 (pre 3.3.5 20040809)')), | ||||
|         ('IronPython 1.0.60816 on .NET 2.0.50727.42', | ||||
|          ('IronPython', '1.0.60816', '', '', '', '', '.NET 2.0.50727.42')), | ||||
|         ('IronPython 1.0 (1.0.61005.1977) on .NET 2.0.50727.42', | ||||
|          ('IronPython', '1.0.0', '', '', '', '', '.NET 2.0.50727.42')), | ||||
|         ): | ||||
|         parsed = _sys_version(input) | ||||
|         if parsed != output: | ||||
|             print (input, parsed) | ||||
| 
 | ||||
| def python_implementation(): | ||||
| 
 | ||||
|  | @ -1325,6 +1355,7 @@ def python_branch(): | |||
|         If not available, an empty string is returned. | ||||
| 
 | ||||
|     """ | ||||
|      | ||||
|     return _sys_version()[2] | ||||
| 
 | ||||
| def python_revision(): | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Marc-André Lemburg
						Marc-André Lemburg