Skip to content

Commit 918e73e

Browse files
committed
API - store media attachment content type
1 parent d10c233 commit 918e73e

File tree

7 files changed

+24
-1
lines changed

7 files changed

+24
-1
lines changed

fittrackee/config.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from flask import current_app
88

99
from fittrackee import DEFAULT_PRIVACY_POLICY_DATA, VERSION
10+
from fittrackee.constants import IMAGE_CONTENT_TYPES
1011
from fittrackee.languages import SUPPORTED_LANGUAGES
1112
from fittrackee.workouts.constants import WORKOUT_ALLOWED_EXTENSIONS
1213

@@ -34,7 +35,7 @@ class BaseConfig:
3435
UPLOAD_FOLDER = os.path.join(
3536
os.getenv("UPLOAD_FOLDER", current_app.root_path), "uploads"
3637
)
37-
PICTURE_ALLOWED_EXTENSIONS = {"jpeg", "jpg", "png", "gif", "webp"}
38+
PICTURE_ALLOWED_EXTENSIONS = set(IMAGE_CONTENT_TYPES.keys())
3839
WORKOUT_ALLOWED_EXTENSIONS = {"zip"}.union(WORKOUT_ALLOWED_EXTENSIONS)
3940
TILE_SERVER = {
4041
"URL": os.environ.get(

fittrackee/constants.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,12 @@ class PaceSpeedDisplay(str, Enum):
2121
PACE = "pace" # min/km
2222
SPEED = "speed"
2323
PACE_AND_SPEED = "pace_and_speed"
24+
25+
26+
IMAGE_CONTENT_TYPES = {
27+
"gif": "image/gif",
28+
"jpeg": "image/jpeg",
29+
"jpg": "image/jpeg",
30+
"png": "image/png",
31+
"webp": "image/webp",
32+
}

fittrackee/media/media_service.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from PIL import Image, ImageOps
99

1010
from fittrackee import db
11+
from fittrackee.constants import IMAGE_CONTENT_TYPES
1112
from fittrackee.files import get_absolute_file_path, get_file_extension
1213

1314
from .exceptions import MediaException
@@ -108,6 +109,7 @@ def create_image_media(self) -> "Media":
108109
user_id=self.auth_user.id,
109110
file_name=new_filename,
110111
file_size=self.media_file.stream.tell(),
112+
file_content_type=IMAGE_CONTENT_TYPES[extension],
111113
)
112114
media.meta = {
113115
"coordinates": gps_info,

fittrackee/media/models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ class Media(BaseModel):
4747
db.String(255), nullable=False, index=True, unique=True
4848
)
4949
file_size: Mapped[int] = mapped_column()
50+
file_content_type: Mapped[str] = mapped_column(
51+
db.String(10), nullable=False
52+
)
5053
description: Mapped[Optional[str]] = mapped_column(
5154
db.String(MEDIA_DESCRIPTION_MAX_CHARACTERS),
5255
nullable=False,
@@ -61,12 +64,14 @@ def __init__(
6164
user_id: int,
6265
file_name: str,
6366
file_size: int,
67+
file_content_type: str,
6468
created_at: Optional[datetime] = None,
6569
workout_id: Optional[int] = None,
6670
):
6771
self.user_id = user_id
6872
self.file_name = file_name
6973
self.file_size = file_size
74+
self.file_content_type = file_content_type
7075
self.created_at = (
7176
created_at if created_at else datetime.now(timezone.utc)
7277
)

fittrackee/migrations/versions/75_c9d5209ffbcd_add_media.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ def upgrade():
2626
sa.Column('created_at', TZDateTime(), nullable=False),
2727
sa.Column('file_name', sa.String(length=255), nullable=False),
2828
sa.Column('file_size', sa.Integer(), nullable=False),
29+
sa.Column('file_content_type', sa.String(length=10), nullable=False),
2930
sa.Column('description', sa.String(length=1500), server_default=sa.text("''"), nullable=False),
3031
sa.Column('meta', postgresql.JSONB(astext_type=sa.Text()), server_default='{}', nullable=False),
3132
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='CASCADE'),

fittrackee/tests/media/test_media_models.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@ def test_it_creates_media_in_database_with_minimal_data(
3131
user_id=user_1.id,
3232
file_name="img.jpg",
3333
file_size=1024,
34+
file_content_type="image/jpeg",
3435
)
3536
db.session.add(media)
3637
db.session.commit()
3738

3839
assert media.created_at == now
3940
assert media.description == ""
41+
assert media.file_content_type == "image/jpeg"
4042
assert media.file_size == 1024
4143
assert media.user_id == user_1.id
4244
assert media.workout_id is None
@@ -50,6 +52,7 @@ def test_it_creates_media_with_all_data(
5052
user_id=user_1.id,
5153
file_name="img.gif",
5254
file_size=1024,
55+
file_content_type="image/jpeg",
5356
created_at=now,
5457
workout_id=workout_cycling_user_1.id,
5558
)
@@ -58,6 +61,7 @@ def test_it_creates_media_with_all_data(
5861

5962
assert media.created_at == now
6063
assert media.description == ""
64+
assert media.file_content_type == "image/jpeg"
6165
assert media.file_size == 1024
6266
assert media.user_id == user_1.id
6367
assert media.workout_id == workout_cycling_user_1.id

fittrackee/tests/mixins.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,7 @@ def create_media(
708708
user_id=user.id,
709709
file_name=file_name if file_name else f"{uuid4().hex}.jpg",
710710
file_size=file_size,
711+
file_content_type="image/jpeg",
711712
)
712713
db.session.add(media)
713714
media.workout_id = workout_id

0 commit comments

Comments
 (0)