Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)