MarkiTect Utils Capability
A self-contained capability providing common utility functions for the MarkiTect ecosystem.
Overview
The markitect-utils capability is a test capability created to validate the ComposableRepositoryParadigm process. It provides a collection of commonly used utility functions that can be shared across different MarkiTect capabilities and projects, while serving as a reference implementation for the paradigm.
Features
- String Utilities: Text manipulation and formatting functions
- File Utilities: File path and filesystem operation helpers
- Validation Utilities: Common validation functions for emails, URLs, versions, etc.
- Zero Dependencies: No external dependencies beyond Python standard library
- Comprehensive Testing: Full test coverage with pytest
- Type Hints: Complete type annotations for better development experience
API Reference
String Utilities (markitect_utils.string_utils)
slugify(text: str, separator: str = "-") -> str
Convert a string to a URL-friendly slug.
from markitect_utils import slugify
slug = slugify("Hello World!") # Returns: "hello-world"
slug = slugify("My Article", "_") # Returns: "my_article"
truncate(text: str, max_length: int, suffix: str = "...") -> str
Truncate a string to a maximum length with optional suffix.
from markitect_utils import truncate
short = truncate("This is a long string", 10) # Returns: "This is..."
camel_to_snake(text: str) -> str
Convert camelCase or PascalCase to snake_case.
from markitect_utils import camel_to_snake
snake = camel_to_snake("camelCase") # Returns: "camel_case"
snake_to_camel(text: str, pascal_case: bool = False) -> str
Convert snake_case to camelCase or PascalCase.
from markitect_utils import snake_to_camel
camel = snake_to_camel("snake_case") # Returns: "snakeCase"
pascal = snake_to_camel("snake_case", pascal_case=True) # Returns: "SnakeCase"
strip_ansi_codes(text: str) -> str
Remove ANSI escape sequences from text.
from markitect_utils import strip_ansi_codes
clean = strip_ansi_codes("\\033[31mRed text\\033[0m") # Returns: "Red text"
File Utilities (markitect_utils.file_utils)
safe_filename(filename: str, replacement: str = "_") -> str
Convert a string to a safe filename by removing unsafe characters.
from markitect_utils import safe_filename
safe = safe_filename("file<name>.txt") # Returns: "file_name_.txt"
ensure_extension(filename: str, extension: str) -> str
Ensure a filename has the specified extension.
from markitect_utils import ensure_extension
with_ext = ensure_extension("document", ".md") # Returns: "document.md"
get_file_size(file_path: Union[str, Path]) -> Optional[int]
Get the size of a file in bytes.
from markitect_utils import get_file_size
size = get_file_size("document.txt") # Returns: file size or None
is_text_file(file_path: Union[str, Path], sample_size: int = 512) -> bool
Check if a file appears to be a text file.
from markitect_utils import is_text_file
is_text = is_text_file("document.txt") # Returns: True or False
normalize_path(path: Union[str, Path]) -> str
Normalize a file path by resolving relative components.
from markitect_utils import normalize_path
abs_path = normalize_path("./dir/../file.txt") # Returns: absolute path
Validation Utilities (markitect_utils.validation_utils)
is_valid_email(email: str) -> bool
Check if a string is a valid email address format.
from markitect_utils import is_valid_email
valid = is_valid_email("user@example.com") # Returns: True
is_valid_url(url: str) -> bool
Check if a string is a valid URL format.
from markitect_utils import is_valid_url
valid = is_valid_url("https://example.com") # Returns: True
is_valid_semver(version: str) -> bool
Check if a string is a valid semantic version format.
from markitect_utils import is_valid_semver
valid = is_valid_semver("1.0.0") # Returns: True
valid = is_valid_semver("1.0.0-alpha.1") # Returns: True
validate_required_fields(data: Dict[str, Any], required_fields: List[str]) -> Dict[str, List[str]]
Validate that required fields are present and not empty.
from markitect_utils import validate_required_fields
data = {"name": "John", "email": "", "age": 30}
result = validate_required_fields(data, ["name", "email", "phone"])
# Returns: {"missing": ["phone"], "empty": ["email"]}
Installation
Install as an editable dependency in your MarkiTect environment:
pip install -e capabilities/markitect-utils/
Or install with development dependencies:
pip install -e "capabilities/markitect-utils/[dev]"
Testing
Run the capability test suite:
cd capabilities/markitect-utils/
pytest tests/
Run with coverage:
cd capabilities/markitect-utils/
pytest tests/ --cov=markitect_utils --cov-report=html
Development
This capability follows standard Python development practices:
- Code Style: Follow PEP 8 conventions
- Type Hints: All functions include complete type annotations
- Documentation: Comprehensive docstrings with examples
- Testing: Aim for 100% test coverage
ComposableRepositoryParadigm Compliance
This capability serves as a reference implementation and demonstrates compliance with the ComposableRepositoryParadigm:
✅ Structure Requirements
- Src Layout: Uses PEP 660 compliant
src/directory structure - Consistent Testing: pytest configuration matches main project
- Independent Configuration: Self-contained
pyproject.toml - Documentation: Complete README with API documentation
✅ Dependency Management
- Unidirectional Dependencies: No imports from parent MarkiTect project
- External Dependencies: Minimal external dependencies (none in this case)
- Self-Contained: Can be developed and tested independently
✅ Quality Standards
- Type Safety: Complete type annotations with mypy configuration
- Test Coverage: Comprehensive test suite with unit and integration tests
- Documentation: Detailed API documentation with examples
- Version Management: Semantic versioning starting at 0.1.0-dev
Purpose as Test Capability
This capability was specifically created to validate the ComposableRepositoryParadigm process and serves multiple purposes:
- Process Validation: Tests the capability creation workflow
- Structure Template: Provides a reference for future capabilities
- Documentation: Demonstrates best practices for paradigm compliance
- Quality Standards: Establishes testing and documentation patterns
Dependencies
This capability intentionally has no external dependencies to keep it simple and demonstrate that useful functionality can be provided with just the Python standard library.
Development dependencies:
pytest>=7.0.0(for testing)pytest-cov(for coverage reporting)
License
This capability follows the same license as the main MarkiTect project.