From 006f2af15baf454706df0c01991d3c44bb02cb96 Mon Sep 17 00:00:00 2001 From: Aykhan Date: Tue, 12 Sep 2023 23:40:42 +0400 Subject: [PATCH] Added create_user command & edited imports --- .gitignore | 3 +- src/app/core/config.py | 1 - src/app/core/security.py | 10 +- src/app/crud/base.py | 23 +++- src/app/crud/crud_user.py | 19 ++++ src/app/db/base_class.py | 5 +- src/app/main.py | 7 +- src/app/models/post.py | 16 +-- src/app/schemas/__init__.py | 3 +- src/app/schemas/login.py | 1 + src/app/schemas/user.py | 5 +- src/app/templates/admin/login.html | 60 +++++------ src/app/templates/components/navbar.html | 1 - src/app/utils/create_user.py | 119 +++++++++++++++++++++ src/app/utils/{email.py => email_utils.py} | 0 src/app/views/depends.py | 30 +++--- src/app/views/routers/main.py | 2 +- src/app/views/routers/user.py | 9 +- src/static/404.jpg | Bin 0 -> 48657 bytes 19 files changed, 245 insertions(+), 69 deletions(-) delete mode 100644 src/app/templates/components/navbar.html rename src/app/utils/{email.py => email_utils.py} (100%) create mode 100644 src/static/404.jpg diff --git a/.gitignore b/.gitignore index 2a4e7eb..8567071 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .venv __pycache__ media -*.env \ No newline at end of file +*.env +test.py \ No newline at end of file diff --git a/src/app/core/config.py b/src/app/core/config.py index 0352acb..35c6750 100644 --- a/src/app/core/config.py +++ b/src/app/core/config.py @@ -1,4 +1,3 @@ -from typing import Optional from pathlib import Path from pydantic_settings import BaseSettings diff --git a/src/app/core/security.py b/src/app/core/security.py index 0b5597d..88b4f6d 100644 --- a/src/app/core/security.py +++ b/src/app/core/security.py @@ -1,5 +1,11 @@ -from datetime import datetime, timedelta -from typing import Any, Union +from datetime import ( + datetime, + timedelta +) +from typing import ( + Any, + Union +) from jose import jwt from passlib.context import CryptContext diff --git a/src/app/crud/base.py b/src/app/crud/base.py index 9a8b5c3..855381a 100644 --- a/src/app/crud/base.py +++ b/src/app/crud/base.py @@ -1,7 +1,18 @@ -from typing import Any, Dict, Generic, List, Optional, Type, TypeVar, Union +from typing import ( + Any, + Dict, + Generic, + List, + Optional, + Type, + TypeVar, + Union +) + +from pydantic import BaseModel from fastapi.encoders import jsonable_encoder -from pydantic import BaseModel + from sqlalchemy.future import select from sqlalchemy.orm import Session @@ -37,6 +48,14 @@ class CRUDBase(Generic[ModelType, CreateSchemaType, UpdateSchemaType]): obj = await db.execute(q) return obj.scalars() + def sync_get_multi( + self, db: Session, *, skip: int = 0, limit: int = 100 + ) -> List[ModelType]: + + q = select(self.model).offset(skip).limit(limit).order_by(self.model.id.desc()) + obj = db.execute(q) + return obj.scalars() + async def create(self, db: Session, *, obj_in: CreateSchemaType) -> ModelType: obj_in_data = jsonable_encoder(obj_in) db_obj = self.model(**obj_in_data) # type: ignore diff --git a/src/app/crud/crud_user.py b/src/app/crud/crud_user.py index d84c42a..c588f65 100644 --- a/src/app/crud/crud_user.py +++ b/src/app/crud/crud_user.py @@ -15,6 +15,11 @@ class CRUDUser(CRUDBase[User, UserCreate, UserUpdate]): obj = await db.execute(q) return obj.scalar_one_or_none() + def sync_get_by_email(self, db: Session, *, email: str) -> Optional[User]: + q = select(self.model).where(self.model.email == email) + obj = db.execute(q) + return obj.scalar_one_or_none() + async def create(self, db: Session, *, obj_in: UserCreate) -> User: db_obj = User( email=obj_in.email, @@ -29,6 +34,20 @@ class CRUDUser(CRUDBase[User, UserCreate, UserUpdate]): return db_obj + def sync_create(self, db: Session, *, obj_in: UserCreate) -> User: + db_obj = User( + email=obj_in.email, + hashed_password=get_password_hash(obj_in.password), + username=obj_in.username, + is_superuser=obj_in.is_superuser, + ) + + db.add(db_obj) + db.commit() + db.refresh(db_obj) + + return db_obj + async def update( self, db: Session, *, db_obj: User, obj_in: Union[UserUpdate, Dict[str, Any]] ) -> User: diff --git a/src/app/db/base_class.py b/src/app/db/base_class.py index 4d4414d..df4c135 100644 --- a/src/app/db/base_class.py +++ b/src/app/db/base_class.py @@ -1,7 +1,10 @@ from typing import Any from sqlalchemy.ext.declarative import as_declarative, declared_attr -from sqlalchemy import DateTime, Column +from sqlalchemy import ( + DateTime, + Column +) from sqlalchemy.sql import func diff --git a/src/app/main.py b/src/app/main.py index 5f40f7c..a3f06e9 100644 --- a/src/app/main.py +++ b/src/app/main.py @@ -11,7 +11,7 @@ from app.schemas.login import LoginForm from app.schemas.post import Post, PostCreate, PostUpdate from sqlalchemy.ext.asyncio import AsyncSession from app.schemas.user import User, UserCreate -from fastapi.responses import HTMLResponse +from fastapi.responses import FileResponse, HTMLResponse from app.views.depends import get_async_db, handle_image from typing import Annotated, Any @@ -46,6 +46,11 @@ async def validation_exception_handler(request, exc): return await request_validation_exception_handler(request, exc) +@app.exception_handler(404) +async def custom_404_handler(_, __): + return FileResponse(settings.STATIC_FOLDER / '404.jpg') + + # @app.post("/login", response_model=JWTToken) # async def login( # db: AsyncSession = Depends(get_async_db), diff --git a/src/app/models/post.py b/src/app/models/post.py index 8f91191..775cd67 100644 --- a/src/app/models/post.py +++ b/src/app/models/post.py @@ -1,3 +1,4 @@ +from contextlib import contextmanager from slugify import slugify from sqlalchemy.orm.base import NO_VALUE @@ -34,16 +35,15 @@ from app.core.config import settings def generate_slug(target, value, oldvalue, initiator): slug = slugify(value) - db = next(get_db()) + with contextmanager(get_db)() as db: + number = 1 + temp_slug = slug - number = 1 - temp_slug = slug + while db.query(Post).filter(Post.slug == temp_slug).first() is not None: + temp_slug = f'{slug}-{number}' + number += 1 - while db.query(Post).filter(Post.slug == temp_slug).first() is not None: - temp_slug = f'{slug}-{number}' - number += 1 - - target.slug = temp_slug + target.slug = temp_slug listen(Post.title, 'set', generate_slug) diff --git a/src/app/schemas/__init__.py b/src/app/schemas/__init__.py index 8e7cc3e..94e4d11 100644 --- a/src/app/schemas/__init__.py +++ b/src/app/schemas/__init__.py @@ -10,7 +10,8 @@ from .user import ( User, UserCreate, UserInDBBase, - UserUpdate + UserUpdate, + UserBase ) from .login import ( JWTToken, diff --git a/src/app/schemas/login.py b/src/app/schemas/login.py index f9d5d60..3c0d13c 100644 --- a/src/app/schemas/login.py +++ b/src/app/schemas/login.py @@ -1,5 +1,6 @@ from dataclasses import dataclass from typing import Optional + from fastapi import Form from pydantic import ( diff --git a/src/app/schemas/user.py b/src/app/schemas/user.py index 39d8605..593a307 100644 --- a/src/app/schemas/user.py +++ b/src/app/schemas/user.py @@ -1,6 +1,9 @@ from typing import Optional -from pydantic import BaseModel, EmailStr +from pydantic import ( + BaseModel, + EmailStr +) class UserBase(BaseModel): diff --git a/src/app/templates/admin/login.html b/src/app/templates/admin/login.html index 2204ec6..13ea62d 100644 --- a/src/app/templates/admin/login.html +++ b/src/app/templates/admin/login.html @@ -13,28 +13,53 @@
-
+
- +
- +
- +
+ + diff --git a/src/app/templates/components/navbar.html b/src/app/templates/components/navbar.html deleted file mode 100644 index 9a8c7aa..0000000 --- a/src/app/templates/components/navbar.html +++ /dev/null @@ -1 +0,0 @@ -

