Co-authored-by: Alexander Whitestone <alexander@alexanderwhitestone.com> Co-committed-by: Alexander Whitestone <alexander@alexanderwhitestone.com>
45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
"""Archive entry model for Mnemosyne.
|
|
|
|
Each entry is a node in the holographic graph — a piece of meaning
|
|
with metadata, content, and links to related entries.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from datetime import datetime, timezone
|
|
from typing import Optional
|
|
import uuid
|
|
|
|
|
|
@dataclass
|
|
class ArchiveEntry:
|
|
"""A single node in the Mnemosyne holographic archive."""
|
|
|
|
id: str = field(default_factory=lambda: str(uuid.uuid4()))
|
|
title: str = ""
|
|
content: str = ""
|
|
source: str = "" # "mempalace", "event", "manual", etc.
|
|
source_ref: Optional[str] = None # original MemPalace ID, event URI, etc.
|
|
topics: list[str] = field(default_factory=list)
|
|
metadata: dict = field(default_factory=dict)
|
|
created_at: str = field(default_factory=lambda: datetime.now(timezone.utc).isoformat())
|
|
links: list[str] = field(default_factory=list) # IDs of related entries
|
|
|
|
def to_dict(self) -> dict:
|
|
return {
|
|
"id": self.id,
|
|
"title": self.title,
|
|
"content": self.content,
|
|
"source": self.source,
|
|
"source_ref": self.source_ref,
|
|
"topics": self.topics,
|
|
"metadata": self.metadata,
|
|
"created_at": self.created_at,
|
|
"links": self.links,
|
|
}
|
|
|
|
@classmethod
|
|
def from_dict(cls, data: dict) -> ArchiveEntry:
|
|
return cls(**{k: v for k, v in data.items() if k in cls.__dataclass_fields__})
|