source: main/waeup.sirp/trunk/src/waeup/sirp/utils/importexport.py @ 4951

Last change on this file since 4951 was 4920, checked in by uli, 15 years ago

Make unit tests run again with the new package layout.

  • Property svn:eol-style set to native
File size: 2.7 KB
Line 
1import re
2import csv
3import grok
4import cPickle
5import zope.xmlpickle
6from cStringIO import StringIO
7from xml.dom.minidom import Document, getDOMImplementation
8from zope.interface import Interface
9from waeup.sirp.csvfile.interfaces import ICSVFile
10from waeup.sirp.interfaces import (IWAeUPObject, IWAeUPExporter, IWAeUPXMLExporter,
11                              IWAeUPXMLImporter, IWAeUPCSVImporter)
12
13def readFile(f):
14    """read a CSV file"""
15    headers = []
16    rows = []
17    f = csv.reader(f)
18    headers = f.next()
19    for line in f:
20        rows.append(line)
21    return (headers, rows)
22
23def writeFile(data):
24    writer = csv.writer(open("export.csv", "wb"))
25    writer.writerows(data)
26
27class Exporter(grok.Adapter):
28    """Export a WAeUP object as pickle.
29
30    This all-purpose exporter exports attributes defined in schemata
31    and contained objects (if the exported thing is a container).
32    """
33    grok.context(IWAeUPObject)
34    grok.provides(IWAeUPExporter)
35
36    def __init__(self, context):
37        self.context = context
38
39    def export(self, filepath=None):
40        if filepath is None:
41            filelike_obj = StringIO()
42        else:
43            filelike_obj = open(filepath, 'wb')
44        exported_obj = cPickle.dump(self.context, filelike_obj)
45        filelike_obj.close()
46        return filelike_obj
47
48class XMLExporter(grok.Adapter):
49    """Export a WAeUP object as XML.
50
51    This all-purpose exporter exports XML representations of pickable
52    objects.
53    """
54    grok.context(Interface)
55    grok.provides(IWAeUPXMLExporter)
56
57    def __init__(self, context):
58        self.context = context
59   
60    def export(self, filepath=None):
61        pickled_obj = cPickle.dumps(self.context)
62        result = zope.xmlpickle.toxml(pickled_obj)
63        if filepath is None:
64            filelike_obj = StringIO()
65        else:
66            filelike_obj = open(filepath, 'wb')
67        filelike_obj.write(result)
68        filelike_obj.seek(0)
69        return filelike_obj
70
71class XMLImporter(grok.Adapter):
72    """Import a WAeUP object from XML.
73    """
74    grok.context(Interface)
75    grok.provides(IWAeUPXMLImporter)
76
77    def __init__(self, context):
78        self.context = context
79   
80    def doImport(self, filepath):
81        xml = None
82        if isinstance(filepath, basestring):
83            xml = open(filepath, 'rb').read()
84        else:
85            xml = filepath.read()
86        obj = zope.xmlpickle.loads(xml)
87        return obj
88
89
90class CSVImporter(grok.MultiAdapter):
91    grok.adapts(ICSVFile, IWAeUPObject)
92    grok.provides(IWAeUPCSVImporter)
93    grok.baseclass()  # We don't want this base to be registered really.
94
95    def __init__(self, csvfile, receiver):
96        self.csvfile = csvfile
97        self.receiver = receiver
98
99    def doImport(self):
100        pass
Note: See TracBrowser for help on using the repository browser.