store files w/ relative path instead of absolute path
This commit is contained in:
parent
88382d72d5
commit
ea545b6a16
@ -12,8 +12,8 @@ from ..users.utils import (
|
||||
)
|
||||
from .models import Activity
|
||||
from .utils import (
|
||||
ActivityException, create_activity, edit_activity, get_chart_data,
|
||||
get_datetime_with_tz, process_files
|
||||
ActivityException, create_activity, edit_activity, get_absolute_file_path,
|
||||
get_chart_data, get_datetime_with_tz, process_files
|
||||
)
|
||||
from .utils_format import convert_in_duration
|
||||
|
||||
@ -139,10 +139,11 @@ def get_activity_data(auth_user_id, activity_id, data_type):
|
||||
return jsonify(response_object), 400
|
||||
|
||||
try:
|
||||
absolute_gpx_filepath = get_absolute_file_path(activity.gpx)
|
||||
if data_type == 'chart':
|
||||
content = get_chart_data(activity.gpx)
|
||||
content = get_chart_data(absolute_gpx_filepath)
|
||||
else: # data_type == 'gpx'
|
||||
with open(activity.gpx, encoding='utf-8') as f:
|
||||
with open(absolute_gpx_filepath, encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
except Exception as e:
|
||||
appLog.error(e)
|
||||
@ -198,7 +199,8 @@ def get_map(map_id):
|
||||
}
|
||||
return jsonify(response_object), 404
|
||||
else:
|
||||
return send_file(activity.map)
|
||||
absolute_map_filepath = get_absolute_file_path(activity.map)
|
||||
return send_file(absolute_map_filepath)
|
||||
except Exception as e:
|
||||
appLog.error(e)
|
||||
response_object = {
|
||||
|
@ -8,6 +8,7 @@ from sqlalchemy.ext.hybrid import hybrid_property
|
||||
from sqlalchemy.orm.session import object_session
|
||||
from sqlalchemy.types import JSON, Enum
|
||||
|
||||
from .utils_files import get_absolute_file_path
|
||||
from .utils_format import convert_in_duration, convert_value_to_integer
|
||||
|
||||
record_types = [
|
||||
@ -298,9 +299,9 @@ def on_activity_delete(mapper, connection, old_record):
|
||||
@listens_for(db.Session, 'after_flush', once=True)
|
||||
def receive_after_flush(session, context):
|
||||
if old_record.map:
|
||||
os.remove(old_record.map)
|
||||
os.remove(get_absolute_file_path(old_record.map))
|
||||
if old_record.gpx:
|
||||
os.remove(old_record.gpx)
|
||||
os.remove(get_absolute_file_path(old_record.gpx))
|
||||
|
||||
|
||||
class ActivitySegment(db.Model):
|
||||
|
@ -14,6 +14,7 @@ from werkzeug.utils import secure_filename
|
||||
|
||||
from ..users.models import User
|
||||
from .models import Activity, ActivitySegment, Sport
|
||||
from .utils_files import get_absolute_file_path
|
||||
from .utils_weather import get_weather
|
||||
|
||||
|
||||
@ -274,7 +275,7 @@ def get_chart_data(gpx_file):
|
||||
return chart_data
|
||||
|
||||
|
||||
def get_file_path(auth_user_id, dir_path, filename):
|
||||
def get_file_path(dir_path, filename):
|
||||
if not os.path.exists(dir_path):
|
||||
os.makedirs(dir_path)
|
||||
file_path = os.path.join(dir_path, filename)
|
||||
@ -290,8 +291,7 @@ def get_new_file_path(
|
||||
prefix=f'{activity_date}_{sport}_',
|
||||
suffix=extension
|
||||
)
|
||||
dir_path = os.path.join(
|
||||
current_app.config['UPLOAD_FOLDER'], 'activities', str(auth_user_id))
|
||||
dir_path = os.path.join('activities', str(auth_user_id))
|
||||
if not os.path.exists(dir_path):
|
||||
os.makedirs(dir_path)
|
||||
file_path = os.path.join(dir_path,
|
||||
@ -313,7 +313,8 @@ def get_map_hash(map_filepath):
|
||||
(maps are sensitive data)
|
||||
"""
|
||||
md5 = hashlib.md5()
|
||||
with open(map_filepath, 'rb') as f:
|
||||
absolute_map_filepath = get_absolute_file_path(map_filepath)
|
||||
with open(absolute_map_filepath, 'rb') as f:
|
||||
for chunk in iter(lambda: f.read(128 * md5.block_size), b''):
|
||||
md5.update(chunk)
|
||||
return md5.hexdigest()
|
||||
@ -329,7 +330,8 @@ def process_one_gpx_file(params, filename):
|
||||
old_filename=filename,
|
||||
sport=params['sport_label']
|
||||
)
|
||||
os.rename(params['file_path'], new_filepath)
|
||||
absolute_gpx_filepath = get_absolute_file_path(new_filepath)
|
||||
os.rename(params['file_path'], absolute_gpx_filepath)
|
||||
gpx_data['filename'] = new_filepath
|
||||
|
||||
map_filepath = get_new_file_path(
|
||||
@ -338,7 +340,8 @@ def process_one_gpx_file(params, filename):
|
||||
extension='.png',
|
||||
sport=params['sport_label']
|
||||
)
|
||||
generate_map(map_filepath, map_data)
|
||||
absolute_map_filepath = get_absolute_file_path(map_filepath)
|
||||
generate_map(absolute_map_filepath, map_data)
|
||||
except (gpxpy.gpx.GPXXMLSyntaxException, TypeError) as e:
|
||||
raise ActivityException('error', 'Error during gpx file parsing.', e)
|
||||
except Exception as e:
|
||||
@ -394,7 +397,7 @@ def process_zip_archive(common_params, extract_dir):
|
||||
def process_files(auth_user_id, activity_data, activity_file, folders):
|
||||
filename = secure_filename(activity_file.filename)
|
||||
extension = f".{filename.rsplit('.', 1)[1].lower()}"
|
||||
file_path = get_file_path(auth_user_id, folders['tmp_dir'], filename)
|
||||
file_path = get_file_path(folders['tmp_dir'], filename)
|
||||
sport = Sport.query.filter_by(id=activity_data.get('sport_id')).first()
|
||||
if not sport:
|
||||
raise ActivityException(
|
||||
|
7
fittrackee_api/fittrackee_api/activities/utils_files.py
Normal file
7
fittrackee_api/fittrackee_api/activities/utils_files.py
Normal file
@ -0,0 +1,7 @@
|
||||
import os
|
||||
|
||||
from flask import current_app
|
||||
|
||||
|
||||
def get_absolute_file_path(relative_path):
|
||||
return os.path.join(current_app.config['UPLOAD_FOLDER'], relative_path)
|
@ -3,6 +3,7 @@ import os
|
||||
from io import BytesIO
|
||||
|
||||
from fittrackee_api.activities.models import Activity
|
||||
from fittrackee_api.activities.utils import get_absolute_file_path
|
||||
|
||||
|
||||
def get_gpx_filepath(activity_id):
|
||||
@ -193,6 +194,7 @@ def test_delete_an_activity_with_gpx_invalid_file(
|
||||
)
|
||||
|
||||
gpx_filepath = get_gpx_filepath(1)
|
||||
gpx_filepath = get_absolute_file_path(gpx_filepath)
|
||||
os.remove(gpx_filepath)
|
||||
|
||||
response = client.delete(
|
||||
|
Loading…
Reference in New Issue
Block a user