This document provides an overview of the MetaQuest architecture and design principles.
MetaQuest is designed around the following principles:
- Separation of Concerns: Clear separation between data access, business logic, and user interfaces
- Extensibility: Plugin-based design allowing for easy addition of new features
- Maintainability: Well-defined interfaces and abstractions to simplify maintenance
- Robustness: Comprehensive error handling and validation
- Usability: Intuitive CLI with consistent command patterns
The application is structured using a layered architecture with the following components:
+------------------+
| CLI |
+------------------+
|
+------------------+
| Core Logic |
+------------------+
|
+------------------+ +------------------+
| Data Layer |<--->| Plugin System |
+------------------+ +------------------+
|
+------------------+
| External Systems |
+------------------+
The CLI layer provides the command-line interface for the application. It's responsible for:
- Parsing command-line arguments
- Routing commands to the appropriate handlers
- Formatting output for the user
The core logic layer contains the business logic of the application. It includes:
- Data models and domain objects
- Validation logic
- Processing algorithms
- Error handling
The data layer manages access to data sources and external systems:
- File I/O operations
- Data format conversions
- Communication with external APIs
- Caching mechanisms
The plugin system enables extensibility:
- Format plugins for different file formats
- Visualization plugins for different visualization types
- Processing plugins for different analysis methods
- Models: Data classes representing domain objects like
Containment
andSRAMetadata
- Validation: Functions for validating input data and configurations
- Exceptions: Custom exception hierarchy for clear error reporting
- file_io: Abstract file operations for reading/writing various file formats
- branchwater: Functionality for working with Branchwater data
- metadata: Functions for downloading and processing metadata
- sra: Functions for downloading and working with SRA data
- containment: Algorithms for analyzing containment data
- counts: Functions for counting and summarizing metadata
- statistics: Statistical analysis utilities
- plots: Functions for generating various types of plots
- reporting: Tools for generating reports
- base: Base classes and registries for plugins
- formats: File format plugins
- visualizers: Visualization plugins
- logging: Logging configuration and utilities
- config: Configuration management
- Input: User provides commands via CLI
- Command Handling: CLI routes to appropriate command handler
- Data Access: Commands interact with data sources via the data layer
- Processing: Data is processed using core logic components
- Visualization: Results are visualized or formatted for output
- Output: Results are presented to the user via CLI
The plugin system uses a registry pattern:
- Plugins inherit from a base
Plugin
class - Plugins are registered in a
PluginRegistry
- The application can discover plugins at runtime
- Plugins provide specific implementations for abstract operations
Format plugins handle different file formats:
BranchWaterFormatPlugin
: Handles Branchwater CSV filesMastiffFormatPlugin
: Handles Mastiff CSV files
Each plugin provides standard methods like:
validate_header
: Validates file headersparse_file
: Parses file contentextract_metadata
: Extracts metadata from parsed content
The application uses a consistent error handling approach:
- Custom exception hierarchy starting with
MetaQuestError
- Specific exception types for different error categories
- Each layer handles errors appropriate to its level
- CLI layer catches and formats errors for user display
The application manages configuration through:
- Default configuration values
- Configuration file in user's home directory
- Environment variables
- Command-line overrides
The architecture is designed to accommodate future extensions:
- New file format plugins
- Additional visualization types
- More analysis algorithms
- Web interface or API
- Database integration