Skip to content

Commit

Permalink
Add sqlmodel to gel-orm generator.
Browse files Browse the repository at this point in the history
This is similar to SQLAlchemy model generator, but the results are
SQLModels instead.
  • Loading branch information
vpetrovykh committed Jan 27, 2025
1 parent d9b6768 commit 2c732bb
Show file tree
Hide file tree
Showing 7 changed files with 1,358 additions and 1 deletion.
21 changes: 21 additions & 0 deletions gel/_testbase.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
from gel import blocking_client
from gel.orm.introspection import get_schema_json, GelORMWarning
from gel.orm.sqla import ModelGenerator as SQLAModGen
from gel.orm.sqlmodel import ModelGenerator as SQLModGen
from gel.orm.django.generator import ModelGenerator as DjangoModGen


Expand Down Expand Up @@ -694,6 +695,26 @@ def get_dsn_for_sqla(cls):
return dsn


class SQLModelTestCase(ORMTestCase):
@classmethod
def setupORM(cls):
gen = SQLModGen(
outdir=os.path.join(cls.tmpormdir.name, cls.MODEL_PACKAGE),
basemodule=cls.MODEL_PACKAGE,
)
gen.render_models(cls.spec)

@classmethod
def get_dsn_for_sqla(cls):
cargs = cls.get_connect_args(database=cls.get_database_name())
dsn = (
f'postgresql://{cargs["user"]}:{cargs["password"]}'
f'@{cargs["host"]}:{cargs["port"]}/{cargs["database"]}'
)

return dsn


APPS_PY = '''\
from django.apps import AppConfig
Expand Down
13 changes: 12 additions & 1 deletion gel/orm/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
from gel.codegen.generator import _get_conn_args
from .introspection import get_schema_json, GelORMWarning
from .sqla import ModelGenerator as SQLAModGen
from .sqlmodel import ModelGenerator as SQLModGen
from .django.generator import ModelGenerator as DjangoModGen


Expand All @@ -41,7 +42,7 @@ def error(self, message):
)
parser.add_argument(
"orm",
choices=['sqlalchemy', 'django'],
choices=['sqlalchemy', 'sqlmodel', 'django'],
help="Pick which ORM to generate models for.",
)
parser.add_argument("--dsn")
Expand Down Expand Up @@ -97,6 +98,16 @@ def generate_models(args, spec):
)
gen.render_models(spec)

case 'sqlmodel':
if args.mod is None:
parser.error('sqlmodel requires to specify --mod')

gen = SQLModGen(
outdir=args.out,
basemodule=args.mod,
)
gen.render_models(spec)

case 'django':
gen = DjangoModGen(
out=args.out,
Expand Down
Loading

0 comments on commit 2c732bb

Please sign in to comment.