Implements optional git-based version control for information spaces: - HistoryConfig model for configuring history tracking - Commit, Branch, HistoryEntry, DiffResult models - IHistoryBackend and IHistoryQuery interfaces - GitHistoryBackend using git CLI for version control - GitHistoryEventHandler for event-driven auto-commits - HistoryEventCoordinator for managing space history - HistoryQueryService for high-level history queries - Automatic commits on DOCUMENT_ADDED/REMOVED/CONTENT_CHANGED events - Support for: * Commit log with pagination and filtering * Diff between versions * File content at specific versions * Branch creation and switching * Version restoration * Uncommitted changes detection - 43 comprehensive unit tests with git availability checks Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
172 lines
4.2 KiB
Python
172 lines
4.2 KiB
Python
"""
|
|
Information Spaces package for MarkiTect.
|
|
|
|
This package provides the Information Space abstraction, enabling:
|
|
- First-class space entities with identity, metadata, and lifecycle
|
|
- Event-driven change tracking and notifications
|
|
- Persistent transclusion context with cross-space references
|
|
- HTML rendering with caching and theme support
|
|
- Bidirectional directory synchronization
|
|
- Composable space hierarchies
|
|
|
|
Package Structure:
|
|
- models: Core domain models (InformationSpace, SpaceDocument, SpaceConfig)
|
|
- events: Event system (SpaceEvent, EventBus, handlers)
|
|
- repositories: Data access layer (ISpaceRepository, SqliteSpaceRepository)
|
|
- transclusion: Persistent transclusion context and reference tracking
|
|
- rendering: Space rendering (HTML, themes)
|
|
- sync: Directory synchronization (export, import, bidirectional)
|
|
- services: Business logic (SpaceService)
|
|
- history: Optional git-based version control
|
|
|
|
Usage:
|
|
from markitect.spaces import SpaceService, InformationSpace
|
|
|
|
service = SpaceService()
|
|
space = await service.create_space("my-docs")
|
|
await service.add_document(space, "/intro.md", content="# Intro")
|
|
await service.render(space, output_dir="./html/")
|
|
"""
|
|
|
|
# Phase 1: Foundation
|
|
from .models import (
|
|
InformationSpace,
|
|
SpaceDocument,
|
|
SpaceConfig,
|
|
SpaceMetadata,
|
|
SpaceVariable,
|
|
TransclusionReference,
|
|
SpaceStatus,
|
|
)
|
|
from .services import SpaceService
|
|
from .repositories import (
|
|
ISpaceRepository,
|
|
IDocumentAssociationRepository,
|
|
IVariableRepository,
|
|
IReferenceRepository,
|
|
SqliteSpaceRepository,
|
|
SqliteDocumentRepository,
|
|
SqliteVariableRepository,
|
|
SqliteReferenceRepository,
|
|
initialize_space_tables,
|
|
)
|
|
|
|
# Phase 2: Event System
|
|
from .events import (
|
|
SpaceEvent,
|
|
SpaceEventType,
|
|
EventBus,
|
|
get_event_bus,
|
|
reset_event_bus,
|
|
)
|
|
|
|
# Phase 7: Composability
|
|
from .composability import (
|
|
# Models
|
|
SpaceReference,
|
|
SpaceReferenceType,
|
|
SpacePermission,
|
|
SpaceRole,
|
|
AccessLevel,
|
|
SpaceAccess,
|
|
InheritedVariable,
|
|
InheritedConfig,
|
|
# Services
|
|
ComposableSpaceService,
|
|
InheritanceResolver,
|
|
AccessControlService,
|
|
# Repositories
|
|
ISpaceReferenceRepository,
|
|
IAccessControlRepository,
|
|
SqliteSpaceReferenceRepository,
|
|
SqliteAccessControlRepository,
|
|
)
|
|
from .composability.service import CircularReferenceError
|
|
|
|
# Phase 8: History Tracking (Optional)
|
|
from .history import (
|
|
# Models
|
|
Commit,
|
|
Branch,
|
|
HistoryEntry,
|
|
DiffResult,
|
|
DiffLine,
|
|
DiffType,
|
|
HistoryConfig,
|
|
# Interfaces
|
|
IHistoryBackend,
|
|
IHistoryQuery,
|
|
# Implementations
|
|
GitHistoryBackend,
|
|
GitError,
|
|
GitHistoryEventHandler,
|
|
HistoryEventCoordinator,
|
|
HistoryQueryService,
|
|
)
|
|
|
|
__all__ = [
|
|
# Models
|
|
"InformationSpace",
|
|
"SpaceDocument",
|
|
"SpaceConfig",
|
|
"SpaceMetadata",
|
|
"SpaceVariable",
|
|
"TransclusionReference",
|
|
"SpaceStatus",
|
|
# Services
|
|
"SpaceService",
|
|
# Repository Interfaces
|
|
"ISpaceRepository",
|
|
"IDocumentAssociationRepository",
|
|
"IVariableRepository",
|
|
"IReferenceRepository",
|
|
# SQLite Implementations
|
|
"SqliteSpaceRepository",
|
|
"SqliteDocumentRepository",
|
|
"SqliteVariableRepository",
|
|
"SqliteReferenceRepository",
|
|
"initialize_space_tables",
|
|
# Event System
|
|
"SpaceEvent",
|
|
"SpaceEventType",
|
|
"EventBus",
|
|
"get_event_bus",
|
|
"reset_event_bus",
|
|
# Composability - Models
|
|
"SpaceReference",
|
|
"SpaceReferenceType",
|
|
"SpacePermission",
|
|
"SpaceRole",
|
|
"AccessLevel",
|
|
"SpaceAccess",
|
|
"InheritedVariable",
|
|
"InheritedConfig",
|
|
# Composability - Services
|
|
"ComposableSpaceService",
|
|
"InheritanceResolver",
|
|
"AccessControlService",
|
|
"CircularReferenceError",
|
|
# Composability - Repositories
|
|
"ISpaceReferenceRepository",
|
|
"IAccessControlRepository",
|
|
"SqliteSpaceReferenceRepository",
|
|
"SqliteAccessControlRepository",
|
|
# History - Models
|
|
"Commit",
|
|
"Branch",
|
|
"HistoryEntry",
|
|
"DiffResult",
|
|
"DiffLine",
|
|
"DiffType",
|
|
"HistoryConfig",
|
|
# History - Interfaces
|
|
"IHistoryBackend",
|
|
"IHistoryQuery",
|
|
# History - Implementations
|
|
"GitHistoryBackend",
|
|
"GitError",
|
|
"GitHistoryEventHandler",
|
|
"HistoryEventCoordinator",
|
|
"HistoryQueryService",
|
|
]
|