mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-11 09:28:27 -04:00
Support broadcasts with unidentifiable areas
The original code to raise the exception was flawed: if a broadcast
only had a single area that was invalid, we would assume it was a
custom broadcast [1]. Since the recent changes [2] fixed the flaw
we're now getting exceptions for broadcasts of this kind.
It's not practical to go and manually fix the invalid broadcasts,
and the likelihood is there will be more in future as the set of
areas we support changes. This takes a pragmatic approach of simply
logging the issue and pretending such broadcasts are custom.
[1]: 926ada2f21
[2]: https://github.com/alphagov/notifications-admin/pull/4014/files#diff-2dd8f77d6df281e7674b20263cdf27a3d58b839dc5930c0087ac8b9749b313e4R92
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import itertools
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from flask import current_app
|
||||
from notifications_utils.polygons import Polygons
|
||||
from notifications_utils.template import BroadcastPreviewTemplate
|
||||
from orderedset import OrderedSet
|
||||
@@ -92,12 +93,19 @@ class BroadcastMessage(JSONModel):
|
||||
if 'ids' in self._dict['areas']:
|
||||
library_areas = self.get_areas(self.area_ids)
|
||||
|
||||
if len(library_areas) != len(self.area_ids):
|
||||
raise RuntimeError(
|
||||
f'BroadcastMessage has {len(self.area_ids)} areas '
|
||||
f'but {len(library_areas)} found in the library'
|
||||
if len(library_areas) == len(self.area_ids):
|
||||
return library_areas
|
||||
else:
|
||||
# it's possible an old broadcast may refer to areas that
|
||||
# are no longer part of our area libraries; in this case
|
||||
# we should just treat the whole thing as a custom broadcast,
|
||||
# which isn't great as our code doesn't support editing its
|
||||
# areas, but we don't expect this to happen often
|
||||
current_app.logger.warn(
|
||||
f'BroadcastMessage has {len(self._dict["areas"])} areas '
|
||||
f'but {len(library_areas)} found in the library. Treating '
|
||||
f'{self.id} as a custom broadcast.'
|
||||
)
|
||||
return library_areas
|
||||
|
||||
polygons = self._dict['areas'].get('simple_polygons', [])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user