annotate Lib/distutils/versionpredicate.py @ 78069:a8aa77458e12 3.2

Add c_size_t and c_ssize_t to the ctypes summary table.
author Antoine Pitrou <solipsis@pitrou.net>
date Thu, 12 Jul 2012 20:31:50 +0200
parents 83b2d07b475b
children
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
48769
83b2d07b475b #2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents: 40785
diff changeset
8 re_validPackage = re.compile(r"(?i)^\s*([a-z_]\w*(?:\.[a-z_]\w*)*)(.*)",
83b2d07b475b #2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents: 40785
diff changeset
9 re.ASCII)
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
10 # (package) (rest)
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
11
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
12 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
13 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
14 # (comp) (version)
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
15
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
16
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
17 def splitUp(pred):
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
18 """Parse a single version comparison.
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
19
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
20 Return (comparison string, StrictVersion)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
21 """
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
22 res = re_splitComparison.match(pred)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
23 if not res:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
24 raise ValueError("bad package restriction syntax: %r" % pred)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
25 comp, verStr = res.groups()
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
26 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
27
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
28 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
29 ">": 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
30
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
31 class VersionPredicate:
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
32 """Parse and test package version predicates.
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
33
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
34 >>> 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
35
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
36 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
37
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
38 >>> v.name
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
39 'pyepat.abc'
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
40
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
41 The str() of a `VersionPredicate` provides a normalized
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
42 human-readable version of the expression::
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
43
40785
22760d53d4da Fix a bunch of doctests with the -d option of refactor.py.
Guido van Rossum <guido@python.org>
parents: 34818
diff changeset
44 >>> print(v)
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
45 pyepat.abc (> 1.0, < 3333.3a1, != 1555.1b3)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
46
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
47 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
48 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
49 restrictions::
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
50
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
51 >>> v.satisfied_by('1.1')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
52 True
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
53 >>> v.satisfied_by('1.4')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
54 True
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
55 >>> v.satisfied_by('1.0')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
56 False
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
57 >>> v.satisfied_by('4444.4')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
58 False
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
59 >>> v.satisfied_by('1555.1b3')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
60 False
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
61
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
62 `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
63
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
64 >>> v = VersionPredicate(' pat( == 0.1 ) ')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
65 >>> v.name
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
66 'pat'
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
67 >>> v.satisfied_by('0.1')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
68 True
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
69 >>> v.satisfied_by('0.2')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
70 False
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
71
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
72 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
73 restrictions of `StrictVersion`, a `ValueError` is raised::
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
74
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
75 >>> 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
76 Traceback (most recent call last):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
77 ...
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
78 ValueError: invalid version number '1.2zb3'
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
79
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
80 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
81 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
82 raised::
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
83
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
84 >>> v = VersionPredicate('foo-bar')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
85 Traceback (most recent call last):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
86 ...
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
87 ValueError: expected parenthesized list: '-bar'
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
88
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
89 >>> v = VersionPredicate('foo bar (12.21)')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
90 Traceback (most recent call last):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
91 ...
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
92 ValueError: expected parenthesized list: 'bar (12.21)'
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
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
96 def __init__(self, versionPredicateStr):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
97 """Parse a version predicate string.
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
98 """
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
99 # Fields:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
100 # name: package name
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
101 # 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
102
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
103 versionPredicateStr = versionPredicateStr.strip()
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
104 if not versionPredicateStr:
34818
4eaab38566c9 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 34797
diff changeset
105 raise ValueError("empty package restriction")
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
106 match = re_validPackage.match(versionPredicateStr)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
107 if not match:
34818
4eaab38566c9 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 34797
diff changeset
108 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
109 self.name, paren = match.groups()
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
110 paren = paren.strip()
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
111 if paren:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
112 match = re_paren.match(paren)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
113 if not match:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
114 raise ValueError("expected parenthesized list: %r" % paren)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
115 str = match.groups()[0]
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
116 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
117 if not self.pred:
34818
4eaab38566c9 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 34797
diff changeset
118 raise ValueError("empty parenthesized list in %r"
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
119 % versionPredicateStr)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
120 else:
34797
f13f2cbdf4de fix Python style guide conformance
Fred Drake <fdrake@acm.org>
parents: 34788
diff changeset
121 self.pred = []
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
122
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
123 def __str__(self):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
124 if self.pred:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
125 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
126 return self.name + " (" + ", ".join(seq) + ")"
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
127 else:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
128 return self.name
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
129
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
130 def satisfied_by(self, version):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
131 """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
132 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
133 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
134 """
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
135 for cond, ver in self.pred:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
136 if not compmap[cond](version, ver):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
137 return False
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
138 return True
34784
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
139
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
140
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
141 _provision_rx = None
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
142
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
143 def split_provision(value):
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
144 """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
145
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
146 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
147 instance, otherwise it will be `None`.
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
148
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
149 >>> split_provision('mypkg')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
150 ('mypkg', None)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
151 >>> split_provision(' mypkg( 1.2 ) ')
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
152 ('mypkg', StrictVersion ('1.2'))
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
153 """
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
154 global _provision_rx
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
155 if _provision_rx is None:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
156 _provision_rx = re.compile(
48769
83b2d07b475b #2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents: 40785
diff changeset
157 "([a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*)(?:\s*\(\s*([^)\s]+)\s*\))?$",
83b2d07b475b #2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents: 40785
diff changeset
158 re.ASCII)
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
159 value = value.strip()
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
160 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
161 if not m:
2b38ed66c67f helper code, mostly from Andy Harrington, for PEP 314 completion
Fred Drake <fdrake@acm.org>
parents:
diff changeset
162 raise ValueError("illegal provides specification: %r" % value)
34788
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
163 ver = m.group(2) or None
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
164 if ver:
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
165 ver = distutils.version.StrictVersion(ver)
b14c8e6310e7 - rename check_provision() to split_revision()
Fred Drake <fdrake@acm.org>
parents: 34784
diff changeset
166 return m.group(1), ver