API - refactor + typing errors fix
This commit is contained in:
parent
25bdb215cb
commit
c902bdb911
@ -5,7 +5,7 @@ from flask import Flask
|
|||||||
|
|
||||||
class TestHealthCheck:
|
class TestHealthCheck:
|
||||||
def test_it_returns_pong_on_health_check(self, app: Flask) -> None:
|
def test_it_returns_pong_on_health_check(self, app: Flask) -> None:
|
||||||
""" => Ensure the /health_check route behaves correctly."""
|
"""=> Ensure the /health_check route behaves correctly."""
|
||||||
client = app.test_client()
|
client = app.test_client()
|
||||||
response = client.get('/api/ping')
|
response = client.get('/api/ping')
|
||||||
data = json.loads(response.data.decode())
|
data = json.loads(response.data.decode())
|
||||||
|
@ -528,7 +528,7 @@ def edit_picture(auth_user_id: int) -> Union[Dict, HttpResponse]:
|
|||||||
return response_object
|
return response_object
|
||||||
|
|
||||||
file = request.files['file']
|
file = request.files['file']
|
||||||
filename = secure_filename(file.filename)
|
filename = secure_filename(file.filename) # type: ignore
|
||||||
dirpath = os.path.join(
|
dirpath = os.path.join(
|
||||||
current_app.config['UPLOAD_FOLDER'], 'pictures', str(auth_user_id)
|
current_app.config['UPLOAD_FOLDER'], 'pictures', str(auth_user_id)
|
||||||
)
|
)
|
||||||
|
@ -122,12 +122,8 @@ def get_users(auth_user_id: int) -> Dict:
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
params = request.args.copy()
|
params = request.args.copy()
|
||||||
page = 1 if 'page' not in params.keys() else int(params.get('page'))
|
page = int(params.get('page', 1))
|
||||||
per_page = (
|
per_page = int(params.get('per_page', USER_PER_PAGE))
|
||||||
int(params.get('per_page'))
|
|
||||||
if params.get('per_page')
|
|
||||||
else USER_PER_PAGE
|
|
||||||
)
|
|
||||||
if per_page > 50:
|
if per_page > 50:
|
||||||
per_page = 50
|
per_page = 50
|
||||||
order_by = params.get('order_by')
|
order_by = params.get('order_by')
|
||||||
@ -364,7 +360,7 @@ def update_user(
|
|||||||
:statuscode 500:
|
:statuscode 500:
|
||||||
"""
|
"""
|
||||||
user_data = request.get_json()
|
user_data = request.get_json()
|
||||||
if 'admin' not in user_data:
|
if not user_data or user_data.get('admin') is None:
|
||||||
return InvalidPayloadErrorResponse()
|
return InvalidPayloadErrorResponse()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -21,7 +21,7 @@ def verify_extension_and_size(
|
|||||||
return InvalidPayloadErrorResponse('No file part.', 'fail')
|
return InvalidPayloadErrorResponse('No file part.', 'fail')
|
||||||
|
|
||||||
file = req.files['file']
|
file = req.files['file']
|
||||||
if file.filename == '':
|
if not file.filename or file.filename == '':
|
||||||
return InvalidPayloadErrorResponse('No selected file.', 'fail')
|
return InvalidPayloadErrorResponse('No selected file.', 'fail')
|
||||||
|
|
||||||
allowed_extensions = (
|
allowed_extensions = (
|
||||||
|
@ -16,7 +16,7 @@ from fittrackee.users.decorators import authenticate, authenticate_as_admin
|
|||||||
from fittrackee.users.models import User
|
from fittrackee.users.models import User
|
||||||
|
|
||||||
from .models import Sport, Workout
|
from .models import Sport, Workout
|
||||||
from .utils import get_datetime_with_tz, get_upload_dir_size
|
from .utils import get_datetime_from_request_args, get_upload_dir_size
|
||||||
from .utils_format import convert_timedelta_to_integer
|
from .utils_format import convert_timedelta_to_integer
|
||||||
|
|
||||||
stats_blueprint = Blueprint('stats', __name__)
|
stats_blueprint = Blueprint('stats', __name__)
|
||||||
@ -34,16 +34,7 @@ def get_workouts(
|
|||||||
return UserNotFoundErrorResponse()
|
return UserNotFoundErrorResponse()
|
||||||
|
|
||||||
params = request.args.copy()
|
params = request.args.copy()
|
||||||
date_from = params.get('from')
|
date_from, date_to = get_datetime_from_request_args(params, user)
|
||||||
if date_from:
|
|
||||||
date_from = datetime.strptime(date_from, '%Y-%m-%d')
|
|
||||||
_, date_from = get_datetime_with_tz(user.timezone, date_from)
|
|
||||||
date_to = params.get('to')
|
|
||||||
if date_to:
|
|
||||||
date_to = datetime.strptime(
|
|
||||||
f'{date_to} 23:59:59', '%Y-%m-%d %H:%M:%S'
|
|
||||||
)
|
|
||||||
_, date_to = get_datetime_with_tz(user.timezone, date_to)
|
|
||||||
sport_id = params.get('sport_id')
|
sport_id = params.get('sport_id')
|
||||||
time = params.get('time')
|
time = params.get('time')
|
||||||
|
|
||||||
|
@ -50,6 +50,25 @@ def get_datetime_with_tz(
|
|||||||
return workout_date_tz, workout_date
|
return workout_date_tz, workout_date
|
||||||
|
|
||||||
|
|
||||||
|
def get_datetime_from_request_args(
|
||||||
|
params: Dict, user: User
|
||||||
|
) -> Tuple[Optional[datetime], Optional[datetime]]:
|
||||||
|
date_from = None
|
||||||
|
date_to = None
|
||||||
|
|
||||||
|
date_from_str = params.get('from')
|
||||||
|
if date_from_str:
|
||||||
|
date_from = datetime.strptime(date_from_str, '%Y-%m-%d')
|
||||||
|
_, date_from = get_datetime_with_tz(user.timezone, date_from)
|
||||||
|
date_to_str = params.get('to')
|
||||||
|
if date_to_str:
|
||||||
|
date_to = datetime.strptime(
|
||||||
|
f'{date_to_str} 23:59:59', '%Y-%m-%d %H:%M:%S'
|
||||||
|
)
|
||||||
|
_, date_to = get_datetime_with_tz(user.timezone, date_to)
|
||||||
|
return date_from, date_to
|
||||||
|
|
||||||
|
|
||||||
def update_workout_data(
|
def update_workout_data(
|
||||||
workout: Union[Workout, WorkoutSegment], gpx_data: Dict
|
workout: Union[Workout, WorkoutSegment], gpx_data: Dict
|
||||||
) -> Union[Workout, WorkoutSegment]:
|
) -> Union[Workout, WorkoutSegment]:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
from datetime import datetime, timedelta
|
from datetime import timedelta
|
||||||
from typing import Any, Dict, List, Optional, Tuple, Union
|
from typing import Any, Dict, List, Optional, Tuple, Union
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
@ -31,7 +31,7 @@ from .utils import (
|
|||||||
create_workout,
|
create_workout,
|
||||||
edit_workout,
|
edit_workout,
|
||||||
get_absolute_file_path,
|
get_absolute_file_path,
|
||||||
get_datetime_with_tz,
|
get_datetime_from_request_args,
|
||||||
process_files,
|
process_files,
|
||||||
)
|
)
|
||||||
from .utils_format import convert_in_duration
|
from .utils_format import convert_in_duration
|
||||||
@ -196,17 +196,8 @@ def get_workouts(auth_user_id: int) -> Union[Dict, HttpResponse]:
|
|||||||
try:
|
try:
|
||||||
user = User.query.filter_by(id=auth_user_id).first()
|
user = User.query.filter_by(id=auth_user_id).first()
|
||||||
params = request.args.copy()
|
params = request.args.copy()
|
||||||
page = 1 if 'page' not in params.keys() else int(params.get('page'))
|
page = int(params.get('page', 1))
|
||||||
date_from = params.get('from')
|
date_from, date_to = get_datetime_from_request_args(params, user)
|
||||||
if date_from:
|
|
||||||
date_from = datetime.strptime(date_from, '%Y-%m-%d')
|
|
||||||
_, date_from = get_datetime_with_tz(user.timezone, date_from)
|
|
||||||
date_to = params.get('to')
|
|
||||||
if date_to:
|
|
||||||
date_to = datetime.strptime(
|
|
||||||
f'{date_to} 23:59:59', '%Y-%m-%d %H:%M:%S'
|
|
||||||
)
|
|
||||||
_, date_to = get_datetime_with_tz(user.timezone, date_to)
|
|
||||||
distance_from = params.get('distance_from')
|
distance_from = params.get('distance_from')
|
||||||
distance_to = params.get('distance_to')
|
distance_to = params.get('distance_to')
|
||||||
duration_from = params.get('duration_from')
|
duration_from = params.get('duration_from')
|
||||||
@ -217,11 +208,7 @@ def get_workouts(auth_user_id: int) -> Union[Dict, HttpResponse]:
|
|||||||
max_speed_to = params.get('max_speed_to')
|
max_speed_to = params.get('max_speed_to')
|
||||||
order = params.get('order')
|
order = params.get('order')
|
||||||
sport_id = params.get('sport_id')
|
sport_id = params.get('sport_id')
|
||||||
per_page = (
|
per_page = int(params.get('per_page', DEFAULT_WORKOUTS_PER_PAGE))
|
||||||
int(params.get('per_page'))
|
|
||||||
if params.get('per_page')
|
|
||||||
else DEFAULT_WORKOUTS_PER_PAGE
|
|
||||||
)
|
|
||||||
if per_page > MAX_WORKOUTS_PER_PAGE:
|
if per_page > MAX_WORKOUTS_PER_PAGE:
|
||||||
per_page = MAX_WORKOUTS_PER_PAGE
|
per_page = MAX_WORKOUTS_PER_PAGE
|
||||||
workouts = (
|
workouts = (
|
||||||
|
Loading…
Reference in New Issue
Block a user