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