A tiny library for read-only, non-instantiable namespace constants.
Project description
ConstSpace 🚀
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
.valueOverhead: 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
ConstSpaceTypefor 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e11caeb056ace8b01ae3926d4ee3b61184151c3c90dd747e963b9b62ba8c8961
|
|
| MD5 |
8a57f19a9d7fa3ba680cb33d949d2591
|
|
| BLAKE2b-256 |
ae06927c24d61320d04f3c084ba74bfa21074c36d220070fbd2ca4c60dd3de47
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c821e0b4f3e634a5a761be6b200291c0a2b5bdbbcebf8f27e88896a948b70fbd
|
|
| MD5 |
18634d90a898b07846f31d451936402c
|
|
| BLAKE2b-256 |
63afd922d97cc47963d431ce6f9869fb9d552bc76cb4a32e6c0d42b8db7a295f
|