157 lines
3.7 KiB
Python
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)
|