Skip to content
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

🎨 make folders optional + improvements ⚠️ #6155

Merged
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d729b90
make folders optional
matusdrobuliak66 Aug 8, 2024
b9cf440
Merge branch 'master' into enable-disable-folders
matusdrobuliak66 Aug 8, 2024
dc27a0a
review @sanderegg
matusdrobuliak66 Aug 8, 2024
48dafdc
Merge branch 'master' into enable-disable-folders
matusdrobuliak66 Aug 13, 2024
993f5de
review @pcrespov
matusdrobuliak66 Aug 13, 2024
ff821ff
review @pcrespov
matusdrobuliak66 Aug 13, 2024
3796b70
Merge branch 'master' into enable-disable-folders
matusdrobuliak66 Aug 13, 2024
fb284ea
improvements
matusdrobuliak66 Aug 13, 2024
d08a5cd
fix open api specs
matusdrobuliak66 Aug 13, 2024
87f1346
adding test
matusdrobuliak66 Aug 13, 2024
0c7c64b
review @pcrespov
matusdrobuliak66 Aug 13, 2024
61bdf2c
Merge branch 'master' into enable-disable-folders
matusdrobuliak66 Aug 13, 2024
8a18da4
adding order by to folders
matusdrobuliak66 Aug 13, 2024
d8a72db
Merge branch 'master' into enable-disable-folders
matusdrobuliak66 Aug 14, 2024
d0b19cd
adding pagination to folders
matusdrobuliak66 Aug 14, 2024
402548d
adding pagination tests
matusdrobuliak66 Aug 14, 2024
e8e2a1f
add filter by product name
matusdrobuliak66 Aug 14, 2024
0fa36a8
add WEBSERVER_FOLDERS env var
matusdrobuliak66 Aug 14, 2024
ba2efa4
fix test
matusdrobuliak66 Aug 14, 2024
3e76b73
Merge branch 'master' into enable-disable-folders
matusdrobuliak66 Aug 14, 2024
203175d
fix camel case
matusdrobuliak66 Aug 14, 2024
fc1e503
fix test
matusdrobuliak66 Aug 14, 2024
1dc0dcc
Merge branch 'master' into enable-disable-folders
matusdrobuliak66 Aug 14, 2024
e4989a0
fix test
matusdrobuliak66 Aug 14, 2024
98a81ab
Merge branch 'enable-disable-folders' of github.com:matusdrobuliak66/…
matusdrobuliak66 Aug 14, 2024
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
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ def convert_to_app_config(app_settings: ApplicationSettings) -> dict[str, Any]:
"users": {"enabled": app_settings.WEBSERVER_USERS is not None},
"version_control": {"enabled": app_settings.WEBSERVER_VERSION_CONTROL},
"wallets": {"enabled": app_settings.WEBSERVER_WALLETS},
"folders": {"enabled": app_settings.WEBSERVER_FOLDERS},
}


Expand Down Expand Up @@ -323,6 +324,7 @@ def _set_if_disabled(field_name, section):
"WEBSERVER_USERS",
"WEBSERVER_VERSION_CONTROL",
"WEBSERVER_WALLETS",
"WEBSERVER_FOLDERS",
):
section_name = settings_name.replace("WEBSERVER_", "").lower()
if section := cfg.get(section_name):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,13 @@ def validate_order_by_field(cls, v):
class Config:
extra = Extra.forbid

@validator("folder_id", pre=True, always=True)
@classmethod
def convert_null_to_none(cls, v):
if v is None or v in ["null", "none"]:
matusdrobuliak66 marked this conversation as resolved.
Show resolved Hide resolved
return None
return v


@routes.post(f"/{VTAG}/folders", name="create_folder")
@login_required
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from servicelib.utils import logged_gather
from simcore_postgres_database.webserver_models import ProjectType as ProjectTypeDB

from ..application_settings import get_application_settings
from ..catalog.client import get_services_for_user_in_product
from . import projects_api
from ._permalink_api import update_or_pop_permalink_in_project
Expand Down Expand Up @@ -59,6 +60,7 @@ async def list_projects(
folder_id: FolderID | None,
) -> tuple[list[ProjectDict], int]:
app = request.app
settings = get_application_settings(app)
db = ProjectDBAPI.get_from_app_context(app)

user_available_services: list[dict] = await get_services_for_user_in_product(
Expand All @@ -68,6 +70,7 @@ async def list_projects(
db_projects, db_project_types, total_number_projects = await db.list_projects(
user_id=user_id,
product_name=product_name,
settings=settings,
filter_by_project_type=ProjectTypeAPI.to_project_type_db(project_type),
filter_by_services=user_available_services,
offset=offset,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from servicelib.mimetype_constants import MIMETYPE_APPLICATION_JSON

from .._meta import api_version_prefix as VTAG
from ..application_settings import get_application_settings
from ..login.decorators import login_required
from ..security.decorators import permission_required
from . import _folders_api, projects_api
Expand Down Expand Up @@ -63,6 +64,10 @@ async def replace_project_folder(request: web.Request):
req_ctx = RequestContext.parse_obj(request)
path_params = parse_request_path_parameters_as(_ProjectsFoldersPathParams, request)

settings = get_application_settings(request.app)
if not settings.WEBSERVER_FOLDERS:
raise RuntimeError("Webserver folders plugin disabled")

# ensure the project exists
await projects_api.get_project_for_user(
request.app,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
from tenacity.asyncio import AsyncRetrying
from tenacity.retry import retry_if_exception_type

from ..application_settings import ApplicationSettings
from ..db.models import projects_to_wallet, study_tags
from ..utils import now_str
from ._comments_db import (
Expand Down Expand Up @@ -322,6 +323,7 @@ async def list_projects( # pylint: disable=too-many-arguments
user_id: PositiveInt,
*,
product_name: str,
settings: ApplicationSettings,
filter_by_project_type: ProjectType | None = None,
filter_by_services: list[dict] | None = None,
only_published: bool | None = False,
Expand Down Expand Up @@ -368,6 +370,10 @@ async def list_projects( # pylint: disable=too-many-arguments
projects.join(projects_to_products, isouter=True)
.join(access_rights_subquery, isouter=True)
.join(folders_to_projects, isouter=True)
if settings.WEBSERVER_FOLDERS
matusdrobuliak66 marked this conversation as resolved.
Show resolved Hide resolved
else projects.join(projects_to_products, isouter=True).join(
access_rights_subquery, isouter=True
)
matusdrobuliak66 marked this conversation as resolved.
Show resolved Hide resolved
)
.where(
(
Expand Down Expand Up @@ -396,13 +402,15 @@ async def list_projects( # pylint: disable=too-many-arguments
# This was added for backward compatibility, including old projects not in the projects_to_products table.
| (projects_to_products.c.product_name.is_(None))
)
& (
(folders_to_projects.c.folder_id == f"{folder_id}")
if folder_id
else (folders_to_projects.c.folder_id.is_(None))
)
)
)
if settings.WEBSERVER_FOLDERS:
matusdrobuliak66 marked this conversation as resolved.
Show resolved Hide resolved
query = query.where(
folders_to_projects.c.folder_id == f"{folder_id}"
if folder_id
else folders_to_projects.c.folder_id.is_(None)
)
matusdrobuliak66 marked this conversation as resolved.
Show resolved Hide resolved

if search:
query = query.join(users, isouter=True)
query = query.where(
Expand Down
Loading