From 4b1e3ec504bead2aa797358a07c1e854f3377b3b Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Fri, 17 Jul 2020 08:07:42 +0100 Subject: [PATCH] Refactor broadcast message model MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There was a lot of duplicate code here for updating the status and other properties of a broadcast. This commit abstracts them into reusable methods. They’re named with an underscore to suggest that they shouldn’t be used externally. --- app/models/broadcast_message.py | 54 ++++++++++++++------------------- 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/app/models/broadcast_message.py b/app/models/broadcast_message.py index 45ab2fb76..189e1d9e1 100644 --- a/app/models/broadcast_message.py +++ b/app/models/broadcast_message.py @@ -108,49 +108,39 @@ class BroadcastMessage(JSONModel): return User.from_id(self.cancelled_by_id) def add_areas(self, *new_areas): - broadcast_message_api_client.update_broadcast_message( - broadcast_message_id=self.id, - service_id=self.service_id, - data={ - 'areas': list(OrderedSet( - self._dict['areas'] + list(new_areas) - )) - }, - ) + self._update(areas=list(OrderedSet( + self._dict['areas'] + list(new_areas) + ))) def remove_area(self, area_to_remove): + self._update(areas=[ + area for area in self._dict['areas'] + if area != area_to_remove + ]) + + def _set_status_to(self, status): + broadcast_message_api_client.update_broadcast_message_status( + status, + broadcast_message_id=self.id, + service_id=self.service_id, + ) + + def _update(self, **kwargs): broadcast_message_api_client.update_broadcast_message( broadcast_message_id=self.id, service_id=self.service_id, - data={ - 'areas': [ - area for area in self._dict['areas'] - if area != area_to_remove - ] - }, + data=kwargs, ) def start_broadcast(self): - broadcast_message_api_client.update_broadcast_message( - broadcast_message_id=self.id, - service_id=self.service_id, - data={ - 'starts_at': datetime.utcnow().isoformat(), - 'finishes_at': (datetime.utcnow() + self.DEFAULT_TTL).isoformat(), - }, - ) - broadcast_message_api_client.update_broadcast_message_status( - 'broadcasting', - broadcast_message_id=self.id, - service_id=self.service_id, + self._update( + starts_at=datetime.utcnow().isoformat(), + finishes_at=(datetime.utcnow() + self.DEFAULT_TTL).isoformat(), ) + self._set_status_to('broadcasting') def cancel_broadcast(self): - broadcast_message_api_client.update_broadcast_message_status( - 'cancelled', - broadcast_message_id=self.id, - service_id=self.service_id, - ) + self._set_status_to('cancelled') class BroadcastMessages(ModelList):