From 42fb88c35d9a6457b3e545b120bf111d83540bba Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Wed, 7 Dec 2022 15:45:10 +0100 Subject: [PATCH] Removed old new command #139 --- src/cpl_cli/command/new_old_service.py | 356 ------------------------- 1 file changed, 356 deletions(-) delete mode 100644 src/cpl_cli/command/new_old_service.py diff --git a/src/cpl_cli/command/new_old_service.py b/src/cpl_cli/command/new_old_service.py deleted file mode 100644 index 5715f5cd..00000000 --- a/src/cpl_cli/command/new_old_service.py +++ /dev/null @@ -1,356 +0,0 @@ -import os -import sys -import textwrap -from typing import Optional - -from packaging import version - -import cpl_cli -import cpl_core -from cpl_cli.configuration.venv_helper_service import VenvHelper -from cpl_cli.source_creator.unittest_builder import UnittestBuilder - -from cpl_core.configuration.configuration_abc import ConfigurationABC -from cpl_core.console.foreground_color_enum import ForegroundColorEnum -from cpl_core.console.console import Console -from cpl_core.utils.string import String -from cpl_cli.command_abc import CommandABC -from cpl_cli.configuration.build_settings import BuildSettings -from cpl_cli.configuration.build_settings_name_enum import BuildSettingsNameEnum -from cpl_cli.configuration.project_settings import ProjectSettings -from cpl_cli.configuration.project_settings_name_enum import ProjectSettingsNameEnum -from cpl_cli.configuration.project_type_enum import ProjectTypeEnum -from cpl_cli.configuration.version_settings_name_enum import VersionSettingsNameEnum -from cpl_cli.configuration.workspace_settings import WorkspaceSettings -from cpl_cli.source_creator.console_builder import ConsoleBuilder -from cpl_cli.source_creator.library_builder import LibraryBuilder - - -class NewService(CommandABC): - - def __init__(self, configuration: ConfigurationABC): - """ - Service for the CLI command new - :param configuration: - """ - CommandABC.__init__(self) - - self._config = configuration - self._env = self._config.environment - - self._workspace: WorkspaceSettings = self._config.get_configuration(WorkspaceSettings) - self._project: ProjectSettings = ProjectSettings() - self._project_dict = {} - self._build: BuildSettings = BuildSettings() - self._build_dict = {} - self._project_json = {} - - self._name: str = '' - self._rel_path: str = '' - self._schematic: ProjectTypeEnum = ProjectTypeEnum.console - self._use_nothing: bool = False - self._use_application_api: bool = False - self._use_startup: bool = False - self._use_service_providing: bool = False - self._use_async: bool = False - self._use_venv: bool = False - self._use_base: bool = False - - @property - def help_message(self) -> str: - return textwrap.dedent("""\ - Generates a workspace and initial project or add a project to workspace. - Usage: cpl new - - Arguments: - type The project type of the initial project - name Name of the workspace or the project - - Types: - console (c|C) - library (l|L) - unittest (ut|UT) - """) - - def _create_project_settings(self): - self._rel_path = os.path.dirname(self._name) - self._project_dict = { - ProjectSettingsNameEnum.name.value: os.path.basename(self._name), - ProjectSettingsNameEnum.version.value: { - VersionSettingsNameEnum.major.value: '0', - VersionSettingsNameEnum.minor.value: '0', - VersionSettingsNameEnum.micro.value: '0' - }, - ProjectSettingsNameEnum.author.value: '', - ProjectSettingsNameEnum.author_email.value: '', - ProjectSettingsNameEnum.description.value: '', - ProjectSettingsNameEnum.long_description.value: '', - ProjectSettingsNameEnum.url.value: '', - ProjectSettingsNameEnum.copyright_date.value: '', - ProjectSettingsNameEnum.copyright_name.value: '', - ProjectSettingsNameEnum.license_name.value: '', - ProjectSettingsNameEnum.license_description.value: '', - ProjectSettingsNameEnum.dependencies.value: [ - f'cpl-core>={version.parse(cpl_core.__version__)}' - ], - ProjectSettingsNameEnum.dev_dependencies.value: [ - f'cpl-cli>={version.parse(cpl_cli.__version__)}' - ], - ProjectSettingsNameEnum.python_version.value: f'>={sys.version.split(" ")[0]}', - ProjectSettingsNameEnum.python_path.value: { - sys.platform: '../../venv/bin/python' if self._use_venv else '' - }, - ProjectSettingsNameEnum.classifiers.value: [] - } - - self._project.from_dict(self._project_dict) - - def _create_build_settings(self): - self._build_dict = { - BuildSettingsNameEnum.project_type.value: self._schematic, - BuildSettingsNameEnum.source_path.value: '', - BuildSettingsNameEnum.output_path.value: '../../dist', - BuildSettingsNameEnum.main.value: f'{String.convert_to_snake_case(self._project.name)}.main', - BuildSettingsNameEnum.entry_point.value: self._project.name, - BuildSettingsNameEnum.include_package_data.value: False, - BuildSettingsNameEnum.included.value: [], - BuildSettingsNameEnum.excluded.value: [ - '*/__pycache__', - '*/logs', - '*/tests' - ], - BuildSettingsNameEnum.package_data.value: {}, - BuildSettingsNameEnum.project_references.value: [] - } - self._build.from_dict(self._build_dict) - - def _create_project_json(self): - """ - Creates cpl.json content - :return: - """ - self._project_json = { - ProjectSettings.__name__: self._project_dict, - BuildSettings.__name__: self._build_dict - } - - def _get_project_path(self) -> Optional[str]: - """ - Gets project path - :return: - """ - if self._workspace is None: - project_path = os.path.join(self._env.working_directory, self._rel_path, self._project.name) - else: - base = '' if self._use_base else 'src' - project_path = os.path.join(self._env.working_directory, base, self._rel_path, String.convert_to_snake_case(self._project.name)) - - if os.path.isdir(project_path) and len(os.listdir(project_path)) > 0: - Console.write_line(project_path) - Console.error('Project path is not empty\n') - return None - - return project_path - - def _get_project_information(self, is_unittest=False): - """ - Gets project information's from user - :return: - """ - if self._use_application_api or self._use_startup or self._use_service_providing or self._use_async or self._use_nothing: - Console.set_foreground_color(ForegroundColorEnum.default) - Console.write_line('Skipping question due to given flags') - return - - if not is_unittest: - self._use_application_api = Console.read('Do you want to use application base? (y/n) ').lower() == 'y' - - if not is_unittest and self._use_application_api: - self._use_startup = Console.read('Do you want to use startup? (y/n) ').lower() == 'y' - - if not is_unittest and not self._use_application_api: - self._use_service_providing = Console.read('Do you want to use service providing? (y/n) ').lower() == 'y' - - if not self._use_async: - self._use_async = Console.read('Do you want to use async? (y/n) ').lower() == 'y' - - Console.set_foreground_color(ForegroundColorEnum.default) - - def _console(self, args: list[str]): - """ - Generates new console project - :param args: - :return: - """ - self._create_project_settings() - self._create_build_settings() - self._create_project_json() - path = self._get_project_path() - if path is None: - return - - self._get_project_information() - project_name = self._project.name - if self._rel_path != '': - project_name = f'{self._rel_path}/{project_name}' - try: - ConsoleBuilder.build( - path, - self._use_application_api, - self._use_startup, - self._use_service_providing, - self._use_async, - project_name, - self._project_json, - self._workspace - ) - except Exception as e: - Console.error('Could not create project', str(e)) - - def _unittest(self, args: list[str]): - """ - Generates new unittest project - :param args: - :return: - """ - self._create_project_settings() - self._create_build_settings() - self._create_project_json() - path = self._get_project_path() - if path is None: - return - - self._get_project_information(is_unittest=True) - project_name = self._project.name - if self._rel_path != '': - project_name = f'{self._rel_path}/{project_name}' - try: - UnittestBuilder.build( - path, - self._use_application_api, - self._use_async, - project_name, - self._project_json, - self._workspace - ) - except Exception as e: - Console.error('Could not create project', str(e)) - - def _library(self, args: list[str]): - """ - Generates new library project - :param args: - :return: - """ - self._create_project_settings() - self._create_build_settings() - self._create_project_json() - path = self._get_project_path() - if path is None: - return - - self._get_project_information() - project_name = self._project.name - if self._rel_path != '': - project_name = f'{self._rel_path}/{project_name}' - try: - LibraryBuilder.build( - path, - self._use_application_api, - self._use_startup, - self._use_service_providing, - self._use_async, - project_name, - self._project_json, - self._workspace - ) - except Exception as e: - Console.error('Could not create project', str(e)) - - def _create_venv(self): - - project = self._project.name - if self._workspace is not None: - project = self._workspace.default_project - - if self._env.working_directory.endswith(project): - project = '' - - if self._workspace is None and self._use_base: - project = f'{self._rel_path}/{project}' - - VenvHelper.init_venv( - False, - self._env, - self._project, - explicit_path=os.path.join(self._env.working_directory, project, self._project.python_executable.replace('../', '')) - ) - - def execute(self, args: list[str]): - """ - Entry point of command - :param args: - :return: - """ - if 'nothing' in args: - self._use_nothing = True - self._use_async = False - self._use_application_api = False - self._use_startup = False - self._use_service_providing = False - if 'async' in args: - args.remove('async') - if 'application-base' in args: - args.remove('application-base') - if 'startup' in args: - args.remove('startup') - if 'service-providing' in args: - args.remove('service-providing') - - if 'async' in args: - self._use_async = True - args.remove('async') - if 'application-base' in args: - self._use_application_api = True - args.remove('application-base') - if 'startup' in args: - self._use_startup = True - args.remove('startup') - if 'service-providing' in args: - self._use_service_providing = True - args.remove('service-providing') - if 'venv' in args: - self._use_venv = True - args.remove('venv') - if 'base' in args: - self._use_base = True - args.remove('base') - - console = self._config.get_configuration(ProjectTypeEnum.console.value) - library = self._config.get_configuration(ProjectTypeEnum.library.value) - unittest = self._config.get_configuration(ProjectTypeEnum.unittest.value) - if console is not None and library is None and unittest is None: - self._name = console - self._schematic = ProjectTypeEnum.console.value - self._console(args) - if self._use_venv: - self._create_venv() - - elif console is None and library is not None and unittest is None: - self._name = library - self._schematic = ProjectTypeEnum.library.value - self._library(args) - if self._use_venv: - self._create_venv() - - elif console is None and library is None and unittest is not None: - self._name = unittest - self._schematic = ProjectTypeEnum.unittest.value - self._unittest(args) - if self._use_venv: - self._create_venv() - - else: - Console.error(f'Project type not found') - Console.write_line(self.help_message) - return