123 lines
3 KiB
Python
123 lines
3 KiB
Python
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
|
|
# Copied from https://github.com/python-sdbus/python-sdbus
|
|
# Copyright (C) 2020, 2021 igo95862
|
|
|
|
# This file is part of nvme-cli
|
|
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|
|
|
# This library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Lesser General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with this library; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
from __future__ import annotations
|
|
|
|
from argparse import ArgumentParser
|
|
from os import environ
|
|
from pathlib import Path
|
|
from subprocess import run
|
|
from typing import List
|
|
|
|
source_root = Path(environ['MESON_SOURCE_ROOT'])
|
|
build_dir = Path(environ['MESON_BUILD_ROOT'])
|
|
|
|
tests_dir = source_root / 'tests'
|
|
|
|
all_python_modules = [
|
|
tests_dir,
|
|
]
|
|
|
|
mypy_cache_dir = build_dir / '.mypy_cache'
|
|
|
|
|
|
def run_mypy(path: Path) -> None:
|
|
print(f"Running mypy on {path}")
|
|
run(
|
|
args=(
|
|
'mypy', '--strict',
|
|
'--cache-dir', mypy_cache_dir,
|
|
'--python-version', '3.8',
|
|
'--namespace-packages',
|
|
'--ignore-missing-imports',
|
|
path,
|
|
),
|
|
check=False,
|
|
env={'MYPYPATH': str(tests_dir.absolute()), **environ},
|
|
)
|
|
|
|
|
|
def linter_main() -> None:
|
|
run(
|
|
args=(
|
|
'flake8',
|
|
*all_python_modules,
|
|
),
|
|
check=False,
|
|
)
|
|
|
|
for x in all_python_modules:
|
|
run_mypy(x)
|
|
|
|
|
|
def get_all_python_files() -> List[Path]:
|
|
python_files: List[Path] = []
|
|
|
|
for python_module in all_python_modules:
|
|
if python_module.is_dir():
|
|
for a_file in python_module.iterdir():
|
|
if a_file.suffix == '.py':
|
|
python_files.append(a_file)
|
|
else:
|
|
python_files.append(python_module)
|
|
|
|
return python_files
|
|
|
|
|
|
def formater_main() -> None:
|
|
all_python_files = get_all_python_files()
|
|
|
|
run(
|
|
args=('autopep8', '--in-place', *all_python_files),
|
|
check=False,
|
|
)
|
|
|
|
run(
|
|
args=(
|
|
'isort',
|
|
'-m', 'VERTICAL_HANGING_INDENT',
|
|
'--trailing-comma',
|
|
*all_python_files,
|
|
),
|
|
check=False,
|
|
)
|
|
|
|
|
|
def main() -> None:
|
|
parser = ArgumentParser()
|
|
parser.add_argument(
|
|
'mode',
|
|
choices=('lint', 'format'),
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
mode = args.mode
|
|
|
|
if mode == 'lint':
|
|
linter_main()
|
|
elif mode == 'format':
|
|
formater_main()
|
|
else:
|
|
raise ValueError('Unknown mode', mode)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|