Source code for cellcomplex.utils.utils_txt
# -*- python -*-
# -*- coding: latin-1 -*-
#
# utils : container package
#
# Copyright or © or Copr. 2006 INRIA - CIRAD - INRA
#
# File author(s): Jerome Chopard <jerome.chopard@sophia.inria.fr>
#
# Distributed under the Cecill-C License.
# See accompanying file LICENSE.txt or copy at
# http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html
#
# VPlants WebSite : https://gforge.inria.fr/projects/vplants/
#
__doc__="""
This module provide a simple way to serialize elements in a txt file
"""
__license__= "Cecill-C"
__revision__=" $Id$ "
[docs]def write_description (f, description) :
"""Add a description paragraph to a given stream
if description is not empty
"""
if description == "" :
return
f.write("BEGIN description\n")
f.write(description)
f.write("\n")
f.write("END description\n")
[docs]def read_description (f) :
"""Read the description in a stream.
"""
line = ""
while "BEGIN description" not in line :
line = f.readline()
descr = ""
line = f.readline()
while "END description" not in line :
descr += line
line = f.readline()
return descr[:-1]
[docs]def property_to_xml (doc, prop, description,
key_type = "", key_description = "",
value_type = "", value_description = "") :
"""
return an xml description of this dictionary
"""
#create base node
prop_node = doc.createElement("property")
#description
write_description(doc,prop_node,description)
#keys
key_node = doc.createElement("keys")
key_node.setAttribute("type",key_type)
key_node.setAttribute("description",key_description)
prop_node.appendChild(key_node)
#values
value_node = doc.createElement("values")
value_node.setAttribute("type",value_type)
value_node.setAttribute("description",value_description)
prop_node.appendChild(value_node)
#datas
datas_node = doc.createElement("datas")
for key,value in prop.items() :
node = doc.createElement("data")
node.setAttribute("key",str(key))
node.setAttribute("val",str(value))
datas_node.appendChild(node)
prop_node.appendChild(datas_node)
#return
return prop_node
[docs]def xml_to_property (property_node) :
"""
retrieve the property structure from an xml node
returns property,(description,(key_type,key_descr),(value_type,value_descr))
"""
#create property
prop = {}
#read description
descr = read_description(property_node)
#keys
key_node, = (node for node in property_node.childNodes if node.nodeName == "keys")
key_type = key_node.getAttribute("type")
key_descr = key_node.getAttribute("description")
#values
value_node, = (node for node in property_node.childNodes if node.nodeName == "values")
value_type = value_node.getAttribute("type")
value_descr = value_node.getAttribute("description")
#datas
datas_node, = (node for node in property_node.childNodes if node.nodeName == "datas")
for node in datas_node.childNodes :
if node.nodeName == "data" :
key = eval(node.getAttribute("key"))
value = eval(node.getAttribute("val"))
prop[key] = value
#return
return prop,(descr,(key_type,key_descr),(value_type,value_descr))