annotate Lib/distutils/versionpredicate.py @ 58765:2ba7677bfa95 legacy-trunk

testCopysign was defined twice in test_math; combine the definitions
author Mark Dickinson <dickinsm@gmail.com>
date Sat, 06 Feb 2010 23:11:25 +0000
parents 4eaab38566c9
children 22760d53d4da
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
1 """Module for parsing and testing package version predicate strings.
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
2 """
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
3 import re
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
4 import distutils.version
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
5 import operator
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
6
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
7
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
8 re_validPackage = re.compile(r"(?i)^\s*([a-z_]\w*(?:\.[a-z_]\w*)*)(.*)")
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
9 # (package) (rest)
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
10
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
11 re_paren = re.compile(r"^\s*\((.*)\)\s*$") # (list) inside of parentheses
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
12 re_splitComparison = re.compile(r"^\s*(<=|>=|<|>|!=|==)\s*([^\s,]+)\s*$")
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
13 # (comp) (version)
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
14
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
15
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
16 def splitUp(pred):
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
17 """Parse a single version comparison.
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
18
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
19 Return (comparison string, StrictVersion)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
20 """
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
21 res = re_splitComparison.match(pred)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
22 if not res:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
23 raise ValueError("bad package restriction syntax: %r" % pred)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
24 comp, verStr = res.groups()
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
25 return (comp, distutils.version.StrictVersion(verStr))
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
26
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
27 compmap = {"<": operator.lt, "<=": operator.le, "==": operator.eq,
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
28 ">": operator.gt, ">=": operator.ge, "!=": operator.ne}
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
29
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
30 class VersionPredicate:
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
31 """Parse and test package version predicates.
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
32
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
33 >>> v = VersionPredicate('pyepat.abc (>1.0, <3333.3a1, !=1555.1b3)')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
34
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
35 The `name` attribute provides the full dotted name that is given::
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
36
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
37 >>> v.name
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
38 'pyepat.abc'
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
39
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
40 The str() of a `VersionPredicate` provides a normalized
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
41 human-readable version of the expression::
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
42
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
43 >>> print v
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
44 pyepat.abc (> 1.0, < 3333.3a1, != 1555.1b3)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
45
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
46 The `satisfied_by()` method can be used to determine with a given
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
47 version number is included in the set described by the version
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
48 restrictions::
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
49
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
50 >>> v.satisfied_by('1.1')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
51 True
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
52 >>> v.satisfied_by('1.4')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
53 True
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
54 >>> v.satisfied_by('1.0')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
55 False
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
56 >>> v.satisfied_by('4444.4')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
57 False
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
58 >>> v.satisfied_by('1555.1b3')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
59 False
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
60
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
61 `VersionPredicate` is flexible in accepting extra whitespace::
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
62
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
63 >>> v = VersionPredicate(' pat( == 0.1 ) ')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
64 >>> v.name
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
65 'pat'
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
66 >>> v.satisfied_by('0.1')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
67 True
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
68 >>> v.satisfied_by('0.2')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
69 False
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
70
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
71 If any version numbers passed in do not conform to the
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
72 restrictions of `StrictVersion`, a `ValueError` is raised::
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
73
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
74 >>> v = VersionPredicate('p1.p2.p3.p4(>=1.0, <=1.3a1, !=1.2zb3)')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
75 Traceback (most recent call last):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
76 ...
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
77 ValueError: invalid version number '1.2zb3'
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
78
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
79 It the module or package name given does not conform to what's
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
80 allowed as a legal module or package name, `ValueError` is
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
81 raised::
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
82
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
83 >>> v = VersionPredicate('foo-bar')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
84 Traceback (most recent call last):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
85 ...
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
86 ValueError: expected parenthesized list: '-bar'
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
87
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
88 >>> v = VersionPredicate('foo bar (12.21)')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
89 Traceback (most recent call last):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
90 ...
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
91 ValueError: expected parenthesized list: 'bar (12.21)'
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
92
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
93 """
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
94
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
95 def __init__(self, versionPredicateStr):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
96 """Parse a version predicate string.
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
97 """
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
98 # Fields:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
99 # name: package name
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
100 # pred: list of (comparison string, StrictVersion)
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
101
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
102 versionPredicateStr = versionPredicateStr.strip()
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
103 if not versionPredicateStr:
34818
4eaab38566c9 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 34797
diff changeset
104 raise ValueError("empty package restriction")
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
105 match = re_validPackage.match(versionPredicateStr)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
106 if not match:
34818
4eaab38566c9 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 34797
diff changeset
107 raise ValueError("bad package name in %r" % versionPredicateStr)
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
108 self.name, paren = match.groups()
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
109 paren = paren.strip()
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
110 if paren:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
111 match = re_paren.match(paren)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
112 if not match:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
113 raise ValueError("expected parenthesized list: %r" % paren)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
114 str = match.groups()[0]
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
115 self.pred = [splitUp(aPred) for aPred in str.split(",")]
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
116 if not self.pred:
34818
4eaab38566c9 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 34797
diff changeset
117 raise ValueError("empty parenthesized list in %r"
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
118 % versionPredicateStr)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
119 else:
34797
f13f2cbdf4de fix Python style guide conformance
Fred Drake <fdrake@acm.org>
parents: 34788
diff changeset
120 self.pred = []
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
121
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
122 def __str__(self):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
123 if self.pred:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
124 seq = [cond + " " + str(ver) for cond, ver in self.pred]
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
125 return self.name + " (" + ", ".join(seq) + ")"
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
126 else:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
127 return self.name
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
128
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
129 def satisfied_by(self, version):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
130 """True if version is compatible with all the predicates in self.
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
131 The parameter version must be acceptable to the StrictVersion
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
132 constructor. It may be either a string or StrictVersion.
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
133 """
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
134 for cond, ver in self.pred:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
135 if not compmap[cond](version, ver):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
136 return False
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
137 return True
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
138
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
139
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
140 _provision_rx = None
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
141
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
142 def split_provision(value):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
143 """Return the name and optional version number of a provision.
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
144
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
145 The version number, if given, will be returned as a `StrictVersion`
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
146 instance, otherwise it will be `None`.
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
147
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
148 >>> split_provision('mypkg')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
149 ('mypkg', None)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
150 >>> split_provision(' mypkg( 1.2 ) ')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
151 ('mypkg', StrictVersion ('1.2'))
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
152 """
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
153 global _provision_rx
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
154 if _provision_rx is None:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
155 _provision_rx = re.compile(
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
156 "([a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*)(?:\s*\(\s*([^)\s]+)\s*\))?$")
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
157 value = value.strip()
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
158 m = _provision_rx.match(value)
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
159 if not m:
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
160 raise ValueError("illegal provides specification: %r" % value)
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
161 ver = m.group(2) or None
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
162 if ver:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
163 ver = distutils.version.StrictVersion(ver)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
164 return m.group(1), ver