API: activities - minor refactor
This commit is contained in:
parent
436476c55d
commit
d912dfc835
@ -14,6 +14,52 @@ from .utils import get_gpx_info
|
|||||||
activities_blueprint = Blueprint('activities', __name__)
|
activities_blueprint = Blueprint('activities', __name__)
|
||||||
|
|
||||||
|
|
||||||
|
def create_activity_with_gpx(auth_user_id, gpx_data, file_path, sport_id):
|
||||||
|
new_activity = Activity(
|
||||||
|
user_id=auth_user_id,
|
||||||
|
sport_id=sport_id,
|
||||||
|
activity_date=gpx_data['start'],
|
||||||
|
duration=timedelta(seconds=gpx_data['duration'])
|
||||||
|
)
|
||||||
|
new_activity.gpx = file_path
|
||||||
|
new_activity.pauses = timedelta(seconds=gpx_data['stop_time'])
|
||||||
|
new_activity.moving = timedelta(seconds=gpx_data['moving_time'])
|
||||||
|
new_activity.distance = gpx_data['distance']
|
||||||
|
new_activity.min_alt = gpx_data['elevation_min']
|
||||||
|
new_activity.max_alt = gpx_data['elevation_max']
|
||||||
|
new_activity.descent = gpx_data['downhill']
|
||||||
|
new_activity.ascent = gpx_data['uphill']
|
||||||
|
new_activity.max_speed = gpx_data['max_speed']
|
||||||
|
new_activity.ave_speed = gpx_data['average_speed']
|
||||||
|
return new_activity
|
||||||
|
|
||||||
|
|
||||||
|
def create_activity_wo_gpx(auth_user_id, activity_data):
|
||||||
|
new_activity = Activity(
|
||||||
|
user_id=auth_user_id,
|
||||||
|
sport_id=activity_data.get('sport_id'),
|
||||||
|
activity_date=datetime.strptime(
|
||||||
|
activity_data.get('activity_date'), '%Y-%m-%d %H:%M'),
|
||||||
|
duration=timedelta(seconds=activity_data.get('duration'))
|
||||||
|
)
|
||||||
|
new_activity.moving = new_activity.duration
|
||||||
|
new_activity.distance = activity_data.get('distance')
|
||||||
|
new_activity.ave_speed = new_activity.distance / (
|
||||||
|
new_activity.duration.seconds / 3600)
|
||||||
|
new_activity.max_speed = new_activity.ave_speed
|
||||||
|
return new_activity
|
||||||
|
|
||||||
|
|
||||||
|
def get_file_path(auth_user_id, activity_file):
|
||||||
|
filename = secure_filename(activity_file.filename)
|
||||||
|
dir_path = os.path.join(
|
||||||
|
current_app.config['UPLOAD_FOLDER'], 'activities', str(auth_user_id))
|
||||||
|
if not os.path.exists(dir_path):
|
||||||
|
os.makedirs(dir_path)
|
||||||
|
file_path = os.path.join(dir_path, filename)
|
||||||
|
return file_path
|
||||||
|
|
||||||
|
|
||||||
@activities_blueprint.route('/activities', methods=['GET'])
|
@activities_blueprint.route('/activities', methods=['GET'])
|
||||||
@authenticate
|
@authenticate
|
||||||
def get_activities(auth_user_id):
|
def get_activities(auth_user_id):
|
||||||
@ -64,18 +110,6 @@ def get_activity(auth_user_id, activity_id):
|
|||||||
def get_activity_gpx(auth_user_id, activity_id):
|
def get_activity_gpx(auth_user_id, activity_id):
|
||||||
"""Get gpx file for an activity"""
|
"""Get gpx file for an activity"""
|
||||||
activity = Activity.query.filter_by(id=activity_id).first()
|
activity = Activity.query.filter_by(id=activity_id).first()
|
||||||
gpx_content = ''
|
|
||||||
|
|
||||||
message = ''
|
|
||||||
code = 500
|
|
||||||
response_object = {
|
|
||||||
'status': 'error',
|
|
||||||
'message': 'internal error',
|
|
||||||
'data': {
|
|
||||||
'gpx': gpx_content
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if activity:
|
if activity:
|
||||||
if not activity.gpx or activity.gpx == '':
|
if not activity.gpx or activity.gpx == '':
|
||||||
response_object = {
|
response_object = {
|
||||||
@ -84,19 +118,27 @@ def get_activity_gpx(auth_user_id, activity_id):
|
|||||||
activity_id
|
activity_id
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
code = 400
|
return jsonify(response_object), 400
|
||||||
return jsonify(response_object), code
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(activity.gpx, encoding='utf-8') as f:
|
with open(activity.gpx, encoding='utf-8') as f:
|
||||||
gpx_content = gpx_content + f.read()
|
gpx_content = f.read()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
appLog.error(e)
|
appLog.error(e)
|
||||||
return jsonify(response_object), code
|
response_object = {
|
||||||
|
'status': 'error',
|
||||||
|
'message': 'internal error',
|
||||||
|
'data': {
|
||||||
|
'gpx': ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return jsonify(response_object), 500
|
||||||
|
|
||||||
status = 'success'
|
status = 'success'
|
||||||
|
message = ''
|
||||||
code = 200
|
code = 200
|
||||||
else:
|
else:
|
||||||
|
gpx_content = ''
|
||||||
status = 'not found'
|
status = 'not found'
|
||||||
message = 'Activity not found (id: {})'.format(activity_id)
|
message = 'Activity not found (id: {})'.format(activity_id)
|
||||||
code = 404
|
code = 404
|
||||||
@ -115,10 +157,9 @@ def get_activity_gpx(auth_user_id, activity_id):
|
|||||||
@authenticate
|
@authenticate
|
||||||
def post_activity(auth_user_id):
|
def post_activity(auth_user_id):
|
||||||
"""Post an activity"""
|
"""Post an activity"""
|
||||||
code = 400
|
|
||||||
response_object = verify_extension('activity', request)
|
response_object = verify_extension('activity', request)
|
||||||
if response_object['status'] != 'success':
|
if response_object['status'] != 'success':
|
||||||
return jsonify(response_object), code
|
return jsonify(response_object), 400
|
||||||
|
|
||||||
activity_data = json.loads(request.form["data"])
|
activity_data = json.loads(request.form["data"])
|
||||||
if not activity_data or activity_data.get('sport_id') is None:
|
if not activity_data or activity_data.get('sport_id') is None:
|
||||||
@ -129,19 +170,11 @@ def post_activity(auth_user_id):
|
|||||||
return jsonify(response_object), 400
|
return jsonify(response_object), 400
|
||||||
|
|
||||||
activity_file = request.files['file']
|
activity_file = request.files['file']
|
||||||
filename = secure_filename(activity_file.filename)
|
file_path = get_file_path(auth_user_id, activity_file)
|
||||||
dirpath = os.path.join(
|
|
||||||
current_app.config['UPLOAD_FOLDER'],
|
|
||||||
'activities',
|
|
||||||
str(auth_user_id)
|
|
||||||
)
|
|
||||||
if not os.path.exists(dirpath):
|
|
||||||
os.makedirs(dirpath)
|
|
||||||
filepath = os.path.join(dirpath, filename)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
activity_file.save(filepath)
|
activity_file.save(file_path)
|
||||||
gpx_data = get_gpx_info(filepath)
|
gpx_data = get_gpx_info(file_path)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
appLog.error(e)
|
appLog.error(e)
|
||||||
response_object = {
|
response_object = {
|
||||||
@ -151,25 +184,10 @@ def post_activity(auth_user_id):
|
|||||||
return jsonify(response_object), 500
|
return jsonify(response_object), 500
|
||||||
|
|
||||||
try:
|
try:
|
||||||
new_activity = Activity(
|
new_activity = create_activity_with_gpx(
|
||||||
user_id=auth_user_id,
|
auth_user_id, gpx_data, file_path, activity_data.get('sport_id'))
|
||||||
sport_id=activity_data.get('sport_id'),
|
|
||||||
activity_date=gpx_data['start'],
|
|
||||||
duration=timedelta(seconds=gpx_data['duration'])
|
|
||||||
)
|
|
||||||
new_activity.gpx = filepath
|
|
||||||
new_activity.pauses = timedelta(seconds=gpx_data['stop_time'])
|
|
||||||
new_activity.moving = timedelta(seconds=gpx_data['moving_time'])
|
|
||||||
new_activity.distance = gpx_data['distance']
|
|
||||||
new_activity.min_alt = gpx_data['elevation_min']
|
|
||||||
new_activity.max_alt = gpx_data['elevation_max']
|
|
||||||
new_activity.descent = gpx_data['downhill']
|
|
||||||
new_activity.ascent = gpx_data['uphill']
|
|
||||||
new_activity.max_speed = gpx_data['max_speed']
|
|
||||||
new_activity.ave_speed = gpx_data['average_speed']
|
|
||||||
db.session.add(new_activity)
|
db.session.add(new_activity)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
response_object = {
|
response_object = {
|
||||||
'status': 'created',
|
'status': 'created',
|
||||||
'data': {
|
'data': {
|
||||||
@ -204,18 +222,7 @@ def post_activity_no_gpx(auth_user_id):
|
|||||||
return jsonify(response_object), 400
|
return jsonify(response_object), 400
|
||||||
|
|
||||||
try:
|
try:
|
||||||
new_activity = Activity(
|
new_activity = create_activity_wo_gpx(auth_user_id, activity_data)
|
||||||
user_id=auth_user_id,
|
|
||||||
sport_id=activity_data.get('sport_id'),
|
|
||||||
activity_date=datetime.strptime(
|
|
||||||
activity_data.get('activity_date'), '%Y-%m-%d %H:%M'),
|
|
||||||
duration=timedelta(seconds=activity_data.get('duration'))
|
|
||||||
)
|
|
||||||
new_activity.moving = new_activity.duration
|
|
||||||
new_activity.distance = activity_data.get('distance')
|
|
||||||
new_activity.ave_speed = new_activity.distance / (
|
|
||||||
new_activity.duration.seconds / 3600)
|
|
||||||
new_activity.max_speed = new_activity.ave_speed
|
|
||||||
db.session.add(new_activity)
|
db.session.add(new_activity)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user