Schema Sprout connects to a third-party database to dynamically create models and views.
Project description
Django Schema Sprout
Django Schema Sprout is a django package that helps with generating models, serializers and views dynamically for unmanaged databases. Currently Django Schema Sprout supports only PostgreSQL (>=11.), Django (>=4.0, <5.0)
Installation
To install Django Schema Sprout, you can run:
pip install django-schema-sprout
Usage
Settings.py
Add django_schema_sprout
in installed apps in your settings.py
and add SchemaSproutDBRouter
to your database routers.
INSTALLED_APPS = [
# django_schema_sprout requires rest_framework and drf_yasg to be installed.
"rest_framework",
"drf_yasg",
...
"django_schema_sprout"
]
...
DATABASE_ROUTERS = [
...,
"django_schema_sprout.router.SchemaSproutDBRouter",
]
Initializing SchemaSprout
from django_schema_sprout.schema_sprout import SchemaSprout
my_db_sprout = SchemaSprout("name_of_unmanaged_db")
SchemaSprout
is Singleton based on parameters so initializing SchemaSprout
with same database name will return same instance.
Creating models
You can either create all models at once using create_models
.
create_models
takes one parameter:
readonly
bool (default:False
), specifying if created REST ViewSets should be readonly or not.
my_db_sprout.create_models(readonly=True)
To create one model at the time use create_model
.
create_model
takes 3 parameter:
table_name
- str, name of the table for which you want to create model.table_nspname
- str, schema where the table resides.readonly
bool (default:False
), specifying if created REST ViewSet should be readonly or not.
my_db_sprout.create_model(
table_name="my_table"
table_nspname="my_schema"
readonly=False
)
Including SchemaSprout ViewSets
In url.py
file, include urls from SchemaSprout.router
. Make sure that the models that you need were created before.
from django.contrib import admin
from django.urls import path, re_path, include
...
from django_schema_sprout.schema_sprout import SchemaSprout
urlpatterns = [
...,
path("api/", include(SchemaSprout("name_of_unmanaged_db").router.urls)),
...
]
Accessing created models
You can access created models, serializers and views by accessing SchemaSprout attributes:
table_name = "my_table"
schema_name = "my_schema"
obj_key = f"{schema_name}_{table_name}"
my_model = my_db_sprout.models.get(obj_key, None)
my_model_serializer = my_db_sprout.serializers.get(obj_key, None)
my_model_view = my_db_sprout.views.get(obj_key, None)
Contribution
Feel free to contriute or open an issue.
For local development:
- in your venv install dev dependencies
pip install -e ".[dev]"
- for testing install test dependencies
pip install -e ".[test]"
Running tests requires to have installed Postgres.
License
This project is licensed under the Apache License 2.0
Contact
For questions feel free to contact me: grumpy.miner.dev@gmail.com
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
Hashes for django_schema_sprout-0.1.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4ac149731fc603d99cd885287251548b99af5be7fc035b7fb9b24405d6360521 |
|
MD5 | b7d2935950ba110d72ed811762aab82f |
|
BLAKE2b-256 | b70436be07753545353fce605a520cc6c45902f9df3c50e5a1aebdfadc1d6377 |
Hashes for django_schema_sprout-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 08af25e5bac05086dcd3bb425582806bafeca5825f8d3b163f73c4f0d0793f03 |
|
MD5 | 90b7df4edcb993b3d35f75f0debbf975 |
|
BLAKE2b-256 | a547eda42ac1a4ec519e8e98b6967efb886ff996cc9c6b09ebf99906e001ab18 |