[setuptools] Automaticly move data content of a cubicweb's egg in the proper location. stable
authorPierre-Yves David <pierre-yves.david@logilab.fr>
Fri, 15 Oct 2010 11:39:54 +0200
branchstable
changeset 6504 88b3172eb7c7
parent 6503 0fd079726606
child 6505 ac4cecb26813
child 6518 a3f6dff718b4
[setuptools] Automaticly move data content of a cubicweb's egg in the proper location. This should be done once during the first import of the cubicweb module. This is an ugly hack because setuptools lake proper post install hooks.
__init__.py
__setuptools_hack__.py
--- a/__init__.py	Fri Oct 15 11:39:10 2010 +0200
+++ b/__init__.py	Fri Oct 15 11:39:54 2010 +0200
@@ -146,3 +146,4 @@
         CW_EVENT_MANAGER.bind(event, func, *args, **kwargs)
         return func
     return _decorator
+import cubicweb.__setuptools_hack__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/__setuptools_hack__.py	Fri Oct 15 11:39:54 2010 +0200
@@ -0,0 +1,30 @@
+from os import path as osp
+import sys
+import os
+
+def in_egg(path):
+    head, tail = osp.split(path)
+    while tail:
+        if tail.endswith('.egg'):
+            return True
+        head, tail = osp.split(head)
+    return False
+
+if in_egg(__file__):
+    from cubicweb.cwconfig import _find_prefix
+    INSTALL_PREFIX = _find_prefix()
+    if not osp.exists(osp.join(INSTALL_PREFIX, 'share', 'cubicweb', 'migration')):
+        print >> sys.stderr, 'copying cubicweb content to the expected location'
+        from shutil import copytree
+        import tarfile
+        import tempfile
+        from pkg_resources import Requirement, resource_filename
+        from functools import partial
+        file_path = partial(resource_filename, Requirement.parse("cubicweb"))
+        for df in ('share', 'lib'):
+            # Tar are used to merge with destination directory
+            tmp_file = tempfile.NamedTemporaryFile(suffix='.tar')
+            tmp_tar  = tarfile.TarFile(tmp_file.name, mode='w')
+            tmp_tar.add(file_path(df), arcname=df)
+            tmp_tar  = tarfile.TarFile(tmp_file.name, mode='r')
+            tmp_tar.extractall(path=INSTALL_PREFIX)