[+] update cli module;
This commit is contained in:
		
							parent
							
								
									34c65f7ba5
								
							
						
					
					
						commit
						ea63c67280
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -12,3 +12,4 @@ d2/book1/books
 | 
				
			|||||||
*.tar.gz
 | 
					*.tar.gz
 | 
				
			||||||
.vscode/*
 | 
					.vscode/*
 | 
				
			||||||
!.vscode/launch.json
 | 
					!.vscode/launch.json
 | 
				
			||||||
 | 
					python/build
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								deps/com.github.aiortc.aiortc
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								deps/com.github.aiortc.aiortc
									
									
									
									
										vendored
									
									
								
							@ -1 +1 @@
 | 
				
			|||||||
Subproject commit 1c158ef28435e2e0345a5d2682db8a2057d71522
 | 
					Subproject commit 64d8fecc5740fb77dcd40ef45a8b3c74c2187ba0
 | 
				
			||||||
@ -12,6 +12,7 @@ from .os import shutil_which
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from typing import (
 | 
					from typing import (
 | 
				
			||||||
    Optional,
 | 
					    Optional,
 | 
				
			||||||
 | 
					    Literal,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
logger = logging.getLogger(__name__)
 | 
					logger = logging.getLogger(__name__)
 | 
				
			||||||
@ -22,12 +23,107 @@ class Project:
 | 
				
			|||||||
    build_dir : pathlib.Path
 | 
					    build_dir : pathlib.Path
 | 
				
			||||||
    dest_dir : pathlib.Path
 | 
					    dest_dir : pathlib.Path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@dataclasses.dataclass
 | 
				
			||||||
 | 
					class Dependency:
 | 
				
			||||||
 | 
					    name: str
 | 
				
			||||||
 | 
					    mode : Literal['pyproject', 'meson', 'meson-python', 'm']
 | 
				
			||||||
 | 
					    source_path : pathlib.Path
 | 
				
			||||||
 | 
					    args: Optional[list[str]] = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@dataclasses.dataclass
 | 
				
			||||||
 | 
					class DistSettings:
 | 
				
			||||||
 | 
					    wheel_dir : pathlib.Path
 | 
				
			||||||
 | 
					    python_path: pathlib.Path
 | 
				
			||||||
 | 
					    env_path: pathlib.Path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CLI(abc.ABC):
 | 
					class CLI(abc.ABC):
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    @abc.abstractmethod
 | 
				
			||||||
 | 
					    def dist_settings(self) -> DistSettings:
 | 
				
			||||||
 | 
					        raise NotImplementedError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    @abc.abstractmethod
 | 
					    @abc.abstractmethod
 | 
				
			||||||
    def projects(self) -> dict[str, Project]:
 | 
					    def projects(self) -> dict[str, Project]:
 | 
				
			||||||
        raise NotImplementedError
 | 
					        raise NotImplementedError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    @abc.abstractmethod
 | 
				
			||||||
 | 
					    def dependencies(self) -> dict[str, Dependency]:
 | 
				
			||||||
 | 
					        raise NotImplementedError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def deploy_fetch_dist(
 | 
				
			||||||
 | 
					        self,
 | 
				
			||||||
 | 
					        force: bool,
 | 
				
			||||||
 | 
					    ) -> None:
 | 
				
			||||||
 | 
					        for k, o in self.dependencies.items():
 | 
				
			||||||
 | 
					            whl_glob = self.dist_settings.wheel_dir / ('*%s*.whl' % o.name.replace('.', '_'))
 | 
				
			||||||
 | 
					            if len(glob.glob(
 | 
				
			||||||
 | 
					                str(whl_glob)
 | 
				
			||||||
 | 
					            )) == 0 or force:
 | 
				
			||||||
 | 
					                if o.source_path.exists():
 | 
				
			||||||
 | 
					                    def whl_files_get() -> list[dict[str, Any]]:
 | 
				
			||||||
 | 
					                        return [
 | 
				
			||||||
 | 
					                            dict(
 | 
				
			||||||
 | 
					                                path=o,
 | 
				
			||||||
 | 
					                                stat=os.stat(o).st_mtime,
 | 
				
			||||||
 | 
					                            )
 | 
				
			||||||
 | 
					                            for o in glob.glob(
 | 
				
			||||||
 | 
					                                str(whl_glob)
 | 
				
			||||||
 | 
					                            )
 | 
				
			||||||
 | 
					                        ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    present_files = whl_files_get()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if o.mode == 'm':
 | 
				
			||||||
 | 
					                        if (o.source_path / 'm.py').exists():
 | 
				
			||||||
 | 
					                            cmd = [
 | 
				
			||||||
 | 
					                                sys.executable,
 | 
				
			||||||
 | 
					                                o.source_path / 'm.py',
 | 
				
			||||||
 | 
					                                'deploy:wheel',
 | 
				
			||||||
 | 
					                                '-o', self.settings.wheel_dir,
 | 
				
			||||||
 | 
					                            ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            if not o.args is None:
 | 
				
			||||||
 | 
					                                cmd.extend(o.args)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            subprocess.check_call(cmd)
 | 
				
			||||||
 | 
					                    else:
 | 
				
			||||||
 | 
					                        raise NotImplementedError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    updated_files = whl_files_get()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    def index_get(o: dict[str, Any]) -> tuple[Any, ...]:
 | 
				
			||||||
 | 
					                        return (o['path'], o['stat'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    present_files_index = {
 | 
				
			||||||
 | 
					                        index_get(o) : o
 | 
				
			||||||
 | 
					                        for o in present_files
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    new_files : list[dict[str, Any]] = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    for o in updated_files:
 | 
				
			||||||
 | 
					                        entry_index = index_get(o)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if not entry_index in present_files_index:
 | 
				
			||||||
 | 
					                            new_files.append(o)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if len(new_files) == 0:
 | 
				
			||||||
 | 
					                        raise NotImplementedError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    latest_file = sorted(
 | 
				
			||||||
 | 
					                        new_files,
 | 
				
			||||||
 | 
					                        key=lambda x: x['stat']
 | 
				
			||||||
 | 
					                    )[-1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    subprocess.check_call([
 | 
				
			||||||
 | 
					                        self.dist_settings.python_path,
 | 
				
			||||||
 | 
					                        '-m', 'pip',
 | 
				
			||||||
 | 
					                        'install', 
 | 
				
			||||||
 | 
					                        latest_file['path'],
 | 
				
			||||||
 | 
					                    ])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def deploy_wheel(
 | 
					    def deploy_wheel(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
        project_name: str,
 | 
					        project_name: str,
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										67
									
								
								python/online/fxreader/pr34/commands_typed/cli_bootstrap.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										67
									
								
								python/online/fxreader/pr34/commands_typed/cli_bootstrap.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env python3
 | 
				
			||||||
 | 
					import glob
 | 
				
			||||||
 | 
					import pathlib
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import subprocess
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					env_path = pathlib.Path(__file__).parent / '.venv'
 | 
				
			||||||
 | 
					python_path = env_path / 'bin' / 'python3'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if not env_path.exists():
 | 
				
			||||||
 | 
					    subprocess.check_call([
 | 
				
			||||||
 | 
					        'uv', 'venv', '--seed', '--offline',
 | 
				
			||||||
 | 
					        str(env_path)
 | 
				
			||||||
 | 
					    ])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    subprocess.check_call([
 | 
				
			||||||
 | 
					        'uv',
 | 
				
			||||||
 | 
					        'pip',
 | 
				
			||||||
 | 
					        'install',
 | 
				
			||||||
 | 
					        '-p',
 | 
				
			||||||
 | 
					        python_path,
 | 
				
			||||||
 | 
					        '--offline',
 | 
				
			||||||
 | 
					        'uv',
 | 
				
			||||||
 | 
					    ])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    subprocess.check_call([
 | 
				
			||||||
 | 
					        python_path,
 | 
				
			||||||
 | 
					        '-m',
 | 
				
			||||||
 | 
					        'uv', 'pip', 'install',
 | 
				
			||||||
 | 
					        '--offline',
 | 
				
			||||||
 | 
					        'build', 'setuptools', 'meson-python', 'pybind11',
 | 
				
			||||||
 | 
					    ])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    early_wheels = glob.glob(
 | 
				
			||||||
 | 
					        str(
 | 
				
			||||||
 | 
					            pathlib.Path(__file__).parent / 'deps' / 'dist' / 'early' / '*.whl'
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    if len(early_wheels) > 0:
 | 
				
			||||||
 | 
					        subprocess.check_call([
 | 
				
			||||||
 | 
					            python_path,
 | 
				
			||||||
 | 
					            '-m',
 | 
				
			||||||
 | 
					            'uv', 'pip', 'install',
 | 
				
			||||||
 | 
					            '--offline',
 | 
				
			||||||
 | 
					            *early_wheels,
 | 
				
			||||||
 | 
					        ])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    if pathlib.Path(sys.executable).absolute() != python_path.absolute():
 | 
				
			||||||
 | 
					        os.execv(
 | 
				
			||||||
 | 
					            str(python_path),
 | 
				
			||||||
 | 
					            [
 | 
				
			||||||
 | 
					                str(python_path),
 | 
				
			||||||
 | 
					                *sys.argv,
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    os.execv(
 | 
				
			||||||
 | 
					        str(python_path),
 | 
				
			||||||
 | 
					        [
 | 
				
			||||||
 | 
					            str(python_path),
 | 
				
			||||||
 | 
					            pathlib.Path(__file__).parent / 'cli.py',
 | 
				
			||||||
 | 
					            *sys.argv[1:],
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user