Changeset 2719 in products for quintagroup.transmogrifier/branches/dictionary/quintagroup
- Timestamp:
- Aug 3, 2010 5:56:55 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
quintagroup.transmogrifier/branches/dictionary/quintagroup/transmogrifier/namespaces/atns.py
r2716 r2719 16 16 17 17 from quintagroup.transmogrifier.namespaces.util import has_ctrlchars 18 19 20 18 21 19 ####################################### … … 45 43 46 44 def serialize(self, dom, parent_node, instance, options={}): 47 45 46 def getPreparedValue(value): 47 if isinstance(value, unicode): 48 value = value.encode('utf-8') 49 elif IBaseUnit.isImplementedBy(value): 50 value = value.getRaw(encoding='utf-8') 51 else: 52 value = str(value) 53 return value 54 55 56 def addNode(node, value, nspref): 57 # Create text node and add *value* to the *node*. 58 # Use *nspref* if needed. 59 if is_ref: 60 if config.HANDLE_REFS: 61 ref_node = dom.createElementNS(nspref, 'reference') 62 uid_node = dom.createElementNS(nspref, 'uid') 63 value = response.createTextNode(value) 64 uid_node.append(value) 65 ref_node.append(uid_node) 66 node.append(ref_node) 67 68 elif isinstance(value, str) and has_ctrlchars(value): 69 value = value.encode('base64') 70 attr = dom.createAttributeNS(nspref, 'transfer_encoding') 71 attr.value = 'base64' 72 node.setAttributeNode(attr) 73 value_node = dom.createCDATASection(value) 74 node.appendChild(value_node) 75 else: 76 value_node = dom.createTextNode(value) 77 node.appendChild(value_node) 78 48 79 values = self.get(instance) 49 80 if not values: … … 62 93 63 94 # try to get 'utf-8' encoded string 64 if isinstance(value, unicode): 65 value = value.encode('utf-8') 66 elif IBaseUnit.isImplementedBy(value): 67 value = value.getRaw(encoding='utf-8') 95 items = getattr(value, 'items', _marker) 96 if items is not _marker and callable(items): 97 # set type attribute for the field 98 type_attr = dom.createAttribute("type") 99 type_attr.value = "dict" 100 node.setAttributeNode(type_attr) 101 for k, v in items(): 102 # create item node with key attribute 103 good_key = getPreparedValue(k) 104 item_node = dom.createElementNS(self.namespace.xmlns, "item") 105 key_attr = dom.createAttribute("key") 106 key_attr.value = good_key 107 item_node.setAttributeNode(key_attr) 108 # prepare value for the item 109 good_value = getPreparedValue(v) 110 addNode(item_node, good_value, self.namespace.xmlns) 111 item_node.normalize() 112 node.appendChild(item_node) 68 113 else: 69 value = str(value) 70 71 if is_ref: 72 if config.HANDLE_REFS: 73 ref_node = dom.createElementNS(self.namespace.xmlns, 74 'reference') 75 uid_node = dom.createElementNS(self.namespace.xmlns, 76 'uid') 77 value = response.createTextNode(value) 78 uid_node.append(value) 79 ref_node.append(uid_node) 80 node.append(ref_node) 81 elif isinstance(value, str) and has_ctrlchars(value): 82 value = value.encode('base64') 83 attr = dom.createAttributeNS(self.namespace.xmlns, 84 'transfer_encoding') 85 attr.value = 'base64' 86 node.setAttributeNode(attr) 87 value_node = dom.createCDATASection(value) 88 node.appendChild(value_node) 89 else: 90 items = getattr(value, 'items', _marker) 91 if items is not _marker and callable(items): 92 type_attr = dom.createAttribute("type") 93 type_attr.value = "dict" 94 node.setAttributeNode( type_attr ) 95 value_node = dom.createTextNode(value) 96 node.appendChild(value_node) 114 value = getPreparedValue(value) 115 addNode(node, value, self.namespace.xmlns) 97 116 98 117 node.normalize()
Note: See TracChangeset
for help on using the changeset viewer.