refactor: use await for db requests

This commit is contained in:
swve 2023-03-01 00:11:43 +01:00
parent 05bc83d6c6
commit d76a4a4138
16 changed files with 118 additions and 121 deletions

View file

@ -35,13 +35,13 @@ async def create_activity(request: Request, user: PublicUser, activity_object: A
activities = request.app.db["activities"]
# find if the user has already started the course
isActivityAlreadCreated = activities.find_one(
isActivityAlreadCreated = await activities.find_one(
{"course_id": activity_object.course_id, "user_id": user.user_id})
if isActivityAlreadCreated:
if isActivityAlreadCreated['status'] == 'closed':
activity_object.status = 'ongoing'
activities.update_one(
await activities.update_one(
{"activity_id": isActivityAlreadCreated['activity_id']}, {"$set": activity_object.dict()})
return activity_object
else:
@ -54,7 +54,7 @@ async def create_activity(request: Request, user: PublicUser, activity_object: A
activity = ActivityInDB(**activity_object.dict(),activity_id=activity_id,
user_id=user.user_id, org_id=activity_object.course_id)
activities.insert_one(activity.dict())
await activities.insert_one(activity.dict())
return activity
@ -73,7 +73,7 @@ async def get_user_activities(request: Request, user: PublicUser, org_id: str):
raise HTTPException(
status_code=status.HTTP_409_CONFLICT, detail="No activities found")
for activity in user_activities:
for activity in await user_activities.to_list(length=100):
# get number of lectures in the course
coursechapters = await get_coursechapters_meta(request, activity['course_id'], user)
@ -81,7 +81,7 @@ async def get_user_activities(request: Request, user: PublicUser, org_id: str):
progression = round(
len(activity['lectures_marked_complete']) / len(coursechapters['lectures']) * 100, 2)
course = courses.find_one({"course_id": activity['course_id']}, {'_id': 0})
course = await courses.find_one({"course_id": activity['course_id']}, {'_id': 0})
# add progression to the activity
one_activity = {"course": course, "activitydata": activity, "progression": progression}
@ -103,7 +103,7 @@ async def get_user_activities_orgslug(request: Request, user: PublicUser, org_sl
raise HTTPException(
status_code=status.HTTP_409_CONFLICT, detail="No activities found")
for activity in user_activities:
for activity in await user_activities.to_list(length=100):
# get number of lectures in the course
coursechapters = await get_coursechapters_meta(request, activity['course_id'], user)
@ -111,7 +111,7 @@ async def get_user_activities_orgslug(request: Request, user: PublicUser, org_sl
progression = round(
len(activity['lectures_marked_complete']) / len(coursechapters['lectures']) * 100, 2)
course = courses.find_one({"course_id": activity['course_id']}, {'_id': 0})
course = await courses.find_one({"course_id": activity['course_id']}, {'_id': 0})
# add progression to the activity
one_activity = {"course": course, "activitydata": activity, "progression": progression}
@ -125,14 +125,14 @@ async def add_lecture_to_activity(request: Request, user: PublicUser, org_id: st
course_id = f"course_{course_id}"
lecture_id = f"lecture_{lecture_id}"
activity = activities.find_one(
activity = await activities.find_one(
{"course_id": course_id,
"user_id": user.user_id
}, {'_id': 0})
if lecture_id not in activity['lectures_marked_complete']:
activity['lectures_marked_complete'].append(str(lecture_id))
activities.update_one(
await activities.update_one(
{"activity_id": activity['activity_id']}, {"$set": activity})
return activity
@ -147,7 +147,7 @@ async def add_lecture_to_activity(request: Request, user: PublicUser, org_id: st
async def close_activity(request: Request, user: PublicUser, activity_id: str, org_id: str,):
activities = request.app.db["activities"]
activity = activities.find_one(
activity = await activities.find_one(
{"activity_id": activity_id, "user_id": user.user_id})
if not activity:
@ -156,7 +156,7 @@ async def close_activity(request: Request, user: PublicUser, activity_id: str,
activity['status'] = 'closed'
activities.update_one(
await activities.update_one(
{"activity_id": activity['activity_id']}, {"$set": activity})
activity = ActivityInDB(**activity)

View file

@ -62,7 +62,7 @@ async def create_image_file(request: Request,image_file: UploadFile, lecture_id:
f.close()
# insert file object into database
photo_file_in_db = photos.insert_one(uploadable_file.dict())
photo_file_in_db = await photos.insert_one(uploadable_file.dict())
if not photo_file_in_db:
raise HTTPException(
@ -74,7 +74,7 @@ async def create_image_file(request: Request,image_file: UploadFile, lecture_id:
async def get_image_object(request: Request,file_id: str):
photos = request.app.db["files"]
photo_file = photos.find_one({"file_id": file_id})
photo_file = await photos.find_one({"file_id": file_id})
if photo_file:
photo_file = PhotoFile(**photo_file)
@ -88,7 +88,7 @@ async def get_image_object(request: Request,file_id: str):
async def get_image_file(request: Request,file_id: str, current_user: PublicUser):
photos = request.app.db["files"]
photo_file = photos.find_one({"file_id": file_id})
photo_file = await photos.find_one({"file_id": file_id})
# TODO : check if user has access to file

View file

@ -62,7 +62,7 @@ async def create_document_file(request: Request, document_file: UploadFile, lect
f.close()
# insert file object into database
document_file_in_db = documents.insert_one(uploadable_file.dict())
document_file_in_db = await documents.insert_one(uploadable_file.dict())
if not document_file_in_db:
raise HTTPException(
@ -74,7 +74,7 @@ async def create_document_file(request: Request, document_file: UploadFile, lect
async def get_document_object(request: Request, file_id: str):
documents = request.app.db["files"]
document_file = documents.find_one({"file_id": file_id})
document_file = await documents.find_one({"file_id": file_id})
if document_file:
document_file = DocumentFile(**document_file)
@ -88,7 +88,7 @@ async def get_document_object(request: Request, file_id: str):
async def get_document_file(request: Request, file_id: str, current_user: PublicUser):
documents = request.app.db["files"]
document_file = documents.find_one({"file_id": file_id})
document_file = await documents.find_one({"file_id": file_id})
# TODO : check if user has access to file

View file

@ -37,7 +37,7 @@ async def create_quiz_block(request: Request, quizBlock: quizBlock, lecture_id:
block_type="quizBlock", block_data=quizBlock)
# insert block
blocks.insert_one(block.dict())
await blocks.insert_one(block.dict())
return block
@ -45,7 +45,7 @@ async def create_quiz_block(request: Request, quizBlock: quizBlock, lecture_id:
async def get_quiz_block_options(request: Request, block_id: str, user: PublicUser):
blocks = request.app.db["blocks"]
# find block but get only the options
block = blocks.find_one({"block_id": block_id, }, {
block = await blocks.find_one({"block_id": block_id, }, {
"_id": 0, "block_data.answers": 0})
return block
@ -54,7 +54,7 @@ async def get_quiz_block_answers(request: Request, block_id: str, user: PublicUs
blocks = request.app.db["blocks"]
# find block but get only the answers
block = blocks.find_one({"block_id": block_id, }, {
block = await blocks.find_one({"block_id": block_id, }, {
"_id": 0, "block_data.questions": 0})
return block

View file

@ -62,7 +62,7 @@ async def create_video_file(request: Request,video_file: UploadFile, lecture_id:
f.close()
# insert file object into database
video_file_in_db = files.insert_one(uploadable_file.dict())
video_file_in_db = await files.insert_one(uploadable_file.dict())
if not video_file_in_db:
raise HTTPException(
@ -74,7 +74,7 @@ async def create_video_file(request: Request,video_file: UploadFile, lecture_id:
async def get_video_object(request: Request,file_id: str, current_user: PublicUser):
photos = request.app.db["files"]
video_file = photos.find_one({"file_id": file_id})
video_file = await photos.find_one({"file_id": file_id})
if video_file:
video_file = VideoFile(**video_file)
@ -88,7 +88,7 @@ async def get_video_object(request: Request,file_id: str, current_user: PublicUs
async def get_video_file(request: Request,file_id: str, current_user: PublicUser):
photos = request.app.db["files"]
video_file = photos.find_one({"file_id": file_id})
video_file = await photos.find_one({"file_id": file_id})
# TODO : check if user has access to file

View file

@ -52,7 +52,7 @@ async def create_coursechapter(request: Request,coursechapter_object: CourseChap
coursechapter = CourseChapterInDB(coursechapter_id=coursechapter_id, creationDate=str(
datetime.now()), updateDate=str(datetime.now()), course_id=course_id, **coursechapter_object.dict())
coursechapter_in_db = coursechapters.insert_one(coursechapter.dict())
coursechapter_in_db = await coursechapters.insert_one(coursechapter.dict())
courses.update_one({"course_id": course_id}, {
"$addToSet": {"chapters": coursechapter_id}})
@ -66,7 +66,7 @@ async def create_coursechapter(request: Request,coursechapter_object: CourseChap
async def get_coursechapter(request: Request,coursechapter_id: str, current_user: PublicUser):
coursechapters = request.app.db["coursechapters"]
coursechapter = coursechapters.find_one(
coursechapter = await coursechapters.find_one(
{"coursechapter_id": coursechapter_id})
if coursechapter:
@ -84,7 +84,7 @@ async def get_coursechapter(request: Request,coursechapter_id: str, current_user
async def update_coursechapter(request: Request,coursechapter_object: CourseChapter, coursechapter_id: str, current_user: PublicUser):
coursechapters = request.app.db["coursechapters"]
coursechapter = coursechapters.find_one(
coursechapter = await coursechapters.find_one(
{"coursechapter_id": coursechapter_id})
if coursechapter:
@ -98,7 +98,7 @@ async def update_coursechapter(request: Request,coursechapter_object: CourseChap
updated_coursechapter = CourseChapterInDB(
coursechapter_id=coursechapter_id, creationDate=creationDate, course_id=coursechapter["course_id"], updateDate=str(datetime_object), **coursechapter_object.dict())
coursechapters.update_one({"coursechapter_id": coursechapter_id}, {
await coursechapters.update_one({"coursechapter_id": coursechapter_id}, {
"$set": updated_coursechapter.dict()})
return CourseChapterInDB(**updated_coursechapter.dict())
@ -113,18 +113,18 @@ async def delete_coursechapter(request: Request,coursechapter_id: str, current_
coursechapters = request.app.db["coursechapters"]
courses = request.app.db["courses"]
coursechapter = coursechapters.find_one(
coursechapter = await coursechapters.find_one(
{"coursechapter_id": coursechapter_id})
if coursechapter:
# verify course rights
await verify_rights(request, coursechapter["course_id"], current_user, "delete")
isDeleted = coursechapters.delete_one(
isDeleted = await coursechapters.delete_one(
{"coursechapter_id": coursechapter_id})
# Remove coursechapter from course
courses.update_one({"course_id": coursechapter["course_id"]}, {
await courses.update_one({"course_id": coursechapter["course_id"]}, {
"$pull": {"chapters": coursechapter_id}})
if isDeleted:
@ -149,7 +149,7 @@ async def get_coursechapters(request: Request,course_id: str, page: int = 1, lim
all_coursechapters = courses.find({"course_id": course_id}).sort(
"name", 1).skip(10 * (page - 1)).limit(limit)
return [json.loads(json.dumps(coursechapter, default=str)) for coursechapter in all_coursechapters]
return [json.loads(json.dumps(coursechapter, default=str)) for coursechapter in await all_coursechapters.to_list(length=100)]
async def get_coursechapters_meta(request: Request, course_id: str, current_user: PublicUser):
@ -160,7 +160,7 @@ async def get_coursechapters_meta(request: Request, course_id: str, current_user
coursechapters = coursechapters.find(
{"course_id": course_id}).sort("name", 1)
course = courses.find_one({"course_id": course_id})
course = await courses.find_one({"course_id": course_id})
course = Course(**course) # type: ignore
# lectures
@ -168,7 +168,7 @@ async def get_coursechapters_meta(request: Request, course_id: str, current_user
# chapters
chapters = {}
for coursechapter in coursechapters:
for coursechapter in await coursechapters.to_list(length=100):
coursechapter = CourseChapterInDB(**coursechapter)
coursechapter_lectureIds = []
@ -182,7 +182,7 @@ async def get_coursechapters_meta(request: Request, course_id: str, current_user
# lectures
lectures_list = {}
for lecture in lectures.find({"lecture_id": {"$in": coursechapter_lectureIds_global}}):
for lecture in await lectures.find({"lecture_id": {"$in": coursechapter_lectureIds_global}}).to_list(length=100):
lecture = LectureInDB(**lecture)
lectures_list[lecture.lecture_id] = {
"id": lecture.lecture_id, "name": lecture.name, "type": lecture.type, "content": lecture.content
@ -202,14 +202,14 @@ async def update_coursechapters_meta(request: Request,course_id: str, coursechap
courses = request.app.db["courses"]
# update chapters in course
courseInDB = courses.update_one({"course_id": course_id}, {
courseInDB = await courses.update_one({"course_id": course_id}, {
"$set": {"chapters": coursechapters_metadata.chapterOrder}})
if coursechapters_metadata.chapters is not None:
for coursechapter_id, chapter_metadata in coursechapters_metadata.chapters.items():
filter_query = {"coursechapter_id": coursechapter_id}
update_query = {"$set": {"lectures": chapter_metadata["lectureIds"]}}
result = coursechapters.update_one(filter_query, update_query)
result = await coursechapters.update_one(filter_query, update_query)
if result.matched_count == 0:
# handle error when no documents are matched by the filter query
print(f"No documents found for course chapter ID {coursechapter_id}")
@ -223,7 +223,7 @@ async def update_coursechapters_meta(request: Request,course_id: str, coursechap
async def verify_rights(request: Request,course_id: str, current_user: PublicUser, action: str):
courses = request.app.db["courses"]
course = courses.find_one({"course_id": course_id})
course = await courses.find_one({"course_id": course_id})
if not course:
raise HTTPException(

View file

@ -30,7 +30,7 @@ class CollectionInDB(Collection):
async def get_collection(request: Request,collection_id: str, current_user: PublicUser):
collections = request.app.db["collections"]
collection = collections.find_one({"collection_id": collection_id})
collection = await collections.find_one({"collection_id": collection_id})
# verify collection rights
await verify_collection_rights(request, collection_id, current_user, "read")
@ -47,7 +47,7 @@ async def create_collection(request: Request,collection_object: Collection, curr
collections = request.app.db["collections"]
# find if collection already exists using name
isCollectionNameAvailable = collections.find_one(
isCollectionNameAvailable = await collections.find_one(
{"name": collection_object.name})
# TODO
@ -63,7 +63,7 @@ async def create_collection(request: Request,collection_object: Collection, curr
collection = CollectionInDB(
collection_id=collection_id, **collection_object.dict())
collection_in_db = collections.insert_one(collection.dict())
collection_in_db = await collections.insert_one(collection.dict())
if not collection_in_db:
raise HTTPException(
@ -79,7 +79,7 @@ async def update_collection(request: Request,collection_object: Collection, coll
collections = request.app.db["collections"]
collection = collections.find_one({"collection_id": collection_id})
collection = await collections.find_one({"collection_id": collection_id})
if not collection:
raise HTTPException(
@ -88,7 +88,7 @@ async def update_collection(request: Request,collection_object: Collection, coll
updated_collection = CollectionInDB(
collection_id=collection_id, **collection_object.dict())
collections.update_one({"collection_id": collection_id}, {
await collections.update_one({"collection_id": collection_id}, {
"$set": updated_collection.dict()})
return Collection(**updated_collection.dict())
@ -100,13 +100,13 @@ async def delete_collection(request: Request,collection_id: str, current_user: P
collections = request.app.db["collections"]
collection = collections.find_one({"collection_id": collection_id})
collection = await collections.find_one({"collection_id": collection_id})
if not collection:
raise HTTPException(
status_code=status.HTTP_409_CONFLICT, detail="Collection does not exist")
isDeleted = collections.delete_one({"collection_id": collection_id})
isDeleted = await collections.delete_one({"collection_id": collection_id})
if isDeleted:
return {"detail": "collection deleted"}
@ -129,7 +129,7 @@ async def get_collections(request: Request,page: int = 1, limit: int = 10):
# create list of collections and include courses in each collection
collections_list = []
for collection in all_collections:
for collection in await all_collections.to_list(length=100):
collection = CollectionInDB(**collection)
collections_list.append(collection)
@ -140,7 +140,7 @@ async def get_collections(request: Request,page: int = 1, limit: int = 10):
collection.courses = courses.find(
{"course_id": {"$in": collection_courses}}, {'_id': 0})
collection.courses = [course for course in collection.courses]
collection.courses = [course for course in await collection.courses.to_list(length=100)]
return collections_list
@ -150,7 +150,7 @@ async def get_collections(request: Request,page: int = 1, limit: int = 10):
async def verify_collection_rights(request: Request,collection_id: str, current_user: PublicUser, action: str):
collections = request.app.db["collections"]
collection = collections.find_one({"collection_id": collection_id})
collection = await collections.find_one({"collection_id": collection_id})
if not collection and action != "create":
raise HTTPException(

View file

@ -56,7 +56,7 @@ class CourseChapterInDB(CourseChapter):
async def get_course(request: Request, course_id: str, current_user: PublicUser):
courses = request.app.db["courses"]
course = courses.find_one({"course_id": course_id})
course = await courses.find_one({"course_id": course_id})
# verify course rights
await verify_rights(request, course_id, current_user, "read")
@ -74,7 +74,7 @@ async def get_course_meta(request: Request, course_id: str, current_user: Public
coursechapters = request.app.db["coursechapters"]
activities = request.app.db["activities"]
course = courses.find_one({"course_id": course_id})
course = await courses.find_one({"course_id": course_id})
lectures = request.app.db["lectures"]
# verify course rights
@ -92,7 +92,7 @@ async def get_course_meta(request: Request, course_id: str, current_user: Public
# chapters
chapters = {}
for coursechapter in coursechapters:
for coursechapter in await coursechapters.to_list(length=100):
coursechapter = CourseChapterInDB(**coursechapter)
coursechapter_lectureIds = []
@ -106,7 +106,7 @@ async def get_course_meta(request: Request, course_id: str, current_user: Public
# lectures
lectures_list = {}
for lecture in lectures.find({"lecture_id": {"$in": coursechapter_lectureIds_global}}):
for lecture in await lectures.find({"lecture_id": {"$in": coursechapter_lectureIds_global}}).to_list(length=100):
lecture = LectureInDB(**lecture)
lectures_list[lecture.lecture_id] = {
"id": lecture.lecture_id, "name": lecture.name, "type": lecture.type, "content": lecture.content
@ -119,7 +119,7 @@ async def get_course_meta(request: Request, course_id: str, current_user: Public
course = Course(**course)
# Get activity by user
activity = activities.find_one(
activity = await activities.find_one(
{"course_id": course_id, "user_id": current_user.user_id})
if activity:
activity = json.loads(json.dumps(activity, default=str))
@ -155,7 +155,7 @@ async def create_course(request: Request, course_object: Course, org_id: str, cu
course = CourseInDB(course_id=course_id, authors=[
current_user.user_id], creationDate=str(datetime.now()), updateDate=str(datetime.now()), **course_object.dict())
course_in_db = courses.insert_one(course.dict())
course_in_db = await courses.insert_one(course.dict())
if not course_in_db:
raise HTTPException(
@ -171,7 +171,7 @@ async def update_course_thumbnail(request: Request, course_id: str, current_user
courses = request.app.db["courses"]
course = courses.find_one({"course_id": course_id})
course = await courses.find_one({"course_id": course_id})
# TODO(fix) : the implementation here is clearly not the best one
if course:
creationDate = course["creationDate"]
@ -184,7 +184,7 @@ async def update_course_thumbnail(request: Request, course_id: str, current_user
updated_course = CourseInDB(course_id=course_id, creationDate=creationDate,
authors=authors, updateDate=str(datetime.now()), **course.dict())
courses.update_one({"course_id": course_id}, {
await courses.update_one({"course_id": course_id}, {
"$set": updated_course.dict()})
return CourseInDB(**updated_course.dict())
@ -201,7 +201,7 @@ async def update_course(request: Request, course_object: Course, course_id: str,
courses = request.app.db["courses"]
course = courses.find_one({"course_id": course_id})
course = await courses.find_one({"course_id": course_id})
if course:
creationDate = course["creationDate"]
@ -213,7 +213,7 @@ async def update_course(request: Request, course_object: Course, course_id: str,
updated_course = CourseInDB(
course_id=course_id, creationDate=creationDate, authors=authors, updateDate=str(datetime_object), **course_object.dict())
courses.update_one({"course_id": course_id}, {
await courses.update_one({"course_id": course_id}, {
"$set": updated_course.dict()})
return CourseInDB(**updated_course.dict())
@ -230,13 +230,13 @@ async def delete_course(request: Request, course_id: str, current_user: PublicUs
courses = request.app.db["courses"]
course = courses.find_one({"course_id": course_id})
course = await courses.find_one({"course_id": course_id})
if not course:
raise HTTPException(
status_code=status.HTTP_409_CONFLICT, detail="Course does not exist")
isDeleted = courses.delete_one({"course_id": course_id})
isDeleted = await courses.delete_one({"course_id": course_id})
if isDeleted:
return {"detail": "Course deleted"}
@ -256,7 +256,7 @@ async def get_courses(request: Request, page: int = 1, limit: int = 10, org_id:
all_courses = courses.find({"org_id": org_id}).sort(
"name", 1).skip(10 * (page - 1)).limit(limit)
return [json.loads(json.dumps(course, default=str)) for course in all_courses]
return [json.loads(json.dumps(course, default=str)) for course in await all_courses.to_list(length=100)]
async def get_courses_orgslug(request: Request, page: int = 1, limit: int = 10, org_slug: str | None = None):
courses = request.app.db["courses"]
@ -264,7 +264,7 @@ async def get_courses_orgslug(request: Request, page: int = 1, limit: int = 10,
# TODO : Get only courses that user is admin/has roles of
# get org_id from slug
org = orgs.find_one({"slug": org_slug})
org = await orgs.find_one({"slug": org_slug})
if not org:
raise HTTPException(
@ -274,7 +274,7 @@ async def get_courses_orgslug(request: Request, page: int = 1, limit: int = 10,
all_courses = courses.find({"org_id": org['org_id']}).sort(
"name", 1).skip(10 * (page - 1)).limit(limit)
return [json.loads(json.dumps(course, default=str)) for course in all_courses]
return [json.loads(json.dumps(course, default=str)) for course in await all_courses.to_list(length=100)]
@ -284,7 +284,7 @@ async def get_courses_orgslug(request: Request, page: int = 1, limit: int = 10,
async def verify_rights(request: Request, course_id: str, current_user: PublicUser, action: str):
courses = request.app.db["courses"]
course = courses.find_one({"course_id": course_id})
course = await courses.find_one({"course_id": course_id})
if not course:
raise HTTPException(

View file

@ -44,10 +44,10 @@ async def create_lecture(request: Request,lecture_object: Lecture, coursechapter
# create lecture
lecture = LectureInDB(**lecture_object.dict(), creationDate=str(
datetime.now()), coursechapter_id=coursechapter_id, updateDate=str(datetime.now()), lecture_id=lecture_id)
lectures.insert_one(lecture.dict())
await lectures.insert_one(lecture.dict())
# update chapter
coursechapters.update_one({"coursechapter_id": coursechapter_id}, {
await coursechapters.update_one({"coursechapter_id": coursechapter_id}, {
"$addToSet": {"lectures": lecture_id}})
return lecture
@ -56,7 +56,7 @@ async def create_lecture(request: Request,lecture_object: Lecture, coursechapter
async def get_lecture(request: Request,lecture_id: str, current_user: PublicUser):
lectures = request.app.db["lectures"]
lecture = lectures.find_one({"lecture_id": lecture_id})
lecture = await lectures.find_one({"lecture_id": lecture_id})
# verify course rights
hasRoleRights = await verify_user_rights_with_roles(request,"read", current_user.user_id, lecture_id)
@ -80,7 +80,7 @@ async def update_lecture(request: Request,lecture_object: Lecture, lecture_id: s
lectures = request.app.db["lectures"]
lecture = lectures.find_one({"lecture_id": lecture_id})
lecture = await lectures.find_one({"lecture_id": lecture_id})
if lecture:
creationDate = lecture["creationDate"]
@ -91,7 +91,7 @@ async def update_lecture(request: Request,lecture_object: Lecture, lecture_id: s
updated_course = LectureInDB(
lecture_id=lecture_id, coursechapter_id=lecture["coursechapter_id"], creationDate=creationDate, updateDate=str(datetime_object), **lecture_object.dict())
lectures.update_one({"lecture_id": lecture_id}, {
await lectures.update_one({"lecture_id": lecture_id}, {
"$set": updated_course.dict()})
return LectureInDB(**updated_course.dict())
@ -108,13 +108,13 @@ async def delete_lecture(request: Request,lecture_id: str, current_user: PublicU
lectures = request.app.db["lectures"]
lecture = lectures.find_one({"lecture_id": lecture_id})
lecture = await lectures.find_one({"lecture_id": lecture_id})
if not lecture:
raise HTTPException(
status_code=status.HTTP_409_CONFLICT, detail="lecture does not exist")
isDeleted = lectures.delete_one({"lecture_id": lecture_id})
isDeleted = await lectures.delete_one({"lecture_id": lecture_id})
if isDeleted:
return {"detail": "lecture deleted"}
@ -137,11 +137,8 @@ async def get_lectures(request: Request,coursechapter_id: str, current_user: Pub
if not lectures:
raise HTTPException(
status_code=status.HTTP_409_CONFLICT, detail="No lectures found")
status_code=status.HTTP_409_CONFLICT, detail="Course does not exist")
lectures = [LectureInDB(**lecture) for lecture in await lectures.to_list(length=100)]
lectures_list = []
for lecture in lectures:
lectures_list.append(Lecture(**lecture))
return lectures_list
return lectures

View file

@ -44,7 +44,7 @@ async def create_video_lecture(request: Request,name: str, coursechapter_id: st
# create lecture
lecture = LectureInDB(**lecture_object.dict())
lectures.insert_one(lecture.dict())
await lectures.insert_one(lecture.dict())
# upload video
if video_file:
@ -55,7 +55,7 @@ async def create_video_lecture(request: Request,name: str, coursechapter_id: st
# todo : choose whether to update the chapter or not
# update chapter
coursechapters.update_one({"coursechapter_id": coursechapter_id}, {
await coursechapters.update_one({"coursechapter_id": coursechapter_id}, {
"$addToSet": {"lectures": lecture_id}})
return lecture

View file

@ -131,7 +131,7 @@ async def get_houses(request: Request,page: int = 1, limit: int = 10):
# get all houses from database
all_houses = houses.find().sort("name", 1).skip(10 * (page - 1)).limit(limit)
return [json.loads(json.dumps(house, default=str)) for house in all_houses]
return [json.loads(json.dumps(house, default=str)) for house in await all_houses.to_list(length=limit)]
#### Security ####################################################

View file

@ -26,7 +26,7 @@ async def create_initial_data(request: Request):
########################################
database_users = request.app.db["users"]
database_users.delete_many({})
await database_users.delete_many({})
users = []
admin_user = UserWithPassword(
@ -53,7 +53,7 @@ async def create_initial_data(request: Request):
# find admin user
users = request.app.db["users"]
admin_user = users.find_one({"username": "admin"})
admin_user = await users.find_one({"username": "admin"})
if admin_user:
admin_user = UserInDB(**admin_user)
@ -65,7 +65,7 @@ async def create_initial_data(request: Request):
########################################
database_orgs = request.app.db["organizations"]
database_orgs.delete_many({})
await database_orgs.delete_many({})
organizations = []
for i in range(0, 5):
@ -85,7 +85,7 @@ async def create_initial_data(request: Request):
########################################
database_roles = request.app.db["roles"]
database_roles.delete_many({})
await database_roles.delete_many({})
roles = []
admin_role = Role(
@ -117,14 +117,14 @@ async def create_initial_data(request: Request):
database_courses = request.app.db["courses"]
database_chapters = request.app.db["coursechapters"]
database_courses.delete_many({})
database_chapters.delete_many({})
await database_courses.delete_many({})
await database_chapters.delete_many({})
courses = []
orgs = request.app.db["organizations"]
if orgs.count_documents({}) > 0:
for org in orgs.find():
if await orgs.count_documents({}) > 0:
for org in await orgs.find().to_list(length=100):
for i in range(0, 5):
# get image in BinaryIO format from unsplash and save it to disk
@ -161,7 +161,7 @@ async def create_initial_data(request: Request):
course.thumbnail = name_in_disk
course = CourseInDB(**course.dict())
course_in_db = courses.insert_one(course.dict())
course_in_db = await courses.insert_one(course.dict())
# create chapters
for i in range(0, 5):

View file

@ -37,7 +37,7 @@ class PublicOrganization(Organization):
async def get_organization(request: Request, org_id: str):
orgs = request.app.db["organizations"]
org = orgs.find_one({"org_id": org_id})
org = await orgs.find_one({"org_id": org_id})
if not org:
raise HTTPException(
@ -50,7 +50,7 @@ async def get_organization(request: Request, org_id: str):
async def get_organization_by_slug(request: Request, org_slug: str):
orgs = request.app.db["organizations"]
org = orgs.find_one({"slug": org_slug})
org = await orgs.find_one({"slug": org_slug})
if not org:
raise HTTPException(
@ -64,7 +64,7 @@ async def create_org(request: Request, org_object: Organization, current_user: P
orgs = request.app.db["organizations"]
# find if org already exists using name
isOrgAvailable = orgs.find_one({"slug": org_object.slug})
isOrgAvailable = await orgs.find_one({"slug": org_object.slug})
if isOrgAvailable:
raise HTTPException(
@ -77,7 +77,7 @@ async def create_org(request: Request, org_object: Organization, current_user: P
current_user.user_id], admins=[
current_user.user_id], **org_object.dict())
org_in_db = orgs.insert_one(org.dict())
org_in_db = await orgs.insert_one(org.dict())
if not org_in_db:
raise HTTPException(
@ -93,7 +93,7 @@ async def update_org(request: Request, org_object: Organization, org_id: str, cu
orgs = request.app.db["organizations"]
org = orgs.find_one({"org_id": org_id})
org = await orgs.find_one({"org_id": org_id})
if org:
owners = org["owners"]
@ -106,7 +106,7 @@ async def update_org(request: Request, org_object: Organization, org_id: str, cu
updated_org = OrganizationInDB(
org_id=org_id, owners=owners, admins=admins, **org_object.dict())
orgs.update_one({"org_id": org_id}, {"$set": updated_org.dict()})
await orgs.update_one({"org_id": org_id}, {"$set": updated_org.dict()})
return Organization(**updated_org.dict())
@ -117,13 +117,13 @@ async def delete_org(request: Request, org_id: str, current_user: PublicUser):
orgs = request.app.db["organizations"]
org = orgs.find_one({"org_id": org_id})
org = await orgs.find_one({"org_id": org_id})
if not org:
raise HTTPException(
status_code=status.HTTP_409_CONFLICT, detail="Organization does not exist")
isDeleted = orgs.delete_one({"org_id": org_id})
isDeleted = await orgs.delete_one({"org_id": org_id})
if isDeleted:
return {"detail": "Org deleted"}
@ -137,9 +137,9 @@ async def get_orgs_by_user(request: Request, user_id: str, page: int = 1, limit:
# find all orgs where user_id is in owners or admins arrays
all_orgs = orgs.find({"$or": [{"owners": user_id}, {"admins": user_id}]}).sort(
"name", 1).skip(10 * (page - 1)).limit(limit)
"name", 1).skip(10 * (page - 1)).limit(100)
return [json.loads(json.dumps(org, default=str)) for org in all_orgs]
return [json.loads(json.dumps(org, default=str)) for org in await all_orgs.to_list(length=100)]
#### Security ####################################################
@ -147,7 +147,7 @@ async def get_orgs_by_user(request: Request, user_id: str, page: int = 1, limit:
async def verify_org_rights(request: Request, org_id: str, current_user: PublicUser, action: str,):
orgs = request.app.db["organizations"]
org = orgs.find_one({"org_id": org_id})
org = await orgs.find_one({"org_id": org_id})
if not org:
raise HTTPException(

View file

@ -47,7 +47,7 @@ class RoleInDB(Role):
async def get_role(request: Request,role_id: str):
roles = request.app.db["roles"]
role = roles.find_one({"role_id": role_id})
role = await roles.find_one({"role_id": role_id})
if not role:
raise HTTPException(
@ -61,7 +61,7 @@ async def create_role(request: Request,role_object: Role, current_user: PublicUs
roles = request.app.db["roles"]
# find if house already exists using name
isRoleAvailable = roles.find_one({"name": role_object.name})
isRoleAvailable = await roles.find_one({"name": role_object.name})
if isRoleAvailable:
raise HTTPException(
@ -75,7 +75,7 @@ async def create_role(request: Request,role_object: Role, current_user: PublicUs
role = RoleInDB(role_id=role_id, creationDate=str(datetime.now()),
updateDate=str(datetime.now()), **role_object.dict())
role_in_db = roles.insert_one(role.dict())
role_in_db = await roles.insert_one(role.dict())
if not role_in_db:
raise HTTPException(
@ -91,7 +91,7 @@ async def update_role(request: Request,role_object: Role, role_id: str, current_
roles = request.app.db["roles"]
role = roles.find_one({"role_id": role_id})
role = await roles.find_one({"role_id": role_id})
if not role:
raise HTTPException(
@ -100,7 +100,7 @@ async def update_role(request: Request,role_object: Role, role_id: str, current_
updated_role = RoleInDB(
role_id=role_id, updateDate=str(datetime.now()), creationDate=role["creationDate"], **role_object.dict())
roles.update_one({"role_id": role_id}, {"$set": updated_role.dict()})
await roles.update_one({"role_id": role_id}, {"$set": updated_role.dict()})
return RoleInDB(**updated_role.dict())
@ -112,13 +112,13 @@ async def delete_role(request: Request,role_id: str, current_user: PublicUser):
roles = request.app.db["roles"]
role = roles.find_one({"role_id": role_id})
role = await roles.find_one({"role_id": role_id})
if not role:
raise HTTPException(
status_code=status.HTTP_409_CONFLICT, detail="Role does not exist")
isDeleted = roles.delete_one({"role_id": role_id})
isDeleted = await roles.delete_one({"role_id": role_id})
if isDeleted:
return {"detail": "Role deleted"}
@ -133,7 +133,7 @@ async def get_roles(request: Request,page: int = 1, limit: int = 10):
# get all roles from database
all_roles = roles.find().sort("name", 1).skip(10 * (page - 1)).limit(limit)
return [json.loads(json.dumps(role, default=str)) for role in all_roles]
return [json.loads(json.dumps(role, default=str)) for role in await all_roles.to_list(length=limit)]
#### Security ####################################################
@ -141,7 +141,7 @@ async def get_roles(request: Request,page: int = 1, limit: int = 10):
async def verify_user_permissions_on_roles(request: Request,action: str, current_user: PublicUser):
users = request.app.db["users"]
user = users.find_one({"user_id": current_user.user_id})
user = await users.find_one({"user_id": current_user.user_id})
if not user:
raise HTTPException(

View file

@ -42,7 +42,7 @@ async def verify_user_rights_with_roles(request: Request,action: str, user_id: s
# Info: permission actions are: read, create, delete, update
for role in user_roles_cursor:
for role in await user_roles_cursor.to_list(length=100):
user_roles.append(role)
for role in user_roles:

View file

@ -57,7 +57,7 @@ class Role(BaseModel):
async def get_user(request: Request, username: str):
users = request.app.db["users"]
user = users.find_one({"username": username})
user = await users.find_one({"username": username})
if not user:
raise HTTPException(
@ -71,7 +71,7 @@ async def get_profile_metadata(request: Request, user):
users = request.app.db["users"]
roles = request.app.db["roles"]
user = users.find_one({"user_id": user['user_id']})
user = await users.find_one({"user_id": user['user_id']})
if not user:
raise HTTPException(
@ -81,7 +81,7 @@ async def get_profile_metadata(request: Request, user):
user_roles = roles.find({"linked_users": user['user_id']})
user_roles_list = []
for role in user_roles:
for role in await user_roles.to_list(length=100):
print(role)
user_roles_list.append(Role(**role))
@ -94,7 +94,7 @@ async def get_profile_metadata(request: Request, user):
async def get_user_by_userid(request: Request, user_id: str):
users = request.app.db["users"]
user = users.find_one({"user_id": user_id})
user = await users.find_one({"user_id": user_id})
if not user:
raise HTTPException(
@ -107,7 +107,7 @@ async def get_user_by_userid(request: Request, user_id: str):
async def security_get_user(request: Request, email: str):
users = request.app.db["users"]
user = users.find_one({"email": email})
user = await users.find_one({"email": email})
if not user:
raise HTTPException(
@ -119,7 +119,7 @@ async def security_get_user(request: Request, email: str):
async def get_userid_by_username(request: Request, username: str):
users = request.app.db["users"]
user = users.find_one({"username": username})
user = await users.find_one({"username": username})
if not user:
raise HTTPException(
@ -131,8 +131,8 @@ async def get_userid_by_username(request: Request, username: str):
async def update_user(request: Request, user_id: str, user_object: UserWithPassword):
users = request.app.db["users"]
isUserExists = users.find_one({"user_id": user_id})
isUsernameAvailable = users.find_one({"username": user_object.username})
isUserExists = await users.find_one({"user_id": user_id})
isUsernameAvailable = await users.find_one({"username": user_object.username})
if not isUserExists:
raise HTTPException(
@ -153,7 +153,7 @@ async def update_user(request: Request, user_id: str, user_object: UserWithPassw
async def delete_user(request: Request, user_id: str):
users = request.app.db["users"]
isUserAvailable = users.find_one({"user_id": user_id})
isUserAvailable = await users.find_one({"user_id": user_id})
if not isUserAvailable:
raise HTTPException(
@ -167,7 +167,7 @@ async def delete_user(request: Request, user_id: str):
async def create_user(request: Request, user_object: UserWithPassword):
users = request.app.db["users"]
isUserAvailable = users.find_one({"username": user_object.username})
isUserAvailable = await users.find_one({"username": user_object.username})
if isUserAvailable:
raise HTTPException(
@ -184,6 +184,6 @@ async def create_user(request: Request, user_object: UserWithPassword):
user = UserInDB(user_id=user_id, creationDate=str(datetime.now()),
updateDate=str(datetime.now()), **user_object.dict())
user_in_db = users.insert_one(user.dict())
user_in_db = await users.insert_one(user.dict())
return User(**user.dict())