def patch(self, pk, endpoint=None, data_name=None, **kwargs): """ Update a record via PATCH. :param endpoint: endpoint name. :param pk: key to put to :param data_name: key response data is stored under :returns: dict (from response.json()[data_name]) """ kwargs = self._set_params(kwargs) endpoint = _set_default(self, 'endpoint', endpoint) data_name = _set_default(self, 'data_name', data_name, required=False) url = add_pk(self.urls[endpoint], pk, required=True, slash=True) response = super(UpdateMixin, self)._patch(url=url, **kwargs) self._check_response(response, **kwargs) return self._get_result(response, data_name=data_name, **kwargs)
def delete(self, pk, endpoint=None, data_name=None, **kwargs): """ Delete a record in SEED :param endpoint: endpoint name. :param pk: key to put to :param data_name: key response data is stored under :returns: None """ # pylint:disable=no-member kwargs = self._set_params(kwargs) endpoint = _set_default(self, 'endpoint', endpoint) data_name = _set_default(self, 'data_name', data_name, required=False) url = add_pk(self.urls[endpoint], pk, required=True, slash=True) response = super(DeleteMixin, self)._delete(url=url, **kwargs) # delete should return 204 and no content if response.status_code != requests.codes.no_content: self._check_response(response, **kwargs)
def get(self, pk, endpoint=None, data_name=None, **kwargs): """ Get a single record from SEED. :param endpoint: endpoint name. :param pk: primary key of record :param data_name: key response data is stored under :returns: dict (from response.json()[data_name]) """ kwargs = self._set_params(kwargs) endpoint = _set_default(self, 'endpoint', endpoint) data_name = _set_default(self, 'data_name', data_name, required=False) url = add_pk(self.urls[endpoint], pk, required=True, slash=True) response = super(ReadMixin, self)._get(url=url, **kwargs) self._check_response(response, **kwargs) result = self._get_result(response, data_name=data_name, **kwargs) return result
def testadd_pk(self): """Test add_pk helper function.""" # Error checks with self.assertRaises(APIClientError) as conm: add_pk('url', None) self.assertEqual('APIClientError: id/pk must be supplied', str(conm.exception)) with self.assertRaises(TypeError) as conm: add_pk('url', 'a') self.assertEqual('id/pk must be a positive integer', str(conm.exception)) with self.assertRaises(TypeError) as conm: add_pk('url', 1.2) self.assertEqual('id/pk must be a positive integer', str(conm.exception)) with self.assertRaises(TypeError) as conm: add_pk('url', -1) self.assertEqual('id/pk must be a positive integer', str(conm.exception)) # adds ints result = add_pk('url', 1) self.assertEqual('url/1', result) # converts strings if digit result = add_pk('url', '1') self.assertEqual('url/1', result) # id not required result = add_pk('url', None, required=False) self.assertEqual('url', result) # adds_slash result = add_pk('url', 1, slash=True) self.assertEqual('url/1/', result) # does not repeat / result = add_pk('url/', 1) self.assertEqual('url/1', result)