Metadata-Version: 2.4
Name: django-synced-seeders
Version: 0.3.0
Summary: An easy-to-use seeder manager to keep seed data in sync across multiple environments.
Author-email: Starscribers <Starscribers@gmail.com>
Project-URL: Homepage, https://github.com/Starscribers/django-synced-seeders
Project-URL: Repository, https://github.com/Starscribers/django-synced-seeders.git
Project-URL: Issues, https://github.com/Starscribers/django-synced-seeders/issues
Project-URL: Documentation, https://django-synced-seeders.readthedocs.io/
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Utilities
Classifier: Typing :: Typed
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: django>=4.2.24
Requires-Dist: django-stubs[compatible-mypy]>=5.1.3
Requires-Dist: django-stubs-ext>=5.1.3
Requires-Dist: requests>=2.32.4
Requires-Dist: types-requests>=2.32.0.20241016
Requires-Dist: slack-sdk>=3.36.0
Requires-Dist: any-registries>=0.2.0
Requires-Dist: django-stub>=0.1
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: black>=22.0.0; extra == "dev"
Requires-Dist: isort>=5.10.0; extra == "dev"
Requires-Dist: mypy>=0.950; extra == "dev"
Requires-Dist: flake8>=4.0.0; extra == "dev"
Requires-Dist: pre-commit>=3.0.0; extra == "dev"
Requires-Dist: bandit>=1.7.0; extra == "dev"
Requires-Dist: twine>=4.0.0; extra == "dev"
Requires-Dist: types-setuptools>=68.0.0; extra == "dev"
Provides-Extra: testing
Requires-Dist: pytest>=7.0.0; extra == "testing"
Requires-Dist: pytest-cov>=3.0.0; extra == "testing"
Provides-Extra: docs
Requires-Dist: sphinx>=7.0.0; extra == "docs"
Requires-Dist: sphinx-conestack-theme>=1.0.0; extra == "docs"
Requires-Dist: sphinx-autodoc-typehints>=1.25.0; extra == "docs"
Requires-Dist: myst-parser>=2.0.0; extra == "docs"
Dynamic: license-file

# Django Synced Seeds

[![PyPI version](https://badge.fury.io/py/django-synced-seeders.svg)](https://badge.fury.io/py/django-synced-seeders)
[![Python Support](https://img.shields.io/pypi/pyversions/django-synced-seeders.svg)](https://pypi.org/project/django-synced-seeders/)
[![Django Support](https://img.shields.io/badge/Django-4.2%2B-brightgreen.svg)](https://www.djangoproject.com/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

An easy-to-use seeder manager to keep seed data in sync across multiple environments. Perfect for managing reference data, initial configurations, and test data across development, staging, and production environments.

## Installation

```bash
pip install django-synced-seeders
```

Add to your Django settings:

```python
# settings.py
INSTALLED_APPS = [
    # ... your apps
    'seeds',
]
```

Run migrations:

```bash
python manage.py migrate
```

## Quick Start

1. Create your first seeder:

```python
# myapp/seeders.py
from seeds import seeder_registry, Seeder
from .models import Category

@seeder_registry.register()
class CategorySeeder(Seeder):
    seed_slug = "categories"
    exporting_querysets = (Category.objects.all(),)
```

2. Export data:

```bash
python manage.py exportseed categories
```

3. Sync to another environment:

```bash
python manage.py syncseeds
```

## Tagging Seeders

Organize seeders with tags for targeted execution:

```python
# myapp/seeders.py
from seeds import seeder_registry, Seeder
from .models import User, Product

@seeder_registry.register(tags="e2e")
class E2ETestSeeder(Seeder):
    seed_slug = "e2e_test_data"
    exporting_querysets = (User.objects.all(),)

@seeder_registry.register(tags=["development", "demo"])
class DemoSeeder(Seeder):
    seed_slug = "demo_data"
    exporting_querysets = (Product.objects.all(),)
```

Run seeders by tag:

```bash
# Sync only e2e tagged seeders
python manage.py syncseeds e2e

# Sync multiple tags (union of all matching seeders)
python manage.py syncseeds e2e development

# Sync all seeders (default behavior)
python manage.py syncseeds
```

## Documentation

📚 **Full Documentation**: [https://starscribers.github.io/django-synced-seeders/](https://starscribers.github.io/django-synced-seeders/)

## Community & Support

💬 **Discord Server**: [Join our community](https://discord.gg/ngE8JxjDx7) for discussions, support, and updates.

## License

This project is licensed under the MIT License.
