Notion Repository
A clean, efficient, and maintainable Python library for interacting with Notion databases. Built with async/await patterns, intelligent caching, and modular design.🚀 Features
- Fully Async: Built from the ground up with async/await for optimal performance
- Smart Caching: Intelligent lookup table management with Django cache integration
- Type Safe: Complete type annotations for better IDE support and code reliability
- Modular Design: Easily extensible architecture for new data types
- Error Resilient: Comprehensive error handling and logging
- Performance Optimized: Automatic pagination, batch operations, and on-demand loading
📋 Table of Contents
- Installation
- Quick Start
- Configuration
- Core Concepts
- API Reference
- Advanced Usage
- Performance Tips
- Troubleshooting
- Contributing
🛠️ Installation
- Python 3.8+
- Django (for caching)
- aiohttp or requests
- Your existing
core.utils.ApiClient
⚡ Quick Start
Basic Setup
With Filters
⚙️ Configuration
Database Configuration
The repository requires Notion database IDs for each data type:Environment Variables
For production, use environment variables:Cache Configuration
Customize cache behavior in your Django settings:🧠 Core Concepts
Architecture Overview
Lookup Tables
The system automatically manages “lookup tables” - cached mappings of Notion page IDs to human-readable values. This dramatically improves performance by avoiding redundant API calls for reference data. Example: Instead of making API calls for every tier reference, the system caches:Data Models
Each fetcher returns strongly-typed Python objects:Feature- Product features with metadataGateway- API gateways and specificationsTier- Subscription tiers and limitsTag- Classification tags with SEO dataKeyword- SEO keywords with analytics
📚 API Reference
NotionRepository
Core Methods
Utility Methods
🚀 Advanced Usage
Performance Optimization
Batch Operations
Custom Queries
Error Handling
Context Manager Usage
💡 Performance Tips
1. Preload Lookups
2. Use Filters Wisely
3. Batch Related Operations
4. Monitor Cache Usage
🔧 Troubleshooting
Common Issues
1. Missing Database IDs
2. Cache Issues
3. API Rate Limits
The repository handles pagination automatically, but for rate limits:4. Connection Issues
Debug Mode
Enable debug logging:Health Monitoring
🧪 Testing
Unit Tests
Integration Tests
🤝 Contributing
Adding New Data Types
- Create a new fetcher class:
- Add to repository:
- Update configuration:
Code Style
- Follow PEP 8
- Use type hints
- Add docstrings for public methods
- Include logging for important operations
- Handle errors gracefully
Pull Request Process
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests pass
- Update documentation
- Submit pull request
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.🆘 Support
For issues and questions:- Check the troubleshooting section
- Review the API reference
- Open an issue on GitHub
- Contact the development team
Happy coding! 🎉