Skip to content

Commit

Permalink
Fix some import checks (#1068)
Browse files Browse the repository at this point in the history
* Fix some import checks

* Fix tests
  • Loading branch information
jsangmeister committed Nov 25, 2021
1 parent 0f3176e commit 05796d0
Show file tree
Hide file tree
Showing 6 changed files with 197 additions and 175 deletions.
7 changes: 3 additions & 4 deletions openslides_backend/action/actions/meeting/import_.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,9 @@ def update_instance(self, instance: Dict[str, Any]) -> Dict[str, Any]:
# save blobs from mediafiles
self.mediadata = []
for entry in meeting_json.get("mediafile", {}).values():
if "blob" in entry:
self.mediadata.append(
(entry.pop("blob"), entry["id"], entry["mimetype"])
)
# mediafiles have "blob": None
if blob := entry.pop("blob", None):
self.mediadata.append((blob, entry["id"], entry["mimetype"]))

# check datavalidation
checker = Checker(data=meeting_json, mode="external")
Expand Down
36 changes: 18 additions & 18 deletions openslides_backend/models/checker.py
Original file line number Diff line number Diff line change
Expand Up @@ -677,29 +677,29 @@ def check_calculated_fields(
) -> None:
if collection != "mediafile":
return
if model["is_directory"] and not model.get("parent_id"):
return

access_group_ids = model["access_group_ids"]
parent_is_public = None
parent_inherited_access_group_ids = None
if model.get("parent_id"):
parent = self.find_model(collection, model.get("parent_id", 0))
if parent:
parent_is_public = parent.get("is_public")
parent_inherited_access_group_ids = parent.get(
"inherited_access_group_ids"
)
is_public, inherited_access_group_ids = calculate_inherited_groups_helper(
access_group_ids, parent_is_public, parent_inherited_access_group_ids
parent = self.find_model(collection, model["parent_id"])
# relations are checked beforehand, so parent always exists
assert parent
parent_is_public = parent["is_public"]
parent_inherited_access_group_ids = parent["inherited_access_group_ids"]
is_public, inherited_access_group_ids = calculate_inherited_groups_helper(
access_group_ids, parent_is_public, parent_inherited_access_group_ids
)
if is_public != model["is_public"]:
self.errors.append(
f"{collection}/{model['id']}: is_public is wrong. {is_public} != {model['is_public']}"
)
if set(inherited_access_group_ids) != set(
model["inherited_access_group_ids"] or []
):
self.errors.append(
f"{collection}/{model['id']}: inherited_access_group_ids is wrong"
)
if is_public != model["is_public"]:
self.errors.append(
f"{collection}/{model['id']}: is_public is wrong. {is_public} != {model['is_public']}"
)
if inherited_access_group_ids != model["inherited_access_group_ids"]:
self.errors.append(
f"{collection}/{model['id']}: inherited_access_group_ids is wrong"
)

def find_model(self, collection: str, id: int) -> Optional[Dict[str, Any]]:
return self.data.get(collection, {}).get(str(id))
Expand Down
28 changes: 12 additions & 16 deletions openslides_backend/models/helper.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,21 @@
from typing import Any, Dict, List, Optional, Tuple
from typing import List, Optional, Tuple


def calculate_inherited_groups_helper(
access_group_ids: Optional[List[int]],
parent_is_public: Optional[bool],
parent_inherited_access_group_ids: Optional[List[int]],
) -> Tuple[bool, Optional[List[int]]]:

parent: Dict[str, Any] = dict()
parent["inherited_access_group_ids"] = parent_inherited_access_group_ids
parent["is_public"] = parent_is_public

if not parent["inherited_access_group_ids"]:
inherited_access_group_ids = access_group_ids
elif not access_group_ids:
inherited_access_group_ids = parent.get("inherited_access_group_ids", [])
else:
) -> Tuple[bool, List[int]]:
inherited_access_group_ids: List[int]
if parent_inherited_access_group_ids and access_group_ids:
inherited_access_group_ids = [
id_
for id_ in access_group_ids
if id_ in parent.get("inherited_access_group_ids", [])
id_ for id_ in access_group_ids if id_ in parent_inherited_access_group_ids
]
is_public = not bool(inherited_access_group_ids) and bool(parent["is_public"])
elif access_group_ids:
inherited_access_group_ids = access_group_ids
elif parent_inherited_access_group_ids:
inherited_access_group_ids = parent_inherited_access_group_ids
else:
inherited_access_group_ids = []
is_public = not bool(inherited_access_group_ids) and parent_is_public is not False
return is_public, inherited_access_group_ids
6 changes: 3 additions & 3 deletions openslides_backend/services/media/adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def __init__(self, media_url: str, logging: LoggingModule) -> None:
def _upload(self, file: str, id: int, mimetype: str, subpath: str) -> None:
url = self.media_url + subpath + "/"
payload = {"file": file, "id": id, "mimetype": mimetype}
self.logger.debug("Starting upload of file")
self.logger.debug(f"Starting upload of mediafile/{id} (mimetype: {mimetype})")
self._handle_upload(url, payload, description="Upload of file: ")
self.logger.debug("File successfully uploaded to the media service")

Expand All @@ -42,8 +42,8 @@ def _handle_upload(
) -> None:
try:
response = requests.post(url, json=payload)
except requests.exceptions.ConnectionError:
msg = "Connect to mediaservice failed."
except requests.exceptions.ConnectionError as e:
msg = f"Connect to mediaservice failed. {e}"
self.logger.debug(description + msg)
raise MediaServiceException(msg)

Expand Down
1 change: 1 addition & 0 deletions tests/system/action/meeting/test_clone.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ def test_clone_with_mediafile(self) -> None:
"used_as_font_$_in_meeting_id": [],
"used_as_logo_$_in_meeting_id": [],
"mimetype": "text/plain",
"is_public": True,
},
}
)
Expand Down

0 comments on commit 05796d0

Please sign in to comment.