Ignore:
Timestamp:
11/27/12 15:13:04 (17 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added option to output pretty xml, removed contexts from the saved ows files.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/scheme/readwrite.py

    r11202 r11204  
    33""" 
    44import sys 
     5import StringIO 
     6import shutil 
    57 
    68from xml.etree.ElementTree import TreeBuilder, Element, ElementTree 
     9from xml.dom import minidom 
     10 
    711from collections import defaultdict 
    812 
     
    100104        node_id = property_el.attrib.get("node_id") 
    101105        node = id_to_node[node_id] 
    102         data = property_el.text 
     106 
     107        format = property_el.attrib.get("format", "pickle") 
     108 
     109        if "data" in property_el.attrib: 
     110            data = literal_eval(property_el.attrib.get("data")) 
     111        else: 
     112            data = property_el.text 
     113 
    103114        properties = None 
    104115        try: 
     116            if format != "pickle": 
     117                raise ValueError("Cannot handle %r format" % format) 
     118 
    105119            properties = cPickle.loads(data) 
    106120        except Exception: 
    107121            log.error("Could not load properties for %r.", node.title, 
    108122                      exc_info=True) 
     123 
    109124        if properties is not None: 
    110125            node.properties = properties 
     
    217232 
    218233 
    219 def scheme_to_ows_stream(scheme, stream): 
    220     """Write scheme to a a stream in Orange Scheme .ows (v 2.0) format. 
     234def scheme_to_etree(scheme): 
     235    """Return an `xml.etree.ElementTree` representation of the `scheme. 
    221236    """ 
    222237    builder = TreeBuilder(element_factory=Element) 
     
    328343                builder.start("properties", 
    329344                              {"node_id": str(node_ids[node]), 
    330                                "format": "pickle"}) 
     345                               "format": "pickle", 
     346#                               "data": repr(data), 
     347                               }) 
    331348                builder.data(data) 
    332349                builder.end("properties") 
     
    336353    root = builder.close() 
    337354    tree = ElementTree(root) 
     355    return tree 
     356 
     357 
     358def scheme_to_ows_stream(scheme, stream, pretty=False): 
     359    """Write scheme to a a stream in Orange Scheme .ows (v 2.0) format. 
     360    """ 
     361    tree = scheme_to_etree(scheme) 
     362    buffer = StringIO.StringIO() 
    338363 
    339364    if sys.version_info < (2, 7): 
    340365        # in Python 2.6 the write does not have xml_declaration parameter. 
    341         tree.write(stream, encoding="utf-8") 
     366        tree.write(buffer, encoding="utf-8") 
    342367    else: 
    343         tree.write(stream, encoding="utf-8", xml_declaration=True) 
     368        tree.write(buffer, encoding="utf-8", xml_declaration=True) 
     369 
     370    if pretty: 
     371        dom = minidom.parse(StringIO.StringIO(buffer.getvalue())) 
     372        pretty_xml = dom.toprettyxml(encoding="utf-8") 
     373        buffer = StringIO.StringIO(pretty_xml) 
     374 
     375    shutil.copyfileobj(buffer, stream) 
Note: See TracChangeset for help on using the changeset viewer.