Ejemplo n.º 1
0
 def test_apply_patch_with_wrong_keys_raises_400(self):
     instance_data = {}
     patch_list = [
         {
             'wrong key': 'any value'
         }
     ]
     with self.assertRaises(HTTPError) as error:
         apply_patch(instance_data, patch_list)
     msg = str(error.exception)
     expected = "HTTP 400: Bad Request (Incorrect patch item. Every object in the list must contain the following keys: ['op', 'path'])"
     self.assertEqual(msg, expected)
Ejemplo n.º 2
0
 def test_apply_patch_add_inexistent_data_succeeds(self):
     instance_data = {}
     patch_list = [{
         u'path': 'http://on.to/children',
         u'op': u'add',
         u'value': u'Mary'
     }]
     computed = apply_patch(instance_data, patch_list)
     expected = {
         u'http://on.to/children': [u'Mary'],
     }
     self.assertEqual(computed, expected)
 def test_apply_patch_remove_succeeds_for_expanded_uri(self):
     instance_data = {
         'http://dbpedia.org/ontology/name': u'Francis'
     }
     patch_list = [
         {
             u'path': 'dbpedia:name',
             u'op': u'remove'
         }
     ]
     computed = apply_patch(instance_data, patch_list)
     expected = {}
     self.assertEqual(computed, expected)
 def test_apply_patch_remove_succeeds_for_inexistent_key(self):
     instance_data = {
         'http://on.to/name': u'Flipper',
         'http://on.to/weight': 200.0
     }
     patch_list = [
         {
             u'path': 'http://on.to/age',
             u'op': u'remove'
         }
     ]
     computed = apply_patch(instance_data, patch_list)
     self.assertEqual(computed, instance_data)
Ejemplo n.º 5
0
 def test_apply_patch_replace_succeeds(self):
     instance_data = {
         u'http://on.to/name': u'Flipper',
         u'http://on.to/age': 4
     }
     patch_list = [{
         u'path': u'http://on.to/age',
         u'value': 5,
         u'op': u'replace'
     }]
     computed = apply_patch(instance_data, patch_list)
     expected = {u'http://on.to/name': u'Flipper', u'http://on.to/age': 5}
     self.assertEqual(computed, expected)
 def test_apply_patch_add_inexistent_data_succeeds(self):
     instance_data = {
     }
     patch_list = [
         {
             u'path': 'http://on.to/children',
             u'op': u'add',
             u'value': u'Mary'
         }
     ]
     computed = apply_patch(instance_data, patch_list)
     expected = {
         u'http://on.to/children': [u'Mary'],
     }
     self.assertEqual(computed, expected)
 def test_apply_patch_remove_succeeds(self):
     instance_data = {
         'http://on.to/name': u'Flipper',
         'http://on.to/weight': 200.0
     }
     patch_list = [
         {
             u'path': 'http://on.to/weight',
             u'op': u'remove'
         }
     ]
     computed = apply_patch(instance_data, patch_list)
     expected = {
         u'http://on.to/name': u'Flipper',
     }
     self.assertEqual(computed, expected)
 def test_apply_patch_add_list_data_succeeds(self):
     instance_data = {
         'http://on.to/children': ['Dave', 'Eric']
     }
     patch_list = [
         {
             u'path': 'http://on.to/children',
             u'op': u'add',
             u'value': [u'Mary', u'John']
         }
     ]
     computed = apply_patch(instance_data, patch_list)
     expected = {
         u'http://on.to/children': ['Dave', 'Eric', 'John', 'Mary'],
     }
     self.assertEqual(computed, expected)
 def test_apply_patch_replace_succeeds(self):
     instance_data = {
         u'http://on.to/name': u'Flipper',
         u'http://on.to/age': 4
     }
     patch_list = [
         {
             u'path': u'http://on.to/age',
             u'value': 5,
             u'op': u'replace'
         }
     ]
     computed = apply_patch(instance_data, patch_list)
     expected = {
         u'http://on.to/name': u'Flipper',
         u'http://on.to/age': 5
     }
     self.assertEqual(computed, expected)
 def test_apply_patch_replace_with_add_semantics(self):
     instance_data = {
         u'http://on.to/name': u'Flipper',
         u'http://on.to/age': 4
     }
     patch_list = [
         {
             u'path': u'http://on.to/birthDate',
             u'value': '2014-08-01',
             u'op': u'replace'
         }
     ]
     computed = apply_patch(instance_data, patch_list)
     expected = {
         u'http://on.to/name': u'Flipper',
         u'http://on.to/age': 4,
         u'http://on.to/birthDate': '2014-08-01'
     }
     self.assertEqual(computed, expected)
Ejemplo n.º 11
0
    def patch(self, context_name, class_name, instance_id):
        valid_params = INSTANCE_PARAMS
        with safe_params(valid_params):
            self.query_params = ParamDict(self,
                                          context_name=context_name,
                                          class_name=class_name,
                                          instance_id=instance_id,
                                          **valid_params)
        del context_name
        del class_name
        del instance_id

        try:
            patch_list = json.loads(self.request.body)
        except ValueError:
            raise HTTPError(400,
                            log_message=_("No JSON object could be decoded"))

        # Retrieve original data
        instance_data = memoize(self.query_params,
                                get_instance,
                                key=build_instance_key(self.query_params),
                                function_arguments=self.query_params)
        try:
            instance_data = instance_data['body']
        except TypeError:
            raise HTTPError(404, log_message=_("Inexistent instance"))

        instance_data.pop('http://www.w3.org/1999/02/22-rdf-syntax-ns#type',
                          None)

        # compute patch
        changed_data = apply_patch(instance_data, patch_list)

        # Try to put
        edit_instance(self.query_params, changed_data)
        status = 200

        # Clear cache
        cache.purge_an_instance(self.query_params['instance_uri'])

        self.finalize(status)
Ejemplo n.º 12
0
    def patch(self, context_name, class_name, instance_id):
        valid_params = INSTANCE_PARAMS
        with safe_params(valid_params):
            self.query_params = ParamDict(self,
                                          context_name=context_name,
                                          class_name=class_name,
                                          instance_id=instance_id,
                                          **valid_params)
        del context_name
        del class_name
        del instance_id

        try:
            patch_list = json.loads(self.request.body)
        except ValueError:
            raise HTTPError(400, log_message=_("No JSON object could be decoded"))

        # Retrieve original data
        instance_data = memoize(self.query_params,
                           get_instance,
                           key=build_instance_key(self.query_params),
                           function_arguments=self.query_params)
        try:
            instance_data = instance_data['body']
        except TypeError:
            raise HTTPError(404, log_message=_("Inexistent instance"))

        instance_data.pop('http://www.w3.org/1999/02/22-rdf-syntax-ns#type', None)

        # compute patch
        changed_data = apply_patch(instance_data, patch_list)

        # Try to put
        edit_instance(self.query_params, changed_data)
        status = 200

        # Clear cache
        cache.purge_an_instance(self.query_params['instance_uri'])

        self.finalize(status)