API - update workout file name

remove unneeded use of `mkstemp`
This commit is contained in:
Sam 2023-03-04 19:50:21 +01:00
parent 4aa0c961a3
commit fd927beac7
2 changed files with 36 additions and 34 deletions

View File

@ -1,10 +1,9 @@
import json import json
import os import os
import re
from datetime import datetime from datetime import datetime
from io import BytesIO from io import BytesIO
from typing import Any, Dict, Optional from typing import Any, Dict, Optional
from unittest.mock import Mock from unittest.mock import Mock, patch
import pytest import pytest
from flask import Flask from flask import Flask
@ -300,23 +299,25 @@ class TestPostWorkoutWithGpx(ApiTestCaseMixin, CallArgsMixin):
client, auth_token = self.get_test_client_and_auth_token( client, auth_token = self.get_test_client_and_auth_token(
app, user_1.email app, user_1.email
) )
expected_suffix = self.random_string()
client.post( with patch('secrets.token_urlsafe', return_value=expected_suffix):
'/api/workouts', client.post(
data=dict( '/api/workouts',
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'), data=dict(
data='{"sport_id": 1}', file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
), data='{"sport_id": 1}',
headers=dict( ),
content_type='multipart/form-data', headers=dict(
Authorization=f'Bearer {auth_token}', content_type='multipart/form-data',
), Authorization=f'Bearer {auth_token}',
) ),
)
workout = Workout.query.first() workout = Workout.query.first()
assert re.match( assert (
r'^workouts/1/2018-03-13_12-44-45_1_([\w\d_-]*).gpx$', workout.gpx
workout.gpx, == f"workouts/1/2018-03-13_12-44-45_1_{expected_suffix}.gpx"
) )
def test_it_creates_workout_with_expecting_map_path( def test_it_creates_workout_with_expecting_map_path(
@ -325,23 +326,25 @@ class TestPostWorkoutWithGpx(ApiTestCaseMixin, CallArgsMixin):
client, auth_token = self.get_test_client_and_auth_token( client, auth_token = self.get_test_client_and_auth_token(
app, user_1.email app, user_1.email
) )
expected_suffix = self.random_string()
client.post( with patch('secrets.token_urlsafe', return_value=expected_suffix):
'/api/workouts', client.post(
data=dict( '/api/workouts',
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'), data=dict(
data='{"sport_id": 1}', file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
), data='{"sport_id": 1}',
headers=dict( ),
content_type='multipart/form-data', headers=dict(
Authorization=f'Bearer {auth_token}', content_type='multipart/form-data',
), Authorization=f'Bearer {auth_token}',
) ),
)
workout = Workout.query.first() workout = Workout.query.first()
assert re.match( assert (
r'^workouts/1/2018-03-13_12-44-45_1_([\w\d_-]*).png$', workout.map
workout.map, == f"workouts/1/2018-03-13_12-44-45_1_{expected_suffix}.png"
) )
def test_it_adds_a_workout_with_gpx_without_name( def test_it_adds_a_workout_with_gpx_without_name(

View File

@ -1,5 +1,5 @@
import os import os
import tempfile import secrets
import zipfile import zipfile
from datetime import datetime, timedelta from datetime import datetime, timedelta
from typing import Dict, List, Optional, Tuple, Union from typing import Dict, List, Optional, Tuple, Union
@ -272,9 +272,8 @@ def get_new_file_path(
""" """
if not extension and old_filename: if not extension and old_filename:
extension = f".{old_filename.rsplit('.', 1)[1].lower()}" extension = f".{old_filename.rsplit('.', 1)[1].lower()}"
_, new_filename = tempfile.mkstemp( suffix = secrets.token_urlsafe(8)
prefix=f'{workout_date}_{sport_id}_', suffix=extension new_filename = f"{workout_date}_{sport_id}_{suffix}{extension}"
)
dir_path = os.path.join('workouts', str(auth_user_id)) dir_path = os.path.join('workouts', str(auth_user_id))
file_path = os.path.join(dir_path, new_filename.split('/')[-1]) file_path = os.path.join(dir_path, new_filename.split('/')[-1])
return file_path return file_path