| import codecs |
| import os |
| import shutil |
| import sys |
| import warnings |
| |
| import setuptools |
| from setuptools import setup, Command |
| from setuptools.command.egg_info import egg_info |
| |
| |
| PACKAGE_NAME = 'asn1crypto' |
| PACKAGE_VERSION = '1.4.0' |
| PACKAGE_ROOT = os.path.dirname(os.path.abspath(__file__)) |
| |
| |
| # setuptools 38.6.0 and newer know about long_description_content_type, but |
| # distutils still complains about it, so silence the warning |
| sv = setuptools.__version__ |
| svi = tuple(int(o) if o.isdigit() else o for o in sv.split('.')) |
| if svi >= (38, 6): |
| warnings.filterwarnings( |
| 'ignore', |
| "Unknown distribution option: 'long_description_content_type'", |
| module='distutils.dist' |
| ) |
| |
| |
| # Try to load the tests first from the source repository layout. If that |
| # doesn't work, we assume this file is in the release package, and the tests |
| # are part of the package {PACKAGE_NAME}_tests. |
| if os.path.exists(os.path.join(PACKAGE_ROOT, 'tests')): |
| tests_require = [] |
| test_suite = 'tests.make_suite' |
| else: |
| tests_require = ['%s_tests' % PACKAGE_NAME] |
| test_suite = '%s_tests.make_suite' % PACKAGE_NAME |
| |
| |
| # This allows us to send the LICENSE and docs when creating a sdist. Wheels |
| # automatically include the LICENSE, and don't need the docs. For these |
| # to be included, the command must be "python setup.py sdist". |
| package_data = {} |
| if sys.argv[1:] == ['sdist'] or sorted(sys.argv[1:]) == ['-q', 'sdist']: |
| package_data[PACKAGE_NAME] = [ |
| '../LICENSE', |
| '../*.md', |
| '../docs/*.md', |
| ] |
| |
| |
| # Ensures a copy of the LICENSE is included with the egg-info for |
| # install and bdist_egg commands |
| class EggInfoCommand(egg_info): |
| def run(self): |
| egg_info_path = os.path.join( |
| PACKAGE_ROOT, |
| '%s.egg-info' % PACKAGE_NAME |
| ) |
| if not os.path.exists(egg_info_path): |
| os.mkdir(egg_info_path) |
| shutil.copy2( |
| os.path.join(PACKAGE_ROOT, 'LICENSE'), |
| os.path.join(egg_info_path, 'LICENSE') |
| ) |
| egg_info.run(self) |
| |
| |
| class CleanCommand(Command): |
| user_options = [ |
| ('all', 'a', '(Compatibility with original clean command)'), |
| ] |
| |
| def initialize_options(self): |
| self.all = False |
| |
| def finalize_options(self): |
| pass |
| |
| def run(self): |
| sub_folders = ['build', 'temp', '%s.egg-info' % PACKAGE_NAME] |
| if self.all: |
| sub_folders.append('dist') |
| for sub_folder in sub_folders: |
| full_path = os.path.join(PACKAGE_ROOT, sub_folder) |
| if os.path.exists(full_path): |
| shutil.rmtree(full_path) |
| for root, dirs, files in os.walk(os.path.join(PACKAGE_ROOT, PACKAGE_NAME)): |
| for filename in files: |
| if filename[-4:] == '.pyc': |
| os.unlink(os.path.join(root, filename)) |
| for dirname in list(dirs): |
| if dirname == '__pycache__': |
| shutil.rmtree(os.path.join(root, dirname)) |
| |
| |
| readme = '' |
| with codecs.open(os.path.join(PACKAGE_ROOT, 'readme.md'), 'r', 'utf-8') as f: |
| readme = f.read() |
| |
| |
| setup( |
| name=PACKAGE_NAME, |
| version=PACKAGE_VERSION, |
| |
| description=( |
| 'Fast ASN.1 parser and serializer with definitions for private keys, ' |
| 'public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, ' |
| 'PKCS#12, PKCS#5, X.509 and TSP' |
| ), |
| long_description=readme, |
| long_description_content_type='text/markdown', |
| |
| url='https://github.com/wbond/asn1crypto', |
| |
| author='wbond', |
| author_email='[email protected]', |
| |
| license='MIT', |
| |
| classifiers=[ |
| 'Development Status :: 5 - Production/Stable', |
| |
| 'Intended Audience :: Developers', |
| |
| 'License :: OSI Approved :: MIT License', |
| |
| 'Programming Language :: Python', |
| 'Programming Language :: Python :: 2', |
| 'Programming Language :: Python :: 2.6', |
| 'Programming Language :: Python :: 2.7', |
| 'Programming Language :: Python :: 3', |
| 'Programming Language :: Python :: 3.2', |
| 'Programming Language :: Python :: 3.3', |
| 'Programming Language :: Python :: 3.4', |
| 'Programming Language :: Python :: 3.5', |
| 'Programming Language :: Python :: 3.6', |
| 'Programming Language :: Python :: 3.7', |
| 'Programming Language :: Python :: 3.8', |
| 'Programming Language :: Python :: Implementation :: CPython', |
| 'Programming Language :: Python :: Implementation :: PyPy', |
| |
| 'Topic :: Security :: Cryptography', |
| ], |
| |
| keywords='asn1 crypto pki x509 certificate rsa dsa ec dh', |
| |
| packages=[PACKAGE_NAME], |
| package_data=package_data, |
| |
| tests_require=tests_require, |
| test_suite=test_suite, |
| |
| cmdclass={ |
| 'clean': CleanCommand, |
| 'egg_info': EggInfoCommand, |
| } |
| ) |