Skip to content

Commit 5349ac0

Browse files
committed
Update event sync process: fix KeyError 'start-date'
1 parent 3f9cf98 commit 5349ac0

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

backend/apps/owasp/management/commands/owasp_enrich_events.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def handle(self, *args, **options) -> None:
4040
if not event.suggested_location and (
4141
prompt := Prompt.get_owasp_event_suggested_location()
4242
):
43-
event.generate_suggested_location(prompt)
43+
event.generate_suggested_location(prompt=prompt)
4444

4545
# Geo location.
4646
if not event.latitude or not event.longitude:

backend/apps/owasp/management/commands/owasp_update_events.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ def handle(self, *args, **kwargs) -> None:
2020

2121
Event.bulk_save(
2222
[
23-
Event.update_data(category["category"], event_data)
23+
event
2424
for category in data
2525
for event_data in category["events"]
26+
if (event := Event.update_data(category["category"], event_data, save=False))
2627
]
2728
)

backend/apps/owasp/models/event.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
from typing import TYPE_CHECKING
66

7+
from apps.core.models.prompt import Prompt
8+
79
if TYPE_CHECKING: # pragma: no cover
810
from datetime import date
911

@@ -144,7 +146,7 @@ def parse_dates(dates: str, start_date: date) -> date | None:
144146
return None
145147

146148
@staticmethod
147-
def update_data(category, data, *, save: bool = True) -> Event:
149+
def update_data(category, data, *, save: bool = True) -> Event | None:
148150
"""Update event data.
149151
150152
Args:
@@ -162,7 +164,11 @@ def update_data(category, data, *, save: bool = True) -> Event:
162164
except Event.DoesNotExist:
163165
event = Event(key=key)
164166

165-
event.from_dict(category, data)
167+
try:
168+
event.from_dict(category, data)
169+
except KeyError: # No start date.
170+
return None
171+
166172
if save:
167173
event.save()
168174

@@ -179,18 +185,19 @@ def from_dict(self, category: str, data: dict) -> None:
179185
None
180186
181187
"""
188+
start_date = data["start-date"]
182189
fields = {
183190
"category": {
184191
"AppSec Days": Event.Category.APPSEC_DAYS,
185192
"Global": Event.Category.GLOBAL,
186193
"Partner": Event.Category.PARTNER,
187194
}.get(category, Event.Category.OTHER),
188195
"description": data.get("optional-text", ""),
189-
"end_date": Event.parse_dates(data.get("dates", ""), data["start-date"]),
196+
"end_date": Event.parse_dates(data.get("dates", ""), start_date),
190197
"name": data["name"],
191-
"start_date": parser.parse(data["start-date"]).date()
192-
if isinstance(data["start-date"], str)
193-
else data["start-date"],
198+
"start_date": parser.parse(start_date).date()
199+
if isinstance(start_date, str)
200+
else start_date,
194201
"url": normalize_url(data.get("url", "")) or "",
195202
}
196203

@@ -213,7 +220,7 @@ def generate_geo_location(self) -> None:
213220
self.latitude = location.latitude
214221
self.longitude = location.longitude
215222

216-
def generate_suggested_location(self, prompt) -> None:
223+
def generate_suggested_location(self, prompt=None) -> None:
217224
"""Generate a suggested location for the event.
218225
219226
Args:
@@ -225,7 +232,9 @@ def generate_suggested_location(self, prompt) -> None:
225232
"""
226233
open_ai = OpenAi()
227234
open_ai.set_input(self.get_context())
228-
open_ai.set_max_tokens(100).set_prompt(prompt)
235+
open_ai.set_max_tokens(100).set_prompt(
236+
prompt or Prompt.get_owasp_event_suggested_location()
237+
)
229238
try:
230239
suggested_location = open_ai.complete()
231240
self.suggested_location = (
@@ -234,7 +243,7 @@ def generate_suggested_location(self, prompt) -> None:
234243
except (ValueError, TypeError):
235244
self.suggested_location = ""
236245

237-
def generate_summary(self, prompt) -> None:
246+
def generate_summary(self, prompt=None) -> None:
238247
"""Generate a summary for the event.
239248
240249
Args:
@@ -246,7 +255,7 @@ def generate_summary(self, prompt) -> None:
246255
"""
247256
open_ai = OpenAi()
248257
open_ai.set_input(self.get_context(include_dates=True))
249-
open_ai.set_max_tokens(100).set_prompt(prompt)
258+
open_ai.set_max_tokens(100).set_prompt(prompt or Prompt.get_owasp_event_summary())
250259
try:
251260
summary = open_ai.complete()
252261
self.summary = summary if summary and summary != "None" else ""

0 commit comments

Comments
 (0)