https://github.com/anitrend/anitrend
A django based graphql application for providing meta-data and an engine to scrape service providers to generate API data
https://github.com/anitrend/anitrend
anitrend dependency-injection django django-graphene django-q
Last synced: 4 days ago
JSON representation
A django based graphql application for providing meta-data and an engine to scrape service providers to generate API data
- Host: GitHub
- URL: https://github.com/anitrend/anitrend
- Owner: AniTrend
- License: gpl-3.0
- Created: 2021-05-07T06:32:34.000Z (about 4 years ago)
- Default Branch: develop
- Last Pushed: 2025-06-17T17:53:00.000Z (12 days ago)
- Last Synced: 2025-06-17T18:45:36.296Z (12 days ago)
- Topics: anitrend, dependency-injection, django, django-graphene, django-q
- Language: Python
- Homepage:
- Size: 2 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: news/__init__.py
- Funding: .github/FUNDING.yaml
- License: LICENSE
Awesome Lists containing this project
README
# AniTrend GraphQL API
A sophisticated GraphQL API that aggregates anime-related data from multiple sources with built-in caching capabilities. This API serves as a unified interface for accessing anime news, episodes, and configuration data with features like rate limiting, error handling, and connection pooling.
## Key Features
- **GraphQL Interface**: Built with Strawberry GraphQL for type-safe schema definitions and efficient queries
- **Data Aggregation**: Centralizes data from multiple sources into a unified API
- **Intelligent Caching**: Built-in caching mechanisms to optimize performance
- **Rate Limiting**: Protects upstream services with configurable rate limiting
- **Error Resilience**: Automatic retries with backoff strategies for API calls
- **WebSocket Support**: Real-time updates through GraphQL subscriptions
- **Type Safety**: Fully typed schemas using Python dataclasses and Strawberry types
- **Modular Architecture**: Clean separation of concerns with domain-driven design## Core Components
### News Module
- Aggregates news from various sources
- Supports pagination through connection types
- Provides rich filtering and sorting capabilities
- Includes full text search for news content### Configuration System
- Dynamic client configuration management
- Navigation structure configuration
- Media resource management
- Feature flag system
- Analytics integration options### Episode Tracking
- Episode information aggregation
- Release schedule tracking
- Media metadata management## Getting Started
### Prerequisites
- Python 3.8+
- Poetry for dependency management### Setup
1. Clone the repository and set up environment variables:
```shell
cp .env.default .env
```2. Install dependencies using Poetry:
```shell
poetry install
```3. Set up the database:
```shell
poetry run python manage.py makemigrations
poetry run python manage.py migrate
```4. Start the development server:
```shell
poetry run python manage.py runserver
```The GraphQL playground will be available at `http://localhost:8000/playground`
The schema will be saved in `./tmp`
## Project Structure
- `app/`: Core application setup, including GraphQL schema configuration and ASGI/WSGI servers
- `core/`: Base utilities, middleware, and common functionality
- Error handling
- Rate limiting
- Caching infrastructure
- Common schemas and models
- `config/`: Configuration management and dependency injection
- Client configuration
- Feature flags
- Resource management
- `news/`: News aggregation and management
- News feed implementation
- Source integration
- Content caching
- `episode/`: Episode tracking and management
- Episode data models
- Release tracking
- Media metadata
- `web/`: Web-specific implementations and views## Development
The project uses a clean architecture pattern with:
- Domain-driven design
- Repository pattern for data access
- Use case pattern for business logic
- Dependency injection for flexible component coupling## Testing
The project includes comprehensive unit tests for all major components. Run tests using:
```shell
poetry run pytest
```## License
```
Copyright (C) 2021 AniTrendThis program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.You should have received a copy of the GNU General Public License
along with this program. If not, see .
```