Files
soleprint/cfg/amar/models/__init__.py
2025-12-31 09:07:27 -03:00

157 lines
3.7 KiB
Python

"""
Pawprint Models - Platform Agnostic Definitions
Portable to: TypeScript, Pydantic, Django, SQLAlchemy, etc.
Hierarchy:
pawprint (abstract)
├── artery → Pulse = Vein + Nest + Larder
├── album → Book = Template + Larder
└── ward → Table = Tools + Nest + Larder
Shared components: Nest, Larder
System-specific: Vein (artery), Template (album), Tools (ward)
Rules:
- Larder in album generated from Template = "Book (written)"
- Same Larder exists independently in ward/artery
- Nest contains runtime configs, credentials, targets
- Larder contains data, provisions, stored content
"""
from dataclasses import dataclass, field
from typing import Optional, List
from enum import Enum
class Status(Enum):
PENDING = "pending"
PLANNED = "planned"
BUILDING = "building"
DEV = "dev"
LIVE = "live"
READY = "ready"
class System(Enum):
ARTERY = "artery"
ALBUM = "album"
WARD = "ward"
# === Shared Components ===
@dataclass
class Nest:
"""Runtime environment configuration.
Contains: credentials, targets, runtime configs.
Shared across: artery, ward
"""
name: str
status: Status = Status.PENDING
# References to actual config files/secrets
config_path: Optional[str] = None
@dataclass
class Larder:
"""Data storage / provisions.
Contains: data, transforms, parsers, dumps.
Shared across: artery, album, ward
Note: When generated from Template in album, appears as "Book (written)"
but exists as independent Larder in ward/artery.
"""
name: str
status: Status = Status.PENDING
# Optional source template (if generated)
source_template: Optional[str] = None
# Path to data
data_path: Optional[str] = None
# === System-Specific Components ===
@dataclass
class Vein:
"""Connector (artery-specific).
Single responsibility data connector.
Examples: jira, google, slack, whatsapp, cash, vnc
"""
name: str
status: Status = Status.PENDING
system: System = field(default=System.ARTERY, init=False)
@dataclass
class Template:
"""Documentation template (album-specific).
Gherkin, BDD patterns, generators.
Examples: feature-form, gherkin
"""
name: str
status: Status = Status.PENDING
system: System = field(default=System.ALBUM, init=False)
@dataclass
class Tool:
"""Execution tool (ward-specific).
Test runners, seeders, scripts.
"""
name: str
status: Status = Status.PENDING
system: System = field(default=System.WARD, init=False)
# === Composed Types ===
@dataclass
class Pulse:
"""Composed data flow (artery).
Pulse = Vein + Nest + Larder
"""
name: str
status: Status = Status.PENDING
vein: Optional[Vein] = None
nest: Optional[Nest] = None
larder: Optional[Larder] = None
system: System = field(default=System.ARTERY, init=False)
@dataclass
class Book:
"""Composed documentation (album).
Book = Template + Larder
Note: Output larder can be referenced independently in other systems.
"""
name: str
status: Status = Status.PENDING
template: Optional[Template] = None
larder: Optional[Larder] = None
# If this book produces a larder, it's tracked here
output_larder: Optional[Larder] = None
system: System = field(default=System.ALBUM, init=False)
@dataclass
class Table:
"""Composed execution bundle (ward).
Table = Tools + Nest + Larder
"""
name: str
status: Status = Status.PENDING
tools: List[Tool] = field(default_factory=list)
nest: Optional[Nest] = None
larder: Optional[Larder] = None
system: System = field(default=System.WARD, init=False)