[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.
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)