Skip to content

Commit b3077a2

Browse files
committed
add assigned user/desk info to planning json (#1888)
* add assigned user/desk info to planning json CPCN-502
1 parent ab53049 commit b3077a2

File tree

3 files changed

+66
-4
lines changed

3 files changed

+66
-4
lines changed

README.md

+3
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,9 @@ Below sections include the config options that can be defined in settings.py.
176176
* PLANNING_SEND_NOTIFICATION_FOR_SELF_ASSIGNMENT
177177
* Defaults to false
178178
* If true, sends a notification to a user on creating an assignment that is assigned to themselves
179+
* PLANNING_JSON_ASSIGNED_INFO_EXTENDED
180+
* Defaults to `false`
181+
* If `true`, it will add to planning JSON output additional info for coverages like assigned desk name/email and assigned user name/email.
179182

180183
### Authoring Config
181184
* PLANNING_CHECK_FOR_ASSIGNMENT_ON_PUBLISH

server/planning/output_formatters/json_planning.py

+22-4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
# at https://www.sourcefabric.org/superdesk/license
1010

1111

12+
from flask import current_app as app
1213
from superdesk.publish.formatters import Formatter
1314
import superdesk
1415
import json
@@ -178,12 +179,11 @@ def _expand_delivery(self, coverage):
178179
if delivery.get("item_state") == CONTENT_STATE.PUBLISHED:
179180
item_never_published = False
180181

181-
if item_never_published:
182-
deliveries = []
183-
184182
return deliveries, assignment.get("assigned_to").get("state")
185183

186184
def _expand_coverage_contacts(self, coverage):
185+
EXTENDED_INFO = bool(app.config.get("PLANNING_JSON_ASSIGNED_INFO_EXTENDED"))
186+
187187
if (coverage.get("assigned_to") or {}).get("contact"):
188188
expanded_contacts = expand_contact_info([coverage["assigned_to"]["contact"]])
189189
if expanded_contacts:
@@ -194,8 +194,26 @@ def _expand_coverage_contacts(self, coverage):
194194

195195
if (coverage.get("assigned_to") or {}).get("user"):
196196
user = get_resource_service("users").find_one(req=None, _id=coverage["assigned_to"]["user"])
197-
if user:
197+
if user and not user.get("private"):
198198
coverage["assigned_user"] = {
199199
"first_name": user.get("first_name"),
200200
"last_name": user.get("last_name"),
201+
"display_name": user.get("display_name"),
202+
}
203+
204+
if EXTENDED_INFO:
205+
coverage["assigned_user"].update(
206+
email=user.get("email"),
207+
)
208+
209+
if (coverage.get("assigned_to") or {}).get("desk"):
210+
desk = get_resource_service("desks").find_one(req=None, _id=coverage["assigned_to"]["desk"])
211+
if desk:
212+
coverage["assigned_desk"] = {
213+
"name": desk.get("name"),
201214
}
215+
216+
if EXTENDED_INFO:
217+
coverage["assigned_desk"].update(
218+
email=desk.get("email"),
219+
)

server/planning/tests/output_formatters/json_planning_test.py

+41
Original file line numberDiff line numberDiff line change
@@ -318,3 +318,44 @@ def test_matching_product_ids(self):
318318
output = formatter.format(item, {"name": "Test Subscriber"})[0]
319319
output_item = json.loads(output[1])
320320
self.assertEqual(output_item["products"], [{"code": "prod-type-planning", "name": "planning-only"}])
321+
322+
def test_assigned_desk_user(self):
323+
with self.app.app_context():
324+
item = deepcopy(self.item)
325+
desk_id = ObjectId()
326+
user_id = ObjectId()
327+
328+
item["coverages"][0]["assigned_to"].update(
329+
desk=desk_id,
330+
user=user_id,
331+
)
332+
333+
self.app.data.insert(
334+
"desks",
335+
[{"_id": desk_id, "name": "sports", "email": "sports@example.com"}],
336+
)
337+
338+
self.app.data.insert("users", [{"_id": user_id, "display_name": "John Doe", "email": "john@example.com"}])
339+
340+
formatter = JsonPlanningFormatter()
341+
with mock.patch.dict(self.app.config, {"PLANNING_JSON_ASSIGNED_INFO_EXTENDED": True}):
342+
output = formatter.format(item, {"name": "Test Subscriber"})[0]
343+
output_item = json.loads(output[1])
344+
coverage = output_item["coverages"][0]
345+
assert coverage["assigned_user"] == {
346+
"first_name": None,
347+
"last_name": None,
348+
"display_name": "John Doe",
349+
"email": "john@example.com",
350+
}
351+
assert coverage["assigned_desk"] == {
352+
"name": "sports",
353+
"email": "sports@example.com",
354+
}
355+
356+
# without config
357+
output = formatter.format(item, {"name": "Test Subscriber"})[0]
358+
output_item = json.loads(output[1])
359+
coverage = output_item["coverages"][0]
360+
assert "email" not in coverage["assigned_user"]
361+
assert "email" not in coverage["assigned_desk"]

0 commit comments

Comments
 (0)