Skip to content

Commit c890385

Browse files
authored
Merge pull request #168 from PROCOLLAB-github/feature/files
Feature/files
2 parents 351095c + 70e0c34 commit c890385

7 files changed

Lines changed: 32 additions & 21 deletions

File tree

.github/workflows/django-test.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ jobs:
1313
steps:
1414
- uses: actions/checkout@v2
1515

16-
- name: Set up Python 3.9
16+
- name: Set up Python 3.11
1717
uses: actions/setup-python@v2
1818
with:
19-
python-version: 3.9
19+
python-version: 3.11
2020

2121
- name: cache poetry install
2222
uses: actions/cache@v2

.github/workflows/lints.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
runs-on: ubuntu-latest
1414
strategy:
1515
matrix:
16-
python-version: [3.9]
16+
python-version: [3.11]
1717
steps:
1818
- uses: actions/checkout@v3
1919
- name: Set up Python ${{ matrix.python-version }}

.github/workflows/release-ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ jobs:
1111
steps:
1212
- uses: actions/checkout@v2
1313

14-
- name: Set up Python 3.9
14+
- name: Set up Python 3.11
1515
uses: actions/setup-python@v2
1616
with:
17-
python-version: 3.9
17+
python-version: 3.11
1818

1919
- name: cache poetry install
2020
uses: actions/cache@v2

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM python:3.9
1+
FROM python:3.11
22

33
RUN apt update --no-install-recommends -y
44

files/admin.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,12 @@ def save_model(self, request, obj, form, change):
6565
url, info = file_api.upload()
6666
obj.link = url
6767
obj.user = request.user
68-
obj.name = info["name"]
69-
obj.size = info["size"]
70-
obj.extension = info["extension"]
71-
obj.mime_type = info["mime_type"]
68+
obj.name = info.name
69+
obj.size = info.size
70+
obj.extension = info.extension
71+
obj.mime_type = info.mime_type
7272
super().save_model(request, obj, form, change)
73+
74+
def delete_model(self, request, obj):
75+
FileAPI.delete(obj.link)
76+
obj.delete()

files/helpers.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from django.core.files.uploadedfile import TemporaryUploadedFile, InMemoryUploadedFile
77

88
from files.exceptions import SelectelUploadError
9+
from files.typings import UserFileInfo
910

1011
from procollab.settings import (
1112
DEBUG,
@@ -33,25 +34,19 @@ def delete(url: str) -> int:
3334
response = requests.delete(url, headers={"X-Auth-Token": token})
3435
return response.status_code
3536

36-
def upload(self) -> tuple[str, dict]:
37+
def upload(self) -> tuple[str, UserFileInfo]:
3738
url = self._upload_via_selectel_swift()
38-
# todo: type hints for this dummy dict
3939
info = self.get_file_info(self.file)
4040
self.file_object.close()
4141
return url, info
4242

4343
def get_file_info(
4444
self, file: Union[TemporaryUploadedFile, InMemoryUploadedFile]
45-
) -> dict:
45+
) -> UserFileInfo:
4646
name, ext = file.name.split(".")
47-
48-
# fixme:
49-
return {
50-
"size": file.size,
51-
"name": name,
52-
"extension": ext,
53-
"mime_type": self.get_file_mime_type(),
54-
}
47+
return UserFileInfo(
48+
size=file.size, name=name, extension=ext, mime_type=self.get_file_mime_type()
49+
)
5550

5651
def get_file_mime_type(self):
5752
if isinstance(self.file, InMemoryUploadedFile):

files/typings.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from dataclasses import dataclass
2+
from typing import TypeAlias
3+
4+
Bytes: TypeAlias = int
5+
6+
7+
@dataclass(slots=True, frozen=True)
8+
class UserFileInfo:
9+
size: Bytes
10+
name: str
11+
extension: str
12+
mime_type: str

0 commit comments

Comments
 (0)