Skip to content

Commit

Permalink
fix error when ingesting cancelled event with assignments
Browse files Browse the repository at this point in the history
it was checking session data which failed during ingest

STTNHUB-361
  • Loading branch information
petrjasek committed Sep 17, 2024
1 parent a7d1a96 commit 3630cfb
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 18 deletions.
2 changes: 1 addition & 1 deletion server/planning/assignments/assignments.py
Original file line number Diff line number Diff line change
Expand Up @@ -1195,7 +1195,7 @@ def on_delete(self, doc):
"""
Validate that we have a lock on the Assignment and it's associated Planning item
"""
if doc.get("_to_delete") is True:
if doc.get("_to_delete") is True or not request:
# Already marked for delete - no validation needed (could be the background job)
return

Expand Down
3 changes: 3 additions & 0 deletions server/planning/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -379,9 +379,12 @@ def update_post_item(updates, original):
# From item actions
pub_status = POST_STATE.USABLE

print("IN", updates, pub_status)

if pub_status is not None:
if original.get(ITEM_TYPE):
resource_name = "events_post" if original.get(ITEM_TYPE) == "event" else "planning_post"
print("RESOURCE", resource_name)
item_post_service = get_resource_service(resource_name)
doc = {
"etag": updates.get("_etag"),
Expand Down
35 changes: 18 additions & 17 deletions server/planning/planning/planning.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import logging
from datetime import datetime

from flask import json, current_app as app
from flask import json, current_app as app, request
from eve.methods.common import resolve_document_etag

import superdesk
Expand Down Expand Up @@ -1274,23 +1274,24 @@ def delete_assignments_for_coverages(self, coverages, notify=True):
if original_assigment:
assignment_service.system_update(ObjectId(assign_id), {"_to_delete": True}, original_assigment)

session_id = get_auth().get("_id")
user_id = get_user().get(config.ID_FIELD)
if len(deleted_assignments) > 0:
push_notification(
"assignments:delete",
items=deleted_assignments,
session=session_id,
user=user_id,
)
if request:
session_id = get_auth().get("_id")
user_id = get_user().get(config.ID_FIELD)
if len(deleted_assignments) > 0:
push_notification(
"assignments:delete",
items=deleted_assignments,
session=session_id,
user=user_id,
)

if len(failed_assignments) > 0 and notify:
push_notification(
"assignments:delete:fail",
items=failed_assignments,
session=session_id,
user=user_id,
)
if len(failed_assignments) > 0 and notify:
push_notification(
"assignments:delete:fail",
items=failed_assignments,
session=session_id,
user=user_id,
)

def get_expired_items(self, expiry_datetime, spiked_planning_only=False):
"""Get the expired items
Expand Down
2 changes: 2 additions & 0 deletions server/planning/planning/planning_post.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ class PlanningPostResource(PlanningResource):

class PlanningPostService(BaseService):
def create(self, docs, **kwargs):
print("IN CREATE", docs)
ids = []
assignments_to_delete = []
for doc in docs:
Expand All @@ -72,6 +73,7 @@ def create(self, docs, **kwargs):
self.post_planning(plan, doc["pubstatus"], assignments_to_delete, **kwargs)
ids.append(doc["planning"])

print("DELETE", assignments_to_delete)
get_resource_service("planning").delete_assignments_for_coverages(assignments_to_delete)
return ids

Expand Down
38 changes: 38 additions & 0 deletions server/planning/tests/ingest_cancelled_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from flask import request
from planning.tests import TestCase
from planning.common import update_post_item


class IngestCancelledTestCase(TestCase):
BEHAVE = True

def test_ingest_cancelled_event(self):
assignments = [
{"planning_item": "p1", "coverage_item": "c1"},
]

self.app.data.insert("assignments", assignments)
planning = {
"_id": "p1",
"name": "planning item",
"type": "planning",
"coverages": [
{
"coverage_id": "c1",
"planning": {},
"assigned_to": {
"assignment_id": assignments[0]["_id"],
},
},
],
}

self.app.data.insert("planning", [planning])

assert not request

with self.app.app_context():
update_post_item({"pubstatus": "cancelled"}, planning)

cursor, count = self.app.data.find("assignments", req=None, lookup={})
assert count == 0

0 comments on commit 3630cfb

Please sign in to comment.