"""Grass model.""" from oto import response from owsrequest import request as ows import requests from auth import config GET = 'GET' POST = 'POST' PUT = 'PUT' HEAD = 'HEAD' DELETE = 'DELETE' _request = { GET: requests.get, POST: requests.post, PUT: requests.put, HEAD: requests.head, DELETE: requests.delete } INVALID_VERB = 'Requests must be made with a valid verb' INVALID_RESOURCE = 'The resource must start with a "/"' def request(verb, resource, params=None, data=None, headers=None): """Make a request to a microservice. Args: verb (str): the http verb for the request. resource (str): the resource to use. params (dict): params for the request. data (dict): body of the request. headers (dict): optional headers. Raises: AssertionError: if the verb is invalid of if the resource does not start with a /. Returns: response.Response: the response of the request. """ assert verb in _request, INVALID_VERB assert resource.startswith('/'), INVALID_RESOURCE url = ows.URL.format(domain=config.GRASS_DOMAIN, path=resource) result = _request.get(verb)(url, params=params, data=data, headers=headers) content = result.text try: content = result.json() except: pass if 200 <= result.status_code < 300: return response.Response( message=content, status=result.status_code) return response.Response( errors=content, status=result.status_code)