finish for init core

This commit is contained in:
2024-05-09 16:01:32 +00:00
parent ab1e864478
commit bc8815f40e
42 changed files with 520 additions and 214 deletions

View File

@ -1 +0,0 @@
from .user import *

View File

@ -1,20 +0,0 @@
from sqlalchemy.orm import Session
from db.models import User
from ultis import get_password_hash
import schemas
def get_user(db: Session, user_id: str):
return db.query(User).filter(User.id == user_id).first()
def get_user_by_username(db: Session, usn: str):
return db.query(User).filter(User.username == usn).first()
def get_users(db: Session, skip: int = 0, limit: int = 100):
return db.query(User).offset(skip).limit(limit).all()
def create_user(db: Session, user: schemas.UserCreate):
db_user = User(username=user.username, password=get_password_hash(user.password), name=user.name)
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user

View File

@ -1,17 +1,37 @@
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from const import URL_DATABASE
from collections.abc import Generator
from sqlalchemy.orm.session import Session
from sqlalchemy import create_engine, event, Engine, text
from sqlalchemy.orm import scoped_session, sessionmaker
engine = create_engine(URL_DATABASE)
from fuware.core.config import get_app_settings
SessionLocal = sessionmaker(autocommit=False ,autoflush=False, bind=engine)
settings = get_app_settings()
Base = declarative_base()
def sql_global_init(db_url: str):
connect_args = {"check_same_thread": False}
def get_db():
engine = create_engine(db_url, echo=True, connect_args=connect_args, pool_pre_ping=True, future=True)
SessionLocal = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine, future=True))
return SessionLocal, engine
SessionLocal, engine = sql_global_init(settings.DB_URL) # type: ignore
@event.listens_for(Engine, "connect")
def set_sqlite_pragma(dbapi_connection, connection_record):
cursor = dbapi_connection.cursor()
cursor.execute("PRAGMA foreign_keys=ON")
cursor.close()
# with engine.connect() as connection:
# result = connection.execute(text('select "Hello"'))
# print(result.all())
def generate_session() -> Generator[Session, None, None]:
db = SessionLocal()
try:
yield db
yield db
finally:
db.close()
db.close()

5
fuware/db/init_db.py Normal file
View File

@ -0,0 +1,5 @@
from db_setup import engine
from models._model_base import Model
from models.users import *
Model.metadata.create_all(bind=engine)

View File

@ -1 +1 @@
from .user import *
from .users import *

View File

@ -0,0 +1,20 @@
from datetime import datetime
from sqlalchemy import DateTime, Integer
from sqlalchemy.orm import declarative_base, Mapped, mapped_column
from text_unidecode import unidecode
from fuware.db.db_setup import SessionLocal
Model = declarative_base()
Model.query = SessionLocal.query_property()
class SqlAlchemyBase(Model):
__abstract__ = True
created_at: Mapped[datetime | None] = mapped_column(DateTime, default=datetime.utcnow(), index=True)
update_at: Mapped[datetime | None] = mapped_column(DateTime, default=datetime.utcnow(), onupdate=datetime.utcnow())
@classmethod
def normalize(cls, val: str) -> str:
return unidecode(val).lower().strip()

View File

@ -1,8 +0,0 @@
from datetime import datetime
from sqlalchemy import Column, DateTime
from sqlalchemy.orm import declarative_mixin
@declarative_mixin
class Timestamp:
created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
updated_at = Column(DateTime, default=datetime.utcnow, nullable=False)

View File

@ -1,15 +0,0 @@
from db import Base
from sqlalchemy import Boolean, Column, String
from .mixins import Timestamp
from sqlalchemy.dialects.postgresql import UUID
import uuid
class User(Base, Timestamp):
__tablename__ = 'users'
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, index=True)
username = Column(String(100), unique=True, index=True, nullable=False)
password = Column(String, index=True, nullable=False)
name = Column(String, index=True, nullable=True)
is_admin = Column(Boolean, default=False)
is_lock = Column(Boolean, default=False)

View File

@ -0,0 +1 @@
from .users import *

View File

@ -0,0 +1,20 @@
import uuid
from sqlalchemy import Boolean, Column, String
from sqlalchemy.orm import Mapped, mapped_column
from sqlalchemy.dialects.postgresql import UUID
from .._model_base import SqlAlchemyBase
class User(SqlAlchemyBase):
__tablename__ = 'users'
id: Mapped[UUID] = mapped_column(UUID, primary_key=True, default=uuid.uuid4, index=True)
username: Mapped[str | None] = mapped_column(String, unique=True, index=True, nullable=False)
password: Mapped[str | None] = mapped_column(String, index=True, nullable=False)
name: Mapped[str | None] = mapped_column(String, index=True, nullable=True)
is_admin: Mapped[bool | None] = mapped_column(Boolean, default=False)
is_lock: Mapped[bool | None] = mapped_column(Boolean, default=False)
def __repr__(self):
return f"{self.__class__.__name__}, name: {self.name}, username: {self.username}"