__setuptools_hack__.py
author Pierre-Yves David <pierre-yves.david@logilab.fr>
Fri, 15 Oct 2010 11:39:54 +0200
branchstable
changeset 6504 88b3172eb7c7
permissions -rw-r--r--
[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.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6504
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     1
from os import path as osp
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     2
import sys
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     3
import os
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     4
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     5
def in_egg(path):
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     6
    head, tail = osp.split(path)
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     7
    while tail:
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     8
        if tail.endswith('.egg'):
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     9
            return True
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    10
        head, tail = osp.split(head)
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    11
    return False
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    12
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    13
if in_egg(__file__):
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    14
    from cubicweb.cwconfig import _find_prefix
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    15
    INSTALL_PREFIX = _find_prefix()
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    16
    if not osp.exists(osp.join(INSTALL_PREFIX, 'share', 'cubicweb', 'migration')):
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    17
        print >> sys.stderr, 'copying cubicweb content to the expected location'
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    18
        from shutil import copytree
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    19
        import tarfile
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    20
        import tempfile
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    21
        from pkg_resources import Requirement, resource_filename
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    22
        from functools import partial
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    23
        file_path = partial(resource_filename, Requirement.parse("cubicweb"))
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    24
        for df in ('share', 'lib'):
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    25
            # Tar are used to merge with destination directory
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    26
            tmp_file = tempfile.NamedTemporaryFile(suffix='.tar')
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    27
            tmp_tar  = tarfile.TarFile(tmp_file.name, mode='w')
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    28
            tmp_tar.add(file_path(df), arcname=df)
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    29
            tmp_tar  = tarfile.TarFile(tmp_file.name, mode='r')
88b3172eb7c7 [setuptools] Automaticly move data content of a cubicweb's egg in the proper location.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    30
            tmp_tar.extractall(path=INSTALL_PREFIX)