Skip to content

Commit

Permalink
chore: readme
Browse files Browse the repository at this point in the history
Signed-off-by: Frost Ming <[email protected]>
  • Loading branch information
frostming committed Nov 21, 2023
1 parent ecd26d8 commit 1d489b3
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 10 deletions.
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
# Dep-Logic

Python dependency specifications supporting logical operations

This library requires Python 3.8 or later.

Currently, we have two sub-modules:

- `dep_logic.specifier` - a module for parsing and calculating PEP 440 version specifiers.
- `dep_logic.markers` - a module for parsing and calculating PEP 508 environment markers.

## Caveats

`===` operator is not supported for logic operations.
8 changes: 4 additions & 4 deletions src/dep_logic/markers/single.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from dep_logic.specifiers import BaseSpecifier
from dep_logic.specifiers.base import VersionSpecifier
from dep_logic.specifiers.generic import GenericSpecifier
from dep_logic.utils import OrderedSet, get_reflect_op
from dep_logic.utils import DATACLASS_ARGS, OrderedSet, get_reflect_op

if t.TYPE_CHECKING:
from dep_logic.markers.multi import MultiMarker
Expand Down Expand Up @@ -56,7 +56,7 @@ def evaluate(self, environment: dict[str, str] | None = None) -> bool:
return any(pkg_marker.evaluate({"extra": extra}) for extra in extras)


@dataclass(slots=True, unsafe_hash=True, repr=False)
@dataclass(unsafe_hash=True, **DATACLASS_ARGS)
class MarkerExpression(SingleMarker):
name: str
op: str
Expand Down Expand Up @@ -142,7 +142,7 @@ def __or__(self, other: t.Any) -> BaseMarker:
return MarkerUnion(self, other)


@dataclass(slots=True, unsafe_hash=True, repr=False)
@dataclass(frozen=True, unsafe_hash=True, **DATACLASS_ARGS)
class EqualityMarkerUnion(SingleMarker):
name: str
values: OrderedSet[str]
Expand Down Expand Up @@ -211,7 +211,7 @@ def __or__(self, other: t.Any) -> BaseMarker:
__ror__ = __or__


@dataclass(slots=True, unsafe_hash=True, repr=False)
@dataclass(frozen=True, unsafe_hash=True, **DATACLASS_ARGS)
class InequalityMultiMarker(SingleMarker):
name: str
values: OrderedSet[str]
Expand Down
3 changes: 2 additions & 1 deletion src/dep_logic/specifiers/generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@

from dep_logic.specifiers.base import BaseSpecifier, InvalidSpecifier
from dep_logic.specifiers.special import AnySpecifier, EmptySpecifier
from dep_logic.utils import DATACLASS_ARGS

Operator = t.Callable[[str, str], bool]


@dataclass(frozen=True, slots=True, unsafe_hash=True, repr=False)
@dataclass(frozen=True, unsafe_hash=True, **DATACLASS_ARGS)
class GenericSpecifier(BaseSpecifier):
op: str
value: str
Expand Down
4 changes: 2 additions & 2 deletions src/dep_logic/specifiers/range.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
VersionSpecifier,
)
from dep_logic.specifiers.special import EmptySpecifier
from dep_logic.utils import first_different_index, pad_zeros
from dep_logic.utils import DATACLASS_ARGS, first_different_index, pad_zeros


@dataclass(frozen=True, slots=True, unsafe_hash=True, repr=False)
@dataclass(frozen=True, unsafe_hash=True, **DATACLASS_ARGS)
class RangeSpecifier(VersionSpecifier):
min: Version | None = None
max: Version | None = None
Expand Down
4 changes: 2 additions & 2 deletions src/dep_logic/specifiers/union.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
from dep_logic.specifiers.base import BaseSpecifier, UnparsedVersion, VersionSpecifier
from dep_logic.specifiers.range import RangeSpecifier
from dep_logic.specifiers.special import EmptySpecifier
from dep_logic.utils import first_different_index, pad_zeros
from dep_logic.utils import DATACLASS_ARGS, first_different_index, pad_zeros


@dataclass(frozen=True, slots=True, unsafe_hash=True, repr=False)
@dataclass(frozen=True, unsafe_hash=True, **DATACLASS_ARGS)
class UnionSpecifier(VersionSpecifier):
ranges: tuple[RangeSpecifier, ...]
simplified: str | None = field(default=None, compare=False, hash=False)
Expand Down
16 changes: 15 additions & 1 deletion src/dep_logic/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,26 @@
import functools
import itertools
import re
from typing import AbstractSet, Iterable, Iterator, Protocol, TypeVar
import sys
from typing import TYPE_CHECKING, AbstractSet, Iterable, Iterator, Protocol, TypeVar

from dep_logic.markers.base import BaseMarker

_prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$")

if TYPE_CHECKING:
from typing import TypedDict

class _DataClassArgs(TypedDict, total=False):
slots: bool
repr: bool


if sys.version_info >= (3, 10):
DATACLASS_ARGS: _DataClassArgs = {"slots": True, "repr": False}
else:
DATACLASS_ARGS = {"repr": False}


class Unique(Protocol):
def __hash__(self) -> int:
Expand Down

0 comments on commit 1d489b3

Please sign in to comment.