示例#1
0
    def _map_field(self, key, value):
        if self._current.has_key(key):
            self._current[value] = self._current[key]
            del self._current[key]
        elif SEPARATOR in key and self._current.has_key(key.split(SEPARATOR)[0]):
            key_list = key.split(SEPARATOR)

            # Skip if the FK or M2M relation is blank.
            if not self._current[key_list[0]]:
                return

            if SEPARATOR in value:
                value_list = value.split(SEPARATOR)
                # Test if the key is valid to generate nice errors.
                try:
                    traverse_dict(self._current, key_list)
                except KeyError, e:
                    try:
                        traverse_dict(self._current, value_list)
                    except KeyError, e:
                        raise SerializationError("Invalid key '%s' in map_fields. Did you add '%s' to the inline fields?" % (key, key_list[0]))

                if key_list[0] == value_list[0]:
                    # If the value is a ForeignKey as well (contains the SEPARATOR)
                    # we don't handle it here. It will be handled during the 
                    # serialization of the inline element.
                    return
                else:
                    # Crossmapping between different ForeignKey objects
                    # is currently not supported.
                    raise SerializationError("Crossmapping between different ForeignKey fields is currently not supported.")
示例#2
0
 def reverse_map_fields(self, objects=None):
     if not objects:
         objects = self.objects
     if not self.map_fields:
         return
     for k,v in self.map_fields.items():
         source, target = {}, {}
         source_keys = v.split(SEPARATOR)
         target_keys = k.split(SEPARATOR)
         try:
             source = traverse_dict(objects[0], source_keys, return_parent=True)
         except KeyError:
             continue
         for obj in objects:
             create_tree_with_val(obj, target_keys, source[source_keys[-1]])
         del source[source_keys[-1]]
示例#3
0
 def testTraverseListReturnParent(self):
     self.assertEqual(
         traverse_dict(self.d_list, ["a", "b", "c"], return_parent=True), [{"c": "value1"}, {"c": "value2"}]
     )
示例#4
0
 def testTraverseList2(self):
     self.assertEqual(traverse_dict(self.d_list, ["a", "b"]), [{"c": "value1"}, {"c": "value2"}])
示例#5
0
 def testTraverseList(self):
     self.assertEqual(traverse_dict(self.d_list, ["a", "b", "c"]), ["value1", "value2"])
示例#6
0
 def testTraverseSimpleReturnParent(self):
     self.assertEqual(traverse_dict(self.d, ["a", "b", "c"], return_parent=True), {"c": "value"})
示例#7
0
 def testTraverseSimple2(self):
     self.assertEqual(traverse_dict(self.d, ["a", "b"]), {"c": "value"})
示例#8
0
 def testTraverseSimple(self):
     self.assertEqual(traverse_dict(self.d, ["a", "b", "c"]), "value")