|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"""Setup for pip package.""" |
|
|
|
import codecs |
|
import importlib.util |
|
import os |
|
import subprocess |
|
from distutils import cmd as distutils_cmd |
|
from distutils import log as distutils_log |
|
from itertools import chain |
|
|
|
import setuptools |
|
|
|
spec = importlib.util.spec_from_file_location('package_info', 'nemo/package_info.py') |
|
package_info = importlib.util.module_from_spec(spec) |
|
spec.loader.exec_module(package_info) |
|
|
|
|
|
__contact_emails__ = package_info.__contact_emails__ |
|
__contact_names__ = package_info.__contact_names__ |
|
__description__ = package_info.__description__ |
|
__download_url__ = package_info.__download_url__ |
|
__homepage__ = package_info.__homepage__ |
|
__keywords__ = package_info.__keywords__ |
|
__license__ = package_info.__license__ |
|
__package_name__ = package_info.__package_name__ |
|
__repository_url__ = package_info.__repository_url__ |
|
__version__ = package_info.__version__ |
|
|
|
|
|
if os.path.exists('nemo/README.md'): |
|
with open("nemo/README.md", "r", encoding='utf-8') as fh: |
|
long_description = fh.read() |
|
long_description_content_type = "text/markdown" |
|
|
|
elif os.path.exists('README.rst'): |
|
|
|
long_description = codecs.open( |
|
os.path.join(os.path.abspath(os.path.dirname(__file__)), 'README.rst'), 'r', encoding='utf-8', |
|
).read() |
|
long_description_content_type = "text/x-rst" |
|
|
|
else: |
|
long_description = 'See ' + __homepage__ |
|
long_description_content_type = "text/plain" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def req_file(filename, folder="requirements"): |
|
with open(os.path.join(folder, filename), encoding='utf-8') as f: |
|
content = f.readlines() |
|
|
|
|
|
return [x.strip() for x in content] |
|
|
|
|
|
install_requires = req_file("requirements.txt") |
|
|
|
extras_require = { |
|
|
|
'test': req_file("requirements_test.txt"), |
|
|
|
'core': req_file("requirements_lightning.txt"), |
|
'common': req_file('requirements_common.txt'), |
|
|
|
'asr': req_file("requirements_asr.txt"), |
|
'nlp': req_file("requirements_nlp.txt"), |
|
'tts': req_file("requirements_tts.txt"), |
|
'slu': req_file("requirements_slu.txt"), |
|
} |
|
|
|
|
|
extras_require['all'] = list(chain(extras_require.values())) |
|
|
|
|
|
extras_require['common'] = list(chain([extras_require['common'], extras_require['core']])) |
|
extras_require['test'] = list(chain([extras_require['tts'], extras_require['core'], extras_require['common'],])) |
|
extras_require['asr'] = list(chain([extras_require['asr'], extras_require['core'], extras_require['common']])) |
|
extras_require['nlp'] = list(chain([extras_require['nlp'], extras_require['core'], extras_require['common'],])) |
|
extras_require['tts'] = list(chain([extras_require['tts'], extras_require['core'], extras_require['common'],])) |
|
|
|
|
|
extras_require['tts'] = list(chain([extras_require['tts'], extras_require['asr']])) |
|
|
|
extras_require['slu'] = list(chain([extras_require['slu'], extras_require['asr']])) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class StyleCommand(distutils_cmd.Command): |
|
__LINE_WIDTH = 119 |
|
__ISORT_BASE = 'isort ' |
|
__BLACK_BASE = f'black --skip-string-normalization --line-length={__LINE_WIDTH}' |
|
description = 'Checks overall project code style.' |
|
user_options = [ |
|
('scope=', None, 'Folder of file to operate within.'), |
|
('fix', None, 'True if tries to fix issues in-place.'), |
|
] |
|
|
|
def __call_checker(self, base_command, scope, check): |
|
command = list(base_command) |
|
|
|
command.append(scope) |
|
|
|
if check: |
|
command.extend(['--check', '--diff']) |
|
|
|
self.announce( |
|
msg='Running command: %s' % str(' '.join(command)), level=distutils_log.INFO, |
|
) |
|
|
|
return_code = subprocess.call(command) |
|
|
|
return return_code |
|
|
|
def _isort(self, scope, check): |
|
return self.__call_checker(base_command=self.__ISORT_BASE.split(), scope=scope, check=check,) |
|
|
|
def _black(self, scope, check): |
|
return self.__call_checker(base_command=self.__BLACK_BASE.split(), scope=scope, check=check,) |
|
|
|
def _pass(self): |
|
self.announce(msg='\033[32mPASS\x1b[0m', level=distutils_log.INFO) |
|
|
|
def _fail(self): |
|
self.announce(msg='\033[31mFAIL\x1b[0m', level=distutils_log.INFO) |
|
|
|
|
|
def initialize_options(self): |
|
self.scope = '.' |
|
self.fix = '' |
|
|
|
def run(self): |
|
scope, check = self.scope, not self.fix |
|
isort_return = self._isort(scope=scope, check=check) |
|
black_return = self._black(scope=scope, check=check) |
|
|
|
if isort_return == 0 and black_return == 0: |
|
self._pass() |
|
else: |
|
self._fail() |
|
exit(isort_return if isort_return != 0 else black_return) |
|
|
|
def finalize_options(self): |
|
pass |
|
|
|
|
|
|
|
|
|
setuptools.setup( |
|
name=__package_name__, |
|
|
|
|
|
|
|
version=__version__, |
|
description=__description__, |
|
long_description=long_description, |
|
long_description_content_type=long_description_content_type, |
|
|
|
url=__repository_url__, |
|
download_url=__download_url__, |
|
|
|
author=__contact_names__, |
|
author_email=__contact_emails__, |
|
|
|
maintainer=__contact_names__, |
|
maintainer_email=__contact_emails__, |
|
|
|
license=__license__, |
|
classifiers=[ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'Development Status :: 5 - Production/Stable', |
|
|
|
'Intended Audience :: Developers', |
|
'Intended Audience :: Science/Research', |
|
'Intended Audience :: Information Technology', |
|
|
|
'Topic :: Scientific/Engineering', |
|
'Topic :: Scientific/Engineering :: Mathematics', |
|
'Topic :: Scientific/Engineering :: Image Recognition', |
|
'Topic :: Scientific/Engineering :: Artificial Intelligence', |
|
'Topic :: Software Development :: Libraries', |
|
'Topic :: Software Development :: Libraries :: Python Modules', |
|
'Topic :: Utilities', |
|
|
|
'License :: OSI Approved :: Apache Software License', |
|
|
|
'Programming Language :: Python :: 3', |
|
'Programming Language :: Python :: 3.8', |
|
'Programming Language :: Python :: 3.9', |
|
|
|
'Environment :: Console', |
|
'Natural Language :: English', |
|
'Operating System :: OS Independent', |
|
], |
|
packages=setuptools.find_packages(), |
|
install_requires=install_requires, |
|
|
|
|
|
|
|
|
|
extras_require=extras_require, |
|
|
|
include_package_data=True, |
|
exclude=['tools', 'tests'], |
|
package_data={'': ['*.tsv', '*.txt', '*.far', '*.fst', '*.cpp', 'Makefile']}, |
|
zip_safe=False, |
|
|
|
keywords=__keywords__, |
|
|
|
cmdclass={'style': StyleCommand}, |
|
) |
|
|