Skip to content

Commit

Permalink
Add migration to fix mistakes from migration 54 (#2633) (#2639)
Browse files Browse the repository at this point in the history
  • Loading branch information
openslides-automation[bot] committed Sep 23, 2024
1 parent 491ae22 commit 10ffe2d
Show file tree
Hide file tree
Showing 4 changed files with 217 additions and 2 deletions.
2 changes: 1 addition & 1 deletion global/data/example-data.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"_migration_index": 56,
"_migration_index": 57,
"organization": {
"1": {
"id": 1,
Expand Down
2 changes: 1 addition & 1 deletion global/data/initial-data.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"_migration_index": 56,
"_migration_index": 57,
"organization": {
"1": {
"id": 1,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from datastore.migrations import BaseModelMigration
from datastore.writer.core import BaseRequestEvent, RequestUpdateEvent

from openslides_backend.shared.patterns import fqid_from_collection_and_id


class Migration(BaseModelMigration):
"""
This migration fixes some fields that were not rewritten in migration 54
"""

target_migration_index = 57
group_fields = [
"access_group_ids",
"inherited_access_group_ids",
]

def migrate_models(self) -> list[BaseRequestEvent] | None:
groups_to_access_groups: dict[int, dict[str, list[int]]] = {
group["id"]: {
"meeting_mediafile_" + field: [] for field in self.group_fields
}
for group in self.reader.get_all("group", ["id"]).values()
}
for mmediafile in self.reader.get_all(
"meeting_mediafile", ["id", *self.group_fields]
).values():
for field in self.group_fields:
for group_id in mmediafile.get(field, []):
groups_to_access_groups[group_id][
"meeting_mediafile_" + field
].append(mmediafile["id"])
return [
RequestUpdateEvent(
fqid_from_collection_and_id("group", group_id),
{
**{"mediafile_" + field: None for field in self.group_fields},
**access_groups,
},
)
for group_id, access_groups in groups_to_access_groups.items()
]
173 changes: 173 additions & 0 deletions tests/system/migrations/test_0056_fix_meeting_mediafile_relations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
def test_migration(write, finalize, assert_model):
write(
{
"type": "create",
"fqid": "meeting/1",
"fields": {"id": 1, "meeting_mediafile_ids": [1, 2], "group_ids": [1]},
},
{
"type": "create",
"fqid": "meeting/2",
"fields": {
"id": 2,
"meeting_mediafile_ids": [3, 4, 6],
"group_ids": [2, 3],
},
},
{
"type": "create",
"fqid": "mediafile/1",
"fields": {"id": 1, "meeting_mediafile_ids": [1, 3]},
},
{
"type": "create",
"fqid": "mediafile/2",
"fields": {"id": 2, "meeting_mediafile_ids": [2]},
},
{
"type": "create",
"fqid": "mediafile/5",
"fields": {"id": 5, "child_ids": [6], "meeting_mediafile_ids": [4]},
},
{
"type": "create",
"fqid": "mediafile/6",
"fields": {"id": 6, "parent_id": 5, "meeting_mediafile_ids": [6]},
},
{
"type": "create",
"fqid": "meeting_mediafile/1",
"fields": {
"id": 1,
"mediafile_id": 1,
"meeting_id": 1,
"access_group_ids": [1],
"inherited_access_group_ids": [1],
"is_public": False,
},
},
{
"type": "create",
"fqid": "meeting_mediafile/2",
"fields": {
"id": 2,
"mediafile_id": 2,
"meeting_id": 1,
"access_group_ids": [1],
"inherited_access_group_ids": [1],
"is_public": False,
},
},
{
"type": "create",
"fqid": "meeting_mediafile/3",
"fields": {
"id": 3,
"mediafile_id": 1,
"meeting_id": 2,
"access_group_ids": [2, 3],
"inherited_access_group_ids": [2, 3],
"is_public": False,
},
},
{
"type": "create",
"fqid": "meeting_mediafile/4",
"fields": {
"id": 4,
"mediafile_id": 5,
"meeting_id": 2,
"access_group_ids": [3],
"inherited_access_group_ids": [3],
"is_public": False,
},
},
{
"type": "create",
"fqid": "meeting_mediafile/5",
"fields": {
"id": 5,
"mediafile_id": 2,
"meeting_id": 2,
"access_group_ids": [4],
"inherited_access_group_ids": [],
"is_public": False,
},
},
{
"type": "create",
"fqid": "meeting_mediafile/6",
"fields": {
"id": 6,
"mediafile_id": 6,
"meeting_id": 2,
"access_group_ids": [2],
"inherited_access_group_ids": [],
"is_public": False,
},
},
{
"type": "create",
"fqid": "group/1",
"fields": {
"id": 1,
"meeting_id": 1,
"mediafile_access_group_ids": [1],
"mediafile_inherited_access_group_ids": [1],
"meeting_mediafile_access_group_ids": [2],
"meeting_mediafile_inherited_access_group_ids": [2],
},
},
{
"type": "create",
"fqid": "group/2",
"fields": {
"id": 2,
"meeting_id": 2,
"meeting_mediafile_access_group_ids": [3, 6],
"meeting_mediafile_inherited_access_group_ids": [3],
},
},
{
"type": "create",
"fqid": "group/3",
"fields": {
"id": 3,
"meeting_id": 2,
"mediafile_access_group_ids": [3, 4],
"mediafile_inherited_access_group_ids": [3, 4],
},
},
{
"type": "create",
"fqid": "group/4",
"fields": {
"id": 4,
"meeting_id": 2,
"mediafile_id": 2,
"mediafile_access_group_ids": [5],
"mediafile_inherited_access_group_ids": [5],
},
},
)
write(
{"type": "delete", "fqid": "meeting_mediafile/5", "fields": {}},
{"type": "delete", "fqid": "group/4", "fields": {}},
)

finalize("0056_fix_meeting_mediafile_relations")

for id_, (meeting_id, access_groups, inherited_access_groups) in {
1: (1, [1, 2], [1, 2]),
2: (2, [3, 6], [3]),
3: (2, [3, 4], [3, 4]),
}.items():
assert_model(
f"group/{id_}",
{
"id": id_,
"meeting_id": meeting_id,
"meeting_mediafile_access_group_ids": access_groups,
"meeting_mediafile_inherited_access_group_ids": inherited_access_groups,
},
)

0 comments on commit 10ffe2d

Please sign in to comment.