Skip to main content

Core utilities and types for Spryx projects

Project description

Spryx Core

PyPI version Python versions Documentation Status

Core utilities and types for Spryx projects.

Overview

Spryx Core provides common utilities and type definitions used across Spryx projects, including:

  • ID generation and validation using ULIDs
  • Time manipulation and formatting utilities
  • Pagination models for API responses
  • Type definitions and sentinel values
  • Common error classes
  • Permission handling utilities

Installation

pip install spryx-core

For development or optional features:

# For ULID support (recommended for ID generation)
pip install "spryx-core[ulid]"

Documentation

The full documentation is available at https://spryx-ai.github.io/spryx-core-py/

Local Documentation

You can also build and view the documentation locally:

# Install documentation dependencies
pip install mkdocs-material "mkdocstrings[python]"

# Serve documentation locally
mkdocs serve

# Build documentation
mkdocs build

Quick Usage

from spryx_core import generate_entity_id, now_utc, to_iso, Page

# Generate unique IDs
entity_id = generate_entity_id()
print(entity_id)  # Example: 01HNJG7VWTZA0CGTJ9T7WG9CPB

# Work with UTC timestamps
current_time = now_utc()
iso_timestamp = to_iso(current_time)
print(iso_timestamp)  # Example: 2023-12-01T14:32:15.123456Z

# Create paginated responses
page = Page(
    items=["item1", "item2"],
    page=1,
    page_size=10,
    total=25
)
print(f"Current page: {page.page}, Total pages: {page.total_pages}")

Development

See the Contributing Guide for instructions on how to set up the development environment and contribute to the project.

License

MIT

Features

spryx-core provides common utilities and type definitions used across Spryx projects, including:

Entity IDs

  • ULID generation and validation (with UUID fallback)
  • Custom EntityId type
from spryx_core import EntityId, generate_entity_id, is_valid_ulid

# Generate a new ID
entity_id = generate_entity_id()

# Validate an ID
if is_valid_ulid(some_string):
    # ...

Time Utilities

  • ISO-8601 UTC formatting and parsing
  • Common time operations (start/end of day, etc.)
from spryx_core import now_utc, to_iso, parse_iso, start_of_day

# Get current UTC time
now = now_utc()

# Format as ISO string
iso_string = to_iso(now)

# Parse ISO string
dt = parse_iso("2023-04-01T12:00:00.000Z")

# Get start of day
day_start = start_of_day(now)

Sentinel Values

  • NotGiven sentinel and related utilities
  • NOT_GIVEN singleton instance
from spryx_core import NOT_GIVEN, NotGivenOr, is_given

def my_function(optional_param: NotGivenOr[str] = NOT_GIVEN):
    if is_given(optional_param):
        # Handle provided value
    else:
        # Handle not provided case

Enumerations

  • Common enum types (Environment, SortOrder, etc.)
from spryx_core import Environment, SortOrder

# Environment types
if env == Environment.PRODUCTION:
    # ...

# Sort order
order = SortOrder.ASC

Documentation

Module: spryx_core.id

Functions for generating and validating entity IDs:

  • generate_entity_id() -> EntityId: Generates a new ULID or UUID
  • is_valid_ulid(value: str) -> bool: Validates a ULID string
  • cast_entity_id(value: str) -> EntityId: Casts a string to an EntityId

Module: spryx_core.time

Date/time utilities with UTC focus:

  • now_utc() -> datetime: Gets current UTC time
  • to_iso(dt: datetime, milliseconds: bool = False) -> str: Formats as ISO-8601
  • parse_iso(value: str) -> datetime: Parses ISO-8601 string
  • utc_from_timestamp(ts: int | float) -> datetime: Converts timestamp to datetime
  • start_of_day(dt: datetime | None = None) -> datetime: Gets day start (00:00:00)
  • end_of_day(dt: datetime | None = None) -> datetime: Gets day end (23:59:59.999999)

Module: spryx_core.types

Type utilities:

  • is_given(obj: NotGivenOr[_T]) -> TypeGuard[_T]: Checks if value is not NotGiven
  • default_or_given(obj: NotGivenOr[_T], default: Any = None) -> Union[_T, None]: Gets value or default

Module: spryx_core.enums

Common enumerations:

  • SortOrder: ASC, DESC
  • Environment: DEV, STAGING, PRODUCTION

Module: spryx_core.sentinels

Sentinel values:

  • NotGiven: Sentinel for unspecified values, distinct from None

Module: spryx_core.constants

Exported constants:

  • NOT_GIVEN: Singleton instance of NotGiven

License

This project is licensed under the MIT License - see the LICENSE file for details.

Requirements

  • Python 3.11+
  • Dependencies:
    • python-ulid (>=3.0.0,<4.0.0)
    • pydantic (>=2.11.3,<3.0.0)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spryx_core-0.1.12.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spryx_core-0.1.12-py3-none-any.whl (13.6 kB view details)

Uploaded Python 3

File details

Details for the file spryx_core-0.1.12.tar.gz.

File metadata

  • Download URL: spryx_core-0.1.12.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for spryx_core-0.1.12.tar.gz
Algorithm Hash digest
SHA256 cf9ed5cc22ad4123e2360b37e4a177b78c8667d7bbeef12c5266d59fcb4e8219
MD5 eaad41b84bd5a9091f9cff1a85cdd92a
BLAKE2b-256 11ddb0a32a736ceeb5533442afb1310e3411efdbd8fc91a8d752088591a20a9f

See more details on using hashes here.

File details

Details for the file spryx_core-0.1.12-py3-none-any.whl.

File metadata

  • Download URL: spryx_core-0.1.12-py3-none-any.whl
  • Upload date:
  • Size: 13.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for spryx_core-0.1.12-py3-none-any.whl
Algorithm Hash digest
SHA256 decc32ac975b4c2e4a3e5947f672e77701821da841b47c5b09ded73a8d5063e7
MD5 a28bf2edd84442a02c3e1ade3aea476d
BLAKE2b-256 77a7edebec073d1a81ee83082b2a53b35b754de381a39a83879e3abd2621dae8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page