8
8
from fastapi import Response
9
9
from fastapi import status
10
10
from fastapi import UploadFile
11
- from packaging .version import InvalidVersion
12
- from packaging .version import parse
13
11
14
12
from fractal_server .app .db import AsyncSession
15
13
from fractal_server .app .db import get_async_db
26
24
logger = set_logger (__name__ )
27
25
28
26
27
+ def get_pkgname_and_version (filename : str ) -> tuple [str , str ]:
28
+ if not filename .endswith (".tar.gz" ):
29
+ raise HTTPException (
30
+ status_code = status .HTTP_422_UNPROCESSABLE_ENTITY ,
31
+ detail = f"{ filename = } does not end with '.tar.gz'." ,
32
+ )
33
+ filename_splitted = filename .split ("-" )
34
+ if len (filename_splitted ) < 2 :
35
+ raise HTTPException (
36
+ status_code = status .HTTP_422_UNPROCESSABLE_ENTITY ,
37
+ detail = (
38
+ f"{ filename = } does not contain a '-' to separate "
39
+ "'pkg_name' from 'version'."
40
+ ),
41
+ )
42
+ pkg_name = filename_splitted [0 ]
43
+ version = filename .removeprefix (f"{ pkg_name } -" ).removesuffix (".tar.gz" )
44
+ return pkg_name , version
45
+
46
+
29
47
@router .post (
30
48
"/collect/pixi/" ,
31
- status_code = 201 ,
49
+ status_code = 202 ,
32
50
# response_model=TaskGroupActivityV2Read,
33
51
)
34
52
async def collect_task_pixi (
@@ -42,20 +60,4 @@ async def collect_task_pixi(
42
60
user : UserOAuth = Depends (current_active_verified_user ),
43
61
db : AsyncSession = Depends (get_async_db ),
44
62
): # -> TaskGroupActivityV2Read:
45
- filename = file .filename
46
- if not filename .endswith (".tar.gz" ):
47
- raise HTTPException (
48
- status_code = status .HTTP_422_UNPROCESSABLE_ENTITY ,
49
- detail = f"{ filename = } does not end with '.tar.gz'." ,
50
- )
51
- pkg_name = filename .split ("-" )[0 ]
52
- version = filename .removeprefix (f"{ pkg_name } -" ).removesuffix (".tar.gz" )
53
- try :
54
- parse (version )
55
- except InvalidVersion :
56
- raise HTTPException (
57
- status_code = status .HTTP_422_UNPROCESSABLE_ENTITY ,
58
- detail = (
59
- f"Detected { pkg_name = } and { version = } , but version is invalid."
60
- ),
61
- )
63
+ pkg_name , version = get_pkgname_and_version (file .filename )
0 commit comments