mbonea-ewallet godwin commited on
Commit
68ce4db
·
1 Parent(s): 03c8825

formatted and added 4 workers

Browse files
App/Analytics/AnalyticsRoutes.py CHANGED
@@ -5,6 +5,3 @@ from App.Users.Model import User
5
  from App.Post.Model import Post
6
 
7
  analytics_router = APIRouter(tags=["Analytics"])
8
-
9
-
10
-
 
5
  from App.Post.Model import Post
6
 
7
  analytics_router = APIRouter(tags=["Analytics"])
 
 
 
App/Analytics/Model.py CHANGED
@@ -12,10 +12,12 @@ class Analytics(orm.Model):
12
  registry = models
13
  fields = {
14
  "id": orm.Integer(primary_key=True),
15
- "user": orm.ForeignKey(User, on_delete=orm.CASCADE,allow_null=True), # Optional for unknown users.
 
 
16
  "post": orm.ForeignKey(User, on_delete=orm.CASCADE),
17
  "ip": orm.String(max_length=100),
18
  "device": orm.String(max_length=100),
19
- "country": orm.String(max_length=100),
20
  "createdAt": orm.DateTime(index=True, default=datetime.datetime.now),
21
  }
 
12
  registry = models
13
  fields = {
14
  "id": orm.Integer(primary_key=True),
15
+ "user": orm.ForeignKey(
16
+ User, on_delete=orm.CASCADE, allow_null=True
17
+ ), # Optional for unknown users.
18
  "post": orm.ForeignKey(User, on_delete=orm.CASCADE),
19
  "ip": orm.String(max_length=100),
20
  "device": orm.String(max_length=100),
21
+ "country": orm.String(max_length=100),
22
  "createdAt": orm.DateTime(index=True, default=datetime.datetime.now),
23
  }
App/Analytics/Schemas.py CHANGED
@@ -11,5 +11,3 @@ class BaseRequest(BaseModel):
11
 
12
  class editRequest(BaseRequest):
13
  updatedAt: datetime = datetime.now()
14
-
15
-
 
11
 
12
  class editRequest(BaseRequest):
13
  updatedAt: datetime = datetime.now()
 
 
App/Authentication.py CHANGED
@@ -1,7 +1,2 @@
1
  from fastapi import APIRouter, status
2
- from fastapi.security import OAuth2PasswordBearer,OAuth2PasswordRequestForm
3
-
4
-
5
-
6
-
7
-
 
1
  from fastapi import APIRouter, status
2
+ from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
 
 
 
 
 
App/CommentLikes/CommentLikesRoutes.py CHANGED
@@ -6,6 +6,7 @@ from App.Post.Model import Post
6
 
7
  commentLikes_router = APIRouter(tags=["CommentLikes"])
8
 
9
- @commentLikes_router.get('/likes/comments/add')
 
10
  async def add_commentLike():
11
- pass
 
6
 
7
  commentLikes_router = APIRouter(tags=["CommentLikes"])
8
 
9
+
10
+ @commentLikes_router.get("/likes/comments/add")
11
  async def add_commentLike():
12
+ pass
App/CommentLikes/Model.py CHANGED
@@ -7,6 +7,7 @@ from App.modelInit import database, models
7
  from App.Users.Model import User
8
  from App.Post.Model import Post
9
 
 
10
  class CommentLike(orm.Model):
11
  tablename = "commentlikes"
12
  registry = models
 
7
  from App.Users.Model import User
8
  from App.Post.Model import Post
9
 
10
+
11
  class CommentLike(orm.Model):
12
  tablename = "commentlikes"
13
  registry = models
App/CommentLikes/Schemas.py CHANGED
@@ -3,13 +3,12 @@ from pydantic import EmailStr, BaseModel
3
  from datetime import date, datetime, time, timedelta
4
 
5
 
6
- class addLike (BaseModel):
7
- postId:int
8
- userId:int
9
 
