Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 25 additions & 23 deletions nest/cli/templates/mysql_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,27 +12,27 @@ def __init__(self, module_name: str):
)

def config_file(self):
return """from nest.core.database.orm_provider import OrmProvider
import os
return """import os
from dotenv import load_dotenv

load_dotenv()

config = OrmProvider(
db_type="mysql",
config_params=dict(
host=os.getenv("MYSQL_HOST"),
db_name=os.getenv("MYSQL_DB_NAME"),
user=os.getenv("MYSQL_USER"),
password=os.getenv("MYSQL_PASSWORD"),
port=int(os.getenv("MYSQL_PORT")),
)
DATABASE_CONFIG = dict(
driver="mysql",
host=os.getenv("MYSQL_HOST"),
database=os.getenv("MYSQL_DB_NAME"),
user=os.getenv("MYSQL_USER"),
password=os.getenv("MYSQL_PASSWORD"),
port=int(os.getenv("MYSQL_PORT", 3306)),
create_all=True,
)
"""

def requirements_file(self):
return f"""pynest-api
sqlalchemy>=2.0.36,<3.0.0
mysql-connector-python==8.2.0
python-dotenv>=1.0.1,<2.0.0
"""


Expand All @@ -44,25 +44,27 @@ def __init__(self, module_name: str):
)

def config_file(self):
return """from nest.core.database.orm_provider import AsyncOrmProvider
import os
return """import os
from dotenv import load_dotenv

load_dotenv()

config = AsyncOrmProvider(
db_type="mysql",
config_params=dict(
host=os.getenv("MYSQL_HOST"),
db_name=os.getenv("MYSQL_DB_NAME"),
user=os.getenv("MYSQL_USER"),
password=os.getenv("MYSQL_PASSWORD"),
port=int(os.getenv("MYSQL_PORT")),
)
)
DATABASE_CONFIG = {
"driver": "mysql",
"host": os.getenv("MYSQL_HOST"),
"database": os.getenv("MYSQL_DB_NAME"),
"user": os.getenv("MYSQL_USER"),
"password": os.getenv("MYSQL_PASSWORD"),
"port": int(os.getenv("MYSQL_PORT", 3306)),
"async_mode": True,
"create_all": True,
}
"""

def requirements_file(self):
return f"""pynest-api
sqlalchemy>=2.0.36,<3.0.0
aiomysql==0.2.0
greenlet>=3.1.1,<4.0.0
python-dotenv>=1.0.1,<2.0.0
"""
86 changes: 45 additions & 41 deletions nest/cli/templates/orm_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,17 @@ def __init__(self, module_name: str, db_type: Database):

def app_file(self):
return f"""from nest.core import PyNestFactory, Module
from .config import config
from nest.core.database import DatabaseModule
from .config import DATABASE_CONFIG
from .app_controller import AppController
from .app_service import AppService


@Module(imports=[], controllers=[AppController], providers=[AppService])
@Module(
imports=[DatabaseModule.for_root(**DATABASE_CONFIG)],
controllers=[AppController],
providers=[AppService],
)
class AppModule:
pass

Expand All @@ -33,10 +38,6 @@ class AppModule:
)

http_server = app.get_server()

@http_server.on_event("startup")
def startup():
config.create_all()
"""

@abstractmethod
Expand Down Expand Up @@ -78,11 +79,11 @@ class {self.capitalized_module_name}(BaseModel):
"""

def entity_file(self):
return f"""from src.config import config
return f"""from nest.core.database import Base
from sqlalchemy import Column, Integer, String, Float


class {self.capitalized_module_name}(config.Base):
class {self.capitalized_module_name}(Base):
__tablename__ = "{self.module_name}"

id = Column(Integer, primary_key=True, autoincrement=True)
Expand All @@ -93,20 +94,20 @@ class {self.capitalized_module_name}(config.Base):
def service_file(self):
return f"""from .{self.module_name}_model import {self.capitalized_module_name}
from .{self.module_name}_entity import {self.capitalized_module_name} as {self.capitalized_module_name}Entity
from src.config import config
from nest.core.decorators.database import db_request_handler
from nest.core import Injectable
from nest.core.database import DatabaseService


@Injectable
class {self.capitalized_module_name}Service:

def __init__(self):
self.config = config
def __init__(self, db: DatabaseService):
self.db = db

@db_request_handler
def add_{self.module_name}(self, {self.module_name}: {self.capitalized_module_name}):
with self.config.get_session() as session:
with self.db.session() as session:
new_{self.module_name} = {self.capitalized_module_name}Entity(
**{self.module_name}.dict()
)
Expand All @@ -116,7 +117,7 @@ def add_{self.module_name}(self, {self.module_name}: {self.capitalized_module_na

@db_request_handler
def get_{self.module_name}(self):
with self.config.get_session() as session:
with self.db.session() as session:
return session.query({self.capitalized_module_name}Entity).all()

"""
Expand Down Expand Up @@ -208,12 +209,17 @@ def generate_project(self, project_name: str):
class AsyncORMTemplate(ORMTemplate, ABC):
def app_file(self):
return f"""from nest.core import PyNestFactory, Module
from .config import config
from nest.core.database import DatabaseModule
from .config import DATABASE_CONFIG
from .app_controller import AppController
from .app_service import AppService


@Module(imports=[], controllers=[AppController], providers=[AppService])
@Module(
imports=[DatabaseModule.for_root(**DATABASE_CONFIG)],
controllers=[AppController],
providers=[AppService],
)
class AppModule:
pass

Expand All @@ -227,10 +233,6 @@ class AppModule:
)

http_server = app.get_server()

@http_server.on_event("startup")
async def startup():
await config.create_all()

"""

Expand All @@ -243,12 +245,12 @@ def requirements_file(self):
pass

def entity_file(self):
return f"""from src.config import config
return f"""from nest.core.database import Base
from sqlalchemy import Integer, String
from sqlalchemy.orm import Mapped, mapped_column


class {self.capitalized_module_name}(config.Base):
class {self.capitalized_module_name}(Base):
__tablename__ = "{self.module_name}"

id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
Expand All @@ -261,34 +263,36 @@ def service_file(self):
from .{self.module_name}_entity import {self.capitalized_module_name} as {self.capitalized_module_name}Entity
from nest.core.decorators.database import async_db_request_handler
from nest.core import Injectable
from nest.core.database import DatabaseService

from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession

@Injectable
class {self.capitalized_module_name}Service:

def __init__(self, db: DatabaseService):
self.db = db

@async_db_request_handler
async def add_{self.module_name}(self, {self.module_name}: {self.capitalized_module_name}, session: AsyncSession):
new_{self.module_name} = {self.capitalized_module_name}Entity(
**{self.module_name}.dict()
)
session.add(new_{self.module_name})
await session.commit()
return new_{self.module_name}.id
async def add_{self.module_name}(self, {self.module_name}: {self.capitalized_module_name}):
async with self.db.session() as session:
new_{self.module_name} = {self.capitalized_module_name}Entity(
**{self.module_name}.dict()
)
session.add(new_{self.module_name})
await session.commit()
return new_{self.module_name}.id

@async_db_request_handler
async def get_{self.module_name}(self, session: AsyncSession):
query = select({self.capitalized_module_name}Entity)
result = await session.execute(query)
return result.scalars().all()
async def get_{self.module_name}(self):
async with self.db.session() as session:
query = select({self.capitalized_module_name}Entity)
result = await session.execute(query)
return result.scalars().all()
"""

def controller_file(self):
return f"""from nest.core import Controller, Get, Post, Depends
from sqlalchemy.ext.asyncio import AsyncSession
from src.config import config

return f"""from nest.core import Controller, Get, Post

from .{self.module_name}_service import {self.capitalized_module_name}Service
from .{self.module_name}_model import {self.capitalized_module_name}
Expand All @@ -301,12 +305,12 @@ def __init__(self, {self.module_name}_service: {self.capitalized_module_name}Ser
self.{self.module_name}_service = {self.module_name}_service

@Get("/")
async def get_{self.module_name}(self, session: AsyncSession = Depends(config.get_db)):
return await self.{self.module_name}_service.get_{self.module_name}(session)
async def get_{self.module_name}(self):
return await self.{self.module_name}_service.get_{self.module_name}()

@Post("/")
async def add_{self.module_name}(self, {self.module_name}: {self.capitalized_module_name}, session: AsyncSession = Depends(config.get_db)):
return await self.{self.module_name}_service.add_{self.module_name}({self.module_name}, session)
async def add_{self.module_name}(self, {self.module_name}: {self.capitalized_module_name}):
return await self.{self.module_name}_service.add_{self.module_name}({self.module_name})
"""

def settings_file(self):
Expand Down
48 changes: 25 additions & 23 deletions nest/cli/templates/postgres_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,27 +12,27 @@ def __init__(self, module_name: str):
)

def config_file(self):
return """from nest.core.database.orm_provider import OrmProvider
import os
return """import os
from dotenv import load_dotenv

load_dotenv()

config = OrmProvider(
db_type="postgresql",
config_params=dict(
host=os.getenv("POSTGRESQL_HOST", "localhost"),
db_name=os.getenv("POSTGRESQL_DB_NAME", "default_nest_db"),
user=os.getenv("POSTGRESQL_USER", "postgres"),
password=os.getenv("POSTGRESQL_PASSWORD", "postgres"),
port=int(os.getenv("POSTGRESQL_PORT", 5432)),
)
DATABASE_CONFIG = dict(
driver="postgresql",
host=os.getenv("POSTGRESQL_HOST", "localhost"),
database=os.getenv("POSTGRESQL_DB_NAME", "default_nest_db"),
user=os.getenv("POSTGRESQL_USER", "postgres"),
password=os.getenv("POSTGRESQL_PASSWORD", "postgres"),
port=int(os.getenv("POSTGRESQL_PORT", 5432)),
create_all=True,
)
"""

def requirements_file(self):
return f"""pynest-api
sqlalchemy>=2.0.36,<3.0.0
psycopg2==2.9.6
python-dotenv>=1.0.1,<2.0.0
"""


Expand All @@ -44,25 +44,27 @@ def __init__(self, module_name: str):
)

def config_file(self):
return """from nest.core.database.orm_provider import AsyncOrmProvider
import os
return """import os
from dotenv import load_dotenv

load_dotenv()

config = AsyncOrmProvider(
db_type="postgresql",
config_params=dict(
host=os.getenv("POSTGRESQL_HOST", "localhost"),
db_name=os.getenv("POSTGRESQL_DB_NAME", "default_nest_db"),
user=os.getenv("POSTGRESQL_USER", "postgres"),
password=os.getenv("POSTGRESQL_PASSWORD", "postgres"),
port=int(os.getenv("POSTGRESQL_PORT", 5432)),
)
)
DATABASE_CONFIG = {
"driver": "postgresql",
"host": os.getenv("POSTGRESQL_HOST", "localhost"),
"database": os.getenv("POSTGRESQL_DB_NAME", "default_nest_db"),
"user": os.getenv("POSTGRESQL_USER", "postgres"),
"password": os.getenv("POSTGRESQL_PASSWORD", "postgres"),
"port": int(os.getenv("POSTGRESQL_PORT", 5432)),
"async_mode": True,
"create_all": True,
}
"""

def requirements_file(self):
return f"""pynest-api
sqlalchemy>=2.0.36,<3.0.0
asyncpg==0.29.0
greenlet>=3.1.1,<4.0.0
python-dotenv>=1.0.1,<2.0.0
"""
Loading
Loading