1import textwrap
2
3
4def build_namespace_package(tmpdir, name):
5    src_dir = tmpdir / name
6    src_dir.mkdir()
7    setup_py = src_dir / 'setup.py'
8    namespace, sep, rest = name.partition('.')
9    script = textwrap.dedent("""
10        import setuptools
11        setuptools.setup(
12            name={name!r},
13            version="1.0",
14            namespace_packages=[{namespace!r}],
15            packages=[{namespace!r}],
16        )
17        """).format(**locals())
18    setup_py.write_text(script, encoding='utf-8')
19    ns_pkg_dir = src_dir / namespace
20    ns_pkg_dir.mkdir()
21    pkg_init = ns_pkg_dir / '__init__.py'
22    tmpl = '__import__("pkg_resources").declare_namespace({namespace!r})'
23    decl = tmpl.format(**locals())
24    pkg_init.write_text(decl, encoding='utf-8')
25    pkg_mod = ns_pkg_dir / (rest + '.py')
26    some_functionality = 'name = {rest!r}'.format(**locals())
27    pkg_mod.write_text(some_functionality, encoding='utf-8')
28    return src_dir
29
30
31def make_site_dir(target):
32    """
33    Add a sitecustomize.py module in target to cause
34    target to be added to site dirs such that .pth files
35    are processed there.
36    """
37    sc = target / 'sitecustomize.py'
38    target_str = str(target)
39    tmpl = '__import__("site").addsitedir({target_str!r})'
40    sc.write_text(tmpl.format(**locals()), encoding='utf-8')
41