#!/usr/bin/env python3 import os import sys from typing import Any, Dict, Optional ZULIP_BOTS_VERSION = "0.8.0" IS_PYPA_PACKAGE = False package_data = { "": ["doc.md", "*.conf", "assets/*"], "zulip_bots": ["py.typed"], } # IS_PYPA_PACKAGE is set to True by tools/release-packages # before making a PyPA release. if not IS_PYPA_PACKAGE: package_data[""].append("fixtures/*.json") package_data[""].append("logo.*") with open("README.md") as fh: long_description = fh.read() # We should be installable with either setuptools or distutils. package_info = dict( name="zulip_bots", version=ZULIP_BOTS_VERSION, description="Zulip's Bot framework", long_description=long_description, long_description_content_type="text/markdown", author="Zulip Open Source Project", author_email="zulip-devel@googlegroups.com", classifiers=[ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Topic :: Communications :: Chat", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", ], python_requires=">=3.6", url="https://www.zulip.org/", project_urls={ "Source": "https://github.com/zulip/python-zulip-api/", "Documentation": "https://zulip.com/api", }, entry_points={ "console_scripts": [ "zulip-run-bot=zulip_bots.run:main", "zulip-terminal=zulip_bots.terminal:main", ], }, include_package_data=True, ) # type: Dict[str, Any] setuptools_info = dict( install_requires=[ "pip", "zulip", "html2text", "lxml", "BeautifulSoup4", "typing_extensions", ], ) try: from setuptools import find_packages, setup package_info.update(setuptools_info) package_info["packages"] = find_packages() package_info["package_data"] = package_data except ImportError: from distutils.core import setup from distutils.version import LooseVersion from importlib import import_module # Manual dependency check def check_dependency_manually(module_name: str, version: Optional[str] = None) -> None: try: module = import_module(module_name) # type: Any if version is not None: assert LooseVersion(module.__version__) >= LooseVersion(version) except (ImportError, AssertionError): if version is not None: print( f"{module_name}>={version} is not installed.", file=sys.stderr, ) else: print(f"{module_name} is not installed.", file=sys.stderr) sys.exit(1) check_dependency_manually("zulip") check_dependency_manually("mock", "2.0.0") check_dependency_manually("html2text") check_dependency_manually("PyDictionary") # Include all submodules under bots/ package_list = ["zulip_bots"] dirs = os.listdir("zulip_bots/bots/") for dir_name in dirs: if os.path.isdir(os.path.join("zulip_bots/bots/", dir_name)): package_list.append("zulip_bots.bots." + dir_name) package_info["packages"] = package_list setup(**package_info)