Skip to content

♻️ Moves webserver's projects api models to models_library #4425

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Jun 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions api/specs/webserver/scripts/openapi_projects_crud.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,15 @@
create_openapi_specs,
)
from fastapi import FastAPI, Query, status
from models_library.api_schemas_webserver.projects import (
ProjectCopyOverride,
ProjectCreateNew,
ProjectGet,
ProjectListItem,
ProjectReplace,
ProjectUpdate,
TaskGet,
)
from models_library.generics import Envelope
from models_library.projects import ProjectID
from models_library.rest_pagination import DEFAULT_NUMBER_OF_ITEMS_PER_PAGE, Page
Expand All @@ -29,15 +38,6 @@
_ProjectCreateParams,
_ProjectListParams,
)
from simcore_service_webserver.projects._rest_schemas import (
ProjectCopyOverride,
ProjectCreateNew,
ProjectGet,
ProjectListItem,
ProjectReplace,
ProjectUpdate,
TaskGet,
)

app = FastAPI(redoc_url=None)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import logging

from pydantic import BaseModel, ConstrainedFloat, Field, validate_arguments, validator

_logger = logging.getLogger(__name__)

TaskId = str

ProgressMessage = str


class ProgressPercent(ConstrainedFloat):
ge = 0.0
le = 1.0


class TaskProgress(BaseModel):
"""
Helps the user to keep track of the progress. Progress is expected to be
defined as a float bound between 0.0 and 1.0
"""

message: ProgressMessage = Field(default="")
percent: ProgressPercent = Field(default=0.0)

@validate_arguments
def update(
self,
*,
message: ProgressMessage | None = None,
percent: ProgressPercent | None = None,
) -> None:
"""`percent` must be between 0.0 and 1.0 otherwise ValueError is raised"""
if message:
self.message = message
if percent:
if not (0.0 <= percent <= 1.0):
raise ValueError(f"{percent=} must be in range [0.0, 1.0]")
self.percent = percent

_logger.debug("Progress update: %s", f"{self}")

@classmethod
def create(cls) -> "TaskProgress":
return cls.parse_obj(dict(message="", percent=0.0))

@validator("percent")
@classmethod
def round_value_to_3_digit(cls, v):
return round(v, 3)
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import urllib.parse
from datetime import datetime
from typing import Any

from pydantic import BaseModel, validator

from .base import TaskId, TaskProgress


class TaskStatus(BaseModel):
task_progress: TaskProgress
done: bool
started: datetime


class TaskResult(BaseModel):
result: Any | None
error: Any | None


class TaskGet(BaseModel):
task_id: TaskId
task_name: str
status_href: str
result_href: str
abort_href: str

@validator("task_name")
@classmethod
def unquote_str(cls, v) -> str:
return urllib.parse.unquote(v)
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,17 @@

from typing import Any

from models_library.utils.change_case import snake_to_camel
from pydantic import BaseModel, Extra
from pydantic import BaseModel, Extra, Field

from ..utils.change_case import snake_to_camel

NOT_REQUIRED = Field(default=None)


class EmptyModel(BaseModel):
# Used to represent body={}
class Config:
extra = Extra.forbid


class InputSchema(BaseModel):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,18 @@

from typing import Any, Literal, TypeAlias

from models_library.emails import LowerCaseEmailStr
from models_library.projects import ClassifierID, DateTimeStr, NodesDict, ProjectID
from models_library.projects_access import AccessRights, GroupIDStr
from models_library.projects_nodes import HttpUrlWithCustomMinLength
from models_library.projects_state import ProjectState
from models_library.projects_ui import StudyUI
from models_library.utils.common_validators import empty_str_to_none, none_to_empty_str
from pydantic import BaseModel, Extra, Field, validator
from servicelib.aiohttp.long_running_tasks.server import TaskGet
from pydantic import Field, validator

from ..rest.schemas_base import InputSchema, OutputSchema
from ._permalink_api import ProjectPermalink

NOT_REQUIRED = Field(default=None)


