From e24453555741807dc1684762c80198f1f838752e Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Tue, 6 Dec 2022 17:42:55 +0100 Subject: [PATCH] Improved cpl n custom templating #139 --- src/cpl_cli/.cpl/project_console.py | 23 +- src/cpl_cli/.cpl/project_file.py | 14 + src/cpl_cli/.cpl/project_file_appsettings.py | 22 +- src/cpl_cli/.cpl/project_file_code_main.py | 7 +- .../project_file_code_test_application.py | 59 ++++ .../.cpl/project_file_code_test_case.py | 37 +++ src/cpl_cli/.cpl/project_library.py | 49 ++++ src/cpl_cli/.cpl/project_unittest.py | 42 +++ src/cpl_cli/.cpl/schematic_abc.py | 2 - src/cpl_cli/.cpl/schematic_test_case.py | 3 +- src/cpl_cli/_templates/new/__init__.py | 26 -- .../_templates/new/console/__init__.py | 26 -- .../new/console/appsettings_json.py | 41 --- src/cpl_cli/_templates/new/console/license.py | 23 -- .../_templates/new/console/readme_py.py | 23 -- .../_templates/new/console/source/__init__.py | 26 -- .../new/console/source/name/__init__.py | 26 -- .../new/console/source/name/application.py | 64 ----- .../new/console/source/name/init.py | 27 -- .../new/console/source/name/main.py | 254 ------------------ .../new/console/source/name/startup.py | 43 --- .../new/console/source/tests/__init__.py | 26 -- .../new/console/source/tests/init.py | 27 -- .../_templates/new/library/__init__.py | 26 -- .../new/library/appsettings_json.py | 41 --- src/cpl_cli/_templates/new/library/license.py | 23 -- .../_templates/new/library/readme_py.py | 23 -- .../_templates/new/library/source/__init__.py | 26 -- .../new/library/source/name/__init__.py | 26 -- .../new/library/source/name/application.py | 63 ----- .../new/library/source/name/init.py | 27 -- .../new/library/source/name/main.py | 249 ----------------- .../new/library/source/name/startup.py | 42 --- .../new/library/source/tests/__init__.py | 26 -- .../new/library/source/tests/init.py | 27 -- .../_templates/new/unittest/__init__.py | 26 -- .../_templates/new/unittest/license.py | 23 -- .../_templates/new/unittest/readme_py.py | 23 -- .../new/unittest/source/__init__.py | 26 -- .../new/unittest/source/name/__init__.py | 26 -- .../new/unittest/source/name/application.py | 74 ----- .../new/unittest/source/name/init.py | 27 -- .../new/unittest/source/name/main.py | 62 ----- .../new/unittest/source/name/test_case.py | 52 ---- src/cpl_cli/abc/project_type_abc.py | 2 + src/cpl_cli/command/generate_service.py | 19 +- src/cpl_cli/command/new_service.py | 189 ++++--------- src/cpl_cli/publish/publisher_service.py | 14 +- src/cpl_cli/source_creator/console_builder.py | 182 ------------- src/cpl_cli/source_creator/library_builder.py | 186 ------------- .../source_creator/template_builder.py | 11 +- .../source_creator/unittest_builder.py | 164 ----------- .../unittests_cli/abc/command_test_case.py | 6 +- unittests/unittests_cli/add_test_case.py | 2 +- unittests/unittests_cli/new_test_case.py | 15 +- unittests/unittests_cli/publish_test_case.py | 15 +- 56 files changed, 329 insertions(+), 2304 deletions(-) create mode 100644 src/cpl_cli/.cpl/project_file.py create mode 100644 src/cpl_cli/.cpl/project_file_code_test_application.py create mode 100644 src/cpl_cli/.cpl/project_file_code_test_case.py create mode 100644 src/cpl_cli/.cpl/project_library.py create mode 100644 src/cpl_cli/.cpl/project_unittest.py delete mode 100644 src/cpl_cli/_templates/new/__init__.py delete mode 100644 src/cpl_cli/_templates/new/console/__init__.py delete mode 100644 src/cpl_cli/_templates/new/console/appsettings_json.py delete mode 100644 src/cpl_cli/_templates/new/console/license.py delete mode 100644 src/cpl_cli/_templates/new/console/readme_py.py delete mode 100644 src/cpl_cli/_templates/new/console/source/__init__.py delete mode 100644 src/cpl_cli/_templates/new/console/source/name/__init__.py delete mode 100644 src/cpl_cli/_templates/new/console/source/name/application.py delete mode 100644 src/cpl_cli/_templates/new/console/source/name/init.py delete mode 100644 src/cpl_cli/_templates/new/console/source/name/main.py delete mode 100644 src/cpl_cli/_templates/new/console/source/name/startup.py delete mode 100644 src/cpl_cli/_templates/new/console/source/tests/__init__.py delete mode 100644 src/cpl_cli/_templates/new/console/source/tests/init.py delete mode 100644 src/cpl_cli/_templates/new/library/__init__.py delete mode 100644 src/cpl_cli/_templates/new/library/appsettings_json.py delete mode 100644 src/cpl_cli/_templates/new/library/license.py delete mode 100644 src/cpl_cli/_templates/new/library/readme_py.py delete mode 100644 src/cpl_cli/_templates/new/library/source/__init__.py delete mode 100644 src/cpl_cli/_templates/new/library/source/name/__init__.py delete mode 100644 src/cpl_cli/_templates/new/library/source/name/application.py delete mode 100644 src/cpl_cli/_templates/new/library/source/name/init.py delete mode 100644 src/cpl_cli/_templates/new/library/source/name/main.py delete mode 100644 src/cpl_cli/_templates/new/library/source/name/startup.py delete mode 100644 src/cpl_cli/_templates/new/library/source/tests/__init__.py delete mode 100644 src/cpl_cli/_templates/new/library/source/tests/init.py delete mode 100644 src/cpl_cli/_templates/new/unittest/__init__.py delete mode 100644 src/cpl_cli/_templates/new/unittest/license.py delete mode 100644 src/cpl_cli/_templates/new/unittest/readme_py.py delete mode 100644 src/cpl_cli/_templates/new/unittest/source/__init__.py delete mode 100644 src/cpl_cli/_templates/new/unittest/source/name/__init__.py delete mode 100644 src/cpl_cli/_templates/new/unittest/source/name/application.py delete mode 100644 src/cpl_cli/_templates/new/unittest/source/name/init.py delete mode 100644 src/cpl_cli/_templates/new/unittest/source/name/main.py delete mode 100644 src/cpl_cli/_templates/new/unittest/source/name/test_case.py delete mode 100644 src/cpl_cli/source_creator/console_builder.py delete mode 100644 src/cpl_cli/source_creator/library_builder.py delete mode 100644 src/cpl_cli/source_creator/unittest_builder.py diff --git a/src/cpl_cli/.cpl/project_console.py b/src/cpl_cli/.cpl/project_console.py index 7028172d..cdf2ec62 100644 --- a/src/cpl_cli/.cpl/project_console.py +++ b/src/cpl_cli/.cpl/project_console.py @@ -16,22 +16,29 @@ class Console(ProjectTypeABC): use_startup: bool, use_service_providing: bool, use_async: bool, + project_file_data: dict, ): - from project_file_license import ProjectFileLicense - from project_file_readme import ProjectFileReadme - from schematic_init import Init + from project_file import ProjectFile + from project_file_appsettings import ProjectFileAppsettings from project_file_code_application import ProjectFileApplication from project_file_code_main import ProjectFileMain from project_file_code_startup import ProjectFileStartup + from project_file_readme import ProjectFileReadme + from project_file_license import ProjectFileLicense + from schematic_init import Init - ProjectTypeABC.__init__(self, base_path, project_name, workspace, use_application_api, use_startup, use_service_providing, use_async) + ProjectTypeABC.__init__(self, base_path, project_name, workspace, use_application_api, use_startup, use_service_providing, use_async, project_file_data) project_path = f'{base_path}{String.convert_to_snake_case(project_name.split("/")[-1])}/' - self.add_template(ProjectFileLicense('')) - self.add_template(ProjectFileReadme('')) - self.add_template(Init('', 'init', f'{base_path}tests/')) + self.add_template(ProjectFile(project_name.split('/')[-1], project_path, project_file_data)) + if workspace is None: + self.add_template(ProjectFileLicense('')) + self.add_template(ProjectFileReadme('')) + self.add_template(Init('', 'init', f'{base_path}tests/')) + self.add_template(Init('', 'init', project_path)) + self.add_template(ProjectFileAppsettings(project_path)) if use_application_api: self.add_template(ProjectFileApplication(project_path, use_application_api, use_startup, use_service_providing, use_async)) @@ -39,4 +46,4 @@ class Console(ProjectTypeABC): if use_startup: self.add_template(ProjectFileStartup(project_path, use_application_api, use_startup, use_service_providing, use_async)) - self.add_template(ProjectFileMain(project_path, use_application_api, use_startup, use_service_providing, use_async)) + self.add_template(ProjectFileMain(project_name.split('/')[-1], project_path, use_application_api, use_startup, use_service_providing, use_async)) diff --git a/src/cpl_cli/.cpl/project_file.py b/src/cpl_cli/.cpl/project_file.py new file mode 100644 index 00000000..ecee56ce --- /dev/null +++ b/src/cpl_cli/.cpl/project_file.py @@ -0,0 +1,14 @@ +import json + +from cpl_cli.abc.file_template_abc import FileTemplateABC + + +class ProjectFile(FileTemplateABC): + + def __init__(self, name: str, path: str, code: dict): + FileTemplateABC.__init__(self, '', path, '{}') + self._name = f'{name}.json' + self._code = code + + def get_code(self) -> str: + return json.dumps(self._code, indent=2) diff --git a/src/cpl_cli/.cpl/project_file_appsettings.py b/src/cpl_cli/.cpl/project_file_appsettings.py index e7b0e3ec..c6a62b88 100644 --- a/src/cpl_cli/.cpl/project_file_appsettings.py +++ b/src/cpl_cli/.cpl/project_file_appsettings.py @@ -1,29 +1,11 @@ -import textwrap - from cpl_cli.abc.file_template_abc import FileTemplateABC class ProjectFileAppsettings(FileTemplateABC): def __init__(self, path: str): - code = textwrap.dedent("""\ - { - "TimeFormatSettings": { - "DateFormat": "%Y-%m-%d", - "TimeFormat": "%H:%M:%S", - "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", - "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" - }, - - "LoggingSettings": { - "Path": "logs/", - "Filename": "log_$start_time.log", - "ConsoleLogLevel": "ERROR", - "FileLogLevel": "WARN" - } - } - """) - FileTemplateABC.__init__(self, 'appsettings.json', path, code) + FileTemplateABC.__init__(self, '', path, '{}') + self._name = 'appsettings.json' def get_code(self) -> str: return self._code diff --git a/src/cpl_cli/.cpl/project_file_code_main.py b/src/cpl_cli/.cpl/project_file_code_main.py index 43b5988f..614eb1d2 100644 --- a/src/cpl_cli/.cpl/project_file_code_main.py +++ b/src/cpl_cli/.cpl/project_file_code_main.py @@ -1,14 +1,15 @@ from cpl_cli.abc.code_file_template_abc import CodeFileTemplateABC +from cpl_core.utils import String class ProjectFileMain(CodeFileTemplateABC): - def __init__(self, path: str, use_application_api: bool, use_startup: bool, use_service_providing: bool, use_async: bool): + def __init__(self, name: str, path: str, use_application_api: bool, use_startup: bool, use_service_providing: bool, use_async: bool): CodeFileTemplateABC.__init__(self, 'main', path, '', use_application_api, use_startup, use_service_providing, use_async) import textwrap - import_pkg = f'{self._name}.' + import_pkg = f'{String.convert_to_snake_case(name)}.' self._main_with_application_host_and_startup = textwrap.dedent(f"""\ {"import asyncio" if self._use_async else ''} @@ -51,8 +52,6 @@ class ProjectFileMain(CodeFileTemplateABC): {"import asyncio" if self._use_async else ''} from cpl_core.application import ApplicationBuilder - - from {import_pkg}application import Application {self._async()}def configure_configuration() -> ConfigurationABC: diff --git a/src/cpl_cli/.cpl/project_file_code_test_application.py b/src/cpl_cli/.cpl/project_file_code_test_application.py new file mode 100644 index 00000000..06221cd6 --- /dev/null +++ b/src/cpl_cli/.cpl/project_file_code_test_application.py @@ -0,0 +1,59 @@ +from cpl_cli.abc.code_file_template_abc import CodeFileTemplateABC + + +class ProjectFileTestApplication(CodeFileTemplateABC): + + def __init__(self, path: str, use_application_api: bool, use_startup: bool, use_service_providing: bool, use_async: bool): + CodeFileTemplateABC.__init__(self, 'application', path, '', use_application_api, use_startup, use_service_providing, use_async) + + def get_code(self) -> str: + import textwrap + + if self._use_async: + return textwrap.dedent("""\ + import unittest + from unittest import TestSuite + + from cpl_core.application import ApplicationABC + from cpl_core.configuration import ConfigurationABC + from cpl_core.dependency_injection import ServiceProviderABC + from unittests.test_case import TestCase + + + class Application(ApplicationABC): + + def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): + ApplicationABC.__init__(self, config, services) + self._suite: TestSuite = unittest.TestSuite() + + async def configure(self): + self._suite.addTest(TestCase('test_equal')) + + async def main(self): + runner = unittest.TextTestRunner() + runner.run(self._suite) + """) + + return textwrap.dedent("""\ + import unittest + from unittest import TestSuite + + from cpl_core.application import ApplicationABC + from cpl_core.configuration import ConfigurationABC + from cpl_core.dependency_injection import ServiceProviderABC + from unittests.test_case import TestCase + + + class Application(ApplicationABC): + + def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): + ApplicationABC.__init__(self, config, services) + self._suite: TestSuite = unittest.TestSuite() + + def configure(self): + self._suite.addTest(TestCase('test_equal')) + + def main(self): + runner = unittest.TextTestRunner() + runner.run(self._suite) + """) diff --git a/src/cpl_cli/.cpl/project_file_code_test_case.py b/src/cpl_cli/.cpl/project_file_code_test_case.py new file mode 100644 index 00000000..731e9b93 --- /dev/null +++ b/src/cpl_cli/.cpl/project_file_code_test_case.py @@ -0,0 +1,37 @@ +from cpl_cli.abc.code_file_template_abc import CodeFileTemplateABC + + +class ProjectFileTestCase(CodeFileTemplateABC): + + def __init__(self, path: str, use_application_api: bool, use_startup: bool, use_service_providing: bool, use_async: bool): + CodeFileTemplateABC.__init__(self, 'test_case', path, '', use_application_api, use_startup, use_service_providing, use_async) + + def get_code(self) -> str: + import textwrap + + if self._use_async: + return textwrap.dedent("""\ + import unittest + + + class TestCase(unittest.TestCase): + + async def setUp(self) -> None: + pass + + async def test_equal(self): + self.assertEqual(True, True) + """) + + return textwrap.dedent("""\ + import unittest + + + class TestCase(unittest.TestCase): + + def setUp(self) -> None: + pass + + def test_equal(self): + self.assertEqual(True, True) + """) diff --git a/src/cpl_cli/.cpl/project_library.py b/src/cpl_cli/.cpl/project_library.py new file mode 100644 index 00000000..91579b10 --- /dev/null +++ b/src/cpl_cli/.cpl/project_library.py @@ -0,0 +1,49 @@ +import os + +from cpl_cli.abc.project_type_abc import ProjectTypeABC +from cpl_cli.configuration import WorkspaceSettings +from cpl_core.utils import String + + +class Library(ProjectTypeABC): + + def __init__( + self, + base_path: str, + project_name: str, + workspace: WorkspaceSettings, + use_application_api: bool, + use_startup: bool, + use_service_providing: bool, + use_async: bool, + project_file_data: dict, + ): + from project_file import ProjectFile + from project_file_appsettings import ProjectFileAppsettings + from project_file_code_application import ProjectFileApplication + from project_file_code_main import ProjectFileMain + from project_file_code_startup import ProjectFileStartup + from project_file_readme import ProjectFileReadme + from project_file_license import ProjectFileLicense + from schematic_init import Init + + ProjectTypeABC.__init__(self, base_path, project_name, workspace, use_application_api, use_startup, use_service_providing, use_async, project_file_data) + + project_path = f'{base_path}{String.convert_to_snake_case(project_name.split("/")[-1])}/' + + self.add_template(ProjectFile(project_name.split('/')[-1], project_path, project_file_data)) + if workspace is None: + self.add_template(ProjectFileLicense('')) + self.add_template(ProjectFileReadme('')) + self.add_template(Init('', 'init', f'{base_path}tests/')) + + self.add_template(Init('', 'init', project_path)) + self.add_template(ProjectFileAppsettings(project_path)) + + if use_application_api: + self.add_template(ProjectFileApplication(project_path, use_application_api, use_startup, use_service_providing, use_async)) + + if use_startup: + self.add_template(ProjectFileStartup(project_path, use_application_api, use_startup, use_service_providing, use_async)) + + self.add_template(ProjectFileMain(project_name.split('/')[-1], project_path, use_application_api, use_startup, use_service_providing, use_async)) diff --git a/src/cpl_cli/.cpl/project_unittest.py b/src/cpl_cli/.cpl/project_unittest.py new file mode 100644 index 00000000..7b4b4d2b --- /dev/null +++ b/src/cpl_cli/.cpl/project_unittest.py @@ -0,0 +1,42 @@ +import os + +from cpl_cli.abc.project_type_abc import ProjectTypeABC +from cpl_cli.configuration import WorkspaceSettings +from cpl_core.utils import String + + +class Unittest(ProjectTypeABC): + + def __init__( + self, + base_path: str, + project_name: str, + workspace: WorkspaceSettings, + use_application_api: bool, + use_startup: bool, + use_service_providing: bool, + use_async: bool, + project_file_data: dict, + ): + from project_file import ProjectFile + from project_file_code_application import ProjectFileApplication + from project_file_code_main import ProjectFileMain + from project_file_code_test_case import ProjectFileTestCase + from project_file_readme import ProjectFileReadme + from project_file_license import ProjectFileLicense + from schematic_init import Init + + ProjectTypeABC.__init__(self, base_path, project_name, workspace, use_application_api, use_startup, use_service_providing, use_async, project_file_data) + + project_path = f'{base_path}{String.convert_to_snake_case(project_name.split("/")[-1])}/' + + self.add_template(ProjectFile(project_name.split('/')[-1], project_path, project_file_data)) + if workspace is None: + self.add_template(ProjectFileLicense('')) + self.add_template(ProjectFileReadme('')) + self.add_template(Init('', 'init', f'{base_path}tests/')) + + self.add_template(Init('', 'init', project_path)) + self.add_template(ProjectFileApplication(project_path, use_application_api, use_startup, use_service_providing, use_async)) + self.add_template(ProjectFileMain(project_name.split('/')[-1], project_path, use_application_api, use_startup, use_service_providing, use_async)) + self.add_template(ProjectFileTestCase(project_path, use_application_api, use_startup, use_service_providing, use_async)) diff --git a/src/cpl_cli/.cpl/schematic_abc.py b/src/cpl_cli/.cpl/schematic_abc.py index 917a60a6..aaa74cc3 100644 --- a/src/cpl_cli/.cpl/schematic_abc.py +++ b/src/cpl_cli/.cpl/schematic_abc.py @@ -1,5 +1,3 @@ -import textwrap - from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC diff --git a/src/cpl_cli/.cpl/schematic_test_case.py b/src/cpl_cli/.cpl/schematic_test_case.py index 63ffe56c..d0f2b4bd 100644 --- a/src/cpl_cli/.cpl/schematic_test_case.py +++ b/src/cpl_cli/.cpl/schematic_test_case.py @@ -21,8 +21,7 @@ class TestCase(GenerateSchematicABC): def test_equal(self): pass """ - x = self.build_code_str(code, Name=self._class_name) - return x + return self.build_code_str(code, Name=self._class_name) @classmethod def register(cls): diff --git a/src/cpl_cli/_templates/new/__init__.py b/src/cpl_cli/_templates/new/__init__.py deleted file mode 100644 index 6ab3639e..00000000 --- a/src/cpl_cli/_templates/new/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli sh-edraft Common Python library CLI -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library Command Line Interface - -:copyright: (c) 2020 - 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = 'cpl_cli._templates.new' -__author__ = 'Sven Heidemann' -__license__ = 'MIT' -__copyright__ = 'Copyright (c) 2020 - 2022 sh-edraft.de' -__version__ = '2022.12.0' - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') diff --git a/src/cpl_cli/_templates/new/console/__init__.py b/src/cpl_cli/_templates/new/console/__init__.py deleted file mode 100644 index f9bacfd9..00000000 --- a/src/cpl_cli/_templates/new/console/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli sh-edraft Common Python library CLI -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library Command Line Interface - -:copyright: (c) 2020 - 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = 'cpl_cli._templates.new.console' -__author__ = 'Sven Heidemann' -__license__ = 'MIT' -__copyright__ = 'Copyright (c) 2020 - 2022 sh-edraft.de' -__version__ = '2022.12.0' - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') diff --git a/src/cpl_cli/_templates/new/console/appsettings_json.py b/src/cpl_cli/_templates/new/console/appsettings_json.py deleted file mode 100644 index 5bd03eaa..00000000 --- a/src/cpl_cli/_templates/new/console/appsettings_json.py +++ /dev/null @@ -1,41 +0,0 @@ -import textwrap - -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class AppsettingsTemplate(TemplateFileABC): - - def __init__(self): - TemplateFileABC.__init__(self) - - self._name = 'appsettings.json' - self._path = '' - self._value = textwrap.dedent("""\ - { - "TimeFormatSettings": { - "DateFormat": "%Y-%m-%d", - "TimeFormat": "%H:%M:%S", - "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", - "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" - }, - - "LoggingSettings": { - "Path": "logs/", - "Filename": "log_$start_time.log", - "ConsoleLogLevel": "ERROR", - "FileLogLevel": "WARN" - } - } - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/console/license.py b/src/cpl_cli/_templates/new/console/license.py deleted file mode 100644 index fb586904..00000000 --- a/src/cpl_cli/_templates/new/console/license.py +++ /dev/null @@ -1,23 +0,0 @@ -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class LicenseTemplate(TemplateFileABC): - - def __init__(self): - TemplateFileABC.__init__(self) - - self._name = 'LICENSE' - self._path = '' - self._value = """""" - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/console/readme_py.py b/src/cpl_cli/_templates/new/console/readme_py.py deleted file mode 100644 index a40286a8..00000000 --- a/src/cpl_cli/_templates/new/console/readme_py.py +++ /dev/null @@ -1,23 +0,0 @@ -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class ReadmeTemplate(TemplateFileABC): - - def __init__(self): - TemplateFileABC.__init__(self) - - self._name = 'README.md' - self._path = '' - self._value = """""" - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/console/source/__init__.py b/src/cpl_cli/_templates/new/console/source/__init__.py deleted file mode 100644 index 406a219a..00000000 --- a/src/cpl_cli/_templates/new/console/source/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli sh-edraft Common Python library CLI -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library Command Line Interface - -:copyright: (c) 2020 - 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = 'cpl_cli._templates.new.console.source' -__author__ = 'Sven Heidemann' -__license__ = 'MIT' -__copyright__ = 'Copyright (c) 2020 - 2022 sh-edraft.de' -__version__ = '2022.12.0' - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') diff --git a/src/cpl_cli/_templates/new/console/source/name/__init__.py b/src/cpl_cli/_templates/new/console/source/name/__init__.py deleted file mode 100644 index 162a07c3..00000000 --- a/src/cpl_cli/_templates/new/console/source/name/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli sh-edraft Common Python library CLI -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library Command Line Interface - -:copyright: (c) 2020 - 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = 'cpl_cli._templates.new.console.source.name' -__author__ = 'Sven Heidemann' -__license__ = 'MIT' -__copyright__ = 'Copyright (c) 2020 - 2022 sh-edraft.de' -__version__ = '2022.12.0' - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') diff --git a/src/cpl_cli/_templates/new/console/source/name/application.py b/src/cpl_cli/_templates/new/console/source/name/application.py deleted file mode 100644 index 56d9990f..00000000 --- a/src/cpl_cli/_templates/new/console/source/name/application.py +++ /dev/null @@ -1,64 +0,0 @@ -import textwrap - -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class ApplicationTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str, use_async: bool): - TemplateFileABC.__init__(self) - - self._name = 'application.py' - self._path = path - self._use_async = use_async - - if self._use_async: - self._value = textwrap.dedent("""\ - from cpl_core.application import ApplicationABC - from cpl_core.configuration import ConfigurationABC - from cpl_core.console import Console - from cpl_core.dependency_injection import ServiceProviderABC - - - class Application(ApplicationABC): - - def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): - ApplicationABC.__init__(self, config, services) - - async def configure(self): - pass - - async def main(self): - Console.write_line('Hello World') - """) - else: - self._value = textwrap.dedent("""\ - from cpl_core.application import ApplicationABC - from cpl_core.configuration import ConfigurationABC - from cpl_core.console import Console - from cpl_core.dependency_injection import ServiceProviderABC - - - class Application(ApplicationABC): - - def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): - ApplicationABC.__init__(self, config, services) - - def configure(self): - pass - - def main(self): - Console.write_line('Hello World') - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/console/source/name/init.py b/src/cpl_cli/_templates/new/console/source/name/init.py deleted file mode 100644 index b3cbdecb..00000000 --- a/src/cpl_cli/_templates/new/console/source/name/init.py +++ /dev/null @@ -1,27 +0,0 @@ -import textwrap - -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class MainInitTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str): - TemplateFileABC.__init__(self) - - self._name = '__init__.py' - self._path = path - self._value = textwrap.dedent("""\ - # imports: - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/console/source/name/main.py b/src/cpl_cli/_templates/new/console/source/name/main.py deleted file mode 100644 index 8549c490..00000000 --- a/src/cpl_cli/_templates/new/console/source/name/main.py +++ /dev/null @@ -1,254 +0,0 @@ -import textwrap - -from cpl_core.utils.string import String -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class MainWithApplicationHostAndStartupTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str, use_async: bool): - TemplateFileABC.__init__(self) - - name = String.convert_to_snake_case(name) - self._name = 'main.py' - self._path = path - - import_pkg = f'{name}.' - - if use_async: - self._value = textwrap.dedent(f"""\ - import asyncio - - from cpl_core.application import ApplicationBuilder - - from {import_pkg}application import Application - from {import_pkg}startup import Startup - - - async def main(): - app_builder = ApplicationBuilder(Application) - app_builder.use_startup(Startup) - app: Application = await app_builder.build_async() - await app.run_async() - - - if __name__ == '__main__': - asyncio.run(main()) - """) - else: - self._value = textwrap.dedent(f"""\ - from cpl_core.application import ApplicationBuilder - - from {import_pkg}application import Application - from {import_pkg}startup import Startup - - - def main(): - app_builder = ApplicationBuilder(Application) - app_builder.use_startup(Startup) - app_builder.build().run() - - - if __name__ == '__main__': - main() - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value - - -class MainWithApplicationBaseTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str, use_async: bool): - TemplateFileABC.__init__(self) - - name = String.convert_to_snake_case(name) - self._name = 'main.py' - self._path = path - - import_pkg = f'{name}.' - - if use_async: - self._value = textwrap.dedent(f"""\ - import asyncio - - from cpl_core.application import ApplicationBuilder - - from {import_pkg}application import Application - - - async def main(): - app_builder = ApplicationBuilder(Application) - app: Application = await app_builder.build_async() - await app.run_async() - - - if __name__ == '__main__': - asyncio.run(main()) - """) - else: - self._value = textwrap.dedent(f"""\ - from cpl_core.application import ApplicationBuilder - - from {import_pkg}application import Application - - - def main(): - app_builder = ApplicationBuilder(Application) - app_builder.build().run() - - - if __name__ == '__main__': - main() - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value - - -class MainWithoutApplicationBaseTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str, use_async: bool): - TemplateFileABC.__init__(self) - - name = String.convert_to_snake_case(name) - self._name = 'main.py' - self._path = path - - import_pkg = f'{name}.' - - if use_async: - self._value = textwrap.dedent("""\ - import asyncio - - from cpl_core.console import Console - - - async def main(): - Console.write_line('Hello World') - - - if __name__ == '__main__': - asyncio.run(main()) - """) - else: - self._value = textwrap.dedent("""\ - from cpl_core.console import Console - - - def main(): - Console.write_line('Hello World') - - - if __name__ == '__main__': - main() - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value - - -class MainWithDependencyInjection(TemplateFileABC): - - def __init__(self, name: str, path: str, use_async: bool): - TemplateFileABC.__init__(self) - - name = String.convert_to_snake_case(name) - self._name = 'main.py' - self._path = path - - import_pkg = f'{name}.' - - if use_async: - self._value = textwrap.dedent("""\ - import asyncio - - from cpl_core.configuration import Configuration, ConfigurationABC - from cpl_core.console import Console - from cpl_core.dependency_injection import ServiceCollection, ServiceProviderABC - - - async def configure_configuration() -> ConfigurationABC: - config = Configuration() - return config - - - async def configure_services(config: ConfigurationABC) -> ServiceProviderABC: - services = ServiceCollection(config) - return services.build_service_provider() - - - async def main(): - config = await configure_configuration() - provider = await configure_services(config) - Console.write_line('Hello World') - - - if __name__ == '__main__': - asyncio.run(main()) - """) - else: - self._value = textwrap.dedent("""\ - from cpl_core.configuration import Configuration, ConfigurationABC - from cpl_core.console import Console - from cpl_core.dependency_injection import ServiceCollection, ServiceProviderABC - - - def configure_configuration() -> ConfigurationABC: - config = Configuration() - return config - - - def configure_services(config: ConfigurationABC) -> ServiceProviderABC: - services = ServiceCollection(config) - return services.build_service_provider() - - - def main(): - config = configure_configuration() - provider = configure_services(config) - Console.write_line('Hello World') - - - if __name__ == '__main__': - main() - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/console/source/name/startup.py b/src/cpl_cli/_templates/new/console/source/name/startup.py deleted file mode 100644 index 20e14842..00000000 --- a/src/cpl_cli/_templates/new/console/source/name/startup.py +++ /dev/null @@ -1,43 +0,0 @@ -import textwrap - -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class StartupTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str): - TemplateFileABC.__init__(self) - - self._name = 'startup.py' - self._path = path - - self._value = textwrap.dedent("""\ - from cpl_core.application import StartupABC - from cpl_core.configuration import ConfigurationABC - from cpl_core.dependency_injection import ServiceProviderABC, ServiceCollectionABC - from cpl_core.environment import ApplicationEnvironment - - - class Startup(StartupABC): - - def __init__(self): - StartupABC.__init__(self) - - def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironment) -> ConfigurationABC: - return configuration - - def configure_services(self, services: ServiceCollectionABC, environment: ApplicationEnvironment) -> ServiceProviderABC: - return services.build_service_provider() - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/console/source/tests/__init__.py b/src/cpl_cli/_templates/new/console/source/tests/__init__.py deleted file mode 100644 index 5c376a46..00000000 --- a/src/cpl_cli/_templates/new/console/source/tests/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli sh-edraft Common Python library CLI -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library Command Line Interface - -:copyright: (c) 2020 - 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = 'cpl_cli._templates.new.console.source.tests' -__author__ = 'Sven Heidemann' -__license__ = 'MIT' -__copyright__ = 'Copyright (c) 2020 - 2022 sh-edraft.de' -__version__ = '2022.12.0' - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') diff --git a/src/cpl_cli/_templates/new/console/source/tests/init.py b/src/cpl_cli/_templates/new/console/source/tests/init.py deleted file mode 100644 index 338ad115..00000000 --- a/src/cpl_cli/_templates/new/console/source/tests/init.py +++ /dev/null @@ -1,27 +0,0 @@ -import textwrap - -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class TestsInitTemplate(TemplateFileABC): - - def __init__(self): - TemplateFileABC.__init__(self) - - self._name = '__init__.py' - self._path = 'src/tests/' - self._value = textwrap.dedent("""\ - # imports: - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/library/__init__.py b/src/cpl_cli/_templates/new/library/__init__.py deleted file mode 100644 index e1cc62fe..00000000 --- a/src/cpl_cli/_templates/new/library/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli sh-edraft Common Python library CLI -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library Command Line Interface - -:copyright: (c) 2020 - 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = 'cpl_cli._templates.new.library' -__author__ = 'Sven Heidemann' -__license__ = 'MIT' -__copyright__ = 'Copyright (c) 2020 - 2022 sh-edraft.de' -__version__ = '2022.12.0' - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') diff --git a/src/cpl_cli/_templates/new/library/appsettings_json.py b/src/cpl_cli/_templates/new/library/appsettings_json.py deleted file mode 100644 index 5bd03eaa..00000000 --- a/src/cpl_cli/_templates/new/library/appsettings_json.py +++ /dev/null @@ -1,41 +0,0 @@ -import textwrap - -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class AppsettingsTemplate(TemplateFileABC): - - def __init__(self): - TemplateFileABC.__init__(self) - - self._name = 'appsettings.json' - self._path = '' - self._value = textwrap.dedent("""\ - { - "TimeFormatSettings": { - "DateFormat": "%Y-%m-%d", - "TimeFormat": "%H:%M:%S", - "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", - "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" - }, - - "LoggingSettings": { - "Path": "logs/", - "Filename": "log_$start_time.log", - "ConsoleLogLevel": "ERROR", - "FileLogLevel": "WARN" - } - } - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/library/license.py b/src/cpl_cli/_templates/new/library/license.py deleted file mode 100644 index fb586904..00000000 --- a/src/cpl_cli/_templates/new/library/license.py +++ /dev/null @@ -1,23 +0,0 @@ -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class LicenseTemplate(TemplateFileABC): - - def __init__(self): - TemplateFileABC.__init__(self) - - self._name = 'LICENSE' - self._path = '' - self._value = """""" - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/library/readme_py.py b/src/cpl_cli/_templates/new/library/readme_py.py deleted file mode 100644 index a40286a8..00000000 --- a/src/cpl_cli/_templates/new/library/readme_py.py +++ /dev/null @@ -1,23 +0,0 @@ -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class ReadmeTemplate(TemplateFileABC): - - def __init__(self): - TemplateFileABC.__init__(self) - - self._name = 'README.md' - self._path = '' - self._value = """""" - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/library/source/__init__.py b/src/cpl_cli/_templates/new/library/source/__init__.py deleted file mode 100644 index e13d13b4..00000000 --- a/src/cpl_cli/_templates/new/library/source/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli sh-edraft Common Python library CLI -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library Command Line Interface - -:copyright: (c) 2020 - 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = 'cpl_cli._templates.new.library.source' -__author__ = 'Sven Heidemann' -__license__ = 'MIT' -__copyright__ = 'Copyright (c) 2020 - 2022 sh-edraft.de' -__version__ = '2022.12.0' - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') diff --git a/src/cpl_cli/_templates/new/library/source/name/__init__.py b/src/cpl_cli/_templates/new/library/source/name/__init__.py deleted file mode 100644 index a688ce5f..00000000 --- a/src/cpl_cli/_templates/new/library/source/name/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli sh-edraft Common Python library CLI -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library Command Line Interface - -:copyright: (c) 2020 - 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = 'cpl_cli._templates.new.library.source.name' -__author__ = 'Sven Heidemann' -__license__ = 'MIT' -__copyright__ = 'Copyright (c) 2020 - 2022 sh-edraft.de' -__version__ = '2022.12.0' - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') diff --git a/src/cpl_cli/_templates/new/library/source/name/application.py b/src/cpl_cli/_templates/new/library/source/name/application.py deleted file mode 100644 index 5ca0b146..00000000 --- a/src/cpl_cli/_templates/new/library/source/name/application.py +++ /dev/null @@ -1,63 +0,0 @@ -import textwrap - -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class ApplicationTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str, use_async: bool): - TemplateFileABC.__init__(self) - - self._name = 'application.py' - self._path = path - - if use_async: - self._value = textwrap.dedent("""\ - from cpl_core.application import ApplicationABC - from cpl_core.configuration import ConfigurationABC - from cpl_core.console import Console - from cpl_core.dependency_injection import ServiceProviderABC - - - class Application(ApplicationABC): - - def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): - ApplicationABC.__init__(self, config, services) - - async def configure(self): - pass - - async def main(self): - Console.write_line('Hello World') - """) - else: - self._value = textwrap.dedent("""\ - from cpl_core.application import ApplicationABC - from cpl_core.configuration import ConfigurationABC - from cpl_core.console import Console - from cpl_core.dependency_injection import ServiceProviderABC - - - class Application(ApplicationABC): - - def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): - ApplicationABC.__init__(self, config, services) - - def configure(self): - pass - - def main(self): - Console.write_line('Hello World') - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/library/source/name/init.py b/src/cpl_cli/_templates/new/library/source/name/init.py deleted file mode 100644 index a3b0b8ea..00000000 --- a/src/cpl_cli/_templates/new/library/source/name/init.py +++ /dev/null @@ -1,27 +0,0 @@ -import textwrap - -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class NameInitTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str): - TemplateFileABC.__init__(self) - - self._name = '__init__.py' - self._path = path - self._value = textwrap.dedent("""\ - # imports: - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/library/source/name/main.py b/src/cpl_cli/_templates/new/library/source/name/main.py deleted file mode 100644 index c40fef1c..00000000 --- a/src/cpl_cli/_templates/new/library/source/name/main.py +++ /dev/null @@ -1,249 +0,0 @@ -import textwrap - -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class MainWithApplicationHostAndStartupTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str, use_async: bool): - TemplateFileABC.__init__(self) - - self._name = 'main.py' - self._path = path - - import_pkg = f'{name}.' - if name == '': - import_pkg = '' - - if use_async: - self._value = textwrap.dedent(f"""\ - import asyncio - - from cpl_core.application import ApplicationBuilder - - from {import_pkg}application import Application - from {import_pkg}startup import Startup - - - async def main(): - app_builder = ApplicationBuilder(Application) - app_builder.use_startup(Startup) - app: Application = await app_builder.build_async() - await app.run_async() - - - if __name__ == '__main__': - asyncio.run(main()) - """) - else: - self._value = textwrap.dedent(f"""\ - from cpl_core.application import ApplicationBuilder - - from {import_pkg}application import Application - from {import_pkg}startup import Startup - - - def main(): - app_builder = ApplicationBuilder(Application) - app_builder.use_startup(Startup) - app_builder.build().run() - - - if __name__ == '__main__': - main() - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value - - -class MainWithApplicationBaseTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str, use_async: bool): - TemplateFileABC.__init__(self) - - self._name = 'main.py' - self._path = path - - import_pkg = f'{name}.' - if name == '': - import_pkg = '' - - if use_async: - self._value = textwrap.dedent(f"""\ - import asyncio - - from cpl_core.application import ApplicationBuilder - - from {import_pkg}application import Application - - - async def main(): - app_builder = ApplicationBuilder(Application) - app: Application = await app_builder.build_async() - await app.run_async() - - - if __name__ == '__main__': - asyncio.run(main()) - """) - else: - self._value = textwrap.dedent(f"""\ - from cpl_core.application import ApplicationBuilder - - from {import_pkg}application import Application - - - def main(): - app_builder = ApplicationBuilder(Application) - app_builder.build().run() - - - if __name__ == '__main__': - main() - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value - - -class MainWithoutApplicationBaseTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str, use_async: bool): - TemplateFileABC.__init__(self) - - self._name = 'main.py' - self._path = path - - if use_async: - self._value = textwrap.dedent("""\ - import asyncio - - from cpl_core.console import Console - - - async def main(): - Console.write_line('Hello World') - - - if __name__ == '__main__': - asyncio.run(main()) - """) - else: - self._value = textwrap.dedent("""\ - from cpl_core.console import Console - - - def main(): - Console.write_line('Hello World') - - - if __name__ == '__main__': - main() - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value - - -class MainWithDependencyInjection(TemplateFileABC): - - def __init__(self, name: str, path: str, use_async: bool): - TemplateFileABC.__init__(self) - - self._name = 'main.py' - self._path = path - - if use_async: - self._value = textwrap.dedent("""\ - import asyncio - - from cpl_core.configuration import Configuration, ConfigurationABC - from cpl_core.console import Console - from cpl_core.dependency_injection import ServiceCollection, ServiceProviderABC - - - async def configure_configuration() -> ConfigurationABC: - config = Configuration() - return config - - - async def configure_services(config: ConfigurationABC) -> ServiceProviderABC: - services = ServiceCollection(config) - return services.build_service_provider() - - - async def main(): - config = await configure_configuration() - provider = await configure_services(config) - Console.write_line('Hello World') - - - if __name__ == '__main__': - asyncio.run(main()) - """) - else: - self._value = textwrap.dedent("""\ - from cpl_core.configuration import Configuration, ConfigurationABC - from cpl_core.console import Console - from cpl_core.dependency_injection import ServiceCollection, ServiceProviderABC - - - def configure_configuration() -> ConfigurationABC: - config = Configuration() - return config - - - def configure_services(config: ConfigurationABC) -> ServiceProviderABC: - services = ServiceCollection(config) - return services.build_service_provider() - - - def main(): - config = configure_configuration() - provider = configure_services(config) - Console.write_line('Hello World') - - - if __name__ == '__main__': - main() - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/library/source/name/startup.py b/src/cpl_cli/_templates/new/library/source/name/startup.py deleted file mode 100644 index 959bc0ce..00000000 --- a/src/cpl_cli/_templates/new/library/source/name/startup.py +++ /dev/null @@ -1,42 +0,0 @@ -import textwrap - -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class StartupTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str): - TemplateFileABC.__init__(self) - - self._name = 'startup.py' - self._path = path - self._value = textwrap.dedent("""\ - from cpl_core.application import StartupABC - from cpl_core.configuration import ConfigurationABC - from cpl_core.dependency_injection import ServiceProviderABC, ServiceCollectionABC - from cpl_core.environment import ApplicationEnvironment - - - class Startup(StartupABC): - - def __init__(self): - StartupABC.__init__(self) - - def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironment) -> ConfigurationABC: - return configuration - - def configure_services(self, services: ServiceCollectionABC, environment: ApplicationEnvironment) -> ServiceProviderABC: - return services.build_service_provider() - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/library/source/tests/__init__.py b/src/cpl_cli/_templates/new/library/source/tests/__init__.py deleted file mode 100644 index c030a958..00000000 --- a/src/cpl_cli/_templates/new/library/source/tests/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli sh-edraft Common Python library CLI -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library Command Line Interface - -:copyright: (c) 2020 - 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = 'cpl_cli._templates.new.library.source.tests' -__author__ = 'Sven Heidemann' -__license__ = 'MIT' -__copyright__ = 'Copyright (c) 2020 - 2022 sh-edraft.de' -__version__ = '2022.12.0' - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') diff --git a/src/cpl_cli/_templates/new/library/source/tests/init.py b/src/cpl_cli/_templates/new/library/source/tests/init.py deleted file mode 100644 index 338ad115..00000000 --- a/src/cpl_cli/_templates/new/library/source/tests/init.py +++ /dev/null @@ -1,27 +0,0 @@ -import textwrap - -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class TestsInitTemplate(TemplateFileABC): - - def __init__(self): - TemplateFileABC.__init__(self) - - self._name = '__init__.py' - self._path = 'src/tests/' - self._value = textwrap.dedent("""\ - # imports: - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/unittest/__init__.py b/src/cpl_cli/_templates/new/unittest/__init__.py deleted file mode 100644 index 869714c3..00000000 --- a/src/cpl_cli/_templates/new/unittest/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli sh-edraft Common Python library CLI -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library Command Line Interface - -:copyright: (c) 2020 - 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = 'cpl_cli._templates.new.unittest' -__author__ = 'Sven Heidemann' -__license__ = 'MIT' -__copyright__ = 'Copyright (c) 2020 - 2022 sh-edraft.de' -__version__ = '2022.12.0' - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') diff --git a/src/cpl_cli/_templates/new/unittest/license.py b/src/cpl_cli/_templates/new/unittest/license.py deleted file mode 100644 index fb586904..00000000 --- a/src/cpl_cli/_templates/new/unittest/license.py +++ /dev/null @@ -1,23 +0,0 @@ -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class LicenseTemplate(TemplateFileABC): - - def __init__(self): - TemplateFileABC.__init__(self) - - self._name = 'LICENSE' - self._path = '' - self._value = """""" - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/unittest/readme_py.py b/src/cpl_cli/_templates/new/unittest/readme_py.py deleted file mode 100644 index a40286a8..00000000 --- a/src/cpl_cli/_templates/new/unittest/readme_py.py +++ /dev/null @@ -1,23 +0,0 @@ -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class ReadmeTemplate(TemplateFileABC): - - def __init__(self): - TemplateFileABC.__init__(self) - - self._name = 'README.md' - self._path = '' - self._value = """""" - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/unittest/source/__init__.py b/src/cpl_cli/_templates/new/unittest/source/__init__.py deleted file mode 100644 index 00b558a0..00000000 --- a/src/cpl_cli/_templates/new/unittest/source/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli sh-edraft Common Python library CLI -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library Command Line Interface - -:copyright: (c) 2020 - 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = 'cpl_cli._templates.new.unittest.source' -__author__ = 'Sven Heidemann' -__license__ = 'MIT' -__copyright__ = 'Copyright (c) 2020 - 2022 sh-edraft.de' -__version__ = '2022.12.0' - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') diff --git a/src/cpl_cli/_templates/new/unittest/source/name/__init__.py b/src/cpl_cli/_templates/new/unittest/source/name/__init__.py deleted file mode 100644 index 38c212d0..00000000 --- a/src/cpl_cli/_templates/new/unittest/source/name/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli sh-edraft Common Python library CLI -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library Command Line Interface - -:copyright: (c) 2020 - 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = 'cpl_cli._templates.new.unittest.source.name' -__author__ = 'Sven Heidemann' -__license__ = 'MIT' -__copyright__ = 'Copyright (c) 2020 - 2022 sh-edraft.de' -__version__ = '2022.12.0' - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') diff --git a/src/cpl_cli/_templates/new/unittest/source/name/application.py b/src/cpl_cli/_templates/new/unittest/source/name/application.py deleted file mode 100644 index 6c40e867..00000000 --- a/src/cpl_cli/_templates/new/unittest/source/name/application.py +++ /dev/null @@ -1,74 +0,0 @@ -import textwrap - -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class ApplicationTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str, use_async: bool): - TemplateFileABC.__init__(self) - - self._name = 'application.py' - self._path = path - self._use_async = use_async - - if self._use_async: - self._value = textwrap.dedent("""\ - import unittest - from unittest import TestSuite - - from cpl_core.application import ApplicationABC - from cpl_core.configuration import ConfigurationABC - from cpl_core.dependency_injection import ServiceProviderABC - from unittests.test_case import TestCase - - - class Application(ApplicationABC): - - def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): - ApplicationABC.__init__(self, config, services) - self._suite: TestSuite = unittest.TestSuite() - - async def configure(self): - self._suite.addTest(TestCase('test_equal')) - - async def main(self): - runner = unittest.TextTestRunner() - runner.run(self._suite) - """) - else: - self._value = textwrap.dedent("""\ - import unittest - from unittest import TestSuite - - from cpl_core.application import ApplicationABC - from cpl_core.configuration import ConfigurationABC - from cpl_core.dependency_injection import ServiceProviderABC - from unittests.test_case import TestCase - - - class Application(ApplicationABC): - - def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): - ApplicationABC.__init__(self, config, services) - self._suite: TestSuite = unittest.TestSuite() - - def configure(self): - self._suite.addTest(TestCase('test_equal')) - - def main(self): - runner = unittest.TextTestRunner() - runner.run(self._suite) - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/unittest/source/name/init.py b/src/cpl_cli/_templates/new/unittest/source/name/init.py deleted file mode 100644 index b3cbdecb..00000000 --- a/src/cpl_cli/_templates/new/unittest/source/name/init.py +++ /dev/null @@ -1,27 +0,0 @@ -import textwrap - -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class MainInitTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str): - TemplateFileABC.__init__(self) - - self._name = '__init__.py' - self._path = path - self._value = textwrap.dedent("""\ - # imports: - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/unittest/source/name/main.py b/src/cpl_cli/_templates/new/unittest/source/name/main.py deleted file mode 100644 index ba8e3b41..00000000 --- a/src/cpl_cli/_templates/new/unittest/source/name/main.py +++ /dev/null @@ -1,62 +0,0 @@ -import textwrap - -from cpl_core.utils.string import String -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class MainWithApplicationBaseTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str, use_async: bool): - TemplateFileABC.__init__(self) - - name = String.convert_to_snake_case(name) - self._name = 'main.py' - self._path = path - - import_pkg = f'{name}.' - - if use_async: - self._value = textwrap.dedent(f"""\ - import asyncio - - from cpl_core.application import ApplicationBuilder - - from {import_pkg}application import Application - - - async def main(): - app_builder = ApplicationBuilder(Application) - app: Application = await app_builder.build_async() - await app.run_async() - - - if __name__ == '__main__': - asyncio.run(main()) - """) - else: - self._value = textwrap.dedent(f"""\ - from cpl_core.application import ApplicationBuilder - - from {import_pkg}application import Application - - - def main(): - app_builder = ApplicationBuilder(Application) - app_builder.build().run() - - - if __name__ == '__main__': - main() - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/_templates/new/unittest/source/name/test_case.py b/src/cpl_cli/_templates/new/unittest/source/name/test_case.py deleted file mode 100644 index 096518bd..00000000 --- a/src/cpl_cli/_templates/new/unittest/source/name/test_case.py +++ /dev/null @@ -1,52 +0,0 @@ -import textwrap - -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class TestCaseTemplate(TemplateFileABC): - - def __init__(self, name: str, path: str, use_async: bool): - TemplateFileABC.__init__(self) - - self._name = 'test_case.py' - self._path = path - self._use_async = use_async - - if self._use_async: - self._value = textwrap.dedent("""\ - import unittest - - - class TestCase(unittest.TestCase): - - async def setUp(self) -> None: - pass - - async def test_equal(self): - self.assertEqual(True, True) - """) - else: - self._value = textwrap.dedent("""\ - import unittest - - - class TestCase(unittest.TestCase): - - def setUp(self) -> None: - pass - - def test_equal(self): - self.assertEqual(True, True) - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return self._value diff --git a/src/cpl_cli/abc/project_type_abc.py b/src/cpl_cli/abc/project_type_abc.py index 7a6d8532..68016e49 100644 --- a/src/cpl_cli/abc/project_type_abc.py +++ b/src/cpl_cli/abc/project_type_abc.py @@ -17,6 +17,7 @@ class ProjectTypeABC(ABC): use_startup: bool, use_service_providing: bool, use_async: bool, + project_file_data: dict, ): self._templates: list[FileTemplateABC] = [] self._base_path = base_path @@ -26,6 +27,7 @@ class ProjectTypeABC(ABC): self._use_startup = use_startup self._use_service_providing = use_service_providing self._use_async = use_async + self._project_file_data = project_file_data @property def templates(self) -> list[FileTemplateABC]: diff --git a/src/cpl_cli/command/generate_service.py b/src/cpl_cli/command/generate_service.py index 32f2f061..b1ee7967 100644 --- a/src/cpl_cli/command/generate_service.py +++ b/src/cpl_cli/command/generate_service.py @@ -1,6 +1,7 @@ import os import sys import textwrap +import traceback from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC from cpl_cli.command_abc import CommandABC @@ -34,6 +35,10 @@ class GenerateService(CommandABC): self._read_custom_schematics_from_path(self._env.runtime_directory) self._read_custom_schematics_from_path(self._env.working_directory) + + if len(GenerateSchematicABC.__subclasses__()) == 0: + Console.error(f'No schematics found in template directory: .cpl') + sys.exit() for schematic in GenerateSchematicABC.__subclasses__(): schematic.register() @@ -142,17 +147,17 @@ class GenerateService(CommandABC): if not os.path.exists(os.path.join(path, '.cpl')): return + sys.path.insert(0, os.path.join(path, '.cpl')) for r, d, f in os.walk(os.path.join(path, '.cpl')): for file in f: - if not file.startswith('schematic_') and not file.endswith('.py'): + if not file.startswith('schematic_') or not file.endswith('.py'): continue - code = '' - with open(os.path.join(r, file), 'r') as py_file: - code = py_file.read() - py_file.close() - - exec(code) + try: + exec(open(os.path.join(r, file), 'r').read()) + except Exception as e: + Console.error(str(e), traceback.format_exc()) + sys.exit(-1) def _get_schematic_by_alias(self, schematic: str) -> str: for key in self._schematics: diff --git a/src/cpl_cli/command/new_service.py b/src/cpl_cli/command/new_service.py index 8b399d58..32c27def 100644 --- a/src/cpl_cli/command/new_service.py +++ b/src/cpl_cli/command/new_service.py @@ -1,6 +1,7 @@ import os import sys import textwrap +import traceback from typing import Optional from packaging import version @@ -8,24 +9,20 @@ from packaging import version import cpl_cli import cpl_core from cpl_cli.abc.project_type_abc import ProjectTypeABC -from cpl_cli.configuration.venv_helper_service import VenvHelper -from cpl_cli.source_creator.template_builder import TemplateBuilder -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.venv_helper_service import VenvHelper 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 +from cpl_cli.source_creator.template_builder import TemplateBuilder +from cpl_core.configuration.configuration_abc import ConfigurationABC +from cpl_core.console.console import Console +from cpl_core.console.foreground_color_enum import ForegroundColorEnum +from cpl_core.utils.string import String class NewService(CommandABC): @@ -45,7 +42,6 @@ class NewService(CommandABC): self._project_dict = {} self._build: BuildSettings = BuildSettings() self._build_dict = {} - self._project_json = {} self._name: str = '' self._rel_path: str = '' @@ -107,9 +103,9 @@ class NewService(CommandABC): self._project.from_dict(self._project_dict) - def _create_build_settings(self): + def _create_build_settings(self, project_type: ProjectTypeEnum): self._build_dict = { - BuildSettingsNameEnum.project_type.value: self._project_type, + BuildSettingsNameEnum.project_type.value: project_type.value, BuildSettingsNameEnum.source_path.value: '', BuildSettingsNameEnum.output_path.value: '../../dist', BuildSettingsNameEnum.main.value: f'{String.convert_to_snake_case(self._project.name)}.main', @@ -178,99 +174,7 @@ class NewService(CommandABC): 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 @@ -296,22 +200,25 @@ class NewService(CommandABC): sys.path.insert(0, os.path.join(path, '.cpl')) for r, d, f in os.walk(os.path.join(path, '.cpl')): for file in f: - if not file.startswith('project_') or not file.endswith('.py'): + if file.startswith('project_file_') or not file.startswith('project_') or not file.endswith('.py'): continue - code = '' - with open(os.path.join(r, file), 'r') as py_file: - code = py_file.read() - py_file.close() + try: + exec(open(os.path.join(r, file), 'r').read()) + except Exception as e: + Console.error(str(e), traceback.format_exc()) + sys.exit(-1) - exec(code) - - def _create_project(self): + def _create_project(self, project_type: ProjectTypeEnum): self._read_custom_project_types_from_path(self._env.runtime_directory) self._read_custom_project_types_from_path(self._env.working_directory) + if len(ProjectTypeABC.__subclasses__()) == 0: + Console.error(f'No project types found in template directory: .cpl') + sys.exit() + self._create_project_settings() - self._create_build_settings() + self._create_build_settings(project_type) self._create_project_json() path = self._get_project_path() if path is None: @@ -322,19 +229,23 @@ class NewService(CommandABC): if self._rel_path != '': project_name = f'{self._rel_path}/{project_name}' - project_type = None + project_class = None for p in ProjectTypeABC.__subclasses__(): - if p.__name__.lower() != self._project_type: + if p.__name__.lower() != project_type.value and p.__name__.lower()[0] != project_type.value[0]: continue - project_type = p + project_class = p + + if project_class is None: + Console.error(f'Project type {project_type.value} not found in template directory: .cpl/') + sys.exit() base = 'src/' split_project_name = project_name.split('/') if self._use_base and len(split_project_name) > 0: base = f'{split_project_name[0]}/' - project = project_type( + project = project_class( base if self._workspace is not None else 'src/', project_name, self._workspace, @@ -342,6 +253,7 @@ class NewService(CommandABC): self._use_startup, self._use_service_providing, self._use_async, + self._project_json ) if self._workspace is None: @@ -349,24 +261,41 @@ class NewService(CommandABC): f'{project_name}/cpl-workspace.json', project_name.split('/')[-1], { - project_name: project_name + project_name: f'{base if self._workspace is not None else "src/"}{String.convert_to_snake_case(project_name)}/{project_name}.json' }, {} ) else: - self._workspace.projects[project_name] = f'{base}{String.convert_to_snake_case(project_name.split("/")[-1])}' + self._workspace.projects[project_name] = f'{base if self._workspace is not None else "src/"}{String.convert_to_snake_case(project_name)}/{project_name}.json' TemplateBuilder.create_workspace('cpl-workspace.json', self._workspace.default_project, self._workspace.projects, self._workspace.scripts) for template in project.templates: + rel_base = '/'.join(project_name.split('/')[:-1]) + template_path_base = template.path.split('/')[0] + if not self._use_base and rel_base != '' and template_path_base != '' and template_path_base != rel_base: + template.path = template.path.replace(f'{template_path_base}/', f'{template_path_base}/{rel_base}/') + + if template.name.endswith(f'{project_name.split("/")[-1]}.json'): + pass + + file_path = os.path.join( + project_name if self._workspace is None else '', + template.path, + template.name + ) + Console.spinner( - f'Creating {os.path.join(project_name, template.path, template.name)}', + f'Creating {file_path}', TemplateBuilder.build, - project_name, + file_path, template, text_foreground_color=ForegroundColorEnum.green, spinner_foreground_color=ForegroundColorEnum.cyan ) + if self._use_venv: + self._create_venv() + def execute(self, args: list[str]): """ Entry point of command @@ -412,25 +341,15 @@ class NewService(CommandABC): 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._project_type = ProjectTypeEnum.console.value - self._create_project() - # self._console(args) - if self._use_venv: - self._create_venv() + self._create_project(ProjectTypeEnum.console) elif console is None and library is not None and unittest is None: self._name = library - self._project_type = ProjectTypeEnum.library.value - self._library(args) - if self._use_venv: - self._create_venv() + self._create_project(ProjectTypeEnum.library) elif console is None and library is None and unittest is not None: self._name = unittest - self._project_type = ProjectTypeEnum.unittest.value - self._unittest(args) - if self._use_venv: - self._create_venv() + self._create_project(ProjectTypeEnum.unittest) else: Console.error(f'Project type not found') diff --git a/src/cpl_cli/publish/publisher_service.py b/src/cpl_cli/publish/publisher_service.py index b1639023..ca1a5382 100644 --- a/src/cpl_cli/publish/publisher_service.py +++ b/src/cpl_cli/publish/publisher_service.py @@ -404,7 +404,7 @@ class PublisherService(PublisherABC): f'--bdist-dir={os.path.join(self._output_path, "bdist")}', f'--dist-dir={os.path.join(self._output_path, "setup")}' ]) - os.remove(setup_py) + # os.remove(setup_py) except Exception as e: Console.error('Executing setup.py failed', str(e)) @@ -492,10 +492,10 @@ class PublisherService(PublisherABC): Console.write_line('Running setup.py:\n') self._run_setup() - Console.spinner( - 'Cleaning dist path:', - self._clean_dist_files, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.blue - ) + # Console.spinner( + # 'Cleaning dist path:', + # self._clean_dist_files, + # text_foreground_color=ForegroundColorEnum.green, + # spinner_foreground_color=ForegroundColorEnum.blue + # ) Console.write_line() diff --git a/src/cpl_cli/source_creator/console_builder.py b/src/cpl_cli/source_creator/console_builder.py deleted file mode 100644 index e8b86f84..00000000 --- a/src/cpl_cli/source_creator/console_builder.py +++ /dev/null @@ -1,182 +0,0 @@ -import json -import os -from typing import Optional - -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.configuration.workspace_settings import WorkspaceSettings -from cpl_cli.configuration.workspace_settings_name_enum import WorkspaceSettingsNameEnum -from cpl_cli.source_creator.template_builder import TemplateBuilder -from cpl_cli._templates.new.console.appsettings_json import AppsettingsTemplate -from cpl_cli._templates.new.console.license import LicenseTemplate -from cpl_cli._templates.new.console.readme_py import ReadmeTemplate -from cpl_cli._templates.new.console.source.name.application import ApplicationTemplate -from cpl_cli._templates.new.console.source.name.init import MainInitTemplate -from cpl_cli._templates.new.console.source.name.main import MainWithApplicationHostAndStartupTemplate, \ - MainWithoutApplicationBaseTemplate, MainWithApplicationBaseTemplate, MainWithDependencyInjection -from cpl_cli._templates.new.console.source.name.startup import StartupTemplate -from cpl_cli._templates.new.console.source.tests.init import TestsInitTemplate -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class ConsoleBuilder: - - def __init__(self): - pass - - @staticmethod - def _create_file(file_name: str, content: dict): - if not os.path.isabs(file_name): - file_name = os.path.abspath(file_name) - - path = os.path.dirname(file_name) - if not os.path.isdir(path): - os.makedirs(path) - - with open(file_name, 'w') as project_json: - project_json.write(json.dumps(content, indent=2)) - project_json.close() - - @classmethod - def _create_workspace(cls, path: str, project_name, projects: dict, scripts: dict): - ws_dict = { - WorkspaceSettings.__name__: { - WorkspaceSettingsNameEnum.default_project.value: project_name, - WorkspaceSettingsNameEnum.projects.value: projects, - WorkspaceSettingsNameEnum.scripts.value: scripts - } - } - - Console.spinner( - f'Creating {path}', - cls._create_file, - path, - ws_dict, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan - ) - - @classmethod - def build(cls, project_path: str, use_application_api: bool, use_startup: bool, use_service_providing: bool, - use_async: bool, project_name: str, project_settings: dict, workspace: Optional[WorkspaceSettings]): - """ - Builds the console project files - :param project_path: - :param use_application_api: - :param use_startup: - :param use_service_providing: - :param use_async: - :param project_name: - :param project_settings: - :param workspace: - :return: - """ - pj_name = project_name - if '/' in pj_name: - pj_name = pj_name.split('/')[len(pj_name.split('/')) - 1] - - project_name_snake = String.convert_to_snake_case(pj_name) - - if workspace is None: - templates: list[TemplateFileABC] = [ - LicenseTemplate(), - ReadmeTemplate(), - TestsInitTemplate(), - AppsettingsTemplate(), - MainInitTemplate(project_name, os.path.join('src/', project_name_snake)) - ] - else: - project_path = os.path.join( - os.path.dirname(project_path), - project_name_snake - ) - - templates: list[TemplateFileABC] = [ - AppsettingsTemplate(), - MainInitTemplate('', '') - ] - - if not os.path.isdir(project_path): - os.makedirs(project_path) - - py_src_rel_path = '' - src_name = project_name_snake - if workspace is None: - py_src_rel_path = f'src/{src_name}' - - if use_application_api: - templates.append(ApplicationTemplate(src_name, py_src_rel_path, use_async)) - - if use_startup: - templates.append(StartupTemplate(src_name, py_src_rel_path)) - templates.append(MainWithApplicationHostAndStartupTemplate(src_name, py_src_rel_path, use_async)) - else: - templates.append(MainWithApplicationBaseTemplate(src_name, py_src_rel_path, use_async)) - else: - if use_service_providing: - templates.append(MainWithDependencyInjection(src_name, py_src_rel_path, use_async)) - else: - templates.append(MainWithoutApplicationBaseTemplate(src_name, py_src_rel_path, use_async)) - - src_rel_path = '' - if '/' in project_name: - old_pj_name = project_name - parts = project_name.split('/') - project_name = parts[len(parts) - 1] - src_rel_path = old_pj_name.split(project_name)[0] - - proj_name = project_name - if src_rel_path.endswith('/'): - src_rel_path = src_rel_path[:len(src_rel_path) - 1] - - if src_rel_path != '': - proj_name = f'{src_rel_path}/{project_name}' - if workspace is not None: - proj_name = project_name_snake - - if src_rel_path != '': - project_file_path = f'{src_rel_path}/{project_name_snake}/{project_name}.json' - else: - project_file_path = f'{project_name_snake}/{project_name}.json' - - if workspace is None: - src_path = f'src/{project_name_snake}' - workspace_file_path = f'{proj_name}/cpl-workspace.json' - project_file_rel_path = f'{src_path}/{project_name}.json' - project_file_path = f'{proj_name}/{src_path}/{project_name}.json' - cls._create_workspace( - workspace_file_path, - project_name, - { - project_name: project_file_rel_path - }, - {} - ) - - else: - workspace.projects[project_name] = f'src/{project_file_path}' - cls._create_workspace('cpl-workspace.json', workspace.default_project, workspace.projects, workspace.scripts) - - Console.spinner( - f'Creating {project_file_path}', - cls._create_file, - project_file_path if workspace is None else f'src/{project_file_path}', - project_settings, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan - ) - - for template in templates: - divider = '' - if template.path != '' and not template.path.endswith('/'): - divider = '/' - - Console.spinner( - f'Creating {proj_name}/{template.path}{divider}{template.name}', - TemplateBuilder.build, - project_path, - template, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan - ) diff --git a/src/cpl_cli/source_creator/library_builder.py b/src/cpl_cli/source_creator/library_builder.py deleted file mode 100644 index 702aa449..00000000 --- a/src/cpl_cli/source_creator/library_builder.py +++ /dev/null @@ -1,186 +0,0 @@ -import json -import os -from typing import Optional - -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.configuration.workspace_settings import WorkspaceSettings -from cpl_cli.configuration.workspace_settings_name_enum import WorkspaceSettingsNameEnum -from cpl_cli.source_creator.template_builder import TemplateBuilder -from cpl_cli._templates.new.library.appsettings_json import AppsettingsTemplate -from cpl_cli._templates.new.library.license import LicenseTemplate -from cpl_cli._templates.new.library.readme_py import ReadmeTemplate -from cpl_cli._templates.new.library.source.name.application import ApplicationTemplate -from cpl_cli._templates.new.library.source.name.init import NameInitTemplate -from cpl_cli._templates.new.library.source.name.main import MainWithApplicationHostAndStartupTemplate, \ - MainWithoutApplicationBaseTemplate, MainWithApplicationBaseTemplate, MainWithDependencyInjection -from cpl_cli._templates.new.library.source.name.startup import StartupTemplate -from cpl_cli._templates.new.library.source.tests.init import TestsInitTemplate -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class LibraryBuilder: - - def __init__(self): - pass - - @staticmethod - def _create_file(file_name: str, content: dict): - if not os.path.isabs(file_name): - file_name = os.path.abspath(file_name) - - path = os.path.dirname(file_name) - if not os.path.isdir(path): - os.makedirs(path) - - with open(file_name, 'w') as project_json: - project_json.write(json.dumps(content, indent=2)) - project_json.close() - - @classmethod - def _create_workspace(cls, path: str, project_name, projects: dict, scripts: dict): - ws_dict = { - WorkspaceSettings.__name__: { - WorkspaceSettingsNameEnum.default_project.value: project_name, - WorkspaceSettingsNameEnum.projects.value: projects, - WorkspaceSettingsNameEnum.scripts.value: scripts, - } - } - - Console.spinner( - f'Creating {path}', - cls._create_file, - path, - ws_dict, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan - ) - - @classmethod - def build(cls, project_path: str, use_application_api: bool, use_startup: bool, - use_async: bool, use_service_providing: bool, project_name: str, project_settings: dict, - workspace: Optional[WorkspaceSettings]): - """ - Builds the library project files - :param project_path: - :param use_application_api: - :param use_startup: - :param use_service_providing: - :param use_async: - :param project_name: - :param project_settings: - :param workspace: - :return: - """ - pj_name = project_name - if '/' in pj_name: - pj_name = pj_name.split('/')[len(pj_name.split('/')) - 1] - - project_name_snake = String.convert_to_snake_case(pj_name) - - if workspace is None: - templates: list[TemplateFileABC] = [ - LicenseTemplate(), - ReadmeTemplate(), - TestsInitTemplate(), - NameInitTemplate(project_name, os.path.join( - 'src/', project_name_snake)), - AppsettingsTemplate() - ] - else: - project_path = os.path.join( - os.path.dirname(project_path), - project_name_snake - ) - - templates: list[TemplateFileABC] = [ - LicenseTemplate(), - ReadmeTemplate(), - NameInitTemplate('', ''), - AppsettingsTemplate() - ] - - if not os.path.isdir(project_path): - os.makedirs(project_path) - - py_src_rel_path = '' - src_name = project_name_snake - if workspace is None: - py_src_rel_path = f'src/{src_name}' - - if use_application_api: - templates.append(ApplicationTemplate(src_name, py_src_rel_path, use_async)) - - if use_startup: - templates.append(StartupTemplate(src_name, py_src_rel_path)) - templates.append(MainWithApplicationHostAndStartupTemplate(src_name, py_src_rel_path, use_async)) - else: - templates.append(MainWithApplicationBaseTemplate(src_name, py_src_rel_path, use_async)) - else: - if use_service_providing: - templates.append(MainWithDependencyInjection(src_name, py_src_rel_path, use_async)) - else: - templates.append(MainWithoutApplicationBaseTemplate(src_name, py_src_rel_path, use_async)) - - src_rel_path = '' - if '/' in project_name: - old_pj_name = project_name - parts = project_name.split('/') - project_name = parts[len(parts) - 1] - src_rel_path = old_pj_name.split(project_name)[0] - - proj_name = project_name - if src_rel_path.endswith('/'): - src_rel_path = src_rel_path[:len(src_rel_path) - 1] - - if src_rel_path != '': - proj_name = f'{src_rel_path}/{project_name}' - if workspace is not None: - proj_name = project_name_snake - - if src_rel_path != '': - project_file_path = f'{src_rel_path}/{project_name_snake}/{project_name}.json' - else: - project_file_path = f'{project_name_snake}/{project_name}.json' - - if workspace is None: - src_path = f'src/{project_name_snake}' - workspace_file_path = f'{proj_name}/cpl-workspace.json' - project_file_rel_path = f'{src_path}/{project_name}.json' - project_file_path = f'{proj_name}/{src_path}/{project_name}.json' - cls._create_workspace( - workspace_file_path, - project_name, - { - project_name: project_file_rel_path - }, - {} - ) - - else: - workspace.projects[project_name] = f'src/{project_file_path}' - cls._create_workspace('cpl-workspace.json', workspace.default_project, workspace.projects, workspace.scripts) - - Console.spinner( - f'Creating {project_file_path}', - cls._create_file, - project_file_path if workspace is None else f'src/{project_file_path}', - project_settings, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan - ) - - for template in templates: - divider = '' - if template.path != '' and not template.path.endswith('/'): - divider = '/' - - Console.spinner( - f'Creating {proj_name}/{template.path}{divider}{template.name}', - TemplateBuilder.build, - project_path, - template, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan - ) diff --git a/src/cpl_cli/source_creator/template_builder.py b/src/cpl_cli/source_creator/template_builder.py index c661cd7a..798b4a9b 100644 --- a/src/cpl_cli/source_creator/template_builder.py +++ b/src/cpl_cli/source_creator/template_builder.py @@ -1,8 +1,6 @@ import json import os -from typing import Union -from cpl_cli._templates.template_file_abc import TemplateFileABC from cpl_cli.abc.file_template_abc import FileTemplateABC from cpl_cli.configuration import WorkspaceSettings, WorkspaceSettingsNameEnum from cpl_core.console import Console, ForegroundColorEnum @@ -11,7 +9,7 @@ from cpl_core.console import Console, ForegroundColorEnum class TemplateBuilder: @staticmethod - def _create_file(file_name: str, content: dict): + def build_cpl_file(file_name: str, content: dict): if not os.path.isabs(file_name): file_name = os.path.abspath(file_name) @@ -35,7 +33,7 @@ class TemplateBuilder: Console.spinner( f'Creating {path}', - cls._create_file, + cls.build_cpl_file, path, ws_dict, text_foreground_color=ForegroundColorEnum.green, @@ -43,14 +41,13 @@ class TemplateBuilder: ) @staticmethod - def build(project_path: str, template: Union[TemplateFileABC, FileTemplateABC]): + def build(file_path: str, template: FileTemplateABC): """ Creates template - :param project_path: + :param file_path: :param template: :return: """ - file_path = os.path.join(project_path, template.path, template.name) if not os.path.isdir(os.path.dirname(file_path)): os.makedirs(os.path.dirname(file_path)) diff --git a/src/cpl_cli/source_creator/unittest_builder.py b/src/cpl_cli/source_creator/unittest_builder.py deleted file mode 100644 index 805c6363..00000000 --- a/src/cpl_cli/source_creator/unittest_builder.py +++ /dev/null @@ -1,164 +0,0 @@ -import json -import os -from typing import Optional - -from cpl_cli._templates.new.unittest.license import LicenseTemplate -from cpl_cli._templates.new.unittest.readme_py import ReadmeTemplate -from cpl_cli._templates.new.unittest.source.name.application import ApplicationTemplate -from cpl_cli._templates.new.unittest.source.name.init import MainInitTemplate -from cpl_cli._templates.new.unittest.source.name.main import MainWithApplicationBaseTemplate -from cpl_cli._templates.new.unittest.source.name.test_case import TestCaseTemplate -from cpl_cli._templates.template_file_abc import TemplateFileABC -from cpl_cli.configuration.workspace_settings import WorkspaceSettings -from cpl_cli.configuration.workspace_settings_name_enum import WorkspaceSettingsNameEnum -from cpl_cli.source_creator.template_builder import TemplateBuilder -from cpl_core.console.console import Console -from cpl_core.console.foreground_color_enum import ForegroundColorEnum -from cpl_core.utils.string import String - - -class UnittestBuilder: - - def __init__(self): - pass - - @staticmethod - def _create_file(file_name: str, content: dict): - if not os.path.isabs(file_name): - file_name = os.path.abspath(file_name) - - path = os.path.dirname(file_name) - if not os.path.isdir(path): - os.makedirs(path) - - with open(file_name, 'w') as project_json: - project_json.write(json.dumps(content, indent=2)) - project_json.close() - - @classmethod - def _create_workspace(cls, path: str, project_name, projects: dict, scripts: dict): - ws_dict = { - WorkspaceSettings.__name__: { - WorkspaceSettingsNameEnum.default_project.value: project_name, - WorkspaceSettingsNameEnum.projects.value: projects, - WorkspaceSettingsNameEnum.scripts.value: scripts - } - } - - Console.spinner( - f'Creating {path}', - cls._create_file, - path, - ws_dict, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan - ) - - @classmethod - def build(cls, project_path: str, use_application_api: bool, - use_async: bool, project_name: str, project_settings: dict, workspace: Optional[WorkspaceSettings]): - """ - Builds the console project files - :param project_path: - :param use_application_api: - :param use_async: - :param project_name: - :param project_settings: - :param workspace: - :return: - """ - pj_name = project_name - if '/' in pj_name: - pj_name = pj_name.split('/')[len(pj_name.split('/')) - 1] - - project_name_snake = String.convert_to_snake_case(pj_name) - - if workspace is None: - templates: list[TemplateFileABC] = [ - LicenseTemplate(), - ReadmeTemplate(), - MainInitTemplate(project_name, os.path.join('src/', project_name_snake)) - ] - else: - project_path = os.path.join( - os.path.dirname(project_path), - project_name_snake - ) - - templates: list[TemplateFileABC] = [ - MainInitTemplate('', '') - ] - - if not os.path.isdir(project_path): - os.makedirs(project_path) - - py_src_rel_path = '' - src_name = project_name_snake - if workspace is None: - py_src_rel_path = f'src/{src_name}' - - templates.append(ApplicationTemplate(src_name, py_src_rel_path, use_async)) - templates.append(MainWithApplicationBaseTemplate(src_name, py_src_rel_path, use_async)) - templates.append(TestCaseTemplate(src_name, py_src_rel_path, use_async)) - - src_rel_path = '' - if '/' in project_name: - old_pj_name = project_name - parts = project_name.split('/') - project_name = parts[len(parts) - 1] - src_rel_path = old_pj_name.split(project_name)[0] - - proj_name = project_name - if src_rel_path.endswith('/'): - src_rel_path = src_rel_path[:len(src_rel_path) - 1] - - if src_rel_path != '': - proj_name = f'{src_rel_path}/{project_name}' - if workspace is not None: - proj_name = project_name_snake - - if src_rel_path != '': - project_file_path = f'{src_rel_path}/{project_name_snake}/{project_name}.json' - else: - project_file_path = f'{project_name_snake}/{project_name}.json' - - if workspace is None: - src_path = f'src/{project_name_snake}' - workspace_file_path = f'{proj_name}/cpl-workspace.json' - project_file_rel_path = f'{src_path}/{project_name}.json' - project_file_path = f'{proj_name}/{src_path}/{project_name}.json' - cls._create_workspace( - workspace_file_path, - project_name, - { - project_name: project_file_rel_path - }, - {} - ) - - else: - workspace.projects[project_name] = f'src/{project_file_path}' - cls._create_workspace('cpl-workspace.json', workspace.default_project, workspace.projects, workspace.scripts) - - Console.spinner( - f'Creating {project_file_path}', - cls._create_file, - project_file_path if workspace is None else f'src/{project_file_path}', - project_settings, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan - ) - - for template in templates: - divider = '' - if template.path != '' and not template.path.endswith('/'): - divider = '/' - - Console.spinner( - f'Creating {proj_name}/{template.path}{divider}{template.name}', - TemplateBuilder.build, - project_path, - template, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan - ) diff --git a/unittests/unittests_cli/abc/command_test_case.py b/unittests/unittests_cli/abc/command_test_case.py index 3b609cab..6f216e00 100644 --- a/unittests/unittests_cli/abc/command_test_case.py +++ b/unittests/unittests_cli/abc/command_test_case.py @@ -7,6 +7,7 @@ from unittests_cli.constants import PLAYGROUND_PATH class CommandTestCase(unittest.TestCase): + _skip_tear_down = False def __init__(self, method_name: str): unittest.TestCase.__init__(self, method_name) @@ -18,7 +19,8 @@ class CommandTestCase(unittest.TestCase): if os.path.exists(PLAYGROUND_PATH): shutil.rmtree(os.path.abspath(os.path.join(PLAYGROUND_PATH))) - os.makedirs(PLAYGROUND_PATH) + if not os.path.exists(PLAYGROUND_PATH): + os.makedirs(PLAYGROUND_PATH) os.chdir(PLAYGROUND_PATH) except Exception as e: print(f'Setup of {__name__} failed: {traceback.format_exc()}') @@ -28,6 +30,8 @@ class CommandTestCase(unittest.TestCase): @classmethod def tearDownClass(cls): + if cls._skip_tear_down: + return try: if os.path.exists(PLAYGROUND_PATH): shutil.rmtree(os.path.abspath(os.path.join(PLAYGROUND_PATH))) diff --git a/unittests/unittests_cli/add_test_case.py b/unittests/unittests_cli/add_test_case.py index 18efb1bd..e78ade03 100644 --- a/unittests/unittests_cli/add_test_case.py +++ b/unittests/unittests_cli/add_test_case.py @@ -28,7 +28,7 @@ class AddTestCase(CommandTestCase): # create projects CLICommands.new('console', self._source, '--ab', '--s') os.chdir(os.path.join(os.getcwd(), self._source)) - CLICommands.new('console', self._target, '--ab', '--s') + CLICommands.new('library', self._target, '--ab', '--s') def test_add(self): CLICommands.add(self._source, self._target) diff --git a/unittests/unittests_cli/new_test_case.py b/unittests/unittests_cli/new_test_case.py index 21191333..22c830f3 100644 --- a/unittests/unittests_cli/new_test_case.py +++ b/unittests/unittests_cli/new_test_case.py @@ -1,5 +1,6 @@ import json import os +import unittest from cpl_core.utils import String from unittests_cli.abc.command_test_case import CommandTestCase @@ -32,8 +33,8 @@ class NewTestCase(CommandTestCase): project_path = os.path.abspath(os.path.join(PLAYGROUND_PATH, base, name, 'src/', String.convert_to_snake_case(name))) self.assertTrue(os.path.exists(project_path)) - self.assertTrue(os.path.join(project_path, f'{name}.json')) - self.assertTrue(os.path.join(project_path, f'main.py')) + self.assertTrue(os.path.exists(os.path.join(project_path, f'{name}.json'))) + self.assertTrue(os.path.exists(os.path.join(project_path, f'main.py'))) if '--ab' in args: self.assertTrue(os.path.isfile(os.path.join(project_path, f'application.py'))) @@ -110,23 +111,23 @@ class NewTestCase(CommandTestCase): def test_console_without_anything(self): self._test_project('console', 'test-console-without-anything', '--n') - def test_sub_console(self): + def test_console_sub(self): self._test_sub_project('console', 'test-sub-console', 'test-console', '--ab', '--s', '--sp', '--venv', test_venv=True) - def test_sub_console_with_other_base(self): + def test_console_sub_with_other_base(self): self._test_sub_project('console', 'tools/test-sub-console', 'test-console', '--ab', '--s', '--sp', '--venv', '--base', test_venv=True) def test_library(self): self._test_project('library', 'test-library', '--ab', '--s', '--sp') - def test_sub_library(self): + def test_library_sub(self): self._test_sub_project('library', 'test-sub-library', 'test-console', '--ab', '--s', '--sp') - def test_sub_directory_library(self): + def test_library_sub_directory(self): self._test_sub_directory_project('library', 'directory', 'test-sub-library', 'test-console', '--ab', '--s', '--sp') def test_unittest(self): self._test_project('unittest', 'test-unittest', '--ab') - def test_sub_unittest(self): + def test_unittest_sub(self): self._test_sub_project('unittest', 'test-unittest', 'test-console', '--ab', '--s', '--sp') diff --git a/unittests/unittests_cli/publish_test_case.py b/unittests/unittests_cli/publish_test_case.py index 9992626b..c22dfba5 100644 --- a/unittests/unittests_cli/publish_test_case.py +++ b/unittests/unittests_cli/publish_test_case.py @@ -12,6 +12,7 @@ from unittests_shared.cli_commands import CLICommands class PublishTestCase(CommandTestCase): + CommandTestCase._skip_tear_down = True def __init__(self, method_name: str): CommandTestCase.__init__(self, method_name) @@ -26,6 +27,14 @@ class PublishTestCase(CommandTestCase): return project_json + def _get_appsettings(self): + with open(os.path.join(os.getcwd(), os.path.dirname(self._project_file), 'appsettings.json'), 'r', encoding='utf-8') as cfg: + # load json + project_json = json.load(cfg) + cfg.close() + + return project_json + def _save_project_settings(self, settings: dict): with open(os.path.join(os.getcwd(), self._project_file), 'w', encoding='utf-8') as project_file: project_file.write(json.dumps(settings, indent=2)) @@ -34,7 +43,7 @@ class PublishTestCase(CommandTestCase): def setUp(self): if not os.path.exists(PLAYGROUND_PATH): os.makedirs(PLAYGROUND_PATH) - + os.chdir(PLAYGROUND_PATH) # create projects CLICommands.new('console', self._source, '--ab', '--s') @@ -86,4 +95,8 @@ class PublishTestCase(CommandTestCase): with open(f'{full_dist_path}/{self._source}.json', 'w') as file: file.write(json.dumps(self._get_project_settings(), indent=2)) file.close() + + with open(f'{full_dist_path}/appsettings.json', 'w') as file: + file.write(json.dumps(self._get_appsettings(), indent=2)) + file.close() self.assertTrue(self._are_dir_trees_equal(f'./src/{String.convert_to_snake_case(self._source)}', full_dist_path))