Files
markitect-main/markitect/frontmatter.py
tegwick 35cbe715a5 feat: Implement Issue #1 - Database initialization and front matter parsing
Complete TDD implementation of core MarkiTect functionality:

**Database Module (markitect/database.py):**
- DatabaseManager class with SQLite database initialization
- markdown_files table with proper schema (id, filename, front_matter, content, created_at)
- Front matter storage as JSON with content separation
- File storage, retrieval, and listing methods
- Comprehensive error handling

**Front Matter Module (markitect/frontmatter.py):**
- FrontMatterParser class with YAML front matter parsing
- Clean separation of metadata from markdown content
- Graceful handling of invalid YAML and missing front matter
- Regex-based parsing with proper delimiter handling

**Dependencies:**
- Added PyYAML for front matter parsing
- Updated pyproject.toml with new dependency

**Test Coverage:**
- 9 comprehensive tests covering all functionality
- Database initialization and schema validation
- Front matter parsing with Issue #1 example content
- Integrated workflow testing (storage/retrieval)
- Error handling for edge cases

**TDD Process:**
- RED phase: 8 failing tests defining requirements
- GREEN phase: Minimal implementation making all tests pass
- Validation: Complete workflow verified with example content

This implementation provides the foundation for all subsequent MarkiTect
features, handling the exact example from Issue #1 specification.

Issue #1: Initialize Database and Store Example Markdown File
coulomb/markitect_project#1

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-23 04:28:29 +02:00

60 lines
1.8 KiB
Python

"""
Front matter parsing functionality for MarkiTect.
This module provides YAML front matter parsing for markdown files,
separating metadata from content.
"""
import re
import yaml
from typing import Dict, Tuple, Any
class FrontMatterParser:
"""Parser for YAML front matter in markdown files."""
def __init__(self):
"""Initialize the front matter parser."""
pass
def parse(self, content: str) -> Tuple[Dict[str, Any], str]:
"""
Parse front matter from markdown content.
Args:
content: Raw markdown content that may include YAML front matter
Returns:
Tuple of (front_matter_dict, markdown_content)
- front_matter_dict: Parsed YAML as dictionary, empty dict if none
- markdown_content: Markdown content with front matter removed
"""
if not content.strip():
return {}, content
# Check if content starts with front matter delimiter
if not content.strip().startswith('---'):
return {}, content
# Pattern to match YAML front matter
# Must start with --- at beginning of string, end with --- on its own line
pattern = r'^---\s*\n(.*?)\n---\s*\n(.*)$'
match = re.match(pattern, content, re.DOTALL)
if not match:
# No valid front matter found
return {}, content
yaml_content = match.group(1)
markdown_content = match.group(2)
# Parse YAML content
try:
front_matter = yaml.safe_load(yaml_content)
if front_matter is None:
front_matter = {}
except yaml.YAMLError:
# Invalid YAML - return empty dict and preserve content
front_matter = {}
return front_matter, markdown_content