mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-07-27 03:09:11 -04:00
Don’t have service model inherit from dict
Inheriting from `dict` has some unexpected side effects that don’t happen with plain object. The one we want to avoid right now is that a dict doesn’t seem to implement `__dict__` in a normal way, which is required by `werkzeug.utils.cached_property`.
This commit is contained in:
@@ -268,7 +268,7 @@ class AnonymousUser(AnonymousUserMixin):
|
||||
return False
|
||||
|
||||
|
||||
class Service(dict):
|
||||
class Service():
|
||||
|
||||
ALLOWED_PROPERTIES = {
|
||||
'active',
|
||||
@@ -291,16 +291,30 @@ class Service(dict):
|
||||
|
||||
def __init__(self, _dict):
|
||||
# in the case of a bad request current service may be `None`
|
||||
super().__init__(_dict or {})
|
||||
self._dict = _dict or {}
|
||||
if 'permissions' not in self._dict:
|
||||
self.permissions = {'email', 'sms', 'letter'}
|
||||
|
||||
def __bool__(self):
|
||||
return self._dict != {}
|
||||
|
||||
def __getattr__(self, attr):
|
||||
if attr in self.ALLOWED_PROPERTIES:
|
||||
return self[attr]
|
||||
return self._dict[attr]
|
||||
raise AttributeError('`{}` is not a service attribute'.format(attr))
|
||||
|
||||
def __getitem__(self, attr):
|
||||
return self.__getattr__(attr)
|
||||
|
||||
def get(self, attr, default=None):
|
||||
try:
|
||||
return self._dict[attr]
|
||||
except KeyError:
|
||||
return default
|
||||
|
||||
@property
|
||||
def trial_mode(self):
|
||||
return self['restricted']
|
||||
return self._dict['restricted']
|
||||
|
||||
def has_permission(self, permission):
|
||||
return permission in self.permissions
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
</h1>
|
||||
<p>
|
||||
You can only send {{ current_service.message_limit }} messages per day
|
||||
{%- if current_service.restricted %}
|
||||
{%- if current_service.trial_mode %}
|
||||
in <a href="{{ url_for('.using_notify')}}#trial-mode">trial mode</a>
|
||||
{%- endif -%}
|
||||
.
|
||||
|
||||
@@ -253,7 +253,7 @@
|
||||
{% endcall %}
|
||||
</div>
|
||||
|
||||
{% if current_service.restricted %}
|
||||
{% if current_service.trial_mode %}
|
||||
<h2 class="heading-medium">Your service is in trial mode</h2>
|
||||
|
||||
<ul class='list list-bullet'>
|
||||
@@ -334,7 +334,7 @@
|
||||
<ul>
|
||||
<li class="bottom-gutter">
|
||||
<a href="{{ url_for('.service_switch_live', service_id=current_service.id) }}" class="button">
|
||||
{{ 'Make service live' if current_service.restricted else 'Revert service to trial mode' }}
|
||||
{{ 'Make service live' if current_service.trial_mode else 'Revert service to trial mode' }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="bottom-gutter">
|
||||
|
||||
Reference in New Issue
Block a user