Port from .NET to Python of the Neuroglia Framework
Project description
Neuroglia Python Framework
Neuroglia is a lightweight, opinionated framework built on top of FastAPI that provides a comprehensive set of tools and patterns for building clean, maintainable, and scalable microservices. It enforces architectural best practices and provides out-of-the-box implementations of common patterns.
๐ Key Features
- ๐๏ธ Clean Architecture: Enforces separation of concerns with clearly defined layers (API, Application, Domain, Integration)
- ๐ Dependency Injection: Lightweight container with automatic service discovery and registration
- ๐ฏ CQRS & Mediation: Command Query Responsibility Segregation with built-in mediator pattern
- ๐ก Event-Driven Architecture: Native support for CloudEvents, event sourcing, and reactive programming
- ๐ฏ Resource Oriented Architecture: Declarative resource management with watchers, controllers, and reconciliation loops
- ๐ MVC Controllers: Class-based API controllers with automatic discovery and OpenAPI generation
- ๐๏ธ Repository Pattern: Flexible data access layer with support for MongoDB, Event Store, and in-memory repositories
- ๐ Object Mapping: Bidirectional mapping between domain models and DTOs
- โก Reactive Programming: Built-in support for RxPy and asynchronous event handling
- ๐ง 12-Factor Compliance: Implements all 12-Factor App principles
- ๐ Rich Serialization: JSON serialization with advanced features
๐ฏ Architecture Overview
Neuroglia promotes a clean, layered architecture that separates concerns and makes your code more maintainable:
src/
โโโ api/ # ๐ API Layer (Controllers, DTOs, Routes)
โโโ application/ # ๐ผ Application Layer (Commands, Queries, Handlers, Services)
โโโ domain/ # ๐๏ธ Domain Layer (Entities, Value Objects, Business Rules)
โโโ integration/ # ๐ Integration Layer (External APIs, Repositories, Infrastructure)
๐ Documentation
Quick Links
- ๐ Getting Started - Set up your first Neuroglia application
- ๐๏ธ Architecture Guide - Understanding the framework's architecture
- ๐ Dependency Injection - Service container and DI patterns
- ๐ฏ CQRS & Mediation - Command and Query handling
- ๐ฏ Resource Oriented Architecture - Declarative resource management patterns
- ๐ MVC Controllers - Building REST APIs
- ๐๏ธ Data Access - Repository pattern and data persistence
- ๐ก Event Handling - CloudEvents and reactive programming
- ๐ Object Mapping - Mapping between different object types
- โ๏ธ Configuration - Application configuration and settings
Sample Applications
Learn by example with complete sample applications:
- ๐ฆ OpenBank - Event-sourced banking domain with CQRS
- ๐งช Lab Resource Manager - Resource Oriented Architecture with watchers and reconciliation
- ๐ฅ๏ธ Desktop Controller - Remote desktop management API
- ๐ช API Gateway - Microservice gateway with authentication
๐ง Quick Start
# Install from PyPI
pip install neuroglia
# Or install from source
git clone <repository-url>
cd pyneuro
pip install -e .
Create your first application:
from neuroglia.hosting.web import WebApplicationBuilder
# Create and configure the application
builder = WebApplicationBuilder()
builder.add_controllers(["api.controllers"])
# Build and run
app = builder.build()
app.use_controllers()
app.run()
๐๏ธ Framework Components
| Component | Purpose | Documentation |
|---|---|---|
| Core | Base types, utilities, module loading | ๐ Core |
| Dependency Injection | Service container and registration | ๐ DI |
| Hosting | Web application hosting and lifecycle | ๐ Hosting |
| MVC | Controllers and routing | ๐ MVC |
| Mediation | CQRS, commands, queries, events | ๐ Mediation |
| Resource Oriented Architecture | Watchers, controllers, reconciliation | ๐ ROA |
| Data | Repository pattern, event sourcing | ๐ Data |
| Eventing | CloudEvents, pub/sub, reactive | ๐ Events |
| Mapping | Object-to-object mapping | ๐ Mapping |
| Serialization | JSON and other serialization | ๐ Serialization |
๐ Requirements
- Python 3.11+
- FastAPI
- Pydantic
- RxPy (for reactive features)
- Motor (for MongoDB support)
- Additional dependencies based on features used
๐งช Testing
Neuroglia includes a comprehensive test suite covering all framework features with both unit and integration tests.
Running Tests
Run All Tests
# Run the complete test suite
pytest
# Run with coverage report
pytest --cov=neuroglia --cov-report=html --cov-report=term
# Run in parallel for faster execution
pytest -n auto
Run Specific Test Categories
# Run only unit tests
pytest tests/unit/
# Run only integration tests
pytest tests/integration/
# Run tests by marker
pytest -m "unit"
pytest -m "integration"
pytest -m "slow"
Run Feature-Specific Tests
# Test dependency injection
pytest tests/unit/test_dependency_injection.py
# Test CQRS and mediation
pytest tests/unit/test_cqrs_mediation.py
# Test data access layer
pytest tests/unit/test_data_access.py
# Test object mapping
pytest tests/unit/test_mapping.py
# Run integration tests
pytest tests/integration/test_full_framework.py
Test Coverage
Our test suite provides comprehensive coverage of the framework:
- Unit Tests: >95% coverage for core framework components
- Integration Tests: End-to-end workflow validation
- Performance Tests: Load testing for critical paths
- Sample Application Tests: Real-world usage scenarios
Test Organization
tests/
โโโ unit/ # ๐ฌ Unit tests for individual components
โโโ integration/ # ๐ Integration tests for workflows
โโโ fixtures/ # ๐ ๏ธ Shared test fixtures and utilities
โโโ conftest.py # โ๏ธ pytest configuration
What's Tested
- Basic dependency injection service registration and resolution
- CQRS command and query handling through the mediator
- Object mapping between different types
- Repository pattern with various backend implementations
- Full framework integration workflows
Test Fixtures
We provide comprehensive test fixtures for:
- Dependency injection container setup
- Sample services and repositories
- Mock data and test entities
- Configuration and settings
Known Test Limitations
- Some dependency injection features (like strict service lifetimes) may have implementation-specific behavior
- MongoDB integration tests require a running MongoDB instance
- Event Store tests require EventStoreDB connection
Adding Tests
When contributing, please include tests for new features:
import pytest
from neuroglia.dependency_injection import ServiceCollection
class TestNewFeature:
@pytest.mark.unit
def test_my_unit_feature(self):
"""Test individual component"""
result = self.service.do_something()
assert result == expected_value
๐ค Contributing
We welcome contributions! Please see our Contributing Guide for details.
๐ License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
๐ Documentation
Complete documentation is available at https://bvandewe.github.io/pyneuro/
Disclaimer
This project was the opportunity for me (cdavernas) to learn Python while porting some of the concepts and services of the .NET version of the Neuroglia Framework
Packaging
# Set `package-mode = true` in pyproject.toml
# Set the version tag in pyproject.toml
# Commit changes
# Create API Token in pypi.org...
# Configure credentials for pypi registry:
poetry config pypi-token.pypi {pypi-....mytoken}
# Build package locally
poetry build
# Publish package to pypi.org:
poetry publish
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file neuroglia_python-0.2.0.tar.gz.
File metadata
- Download URL: neuroglia_python-0.2.0.tar.gz
- Upload date:
- Size: 77.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.4 CPython/3.12.1 Darwin/24.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9eb005d87bb3f8dd28200a181611d4f4f43ec9f50cd21607bc5ca6aaa6487010
|
|
| MD5 |
0a84afeae4356a2415c5aadefb36878f
|
|
| BLAKE2b-256 |
ab597f43d4902dcf70f37a732e267ceb30a7cb768bee120b43d6f9dfb940a795
|
File details
Details for the file neuroglia_python-0.2.0-py3-none-any.whl.
File metadata
- Download URL: neuroglia_python-0.2.0-py3-none-any.whl
- Upload date:
- Size: 110.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.4 CPython/3.12.1 Darwin/24.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0899e57433098c3463b86c15802161b700c44dee07f087c6e046d84a994db81d
|
|
| MD5 |
be3bd70667b9f729933aa36269301e0d
|
|
| BLAKE2b-256 |
0b9416ebc4f8420fb654896a1ba248336a208293a8fb59926ddc1c81b5cc1f4f
|