seafdav/setup.py
Martin Wendt ea85e27de9 Fix PEP8
Close #43
2018-04-22 16:58:18 +02:00

209 lines
6.7 KiB
Python

#!/usr/bin/env python
from __future__ import print_function
import os
import sys
# If true, then the DVCS revision won't be used to calculate the
# revision (set to True for real releases)
# RELEASE = False
from setuptools import setup, find_packages
from setuptools import Command
from setuptools.command.test import test as TestCommand
from wsgidav._version import __version__
# Override 'setup.py test' command
class ToxCommand(TestCommand):
def finalize_options(self):
TestCommand.finalize_options(self)
self.test_args = []
self.test_suite = True
def run_tests(self):
# Import here, cause outside the eggs aren't loaded
import tox
errcode = tox.cmdline(self.test_args)
sys.exit(errcode)
# Add custom command 'setup.py sphinx'
# See https://dankeder.com/posts/adding-custom-commands-to-setup-py/
# and http://stackoverflow.com/a/22273180/19166
class SphinxCommand(Command):
user_options = []
description = 'Build docs using Sphinx'
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
import subprocess
# sourcedir = os.path.join("doc", "sphinx")
outdir = os.path.join("doc", "sphinx-build")
res = subprocess.call(
"sphinx-build -b html doc/sphinx doc/sphinx-build", shell=True)
if res:
print("ERROR: sphinx-build exited with code {}".format(res))
else:
print("Documentation created at {}."
.format(os.path.abspath(outdir)))
try:
# readme = open("readme_pypi.rst", "rt").read()
readme = open("README.md", "rt").read()
except IOError:
readme = "(Readme file not found. Running from tox/setup.py test?)"
# 'setup.py upload' fails on Vista, because .pypirc is searched on 'HOME' path
if "HOME" not in os.environ and "HOMEPATH" in os.environ:
os.environ.setdefault("HOME", os.environ.get("HOMEPATH", ""))
print("Initializing HOME environment variable to '{}'"
.format(os.environ["HOME"]))
# CherryPy is required for the tests and benchmarks. It is also the preferrred
# server for the stand-alone mode (`wsgidav.server.run_server.py`).
# We currently do not add it as an installation requirement, because
# 1. users may not need the command line server at all
# 2. users may prefer another server
# 3. there may already cherrypy versions installed
install_requires = [
"defusedxml~=0.5",
"jsmin~=2.2",
"PyYAML~=3.2",
]
# The Windows MSI Setup should include lxml and CherryPy
if "bdist_msi" in sys.argv:
install_requires.extend([
"cheroot",
"lxml",
])
tests_require = [
"cheroot",
"pytest",
"pytest-cov",
"tox",
"webtest",
]
setup_requires = install_requires
use_cx_freeze = False
for cmd in ["bdist_msi"]:
if cmd in sys.argv:
use_cx_freeze = True
break
if use_cx_freeze:
try:
from cx_Freeze import setup, Executable # noqa F811
executables = [
Executable(script="wsgidav/server/run_server.py",
base=None,
# base="Win32GUI",
targetName="wsgidav.exe",
icon="doc/logo.ico",
shortcutName="WsgiDAV",
# requires cx_Freeze PR#94:
# copyright="(c) 2009-2018 Martin Wendt",
# trademarks="...",
)
]
except ImportError:
# tox has problems to install cx_Freeze to it's venvs, but it is not
# needed for the tests anyway
print("Could not import cx_Freeze; 'build' and 'bdist' commands will not be available.")
print("See https://pypi.python.org/pypi/cx_Freeze")
executables = []
else:
print("Did not import cx_Freeze, because 'bdist_msi' commands are not used ({})."
.format(sys.argv))
print("NOTE: this is a hack, because cx_Freeze seemed to sabotage wheel creation")
executables = []
build_exe_options = {
"includes": install_requires,
"packages": [],
"constants": "BUILD_COPYRIGHT='(c) 2009-2018 Martin Wendt'",
# "init_script": "Console",
}
bdist_msi_options = {
"upgrade_code": "{92F74137-38D1-48F6-9730-D5128C8B611E}",
"add_to_path": True,
# TODO: configure target dir
# "initial_target_dir": r"[ProgramFilesFolder]\%s\%s" % (company_name, product_name),
# TODO: configure shortcuts:
# http://stackoverflow.com/a/15736406/19166
}
setup(
name="WsgiDAV",
version=__version__,
author="Martin Wendt, Ho Chun Wei",
author_email="wsgidav@wwwendt.de",
maintainer="Martin Wendt",
maintainer_email="wsgidav@wwwendt.de",
url="https://github.com/mar10/wsgidav/",
description="Generic WebDAV server based on WSGI",
long_description=readme,
long_description_content_type="text/markdown",
classifiers=[
# Development Status :: 2 - Pre-Alpha
# Development Status :: 3 - Alpha
# Development Status :: 4 - Beta
# Development Status :: 5 - Production/Stable
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Information Technology",
"Intended Audience :: Developers",
"Intended Audience :: System Administrators",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Internet :: WWW/HTTP :: HTTP Servers",
"Topic :: Internet :: WWW/HTTP :: Dynamic Content",
"Topic :: Internet :: WWW/HTTP :: WSGI",
"Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
"Topic :: Internet :: WWW/HTTP :: WSGI :: Server",
"Topic :: Software Development :: Libraries :: Python Modules",
],
keywords="web wsgi webdav application server",
license="The MIT License",
packages=find_packages(exclude=["tests"]),
install_requires=install_requires,
setup_requires=setup_requires,
tests_require=tests_require,
py_modules=[],
zip_safe=False,
extras_require={},
cmdclass={
"test": ToxCommand,
"sphinx": SphinxCommand,
},
entry_points={
"console_scripts": ["wsgidav = wsgidav.server.run_server:run"],
},
options={
"build_exe": build_exe_options,
"bdist_msi": bdist_msi_options,
},
executables=executables,
)