[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