From 9dddb7b74a56bfe7fb25d1f0a610c6d2d4d72843 Mon Sep 17 00:00:00 2001 From: Garry O'Donnell Date: Fri, 12 Apr 2024 14:24:44 +0000 Subject: [PATCH] Generate models from database --- .devcontainer/docker-compose.yml | 2 +- .gitignore | 3 +++ pyproject.toml | 16 ++++++++++++++-- setup.py | 14 ++++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 setup.py diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index a263cc6..428d73a 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -10,7 +10,7 @@ services: - ..:/workspace:cached,z command: sleep infinity environment: - DATABASE_URL: mysql://root:rootpassword@ispyb/ispyb_build + DATABASE_URL: mysql+pymysql://root:rootpassword@ispyb/ispyb_build ispyb: image: ghcr.io/diamondlightsource/ispyb-database:v3.0.0 diff --git a/.gitignore b/.gitignore index 2593ec7..73e42aa 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,6 @@ lockfiles/ # ruff cache .ruff_cache/ + +# Generated Database Models +src/graph_energy_scan/models.py \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 2af1323..192fdea 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,11 @@ [build-system] -requires = ["setuptools>=64", "setuptools_scm[toml]>=6.2"] +requires = [ + "setuptools>=64", + "setuptools_scm[toml]>=6.2", + "sqlacodegen-v2", + "sqlalchemy", + "pymysql", +] build-backend = "setuptools.build_meta" [project] @@ -14,7 +20,12 @@ classifiers = [ "Programming Language :: Python :: 3.11", ] description = "A service providing energy scan information as part of the Dimaond graph" -dependencies = ["uvicorn", "fastapi", "strawberry-graphql[fastapi]"] +dependencies = [ + "uvicorn", + "fastapi", + "strawberry-graphql[fastapi]", + "sqlalchemy", +] dynamic = ["version"] license.file = "LICENSE" readme = "README.md" @@ -31,6 +42,7 @@ dev = [ "ruff", "tox-direct", "types-mock", + "sqlacodegen-v2", ] [project.scripts] diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..7cb0368 --- /dev/null +++ b/setup.py @@ -0,0 +1,14 @@ +import os + +import setuptools +from sqlacodegen_v2.generators import DataclassGenerator +from sqlalchemy import MetaData, create_engine + +if __name__ == "__main__": + engine = create_engine(os.environ["DATABASE_URL"]) + metadata = MetaData() + metadata.reflect(engine) + generator = DataclassGenerator(metadata, engine, set()) + with open("src/graph_energy_scan/models.py", "w") as models_file: + models_file.write(generator.generate()) + setuptools.setup()