A collection of Contraint objects.
Constraint objects can be merged using a Constraints object and the + operator:
>>> from versions import Constraints, Constraint
>>> Constraints() + Constraint.parse('<2') + Constraint.parse('!=1.5')
Constraints.parse('<2.0.0,!=1.5.0')
Note
The Constraints object must be on the left side of the + operator. The Constraint object must be on right side.
If the constraint is a string, it is automatically parsed into a Constraint object. So the previous example can be shortened as:
>>> Constraints() + '<2' + '!=1.5'
Constraints.parse('<2.0.0,!=1.5.0')
Constraints objects work like Constraint objects: they have a match() method which returns True when passed a Version matching all constraints:
>>> Constraints.parse('>=1,<2').match('1.4')
True
>>> '1.4' in Constraints.parse('>=1.2,<2,!=1.4')
False
When merging conflicting constraints, an ExclusiveConstraints exception is raised:
>>> Constraints.parse('<1') + '>1'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/pmuller/dev/versions/versions/constraints.py", line 102, in __add__
return Constraints(merge(self.constraints + [constraint]))
File "/Users/pmuller/dev/versions/versions/constraints.py", line 209, in merge
raise ExclusiveConstraints(g_constraint, [l_constraint])
versions.constraints.ExclusiveConstraints: Constraint >1.0.0 conflicts with constraints <1.0.0
>>> Constraints.parse('<1') + '==1'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/pmuller/dev/versions/versions/constraints.py", line 102, in __add__
return Constraints(merge(self.constraints + [constraint]))
File "/Users/pmuller/dev/versions/versions/constraints.py", line 223, in merge
raise ExclusiveConstraints(eq_constraint, conflict_list)
versions.constraints.ExclusiveConstraints: Constraint ==1.0.0 conflicts with constraints <1.0.0
>>> Constraints.parse('>=1') + '!=1' + '<=1'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/pmuller/dev/versions/versions/constraints.py", line 102, in __add__
return Constraints(merge(self.constraints + [constraint]))
File "/Users/pmuller/dev/versions/versions/constraints.py", line 223, in merge
raise ExclusiveConstraints(eq_constraint, conflict_list)
versions.constraints.ExclusiveConstraints: Constraint ==1.0.0 conflicts with constraints !=1.0.0