| 
									
										
										
										
											2001-03-15 10:45:44 +00:00
										 |  |  | """Record of phased-in incompatible language changes.
 | 
					
						
							| 
									
										
										
										
											2001-02-26 21:14:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Each line is of the form: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-17 19:49:02 +00:00
										 |  |  |     FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease "," | 
					
						
							|  |  |  |                               CompilerFlag ")" | 
					
						
							| 
									
										
										
										
											2001-02-26 21:14:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | where, normally, OptionalRelease < MandatoryRelease, and both are 5-tuples | 
					
						
							|  |  |  | of the same form as sys.version_info: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     (PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int | 
					
						
							|  |  |  |      PY_MINOR_VERSION, # the 1; an int | 
					
						
							|  |  |  |      PY_MICRO_VERSION, # the 0; an int | 
					
						
							|  |  |  |      PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string | 
					
						
							|  |  |  |      PY_RELEASE_SERIAL # the 3; an int | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OptionalRelease records the first release in which | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     from __future__ import FeatureName | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | was accepted. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-28 08:26:44 +00:00
										 |  |  | In the case of MandatoryReleases that have not yet occurred, | 
					
						
							|  |  |  | MandatoryRelease predicts the release in which the feature will become part | 
					
						
							| 
									
										
										
										
											2001-02-26 21:14:49 +00:00
										 |  |  | of the language. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-28 08:26:44 +00:00
										 |  |  | Else MandatoryRelease records when the feature became part of the language; | 
					
						
							| 
									
										
										
										
											2001-02-26 21:14:49 +00:00
										 |  |  | in releases at or after that, modules no longer need | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     from __future__ import FeatureName | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | to use the feature in question, but may continue to use such imports. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-28 08:26:44 +00:00
										 |  |  | MandatoryRelease may also be None, meaning that a planned feature got | 
					
						
							| 
									
										
										
										
											2001-02-26 21:14:49 +00:00
										 |  |  | dropped. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-03-02 02:53:08 +00:00
										 |  |  | Instances of class _Feature have two corresponding methods, | 
					
						
							|  |  |  | .getOptionalRelease() and .getMandatoryRelease(). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-17 19:49:02 +00:00
										 |  |  | CompilerFlag is the (bitfield) flag that should be passed in the fourth | 
					
						
							|  |  |  | argument to the builtin function compile() to enable the feature in | 
					
						
							|  |  |  | dynamically compiled code.  This flag is stored in the .compiler_flag | 
					
						
							|  |  |  | attribute on _Future instances.  These values must match the appropriate | 
					
						
							|  |  |  | #defines of CO_xxx flags in Include/compile.h. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-03-02 02:53:08 +00:00
										 |  |  | No feature line is ever to be deleted from this file. | 
					
						
							| 
									
										
										
										
											2001-02-26 21:14:49 +00:00
										 |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-17 19:49:02 +00:00
										 |  |  | all_feature_names = [ | 
					
						
							|  |  |  |     "nested_scopes", | 
					
						
							|  |  |  |     "generators", | 
					
						
							|  |  |  |     "division", | 
					
						
							| 
									
										
										
										
											2006-02-28 16:09:29 +00:00
										 |  |  |     "absolute_import", | 
					
						
							| 
									
										
										
										
											2006-02-28 19:02:24 +00:00
										 |  |  |     "with_statement", | 
					
						
							| 
									
										
										
										
											2001-08-17 19:49:02 +00:00
										 |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __all__ = ["all_feature_names"] + all_feature_names | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-24 06:29:12 +00:00
										 |  |  | # The CO_xxx symbols are defined here under the same names used by | 
					
						
							|  |  |  | # compile.h, so that an editor search will find them here.  However, | 
					
						
							|  |  |  | # they're not exported in __all__, because they don't really belong to | 
					
						
							|  |  |  | # this module. | 
					
						
							|  |  |  | CO_NESTED            = 0x0010   # nested_scopes | 
					
						
							| 
									
										
										
										
											2006-02-27 23:24:48 +00:00
										 |  |  | CO_GENERATOR_ALLOWED = 0        # generators (obsolete, was 0x1000) | 
					
						
							| 
									
										
										
										
											2001-08-24 06:29:12 +00:00
										 |  |  | CO_FUTURE_DIVISION   = 0x2000   # division | 
					
						
							| 
									
										
										
										
											2006-04-03 06:26:32 +00:00
										 |  |  | CO_FUTURE_ABSOLUTE_IMPORT = 0x4000 # perform absolute imports by default | 
					
						
							| 
									
										
										
										
											2006-02-28 20:02:42 +00:00
										 |  |  | CO_FUTURE_WITH_STATEMENT  = 0x8000   # with statement | 
					
						
							| 
									
										
										
										
											2001-08-17 19:49:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-03-02 02:53:08 +00:00
										 |  |  | class _Feature: | 
					
						
							| 
									
										
										
										
											2001-08-17 19:49:02 +00:00
										 |  |  |     def __init__(self, optionalRelease, mandatoryRelease, compiler_flag): | 
					
						
							| 
									
										
										
										
											2001-03-02 02:53:08 +00:00
										 |  |  |         self.optional = optionalRelease | 
					
						
							|  |  |  |         self.mandatory = mandatoryRelease | 
					
						
							| 
									
										
										
										
											2001-08-17 19:49:02 +00:00
										 |  |  |         self.compiler_flag = compiler_flag | 
					
						
							| 
									
										
										
										
											2001-03-02 02:53:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def getOptionalRelease(self): | 
					
						
							|  |  |  |         """Return first release in which this feature was recognized.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         This is a 5-tuple, of the same form as sys.version_info. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return self.optional | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def getMandatoryRelease(self): | 
					
						
							|  |  |  |         """Return release in which this feature will become mandatory.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         This is a 5-tuple, of the same form as sys.version_info, or, if | 
					
						
							|  |  |  |         the feature was dropped, is None. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return self.mandatory | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __repr__(self): | 
					
						
							| 
									
										
										
										
											2001-08-24 17:13:54 +00:00
										 |  |  |         return "_Feature" + repr((self.optional, | 
					
						
							|  |  |  |                                   self.mandatory, | 
					
						
							|  |  |  |                                   self.compiler_flag)) | 
					
						
							| 
									
										
										
										
											2001-08-17 19:49:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | nested_scopes = _Feature((2, 1, 0, "beta",  1), | 
					
						
							|  |  |  |                          (2, 2, 0, "alpha", 0), | 
					
						
							| 
									
										
										
										
											2001-08-24 06:29:12 +00:00
										 |  |  |                          CO_NESTED) | 
					
						
							| 
									
										
										
										
											2001-08-17 19:49:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | generators = _Feature((2, 2, 0, "alpha", 1), | 
					
						
							|  |  |  |                       (2, 3, 0, "final", 0), | 
					
						
							| 
									
										
										
										
											2001-08-24 06:29:12 +00:00
										 |  |  |                       CO_GENERATOR_ALLOWED) | 
					
						
							| 
									
										
										
										
											2001-03-02 02:53:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-17 19:49:02 +00:00
										 |  |  | division = _Feature((2, 2, 0, "alpha", 2), | 
					
						
							|  |  |  |                     (3, 0, 0, "alpha", 0), | 
					
						
							| 
									
										
										
										
											2001-08-24 06:29:12 +00:00
										 |  |  |                     CO_FUTURE_DIVISION) | 
					
						
							| 
									
										
										
										
											2006-02-28 16:09:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | absolute_import = _Feature((2, 5, 0, "alpha", 1), | 
					
						
							|  |  |  |                            (2, 7, 0, "alpha", 0), | 
					
						
							| 
									
										
										
										
											2006-04-03 06:58:51 +00:00
										 |  |  |                            CO_FUTURE_ABSOLUTE_IMPORT) | 
					
						
							| 
									
										
										
										
											2006-02-28 19:02:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-02-28 20:02:42 +00:00
										 |  |  | with_statement = _Feature((2, 5, 0, "alpha", 1), | 
					
						
							| 
									
										
										
										
											2006-02-28 19:02:24 +00:00
										 |  |  |                           (2, 6, 0, "alpha", 0), | 
					
						
							|  |  |  |                           CO_FUTURE_WITH_STATEMENT) |