10
- class deleteLike (BaseModel):
11
- id:int
12
- postId:int
13
- userId:int
14
 
15
-
 
 
 
 
3
  from datetime import date, datetime, time, timedelta
4
 
5
 
6
+ class addLike(BaseModel):
7
+ postId: int
8
+ userId: int
9
 
 
 
 
 
10
 
11
+ class deleteLike(BaseModel):
12
+ id: int
13
+ postId: int
14
+ userId: int
App/Comments/CommentRoutes.py CHANGED
@@ -1,13 +1,12 @@
1
  from fastapi import APIRouter, status
2
- from .Schemas import createComment,editComment,deleteComment,allComments
3
  from .Model import Comment
4
  from App.Users.Model import User
5
  from App.Post.Model import Post
6
  from App.utils import get_user_and_post
7
  import asyncio
8
- postLike_router = APIRouter(tags=["PostLikes"])
9
-
10
 
 
11
 
12
 
13
  comment_router = APIRouter(tags=["Comments"])
@@ -15,8 +14,8 @@ comment_router = APIRouter(tags=["Comments"])
15
 
16
  @comment_router.post("/comment/create")
17
  async def create_comment(comment: createComment):
18
- user,_post = await get_user_and_post(comment)
19
- data = await Comment.objects.create(user=user, content=comment.content,post=_post)
20
  return {"code": 200, "message": "success", "payload": data.__dict__}
21
 
22
 
@@ -38,7 +37,6 @@ async def edit_comment(comment: editComment):
38
 
39
  @comment_router.post("/comment/all")
40
  async def all_comments(comment: allComments):
41
-
42
  user = await User.objects.filter(id=comment.userId).first()
43
  if not user:
44
  return {"code": 400, "message": "User does not exist", "payload": None}
 
1
  from fastapi import APIRouter, status
2
+ from .Schemas import createComment, editComment, deleteComment, allComments
3
  from .Model import Comment
4
  from App.Users.Model import User
5
  from App.Post.Model import Post
6
  from App.utils import get_user_and_post
7
  import asyncio
 
 
8
 
9
+ postLike_router = APIRouter(tags=["PostLikes"])
10
 
11
 
12
  comment_router = APIRouter(tags=["Comments"])
 
14
 
15
  @comment_router.post("/comment/create")
16
  async def create_comment(comment: createComment):
17
+ user, _post = await get_user_and_post(comment)
18
+ data = await Comment.objects.create(user=user, content=comment.content, post=_post)
19
  return {"code": 200, "message": "success", "payload": data.__dict__}
20
 
21
 
 
37
 
38
  @comment_router.post("/comment/all")
39
  async def all_comments(comment: allComments):
 
40
  user = await User.objects.filter(id=comment.userId).first()
41
  if not user:
42
  return {"code": 400, "message": "User does not exist", "payload": None}
App/Comments/Schemas.py CHANGED
@@ -6,19 +6,21 @@ from datetime import date, datetime, time, timedelta
6
  class createComment(BaseModel):
7
  userId: int
8
  content: str
9
- postId:int
10
 
11
 
12
  class editComment(BaseModel):
13
- id:int
14
  userId: int
15
  content: str
16
- postId:int
 
17
 
18
  class deleteComment(BaseModel):
19
- id:int
20
  userId: int
21
- postId:int
 
22
 
23
  class allComments(BaseModel):
24
  userId: int
 
6
  class createComment(BaseModel):
7
  userId: int
8
  content: str
9
+ postId: int
10
 
11
 
12
  class editComment(BaseModel):
13
+ id: int
14
  userId: int
15
  content: str
16
+ postId: int
17
+
18
 
19
  class deleteComment(BaseModel):
20
+ id: int
21
  userId: int
22
+ postId: int
23
+
24
 
25
  class allComments(BaseModel):
26
  userId: int
App/Comments/__pycache__/CommentRoutes.cpython-38.pyc CHANGED
Binary files a/App/Comments/__pycache__/CommentRoutes.cpython-38.pyc and b/App/Comments/__pycache__/CommentRoutes.cpython-38.pyc differ
 
App/Comments/__pycache__/Schemas.cpython-38.pyc CHANGED
Binary files a/App/Comments/__pycache__/Schemas.cpython-38.pyc and b/App/Comments/__pycache__/Schemas.cpython-38.pyc differ
 
App/Post/Model.py CHANGED
@@ -12,7 +12,7 @@ class Post(orm.Model):
12
  registry = models
13
  fields = {
14
  "id": orm.Integer(primary_key=True),
15
- "pageId": orm.Integer(index=True,default=0),
16
  "content": orm.JSON(),
17
  "recommendations": orm.JSON(allow_null=True),
18
  "createdAt": orm.DateTime(index=True, default=datetime.datetime.now),
 
12
  registry = models
13
  fields = {
14
  "id": orm.Integer(primary_key=True),
15
+ "pageId": orm.Integer(index=True, default=0),
16
  "content": orm.JSON(),
17
  "recommendations": orm.JSON(allow_null=True),
18
  "createdAt": orm.DateTime(index=True, default=datetime.datetime.now),
App/Post/PostRoutes.py CHANGED
@@ -1,5 +1,5 @@
1
  from fastapi import APIRouter, status
2
- from .Schemas import createPost,editPost,getPost
3
  from .Model import Post
4
 
5
  post_router = APIRouter(tags=["Posts"])
@@ -7,18 +7,19 @@ post_router = APIRouter(tags=["Posts"])
7
 
8
  @post_router.post("/post/create")
9
  async def create_post(post: createPost):
10
- data=await Post.objects.create(**post.dict())
11
  return {"code": 200, "message": "success", "payload": data.__dict__}
12
 
 
13
  @post_router.post("/post/update")
14
  async def create_post(post: editPost):
15
- temp=await Post.objects.get(id= post.id)
16
- data=await temp.update(recommendations=post.recommendations,content=post.content)
17
  # data=await Post.objects.update(**post.dict())
18
  return {"code": 200, "message": "success", "payload": temp.__dict__}
19
 
20
 
21
  @post_router.post("/post/get")
22
  async def create_post(post: getPost):
23
- data=await Post.objects.get(id=post.id)
24
- return {"code": 200, "message": "success", "payload": data.__dict__}
 
1
  from fastapi import APIRouter, status
2
+ from .Schemas import createPost, editPost, getPost
3
  from .Model import Post
4
 
5
  post_router = APIRouter(tags=["Posts"])
 
7
 
8
  @post_router.post("/post/create")
9
  async def create_post(post: createPost):
10
+ data = await Post.objects.create(**post.dict())
11
  return {"code": 200, "message": "success", "payload": data.__dict__}
12
 
13
+
14
  @post_router.post("/post/update")
15
  async def create_post(post: editPost):
16
+ temp = await Post.objects.get(id=post.id)
17
+ data = await temp.update(recommendations=post.recommendations, content=post.content)
18
  # data=await Post.objects.update(**post.dict())
19
  return {"code": 200, "message": "success", "payload": temp.__dict__}
20
 
21
 
22
  @post_router.post("/post/get")
23
  async def create_post(post: getPost):
24
+ data = await Post.objects.get(id=post.id)
25
+ return {"code": 200, "message": "success", "payload": data.__dict__}
App/Post/Schemas.py CHANGED
@@ -5,15 +5,14 @@ from datetime import date, datetime, time, timedelta
5
 
6
  class editPost(BaseModel):
7
  id: Optional[int]
8
- content:Optional[dict]
9
- recommendations:Optional[dict]
10
 
11
 
12
  class createPost(BaseModel):
13
- content:Optional[dict]
14
- recommendations:Optional[dict]
 
15
 
16
  class getPost(BaseModel):
17
  id: Optional[int]
18
-
19
-
 
5
 
6
  class editPost(BaseModel):
7
  id: Optional[int]
8
+ content: Optional[dict]
9
+ recommendations: Optional[dict]
10
 
11
 
12
  class createPost(BaseModel):
13
+ content: Optional[dict]
14
+ recommendations: Optional[dict]
15
+
16
 
17
  class getPost(BaseModel):
18
  id: Optional[int]
 
 
App/Post/__pycache__/Model.cpython-38.pyc CHANGED
Binary files a/App/Post/__pycache__/Model.cpython-38.pyc and b/App/Post/__pycache__/Model.cpython-38.pyc differ
 
App/Post/__pycache__/PostRoutes.cpython-38.pyc CHANGED
Binary files a/App/Post/__pycache__/PostRoutes.cpython-38.pyc and b/App/Post/__pycache__/PostRoutes.cpython-38.pyc differ
 
App/Post/__pycache__/Schemas.cpython-38.pyc CHANGED
Binary files a/App/Post/__pycache__/Schemas.cpython-38.pyc and b/App/Post/__pycache__/Schemas.cpython-38.pyc differ
 
App/PostLikes/Model.py CHANGED
@@ -15,6 +15,5 @@ class PostLike(orm.Model):
15
  "id": orm.Integer(primary_key=True),
16
  "user": orm.ForeignKey(User, on_delete=orm.CASCADE),
17
  "post": orm.ForeignKey(Post, on_delete=orm.CASCADE),
18
- "createdAt": orm.DateTime(index=True, default=datetime.datetime.now)
19
  }
20
-
 
15
  "id": orm.Integer(primary_key=True),
16
  "user": orm.ForeignKey(User, on_delete=orm.CASCADE),
17
  "post": orm.ForeignKey(Post, on_delete=orm.CASCADE),
18
+ "createdAt": orm.DateTime(index=True, default=datetime.datetime.now),
19
  }
 
