aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/click/py2/tests/test_imports.py
blob: 49aa314469226a5f1b69e248a9cc0bd9fbc2f816 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import os
import json
import subprocess
import sys

from click._compat import WIN


IMPORT_TEST = b"""\
try:
    import __builtin__ as builtins
except ImportError:
    import builtins

found_imports = set()
real_import = builtins.__import__
import sys

def tracking_import(module, locals=None, globals=None, fromlist=None,
                    level=0):
    rv = real_import(module, locals, globals, fromlist, level)
    if globals and globals['__name__'].startswith('click') and level == 0:
        found_imports.add(module)
    return rv
builtins.__import__ = tracking_import

import click
rv = list(found_imports)
import json
click.echo(json.dumps(rv))
"""

ALLOWED_IMPORTS = {
    "weakref",
    "os",
    "struct",
    "collections",
    "sys",
    "contextlib",
    "functools",
    "stat",
    "re",
    "codecs",
    "inspect",
    "itertools",
    "io",
    "threading",
    "colorama",
    "errno",
    "fcntl",
    "datetime",
    "pipes",
}

if WIN:
    ALLOWED_IMPORTS.update(["ctypes", "ctypes.wintypes", "msvcrt", "time", "zlib"])


def test_light_imports():
    env = os.environ.copy()
    env["Y_PYTHON_ENTRY_POINT"] = ":main"
    c = subprocess.Popen(
        [sys.executable, "-"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, env=env,
    )
    rv = c.communicate(IMPORT_TEST)[0]

    if sys.version_info[0] != 2:
        rv = rv.decode("utf-8")
    imported = json.loads(rv)

    for module in imported:
        if module == "click" or module.startswith("click."):
            continue
        assert module in ALLOWED_IMPORTS