Skip to main content

A small library to simplify MongoDB usage with repository pattern

Project description

Repository MongoDB

A robust MongoDB repository pattern implementation featuring automated transaction management, type-safe operations, and comprehensive replica set support.

Features

  • Type-Safe Repository Pattern: Generic repository implementation with strong typing support
  • Automated Transaction Management: Declarative transaction handling using metaclasses
  • Replica Set Support: Built-in support for MongoDB replica sets with automated setup
  • Robust Error Handling: Comprehensive error handling and logging throughout the stack
  • Clean Architecture: Follows SOLID principles and clean architecture patterns

Prerequisites

  • Docker and Docker Compose
  • Python 3.10 or higher
  • pip (Python package manager)

Quick Start

  1. Clone the repository:
git clone https://github.com/yourusername/repository_mongodb.git
cd repository_mongodb
  1. Create and activate a virtual environment:
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
  1. Install dependencies:
pip install -r requirements.txt
  1. Setup MongoDB Replica Set:
chmod +x deployment/scripts/setup-mongodb.sh
sudo ./deployment/scripts/setup-mongodb.sh

Project Structure

repository_mongodb/
├── repository_mongodb/
│   ├── base_model.py          # Base model with MongoDB integration
│   ├── base_repository.py     # Generic repository implementation
│   ├── mongo_client.py        # MongoDB client configuration
│   ├── mongo_config.py        # MongoDB connection settings
│   ├── transaction_management.py  # Transaction context managers
│   └── transaction_metaclass.py   # Automated transaction handling
├── deployment/
│   ├── docker/
│   │   ├── docker-compose.yml    # MongoDB replica set configuration
│   │   └── mongodb/              # MongoDB data directory
│   └── scripts/
│       └── setup-mongodb.sh      # Automated setup script
├── tests/
│   ├── test_base_repository.py   # Repository tests
│   └── conftest.py              # Pytest fixtures
└── README.md

Architecture

Repository Pattern

The implementation uses a generic repository pattern with built-in transaction support:

class MyRepository(BaseRepository[MyModel]):
    def find_by_name(self, name: str) -> Optional[MyModel]:
        return self.find_by_attributes({"name": name})

Transaction Management

Transactions are automatically handled using metaclasses:

@transactional
def transfer_funds(from_account: Account, to_account: Account, amount: float):
    from_account.balance -= amount
    to_account.balance += amount
    account_repo.update(from_account)
    account_repo.update(to_account)

MongoDB Configuration

The system supports flexible MongoDB configuration through environment variables:

  • MONGO_HOST: MongoDB host (default: localhost)
  • MONGO_PORT: MongoDB port (default: 27017)
  • MONGO_DATABASE: Database name (default: test_database)
  • MONGO_REPLICA_SET: Replica set name (default: rs0)

Development

Running Tests

pytest tests/

MongoDB Management

Start MongoDB cluster:

cd deployment/docker
docker-compose up -d

Stop MongoDB cluster:

cd deployment/docker
docker-compose down

View logs:

docker-compose logs -f

Error Handling

The implementation includes comprehensive error handling:

  • Connection failures
  • Transaction conflicts
  • Replica set issues
  • Network timeouts

All errors are properly logged with detailed information for debugging.

Best Practices

  1. Always use the repository pattern for database operations
  2. Let the transaction decorator handle transaction management
  3. Use type hints for better code safety
  4. Follow the provided error handling patterns
  5. Use the logging system for debugging

Contributing

  1. Fork the repository
  2. Create your feature branch
  3. Commit your changes
  4. Push to the branch
  5. Create a new Pull Request

License

MIT License

Support

For issues and feature requests, please use the GitHub issue tracker.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

repository_mongodb-0.1.8.tar.gz (9.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

repository_mongodb-0.1.8-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file repository_mongodb-0.1.8.tar.gz.

File metadata

  • Download URL: repository_mongodb-0.1.8.tar.gz
  • Upload date:
  • Size: 9.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.18

File hashes

Hashes for repository_mongodb-0.1.8.tar.gz
Algorithm Hash digest
SHA256 a5d2117a66b68be4cd29238fc11e27d5a2b10e28de13cb9088dcaaffcad46506
MD5 e787990bca6af9c7b018f70aeafc7aa3
BLAKE2b-256 c3f76b3f14bb121918ff64330d7cd11baaedbe57517f85774decb7ccb06a8650

See more details on using hashes here.

File details

Details for the file repository_mongodb-0.1.8-py3-none-any.whl.

File metadata

File hashes

Hashes for repository_mongodb-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 6c582382f97a13cfd432d4aba8f88953585accf398abaf3132c41f5bd807704d
MD5 8a27ddb848efb84466f34547bd1bc925
BLAKE2b-256 254a9c0dc598b5c0ed7035c277d573b05bca46849ccdd41cd043d7f0d8e3d548

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page