mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
chore: cleanup python code
This commit is contained in:
parent
05f8539361
commit
7d78d06165
30 changed files with 46 additions and 87 deletions
2
app.py
2
app.py
|
|
@ -1,7 +1,5 @@
|
|||
import asyncio
|
||||
import logging
|
||||
from fastapi import FastAPI, Request
|
||||
import re
|
||||
from config.config import LearnHouseConfig, get_learnhouse_config
|
||||
from src.core.events.events import shutdown_app, startup_app
|
||||
from src.main import global_router
|
||||
|
|
|
|||
|
|
@ -3,8 +3,6 @@ from fastapi import Depends, APIRouter, HTTPException, status, Request
|
|||
from fastapi.security import OAuth2PasswordRequestForm
|
||||
from src.security.auth import *
|
||||
from src.services.users.users import *
|
||||
from datetime import timedelta
|
||||
from fastapi.responses import JSONResponse
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
from fastapi import APIRouter, Depends, UploadFile, Form, Request
|
||||
from src.security.auth import get_current_user
|
||||
from fastapi import HTTPException, status, UploadFile
|
||||
from fastapi import UploadFile
|
||||
from src.services.blocks.block_types.imageBlock.images import create_image_block, get_image_block
|
||||
from src.services.blocks.block_types.videoBlock.videoBlock import create_video_block, get_video_block
|
||||
from src.services.blocks.block_types.pdfBlock.pdfBlock import create_pdf_block, get_pdf_block
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from fastapi import APIRouter, Depends, Request, UploadFile, Form
|
||||
from fastapi import APIRouter, Depends, Request
|
||||
|
||||
from src.services.courses.chapters import CourseChapter, CourseChapterMetaData, create_coursechapter, delete_coursechapter, get_coursechapter, get_coursechapters, get_coursechapters_meta, update_coursechapter, update_coursechapters_meta
|
||||
from src.services.users.users import PublicUser
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
from fastapi import APIRouter, Depends, Request
|
||||
from src.security.auth import get_current_user
|
||||
from src.services.users.users import PublicUser, User
|
||||
from src.services.users.users import PublicUser
|
||||
from src.services.courses.collections import Collection, create_collection, get_collection, get_collections, update_collection, delete_collection
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ from fastapi import APIRouter, Depends, Request
|
|||
from src.security.auth import get_current_user
|
||||
from src.services.roles.schemas.roles import Role
|
||||
from src.services.roles.roles import create_role, delete_role, read_role, update_role
|
||||
from src.services.users.schemas.users import PublicUser, User
|
||||
from src.services.users.schemas.users import PublicUser
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
from typing import Optional
|
||||
from fastapi import APIRouter, Depends, Request
|
||||
from src.security.auth import get_current_user
|
||||
from src.services.trail import Trail, add_activity_to_trail, add_course_to_trail, create_trail, get_user_trail_with_orgslug, get_user_trail, remove_course_from_trail
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
from fastapi import Depends, FastAPI, APIRouter
|
||||
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
|
||||
from pydantic import BaseModel
|
||||
from fastapi import Depends, APIRouter
|
||||
from src.security.auth import *
|
||||
from src.services.users.schemas.users import PasswordChangeForm, PublicUser, User, UserWithPassword
|
||||
from src.services.users.users import create_user, delete_user, get_profile_metadata, get_user_by_userid, read_user, update_user, update_user_password
|
||||
from src.services.users.users import create_user, delete_user, get_profile_metadata, get_user_by_userid, update_user, update_user_password
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,15 +1,12 @@
|
|||
from pydantic import BaseModel
|
||||
from fastapi import Depends, FastAPI, APIRouter, HTTPException, status
|
||||
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
|
||||
from passlib.context import CryptContext
|
||||
from fastapi import Depends, HTTPException, status
|
||||
from fastapi.security import OAuth2PasswordBearer
|
||||
from jose import JWTError, jwt
|
||||
from datetime import datetime, timedelta
|
||||
from src.services.users.schemas.users import AnonymousUser
|
||||
from src.services.users.users import *
|
||||
from fastapi import Cookie, FastAPI
|
||||
from src.security.security import *
|
||||
from fastapi_jwt_auth import AuthJWT
|
||||
from fastapi_jwt_auth.exceptions import AuthJWTException
|
||||
|
||||
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/auth/login")
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
from pprint import pprint
|
||||
from fastapi import HTTPException, status, Request
|
||||
from passlib.context import CryptContext
|
||||
from passlib.hash import pbkdf2_sha256
|
||||
from src.services.roles.schemas.roles import RoleInDB
|
||||
|
||||
from src.services.users.schemas.users import User, UserInDB
|
||||
from src.services.users.schemas.users import UserInDB
|
||||
|
||||
### 🔒 JWT ##############################################################
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,5 @@
|
|||
from uuid import uuid4
|
||||
from pydantic import BaseModel
|
||||
from fastapi import HTTPException, status, UploadFile, Request
|
||||
from fastapi.responses import StreamingResponse
|
||||
import os
|
||||
from src.services.blocks.schemas.blocks import Block
|
||||
from src.services.blocks.utils.upload_files import upload_file_and_return_file_object
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,5 @@
|
|||
from uuid import uuid4
|
||||
from pydantic import BaseModel
|
||||
from fastapi import HTTPException, status, UploadFile, Request
|
||||
from fastapi.responses import StreamingResponse
|
||||
import os
|
||||
from src.services.blocks.schemas.blocks import Block
|
||||
from src.services.blocks.utils.upload_files import upload_file_and_return_file_object
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,5 @@
|
|||
from uuid import uuid4
|
||||
from pydantic import BaseModel
|
||||
import os
|
||||
from fastapi import HTTPException, status, UploadFile, Request
|
||||
from fastapi.responses import StreamingResponse
|
||||
from src.services.blocks.schemas.blocks import Block
|
||||
from src.services.blocks.utils.upload_files import upload_file_and_return_file_object
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
from typing import Any, List, Literal
|
||||
from uuid import uuid4
|
||||
from fastapi import Request
|
||||
from typing import Any, Literal
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import uuid
|
|||
from fastapi import HTTPException, Request, UploadFile, status
|
||||
from src.services.blocks.schemas.files import BlockFile
|
||||
|
||||
from src.services.users.schemas.users import PublicUser
|
||||
|
||||
|
||||
async def upload_file_and_return_file_object(request: Request, file: UploadFile, activity_id: str, block_id: str, list_of_allowed_file_formats: list, type_of_block: str):
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
from pydantic import BaseModel
|
||||
from src.security.security import verify_user_rights_with_roles
|
||||
from src.services.users.schemas.users import PublicUser, User
|
||||
from fastapi import FastAPI, HTTPException, status, Request, Response, BackgroundTasks, UploadFile, File
|
||||
from src.services.users.schemas.users import PublicUser
|
||||
from fastapi import HTTPException, status, Request
|
||||
from uuid import uuid4
|
||||
from datetime import datetime
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
from pydantic import BaseModel
|
||||
from src.security.security import verify_user_rights_with_roles
|
||||
from src.services.courses.activities.uploads.pdfs import upload_pdf
|
||||
from src.services.users.users import PublicUser
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ async def upload_pdf(pdf_file, activity_id):
|
|||
f.write(contents)
|
||||
f.close()
|
||||
|
||||
except Exception as e:
|
||||
except Exception:
|
||||
return {"message": "There was an error uploading the file"}
|
||||
finally:
|
||||
pdf_file.file.close()
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ async def upload_video(video_file, activity_id):
|
|||
f.write(contents)
|
||||
f.close()
|
||||
|
||||
except Exception as e:
|
||||
except Exception:
|
||||
return {"message": "There was an error uploading the file"}
|
||||
finally:
|
||||
video_file.file.close()
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
from pydantic import BaseModel
|
||||
from src.security.security import verify_user_rights_with_roles
|
||||
from src.services.courses.activities.uploads.videos import upload_video
|
||||
from src.services.users.users import PublicUser
|
||||
|
|
|
|||
|
|
@ -1,15 +1,13 @@
|
|||
from datetime import datetime
|
||||
import json
|
||||
import pprint
|
||||
from typing import List
|
||||
from uuid import uuid4
|
||||
from pydantic import BaseModel
|
||||
from src.security.auth import non_public_endpoint
|
||||
from src.services.courses.courses import Course, CourseInDB
|
||||
from src.services.courses.activities.activities import Activity, ActivityInDB
|
||||
from src.services.courses.courses import Course
|
||||
from src.services.courses.activities.activities import ActivityInDB
|
||||
from src.security.security import verify_user_rights_with_roles
|
||||
from src.services.users.users import PublicUser
|
||||
from fastapi import HTTPException, status, Request, Response, BackgroundTasks, UploadFile, File
|
||||
from fastapi import HTTPException, status, Request
|
||||
|
||||
|
||||
class CourseChapter(BaseModel):
|
||||
|
|
@ -115,7 +113,7 @@ async def delete_coursechapter(request: Request, coursechapter_id: str, current
|
|||
await verify_rights(request, course["course_id"], current_user, "delete")
|
||||
|
||||
# Remove coursechapter from course
|
||||
res = await courses.update_one({"course_id": course["course_id"]}, {
|
||||
await courses.update_one({"course_id": course["course_id"]}, {
|
||||
"$pull": {"chapters": coursechapter_id}})
|
||||
|
||||
await courses.update_one({"chapters_content.coursechapter_id": coursechapter_id}, {
|
||||
|
|
@ -200,7 +198,7 @@ async def update_coursechapters_meta(request: Request, course_id: str, coursecha
|
|||
courses = request.app.db["courses"]
|
||||
|
||||
# update chapters in course
|
||||
courseInDB = await courses.update_one({"course_id": course_id}, {
|
||||
await courses.update_one({"course_id": course_id}, {
|
||||
"$set": {"chapters": coursechapters_metadata.chapterOrder}})
|
||||
|
||||
if coursechapters_metadata.chapters is not None:
|
||||
|
|
@ -230,7 +228,7 @@ async def verify_rights(request: Request, course_id: str, current_user: PublicUs
|
|||
|
||||
if not course:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_409_CONFLICT, detail=f"Course does not exist")
|
||||
status_code=status.HTTP_409_CONFLICT, detail="Course does not exist")
|
||||
|
||||
hasRoleRights = await verify_user_rights_with_roles(request, action, current_user.user_id, course_id, course["org_id"])
|
||||
isAuthor = current_user.user_id in course["authors"]
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
import json
|
||||
from typing import List
|
||||
from uuid import uuid4
|
||||
from pydantic import BaseModel
|
||||
from src.services.users.users import PublicUser, User
|
||||
from src.services.users.users import PublicUser
|
||||
from src.security.security import *
|
||||
from fastapi import FastAPI, HTTPException, status, Request, Response, BackgroundTasks
|
||||
from datetime import datetime
|
||||
from fastapi import HTTPException, status, Request
|
||||
|
||||
#### Classes ####################################################
|
||||
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@ async def get_courses_orgslug(request: Request, page: int = 1, limit: int = 10,
|
|||
|
||||
if not org:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_409_CONFLICT, detail=f"Organization does not exist")
|
||||
status_code=status.HTTP_409_CONFLICT, detail="Organization does not exist")
|
||||
|
||||
# get all courses from database
|
||||
all_courses = courses.find({"org_id": org['org_id']}).sort(
|
||||
|
|
@ -288,12 +288,12 @@ async def verify_rights(request: Request, course_id: str, current_user: PublicUs
|
|||
|
||||
course = await courses.find_one({"course_id": course_id})
|
||||
|
||||
if current_user.user_id == "anonymous" and course["public"] == True and action == "read":
|
||||
if current_user.user_id == "anonymous" and course["public"] is True and action == "read":
|
||||
return True
|
||||
|
||||
if not course:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_409_CONFLICT, detail=f"Course/CourseChapter does not exist")
|
||||
status_code=status.HTTP_409_CONFLICT, detail="Course/CourseChapter does not exist")
|
||||
|
||||
hasRoleRights = await verify_user_rights_with_roles(request, action, current_user.user_id, course_id, course["org_id"])
|
||||
isAuthor = current_user.user_id in course["authors"]
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ async def upload_thumbnail(thumbnail_file, name_in_disk):
|
|||
f.write(contents)
|
||||
f.close()
|
||||
|
||||
except Exception as e:
|
||||
except Exception:
|
||||
return {"message": "There was an error uploading the file"}
|
||||
finally:
|
||||
thumbnail_file.file.close()
|
||||
|
|
@ -1,22 +1,17 @@
|
|||
import os
|
||||
import requests
|
||||
from datetime import datetime
|
||||
from fileinput import filename
|
||||
from pprint import pprint
|
||||
from uuid import uuid4
|
||||
from fastapi import File, UploadFile, Request
|
||||
from fastapi import Request
|
||||
from src.security.security import security_hash_password
|
||||
from src.services.courses.chapters import CourseChapter, create_coursechapter
|
||||
from src.services.courses.activities.activities import Activity, create_activity
|
||||
from src.services.courses.thumbnails import upload_thumbnail
|
||||
from src.services.users.schemas.users import UserRolesInOrganization
|
||||
from src.services.users.users import PublicUser, User, UserInDB, UserWithPassword
|
||||
from src.services.users.users import PublicUser, UserInDB
|
||||
|
||||
from src.services.orgs import OrganizationInDB, Organization, create_org
|
||||
from src.services.orgs import Organization, create_org
|
||||
from src.services.roles.schemas.roles import Permission, Elements, RoleInDB
|
||||
from src.services.users.users import create_user
|
||||
from src.services.courses.courses import Course, CourseInDB, create_course
|
||||
from src.services.roles.roles import Role, create_role
|
||||
from src.services.courses.courses import CourseInDB
|
||||
from faker import Faker
|
||||
|
||||
|
||||
|
|
@ -39,12 +34,12 @@ async def create_initial_data(request: Request):
|
|||
update_date=str(datetime.now()),
|
||||
roles= [],
|
||||
orgs=[],
|
||||
username=f"admin",
|
||||
email=f"admin@admin.admin",
|
||||
username="admin",
|
||||
email="admin@admin.admin",
|
||||
password=str(await security_hash_password("admin")),
|
||||
)
|
||||
|
||||
db_admin_user = await database_users.insert_one(admin_user.dict())
|
||||
await database_users.insert_one(admin_user.dict())
|
||||
|
||||
# find admin user
|
||||
users = request.app.db["users"]
|
||||
|
|
@ -188,9 +183,9 @@ async def create_initial_data(request: Request):
|
|||
"https://source.unsplash.com/random/800x600/?img=1")
|
||||
|
||||
# check if folder exists and create it if not
|
||||
if not os.path.exists(f"content/uploads/img"):
|
||||
if not os.path.exists("content/uploads/img"):
|
||||
|
||||
os.makedirs(f"content/uploads/img")
|
||||
os.makedirs("content/uploads/img")
|
||||
|
||||
with open(f"content/uploads/img/{name_in_disk}", "wb") as f:
|
||||
f.write(image.content)
|
||||
|
|
@ -198,7 +193,7 @@ async def create_initial_data(request: Request):
|
|||
course.thumbnail = name_in_disk
|
||||
|
||||
course = CourseInDB(**course.dict())
|
||||
course_in_db = await courses.insert_one(course.dict())
|
||||
await courses.insert_one(course.dict())
|
||||
|
||||
# create chapters
|
||||
for i in range(0, 5):
|
||||
|
|
|
|||
|
|
@ -1,12 +1,10 @@
|
|||
import json
|
||||
from typing import List
|
||||
from uuid import uuid4
|
||||
from pydantic import BaseModel
|
||||
from src.services.users.schemas.users import UserOrganization
|
||||
from src.services.users.users import PublicUser, User
|
||||
from src.services.users.users import PublicUser
|
||||
from src.security.security import *
|
||||
from fastapi import FastAPI, HTTPException, status, Request, Response, BackgroundTasks
|
||||
from datetime import datetime
|
||||
from fastapi import HTTPException, status, Request
|
||||
|
||||
#### Classes ####################################################
|
||||
|
||||
|
|
@ -109,8 +107,8 @@ async def update_org(request: Request, org_object: Organization, org_id: str, cu
|
|||
org = await orgs.find_one({"org_id": org_id})
|
||||
|
||||
if org:
|
||||
owners = org["owners"]
|
||||
admins = org["admins"]
|
||||
org["owners"]
|
||||
org["admins"]
|
||||
|
||||
else:
|
||||
raise HTTPException(
|
||||
|
|
@ -153,7 +151,7 @@ async def get_orgs_by_user(request: Request, user_id: str, page: int = 1, limit:
|
|||
orgs = request.app.db["organizations"]
|
||||
user = request.app.db["users"]
|
||||
|
||||
if user_id is "anonymous":
|
||||
if user_id == "anonymous":
|
||||
|
||||
# raise error
|
||||
raise HTTPException(
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
import json
|
||||
from typing import List, Literal
|
||||
from typing import Literal
|
||||
from uuid import uuid4
|
||||
from pydantic import BaseModel
|
||||
from src.services.roles.schemas.roles import Role, RoleInDB
|
||||
from src.services.users.schemas.users import PublicUser, User
|
||||
from src.services.users.schemas.users import PublicUser
|
||||
from src.security.security import *
|
||||
from fastapi import HTTPException, status, Request
|
||||
from datetime import datetime
|
||||
|
|
@ -63,7 +61,7 @@ async def delete_role(request: Request, role_id: str, current_user: PublicUser):
|
|||
#### Security ####################################################
|
||||
|
||||
async def verify_user_permissions_on_roles(request: Request, current_user: PublicUser, action: Literal["create", "read", "update", "delete"], role_id: str | None):
|
||||
users = request.app.db["users"]
|
||||
request.app.db["users"]
|
||||
roles = request.app.db["roles"]
|
||||
|
||||
# If current user is not authenticated
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from typing import List, Literal
|
||||
from typing import Literal
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,4 @@
|
|||
from cmath import log
|
||||
from datetime import datetime
|
||||
import json
|
||||
from typing import List, Literal, Optional
|
||||
from uuid import uuid4
|
||||
from fastapi import HTTPException, Request, status
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ from datetime import datetime
|
|||
from typing import Literal
|
||||
from uuid import uuid4
|
||||
from fastapi import HTTPException, Request, status
|
||||
from src.services.roles.schemas.roles import Role
|
||||
from src.security.security import security_hash_password, security_verify_password
|
||||
from src.services.users.schemas.users import PasswordChangeForm, PublicUser, User, UserOrganization, UserRolesInOrganization, UserWithPassword, UserInDB
|
||||
|
||||
|
|
@ -195,7 +194,7 @@ async def get_user_by_userid(request: Request, user_id: str):
|
|||
|
||||
async def get_profile_metadata(request: Request, user):
|
||||
users = request.app.db["users"]
|
||||
roles = request.app.db["roles"]
|
||||
request.app.db["roles"]
|
||||
|
||||
user = await users.find_one({"user_id": user['user_id']})
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue