Skip to content

Commit f50d471

Browse files
author
JeremyAndress
committed
ADD: pagination:hammer:
1 parent 0de4c6f commit f50d471

File tree

5 files changed

+74
-5
lines changed

5 files changed

+74
-5
lines changed

src/api/gem/user/controller.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from sqlalchemy.orm import Session
22
from utils.logging import logger
3+
from utils.pagination import paginate
34
from models.user import User
45
from schemas.user import UserCreate
56
from schemas.response import Response_SM
@@ -33,3 +34,6 @@ def create_user(db: Session,obj_in: UserCreate):
3334
logger.error(f'error {e}')
3435
return arsene
3536

37+
def get_all_user_cn(db: Session):
38+
user = paginate(db.query(User),1,2)
39+
return user

src/api/gem/user/user.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
from fastapi import APIRouter, Depends, HTTPException
33
from fastapi.security import OAuth2PasswordRequestForm
44
from db.session import get_db
5-
from schemas.user import UserCreate
5+
from schemas.user import UserCreate,UserList
66
from schemas.response import Response_SM
77
from schemas.token import Token
88
from core.security import create_access_token
99
from api.deps import get_current_active_user
1010
from .controller import (
11-
get_by_email, create_user, authenticate
11+
get_by_email, create_user, authenticate,
12+
get_all_user_cn
1213
)
1314
router = APIRouter()
1415

@@ -27,7 +28,17 @@ def login(db: Session = Depends(get_db),form_data: OAuth2PasswordRequestForm = D
2728
"token_type": "bearer",
2829
}
2930

30-
@router.get("/get_user_by_email/")
31+
@router.get("/get_user_by_email/",response_model=UserList)
3132
def user_get(db: Session = Depends(get_db),current_user: UserCreate = Depends(get_current_active_user)):
3233
user = get_by_email(db,'prueba')
33-
return {"user":user}
34+
print(f'user {user}')
35+
print(dir(user))
36+
return user
37+
38+
@router.get("/get_all_user/")
39+
def get_all_user(
40+
db: Session = Depends(get_db),
41+
current_user: UserCreate = Depends(get_current_active_user)
42+
):
43+
user = get_all_user_cn(db)
44+
return user

src/core/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class Settings(BaseSettings):
66
API_V1_STR: str = "/api/v1"
77
PROJECT_NAME: str = "fasatapi-auth"
88
ALGORITHM = "HS256"
9-
ACCESS_TOKEN_EXPIRE_MINUTES: int = 1
9+
ACCESS_TOKEN_EXPIRE_MINUTES: int = 15
1010
SECRET_KEY:str = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"
1111

1212
MYSQL_SERVER: str = os.getenv('MYSQL_SERVER','30.40.0.10:3307')

src/schemas/user.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,7 @@ class UserBase(BaseModel):
99
class UserCreate(UserBase):
1010
password: str
1111

12+
class UserList(UserCreate):
13+
id: int
14+
class Config:
15+
orm_mode = True

src/utils/pagination.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import math
2+
3+
class Page(object):
4+
5+
def __init__(self, items, page, page_size, total):
6+
self.data = items
7+
self.previous_page = None
8+
self.next_page = None
9+
# self.has_previous = page > 1
10+
# if self.has_previous:
11+
# self.previous_page = page - 1
12+
self.previous_page = page - 1 if page > 1 else None
13+
previous_items = (page - 1) * page_size
14+
# self.has_next = previous_items + len(items) < total
15+
# if self.has_next:
16+
# self.next_page = page + 1
17+
has_next = previous_items + len(items) < total
18+
self.next_page = page + 1 if has_next else None
19+
self.total = total
20+
self.pages = int(math.ceil(total / float(page_size)))
21+
22+
23+
def paginate(query, page, page_size):
24+
if page <= 0:
25+
raise AttributeError('page needs to be >= 1')
26+
if page_size <= 0:
27+
raise AttributeError('page_size needs to be >= 1')
28+
items = query.limit(page_size).offset((page - 1) * page_size).all()
29+
# We remove the ordering of the query since it doesn't matter for getting a count and
30+
# might have performance implications as discussed on this Flask-SqlAlchemy issue
31+
# https://github.com/mitsuhiko/flask-sqlalchemy/issues/100
32+
total = query.order_by(None).count()
33+
return Page(items, page, page_size, total)
34+
35+
36+
# def paginate(query, page, per_page=20, error_out=True):
37+
# if error_out and page < 1:
38+
# abort(404)
39+
# items = query.limit(per_page).offset((page - 1) * per_page).all()
40+
# if not items and page != 1 and error_out:
41+
# abort(404)
42+
43+
# # No need to count if we're on the first page and there are fewer
44+
# # items than we expected.
45+
# if page == 1 and len(items) < per_page:
46+
# total = len(items)
47+
# else:
48+
# total = query.order_by(None).count()
49+
50+
# return Pagination(query, page, per_page, total, items)

0 commit comments

Comments
 (0)