Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/uat' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
petrjasek committed Jul 11, 2024
2 parents e53a725 + 6a2a941 commit 063acf1
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 67 deletions.
4 changes: 2 additions & 2 deletions client/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions server/cp/commands/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import superdesk
from .update_event_types import UpdateEventTypesCommand
from .fix_events_moment_timezone_2023 import FixEventsCommand
from .delete_events import DeleteEvents


superdesk.command("cp:update_event_types", UpdateEventTypesCommand())
superdesk.command("cp:fix_event_dates_2023", FixEventsCommand())
superdesk.command("cp:delete_events", DeleteEvents())
76 changes: 76 additions & 0 deletions server/cp/commands/delete_events.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import sys

from datetime import datetime
from superdesk import Command, Option, get_resource_service
from superdesk.metadata.item import ITEM_STATE, CONTENT_STATE


class DeleteEvents(Command):
"""Usage:
honcho run manage.py cp:delete_events -f <file>
where <file> is a file with event IDs to delete.
"""

option_list = [
Option("--file", "-f", default="-"),
]

def run(self, file):
if file == "-":
input_file = sys.stdin
else:
input_file = open(file, "r")

events_service = get_resource_service("events")
events_post_service = get_resource_service("events_post")
removed_count = 0
missing_start_time = datetime(2024, 1, 1, 0, 0, 0)

try:
for line in input_file:
_id = line.strip()
if not _id or not _id.isnumeric():
continue
_id = f"urn:onclusive:{_id}"
print("ID", _id)
event = events_service.find_one(req=None, _id=_id.strip())
if event:
update = {
"pubstatus": "cancelled",
ITEM_STATE: CONTENT_STATE.KILLED,
}
events_service.patch_in_mongo(event["_id"], update, event)
print("patch.")
else:
new_event = {
"guid": _id,
"pubstatus": "cancelled",
ITEM_STATE: CONTENT_STATE.KILLED,
"type": "event",
"dates": {
"start": missing_start_time,
"end": missing_start_time,
"all_day": True,
"tz": "UTC",
},
"source": "Onclusive",
}
events_service.post_in_mongo([new_event])
events_post_service.post(
[
{
"event": new_event["_id"],
"etag": new_event["_etag"],
"pubstatus": "cancelled",
"update_method": "single",
}
]
)
print("post.")
removed_count += 1
print(f"Removed {removed_count} events.")
finally:
if file != "-":
input_file.close()
57 changes: 9 additions & 48 deletions server/cp/ingest/parser/cp_onclusive.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from planning.feed_parsers.onclusive import OnclusiveFeedParser
from typing import List
from superdesk import get_resource_service
from flask import g


def unique(values):
Expand All @@ -28,14 +29,16 @@ class CPOnclusiveFeedParser(OnclusiveFeedParser):
Feed Parser which can parse the Onclusive API Events
"""

_cv_items = {}

def _get_cv_items(self, _id: str) -> List:
if _id not in self._cv_items:
self._cv_items[_id] = get_resource_service("vocabularies").get_items(
if "cache" not in g:
g.cache = {}
assert isinstance(g.cache, dict)
cache_id = f"{_id}_cv_items"
if cache_id not in g.cache:
g.cache[cache_id] = get_resource_service("vocabularies").get_items(
_id=_id, is_active=True
)
return self._cv_items[_id]
return g.cache[cache_id]

def parse(self, content, provider=None):
onclusive_cv_items = self._get_cv_items("onclusive_ingest_categories")
Expand Down Expand Up @@ -82,7 +85,7 @@ def parse(self, content, provider=None):
if subj:
item["subject"].append(item_value(subj))
if subject["scheme"] == "onclusive_event_types":
event_type = self.find_event_type(event_types, subject["qcode"])
event_type = self.find_cv_item(event_types, subject["qcode"])
if event_type:
item["subject"].append(item_value(event_type))
# remove duplicates
Expand All @@ -98,45 +101,3 @@ def find_cv_item(self, cv_items, qcode):
for item in cv_items:
if item["qcode"] == qcode:
return item

def parse_event_type(self, qcode, cp_event_types, events: list) -> List:
"""
Find events types from the CV including it's parent item.
"""
event_type = self.find_cv_item(cp_event_types, qcode)
if event_type:
events.append(
{
"name": event_type["name"],
"qcode": event_type["qcode"],
"scheme": "event_types",
}
)
if event_type and event_type.get("parent"):
self.parse_event_type(event_type["parent"], cp_event_types, events)

return events

def find_event_type(self, event_types, qcode):
for event_type in event_types:
if (
event_type.get("onclusive_ids")
and str(qcode) in event_type["onclusive_ids"]
):
return event_type

def find_subject(self, subjects, name):
for subject in subjects:
if (
subject.get("translations")
and subject["translations"].get("name")
and name.lower()
in [
value.lower()
for value in subject["translations"]["name"].values()
if value
]
):
return subject
if subject["name"].lower() == name.lower():
return subject
13 changes: 2 additions & 11 deletions server/data/vocabularies.json
Original file line number Diff line number Diff line change
Expand Up @@ -25247,15 +25247,9 @@
{
"name": "Conference",
"parent": null,
"qcode": "Conference",
"qcode": "148",
"is_active": true,
"subject": null,
"onclusive_ids": [
"123",
"134",
"136",
"148"
],
"translations": {
"name": {
"en-CA": "Conference",
Expand Down Expand Up @@ -25961,15 +25955,12 @@
{
"name": "Official visit",
"parent": "Political event",
"qcode": "Official visit",
"qcode": "129",
"is_active": true,
"subject": [
"international relations",
"Politics"
],
"onclusive_ids": [
"129"
],
"translations": {
"name": {
"en-CA": "Official visit",
Expand Down
8 changes: 2 additions & 6 deletions server/tests/ingest/parser/cp_onclusive_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,15 +87,11 @@ def test_content(self):
"scheme": "onclusive_categories",
},
{
"qcode": "Conference",
"scheme": "event_types",
},
{
"qcode": "Conference and trade show",
"qcode": "148",
"scheme": "event_types",
},
{
"qcode": "Official visit",
"qcode": "129",
"scheme": "event_types",
},
{
Expand Down

0 comments on commit 063acf1

Please sign in to comment.