Files
notifications-admin/app/models/__init__.py
Carlo Costino 9a83ba7475 Localize notification_utils to the admin
This changeset pulls in all of the notification_utils code directly into the admin and removes it as an external dependency. We are doing this to cut down on operational maintenance of the project and will begin removing parts of it no longer needed for the admin.

Signed-off-by: Carlo Costino <carlo.costino@gsa.gov>
2024-05-16 10:37:37 -04:00

66 lines
1.6 KiB
Python

from abc import abstractmethod
from flask import abort
from notifications_utils.serialised_model import (
SerialisedModel,
SerialisedModelCollection,
)
class JSONModel(SerialisedModel):
def __init__(self, _dict):
# in the case of a bad request _dict may be `None`
self._dict = _dict or {}
for property in self.ALLOWED_PROPERTIES:
if property in self._dict:
setattr(self, property, self._dict[property])
def __bool__(self):
return self._dict != {}
def __hash__(self):
return hash(self.id)
def __eq__(self, other):
return self.id == other.id
def _get_by_id(self, things, id):
try:
return next(thing for thing in things if thing["id"] == str(id))
except StopIteration:
abort(404)
class ModelList(SerialisedModelCollection):
@property
@abstractmethod
def client_method(self):
pass
def __init__(self, *args):
self.items = self.client_method(*args)
class PaginatedModelList(ModelList):
response_key = "data"
def __init__(self, *args, page=None, **kwargs):
try:
self.current_page = int(page)
except TypeError:
self.current_page = 1
response = self.client_method(
*args,
**kwargs,
page=self.current_page,
)
self.items = response[self.response_key]
self.prev_page = response.get("links", {}).get("prev", None)
self.next_page = response.get("links", {}).get("next", None)
class SortByNameMixin:
def __lt__(self, other):
return self.name.lower() < other.name.lower()