everything is backwards-compatible with the previous interface, the only minor changes were to the doctor cmd which can now accept more than one item to run, and the --skip-config-check to skip the config_ok check if the user specifies to added a test using click.testing.CliRunner (tests the CLI in an isolated environment), though additional tests which aren't testing the CLI itself (parsing arguments or decorator behaviour) can just call the functions themselves, as they no longer accept a argparser.Namespace and instead accept the direct arguments
90 lines
3 KiB
Python
90 lines
3 KiB
Python
#!/usr/bin/env python3
|
|
# see https://github.com/karlicoss/pymplate for up-to-date reference
|
|
|
|
from setuptools import setup, find_namespace_packages # type: ignore
|
|
|
|
INSTALL_REQUIRES = [
|
|
'pytz', # even though it's not needed by the core, it's so common anyway...
|
|
'appdirs', # very common, and makes it portable
|
|
'more-itertools', # it's just too useful and very common anyway
|
|
'decorator' , # less pain in writing correct decorators. very mature and stable, so worth keeping in core
|
|
'click' , # for the CLI, printing colors, decorator-based - may allow extensions to CLI
|
|
]
|
|
|
|
|
|
def main():
|
|
pkg = 'my'
|
|
subpackages = find_namespace_packages('.', include=('my.*',))
|
|
setup(
|
|
name='HPI', # NOTE: 'my' is taken for PyPi already, and makes discovering the project impossible. so we're using HPI
|
|
use_scm_version={
|
|
# todo eh? not sure if I should just rely on proper tag naming and use use_scm_version=True
|
|
# 'version_scheme': 'python-simplified-semver',
|
|
'local_scheme': 'dirty-tag',
|
|
},
|
|
setup_requires=['setuptools_scm'],
|
|
|
|
zip_safe=False,
|
|
|
|
# eh. find_packages doesn't find anything
|
|
# find_namespace_packages can't find single file packages (like my/common.py)
|
|
packages=[pkg, *subpackages],
|
|
package_data={
|
|
pkg: [
|
|
# for mypy
|
|
'py.typed',
|
|
],
|
|
},
|
|
|
|
|
|
url='https://github.com/karlicoss/HPI',
|
|
author='Dmitrii Gerasimov',
|
|
author_email='karlicoss@gmail.com',
|
|
description='A Python interface to my life',
|
|
|
|
python_requires='>=3.6',
|
|
install_requires=INSTALL_REQUIRES,
|
|
extras_require={
|
|
'testing': [
|
|
'pytest',
|
|
'mypy',
|
|
'lxml', # for mypy coverage
|
|
|
|
# used in some tests.. although shouldn't rely on it
|
|
'pandas',
|
|
],
|
|
'optional': [
|
|
# todo document these?
|
|
'logzero',
|
|
'orjson',
|
|
'cachew>=0.8.0',
|
|
'mypy', # used for config checks
|
|
],
|
|
':python_version<"3.7"': [
|
|
# used for some modules... hopefully reasonable to have it as a default
|
|
'dataclasses',
|
|
],
|
|
},
|
|
entry_points={'console_scripts': ['hpi=my.core.__main__:main']},
|
|
)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
import argparse
|
|
p = argparse.ArgumentParser()
|
|
p.add_argument('--dependencies-only', action='store_true')
|
|
args, _ = p.parse_known_args()
|
|
if args.dependencies_only:
|
|
cmd = ['pip3', 'install', '--user', *INSTALL_REQUIRES]
|
|
scmd = ' '.join(cmd)
|
|
import os
|
|
xx = input(f'Run {scmd} [y/n] ')
|
|
if xx.strip() == 'y':
|
|
os.execvp(
|
|
'pip3',
|
|
cmd
|
|
)
|
|
else:
|
|
main()
|
|
|
|
# TODO assert??? diff -bur my/ ~/.local/lib/python3.8/site-packages/my/
|