App/PostLikes/PostLikesRoutes.py CHANGED
@@ -1,29 +1,31 @@
1
  from fastapi import APIRouter, Depends
2
- from .Schemas import addLike,deleteLike
3
  from .Model import PostLike
4
  from App.Users.Model import User
5
  from App.Post.Model import Post
6
  from App.utils import get_user_and_post
7
  import asyncio
8
- postLike_router = APIRouter(tags=["PostLikes"])
9
-
10
 
 
11
 
12
 
13
  @postLike_router.post("/postLike/add")
14
  async def add_postLike(post: addLike):
15
- user,_post=await get_user_and_post(post) #validate if both the post and user exist
16
- previos =await PostLike.objects.filter(user=user).filter(post=_post).first()
 
 
17
  if previos:
18
  return {"code": 400, "message": "you already liked it", "payload": None}
19
-
20
- data=await PostLike.objects.create(post=_post,user=user)
21
  return {"code": 200, "message": "success", "payload": data.__dict__}
22
 
 
23
  @postLike_router.post("/postLike/delete")
24
  async def create_post(post: deleteLike):
25
- user,_post=await get_user_and_post(post)
26
- data=await PostLike.objects.filter(id=post.id).first()
27
  if not data:
28
  return {"code": 400, "message": "Does not exist", "payload": None}
29
  if user.id == data.user.id and _post.id == data.post.id:
@@ -33,8 +35,8 @@ async def create_post(post: deleteLike):
33
 
34
  @postLike_router.post("/postLike/get")
35
  async def create_post(post: deleteLike):
36
- user,_post=await get_user_and_post(post)
37
- data=await PostLike.objects.filter(id=post.id).first()
38
  if not data:
39
  return {"code": 400, "message": "Does not exist", "payload": None}
40
  if user.id == data.user.id and _post.id == data.post.user.id:
 
1
  from fastapi import APIRouter, Depends
