[Checkins] SVN: z3c.vcsync/trunk/src/z3c/vcsync/ Add a simple
import/export system.
Martijn Faassen
faassen at infrae.com
Thu Jul 5 19:07:20 EDT 2007
Log message for revision 77489:
Add a simple import/export system.
Changed:
U z3c.vcsync/trunk/src/z3c/vcsync/README.txt
U z3c.vcsync/trunk/src/z3c/vcsync/__init__.py
A z3c.vcsync/trunk/src/z3c/vcsync/importexport.py
U z3c.vcsync/trunk/src/z3c/vcsync/vc.py
-=-
Modified: z3c.vcsync/trunk/src/z3c/vcsync/README.txt
===================================================================
--- z3c.vcsync/trunk/src/z3c/vcsync/README.txt 2007-07-05 22:32:45 UTC (rev 77488)
+++ z3c.vcsync/trunk/src/z3c/vcsync/README.txt 2007-07-05 23:07:20 UTC (rev 77489)
@@ -689,3 +689,72 @@
>>> container2['alpha'].payload
4000
+
+Exporting
+---------
+
+Besides version control synchronization, the same infrastructure
+can also be used for an export and import procedure.
+
+Here we export the state to a target directory::
+
+ >>> from z3c.vcsync import export_state
+ >>> target = create_test_dir()
+ >>> export_state(TestState(container2), target)
+
+Let's inspect the state of container2 first::
+
+ >>> sorted(container2.keys())
+ ['alpha', 'foo', 'hoi', 'sub']
+ >>> sorted(container2['sub'].keys())
+ ['qux']
+ >>> container2['alpha'].payload
+ 4000
+ >>> container2['foo'].payload
+ 1
+ >>> container2['hoi'].payload
+ 3000
+ >>> container2['sub']['qux'].payload
+ 3
+
+We can inspect the target directory and see the data is there::
+
+ >>> sorted([p.basename for p in target.listdir()])
+ ['alpha.test', 'foo.test', 'hoi.test', 'sub']
+ >>> target.join('alpha.test').read()
+ '4000\n'
+ >>> target.join('foo.test').read()
+ '1\n'
+ >>> target.join('hoi.test').read()
+ '3000\n'
+ >>> sub = target.join('sub')
+ >>> sorted([p.basename for p in sub.listdir()])
+ ['qux.test']
+ >>> sub.join('qux.test').read()
+ '3\n'
+
+Importing
+---------
+
+Now we import the state on the filesystem into a fresh container::
+
+ >>> container3 = Container()
+ >>> container3.__name__ = 'root'
+
+ >>> from z3c.vcsync import import_state
+ >>> import_state(TestState(container3), target)
+
+We expect the structure to be the same as what we exported::
+
+ >>> sorted(container3.keys())
+ ['alpha', 'foo', 'hoi', 'sub']
+ >>> sorted(container3['sub'].keys())
+ ['qux']
+ >>> container3['alpha'].payload
+ 4000
+ >>> container3['foo'].payload
+ 1
+ >>> container3['hoi'].payload
+ 3000
+ >>> container3['sub']['qux'].payload
+ 3
Modified: z3c.vcsync/trunk/src/z3c/vcsync/__init__.py
===================================================================
--- z3c.vcsync/trunk/src/z3c/vcsync/__init__.py 2007-07-05 22:32:45 UTC (rev 77488)
+++ z3c.vcsync/trunk/src/z3c/vcsync/__init__.py 2007-07-05 23:07:20 UTC (rev 77489)
@@ -1,2 +1,2 @@
from vc import Synchronizer
-
+from importexport import export_state, import_state
Added: z3c.vcsync/trunk/src/z3c/vcsync/importexport.py
===================================================================
--- z3c.vcsync/trunk/src/z3c/vcsync/importexport.py (rev 0)
+++ z3c.vcsync/trunk/src/z3c/vcsync/importexport.py 2007-07-05 23:07:20 UTC (rev 77489)
@@ -0,0 +1,25 @@
+from zope.app.container.interfaces import IContainer
+from z3c.vcsync.interfaces import IVcDump, IVcFactory
+from zope.component import getUtility
+
+def export_state(state, path):
+ export_helper(state.root, path)
+
+def export_helper(obj, path):
+ for obj in obj.values():
+ IVcDump(obj).save(path)
+ if IContainer.providedBy(obj):
+ export_helper(obj, path.join(obj.__name__))
+
+def import_state(state, path):
+ import_helper(state.root, path)
+
+def import_helper(obj, path):
+ for p in path.listdir():
+ factory = getUtility(IVcFactory, name=p.ext)
+ name = p.purebasename
+ if name in obj:
+ del obj[name]
+ obj[name] = new_obj = factory(p)
+ if p.check(dir=True):
+ import_helper(new_obj, p)
Modified: z3c.vcsync/trunk/src/z3c/vcsync/vc.py
===================================================================
--- z3c.vcsync/trunk/src/z3c/vcsync/vc.py 2007-07-05 22:32:45 UTC (rev 77488)
+++ z3c.vcsync/trunk/src/z3c/vcsync/vc.py 2007-07-05 23:07:20 UTC (rev 77489)
@@ -18,7 +18,7 @@
grok.provides(IVcDump)
grok.context(Interface)
- def save(self, checkout, path):
+ def save(self, path):
serializer = ISerializer(self.context)
path = path.join(serializer.name())
path.ensure()
@@ -31,7 +31,7 @@
grok.provides(IVcDump)
grok.context(IContainer)
- def save(self, checkout, path):
+ def save(self, path):
path = path.join(self.context.__name__)
path.ensure(dir=True)
@@ -103,8 +103,7 @@
# now save all files that have been modified/added
root = self.state.root
for obj in self.state.objects(dt):
- IVcDump(obj).save(self,
- self._get_container_path(root, obj))
+ IVcDump(obj).save(self._get_container_path(root, obj))
def load(self, dt):
# remove all objects that have been removed in the checkout
More information about the Checkins
mailing list