class EmptyModel(BaseModel):
# Used to represent body={}
class Config:
extra = Extra.forbid
from ..api_schemas_long_running_tasks.tasks import TaskGet
from ..emails import LowerCaseEmailStr
from ..projects import ClassifierID, DateTimeStr, NodesDict, ProjectID
from ..projects_access import AccessRights, GroupIDStr
from ..projects_nodes import HttpUrlWithCustomMinLength
from ..projects_state import ProjectState
from ..projects_ui import StudyUI
from ..utils.common_validators import empty_str_to_none, none_to_empty_str
from ._base import NOT_REQUIRED, EmptyModel, InputSchema, OutputSchema
from .projects_permalink import ProjectPermalink


class ProjectCreateNew(InputSchema):
Expand Down Expand Up @@ -123,8 +115,9 @@ class ProjectUpdate(InputSchema):


__all__: tuple[str, ...] = (
"ProjectCreateNew",
"EmptyModel",
"ProjectCopyOverride",
"ProjectCreateNew",
"ProjectGet",
"ProjectListItem",
"ProjectReplace",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from pydantic import BaseModel, HttpUrl


class ProjectPermalink(BaseModel):
url: HttpUrl
is_public: bool
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@


import pytest
from models_library.api_schemas_webserver.projects import (
ProjectCreateNew,
ProjectGet,
ProjectListItem,
ProjectReplace,
TaskProjectGet,
)
from models_library.generics import Envelope
from models_library.rest_pagination import Page
from pydantic import parse_obj_as
Expand All @@ -19,13 +26,6 @@
REPLACE_PROJECT_ON_MODIFIED,
HttpApiCallCapture,
)
from simcore_service_webserver.projects._rest_schemas import (
ProjectCreateNew,
ProjectGet,
ProjectListItem,
ProjectReplace,
TaskProjectGet,
)


@pytest.mark.parametrize(
Expand Down
4 changes: 4 additions & 0 deletions packages/service-library/requirements/_base.in
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
--constraint ../../../requirements/constraints.txt
--constraint ./constraints.txt

# intra-repo required dependencies
--requirement ../../../packages/models-library/requirements/_base.in
--requirement ../../../packages/settings-library/requirements/_base.in

aiodebug
aiodocker
aiofiles
Expand Down
1 change: 1 addition & 0 deletions packages/service-library/requirements/ci.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
--requirement _test.txt

# installs this repo's packages
../models-library/
../settings-library/
../pytest-simcore/

Expand Down
1 change: 1 addition & 0 deletions packages/service-library/requirements/ci[aiohttp].txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
--requirement _test.txt

# installs this repo's packages
../models-library/
../settings-library/
../pytest-simcore/

Expand Down
1 change: 1 addition & 0 deletions packages/service-library/requirements/ci[all].txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
--requirement _test.txt

# installs this repo's packages
../models-library/
../settings-library/
../pytest-simcore/

Expand Down
1 change: 1 addition & 0 deletions packages/service-library/requirements/ci[fastapi].txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
--requirement _test.txt

# installs this repo's packages
../models-library/
../settings-library/
../pytest-simcore/

Expand Down
1 change: 1 addition & 0 deletions packages/service-library/requirements/dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
--requirement _tools.txt

# installs this repo's packages
--editable ../models-library/
--editable ../settings-library/
--editable ../pytest-simcore/

Expand Down
1 change: 1 addition & 0 deletions packages/service-library/requirements/dev[aiohttp].txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
--requirement _tools.txt

# installs this repo's packages
--editable ../models-library/
--editable ../settings-library/
--editable ../pytest-simcore/

Expand Down
1 change: 1 addition & 0 deletions packages/service-library/requirements/dev[all].txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
--requirement _tools.txt

# installs this repo's packages
--editable ../models-library/
--editable ../settings-library/
--editable ../pytest-simcore/

Expand Down
1 change: 1 addition & 0 deletions packages/service-library/requirements/dev[fastapi].txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
--requirement _tools.txt

# installs this repo's packages
--editable ../models-library/
--editable ../settings-library/
--editable ../pytest-simcore/

Expand Down
Loading