aboutsummaryrefslogtreecommitdiffstats
path: root/setup.py
diff options
context:
space:
mode:
Diffstat (limited to 'setup.py')
-rw-r--r--setup.py179
1 files changed, 80 insertions, 99 deletions
diff --git a/setup.py b/setup.py
index df9c712f..d6983d4f 100644
--- a/setup.py
+++ b/setup.py
@@ -1,112 +1,93 @@
-from distutils.core import setup
-import fnmatch, os.path
+from setuptools import setup, find_packages
+from codecs import open
+import os
from libmproxy import version
+# Based on https://github.com/pypa/sampleproject/blob/master/setup.py
+# and https://python-packaging-user-guide.readthedocs.org/
-def pdir():
- dirname, _ = os.path.split(__file__)
- return os.path.abspath(dirname)
+here = os.path.abspath(os.path.dirname(__file__))
+with open(os.path.join(here, 'README.txt'), encoding='utf-8') as f:
+ long_description = f.read()
-def _fnmatch(name, patternList):
- for i in patternList:
- if fnmatch.fnmatch(name, i):
- return True
- return False
-
+scripts = ["mitmdump"]
+if os.name != "nt":
+ scripts.append("mitmproxy")
-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
+deps = {
+ "netlib>=%s" % version.MINORVERSION,
+ "pyasn1>0.1.2",
+ "requests>=2.4.0",
+ "pyOpenSSL>=0.14",
+ "Flask>=0.10.1",
+ "tornado>=4.0.2",
+ "sortedcontainers>=0.9.1"
+}
+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
+]
-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.
+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,
+ url="http://mitmproxy.org",
+ author="Aldo Cortesi",
+ author_email="aldo@corte.si",
+ license="MIT",
+ 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",
+ "Programming Language :: Python :: 2.7",
+ "Topic :: Security",
+ "Topic :: Internet",
+ "Topic :: Internet :: WWW/HTTP",
+ "Topic :: Internet :: Proxy Servers",
+ "Topic :: Software Development :: Testing"
+ ],
- 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)
+ packages=find_packages(),
+ include_package_data=True,
- # 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
+ entry_points={
+ 'console_scripts': console_scripts
+ },
-with open(os.path.join(pdir(), "README.txt")) as f:
- long_description = f.read()
-packages, package_data = findPackages("libmproxy")
-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,
- scripts = ["mitmproxy", "mitmdump"],
- 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"
- ],
- install_requires=[
- "netlib>=%s"%version.MINORVERSION,
- "urwid>=1.1",
- "pyasn1>0.1.2",
- "requests>=1.2.2",
- "pyopenssl>=0.14",
- "Pillow>=2.3.0",
- "lxml",
- "flask"
+ 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"
+ ]
+ }
+) \ No newline at end of file