2
+ from .Schemas import addLike, deleteLike
3
  from .Model import PostLike
4
  from App.Users.Model import User
5
  from App.Post.Model import Post
6
  from App.utils import get_user_and_post
7
  import asyncio
 
 
8
 
9
+ postLike_router = APIRouter(tags=["PostLikes"])
10
 
11
 
12
  @postLike_router.post("/postLike/add")
13
  async def add_postLike(post: addLike):
14
+ user, _post = await get_user_and_post(
15
+ post
16
+ ) # validate if both the post and user exist
17
+ previos = await PostLike.objects.filter(user=user).filter(post=_post).first()
18
  if previos:
19
  return {"code": 400, "message": "you already liked it", "payload": None}
20
+
21
+ data = await PostLike.objects.create(post=_post, user=user)
22
  return {"code": 200, "message": "success", "payload": data.__dict__}
23
 
24
+
25
  @postLike_router.post("/postLike/delete")
26
  async def create_post(post: deleteLike):
27
+ user, _post = await get_user_and_post(post)
28
+ data = await PostLike.objects.filter(id=post.id).first()
29
  if not data:
30
  return {"code": 400, "message": "Does not exist", "payload": None}
31
  if user.id == data.user.id and _post.id == data.post.id:
 
35
 
36
  @postLike_router.post("/postLike/get")
37
  async def create_post(post: deleteLike):
38
+ user, _post = await get_user_and_post(post)
39
+ data = await PostLike.objects.filter(id=post.id).first()
40
  if not data:
41
  return {"code": 400, "message": "Does not exist", "payload": None}
42
  if user.id == data.user.id and _post.id == data.post.user.id:
App/PostLikes/Schemas.py CHANGED
@@ -3,14 +3,12 @@ from pydantic import EmailStr, BaseModel
3
  from datetime import date, datetime, time, timedelta
4
 
5
 
6
- class addLike (BaseModel):
7
- postId:int
8
- userId:int
9
 
10
- class deleteLike (BaseModel):
11
- id:int
12
- postId:int
13
- userId:int
14
 
15
-
16
-
 
 
 
3
  from datetime import date, datetime, time, timedelta
4
 
5
 
6
+ class addLike(BaseModel):
7
+ postId: int
8
+ userId: int
9
 
 
 
 
 
10
 
11
+ class deleteLike(BaseModel):
12
+ id: int
13
+ postId: int
14
+ userId: int
App/PostLikes/__pycache__/Model.cpython-38.pyc CHANGED
Binary files a/App/PostLikes/__pycache__/Model.cpython-38.pyc and b/App/PostLikes/__pycache__/Model.cpython-38.pyc differ
 
App/PostLikes/__pycache__/PostLikesRoutes.cpython-38.pyc CHANGED
Binary files a/App/PostLikes/__pycache__/PostLikesRoutes.cpython-38.pyc and b/App/PostLikes/__pycache__/PostLikesRoutes.cpython-38.pyc differ
 
App/PostLikes/__pycache__/Schemas.cpython-38.pyc CHANGED
Binary files a/App/PostLikes/__pycache__/Schemas.cpython-38.pyc and b/App/PostLikes/__pycache__/Schemas.cpython-38.pyc differ
 
App/Settings.py CHANGED
@@ -1,3 +1,3 @@
1
  class Settings:
2
  ALGORITHM = "HS256"
3
- HASH="86c5ceb27e1bf441130299c0209e5f35b88089f62c06b2b09d65772274f12057"
 
1
  class Settings:
2
  ALGORITHM = "HS256"
3
+ HASH = "86c5ceb27e1bf441130299c0209e5f35b88089f62c06b2b09d65772274f12057"
App/Users/UserRoutes.py CHANGED
@@ -2,9 +2,9 @@ from fastapi import APIRouter, status
2
  from .Schemas import BaseRequest
3
  from .Model import User
4
  from sqlalchemy import and_
