Skip to content

Commit a61960f

Browse files
committed
Add sqlmodel to gel-orm generator.
This is similar to SQLAlchemy model generator, but the results are SQLModels instead.
1 parent a89ffaa commit a61960f

File tree

7 files changed

+1358
-1
lines changed

7 files changed

+1358
-1
lines changed

gel/_testbase.py

+21
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
from gel import blocking_client
4141
from gel.orm.introspection import get_schema_json, GelORMWarning
4242
from gel.orm.sqla import ModelGenerator as SQLAModGen
43+
from gel.orm.sqlmodel import ModelGenerator as SQLModGen
4344
from gel.orm.django.generator import ModelGenerator as DjangoModGen
4445

4546

@@ -694,6 +695,26 @@ def get_dsn_for_sqla(cls):
694695
return dsn
695696

696697

698+
class SQLModelTestCase(ORMTestCase):
699+
@classmethod
700+
def setupORM(cls):
701+
gen = SQLModGen(
702+
outdir=os.path.join(cls.tmpormdir.name, cls.MODEL_PACKAGE),
703+
basemodule=cls.MODEL_PACKAGE,
704+
)
705+
gen.render_models(cls.spec)
706+
707+
@classmethod
708+
def get_dsn_for_sqla(cls):
709+
cargs = cls.get_connect_args(database=cls.get_database_name())
710+
dsn = (
711+
f'postgresql://{cargs["user"]}:{cargs["password"]}'
712+
f'@{cargs["host"]}:{cargs["port"]}/{cargs["database"]}'
713+
)
714+
715+
return dsn
716+
717+
697718
APPS_PY = '''\
698719
from django.apps import AppConfig
699720

gel/orm/cli.py

+12-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from gel.codegen.generator import _get_conn_args
2626
from .introspection import get_schema_json, GelORMWarning
2727
from .sqla import ModelGenerator as SQLAModGen
28+
from .sqlmodel import ModelGenerator as SQLModGen
2829
from .django.generator import ModelGenerator as DjangoModGen
2930

3031

@@ -41,7 +42,7 @@ def error(self, message):
4142
)
4243
parser.add_argument(
4344
"orm",
44-
choices=['sqlalchemy', 'django'],
45+
choices=['sqlalchemy', 'sqlmodel', 'django'],
4546
help="Pick which ORM to generate models for.",
4647
)
4748
parser.add_argument("--dsn")
@@ -97,6 +98,16 @@ def generate_models(args, spec):
9798
)
9899
gen.render_models(spec)
99100

101+
case 'sqlmodel':
102+
if args.mod is None:
103+
parser.error('sqlmodel requires to specify --mod')
104+
105+
gen = SQLModGen(
106+
outdir=args.out,
107+
basemodule=args.mod,
108+
)
109+
gen.render_models(spec)
110+
100111
case 'django':
101112
gen = DjangoModGen(
102113
out=args.out,

0 commit comments

Comments
 (0)