def exists(self, filter=None): url = '{0}/{1}'.format(self.connection.base_url, self.endpoint_path) request_args = { 'url': url, 'headers': self.connection.headers, 'params': { 'offset': 0, 'limit': 1, 'includeFields': self.item_resource.sid_field, 'filter': filter, } } if not self.connection.auth_token: request_args['auth'] = self.connection.auth r = requests.get(**request_args) _validate_status_code(r) try: if self.wrapper: data = r.json()['body']['total'] else: data = r.json()['total'] except ValueError: raise ApiServerError( "Unparseable response from server: {0}: {1}".format( r.status_code, r.content)) else: return data > 0
def get(self, sid): url = '{0}/{1}/{2}'.format(self.connection.base_url, self.endpoint_path, sid) r = requests.get( url=url, auth=self.connection.auth, headers=self.connection.headers, ) request_args = {'url': url, 'headers': self.connection.headers} if not self.connection.auth_token: request_args['auth'] = self.connection.auth r = requests.get(**request_args) _validate_status_code(r) try: if self.wrapper: data = r.json()['body'] else: data = r.json() except ValueError: raise ApiServerError( "Unparseable response from server: {0}: {1}".format( r.status_code, r.content)) else: return self.item_resource(self.connection, data)
def list(self, filter=None, offset=None, limit=None, order=None): if offset is None: offset = 0 if limit is None: limit = self.LIST_LIMIT else: limit = min(limit, self.LIST_LIMIT) url = '{0}/{1}'.format(self.connection.base_url, self.endpoint_path) r = requests.get( url=url, auth=self.connection.auth, headers=self.connection.headers, params={ 'offset': offset, 'limit': limit, 'filter': filter, 'order': order, }, ) _validate_status_code(r) try: if self.wrapper: data = r.json()['body']['items'] else: data = r.json()['items'] except ValueError: raise ApiServerError("Unparseable response from server: {0}: {1}".format(r.status_code, r.content)) else: return [self.item_resource(self.connection, x) for x in data]
def create(self, **data): url = '{0}/{1}'.format(self.connection.base_url, self.endpoint_path) if data.get('instance'): instance = data['instance'] else: for k in data.keys(): if k not in self.item_resource.create_fields: raise ApiValueError("Field {0} not allowed in create, must be in {1}".format( k, self.item_resource.create_fields)) instance = self.item_resource.from_dict(data) logger.debug("POST {0}: {1}: {2!r}".format(url, data, instance)) r = requests.post( url=url, auth=self.connection.auth, headers=self.connection.headers, data=instance.to_json(), ) _validate_status_code(r) try: if self.wrapper: ser = r.json()['body'] else: ser = r.json() except ValueError: raise ApiServerError("Unparseable response from server: {0}: {1}".format(r.status_code, r.content)) return self.item_resource(self.connection, ser)
def _validate_status_code(r): if r.status_code == 200: return if r.status_code == 201: return elif r.status_code == 403: raise ApiPermissionException() elif r.status_code == 404: raise ApiNotFoundException() elif r.status_code == 400: try: errors = json.loads(r.content.decode())['errors'] raise ApiValueError(errors) except (ValueError, KeyError): # fall through to default error if error response cannot be parsed pass raise ApiServerError("Unexpected response from server: {0}: {1}".format(r.status_code, r.content))