152 lines
4.4 KiB
Python
152 lines
4.4 KiB
Python
import sys
|
|
import shutil
|
|
import glob
|
|
import io
|
|
import copy
|
|
import subprocess
|
|
import pathlib
|
|
import logging
|
|
import enum
|
|
import argparse
|
|
import dataclasses
|
|
|
|
from typing import (Optional, override,)
|
|
|
|
from online.fxreader.pr34.commands_typed.logging import setup as logging_setup
|
|
|
|
from online.fxreader.pr34.commands_typed import cli as _cli
|
|
|
|
from online.fxreader.pr34.commands_typed import cli_bootstrap
|
|
|
|
logging_setup()
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class Command(enum.StrEnum):
|
|
mypy = 'mypy'
|
|
deploy_wheel = 'deploy:wheel'
|
|
|
|
@dataclasses.dataclass
|
|
class Settings(
|
|
_cli.DistSettings,
|
|
):
|
|
base_dir: pathlib.Path = pathlib.Path(__file__).parent.parent
|
|
build_dir: pathlib.Path = base_dir / 'tmp' / 'build'
|
|
wheel_dir: pathlib.Path = base_dir / 'deps' / 'dist'
|
|
env_path: pathlib.Path = cli_bootstrap.BootstrapSettings.get(base_dir).env_path
|
|
python_path: pathlib.Path = cli_bootstrap.BootstrapSettings.get(base_dir).python_path
|
|
|
|
|
|
class CLI(_cli.CLI):
|
|
def __init__(self) -> None:
|
|
self.settings = Settings()
|
|
self._projects: dict[str, _cli.Project] = {
|
|
'online.fxreader.pr34': _cli.Project(
|
|
source_dir=self.settings.base_dir / 'python',
|
|
build_dir=self.settings.base_dir / 'tmp' / 'online' / 'fxreader' / 'pr34' / 'build',
|
|
dest_dir=self.settings.base_dir / 'tmp' / 'online' / 'fxreader' / 'pr34' / 'install',
|
|
)
|
|
}
|
|
|
|
self._dependencies : dict[str, _cli.Dependency] = dict()
|
|
|
|
@override
|
|
@property
|
|
def dist_settings(self) -> _cli.DistSettings:
|
|
return self.settings
|
|
|
|
@override
|
|
@property
|
|
def projects(self) -> dict[str, _cli.Project]:
|
|
return self._projects
|
|
|
|
def mypy(
|
|
self,
|
|
argv: list[str],
|
|
) -> None:
|
|
import online.fxreader.pr34.commands_typed.mypy as _mypy
|
|
|
|
project = self._projects['online.fxreader.pr34']
|
|
|
|
_mypy.run(
|
|
argv,
|
|
settings=_mypy.MypySettings(
|
|
paths=[
|
|
#Settings.settings().project_root / 'dotfiles/.local/bin/commands',
|
|
# project.source_dir / 'm.py',
|
|
project.source_dir / '_m.py',
|
|
project.source_dir / 'online',
|
|
project.source_dir / 'cli.py',
|
|
self.settings.base_dir / 'm.py',
|
|
# Settings.settings().project_root / 'deps/com.github.aiortc.aiortc/src',
|
|
#Settings.settings().project_root / 'm.py',
|
|
],
|
|
max_errors={
|
|
'python/online/fxreader/pr34/commands_typed': 0,
|
|
'python/cli.py': 0,
|
|
'm.py': 0,
|
|
'deps/com.github.aiortc.aiortc/src/online_fxreader': 0,
|
|
'deps/com.github.aiortc.aiortc/src/aiortc/contrib/signaling': 0
|
|
}
|
|
),
|
|
)
|
|
|
|
@override
|
|
@property
|
|
def dependencies(self) -> dict[str, _cli.Dependency]:
|
|
return self._dependencies
|
|
|
|
def run(self, argv: Optional[list[str]] = None) -> None:
|
|
if argv is None:
|
|
argv = copy.deepcopy(sys.argv)
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(
|
|
'command',
|
|
choices=[
|
|
o.value
|
|
for o in Command
|
|
]
|
|
)
|
|
parser.add_argument(
|
|
'-p', '--project',
|
|
choices=[
|
|
o
|
|
for o in self.projects
|
|
]
|
|
)
|
|
parser.add_argument(
|
|
'-o', '--output_dir',
|
|
default=None,
|
|
help='wheel output dir for deploy:wheel',
|
|
)
|
|
parser.add_argument(
|
|
'-f', '--force',
|
|
default=False,
|
|
action='store_true',
|
|
help='remove install dir, before installing, default = false',
|
|
)
|
|
|
|
options, args = parser.parse_known_args(argv[1:])
|
|
|
|
options.command = Command(options.command)
|
|
|
|
if options.command is Command.deploy_wheel:
|
|
assert not options.project is None
|
|
|
|
self.deploy_wheel(
|
|
project_name=options.project,
|
|
argv=args,
|
|
output_dir=options.output_dir,
|
|
mypy=True,
|
|
)
|
|
elif options.command is Command.mypy:
|
|
self.mypy(
|
|
argv=args,
|
|
)
|
|
else:
|
|
raise NotImplementedError
|
|
|
|
if __name__ == '__main__':
|
|
CLI().run() |