rpm-version 0.5.0

A library for dealing with RPM versions (NEVRA, EVR) correctly. Sort algorithm is identical to RPM.
Documentation
from rpm_version import Evr, Nevra, Requirement


class TestRequirement:
    def test_no_constraint(self):
        req = Requirement("foo")
        assert req.satisfies("foo", Evr.parse("1.0-1"))
        assert req.satisfies("foo", Evr.parse("999.0-1"))
        assert not req.satisfies("bar", Evr.parse("1.0-1"))

    def test_eq(self):
        req = Requirement("foo", "=", Evr.parse("1.0-1"))
        assert req.satisfies("foo", Evr.parse("1.0-1"))
        assert not req.satisfies("foo", Evr.parse("2.0-1"))

    def test_ge(self):
        req = Requirement("foo", ">=", Evr.parse("1.0-1"))
        assert req.satisfies("foo", Evr.parse("1.0-1"))
        assert req.satisfies("foo", Evr.parse("2.0-1"))
        assert not req.satisfies("foo", Evr.parse("0.9-1"))

    def test_lt(self):
        req = Requirement("foo", "<", Evr.parse("2.0-1"))
        assert req.satisfies("foo", Evr.parse("1.0-1"))
        assert not req.satisfies("foo", Evr.parse("2.0-1"))
        assert not req.satisfies("foo", Evr.parse("3.0-1"))

    def test_str(self):
        assert str(Requirement("foo")) == "foo"
        assert str(Requirement("foo", ">=", Evr.parse("1:2.0-1"))) == "foo >= 1:2.0-1"

    def test_repr(self):
        req = Requirement("foo", ">=", Evr.parse("2.0-1"))
        assert repr(req) == "Requirement(foo >= 2.0-1)"

    def test_name(self):
        req = Requirement("foo", "=", Evr.parse("1.0-1"))
        assert req.name == "foo"

    def test_invalid_op(self):
        import pytest

        with pytest.raises(ValueError):
            Requirement("foo", "!=", Evr.parse("1.0-1"))

    def test_partial_args(self):
        import pytest

        with pytest.raises(ValueError):
            Requirement("foo", ">=")