Author: jmorliaguet
Date: Fri Apr 28 22:01:26 2006
New Revision: 2981

Modified:
   cpsskins/branches/paris-sprint-2006/setup/snapshot.py
   cpsskins/branches/paris-sprint-2006/setup/utils.py
   cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py
Log:

- updated XML export views



Modified: cpsskins/branches/paris-sprint-2006/setup/snapshot.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/setup/snapshot.py       (original)
+++ cpsskins/branches/paris-sprint-2006/setup/snapshot.py       Fri Apr 28 
22:01:26 2006
@@ -36,7 +36,7 @@
         self.data = data
         self.contentType = 'application/tgz'
 
-        self.filename = 'site-%4d-%02d-%02d-%02d:%02d:%02d.tgz' % \
+        self.filename = 'site-%4d-%02d-%02d-%02d.%02d.%02d.tgz' % \
                          time.gmtime()[:6]
 
     def read(self):

Modified: cpsskins/branches/paris-sprint-2006/setup/utils.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/setup/utils.py  (original)
+++ cpsskins/branches/paris-sprint-2006/setup/utils.py  Fri Apr 28 22:01:26 2006
@@ -72,10 +72,10 @@
 
 class TarArchive:
 
-    def __init__(self, filename=u'dummy.tgz', mode='r', data=''):
+    def __init__(self, mode='r', data=''):
         self.mode = mode
         self.stream = StringIO(data)
-        self.archive = TarFile.open(str(filename), '%s:gz' % mode, self.stream)
+        self.archive = TarFile.open('', '%s:gz' % mode, self.stream)
 
     def __setitem__(self, k, v):
         if self.mode == 'r':
@@ -93,6 +93,8 @@
         return file.read()
 
     def __call__(self):
+        if self.mode == 'r':
+            raise TypeError("This tar archive is read-only.")
         self.archive.close()
         return self.stream.getvalue()
 

Modified: cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py 
(original)
+++ cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py Fri Apr 
28 22:01:26 2006
@@ -35,12 +35,6 @@
 from cpsskins.setup.snapshot import Snapshot
 from cpsskins.utils import getThemeManager
 
-themes_xml = """<?xml version="1.0"?>
-<themes>
-  %(content)s
-</themes>
-"""
-
 class SiteDesignerView:
     """Site designer view"""
 
@@ -107,6 +101,8 @@
     def reloadSetting(self, name=u''):
         """Reload the setting from the file-system
         """
+        if not name:
+            raise KeyError("Must specify a setting name.")
         reloadSetting(name)
 
     def refreshSettings(self):
@@ -144,18 +140,10 @@
     # Site
     ###################################################################
 
-    def exportSite(self, interactive=True):
+    def exportSite(self):
         """Export the entire site an XML file.
         """
-        filename = u'site.tgz'
-
-        if interactive:
-            response = self.request.response
-            response.setHeader('content-type', 'application/tgz')
-            response.setHeader('Content-disposition',
-                               'attachment; filename=%s' % filename)
-
-        archive = TarArchive(filename=filename, mode='w')
+        archive = TarArchive(mode='w')
 
         archive[u'themes.xml'] = self.exportThemes()
         archive[u'settings.xml'] = self.exportSettings()
@@ -168,16 +156,14 @@
     def importSite(self, file=None):
 
         archive = TarArchive(mode='r', data=file.read())
-
-        themes_data = archive[u'themes.xml']
-        displays_data = archive[u'displays.xml']
-        portlets_data = archive[u'portlets.xml']
-        relations_data = archive[u'relations.xml']
-
         mgr = getThemeManager(self.context)
 
         uri_mapping = {}
 
+        # themes
+        themes_data = archive[u'themes.xml']
+
+        # storages
         for storage_id in u'formats', u'displays', u'portlets':
             data = archive[u'%s.xml' % storage_id]
             storage = mgr[storage_id]
@@ -187,8 +173,11 @@
         for k, v in uri_mapping.items():
             print '%s -> %s' % (k, v)
 
+        # relations
         relations = mgr[u'relations']
         relations.purge()
+
+        relations_data = archive[u'relations.xml']
         self.importStorage(u'relations', relations_data)
 
     ###################################################################
@@ -199,9 +188,12 @@
         return getThemeManager(self.context).getSnapshotStorage()
 
     def createSnapshot(self):
+        data = self.exportSite()
+
         snapshots = self.getSnapshotStorage()
-        snapshot = Snapshot(data=self.exportSite(False))
+        snapshot = Snapshot(data=data)
         snapshots.add(snapshot, snapshot.filename)
+
         self.request.response.setHeader('content-type', 'text/x-json')
         return json.write({'form': {
             'snapshot': snapshot.filename,
@@ -212,14 +204,20 @@
         return list(self.getSnapshotStorage())
 
     def downloadSnapshot(self, filename=u''):
+        if not filename:
+            raise ValueError("No snaphost filename specified.")
+
         response = self.request.response
         response.setHeader('content-type', 'application/tgz')
         response.setHeader('Content-disposition',
                            'attachment; filename=%s' % filename)
+
         snapshots = self.getSnapshotStorage()
-        return snapshots[filename].data
+        return snapshots[filename].read()
 
     def importSnapshot(self, filename=u''):
+        if not filename:
+            raise ValueError("No snaphost filename specified.")
         snapshots = self.getSnapshotStorage()
         self.importSite(snapshots[filename])
 
@@ -243,6 +241,8 @@
 
     def importStorage(self, name=u'', xml=u''):
         request = self.request
+        if not name:
+            raise KeyError("Must specify a storage name.")
 
         mgr = getThemeManager(context)
         storage = mgr[name]
@@ -266,6 +266,9 @@
             exporter = getMultiAdapter((theme, request), IDataExporter)
             xml += exporter().replace(u'<?xml version="1.0"?>', u'')
 
-        return themes_xml % {'content': xml}
-
+        return u"""<?xml version="1.0"?>
+<themes>
+  %(content)s
+</themes>
+""" % {'content': xml} 
 
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to