From fc02f34cd2da5bf2b6110686f1183ca8da3f67d5 Mon Sep 17 00:00:00 2001 From: Martin Domke Date: Fri, 11 Oct 2024 16:26:08 +0200 Subject: [PATCH] feat(cli): Fix CLI entrypoint --- tests/test_ulid.py | 11 +++-------- ulid/__init__.py | 4 +++- ulid/__main__.py | 15 ++++++++------- ulid/constants.py | 2 ++ 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/tests/test_ulid.py b/tests/test_ulid.py index 9a1c5f7..3f7c26e 100644 --- a/tests/test_ulid.py +++ b/tests/test_ulid.py @@ -1,12 +1,11 @@ -from __future__ import annotations - import json import time import uuid +from collections.abc import Callable from datetime import datetime from datetime import timedelta from datetime import timezone -from typing import TYPE_CHECKING +from typing import Optional from typing import Union import pytest @@ -19,10 +18,6 @@ from ulid import ULID -if TYPE_CHECKING: # pragma: no cover - from collections.abc import Callable - - def utcnow() -> datetime: return datetime.now(timezone.utc) @@ -220,7 +215,7 @@ def test_pydantic_protocol() -> None: ulid = ULID() class Model(BaseModel): - ulid: ULID | None = None + ulid: Optional[ULID, None] = None # noqa: FA100 for value in [ulid, str(ulid), int(ulid), bytes(ulid)]: model = Model(ulid=value) diff --git a/ulid/__init__.py b/ulid/__init__.py index cdf1c7d..9998f30 100644 --- a/ulid/__init__.py +++ b/ulid/__init__.py @@ -179,7 +179,9 @@ def parse(cls: type[U], value: Any) -> U: return cls.from_hex(value) raise ValueError(f"Cannot parse ULID from string of length {len_value}") if isinstance(value, int): - return cls.from_int(value) + if len(str(value)) == constants.INT_REPR_LEN: + return cls.from_int(value) + return cls.from_timestamp(value) if isinstance(value, float): return cls.from_timestamp(value) if isinstance(value, datetime): diff --git a/ulid/__main__.py b/ulid/__main__.py index 8e6ba57..6428554 100644 --- a/ulid/__main__.py +++ b/ulid/__main__.py @@ -151,17 +151,18 @@ def show(args: argparse.Namespace) -> str: return ulid.datetime.isoformat() return textwrap.dedent( f""" - ULID: {ulid!s} - Hex: {ulid.hex} - Int: {int(ulid)} - Timestamp: {ulid.timestamp} - Datetime: {ulid.datetime.isoformat()} - """ + ULID: {ulid!s} + Hex: {ulid.hex} + Int: {int(ulid)} + Timestamp: {ulid.timestamp} + Datetime: {ulid.datetime.isoformat()} + """ ).strip() def entrypoint() -> None: # pragma: no cover - pass + if (value := main(sys.argv[1:])) is not None: + print(value) # noqa: T201 if __name__ == "__main__": # pragma: no cover diff --git a/ulid/constants.py b/ulid/constants.py index 9adfb7e..df8acf9 100644 --- a/ulid/constants.py +++ b/ulid/constants.py @@ -9,5 +9,7 @@ RANDOMNESS_REPR_LEN = 16 REPR_LEN = TIMESTAMP_REPR_LEN + RANDOMNESS_REPR_LEN +INT_REPR_LEN = 37 + UUID_LEN = 32 UUID_REPR_LEN = 36 # UUID with dash-separated segments