Skip to content

Commit edac188

Browse files
committed
fix: align ORM templates with DatabaseModule
1 parent 15b4d44 commit edac188

5 files changed

Lines changed: 164 additions & 166 deletions

File tree

nest/cli/templates/mysql_template.py

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,27 @@ def __init__(self, module_name: str):
1212
)
1313

1414
def config_file(self):
15-
return """from nest.core.database.orm_provider import OrmProvider
16-
import os
15+
return """import os
1716
from dotenv import load_dotenv
1817
1918
load_dotenv()
2019
21-
config = OrmProvider(
22-
db_type="mysql",
23-
config_params=dict(
24-
host=os.getenv("MYSQL_HOST"),
25-
db_name=os.getenv("MYSQL_DB_NAME"),
26-
user=os.getenv("MYSQL_USER"),
27-
password=os.getenv("MYSQL_PASSWORD"),
28-
port=int(os.getenv("MYSQL_PORT")),
29-
)
20+
DATABASE_CONFIG = dict(
21+
driver="mysql",
22+
host=os.getenv("MYSQL_HOST"),
23+
database=os.getenv("MYSQL_DB_NAME"),
24+
user=os.getenv("MYSQL_USER"),
25+
password=os.getenv("MYSQL_PASSWORD"),
26+
port=int(os.getenv("MYSQL_PORT", 3306)),
27+
create_all=True,
3028
)
3129
"""
3230

3331
def requirements_file(self):
3432
return f"""pynest-api
33+
sqlalchemy>=2.0.36,<3.0.0
3534
mysql-connector-python==8.2.0
35+
python-dotenv>=1.0.1,<2.0.0
3636
"""
3737

3838

@@ -44,25 +44,27 @@ def __init__(self, module_name: str):
4444
)
4545

4646
def config_file(self):
47-
return """from nest.core.database.orm_provider import AsyncOrmProvider
48-
import os
47+
return """import os
4948
from dotenv import load_dotenv
5049
5150
load_dotenv()
5251
53-
config = AsyncOrmProvider(
54-
db_type="mysql",
55-
config_params=dict(
56-
host=os.getenv("MYSQL_HOST"),
57-
db_name=os.getenv("MYSQL_DB_NAME"),
58-
user=os.getenv("MYSQL_USER"),
59-
password=os.getenv("MYSQL_PASSWORD"),
60-
port=int(os.getenv("MYSQL_PORT")),
61-
)
62-
)
52+
DATABASE_CONFIG = {
53+
"driver": "mysql",
54+
"host": os.getenv("MYSQL_HOST"),
55+
"database": os.getenv("MYSQL_DB_NAME"),
56+
"user": os.getenv("MYSQL_USER"),
57+
"password": os.getenv("MYSQL_PASSWORD"),
58+
"port": int(os.getenv("MYSQL_PORT", 3306)),
59+
"async_mode": True,
60+
"create_all": True,
61+
}
6362
"""
6463

6564
def requirements_file(self):
6665
return f"""pynest-api
66+
sqlalchemy>=2.0.36,<3.0.0
6767
aiomysql==0.2.0
68+
greenlet>=3.1.1,<4.0.0
69+
python-dotenv>=1.0.1,<2.0.0
6870
"""

nest/cli/templates/orm_template.py

Lines changed: 45 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,17 @@ def __init__(self, module_name: str, db_type: Database):
1414

1515
def app_file(self):
1616
return f"""from nest.core import PyNestFactory, Module
17-
from .config import config
17+
from nest.core.database import DatabaseModule
18+
from .config import DATABASE_CONFIG
1819
from .app_controller import AppController
1920
from .app_service import AppService
2021
2122
22-
@Module(imports=[], controllers=[AppController], providers=[AppService])
23+
@Module(
24+
imports=[DatabaseModule.for_root(**DATABASE_CONFIG)],
25+
controllers=[AppController],
26+
providers=[AppService],
27+
)
2328
class AppModule:
2429
pass
2530
@@ -33,10 +38,6 @@ class AppModule:
3338
)
3439
3540
http_server = app.get_server()
36-
37-
@http_server.on_event("startup")
38-
def startup():
39-
config.create_all()
4041
"""
4142

4243
@abstractmethod
@@ -78,11 +79,11 @@ class {self.capitalized_module_name}(BaseModel):
7879
"""
7980

8081
def entity_file(self):
81-
return f"""from src.config import config
82+
return f"""from nest.core.database import Base
8283
from sqlalchemy import Column, Integer, String, Float
8384
8485
85-
class {self.capitalized_module_name}(config.Base):
86+
class {self.capitalized_module_name}(Base):
8687
__tablename__ = "{self.module_name}"
8788
8889
id = Column(Integer, primary_key=True, autoincrement=True)
@@ -93,20 +94,20 @@ class {self.capitalized_module_name}(config.Base):
9394
def service_file(self):
9495
return f"""from .{self.module_name}_model import {self.capitalized_module_name}
9596
from .{self.module_name}_entity import {self.capitalized_module_name} as {self.capitalized_module_name}Entity
96-
from src.config import config
9797
from nest.core.decorators.database import db_request_handler
9898
from nest.core import Injectable
99+
from nest.core.database import DatabaseService
99100
100101
101102
@Injectable
102103
class {self.capitalized_module_name}Service:
103104
104-
def __init__(self):
105-
self.config = config
105+
def __init__(self, db: DatabaseService):
106+
self.db = db
106107
107108
@db_request_handler
108109
def add_{self.module_name}(self, {self.module_name}: {self.capitalized_module_name}):
109-
with self.config.get_session() as session:
110+
with self.db.session() as session:
110111
new_{self.module_name} = {self.capitalized_module_name}Entity(
111112
**{self.module_name}.dict()
112113
)
@@ -116,7 +117,7 @@ def add_{self.module_name}(self, {self.module_name}: {self.capitalized_module_na
116117
117118
@db_request_handler
118119
def get_{self.module_name}(self):
119-
with self.config.get_session() as session:
120+
with self.db.session() as session:
120121
return session.query({self.capitalized_module_name}Entity).all()
121122
122123
"""
@@ -208,12 +209,17 @@ def generate_project(self, project_name: str):
208209
class AsyncORMTemplate(ORMTemplate, ABC):
209210
def app_file(self):
210211
return f"""from nest.core import PyNestFactory, Module
211-
from .config import config
212+
from nest.core.database import DatabaseModule
213+
from .config import DATABASE_CONFIG
212214
from .app_controller import AppController
213215
from .app_service import AppService
214216
215217
216-
@Module(imports=[], controllers=[AppController], providers=[AppService])
218+
@Module(
219+
imports=[DatabaseModule.for_root(**DATABASE_CONFIG)],
220+
controllers=[AppController],
221+
providers=[AppService],
222+
)
217223
class AppModule:
218224
pass
219225
@@ -227,10 +233,6 @@ class AppModule:
227233
)
228234
229235
http_server = app.get_server()
230-
231-
@http_server.on_event("startup")
232-
async def startup():
233-
await config.create_all()
234236
235237
"""
236238

@@ -243,12 +245,12 @@ def requirements_file(self):
243245
pass
244246

245247
def entity_file(self):
246-
return f"""from src.config import config
248+
return f"""from nest.core.database import Base
247249
from sqlalchemy import Integer, String
248250
from sqlalchemy.orm import Mapped, mapped_column
249251
250252
251-
class {self.capitalized_module_name}(config.Base):
253+
class {self.capitalized_module_name}(Base):
252254
__tablename__ = "{self.module_name}"
253255
254256
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
@@ -261,34 +263,36 @@ def service_file(self):
261263
from .{self.module_name}_entity import {self.capitalized_module_name} as {self.capitalized_module_name}Entity
262264
from nest.core.decorators.database import async_db_request_handler
263265
from nest.core import Injectable
266+
from nest.core.database import DatabaseService
264267
265268
from sqlalchemy import select
266-
from sqlalchemy.ext.asyncio import AsyncSession
267269
268270
@Injectable
269271
class {self.capitalized_module_name}Service:
270272
273+
def __init__(self, db: DatabaseService):
274+
self.db = db
275+
271276
@async_db_request_handler
272-
async def add_{self.module_name}(self, {self.module_name}: {self.capitalized_module_name}, session: AsyncSession):
273-
new_{self.module_name} = {self.capitalized_module_name}Entity(
274-
**{self.module_name}.dict()
275-
)
276-
session.add(new_{self.module_name})
277-
await session.commit()
278-
return new_{self.module_name}.id
277+
async def add_{self.module_name}(self, {self.module_name}: {self.capitalized_module_name}):
278+
async with self.db.session() as session:
279+
new_{self.module_name} = {self.capitalized_module_name}Entity(
280+
**{self.module_name}.dict()
281+
)
282+
session.add(new_{self.module_name})
283+
await session.commit()
284+
return new_{self.module_name}.id
279285
280286
@async_db_request_handler
281-
async def get_{self.module_name}(self, session: AsyncSession):
282-
query = select({self.capitalized_module_name}Entity)
283-
result = await session.execute(query)
284-
return result.scalars().all()
287+
async def get_{self.module_name}(self):
288+
async with self.db.session() as session:
289+
query = select({self.capitalized_module_name}Entity)
290+
result = await session.execute(query)
291+
return result.scalars().all()
285292
"""
286293

287294
def controller_file(self):
288-
return f"""from nest.core import Controller, Get, Post, Depends
289-
from sqlalchemy.ext.asyncio import AsyncSession
290-
from src.config import config
291-
295+
return f"""from nest.core import Controller, Get, Post
292296
293297
from .{self.module_name}_service import {self.capitalized_module_name}Service
294298
from .{self.module_name}_model import {self.capitalized_module_name}
@@ -301,12 +305,12 @@ def __init__(self, {self.module_name}_service: {self.capitalized_module_name}Ser
301305
self.{self.module_name}_service = {self.module_name}_service
302306
303307
@Get("/")
304-
async def get_{self.module_name}(self, session: AsyncSession = Depends(config.get_db)):
305-
return await self.{self.module_name}_service.get_{self.module_name}(session)
308+
async def get_{self.module_name}(self):
309+
return await self.{self.module_name}_service.get_{self.module_name}()
306310
307311
@Post("/")
308-
async def add_{self.module_name}(self, {self.module_name}: {self.capitalized_module_name}, session: AsyncSession = Depends(config.get_db)):
309-
return await self.{self.module_name}_service.add_{self.module_name}({self.module_name}, session)
312+
async def add_{self.module_name}(self, {self.module_name}: {self.capitalized_module_name}):
313+
return await self.{self.module_name}_service.add_{self.module_name}({self.module_name})
310314
"""
311315

312316
def settings_file(self):

nest/cli/templates/postgres_template.py

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,27 @@ def __init__(self, module_name: str):
1212
)
1313

1414
def config_file(self):
15-
return """from nest.core.database.orm_provider import OrmProvider
16-
import os
15+
return """import os
1716
from dotenv import load_dotenv
1817
1918
load_dotenv()
2019
21-
config = OrmProvider(
22-
db_type="postgresql",
23-
config_params=dict(
24-
host=os.getenv("POSTGRESQL_HOST", "localhost"),
25-
db_name=os.getenv("POSTGRESQL_DB_NAME", "default_nest_db"),
26-
user=os.getenv("POSTGRESQL_USER", "postgres"),
27-
password=os.getenv("POSTGRESQL_PASSWORD", "postgres"),
28-
port=int(os.getenv("POSTGRESQL_PORT", 5432)),
29-
)
20+
DATABASE_CONFIG = dict(
21+
driver="postgresql",
22+
host=os.getenv("POSTGRESQL_HOST", "localhost"),
23+
database=os.getenv("POSTGRESQL_DB_NAME", "default_nest_db"),
24+
user=os.getenv("POSTGRESQL_USER", "postgres"),
25+
password=os.getenv("POSTGRESQL_PASSWORD", "postgres"),
26+
port=int(os.getenv("POSTGRESQL_PORT", 5432)),
27+
create_all=True,
3028
)
3129
"""
3230

3331
def requirements_file(self):
3432
return f"""pynest-api
33+
sqlalchemy>=2.0.36,<3.0.0
3534
psycopg2==2.9.6
35+
python-dotenv>=1.0.1,<2.0.0
3636
"""
3737

3838

@@ -44,25 +44,27 @@ def __init__(self, module_name: str):
4444
)
4545

4646
def config_file(self):
47-
return """from nest.core.database.orm_provider import AsyncOrmProvider
48-
import os
47+
return """import os
4948
from dotenv import load_dotenv
5049
5150
load_dotenv()
5251
53-
config = AsyncOrmProvider(
54-
db_type="postgresql",
55-
config_params=dict(
56-
host=os.getenv("POSTGRESQL_HOST", "localhost"),
57-
db_name=os.getenv("POSTGRESQL_DB_NAME", "default_nest_db"),
58-
user=os.getenv("POSTGRESQL_USER", "postgres"),
59-
password=os.getenv("POSTGRESQL_PASSWORD", "postgres"),
60-
port=int(os.getenv("POSTGRESQL_PORT", 5432)),
61-
)
62-
)
52+
DATABASE_CONFIG = {
53+
"driver": "postgresql",
54+
"host": os.getenv("POSTGRESQL_HOST", "localhost"),
55+
"database": os.getenv("POSTGRESQL_DB_NAME", "default_nest_db"),
56+
"user": os.getenv("POSTGRESQL_USER", "postgres"),
57+
"password": os.getenv("POSTGRESQL_PASSWORD", "postgres"),
58+
"port": int(os.getenv("POSTGRESQL_PORT", 5432)),
59+
"async_mode": True,
60+
"create_all": True,
61+
}
6362
"""
6463

6564
def requirements_file(self):
6665
return f"""pynest-api
66+
sqlalchemy>=2.0.36,<3.0.0
6767
asyncpg==0.29.0
68+
greenlet>=3.1.1,<4.0.0
69+
python-dotenv>=1.0.1,<2.0.0
6870
"""

0 commit comments

Comments
 (0)