5
- from fastapi.security import OAuth2PasswordBearer,OAuth2PasswordRequestForm
6
 
7
- oauth_scheme=OAuth2PasswordBearer(tokenUrl='/user/login')
8
  user_router = APIRouter(tags=["User"])
9
 
10
 
 
2
  from .Schemas import BaseRequest
3
  from .Model import User
4
  from sqlalchemy import and_
5
+ from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
6
 
7
+ oauth_scheme = OAuth2PasswordBearer(tokenUrl="/user/login")
8
  user_router = APIRouter(tags=["User"])
9
 
10
 
App/Users/__pycache__/UserRoutes.cpython-38.pyc CHANGED
Binary files a/App/Users/__pycache__/UserRoutes.cpython-38.pyc and b/App/Users/__pycache__/UserRoutes.cpython-38.pyc differ
 
App/__pycache__/utils.cpython-38.pyc CHANGED
Binary files a/App/__pycache__/utils.cpython-38.pyc and b/App/__pycache__/utils.cpython-38.pyc differ
 
App/utils.py CHANGED
@@ -3,12 +3,15 @@ from App.Post.Model import Post
3
  import asyncio
4
  from fastapi import HTTPException
5
 
 
6
  async def get_user_and_post(content):
7
  try:
8
- # user = None
9
- # post = await Post.objects.get(id=content.postId)
10
- # print(post.id)
11
- user,post = await asyncio.gather(*[User.objects.get(id=content.userId), Post.objects.get(id=content.postId)])
 
 
12
  except:
13
  raise HTTPException(status_code=400, detail="Invalid data")
14
- return user,post
 
3
  import asyncio
4
  from fastapi import HTTPException
5
 
6
+
7
  async def get_user_and_post(content):
8
  try:
9
+ # user = None
10
+ # post = await Post.objects.get(id=content.postId)
11
+ # print(post.id)
12
+ user, post = await asyncio.gather(
13
+ *[User.objects.get(id=content.userId), Post.objects.get(id=content.postId)]
14
+ )
15
  except:
16
  raise HTTPException(status_code=400, detail="Invalid data")
17
+ return user, post
Dockerfile CHANGED
@@ -3,5 +3,5 @@ WORKDIR /usr/src/nginx
3
  COPY . .
4
 
5
  RUN python3 -m pip install -r requirements.txt
6
- CMD uvicorn App.app:app --host 0.0.0.0
7
  EXPOSE 8000
 
3
  COPY . .
4
 
5
  RUN python3 -m pip install -r requirements.txt
6
+ CMD gunicorn main:app --workers 4 --host 0.0.0.0
7
  EXPOSE 8000
requirements.txt CHANGED
@@ -14,4 +14,5 @@ Werkzeug==2.2.2
14
  passlib # for password hashing
15
  pydantic[email]
16
  uvicorn==0.21.1
 
17
  python-multipart
 
14
  passlib # for password hashing
15
  pydantic[email]
16
  uvicorn==0.21.1
17
+ gunicorn
18
  python-multipart
stress_test.py ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import asyncio
2
+ import aiohttp
3
+
4
+
5
+ async def send_post_request(session,number=0):
6
+ async with session.post(
7
+ url="https://fastapi-mbonea-mjema.cloud.okteto.net/comment/create",
8
+ json={"userId": 1, "content": f"comment {number}", "postId": 1},
9
+ ) as response:
10
+ response_text = await response.text()
11
+ print(f"Response from {number}: {response_text}")
12
+
13
+
14
+ async def send_post_requests_async():
15
+ async with aiohttp.ClientSession() as session:
16
+ tasks = []
17
+ for number in range(1000):
18
+ tasks.append(asyncio.ensure_future(send_post_request(session,number)))
19
+ await asyncio.gather(*tasks)
20
+
21
+
22
+ if __name__ == "__main__":
23
+ asyncio.run(send_post_requests_async())