Skip to content

Commit 1180c06

Browse files
Merge branch 'master' into improve-celery-task-error-messages-and-improve-taskid-name
2 parents 67993c5 + 3d80890 commit 1180c06

File tree

2 files changed

+57
-13
lines changed

2 files changed

+57
-13
lines changed

services/storage/src/simcore_service_storage/modules/db/file_meta_data.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,12 @@ def _list_filter_with_partial_file_id_stmt(
9494
),
9595
)
9696
)
97+
else:
98+
project_ids = user_or_project_filter.project_ids
99+
if len(project_ids) > 0:
100+
conditions.append(
101+
file_meta_data.c.project_id.in_(f"{_}" for _ in project_ids)
102+
)
97103

98104
# Optional filters
99105
if file_id_prefix:

services/storage/tests/unit/test_db_file_meta_data.py

Lines changed: 51 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from uuid import uuid4
88

9+
import pytest
910
from faker import Faker
1011
from simcore_postgres_database.utils import as_postgres_sql_query_str
1112
from simcore_service_storage.models import UserOrProjectFilter
@@ -14,16 +15,20 @@
1415
)
1516

1617

18+
def _get_sql_stmt_string(func_smt, **kwargs):
19+
print()
20+
print(f"{func_smt.__name__:*^100}")
21+
stmt = func_smt(**kwargs)
22+
print()
23+
stmt_str = as_postgres_sql_query_str(stmt)
24+
print(stmt_str)
25+
print()
26+
return stmt_str
27+
28+
1729
def test_building_sql_statements(faker: Faker):
18-
def _check(func_smt, **kwargs):
19-
print()
20-
print(f"{func_smt.__name__:*^100}")
21-
stmt = func_smt(**kwargs)
22-
print()
23-
print(as_postgres_sql_query_str(stmt))
24-
print()
2530

26-
_check(
31+
_get_sql_stmt_string(
2732
_list_filter_with_partial_file_id_stmt,
2833
user_or_project_filter=UserOrProjectFilter(
2934
user_id=None, project_ids=[uuid4() for _ in range(2)]
@@ -35,7 +40,7 @@ def _check(func_smt, **kwargs):
3540
)
3641
# WHERE file_meta_data.is_directory IS false ORDER BY file_meta_data.created_at ASC
3742

38-
_check(
43+
_get_sql_stmt_string(
3944
_list_filter_with_partial_file_id_stmt,
4045
user_or_project_filter=UserOrProjectFilter(user_id=42, project_ids=[]),
4146
file_id_prefix=None,
@@ -45,7 +50,7 @@ def _check(func_smt, **kwargs):
4550
)
4651
# WHERE file_meta_data.user_id = '42' AND file_meta_data.is_directory IS false ORDER BY file_meta_data.created_at ASC
4752

48-
_check(
53+
_get_sql_stmt_string(
4954
_list_filter_with_partial_file_id_stmt,
5055
user_or_project_filter=UserOrProjectFilter(
5156
user_id=42, project_ids=[uuid4() for _ in range(2)]
@@ -57,7 +62,7 @@ def _check(func_smt, **kwargs):
5762
)
5863
# WHERE (file_meta_data.user_id = '42' OR file_meta_data.project_id IN ('18d5'..., )) AND file_meta_data.is_directory IS false ORDER BY file_meta_data.created_at ASC
5964

60-
_check(
65+
_get_sql_stmt_string(
6166
_list_filter_with_partial_file_id_stmt,
6267
user_or_project_filter=UserOrProjectFilter(
6368
user_id=42, project_ids=[uuid4() for _ in range(2)]
@@ -72,7 +77,7 @@ def _check(func_smt, **kwargs):
7277
# (file_meta_data.user_id = '42' OR file_meta_data.project_id IN ('3cd9704db' ...)) AND file_meta_data.is_directory IS false ORDER BY file_meta_data.created_at ASC LIMIT 10 OFFSET 1
7378

7479
# As used in SimcoreS3DataManager.list_files
75-
_check(
80+
_get_sql_stmt_string(
7681
_list_filter_with_partial_file_id_stmt,
7782
user_or_project_filter=UserOrProjectFilter(user_id=42, project_ids=[]),
7883
file_id_prefix=None,
@@ -82,7 +87,7 @@ def _check(func_smt, **kwargs):
8287
)
8388

8489
# As used in SimcoreS3DataManager.search_owned_files
85-
_check(
90+
_get_sql_stmt_string(
8691
_list_filter_with_partial_file_id_stmt,
8792
user_or_project_filter=UserOrProjectFilter(user_id=42, project_ids=[]),
8893
file_id_prefix="api/",
@@ -92,3 +97,36 @@ def _check(func_smt, **kwargs):
9297
limit=10,
9398
offset=0,
9499
)
100+
101+
102+
@pytest.mark.parametrize(
103+
"user_id,project_ids",
104+
[(None, [uuid4() for _ in range(2)]), (42, []), (42, [uuid4() for _ in range(2)])],
105+
)
106+
def test_list_filter_with_partial_file_id_stmt(user_id, project_ids, faker: Faker):
107+
sql_stmt_string = _get_sql_stmt_string(
108+
_list_filter_with_partial_file_id_stmt,
109+
user_or_project_filter=UserOrProjectFilter(
110+
user_id=user_id, project_ids=project_ids
111+
),
112+
file_id_prefix=None,
113+
partial_file_id=None,
114+
sha256_checksum=None,
115+
is_directory=False,
116+
limit=10,
117+
offset=0,
118+
)
119+
if user_id:
120+
assert f"file_meta_data.user_id = '{user_id}'" in sql_stmt_string
121+
else:
122+
assert "file_meta_data.user_id = " not in sql_stmt_string
123+
if len(project_ids) > 0:
124+
assert "file_meta_data.project_id IN" in sql_stmt_string
125+
else:
126+
assert "file_meta_data.project_id IN" not in sql_stmt_string
127+
if user_id and len(project_ids) > 0:
128+
project_ids_as_strings = [f"'{pid}'" for pid in project_ids]
129+
assert (
130+
f"file_meta_data.user_id = '{user_id}' OR file_meta_data.project_id IN ({', '.join(project_ids_as_strings)})"
131+
in sql_stmt_string
132+
)

0 commit comments

Comments
 (0)