Files
notifications-admin/app/notify_client/organisations_api_client.py
David McDonald 3e80ba4734 Fix flake8 and isort errors
Note, isort now has default behaviour of searching recursively so we no
longer need the `-rc` flag
2021-03-08 18:48:56 +00:00

99 lines
3.1 KiB
Python

from itertools import chain
from notifications_python_client.errors import HTTPError
from app.extensions import redis_client
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, cache
class OrganisationsClient(NotifyAdminAPIClient):
@cache.set('organisations')
def get_organisations(self):
return self.get(url='/organisations')
@cache.set('domains')
def get_domains(self):
return list(chain.from_iterable(
organisation['domains']
for organisation in self.get_organisations()
))
def get_organisation(self, org_id):
return self.get(url='/organisations/{}'.format(org_id))
@cache.set('organisation-{org_id}-name')
def get_organisation_name(self, org_id):
return self.get_organisation(org_id)['name']
def get_organisation_by_domain(self, domain):
try:
return self.get(
url='/organisations/by-domain?domain={}'.format(domain),
)
except HTTPError as error:
if error.status_code == 404:
return None
raise error
@cache.delete('organisations')
def create_organisation(self, name, crown, organisation_type, agreement_signed):
return self.post(
url="/organisations",
data={
"name": name,
"crown": crown,
"organisation_type": organisation_type,
"agreement_signed": agreement_signed,
}
)
@cache.delete('domains')
@cache.delete('organisations')
def update_organisation(self, org_id, cached_service_ids=None, **kwargs):
api_response = self.post(url="/organisations/{}".format(org_id), data=kwargs)
if cached_service_ids:
redis_client.delete(*map('service-{}'.format, cached_service_ids))
return api_response
@cache.delete('organisation-{org_id}-name')
def update_organisation_name(self, org_id, name):
return self.update_organisation(org_id, name=name)
@cache.delete('service-{service_id}')
@cache.delete('live-service-and-organisation-counts')
@cache.delete('organisations')
def update_service_organisation(self, service_id, org_id):
data = {
'service_id': service_id
}
return self.post(
url="/organisations/{}/service".format(org_id),
data=data
)
def get_organisation_services(self, org_id):
return self.get(url="/organisations/{}/services".format(org_id))
def remove_user_from_organisation(self, org_id, user_id):
endpoint = '/organisations/{}/users/{}'.format(org_id, user_id)
data = _attach_current_user({})
return self.delete(endpoint, data)
def is_organisation_name_unique(self, org_id, name):
return self.get(
url="/organisations/unique",
params={"org_id": org_id, "name": name}
)["result"]
def get_services_and_usage(self, org_id, year):
return self.get(
url=f"/organisations/{org_id}/services-with-usage",
params={"year": str(year)}
)
organisations_client = OrganisationsClient()