constraints

Constraints

class versions.constraints.Constraints(constraints=None)[source]

A collection of Contraint objects.

match(version)[source]

Match version with this collection of constraints.

Parameters:version (version string or Version) – Version to match against this collection of constraints.
Return type:True if version satisfies this collection of constraint, False if it doesn’t.
classmethod parse(constraints_string)[source]

Parses a constraints_string and returns a Constraints object.

Merging

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')

Matching

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

Conflicts

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
exception versions.constraints.ExclusiveConstraints(constraint, constraints)[source]

Raised when cannot merge a new constraint with pre-existing constraints.

constraint = None

The conflicting constraint.

constraints = None

The constraints with which it conflicts.

Table Of Contents

Previous topic

constraint

Next topic

operators