Skip to main content

A tiny library for read-only, non-instantiable namespace constants.

Project description

ConstSpace 🚀

GitHub repo PyPI version License: MIT

ConstSpace is an ultra-lightweight Python library for defining read-only, non-instantiable, and type-safe constant namespaces.

It is designed to eliminate the verbosity of Python's Enum (which requires .value access) and the lack of protection in plain classes.


🌟 Key Features

  • Zero .value Overhead: Access constants directly. What you see is what you get, with perfect IDE autocompletion.
  • Class-Level Read-Only Protection: Uses metaclasses to block any attempt to modify or delete class attributes at runtime.
  • Strict Non-instantiability: Ensures classes are used purely as namespaces. Attempting to instantiate will raise a TypeError.
  • Unified Type Grouping: The decorator automatically injects a base class, allowing you to use ConstSpaceType for clean type hinting and management.
  • Seamless Integration: Supports direct references between attributes during definition and works perfectly with static type checkers like MyPy.

📦 Installation

pip install constspace

🚀 Quick Start

1. Define Your Constant Space

from constspace import constspace

@constspace
class ServiceConfig:
    API_KEY = "v1_sec_123"
    TIMEOUT = 60
    # Reference attributes directly without .value or self
    SIGNATURE = f"prefix_{API_KEY}_suffix" 

2. Security & Constraints

# ✅ Normal Access
print(ServiceConfig.SIGNATURE) 

# ❌ Modify attribute -> Raises AttributeError
ServiceConfig.API_KEY = "new_key" 

# ❌ Instantiate -> Raises TypeError
cfg = ServiceConfig() 

3. Type Hinting & Management

from typing import List
from constspace import constspace, ConstSpaceType

@constspace
class MySQL:
    PORT = 3306

@constspace
class Redis:
    PORT = 6379

# Use ConstSpaceType (alias for Type[ConstSpace]) for constraints
def print_port(cfg: ConstSpaceType):
    print(f"Port is: {cfg.PORT}")

configs: List[ConstSpaceType] = [MySQL, Redis]
for c in configs:
    print_port(c)

🧐 Why ConstSpace?

Feature ConstSpace Enum Dataclass (frozen)
Easy Access ✅ Direct Value ❌ Requires .value ✅ Direct Value
Block Instance ✅ Strictly Enforced ❌ Allowed by default ❌ Allowed by default
Class Attribute Protection ✅ Strictly Read-only ❌ Allowed to modify ❌ Only protects instances
Type Integrity ✅ Original Types ❌ Enum Member Type ✅ Original Types

📜 License

MIT License.

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

constspace-0.1.5.tar.gz (7.7 kB view details)

Uploaded Source

Built Distribution

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

constspace-0.1.5-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file constspace-0.1.5.tar.gz.

File metadata

  • Download URL: constspace-0.1.5.tar.gz
  • Upload date:
  • Size: 7.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for constspace-0.1.5.tar.gz
Algorithm Hash digest
SHA256 e11caeb056ace8b01ae3926d4ee3b61184151c3c90dd747e963b9b62ba8c8961
MD5 8a57f19a9d7fa3ba680cb33d949d2591
BLAKE2b-256 ae06927c24d61320d04f3c084ba74bfa21074c36d220070fbd2ca4c60dd3de47

See more details on using hashes here.

File details

Details for the file constspace-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: constspace-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 5.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for constspace-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 c821e0b4f3e634a5a761be6b200291c0a2b5bdbbcebf8f27e88896a948b70fbd
MD5 18634d90a898b07846f31d451936402c
BLAKE2b-256 63afd922d97cc47963d431ce6f9869fb9d552bc76cb4a32e6c0d42b8db7a295f

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