~divmod-dev/divmod.org/trunk

« back to all changes in this revision

Viewing changes to Epsilon/epsilon/setuphelper.py

  • Committer: Jean-Paul Calderone
  • Date: 2014-06-29 20:33:04 UTC
  • mfrom: (2749.1.1 remove-epsilon-1325289)
  • Revision ID: exarkun@twistedmatrix.com-20140629203304-gdkmbwl1suei4m97
mergeĀ lp:~exarkun/divmod.org/remove-epsilon-1325289

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# -*- test-case-name: epsilon.test.test_setuphelper -*-
2
 
 
3
 
# For great justice, take off every zig.
4
 
import sys, os, pprint, traceback
5
 
 
6
 
from distutils.core import setup
7
 
 
8
 
def pluginModules(moduleNames):
9
 
    from twisted.python.reflect import namedAny
10
 
    for moduleName in moduleNames:
11
 
        try:
12
 
            yield namedAny(moduleName)
13
 
        except ImportError:
14
 
            pass
15
 
        except ValueError, ve:
16
 
            if ve.args[0] != 'Empty module name':
17
 
                traceback.print_exc()
18
 
        except:
19
 
            traceback.print_exc()
20
 
 
21
 
def _regeneratePluginCache(pluginPackages):
22
 
    print 'Regenerating cache with path: ',
23
 
    pprint.pprint(sys.path)
24
 
    from twisted import plugin
25
 
    for pluginModule in pluginModules([
26
 
        p + ".plugins" for p in pluginPackages]):
27
 
        # Not just *some* zigs, mind you - *every* zig:
28
 
        print 'Full plugin list for %r: ' % (pluginModule.__name__)
29
 
        pprint.pprint(list(plugin.getPlugins(plugin.IPlugin, pluginModule)))
30
 
 
31
 
def regeneratePluginCache(dist, pluginPackages):
32
 
    if 'install' in dist.commands:
33
 
        sys.path.insert(0, os.path.abspath(dist.command_obj['install'].install_lib))
34
 
        _regeneratePluginCache(pluginPackages)
35
 
 
36
 
def autosetup(**kw):
37
 
    packages = []
38
 
    datafiles = {}
39
 
    pluginPackages = []
40
 
 
41
 
    for (dirpath, dirnames, filenames) in os.walk(os.curdir):
42
 
        dirnames[:] = [p for p in dirnames if not p.startswith('.')]
43
 
        pkgName = dirpath[2:].replace('/', '.')
44
 
        if '__init__.py' in filenames:
45
 
            # The current directory is a Python package
46
 
            packages.append(pkgName)
47
 
        elif 'plugins' in dirnames:
48
 
            # The current directory is for the Twisted plugin system
49
 
            pluginPackages.append(pkgName)
50
 
            packages.append(pkgName)
51
 
 
52
 
    for package in packages:
53
 
        if '.' in package:
54
 
            continue
55
 
        D = datafiles[package] = []
56
 
        print 'Files in package %r:' % (package,)
57
 
        pprint.pprint(os.listdir(package))
58
 
        for (dirpath, dirnames, filenames) in os.walk(package):
59
 
            dirnames[:] = [p for p in dirnames if not p.startswith('.')]
60
 
            for filename in filenames:
61
 
                if filename == 'dropin.cache':
62
 
                    continue
63
 
                if (os.path.splitext(filename)[1] not in ('.py', '.pyc', '.pyo')
64
 
                    or '__init__.py' not in filenames):
65
 
                    D.append(os.path.join(dirpath[len(package)+1:], filename))
66
 
    autoresult = {
67
 
        'packages': packages,
68
 
        'package_data': datafiles,
69
 
        }
70
 
    print 'Automatically determined setup() args:'
71
 
    pprint.pprint(autoresult, indent=4)
72
 
    assert 'packages' not in kw
73
 
    assert 'package_data' not in kw
74
 
    kw.update(autoresult)
75
 
    distobj = setup(**kw)
76
 
    regeneratePluginCache(distobj, pluginPackages)
77
 
    return distobj