import json import setuptools from setuptools.command.test import test from pathlib import Path PKG_NAME = "archivebox" DESCRIPTION = "The self-hosted internet archive." LICENSE = "MIT" AUTHOR = "Nick Sweeting" AUTHOR_EMAIL="git@nicksweeting.com" REPO_URL = "https://github.com/ArchiveBox/ArchiveBox" PROJECT_URLS = { "Source": f"{REPO_URL}", "Documentation": f"{REPO_URL}/wiki", "Bug Tracker": f"{REPO_URL}/issues", "Changelog": f"{REPO_URL}/wiki/Changelog", "Roadmap": f"{REPO_URL}/wiki/Roadmap", "Community": f"{REPO_URL}/wiki/Web-Archiving-Community", "Donate": f"{REPO_URL}/wiki/Donations", } ROOT_DIR = Path(__file__).parent.resolve() PACKAGE_DIR = ROOT_DIR / PKG_NAME README = (PACKAGE_DIR / "README.md").read_text(encoding='utf-8', errors='ignore') VERSION = json.loads((PACKAGE_DIR / "package.json").read_text().strip())['version'] PYTHON_REQUIRES = ">=3.7" SETUP_REQUIRES = ["wheel"] INSTALL_REQUIRES = [ # only add things here that have corresponding apt python3-packages available # anything added here also needs to be added to our package dependencies in # stdeb.cfg (apt), archivebox.rb (brew), Dockerfile, etc. # if there is no apt python3-package equivalent, then vendor it instead in # ./archivebox/vendor/ "requests>=2.24.0", "atomicwrites>=1.4.0", "mypy-extensions>=0.4.3", "django>=3.1.3", "django-extensions>=3.0.3", "dateparser", "ipython", "youtube-dl", "python-crontab>=2.5.1", "croniter>=0.3.34", "w3lib>=1.22.0", ] EXTRAS_REQUIRE = { 'sonic': [ "sonic-client>=0.0.5", ], 'dev': [ "setuptools", "twine", "wheel", "flake8", "ipdb", "mypy", "django-stubs", "sphinx", "sphinx-rtd-theme", "recommonmark", "pytest", "bottle", "stdeb", "django-debug-toolbar", "djdt_flamegraph", ], } # To see when setup.py gets called (uncomment for debugging): # import sys # print(PACKAGE_DIR, f" (v{VERSION})") # print('>', sys.executable, *sys.argv) class DisabledTestCommand(test): def run(self): # setup.py test is deprecated, disable it here by force so stdeb doesnt run it print() print('[X] Running tests via setup.py test is deprecated.') print(' Hint: Use the ./bin/test.sh script or pytest instead') setuptools.setup( name=PKG_NAME, version=VERSION, license=LICENSE, author=AUTHOR, author_email=AUTHOR_EMAIL, description=DESCRIPTION, long_description=README, long_description_content_type="text/markdown", url=REPO_URL, project_urls=PROJECT_URLS, python_requires=PYTHON_REQUIRES, setup_requires=SETUP_REQUIRES, install_requires=INSTALL_REQUIRES, extras_require=EXTRAS_REQUIRE, packages=[PKG_NAME], include_package_data=True, # see MANIFEST.in entry_points={ "console_scripts": [ f"{PKG_NAME} = {PKG_NAME}.cli:main", ], }, classifiers=[ "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Development Status :: 4 - Beta", "Topic :: Utilities", "Topic :: System :: Archiving", "Topic :: System :: Archiving :: Backup", "Topic :: System :: Recovery Tools", "Topic :: Sociology :: History", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Indexing/Search", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", "Topic :: Software Development :: Libraries :: Python Modules", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: End Users/Desktop", "Intended Audience :: Information Technology", "Intended Audience :: Legal Industry", "Intended Audience :: System Administrators", "Environment :: Console", "Environment :: Web Environment", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Framework :: Django", "Typing :: Typed", ], cmdclass={ "test": DisabledTestCommand, }, )