Navbar

\ No newline at end of file diff --git a/src/app/utils/create_user.py b/src/app/utils/create_user.py index e69de29..89fecb6 100644 --- a/src/app/utils/create_user.py +++ b/src/app/utils/create_user.py @@ -0,0 +1,119 @@ +from sys import path +path.append('/src') + +from contextlib import contextmanager +from typing import Optional + +from pydantic import ( + EmailStr, + ValidationError, + ConfigDict +) + +from app import crud +from app.schemas import UserCreate +from app.views.depends import get_db + + +class UserCreateCommand(UserCreate): + model_config = ConfigDict(validate_assignment=True) + + email: Optional[EmailStr] = None + password: Optional[str] = None + + +if __name__ == "__main__": + user_in = UserCreateCommand() + + while 1: + email = input('*Email: ') + + if not email: + print('Email is required\n') + continue + + try: + user_in.email = email + + except ValidationError as e: + print('\n', e, end='\n\n') + continue + + with contextmanager(get_db)() as db: + user = crud.user.sync_get_by_email( + db, + email=user_in.email + ) + + if user: + print('User already exists\n') + continue + + break + + while 1: + username = input('Username: ') + + if username: + try: + user_in.username = username + + except ValidationError as e: + print('\n', e, end='\n\n') + continue + + break + + while 1: + password = input('*Password: ') + + if not password: + print('Password is required\n') + continue + + try: + user_in.password = password + + except ValidationError as e: + print('\n', e, end='\n\n') + continue + + break + + while 1: + is_active = input('Is active? y/n (y): ') or 'y' + + if is_active == 'y': + user_in.is_active = True + + elif is_active == 'n': + user_in.is_active = False + + else: + print('Invalid input\n') + continue + + break + + while 1: + is_superuser = input('Is superuser? y/n (n): ') or 'n' + + if is_superuser == 'y': + user_in.is_superuser = True + + elif is_superuser == 'n': + user_in.is_superuser = False + + else: + print('Invalid input\n') + continue + + break + + with contextmanager(get_db)() as db: + user = crud.user.sync_create( + db, + obj_in=user_in + ) + + print(f'\nUser created:\n{user_in}\n') \ No newline at end of file diff --git a/src/app/utils/email.py b/src/app/utils/email_utils.py similarity index 100% rename from src/app/utils/email.py rename to src/app/utils/email_utils.py diff --git a/src/app/views/depends.py b/src/app/views/depends.py index 11db439..3c69903 100644 --- a/src/app/views/depends.py +++ b/src/app/views/depends.py @@ -1,8 +1,12 @@ import io -from pathlib import Path -from typing import Annotated, Generator +from typing import ( + Annotated, + Generator +) + from PIL import Image from jose import jwt + from pydantic import ValidationError from sqlalchemy.ext.asyncio import AsyncSession @@ -20,7 +24,10 @@ from fastapi.security import OAuth2PasswordBearer from app.models.user import User as UserModel from app.core import security from app.core.config import settings -from app.db.session import SessionLocal, AsyncSessionLocal +from app.db.session import ( + SessionLocal, + AsyncSessionLocal +) from app import crud from app import schemas from app.utils.image_operations import ( @@ -31,22 +38,15 @@ from app.utils.image_operations import ( reusable_oauth2 = OAuth2PasswordBearer(tokenUrl='/login') -def get_db() -> Generator: - try: - db = SessionLocal() - yield db - finally: - db.close() +def get_db() -> Generator: + with SessionLocal() as db: + yield db async def get_async_db() -> Generator: - try: - async with AsyncSessionLocal() as async_db: - yield async_db - - finally: - await async_db.close() + async with AsyncSessionLocal() as async_db: + yield await async_db async def get_access_token_from_cookie(access_token: Annotated[str, Cookie()]): diff --git a/src/app/views/routers/main.py b/src/app/views/routers/main.py index 6d093de..1b6b483 100644 --- a/src/app/views/routers/main.py +++ b/src/app/views/routers/main.py @@ -19,7 +19,7 @@ from app import crud from app.core.config import settings from app.schemas import ListPostInTemplate from app.schemas.main import SendEmail -from app.utils.email import send_email_notification +from app.utils.email_utils import send_email_notification from app.views.depends import get_async_db diff --git a/src/app/views/routers/user.py b/src/app/views/routers/user.py index 22645ab..89f7144 100644 --- a/src/app/views/routers/user.py +++ b/src/app/views/routers/user.py @@ -1,10 +1,12 @@ -from typing import Any from datetime import timedelta from sqlalchemy.ext.asyncio import AsyncSession from fastapi.templating import Jinja2Templates -from fastapi.responses import FileResponse, HTMLResponse +from fastapi.responses import ( + FileResponse, + HTMLResponse +) from fastapi import ( APIRouter, HTTPException, @@ -36,7 +38,8 @@ async def login( return templates.TemplateResponse( 'admin/login.html', { - 'request': request + 'request': request, + 'login_url': f'/{settings.SECRET_KEY[-10:]}' } ) diff --git a/src/static/404.jpg b/src/static/404.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ece24144d04a3008dac712c73db841ae9765b7e GIT binary patch literal 48657 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 literal 0 HcmV?d00001