fractal-server 2.0.5__py3-none-any.whl → 2.0.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fractal_server/__init__.py +1 -1
- fractal_server/app/models/__init__.py +0 -4
- fractal_server/app/models/security.py +0 -13
- fractal_server/app/models/v1/__init__.py +10 -9
- fractal_server/app/models/v1/project.py +1 -2
- fractal_server/app/models/v2/project.py +1 -2
- fractal_server/app/routes/api/v1/_aux_functions.py +1 -1
- fractal_server/app/routes/api/v1/project.py +1 -1
- fractal_server/app/runner/executors/slurm/_subprocess_run_as_user.py +1 -1
- fractal_server/config.py +5 -0
- fractal_server/{logger.py → logger/__init__.py} +28 -2
- fractal_server/logger/gunicorn_logger.py +19 -0
- fractal_server/main.py +9 -4
- {fractal_server-2.0.5.dist-info → fractal_server-2.0.6.dist-info}/METADATA +1 -1
- {fractal_server-2.0.5.dist-info → fractal_server-2.0.6.dist-info}/RECORD +18 -17
- {fractal_server-2.0.5.dist-info → fractal_server-2.0.6.dist-info}/LICENSE +0 -0
- {fractal_server-2.0.5.dist-info → fractal_server-2.0.6.dist-info}/WHEEL +0 -0
- {fractal_server-2.0.5.dist-info → fractal_server-2.0.6.dist-info}/entry_points.txt +0 -0
fractal_server/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__VERSION__ = "2.0.
|
1
|
+
__VERSION__ = "2.0.6"
|
@@ -18,9 +18,6 @@ from sqlmodel import Field
|
|
18
18
|
from sqlmodel import Relationship
|
19
19
|
from sqlmodel import SQLModel
|
20
20
|
|
21
|
-
from .linkuserproject import LinkUserProject
|
22
|
-
from .linkuserproject import LinkUserProjectV2
|
23
|
-
|
24
21
|
|
25
22
|
class OAuthAccount(SQLModel, table=True):
|
26
23
|
"""
|
@@ -103,16 +100,6 @@ class UserOAuth(SQLModel, table=True):
|
|
103
100
|
back_populates="user",
|
104
101
|
sa_relationship_kwargs={"lazy": "joined", "cascade": "all, delete"},
|
105
102
|
)
|
106
|
-
project_list: list["Project"] = Relationship( # noqa
|
107
|
-
back_populates="user_list",
|
108
|
-
link_model=LinkUserProject,
|
109
|
-
sa_relationship_kwargs={"lazy": "selectin"},
|
110
|
-
)
|
111
|
-
project_list_v2: list["ProjectV2"] = Relationship( # noqa
|
112
|
-
back_populates="user_list",
|
113
|
-
link_model=LinkUserProjectV2,
|
114
|
-
sa_relationship_kwargs={"lazy": "selectin"},
|
115
|
-
)
|
116
103
|
|
117
104
|
class Config:
|
118
105
|
orm_mode = True
|
@@ -1,12 +1,13 @@
|
|
1
1
|
"""
|
2
2
|
`models` module
|
3
3
|
"""
|
4
|
-
from
|
5
|
-
from .dataset import
|
6
|
-
from .
|
7
|
-
from .job import
|
8
|
-
from .
|
9
|
-
from .
|
10
|
-
from .
|
11
|
-
from .
|
12
|
-
from .workflow import
|
4
|
+
from ..linkuserproject import LinkUserProject # noqa F401
|
5
|
+
from .dataset import Dataset # noqa F401
|
6
|
+
from .dataset import Resource # noqa F401
|
7
|
+
from .job import ApplyWorkflow # noqa F401
|
8
|
+
from .job import JobStatusTypeV1 # noqa F401
|
9
|
+
from .project import Project # noqa F401
|
10
|
+
from .state import State # noqa F401
|
11
|
+
from .task import Task # noqa F401
|
12
|
+
from .workflow import Workflow # noqa F401
|
13
|
+
from .workflow import WorkflowTask # noqa F401
|
@@ -7,9 +7,9 @@ from sqlmodel import Field
|
|
7
7
|
from sqlmodel import Relationship
|
8
8
|
from sqlmodel import SQLModel
|
9
9
|
|
10
|
+
from . import LinkUserProject
|
10
11
|
from ....utils import get_timestamp
|
11
12
|
from ...schemas.v1.project import _ProjectBaseV1
|
12
|
-
from ..linkuserproject import LinkUserProject
|
13
13
|
from ..security import UserOAuth
|
14
14
|
|
15
15
|
|
@@ -23,7 +23,6 @@ class Project(_ProjectBaseV1, SQLModel, table=True):
|
|
23
23
|
|
24
24
|
user_list: list[UserOAuth] = Relationship(
|
25
25
|
link_model=LinkUserProject,
|
26
|
-
back_populates="project_list",
|
27
26
|
sa_relationship_kwargs={
|
28
27
|
"lazy": "selectin",
|
29
28
|
},
|
@@ -7,8 +7,8 @@ from sqlmodel import Field
|
|
7
7
|
from sqlmodel import Relationship
|
8
8
|
from sqlmodel import SQLModel
|
9
9
|
|
10
|
+
from . import LinkUserProjectV2
|
10
11
|
from ....utils import get_timestamp
|
11
|
-
from ..linkuserproject import LinkUserProjectV2
|
12
12
|
from ..security import UserOAuth
|
13
13
|
|
14
14
|
|
@@ -23,7 +23,6 @@ class ProjectV2(SQLModel, table=True):
|
|
23
23
|
|
24
24
|
user_list: list[UserOAuth] = Relationship(
|
25
25
|
link_model=LinkUserProjectV2,
|
26
|
-
back_populates="project_list_v2",
|
27
26
|
sa_relationship_kwargs={
|
28
27
|
"lazy": "selectin",
|
29
28
|
},
|
@@ -12,9 +12,9 @@ from sqlmodel import select
|
|
12
12
|
from sqlmodel.sql.expression import SelectOfScalar
|
13
13
|
|
14
14
|
from ....db import AsyncSession
|
15
|
-
from ....models import LinkUserProject
|
16
15
|
from ....models.v1 import ApplyWorkflow
|
17
16
|
from ....models.v1 import Dataset
|
17
|
+
from ....models.v1 import LinkUserProject
|
18
18
|
from ....models.v1 import Project
|
19
19
|
from ....models.v1 import Task
|
20
20
|
from ....models.v1 import Workflow
|
@@ -18,9 +18,9 @@ from .....logger import set_logger
|
|
18
18
|
from .....syringe import Inject
|
19
19
|
from ....db import AsyncSession
|
20
20
|
from ....db import get_async_db
|
21
|
-
from ....models import LinkUserProject
|
22
21
|
from ....models.v1 import ApplyWorkflow
|
23
22
|
from ....models.v1 import Dataset
|
23
|
+
from ....models.v1 import LinkUserProject
|
24
24
|
from ....models.v1 import Project
|
25
25
|
from ....models.v1 import Workflow
|
26
26
|
from ....runner.set_start_and_last_task_index import (
|
@@ -141,7 +141,7 @@ def _glob_as_user_strict(
|
|
141
141
|
new_output = []
|
142
142
|
known_filenames = [
|
143
143
|
f"{startswith}{suffix}"
|
144
|
-
for suffix in [".args.json", ".metadiff.json", ".err", ".out"]
|
144
|
+
for suffix in [".args.json", ".metadiff.json", ".err", ".out", ".log"]
|
145
145
|
]
|
146
146
|
for filename in output:
|
147
147
|
if filename in known_filenames:
|
fractal_server/config.py
CHANGED
@@ -361,6 +361,11 @@ class Settings(BaseSettings):
|
|
361
361
|
attribute in their input-arguments JSON file.
|
362
362
|
"""
|
363
363
|
|
364
|
+
FRACTAL_API_V1_MODE: Literal["include", "exclude"] = "include"
|
365
|
+
"""
|
366
|
+
Whether to include the v1 API.
|
367
|
+
"""
|
368
|
+
|
364
369
|
###########################################################################
|
365
370
|
# BUSINESS LOGIC
|
366
371
|
###########################################################################
|
@@ -17,8 +17,8 @@ from pathlib import Path
|
|
17
17
|
from typing import Optional
|
18
18
|
from typing import Union
|
19
19
|
|
20
|
-
from
|
21
|
-
from
|
20
|
+
from ..config import get_settings
|
21
|
+
from ..syringe import Inject
|
22
22
|
|
23
23
|
|
24
24
|
LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
@@ -136,3 +136,29 @@ def reset_logger_handlers(logger: logging.Logger) -> None:
|
|
136
136
|
"""
|
137
137
|
close_logger(logger)
|
138
138
|
logger.handlers.clear()
|
139
|
+
|
140
|
+
|
141
|
+
def config_uvicorn_loggers():
|
142
|
+
"""
|
143
|
+
Change the formatter for the uvicorn access/error loggers.
|
144
|
+
|
145
|
+
This is similar to https://stackoverflow.com/a/68864979/19085332. See also
|
146
|
+
https://github.com/tiangolo/fastapi/issues/1508.
|
147
|
+
|
148
|
+
This function is meant to work in two scenarios:
|
149
|
+
|
150
|
+
1. The most relevant case is for a `gunicorn` startup command, with
|
151
|
+
`--access-logfile` and `--error-logfile` options set.
|
152
|
+
2. The case of `fractalctl start` (directly calling `uvicorn`).
|
153
|
+
|
154
|
+
Because of the second use case, we need to check whether uvicorn loggers
|
155
|
+
already have a handler. If not, we skip the formatting.
|
156
|
+
"""
|
157
|
+
|
158
|
+
access_logger = logging.getLogger("uvicorn.access")
|
159
|
+
if len(access_logger.handlers) > 0:
|
160
|
+
access_logger.handlers[0].setFormatter(LOG_FORMATTER)
|
161
|
+
|
162
|
+
error_logger = logging.getLogger("uvicorn.error")
|
163
|
+
if len(error_logger.handlers) > 0:
|
164
|
+
error_logger.handlers[0].setFormatter(LOG_FORMATTER)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
"""
|
2
|
+
This module (which is only executed if `gunicorn` can be imported) subclasses
|
3
|
+
the gunicorn `Logger` class in order to slightly change its log formats.
|
4
|
+
|
5
|
+
This class can be used by including this `gunicorn` command-line option:
|
6
|
+
```
|
7
|
+
--logger-class fractal_server.logger.gunicorn_logger.FractalGunicornLogger
|
8
|
+
```
|
9
|
+
"""
|
10
|
+
|
11
|
+
try:
|
12
|
+
from gunicorn.glogging import Logger as GunicornLogger
|
13
|
+
|
14
|
+
class FractalGunicornLogger(GunicornLogger):
|
15
|
+
error_fmt = r"%(asctime)s - gunicorn.error - %(levelname)s - [pid %(process)d] - %(message)s" # noqa: E501
|
16
|
+
datefmt = r"%Y-%m-%d %H:%M:%S,%u"
|
17
|
+
|
18
|
+
except (ModuleNotFoundError, ImportError):
|
19
|
+
pass
|
fractal_server/main.py
CHANGED
@@ -19,6 +19,7 @@ from fastapi import FastAPI
|
|
19
19
|
|
20
20
|
from .app.security import _create_first_user
|
21
21
|
from .config import get_settings
|
22
|
+
from .logger import config_uvicorn_loggers
|
22
23
|
from .logger import reset_logger_handlers
|
23
24
|
from .logger import set_logger
|
24
25
|
from .syringe import Inject
|
@@ -39,12 +40,15 @@ def collect_routers(app: FastAPI) -> None:
|
|
39
40
|
from .app.routes.admin.v2 import router_admin_v2
|
40
41
|
from .app.routes.auth import router_auth
|
41
42
|
|
43
|
+
settings = Inject(get_settings)
|
44
|
+
|
42
45
|
app.include_router(router_api, prefix="/api")
|
43
|
-
|
46
|
+
if settings.FRACTAL_API_V1_MODE == "include":
|
47
|
+
app.include_router(router_api_v1, prefix="/api/v1")
|
48
|
+
app.include_router(
|
49
|
+
router_admin_v1, prefix="/admin/v1", tags=["V1 Admin area"]
|
50
|
+
)
|
44
51
|
app.include_router(router_api_v2, prefix="/api/v2")
|
45
|
-
app.include_router(
|
46
|
-
router_admin_v1, prefix="/admin/v1", tags=["V1 Admin area"]
|
47
|
-
)
|
48
52
|
app.include_router(
|
49
53
|
router_admin_v2, prefix="/admin/v2", tags=["V2 Admin area"]
|
50
54
|
)
|
@@ -81,6 +85,7 @@ async def __on_startup() -> None:
|
|
81
85
|
callable.
|
82
86
|
"""
|
83
87
|
check_settings()
|
88
|
+
config_uvicorn_loggers()
|
84
89
|
|
85
90
|
|
86
91
|
def start_application() -> FastAPI:
|
@@ -1,15 +1,15 @@
|
|
1
|
-
fractal_server/__init__.py,sha256=
|
1
|
+
fractal_server/__init__.py,sha256=S5hrGn9zHoCPoN-w6jqLkqipFDSl7JkGHq3amd7eoVE,22
|
2
2
|
fractal_server/__main__.py,sha256=CocbzZooX1UtGqPi55GcHGNxnrJXFg5tUU5b3wyFCyo,4958
|
3
3
|
fractal_server/alembic.ini,sha256=MWwi7GzjzawI9cCAK1LW7NxIBQDUqD12-ptJoq5JpP0,3153
|
4
4
|
fractal_server/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
5
|
fractal_server/app/db/__init__.py,sha256=WZEVfdJAX7ZyBM1ngfEGeqWWcjK_NygtCbawpmbwGpU,4042
|
6
|
-
fractal_server/app/models/__init__.py,sha256=
|
6
|
+
fractal_server/app/models/__init__.py,sha256=QGRjxBgk6GzHyyXh_7RuHvpLoe5PTl1g5KLkGqhFYMQ,199
|
7
7
|
fractal_server/app/models/linkuserproject.py,sha256=eQaourbGRshvlMVlKzLYJKHEjfsW1CbWws9yW4eHXhA,567
|
8
|
-
fractal_server/app/models/security.py,sha256=
|
9
|
-
fractal_server/app/models/v1/__init__.py,sha256=
|
8
|
+
fractal_server/app/models/security.py,sha256=0oYj_cqPcQFsPFDyN4OTsqbXsLlXRcweawjP_iSiRI0,2900
|
9
|
+
fractal_server/app/models/v1/__init__.py,sha256=hUI7dEbPaiZGN0IbHW4RSmSicyvtn_xeuevoX7zvUwI,466
|
10
10
|
fractal_server/app/models/v1/dataset.py,sha256=99GDgt7njx8yYQApkImqp_7bHA5HH3ElvbR6Oyj9kVI,2017
|
11
11
|
fractal_server/app/models/v1/job.py,sha256=QLGXcWdVRHaUHQNDapYYlLpEfw4K7QyD8TmcwhrWw2o,3304
|
12
|
-
fractal_server/app/models/v1/project.py,sha256=
|
12
|
+
fractal_server/app/models/v1/project.py,sha256=tf6fniyBH-sb6rBvGiqNl2wgN9ipR4hDEE3OKvxKaoo,804
|
13
13
|
fractal_server/app/models/v1/state.py,sha256=ew7xw3iPzBwUnPlzmsOEMiPbPEMsJn_TyZ5cK93jBRQ,1095
|
14
14
|
fractal_server/app/models/v1/task.py,sha256=3xZqNeFYUqslh8ddMSXF2nO4nIiOD8T5Ij37wY20kss,2782
|
15
15
|
fractal_server/app/models/v1/workflow.py,sha256=dnY5eMaOe3oZv8arn00RNX9qVkBtTLG-vYdWXcQuyo4,3950
|
@@ -17,7 +17,7 @@ fractal_server/app/models/v2/__init__.py,sha256=uLzdInqATSwi0bS_V4vKB-TqFrOFaXux
|
|
17
17
|
fractal_server/app/models/v2/collection_state.py,sha256=nxb042i8tt8rCpmgbFJoBCYWU-34m0HdUfO9YurTp8k,588
|
18
18
|
fractal_server/app/models/v2/dataset.py,sha256=-7sxHEw4IIAvF_uSan7tA3o8hvoakBkQ0SRvqS2iOQU,1455
|
19
19
|
fractal_server/app/models/v2/job.py,sha256=ypJmN-qspkKBGhBG7Mt-HypSQqcQ2EmB4Bzzb2-y550,1535
|
20
|
-
fractal_server/app/models/v2/project.py,sha256=
|
20
|
+
fractal_server/app/models/v2/project.py,sha256=CRBnZ8QITNp6u1f5bMxvi1_mcvEfXpWyitsWB5f7gn8,759
|
21
21
|
fractal_server/app/models/v2/task.py,sha256=9ZPhug3VWyeqgT8wQ9_8ZXQ2crSiiicRipxrxTslOso,3257
|
22
22
|
fractal_server/app/models/v2/workflow.py,sha256=YBgFGCziUgU0aJ5EM3Svu9W2c46AewZO9VBlFCHiSps,1069
|
23
23
|
fractal_server/app/models/v2/workflowtask.py,sha256=3jEkObsSnlI05Pur_dSsXYdJxRqPL60Z7tK5-EJLOks,1532
|
@@ -27,10 +27,10 @@ fractal_server/app/routes/admin/v1.py,sha256=uMupmRkicaoWazX8qSX5fgh00O3MbuSfim8
|
|
27
27
|
fractal_server/app/routes/admin/v2.py,sha256=e0A6RMWfmTO5dVL95XO-P2EljdEwR00FErxahEPzODQ,13757
|
28
28
|
fractal_server/app/routes/api/__init__.py,sha256=EVyZrEq3I_1643QGTPCC5lgCp4xH_auYbrFfogTm4pc,315
|
29
29
|
fractal_server/app/routes/api/v1/__init__.py,sha256=Y2HQdG197J0a7DyQEE2jn53IfxD0EHGhzK1I2JZuEck,958
|
30
|
-
fractal_server/app/routes/api/v1/_aux_functions.py,sha256=
|
30
|
+
fractal_server/app/routes/api/v1/_aux_functions.py,sha256=lFfGJxbJc-Ryah_pPkiTH2SBncWQ15n0iqVFolzIOCM,11976
|
31
31
|
fractal_server/app/routes/api/v1/dataset.py,sha256=HRE-8vPmVkeXf7WFYkI19mDtbY-iJZeJ7PmMiV0LMgY,16923
|
32
32
|
fractal_server/app/routes/api/v1/job.py,sha256=NwXyhvvzdPDor0ts8Im__9-I0P1H943s4NXIRgaz7PM,5436
|
33
|
-
fractal_server/app/routes/api/v1/project.py,sha256=
|
33
|
+
fractal_server/app/routes/api/v1/project.py,sha256=DKQ6n1CPmHqsKieBaJlKnOhKaHWgQTZIA_asJTT9Uxo,15802
|
34
34
|
fractal_server/app/routes/api/v1/task.py,sha256=udbKnenzc-Q10elYCVB9JmOPWATraa9tZi0AaByvWo0,6129
|
35
35
|
fractal_server/app/routes/api/v1/task_collection.py,sha256=mFaYyCWtCPRqvs3j6zx_zaiDXn31Uzoa7UHZS-Lu_L0,8882
|
36
36
|
fractal_server/app/routes/api/v1/workflow.py,sha256=7r9IoIevg_rvYCrerMOsIsUabSOQatxdPCfLdkP0dRs,10942
|
@@ -63,7 +63,7 @@ fractal_server/app/runner/executors/slurm/_batching.py,sha256=1P6CgrAOCK9u_EvNFT
|
|
63
63
|
fractal_server/app/runner/executors/slurm/_check_jobs_status.py,sha256=8d29a7DQ2xoWxoFQCnFfTpHER-qBX8mEatl4Dw5HU_o,1908
|
64
64
|
fractal_server/app/runner/executors/slurm/_executor_wait_thread.py,sha256=J3tjAx33nBgW4eHAXDte7hDs7Oe9FLEZaElEt8inrbg,4421
|
65
65
|
fractal_server/app/runner/executors/slurm/_slurm_config.py,sha256=rF37XDImX1QoWx37MC5hSM9AuY_KfHU5gaWwN4vl4Zk,15552
|
66
|
-
fractal_server/app/runner/executors/slurm/_subprocess_run_as_user.py,sha256=
|
66
|
+
fractal_server/app/runner/executors/slurm/_subprocess_run_as_user.py,sha256=YwfJzZr_y4FL_hirHJdWK0vWzrldjoZZhXVFlO2AOMU,5131
|
67
67
|
fractal_server/app/runner/executors/slurm/executor.py,sha256=267YTDvyeA0yX2n2HffxP8OAu_CQF5uB9K-_AaUG3iU,44655
|
68
68
|
fractal_server/app/runner/executors/slurm/remote.py,sha256=wLziIsGdSMiO-jIXM8x77JRK82g_2hx0iBKTiMghuIo,5852
|
69
69
|
fractal_server/app/runner/filenames.py,sha256=9lwu3yB4C67yiijYw8XIKaLFn3mJUt6_TCyVFM_aZUQ,206
|
@@ -121,13 +121,14 @@ fractal_server/app/schemas/v2/task_collection.py,sha256=sY29NQfJrbjiidmVkVjSIH-2
|
|
121
121
|
fractal_server/app/schemas/v2/workflow.py,sha256=Zzx3e-qgkH8le0FUmAx9UrV5PWd7bj14PPXUh_zgZXM,1827
|
122
122
|
fractal_server/app/schemas/v2/workflowtask.py,sha256=atVuVN4aXsVEOmSd-vyg-8_8OnPmqx-gT75rXcn_AlQ,6552
|
123
123
|
fractal_server/app/security/__init__.py,sha256=wxosoHc3mJYPCdPMyWnRD8w_2OgnKYp2aDkdmwrZh5k,11203
|
124
|
-
fractal_server/config.py,sha256=
|
124
|
+
fractal_server/config.py,sha256=19CnX1Jyw_zYjEvfXJTaypB7Ape7qfFzKX4B1LZmOe0,15167
|
125
125
|
fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
|
126
126
|
fractal_server/images/__init__.py,sha256=xO6jTLE4EZKO6cTDdJsBmK9cdeh9hFTaSbSuWgQg7y4,196
|
127
127
|
fractal_server/images/models.py,sha256=9ipU5h4N6ogBChoB-2vHoqtL0TXOHCv6kRR-fER3mkM,4167
|
128
128
|
fractal_server/images/tools.py,sha256=gxeniYy4Z-cp_ToK2LHPJUTVVUUrdpogYdcBUvBuLiY,2209
|
129
|
-
fractal_server/logger.py,sha256=
|
130
|
-
fractal_server/
|
129
|
+
fractal_server/logger/__init__.py,sha256=Q_e03Lj30VWdCqGBJrKw9A2QEeDbCKC_OOkDQVW9Dyw,5132
|
130
|
+
fractal_server/logger/gunicorn_logger.py,sha256=vb5s7mruCHPkKWGrTTOPyrB_658Y2Z05ECdHhCCBhp0,644
|
131
|
+
fractal_server/main.py,sha256=OostfB8nyFKCySDTnIR64WlHg82eHkoykJgQg6se9xc,3556
|
131
132
|
fractal_server/migrations/README,sha256=4rQvyDfqodGhpJw74VYijRmgFP49ji5chyEemWGHsuw,59
|
132
133
|
fractal_server/migrations/env.py,sha256=bsl0HGZpjhommztgcs7wQ94sJzI1Orgnij97K8P_uyo,2630
|
133
134
|
fractal_server/migrations/script.py.mako,sha256=oMXw9LC3zRbinWWPPDgeZ4z9FJrV2zhRWiYdS5YgNbI,526
|
@@ -162,8 +163,8 @@ fractal_server/tasks/v2/background_operations.py,sha256=MAMBn6W2bhkdK59kfUGiD7a1
|
|
162
163
|
fractal_server/tasks/v2/get_collection_data.py,sha256=Qhf2T_aaqAfqu9_KpUSlXsS7EJoZQbEPEreHHa2jco8,502
|
163
164
|
fractal_server/urls.py,sha256=5o_qq7PzKKbwq12NHSQZDmDitn5RAOeQ4xufu-2v9Zk,448
|
164
165
|
fractal_server/utils.py,sha256=b7WwFdcFZ8unyT65mloFToYuEDXpQoHRcmRNqrhd_dQ,2115
|
165
|
-
fractal_server-2.0.
|
166
|
-
fractal_server-2.0.
|
167
|
-
fractal_server-2.0.
|
168
|
-
fractal_server-2.0.
|
169
|
-
fractal_server-2.0.
|
166
|
+
fractal_server-2.0.6.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
|
167
|
+
fractal_server-2.0.6.dist-info/METADATA,sha256=id7WLlUPHEi6TAgIVSDxZJacFhTvriBOdX86QLLbqPM,4222
|
168
|
+
fractal_server-2.0.6.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
169
|
+
fractal_server-2.0.6.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
|
170
|
+
fractal_server-2.0.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|