aboutsummaryrefslogtreecommitdiffstats
path: root/setup.py
blob: 8d87bc5d6347ac18b09ef322715b937c4b74de0d (plain)
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
from distutils.core import setup
import fnmatch, os.path
from libmproxy import version


def pdir():
    dirname, _ = os.path.split(__file__)
    return os.path.abspath(dirname)


def _fnmatch(name, patternList):
    for i in patternList:
        if fnmatch.fnmatch(name, i):
            return True
    return False


def _splitAll(path):
    parts = []
    h = path
    while 1:
        if not h:
            break
        h, t = os.path.split(h)
        parts.append(t)
    parts.reverse()
    return parts


def findPackages(path, dataExclude=[]):
    """
        Recursively find all packages and data directories rooted at path. Note
        that only data _directories_ and their contents are returned -
        non-Python files at module scope are not, and should be manually
        included.

        dataExclude is a list of fnmatch-compatible expressions for files and
        directories that should not be included in pakcage_data.

        Returns a (packages, package_data) tuple, ready to be passed to the
        corresponding distutils.core.setup arguments.
    """
    packages = []
    datadirs = []
    for root, dirs, files in os.walk(path, topdown=True):
        if "__init__.py" in files:
            p = _splitAll(root)
            packages.append(".".join(p))
        else:
            dirs[:] = []
            if packages:
                datadirs.append(root)

    # Now we recurse into the data directories
    package_data = {}
    for i in datadirs:
        if not _fnmatch(i, dataExclude):
            parts = _splitAll(i)
            module = ".".join(parts[:-1])
            acc = package_data.get(module, [])
            for root, dirs, files in os.walk(i, topdown=True):
                sub = os.path.join(*_splitAll(root)[1:])
                if not _fnmatch(sub, dataExclude):
                    for fname in files:
                        path = os.path.join(sub, fname)
                        if not _fnmatch(path, dataExclude):
                            acc.append(path)
                else:
                    dirs[:] = []
            package_data[module] = acc
    return packages, package_data


with open(os.path.join(pdir(), "README.txt")) as f:
    long_description = f.read()
packages, package_data = findPackages("libmproxy")


scripts = ["mitmdump"]
if os.name != "nt":
    scripts.append("mitmproxy")

deps = {
    "netlib>=%s" % version.MINORVERSION,
    "pyasn1>0.1.2",
    "requests>=2.4.0",
    "pyOpenSSL>=0.14",
    "Flask>=0.10.1",
    "tornado>=4.0.2"
}
script_deps = {
    "mitmproxy": {
        "urwid>=1.1",
        "lxml>=3.3.6",
        "Pillow>=2.3.0",
    },
    "mitmdump": set()
}
for script in scripts:
    deps.update(script_deps[script])
if os.name == "nt":
    deps.add("pydivert>=0.0.4")  # Transparent proxying on Windows
console_scripts = ["%s = libmproxy.main:%s" % (s, s) for s in scripts]



setup(
    name="mitmproxy",
    version=version.VERSION,
    description="An interactive, SSL-capable, man-in-the-middle HTTP proxy for penetration testers and software developers.",
    long_description=long_description,
    author="Aldo Cortesi",
    author_email="aldo@corte.si",
    url="http://mitmproxy.org",
    packages=packages,
    package_data=package_data,
    classifiers=[
        "License :: OSI Approved :: MIT License",
        "Development Status :: 5 - Production/Stable",
        "Environment :: Console",
        "Environment :: Console :: Curses",
        "Operating System :: MacOS :: MacOS X",
        "Operating System :: POSIX",
        "Programming Language :: Python",
        "Programming Language :: Python :: 2",
        "Topic :: Security",
        "Topic :: Internet",
        "Topic :: Internet :: WWW/HTTP",
        "Topic :: Internet :: Proxy Servers",
        "Topic :: Software Development :: Testing"
    ],
    entry_points={
        'console_scripts': console_scripts
    },
    install_requires=list(deps),
    extras_require={
        'dev': [
            "mock>=1.0.1",
            "nose>=1.3.0",
            "nose-cov>=1.6",
            "coveralls>=0.4.1",
            "pathod>=%s" % version.MINORVERSION
        ],
        'contentviews': [
            "pyamf>=0.6.1",
            "protobuf>=2.5.0",
            "cssutils>=1.0"
        ]
    }
)