Make names in __future__.py bind to class instances instead of 2-tuples.

Suggested on c.l.py by William Tanksley, and I like it.
This commit is contained in:
Tim Peters 2001-03-02 02:53:08 +00:00
parent 239432a545
commit d74bc432b2
2 changed files with 34 additions and 10 deletions

View File

@ -2,11 +2,7 @@
Each line is of the form:
FeatureName = ReleaseInfo
ReleaseInfo is a pair of the form:
(OptionalRelease, MandatoryRelease)
FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease) ")"
where, normally, OptionalRelease < MandatoryRelease, and both are 5-tuples
of the same form as sys.version_info:
@ -38,7 +34,36 @@ to use the feature in question, but may continue to use such imports.
MandatoryRelease may also be None, meaning that a planned feature got
dropped.
No line is ever to be deleted from this file.
Instances of class _Feature have two corresponding methods,
.getOptionalRelease() and .getMandatoryRelease().
No feature line is ever to be deleted from this file.
"""
nested_scopes = (2, 1, 0, "beta", 1), (2, 2, 0, "final", 0)
class _Feature:
def __init__(self, optionalRelease, mandatoryRelease):
self.optional = optionalRelease
self.mandatory = mandatoryRelease
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):
return "Feature(" + `self.getOptionalRelease()` + ", " + \
`self.getMandatoryRelease()` + ")"
nested_scopes = _Feature((2, 1, 0, "beta", 1), (2, 2, 0, "final", 0))

View File

@ -10,10 +10,9 @@ for feature in features:
value = getattr(__future__, feature)
if verbose:
print "Checking __future__ ", feature, "value", value
verify(type(value) is TupleType, "feature value isn't tuple")
verify(len(value) == 2, "feature value isn't 2-tuple")
optional, mandatory = value
optional = value.getOptionalRelease()
mandatory = value.getMandatoryRelease()
verify(type(optional) is TupleType, "optional isn't tuple")
verify(len(optional) == 5, "optional isn't 5-tuple")