diff --git a/.gitea/workflows/core_dev.yaml b/.gitea/workflows/core_dev.yaml new file mode 100644 index 00000000..7e468e78 --- /dev/null +++ b/.gitea/workflows/core_dev.yaml @@ -0,0 +1,14 @@ +name: Build on push +run-name: Build on push +on: + push: + branches: + - dev + +jobs: + prepare: + uses: ./.gitea/workflows/prepare.yaml + + build: + needs: prepare + uses: ./.gitea/workflows/package.yaml \ No newline at end of file diff --git a/.gitea/workflows/package.yaml b/.gitea/workflows/package.yaml new file mode 100644 index 00000000..d2fd07fc --- /dev/null +++ b/.gitea/workflows/package.yaml @@ -0,0 +1,47 @@ +name: Build Package +run-name: Build Python Package + +on: + workflow_call: + +jobs: + build: + runs-on: [ runner ] + needs: prepare + container: git.sh-edraft.de/sh-edraft.de/act-runner:latest + + steps: + - name: Clone Repository + uses: https://github.com/actions/checkout@v3 + with: + token: ${{ secrets.CI_ACCESS_TOKEN }} + + - name: Download build version artifact + uses: actions/download-artifact@v3 + with: + name: version + + - name: Set version + run: | + sed -i -E "s/^version = \".*\"/version = \"$(cat version.txt)-dev\"/" pyproject.toml + + - name: Install Dependencies + run: | + pip install build + + - name: Build Package + run: | + python -m build --sdist --wheel --outdir dist + + upload: + - name: Login to registry git.sh-edraft.de + uses: https://github.com/docker/login-action@v1 + with: + registry: git.sh-edraft.de + username: ${{ secrets.CI_USERNAME }} + password: ${{ secrets.CI_ACCESS_TOKEN }} + + - name: Push image + run: | + pip install twine + python -m twine upload --repository-url https://git.sh-edraft.de/api/packages/sh-edraft.de/pypi -u ${{ secrets.CI_USERNAME }} -p ${{ secrets.CI_ACCESS_TOKEN }} ./dist/* \ No newline at end of file diff --git a/.gitea/workflows/prepare.yaml b/.gitea/workflows/prepare.yaml new file mode 100644 index 00000000..bf78435c --- /dev/null +++ b/.gitea/workflows/prepare.yaml @@ -0,0 +1,43 @@ +name: Prepare Build +run-name: Prepare Build Version + +on: + workflow_call: + outputs: + build_version: + value: ${{ jobs.prepare.outputs.build_version }} + +jobs: + prepare: + runs-on: [ runner ] + container: git.sh-edraft.de/sh-edraft.de/act-runner:latest + steps: + - name: Clone Repository + uses: https://github.com/actions/checkout@v3 + with: + token: ${{ secrets.CI_ACCESS_TOKEN }} + + - name: Get Date and Build Number + run: | + git fetch --tags + git tag + DATE=$(date +'%Y.%m.%d') + TAG_COUNT=$(git tag -l "${DATE}.*" | wc -l) + BUILD_NUMBER=$(($TAG_COUNT + 1)) + BUILD_VERSION="${DATE}.${BUILD_NUMBER}.dev1" + echo "$BUILD_VERSION" > version.txt + echo "VERSION $BUILD_VERSION" + + - name: Create Git Tag for Build + run: | + git config user.name "ci" + git config user.email "dev@sh-edraft.de" + echo "tag $(cat version.txt)" + git tag $(cat version.txt) + git push origin --tags + + - name: Upload build version artifact + uses: actions/upload-artifact@v3 + with: + name: version + path: version.txt \ No newline at end of file diff --git a/.gitea/workflows/publish.yaml b/.gitea/workflows/publish.yaml new file mode 100644 index 00000000..cdd35796 --- /dev/null +++ b/.gitea/workflows/publish.yaml @@ -0,0 +1,22 @@ +name: Publish Package +run-name: Publish Python Package + +on: + workflow_call: + +jobs: + upload: + runs-on: [ runner ] + container: git.sh-edraft.de/sh-edraft.de/act-runner:latest + steps: + - name: Login to registry git.sh-edraft.de + uses: https://github.com/docker/login-action@v1 + with: + registry: git.sh-edraft.de + username: ${{ secrets.CI_USERNAME }} + password: ${{ secrets.CI_ACCESS_TOKEN }} + + - name: Push image + run: | + pip install twine + python -m twine upload --repository-url https://git.sh-edraft.de/api/packages/sh-edraft.de/pypi -u ${{ secrets.CI_USERNAME }} -p ${{ secrets.CI_ACCESS_TOKEN }} ./dist/* \ No newline at end of file diff --git a/clean_init.py b/clean_init.py new file mode 100644 index 00000000..66754c90 --- /dev/null +++ b/clean_init.py @@ -0,0 +1,79 @@ +import os +import re + +def clean_init_files(root_dir='.'): + """ + Durchsucht rekursiv alle __init__.py Dateien und entfernt: + - Einzeilige Kommentare + - Mehrzeilige Kommentare/Docstrings + - Variablen, die mit __ beginnen und enden + - VersionInfo- und version_info-Zuweisungen + """ + # Regex-Pattern für zu entfernende Zeilen + comment_pattern = re.compile(r'^\s*#.*$') + dunder_pattern = re.compile(r'^\s*__\w+__\s*=.*$') + version_pattern = re.compile(r'^\s*(VersionInfo|version_info)\s*=.*$') + + # Zu ignorierende Verzeichnisse + ignore_dirs = ['venv', '.venv', 'env', '.env'] + + # Zähle bearbeitete Dateien + processed_files = 0 + + for dirpath, dirnames, filenames in os.walk(root_dir): + # Ignoriere venv-Verzeichnisse + dirnames[:] = [d for d in dirnames if d not in ignore_dirs] + + for filename in filenames: + if filename == '__init__.py': + file_path = os.path.join(dirpath, filename) + + # Datei lesen + with open(file_path, 'r', encoding='utf-8') as f: + content = f.read() + + # Mehrzeilige Kommentare entfernen + # Entferne Docstrings (''' oder """) + content = re.sub(r'(?:\'\'\'|""")[\s\S]*?(?:\'\'\'|""")', '', content) + + # Verarbeite die Zeilen + lines = content.splitlines() + + # Zu behaltende Zeilen filtern + filtered_lines = [] + for line in lines: + if (not comment_pattern.match(line) and + not dunder_pattern.match(line) and + not version_pattern.match(line)): + filtered_lines.append(line) + + # Leere aufeinanderfolgende Zeilen entfernen + clean_lines = [] + prev_empty = False + for line in filtered_lines: + is_empty = line.strip() == '' + if not (is_empty and prev_empty): + clean_lines.append(line) + prev_empty = is_empty + + # Entferne Leerzeilen am Anfang und Ende + while clean_lines and clean_lines[0].strip() == '': + clean_lines.pop(0) + while clean_lines and clean_lines[-1].strip() == '': + clean_lines.pop() + + # Füge eine Leerzeile am Ende hinzu, wenn die Datei nicht leer ist + if clean_lines: + clean_lines.append('') + + # Schreibe bereinigte Datei zurück + with open(file_path, 'w', encoding='utf-8') as f: + f.write('\n'.join(clean_lines)) + + processed_files += 1 + print(f"Bereinigt: {file_path}") + + print(f"\nAbgeschlossen: {processed_files} __init__.py Dateien bereinigt") + +if __name__ == "__main__": + clean_init_files() \ No newline at end of file diff --git a/cpl-workspace.json b/cpl-workspace.json deleted file mode 100644 index e00ea987..00000000 --- a/cpl-workspace.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "WorkspaceSettings": { - "DefaultProject": "cpl-core", - "Projects": { - "cpl-cli": "src/cpl_cli/cpl-cli.json", - "cpl-core": "src/cpl_core/cpl-core.json", - "cpl-discord": "src/cpl_discord/cpl-discord.json", - "cpl-query": "src/cpl_query/cpl-query.json", - "cpl-translation": "src/cpl_translation/cpl-translation.json", - "set-version": "tools/set_version/set-version.json", - "set-pip-urls": "tools/set_pip_urls/set-pip-urls.json", - "unittests": "unittests/unittests/unittests.json", - "unittests_cli": "unittests/unittests_cli/unittests_cli.json", - "unittests_core": "unittests/unittests_core/unittests_core.json", - "unittests_query": "unittests/unittests_query/unittests_query.json", - "unittests_shared": "unittests/unittests_shared/unittests_shared.json", - "unittests_translation": "unittests/unittests_translation/unittests_translation.json" - }, - "Scripts": { - "hello-world": "echo 'Hello World'", - - "format": "echo 'Formatting:'; black ./", - - "sv": "cpl set-version", - "set-version": "cpl run set-version --dev $ARGS; echo '';", - - "spu": "cpl set-pip-urls", - "set-pip-urls": "cpl run set-pip-urls --dev $ARGS; echo '';", - - "docs-build": "cpl format; echo 'Build Documentation'; cpl db-core; cpl db-discord; cpl db-query; cpl db-translation; cd docs/; make clean; make html;", - "db-core": "cd docs/; sphinx-apidoc -o source/ ../src/cpl_core; cd ../", - "db-discord": "cd docs/; sphinx-apidoc -o source/ ../src/cpl_discord; cd ../", - "db-query": "cd docs/; sphinx-apidoc -o source/ ../src/cpl_query; cd ../", - "db-translation": "cd docs/; sphinx-apidoc -o source/ ../src/cpl_translation; cd ../", - "db": "cpl docs-build", - - "docs-open": "xdg-open $PWD/docs/build/html/index.html &", - "do": "cpl docs-open", - - "test": "cpl run unittests", - - "pre-build-all": "cpl sv $ARGS; cpl spu $ARGS;", - "build-all": "cpl build-cli; cpl build-core; cpl build-discord; cpl build-query; cpl build-translation; cpl build-set-pip-urls; cpl build-set-version", - "ba": "cpl build-all $ARGS", - "build-cli": "echo 'Build cpl-cli'; cd ./src/cpl_cli; cpl build; cd ../../;", - "build-core": "echo 'Build cpl-core'; cd ./src/cpl_core; cpl build; cd ../../;", - "build-discord": "echo 'Build cpl-discord'; cd ./src/cpl_discord; cpl build; cd ../../;", - "build-query": "echo 'Build cpl-query'; cd ./src/cpl_query; cpl build; cd ../../;", - "build-translation": "echo 'Build cpl-translation'; cd ./src/cpl_translation; cpl build; cd ../../;", - "build-set-pip-urls": "echo 'Build set-pip-urls'; cd ./tools/set_pip_urls; cpl build; cd ../../;", - "build-set-version": "echo 'Build set-version'; cd ./tools/set_version; cpl build; cd ../../;", - - "pre-publish-all": "cpl sv $ARGS; cpl spu $ARGS;", - "publish-all": "cpl publish-cli; cpl publish-core; cpl publish-discord; cpl publish-query; cpl publish-translation;", - "pa": "cpl publish-all $ARGS", - "publish-cli": "echo 'Publish cpl-cli'; cd ./src/cpl_cli; cpl publish; cd ../../;", - "publish-core": "echo 'Publish cpl-core'; cd ./src/cpl_core; cpl publish; cd ../../;", - "publish-discord": "echo 'Publish cpl-discord'; cd ./src/cpl_discord; cpl publish; cd ../../;", - "publish-query": "echo 'Publish cpl-query'; cd ./src/cpl_query; cpl publish; cd ../../;", - "publish-translation": "echo 'Publish cpl-translation'; cd ./src/cpl_translation; cpl publish; cd ../../;", - - "upload-prod-cli": "echo 'PROD Upload cpl-cli'; cpl upl-prod-cli;", - "upl-prod-cli": "twine upload -r pip.sh-edraft.de dist/cpl-cli/publish/setup/*", - - "upload-prod-core": "echo 'PROD Upload cpl-core'; cpl upl-prod-core;", - "upl-prod-core": "twine upload -r pip.sh-edraft.de dist/cpl-core/publish/setup/*", - - "upload-prod-discord": "echo 'PROD Upload cpl-discord'; cpl upl-prod-discord;", - "upl-prod-discord": "twine upload -r pip.sh-edraft.de dist/cpl-discord/publish/setup/*", - - "upload-prod-query": "echo 'PROD Upload cpl-query'; cpl upl-prod-query;", - "upl-prod-query": "twine upload -r pip.sh-edraft.de dist/cpl-query/publish/setup/*", - - "upload-prod-translation": "echo 'PROD Upload cpl-translation'; cpl upl-prod-translation;", - "upl-prod-translation": "twine upload -r pip.sh-edraft.de dist/cpl-translation/publish/setup/*", - - "upload-exp-cli": "echo 'EXP Upload cpl-cli'; cpl upl-exp-cli;", - "upl-exp-cli": "twine upload -r pip-exp.sh-edraft.de dist/cpl-cli/publish/setup/*", - - "upload-exp-core": "echo 'EXP Upload cpl-core'; cpl upl-exp-core;", - "upl-exp-core": "twine upload -r pip-exp.sh-edraft.de dist/cpl-core/publish/setup/*", - - "upload-exp-discord": "echo 'EXP Upload cpl-discord'; cpl upl-exp-discord;", - "upl-exp-discord": "twine upload -r pip-exp.sh-edraft.de dist/cpl-discord/publish/setup/*", - - "upload-exp-query": "echo 'EXP Upload cpl-query'; cpl upl-exp-query;", - "upl-exp-query": "twine upload -r pip-exp.sh-edraft.de dist/cpl-query/publish/setup/*", - - "upload-exp-translation": "echo 'EXP Upload cpl-translation'; cpl upl-exp-translation;", - "upl-exp-translation": "twine upload -r pip-exp.sh-edraft.de dist/cpl-translation/publish/setup/*", - - "upload-dev-cli": "echo 'DEV Upload cpl-cli'; cpl upl-dev-cli;", - "upl-dev-cli": "twine upload -r pip-dev.sh-edraft.de dist/cpl-cli/publish/setup/*", - - "upload-dev-core": "echo 'DEV Upload cpl-core'; cpl upl-dev-core;", - "upl-dev-core": "twine upload -r pip-dev.sh-edraft.de dist/cpl-core/publish/setup/*", - - "upload-dev-discord": "echo 'DEV Upload cpl-discord'; cpl upl-dev-discord;", - "upl-dev-discord": "twine upload -r pip-dev.sh-edraft.de dist/cpl-discord/publish/setup/*", - - "upload-dev-query": "echo 'DEV Upload cpl-query'; cpl upl-dev-query;", - "upl-dev-query": "twine upload -r pip-dev.sh-edraft.de dist/cpl-query/publish/setup/*", - - "upload-dev-translation": "echo 'DEV Upload cpl-translation'; cpl upl-dev-translation;", - "upl-dev-translation": "twine upload -r pip-dev.sh-edraft.de dist/cpl-translation/publish/setup/*", - - "pre-deploy-prod": "cpl sv $ARGS; cpl spu --environment=production;", - "deploy-prod": "cpl deploy-prod-cli; cpl deploy-prod-core; cpl deploy-prod-discord; cpl deploy-prod-query; cpl deploy-prod-translation;", - "dp": "cpl deploy-prod $ARGS", - "deploy-prod-cli": "cpl publish-cli; cpl upload-prod-cli", - "deploy-prod-core": "cpl publish-core; cpl upload-prod-core", - "deploy-prod-query": "cpl publish-query; cpl upload-prod-query", - "deploy-prod-discord": "cpl publish-discord; cpl upload-prod-discord", - "deploy-prod-translation": "cpl publish-translation; cpl upload-prod-translation", - - "pre-deploy-exp": "cpl sv $ARGS; cpl spu --environment=staging;", - "deploy-exp": "cpl deploy-exp-cli; cpl deploy-exp-core; cpl deploy-exp-discord; cpl deploy-exp-query; cpl deploy-exp-translation;", - "de": "cpl deploy-exp $ARGS", - "deploy-exp-cli": "cpl publish-cli; cpl upload-exp-cli", - "deploy-exp-core": "cpl publish-core; cpl upload-exp-core", - "deploy-exp-discord": "cpl publish-discord; cpl upload-exp-discord", - "deploy-exp-query": "cpl publish-query; cpl upload-exp-query", - "deploy-exp-translation": "cpl publish-translation; cpl upload-exp-translation", - - "pre-deploy-dev": "cpl sv $ARGS; cpl spu --environment=development;", - "deploy-dev": "cpl deploy-dev-cli; cpl deploy-dev-core; cpl deploy-dev-discord; cpl deploy-dev-query; cpl deploy-dev-translation;", - "dd": "cpl deploy-dev $ARGS", - "deploy-dev-cli": "cpl publish-cli; cpl upload-dev-cli", - "deploy-dev-core": "cpl publish-core; cpl upload-dev-core", - "deploy-dev-discord": "cpl publish-discord; cpl upload-dev-discord", - "deploy-dev-query": "cpl publish-query; cpl upload-dev-query", - "deploy-dev-translation": "cpl publish-query; cpl upload-dev-translation", - - "dev-install": "cpl di-core; cpl di-cli; cpl di-query; cpl di-translation;", - "di": "cpl dev-install", - "di-core": "pip install cpl-core --pre --upgrade --extra-index-url https://pip-dev.sh-edraft.de", - "di-cli": "pip install cpl-cli --pre --upgrade --extra-index-url https://pip-dev.sh-edraft.de", - "di-discord": "pip install cpl-discord --pre --upgrade --extra-index-url https://pip-dev.sh-edraft.de", - "di-query": "pip install cpl-query --pre --upgrade --extra-index-url https://pip-dev.sh-edraft.de", - "di-translation": "pip install cpl-translation --pre --upgrade --extra-index-url https://pip-dev.sh-edraft.de", - - "prod-install": "cpl pi-core; cpl pi-cli; cpl pi-query; cpl pi-translation;", - "pi": "cpl prod-install", - "pi-core": "pip install cpl-core --pre --upgrade --extra-index-url https://pip.sh-edraft.de", - "pi-cli": "pip install cpl-cli --pre --upgrade --extra-index-url https://pip.sh-edraft.de", - "pi-discord": "pip install cpl-discord --pre --upgrade --extra-index-url https://pip.sh-edraft.de", - "pi-query": "pip install cpl-query --pre --upgrade --extra-index-url https://pip.sh-edraft.de", - "pi-translation": "pip install cpl-translation --pre --upgrade --extra-index-url https://pip.sh-edraft.de" - } - } -} \ No newline at end of file diff --git a/src/cpl_cli/.cpl/__init__.py b/src/cpl_cli/.cpl/__init__.py deleted file mode 100644 index efbc86c5..00000000 --- a/src/cpl_cli/.cpl/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/.cpl/project_console.py b/src/cpl_cli/.cpl/project_console.py deleted file mode 100644 index 178ca299..00000000 --- a/src/cpl_cli/.cpl/project_console.py +++ /dev/null @@ -1,69 +0,0 @@ -from cpl_cli.abc.project_type_abc import ProjectTypeABC -from cpl_cli.configuration import WorkspaceSettings -from cpl_core.utils import String - - -class Console(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_file.py b/src/cpl_cli/.cpl/project_file.py deleted file mode 100644 index 0ef75d52..00000000 --- a/src/cpl_cli/.cpl/project_file.py +++ /dev/null @@ -1,13 +0,0 @@ -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 deleted file mode 100644 index cea4eb14..00000000 --- a/src/cpl_cli/.cpl/project_file_appsettings.py +++ /dev/null @@ -1,29 +0,0 @@ -import textwrap - -from cpl_cli.abc.file_template_abc import FileTemplateABC - - -class ProjectFileAppsettings(FileTemplateABC): - def __init__(self, path: str): - FileTemplateABC.__init__(self, "", path, "{}") - self._name = "appsettings.json" - - def get_code(self) -> str: - return 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" - } - } - """ - ) diff --git a/src/cpl_cli/.cpl/project_file_code_application.py b/src/cpl_cli/.cpl/project_file_code_application.py deleted file mode 100644 index d3324dde..00000000 --- a/src/cpl_cli/.cpl/project_file_code_application.py +++ /dev/null @@ -1,56 +0,0 @@ -from cpl_cli.abc.code_file_template_abc import CodeFileTemplateABC - - -class ProjectFileApplication(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( - """\ - 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') - """ - ) - - return 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') - """ - ) diff --git a/src/cpl_cli/.cpl/project_file_code_main.py b/src/cpl_cli/.cpl/project_file_code_main.py deleted file mode 100644 index 1c544083..00000000 --- a/src/cpl_cli/.cpl/project_file_code_main.py +++ /dev/null @@ -1,107 +0,0 @@ -from cpl_cli.abc.code_file_template_abc import CodeFileTemplateABC -from cpl_core.utils import String - - -class ProjectFileMain(CodeFileTemplateABC): - 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"{String.convert_to_snake_case(name)}." - - self._main_with_application_host_and_startup = textwrap.dedent( - f"""\ - {"import asyncio" if self._use_async else ''} - - from cpl_core.application import ApplicationBuilder - - from {import_pkg}application import Application - from {import_pkg}startup import Startup - - - {self._async()}def main(): - app_builder = ApplicationBuilder(Application) - app_builder.use_startup(Startup) - {"app: Application = await app_builder.build_async()" if self._use_async else ""} - {"await app.run_async()" if self._use_async else "app_builder.build().run()"} - - - if __name__ == '__main__': - {"asyncio.run(main())" if self._use_async else "main()"} - """ - ) - self._main_with_application_base = textwrap.dedent( - f"""\ - {"import asyncio" if self._use_async else ''} - - from cpl_core.application import ApplicationBuilder - - from {import_pkg}application import Application - - - {self._async()}def main(): - app_builder = ApplicationBuilder(Application) - {"app: Application = await app_builder.build_async()" if self._use_async else ""} - {"await app.run_async()" if self._use_async else "app_builder.build().run()"} - - - if __name__ == '__main__': - {"asyncio.run(main())" if self._use_async else "main()"} - """ - ) - - self._main_with_dependency_injection = textwrap.dedent( - f"""\ - {"import asyncio" if self._use_async else ''} - - from cpl_core.application import ApplicationBuilder - - - {self._async()}def configure_configuration() -> ConfigurationABC: - config = Configuration() - return config - - - {self._async()}def configure_services(config: ConfigurationABC) -> ServiceProviderABC: - services = ServiceCollection(config) - return services.build_service_provider() - - - {self._async()}def main(): - config = {self._async()}configure_configuration() - provider = {self._async()}configure_services(config) - Console.write_line('Hello World') - - - if __name__ == '__main__': - {"asyncio.run(main())" if self._use_async else "main()"} - """ - ) - - def _async(self) -> str: - if self._use_async: - return "async " - return "" - - def get_code(self) -> str: - if self._use_application_api and self._use_startup: - return self._main_with_application_host_and_startup - - if self._use_application_api: - return self._main_with_application_base - - if self._use_service_providing: - return self._main_with_dependency_injection - - return self._main_with_application_base diff --git a/src/cpl_cli/.cpl/project_file_code_startup.py b/src/cpl_cli/.cpl/project_file_code_startup.py deleted file mode 100644 index 5277d616..00000000 --- a/src/cpl_cli/.cpl/project_file_code_startup.py +++ /dev/null @@ -1,34 +0,0 @@ -from cpl_cli.abc.code_file_template_abc import CodeFileTemplateABC - - -class ProjectFileStartup(CodeFileTemplateABC): - def __init__( - self, path: str, use_application_api: bool, use_startup: bool, use_service_providing: bool, use_async: bool - ): - CodeFileTemplateABC.__init__( - self, "startup", path, "", use_application_api, use_startup, use_service_providing, use_async - ) - - def get_code(self) -> str: - import textwrap - - return 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() - """ - ) diff --git a/src/cpl_cli/.cpl/project_file_code_test_application.py b/src/cpl_cli/.cpl/project_file_code_test_application.py deleted file mode 100644 index aa1ccbde..00000000 --- a/src/cpl_cli/.cpl/project_file_code_test_application.py +++ /dev/null @@ -1,66 +0,0 @@ -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 deleted file mode 100644 index 88cf4ce9..00000000 --- a/src/cpl_cli/.cpl/project_file_code_test_case.py +++ /dev/null @@ -1,44 +0,0 @@ -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_file_license.py b/src/cpl_cli/.cpl/project_file_license.py deleted file mode 100644 index c145e846..00000000 --- a/src/cpl_cli/.cpl/project_file_license.py +++ /dev/null @@ -1,10 +0,0 @@ -from cpl_cli.abc.file_template_abc import FileTemplateABC - - -class ProjectFileLicense(FileTemplateABC): - def __init__(self, path: str): - FileTemplateABC.__init__(self, "", path, "") - self._name = "LICENSE" - - def get_code(self) -> str: - return self._code diff --git a/src/cpl_cli/.cpl/project_file_readme.py b/src/cpl_cli/.cpl/project_file_readme.py deleted file mode 100644 index f5ef9714..00000000 --- a/src/cpl_cli/.cpl/project_file_readme.py +++ /dev/null @@ -1,10 +0,0 @@ -from cpl_cli.abc.file_template_abc import FileTemplateABC - - -class ProjectFileReadme(FileTemplateABC): - def __init__(self, path: str): - FileTemplateABC.__init__(self, "", path, "") - self._name = "README.md" - - def get_code(self) -> str: - return self._code diff --git a/src/cpl_cli/.cpl/project_library.py b/src/cpl_cli/.cpl/project_library.py deleted file mode 100644 index 9774bea1..00000000 --- a/src/cpl_cli/.cpl/project_library.py +++ /dev/null @@ -1,46 +0,0 @@ -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_readme import ProjectFileReadme - from project_file_license import ProjectFileLicense - from schematic_init import Init - from schematic_class import Class - - 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", project_path)) - self.add_template(Class("Class1", "class", project_path)) diff --git a/src/cpl_cli/.cpl/project_unittest.py b/src/cpl_cli/.cpl/project_unittest.py deleted file mode 100644 index 059e1864..00000000 --- a/src/cpl_cli/.cpl/project_unittest.py +++ /dev/null @@ -1,64 +0,0 @@ -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 deleted file mode 100644 index dfcfc251..00000000 --- a/src/cpl_cli/.cpl/schematic_abc.py +++ /dev/null @@ -1,27 +0,0 @@ -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC -from cpl_core.utils import String - - -class ABC(GenerateSchematicABC): - def __init__(self, name: str, schematic: str, path: str): - GenerateSchematicABC.__init__(self, name, schematic, path) - self._class_name = name - if name != "": - self._class_name = f'{String.first_to_upper(name.replace(schematic, ""))}ABC' - - def get_code(self) -> str: - code = """\ - from abc import ABC, abstractmethod - - - class $Name(ABC): - - @abstractmethod - def __init__(self): pass - """ - x = self.build_code_str(code, Name=self._class_name) - return x - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "abc", ["a", "A"]) diff --git a/src/cpl_cli/.cpl/schematic_application.py b/src/cpl_cli/.cpl/schematic_application.py deleted file mode 100644 index a3cfe18c..00000000 --- a/src/cpl_cli/.cpl/schematic_application.py +++ /dev/null @@ -1,34 +0,0 @@ -import textwrap - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC - - -class Application(GenerateSchematicABC): - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - - def get_code(self) -> str: - code = """\ - 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 $Name(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') - """ - x = self.build_code_str(code, Name=self._class_name) - return x - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "application", ["app", "APP"]) diff --git a/src/cpl_cli/.cpl/schematic_application_extension.py b/src/cpl_cli/.cpl/schematic_application_extension.py deleted file mode 100644 index bb0a58b7..00000000 --- a/src/cpl_cli/.cpl/schematic_application_extension.py +++ /dev/null @@ -1,31 +0,0 @@ -import textwrap - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC -from cpl_core.utils import String - - -class ApplicationExtension(GenerateSchematicABC): - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - - def get_code(self) -> str: - code = """\ - from cpl_core.application import ApplicationExtensionABC - from cpl_core.configuration import ConfigurationABC - from cpl_core.dependency_injection import ServiceProviderABC - - - class $Name(ApplicationExtensionABC): - - def __init__(self): - ApplicationExtensionABC.__init__(self) - - def run(self, config: ConfigurationABC, services: ServiceProviderABC): - pass - """ - x = self.build_code_str(code, Name=String.convert_to_camel_case(self._class_name)) - return x - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "application-extension", ["appex", "APPEX"]) diff --git a/src/cpl_cli/.cpl/schematic_class.py b/src/cpl_cli/.cpl/schematic_class.py deleted file mode 100644 index ff6f9148..00000000 --- a/src/cpl_cli/.cpl/schematic_class.py +++ /dev/null @@ -1,23 +0,0 @@ -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC -from cpl_core.utils import String - - -class Class(GenerateSchematicABC): - def __init__(self, name: str, schematic: str, path: str): - GenerateSchematicABC.__init__(self, name, schematic, path) - self._name = f"{String.convert_to_snake_case(name)}.py" - self._class_name = f"{String.first_to_upper(name)}" - - def get_code(self) -> str: - code = """\ - class $Name: - - def __init__(self): - pass - """ - x = self.build_code_str(code, Name=self._class_name) - return x - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "class", ["c", "C"]) diff --git a/src/cpl_cli/.cpl/schematic_configmodel.py b/src/cpl_cli/.cpl/schematic_configmodel.py deleted file mode 100644 index f03978a3..00000000 --- a/src/cpl_cli/.cpl/schematic_configmodel.py +++ /dev/null @@ -1,35 +0,0 @@ -import textwrap - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC - - -class ConfigModel(GenerateSchematicABC): - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - - def get_code(self) -> str: - code = """\ - import traceback - - from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC - from cpl_core.console import Console - - - class $Name(ConfigurationModelABC): - - def __init__(self, atr: str = None): - ConfigurationModelABC.__init__(self) - - self._atr = atr - - @property - def atr(self) -> str: - return self._atr - - """ - x = self.build_code_str(code, Name=self._class_name) - return x - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "settings", ["st", "ST"]) diff --git a/src/cpl_cli/.cpl/schematic_enum.py b/src/cpl_cli/.cpl/schematic_enum.py deleted file mode 100644 index 81f14c55..00000000 --- a/src/cpl_cli/.cpl/schematic_enum.py +++ /dev/null @@ -1,25 +0,0 @@ -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC - - -class Enum(GenerateSchematicABC): - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - - def get_code(self) -> str: - import textwrap - - code = textwrap.dedent( - """\ - from enum import Enum - - - class $Name(Enum): - - atr = 0 - """ - ) - return self.build_code_str(code, Name=self._class_name) - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "enum", ["e", "E"]) diff --git a/src/cpl_cli/.cpl/schematic_init.py b/src/cpl_cli/.cpl/schematic_init.py deleted file mode 100644 index 2a79af6c..00000000 --- a/src/cpl_cli/.cpl/schematic_init.py +++ /dev/null @@ -1,20 +0,0 @@ -import textwrap - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC - - -class Init(GenerateSchematicABC): - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - self._name = f"__init__.py" - - def get_code(self) -> str: - code = """\ - # imports - """ - x = self.build_code_str(code, Name=self._class_name) - return x - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "init", []) diff --git a/src/cpl_cli/.cpl/schematic_pipe.py b/src/cpl_cli/.cpl/schematic_pipe.py deleted file mode 100644 index 8e19bdda..00000000 --- a/src/cpl_cli/.cpl/schematic_pipe.py +++ /dev/null @@ -1,27 +0,0 @@ -import textwrap - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC - - -class Pipe(GenerateSchematicABC): - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - - def get_code(self) -> str: - code = """\ - from cpl_core.pipes.pipe_abc import PipeABC - - - class $Name(PipeABC): - - def __init__(self): pass - - def transform(self, value: any, *args): - return value - """ - x = self.build_code_str(code, Name=self._class_name) - return x - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "pipe", ["p", "P"]) diff --git a/src/cpl_cli/.cpl/schematic_schematic.py b/src/cpl_cli/.cpl/schematic_schematic.py deleted file mode 100644 index 3570a969..00000000 --- a/src/cpl_cli/.cpl/schematic_schematic.py +++ /dev/null @@ -1,46 +0,0 @@ -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC -from cpl_core.utils import String - - -class Schematic(GenerateSchematicABC): - def __init__(self, name: str, path: str, schematic: str): - GenerateSchematicABC.__init__(self, name, path, schematic) - self._name = f"schematic_{String.convert_to_snake_case(name)}.py" - self._path = ".cpl/" - self._class_name = String.convert_to_camel_case(name) - - def get_code(self) -> str: - code = """\ - from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC - - - class $Name(GenerateSchematicABC): - - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - - def get_code(self) -> str: - import textwrap - code = textwrap.dedent(\"\"\"\\ - from enum import Enum - - - class $Name(Enum): - - atr = 0 - \"\"\") - return self.build_code_str(code, Name=self._class_name) - - @classmethod - def register(cls): - GenerateSchematicABC.register( - cls, - '$NameLower', - [] - ) - """ - return self.build_code_str(code, Name=self._class_name, NameLower=self._class_name.lower()) - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "schematic", ["scheme", "SCHEME"]) diff --git a/src/cpl_cli/.cpl/schematic_service.py b/src/cpl_cli/.cpl/schematic_service.py deleted file mode 100644 index f78ffb5c..00000000 --- a/src/cpl_cli/.cpl/schematic_service.py +++ /dev/null @@ -1,22 +0,0 @@ -import textwrap - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC - - -class Service(GenerateSchematicABC): - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - - def get_code(self) -> str: - code = """\ - class $Name: - - def __init__(self): - pass - """ - x = self.build_code_str(code, Name=self._class_name) - return x - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "service", ["s", "S"]) diff --git a/src/cpl_cli/.cpl/schematic_startup.py b/src/cpl_cli/.cpl/schematic_startup.py deleted file mode 100644 index 47d2ef74..00000000 --- a/src/cpl_cli/.cpl/schematic_startup.py +++ /dev/null @@ -1,34 +0,0 @@ -import textwrap - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC - - -class Startup(GenerateSchematicABC): - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - - def get_code(self) -> str: - code = """\ - 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 $Name(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() - """ - x = self.build_code_str(code, Name=self._class_name) - return x - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "startup", ["stup", "STUP"]) diff --git a/src/cpl_cli/.cpl/schematic_startup_extension.py b/src/cpl_cli/.cpl/schematic_startup_extension.py deleted file mode 100644 index 09455e78..00000000 --- a/src/cpl_cli/.cpl/schematic_startup_extension.py +++ /dev/null @@ -1,35 +0,0 @@ -import textwrap - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC -from cpl_core.utils import String - - -class StartupExtension(GenerateSchematicABC): - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - - def get_code(self) -> str: - code = """\ - from cpl_core.application.startup_extension_abc import StartupExtensionABC - from cpl_core.configuration.configuration_abc import ConfigurationABC - from cpl_core.dependency_injection.service_collection_abc import ServiceCollectionABC - from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC - - - class $Name(StartupExtensionABC): - - def __init__(self): - pass - - def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): - pass - - def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC): - pass - """ - x = self.build_code_str(code, Name=String.convert_to_camel_case(self._class_name)) - return x - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "startup-extension", ["stupex", "STUPEX"]) diff --git a/src/cpl_cli/.cpl/schematic_test_case.py b/src/cpl_cli/.cpl/schematic_test_case.py deleted file mode 100644 index cc6395e6..00000000 --- a/src/cpl_cli/.cpl/schematic_test_case.py +++ /dev/null @@ -1,28 +0,0 @@ -import textwrap - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC -from cpl_core.utils import String - - -class TestCase(GenerateSchematicABC): - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - - def get_code(self) -> str: - code = """\ - import unittest - - - class $Name(unittest.TestCase): - - def setUp(self): - pass - - def test_equal(self): - pass - """ - return self.build_code_str(code, Name=String.convert_to_camel_case(self._class_name)) - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "test-case", ["tc", "TC"]) diff --git a/src/cpl_cli/.cpl/schematic_thread.py b/src/cpl_cli/.cpl/schematic_thread.py deleted file mode 100644 index 914b2615..00000000 --- a/src/cpl_cli/.cpl/schematic_thread.py +++ /dev/null @@ -1,28 +0,0 @@ -import textwrap - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC - - -class Thread(GenerateSchematicABC): - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - - def get_code(self) -> str: - code = """\ - import threading - - - class $Name(threading.Thread): - - def __init__(self): - threading.Thread.__init__(self) - - def run(self) -> None: - pass - """ - x = self.build_code_str(code, Name=self._class_name) - return x - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "thread", ["t", "T"]) diff --git a/src/cpl_cli/.cpl/schematic_validator.py b/src/cpl_cli/.cpl/schematic_validator.py deleted file mode 100644 index b99790d2..00000000 --- a/src/cpl_cli/.cpl/schematic_validator.py +++ /dev/null @@ -1,28 +0,0 @@ -import textwrap - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC - - -class Validator(GenerateSchematicABC): - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - - def get_code(self) -> str: - code = """\ - from cpl_core.configuration.validator_abc import ValidatorABC - - - class $Name(ValidatorABC): - - def __init__(self): - ValidatorABC.__init__(self) - - def validate(self) -> bool: - return True - """ - x = self.build_code_str(code, Name=self._class_name) - return x - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "validator", ["v", "V"]) diff --git a/src/cpl_cli/__init__.py b/src/cpl_cli/__init__.py deleted file mode 100644 index 4333080a..00000000 --- a/src/cpl_cli/__init__.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports: -from .cli import CLI -from .command_abc import CommandABC -from .error import Error -from .main import main -from .startup import Startup - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/_templates/__init__.py b/src/cpl_cli/_templates/__init__.py deleted file mode 100644 index 1641e9f8..00000000 --- a/src/cpl_cli/_templates/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli._templates" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/_templates/build/__init__.py b/src/cpl_cli/_templates/build/__init__.py deleted file mode 100644 index cb014c59..00000000 --- a/src/cpl_cli/_templates/build/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli._templates.build" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/_templates/build/init_template.py b/src/cpl_cli/_templates/build/init_template.py deleted file mode 100644 index 7cd24ca7..00000000 --- a/src/cpl_cli/_templates/build/init_template.py +++ /dev/null @@ -1,38 +0,0 @@ -import textwrap - - -class InitTemplate: - @staticmethod - def get_init_py() -> str: - string = textwrap.dedent( - """\ - # -*- coding: utf-8 -*- - - \"\"\" - $Name $Description - ~~~~~~~~~~~~~~~~~~~ - - $LongDescription - - :copyright: (c) $CopyrightDate $CopyrightName - :license: $LicenseDescription - - \"\"\" - - __title__ = "$Title" - __author__ = "$Author" - __license__ = "$LicenseName" - __copyright__ = "Copyright (c) $CopyrightDate $CopyrightName" - __version__ = "$Version" - - from collections import namedtuple - - - $Imports - - VersionInfo = namedtuple("VersionInfo", "major minor micro") - version_info = VersionInfo(major="$Major", minor="$Minor", micro="$Micro") - """ - ) - - return string diff --git a/src/cpl_cli/_templates/publish/__init__.py b/src/cpl_cli/_templates/publish/__init__.py deleted file mode 100644 index 1a4155df..00000000 --- a/src/cpl_cli/_templates/publish/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli._templates.publish" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/_templates/publish/setup_template.py b/src/cpl_cli/_templates/publish/setup_template.py deleted file mode 100644 index 63049f0c..00000000 --- a/src/cpl_cli/_templates/publish/setup_template.py +++ /dev/null @@ -1,33 +0,0 @@ -import textwrap - - -class SetupTemplate: - @staticmethod - def get_setup_py() -> str: - string = textwrap.dedent( - """\ - \"\"\" - This file is generated by CPL CLI - \"\"\" - - import setuptools - - setuptools.setup( - name='$Name', - version='$Version', - packages=$Packages, - url='$URL', - license='$LicenseName', - author='$Author', - author_email='$AuthorMail', - include_package_data=$IncludePackageData, - description='$Description', - python_requires='$PyRequires', - install_requires=$Dependencies, - entry_points=$EntryPoints, - package_data=$PackageData - ) - """ - ) - - return string diff --git a/src/cpl_cli/_templates/template_file_abc.py b/src/cpl_cli/_templates/template_file_abc.py deleted file mode 100644 index a7e0e6e7..00000000 --- a/src/cpl_cli/_templates/template_file_abc.py +++ /dev/null @@ -1,22 +0,0 @@ -from abc import ABC, abstractmethod - - -class TemplateFileABC(ABC): - @abstractmethod - def __init__(self): - pass - - @property - @abstractmethod - def name(self) -> str: - pass - - @property - @abstractmethod - def path(self) -> str: - pass - - @property - @abstractmethod - def value(self) -> str: - pass diff --git a/src/cpl_cli/abc/__init__.py b/src/cpl_cli/abc/__init__.py deleted file mode 100644 index d42b0233..00000000 --- a/src/cpl_cli/abc/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli.abc" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/abc/code_file_template_abc.py b/src/cpl_cli/abc/code_file_template_abc.py deleted file mode 100644 index abd1fefa..00000000 --- a/src/cpl_cli/abc/code_file_template_abc.py +++ /dev/null @@ -1,23 +0,0 @@ -from abc import ABC, abstractmethod - -from cpl_cli.abc.file_template_abc import FileTemplateABC -from cpl_core.utils import String - - -class CodeFileTemplateABC(FileTemplateABC): - @abstractmethod - def __init__( - self, - name: str, - path: str, - code: str, - use_application_api: bool, - use_startup: bool, - use_service_providing: bool, - use_async: bool, - ): - FileTemplateABC.__init__(self, name, path, code) - self._use_application_api = use_application_api - self._use_startup = use_startup - self._use_service_providing = use_service_providing - self._use_async = use_async diff --git a/src/cpl_cli/abc/file_template_abc.py b/src/cpl_cli/abc/file_template_abc.py deleted file mode 100644 index 99425f00..00000000 --- a/src/cpl_cli/abc/file_template_abc.py +++ /dev/null @@ -1,34 +0,0 @@ -from abc import ABC, abstractmethod - -from cpl_core.utils import String - - -class FileTemplateABC(ABC): - @abstractmethod - def __init__(self, name: str, path: str, code: str): - self._name = f"{String.convert_to_snake_case(name)}.py" - self._path = path - self._code = code - - def __repr__(self): - return f"<{type(self).__name__} {self._path}{self._name}>" - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @path.setter - def path(self, value: str): - self._path = value - - @property - def value(self) -> str: - return self.get_code() - - @abstractmethod - def get_code(self) -> str: - pass diff --git a/src/cpl_cli/abc/generate_schematic_abc.py b/src/cpl_cli/abc/generate_schematic_abc.py deleted file mode 100644 index 7b79f441..00000000 --- a/src/cpl_cli/abc/generate_schematic_abc.py +++ /dev/null @@ -1,40 +0,0 @@ -import textwrap -from abc import abstractmethod -from string import Template - -from cpl_cli.abc.file_template_abc import FileTemplateABC -from cpl_cli.configuration.schematic_collection import SchematicCollection -from cpl_core.utils import String - - -class GenerateSchematicABC(FileTemplateABC): - def __init__(self, name: str, schematic: str, path: str): - FileTemplateABC.__init__(self, name, path, "") - self._name = f"{String.convert_to_snake_case(name)}_{schematic}.py" - if schematic in name.lower(): - self._name = f"{String.convert_to_snake_case(name)}.py" - - self._class_name = name - if name != "": - self._class_name = f"{String.first_to_upper(name)}{String.first_to_upper(schematic)}" - - if schematic in name.lower(): - self._class_name = f"{String.first_to_upper(name)}" - - @property - def class_name(self) -> str: - return self._class_name - - @abstractmethod - def get_code(self) -> str: - pass - - @classmethod - def build_code_str(cls, code: str, **kwargs) -> str: - text = textwrap.dedent(code) - return Template(text).substitute(**kwargs) - - @classmethod - @abstractmethod - def register(cls, *args): - SchematicCollection.register(*args) diff --git a/src/cpl_cli/abc/project_type_abc.py b/src/cpl_cli/abc/project_type_abc.py deleted file mode 100644 index caf72db5..00000000 --- a/src/cpl_cli/abc/project_type_abc.py +++ /dev/null @@ -1,36 +0,0 @@ -from abc import ABC, abstractmethod -from typing import Optional - -from cpl_cli.abc.file_template_abc import FileTemplateABC -from cpl_cli.configuration import WorkspaceSettings - - -class ProjectTypeABC(ABC): - @abstractmethod - def __init__( - self, - base_path: str, - project_name: str, - workspace: Optional[WorkspaceSettings], - use_application_api: bool, - use_startup: bool, - use_service_providing: bool, - use_async: bool, - project_file_data: dict, - ): - self._templates: list[FileTemplateABC] = [] - self._base_path = base_path - self._project_name = project_name - self._workspace = workspace - self._use_application_api = use_application_api - 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]: - return self._templates - - def add_template(self, t: FileTemplateABC): - self._templates.append(t) diff --git a/src/cpl_cli/appsettings.json b/src/cpl_cli/appsettings.json deleted file mode 100644 index f4dbfbf1..00000000 --- a/src/cpl_cli/appsettings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "CLI": { - "PipPath": "https://pip.sh-edraft.de" - } -} \ No newline at end of file diff --git a/src/cpl_cli/cli.py b/src/cpl_cli/cli.py deleted file mode 100644 index 8428f4aa..00000000 --- a/src/cpl_cli/cli.py +++ /dev/null @@ -1,46 +0,0 @@ -import sys -import traceback - -from cpl_cli.error import Error -from cpl_core.application.application_abc import ApplicationABC -from cpl_core.configuration.configuration_abc import ConfigurationABC -from cpl_core.console.console import Console -from cpl_core.dependency_injection.service_provider_abc import ServiceProviderABC - - -class CLI(ApplicationABC): - def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): - """ - CPL CLI - """ - ApplicationABC.__init__(self, config, services) - - self._options: list[str] = [] - - def configure(self): - pass - - def main(self): - """ - Entry point of the CPL CLI - :return: - """ - try: - result = self._configuration.parse_console_arguments(self._services) - if result: - Console.write_line() - return - - if len(self._configuration.additional_arguments) == 0: - Error.error("Expected command") - return - - unexpected_arguments = ", ".join(self._configuration.additional_arguments) - Error.error(f"Unexpected argument(s): {unexpected_arguments}") - Console.write_line() - except KeyboardInterrupt: - Console.write_line() - sys.exit() - except Exception as e: - Console.error(str(e), traceback.format_exc()) - sys.exit() diff --git a/src/cpl_cli/cli_settings.py b/src/cpl_cli/cli_settings.py deleted file mode 100644 index a60e59ee..00000000 --- a/src/cpl_cli/cli_settings.py +++ /dev/null @@ -1,14 +0,0 @@ -from typing import Optional - -from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC - - -class CLISettings(ConfigurationModelABC): - def __init__(self, pip_path: str = None): - ConfigurationModelABC.__init__(self) - - self._pip_path: Optional[str] = pip_path - - @property - def pip_path(self) -> str: - return self._pip_path diff --git a/src/cpl_cli/cli_settings_name_enum.py b/src/cpl_cli/cli_settings_name_enum.py deleted file mode 100644 index 06e024ad..00000000 --- a/src/cpl_cli/cli_settings_name_enum.py +++ /dev/null @@ -1,5 +0,0 @@ -from enum import Enum - - -class CLISettingsNameEnum(Enum): - pip_path = "PipPath" diff --git a/src/cpl_cli/command/__init__.py b/src/cpl_cli/command/__init__.py deleted file mode 100644 index 3bde029f..00000000 --- a/src/cpl_cli/command/__init__.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli.command" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports: -from .build_service import BuildService -from .generate_service import GenerateService -from .help_service import HelpService -from .new_service import NewService -from .publish_service import PublishService -from .version_service import VersionService - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/command/add_service.py b/src/cpl_cli/command/add_service.py deleted file mode 100644 index 772a64dc..00000000 --- a/src/cpl_cli/command/add_service.py +++ /dev/null @@ -1,138 +0,0 @@ -import json -import os -import textwrap -from typing import Optional - -from cpl_cli.command_abc import CommandABC -from cpl_cli.configuration.build_settings import BuildSettings -from cpl_cli.configuration.project_settings import ProjectSettings -from cpl_cli.configuration.settings_helper import SettingsHelper -from cpl_cli.configuration.workspace_settings import WorkspaceSettings -from cpl_core.configuration.configuration_abc import ConfigurationABC -from cpl_core.console.console import Console -from cpl_core.console.foreground_color_enum import ForegroundColorEnum - - -class AddService(CommandABC): - def __init__(self, config: ConfigurationABC, workspace: WorkspaceSettings): - """ - Service for CLI command add - """ - CommandABC.__init__(self) - - self._config = config - self._workspace = workspace - self._is_simulation = False - - @property - def help_message(self) -> str: - return textwrap.dedent( - """\ - Adds a project reference to given project. - Usage: cpl add - - Arguments: - source-project: Name of the project to which the reference has to be - target-project: Name of the project to be referenced - """ - ) - - def _edit_project_file(self, source: str, project_settings: ProjectSettings, build_settings: BuildSettings): - if self._is_simulation: - return - with open(source, "w") as file: - file.write( - json.dumps( - { - ProjectSettings.__name__: SettingsHelper.get_project_settings_dict(project_settings), - BuildSettings.__name__: SettingsHelper.get_build_settings_dict(build_settings), - }, - indent=2, - ) - ) - file.close() - - def execute(self, args: list[str]): - """ - Entry point of command - :param args: - :return: - """ - if "simulate" in args: - args.remove("simulate") - Console.write_line("Running in simulation mode:") - self._is_simulation = True - - if len(args) == 0: - Console.error("Expected source and target project") - return - - elif len(args) == 1: - Console.error("Expected target project") - return - - elif len(args) > 2: - Console.error(f'Unexpected argument(s): {", ".join(args[2:])}') - return - - # file names - source = args[0] - target = args[1] - # validation flags - is_invalid_source = False - is_invalid_target = source == target - - if not is_invalid_target: - if self._workspace is None: - is_invalid_source = not os.path.isfile(source) - is_invalid_target = not os.path.isfile(target) - - else: - if source not in self._workspace.projects: - is_invalid_source = True - - else: - source = self._workspace.projects[source] - - if target not in self._workspace.projects: - is_invalid_target = True - - else: - target = self._workspace.projects[target] - - # load project-name.json - self._config.add_json_file(source, optional=True, output=False) - project_settings: Optional[ProjectSettings] = self._config.get_configuration(ProjectSettings) - build_settings: Optional[BuildSettings] = self._config.get_configuration(BuildSettings) - - if project_settings is None or build_settings is None: - is_invalid_source = True - - if is_invalid_source: - Console.error(f"Invalid source: {source}") - return - - if is_invalid_target or source == target or not os.path.isfile(target): - Console.error(f"Invalid target: {target}") - return - - if self._workspace is None: - target = f"../{target}" - else: - target = target.replace("src", "..") - - if target in build_settings.project_references: - Console.error(f"Project reference already exists.") - return - - build_settings.project_references.append(target) - - Console.spinner( - f"Editing {source}", - self._edit_project_file, - source, - project_settings, - build_settings, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) diff --git a/src/cpl_cli/command/build_service.py b/src/cpl_cli/command/build_service.py deleted file mode 100644 index 3286732e..00000000 --- a/src/cpl_cli/command/build_service.py +++ /dev/null @@ -1,32 +0,0 @@ -import textwrap - -from cpl_cli.command_abc import CommandABC -from cpl_cli.publish.publisher_abc import PublisherABC - - -class BuildService(CommandABC): - def __init__(self, publisher: PublisherABC): - """ - Service for the CLI command build - :param publisher: - """ - CommandABC.__init__(self) - - self._publisher = publisher - - @property - def help_message(self) -> str: - return textwrap.dedent( - """\ - Copies an python app into an output directory named build/ at the given output path. Must be executed within a CPL workspace or project directory - Usage: cpl build - """ - ) - - def execute(self, args: list[str]): - """ - Entry point of command - :param args: - :return: - """ - self._publisher.build() diff --git a/src/cpl_cli/command/custom_script_service.py b/src/cpl_cli/command/custom_script_service.py deleted file mode 100644 index 29578713..00000000 --- a/src/cpl_cli/command/custom_script_service.py +++ /dev/null @@ -1,49 +0,0 @@ -import os -import subprocess - -from cpl_core.environment import ApplicationEnvironmentABC - -from cpl_core.configuration.configuration_abc import ConfigurationABC -from cpl_core.console.console import Console -from cpl_cli.command_abc import CommandABC -from cpl_cli.configuration.workspace_settings import WorkspaceSettings - - -class CustomScriptService(CommandABC): - def __init__(self, config: ConfigurationABC, env: ApplicationEnvironmentABC, ws: WorkspaceSettings): - """ - Service for CLI scripts - """ - CommandABC.__init__(self) - - self._config = config - self._env = env - self._workspace = ws - - @property - def help_message(self) -> str: - return "" - - def execute(self, args: list[str]): - cmd = self._config.get_configuration("ACTIVE_EXECUTABLE") - wd = self._config.get_configuration("PATH_WORKSPACE") - if wd is not None: - self._env.set_working_directory(wd) - - for script in self._workspace.scripts: - if script != cmd: - continue - - command = "" - external_args = self._config.get_configuration("ARGS") - if external_args is not None: - command += f'ARGS="{external_args}";' - - command += self._workspace.scripts[script] - env_vars = os.environ - env_vars["CPL_ARGS"] = " ".join(args) - - try: - subprocess.run(command, shell=True if os.name == "posix" else None) - except Exception as e: - Console.error(str(e)) diff --git a/src/cpl_cli/command/generate_service.py b/src/cpl_cli/command/generate_service.py deleted file mode 100644 index bdd5c92f..00000000 --- a/src/cpl_cli/command/generate_service.py +++ /dev/null @@ -1,223 +0,0 @@ -import importlib -import os -import sys -import textwrap -import traceback - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC -from cpl_cli.command_abc import CommandABC -from cpl_cli.configuration import WorkspaceSettings -from cpl_cli.configuration.schematic_collection import SchematicCollection -from cpl_cli.helper.dependencies import Dependencies -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 GenerateService(CommandABC): - def __init__( - self, - configuration: ConfigurationABC, - workspace: WorkspaceSettings, - ): - """ - Service for the CLI command generate - :param configuration: - """ - CommandABC.__init__(self) - - self._config = configuration - self._workspace = workspace - - self._config = configuration - self._env = self._config.environment - self._schematics = {} - self._schematic_classes = set() - - for package_name, version in Dependencies.get_cpl_packages(): - if package_name == "cpl-cli": - continue - package = importlib.import_module(String.convert_to_snake_case(package_name)) - self._read_custom_schematics_from_path(os.path.dirname(package.__file__)) - - self._read_custom_schematics_from_path(self._env.working_directory) - self._read_custom_schematics_from_path(self._env.runtime_directory) - - if len(self._schematic_classes) == 0: - Console.error(f"No schematics found in template directory: .cpl") - sys.exit() - - known_schematics = [] - for schematic in self._schematic_classes: - known_schematics.append(schematic.__name__) - schematic.register() - - self._schematics = SchematicCollection.get_schematics() - - @property - def help_message(self) -> str: - schematics = [] - for schematic in self._schematics: - aliases = "|".join(self._schematics[schematic]["Aliases"]) - schematic_str = schematic - if len(aliases) > 0: - schematic_str = f"{schematic} ({aliases})" - - schematics.append(schematic_str) - help_msg = textwrap.dedent( - """\ - Generate a file based on schematic. - Usage: cpl generate - - Arguments: - schematic: The schematic to generate. - name: The name of the generated file - - Schematics:""" - ) - - for schematic in schematics: - help_msg += f"\n {schematic}" - return help_msg - - def _read_custom_schematics_from_path(self, path: str): - 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_") or not file.endswith(".py"): - continue - - try: - exec(open(os.path.join(r, file), "r").read()) - self._schematic_classes.update(GenerateSchematicABC.__subclasses__()) - except Exception as e: - Console.error(str(e), traceback.format_exc()) - sys.exit(-1) - - @staticmethod - def _create_file(file_path: str, value: str): - """ - Creates the given file with content - :param file_path: - :param value: - :return: - """ - with open(file_path, "w") as template: - template.write(value) - template.close() - - def _create_init_files( - self, file_path: str, template: GenerateSchematicABC, class_name: str, schematic: str, rel_path: str - ): - if not os.path.isdir(os.path.dirname(file_path)): - os.makedirs(os.path.dirname(file_path)) - directory = "" - for subdir in template.path.split("/"): - directory = os.path.join(directory, subdir) - if subdir == "src": - continue - - file = self._schematics["init"]["Template"](class_name, "init", rel_path) - if os.path.exists(os.path.join(os.path.abspath(directory), file.name)): - continue - - Console.spinner( - f"Creating {os.path.abspath(directory)}/{file.name}", - self._create_file, - os.path.join(os.path.abspath(directory), file.name), - file.get_code(), - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) - - def _generate(self, schematic: str, name: str, template: type): - """ - Generates files by given schematic, name and template - :param schematic: - :param name: - :param template: - :return: - """ - class_name = name - rel_path = "" - if "/" in name: - parts = name.split("/") - rel_path = "/".join(parts[:-1]) - class_name = parts[len(parts) - 1] - - if self._workspace is not None and parts[0] in self._workspace.projects: - rel_path = os.path.join(os.path.dirname(self._workspace.projects[parts[0]]), *parts[1:-1]) - - template = template(class_name, String.convert_to_snake_case(schematic), rel_path) - - file_path = os.path.join(self._env.working_directory, template.path, template.name) - self._create_init_files(file_path, template, class_name, schematic, rel_path) - - if os.path.isfile(file_path): - Console.error(f"{String.first_to_upper(schematic)} already exists!\n") - sys.exit() - - message = f"Creating {self._env.working_directory}/{template.path}/{template.name}" - if template.path == "": - message = f"Creating {self._env.working_directory}/{template.name}" - - Console.spinner( - message, - self._create_file, - file_path, - template.get_code(), - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) - - def _get_schematic_by_alias(self, schematic: str) -> str: - for key in self._schematics: - if schematic in self._schematics[key]["Aliases"]: - return key - - return schematic - - def execute(self, args: list[str]): - """ - Entry point of command - :param args: - :return: - """ - schematic = None - value = None - for s in self._schematics: - value = self._config.get_configuration(s) - if value is not None: - schematic = s - break - - if ( - schematic is None - and len(args) >= 1 - and (args[0] in self._schematics or self._get_schematic_by_alias(args[0]) != args[0]) - ): - schematic = self._get_schematic_by_alias(args[0]) - self._config.add_configuration(schematic, args[1]) - value = args[1] - - if schematic is None: - Console.error(f"Schematic not found") - Console.write_line(self.help_message) - sys.exit() - - name = value - if name is None: - name = Console.read(f"Name for the {args[0]}: ") - - if schematic in self._schematics: - s = self._schematics[schematic] - self._generate(schematic, name, s["Template"]) - - else: - self._help("Usage: cpl generate [options]") - Console.write_line() - sys.exit() diff --git a/src/cpl_cli/command/help_service.py b/src/cpl_cli/command/help_service.py deleted file mode 100644 index 0314aa02..00000000 --- a/src/cpl_cli/command/help_service.py +++ /dev/null @@ -1,67 +0,0 @@ -import sys -import textwrap - -from cpl_core.console.console import Console -from cpl_core.console.foreground_color_enum import ForegroundColorEnum -from cpl_core.dependency_injection.service_provider_abc import ServiceProviderABC -from cpl_cli.command_abc import CommandABC - - -class HelpService(CommandABC): - def __init__(self, services: ServiceProviderABC): - """ - Service for CLI command help - """ - CommandABC.__init__(self) - - self._services = services - - @property - def help_message(self) -> str: - return textwrap.dedent( - """\ - Lists available command and their short descriptions. - Usage: cpl help - """ - ) - - def execute(self, args: list[str]): - """ - Entry point of command - :param args: - :return: - """ - if len(args) > 0: - Console.error(f'Unexpected argument(s): {", ".join(args)}') - sys.exit() - - Console.write_line("Available Commands:") - commands = [ - ["add (a|a)", "Adds a project reference to given project."], - [ - "build (b|B)", - "Prepares files for publish into an output directory named dist/ at the given output path. Must be executed from within a workspace directory.", - ], - ["generate (g|G)", "Generate a new file."], - ["help (h|H)", "Lists available command and their short descriptions."], - [ - "install (i|I)", - "With argument installs packages to project, without argument installs project dependencies.", - ], - ["new (n|N)", "Creates new CPL project."], - [ - "publish (p|P)", - "Prepares files for publish into an output directory named dist/ at the given output path and executes setup.py. Must be executed from within a library workspace directory.", - ], - ["remove (r|R)", "Removes a project from workspace."], - ["start (s|S)", "Starts CPL project, restarting on file changes."], - ["uninstall (ui|UI)", "Uninstalls packages from project."], - ["update (u|u)", "Update CPL and project dependencies."], - ["version (v|V)", "Outputs CPL CLI version."], - ] - for name, description in commands: - Console.set_foreground_color(ForegroundColorEnum.blue) - Console.write(f"\n\t{name} ") - Console.set_foreground_color(ForegroundColorEnum.default) - Console.write(f"{description}") - Console.write_line("\nRun 'cpl --help' for command specific information's\n") diff --git a/src/cpl_cli/command/install_service.py b/src/cpl_cli/command/install_service.py deleted file mode 100644 index 9561758d..00000000 --- a/src/cpl_cli/command/install_service.py +++ /dev/null @@ -1,281 +0,0 @@ -import json -import os -import subprocess -import textwrap -import time - -from packaging import version - -from cpl_cli.cli_settings import CLISettings -from cpl_cli.command_abc import CommandABC -from cpl_cli.configuration.build_settings import BuildSettings -from cpl_cli.configuration.project_settings import ProjectSettings -from cpl_cli.configuration.settings_helper import SettingsHelper -from cpl_cli.configuration.venv_helper_service import VenvHelper -from cpl_cli.error import Error -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.environment.application_environment_abc import ApplicationEnvironmentABC -from cpl_core.utils.pip import Pip - - -class InstallService(CommandABC): - def __init__( - self, - config: ConfigurationABC, - env: ApplicationEnvironmentABC, - build_settings: BuildSettings, - project_settings: ProjectSettings, - cli_settings: CLISettings, - ): - """ - Service for the CLI command install - :param config: - :param env: - :param build_settings: - :param project_settings: - :param cli_settings: - """ - CommandABC.__init__(self) - - self._config = config - self._env = env - self._build_settings = build_settings - self._project_settings = project_settings - self._cli_settings = cli_settings - - self._is_simulation = False - self._is_virtual = False - self._is_dev = False - - self._project_file = f"{self._project_settings.name}.json" - - @property - def help_message(self) -> str: - return textwrap.dedent( - """\ - Installs given package via pip - Usage: cpl install - - Arguments: - package The package to install - """ - ) - - def _wait(self, t: int, *args, source: str = None, stdout=None, stderr=None): - time.sleep(t) - - def _install_project(self): - """ - Installs dependencies of CPl project - :return: - """ - if self._project_settings is None or self._build_settings is None: - Error.error("The command requires to be run in an CPL project, but a project could not be found.") - return - - if self._project_settings.dependencies is None: - Error.error(f"Found invalid dependencies in {self._project_file}.") - return - - for dependency in self._project_settings.dependencies: - Console.spinner( - f"Installing: {dependency}", - Pip.install if not self._is_virtual else self._wait, - dependency if not self._is_virtual else 2, - "--upgrade", - source=self._cli_settings.pip_path, - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) - local_package = Pip.get_package(dependency) - if local_package is None: - Error.warn(f"Installation of package {dependency} failed!") - return - - for dependency in self._project_settings.dev_dependencies: - Console.spinner( - f"Installing dev: {dependency}", - Pip.install if not self._is_virtual else self._wait, - dependency if not self._is_virtual else 2, - "--upgrade", - source=self._cli_settings.pip_path, - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) - local_package = Pip.get_package(dependency) - if local_package is None: - Error.warn(f"Installation of package {dependency} failed!") - return - - if not self._is_virtual: - Pip.reset_executable() - - def _install_package(self, package: str): - """ - Installs given package - :param package: - :return: - """ - is_already_in_project = False - if self._project_settings is None or self._build_settings is None: - Error.error("The command requires to be run in an CPL project, but a project could not be found.") - return - - if self._project_settings.dependencies is None: - Error.error(f"Found invalid dependencies in {self._project_file}.") - return - - package_version = "" - name = package - if "==" in package: - name = package.split("==")[0] - package_version = package.split("==")[1] - elif ">=" in package: - name = package.split(">=")[0] - package_version = package.split(">=")[1] - elif "<=" in package: - name = package.split("<=")[0] - package_version = package.split("<=")[1] - - to_remove_list = [] - deps = self._project_settings.dependencies - if self._is_dev: - deps = self._project_settings.dev_dependencies - - for dependency in deps: - dependency_version = "" - - if "==" in dependency: - dependency_version = dependency.split("==")[1] - elif "<=" in dependency: - dependency_version = dependency.split("<=")[1] - elif ">=" in dependency: - dependency_version = dependency.split(">=")[1] - - if name in dependency: - if package_version != "" and version.parse(package_version) != version.parse(dependency_version): - to_remove_list.append(dependency) - break - else: - is_already_in_project = True - - for to_remove in to_remove_list: - if self._is_dev: - self._project_settings.dev_dependencies.remove(to_remove) - else: - self._project_settings.dependencies.remove(to_remove) - - local_package = Pip.get_package(package) - if local_package is not None and local_package in self._project_settings.dependencies: - Error.warn(f"Package {local_package} is already installed.") - return - - elif is_already_in_project: - Error.warn(f"Package {package} is already installed.") - return - - Console.spinner( - f"Installing: {package}" if not self._is_dev else f"Installing dev: {package}", - Pip.install if not self._is_virtual else self._wait, - package if not self._is_virtual else 2, - source=self._cli_settings.pip_path, - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) - - if self._is_virtual: - new_package = name - else: - new_package = Pip.get_package(name) - - if ( - new_package is None - or "==" in package - and version.parse(package.split("==")[1]) != version.parse(new_package.split("==")[1]) - or "<=" in package - and version.parse(package.split("<=")[1]) != version.parse(new_package.split("<=")[1]) - or ">=" in package - and version.parse(package.split(">=")[1]) != version.parse(new_package.split(">=")[1]) - ): - Console.error(f"Installation of package {package} failed") - return - - if not is_already_in_project: - new_name = package - if "==" in new_package or ">=" in new_package or "<=" in new_package: - new_name = new_package - elif "==" in name or ">=" in name or "<=" in name: - new_name = name - - if "/" in new_name: - new_name = new_name.split("/")[0] - - if "\r" in new_name: - new_name = new_name.replace("\r", "") - - if self._is_dev: - self._project_settings.dev_dependencies.append(new_name) - else: - self._project_settings.dependencies.append(new_name) - - if not self._is_simulation: - config = { - ProjectSettings.__name__: SettingsHelper.get_project_settings_dict(self._project_settings), - BuildSettings.__name__: SettingsHelper.get_build_settings_dict(self._build_settings), - } - - with open(os.path.join(self._env.working_directory, self._project_file), "w") as project_file: - project_file.write(json.dumps(config, indent=2)) - project_file.close() - - Pip.reset_executable() - - def execute(self, args: list[str]): - """ - Entry point of command - :param args: - :return: - """ - if "dev" in args: - self._is_dev = True - args.remove("dev") - - if "virtual" in args: - self._is_virtual = True - args.remove("virtual") - Console.write_line("Running in virtual mode:") - - if "simulate" in args: - self._is_simulation = True - args.remove("simulate") - Console.write_line("Running in simulation mode:") - - if "cpl-prod" in args: - args.remove("cpl-prod") - self._cli_settings.from_dict({"PipPath": "https://pip.sh-edraft.de"}) - - if "cpl-exp" in args: - args.remove("cpl-exp") - self._cli_settings.from_dict({"PipPath": "https://pip-exp.sh-edraft.de"}) - - if "cpl-dev" in args: - args.remove("cpl-dev") - self._cli_settings.from_dict({"PipPath": "https://pip-dev.sh-edraft.de"}) - - VenvHelper.init_venv(self._is_virtual, self._env, self._project_settings.python_executable) - - if len(args) == 0: - self._install_project() - else: - self._install_package(args[0]) - - if not self._is_virtual: - Pip.reset_executable() diff --git a/src/cpl_cli/command/new_service.py b/src/cpl_cli/command/new_service.py deleted file mode 100644 index d27acba5..00000000 --- a/src/cpl_cli/command/new_service.py +++ /dev/null @@ -1,362 +0,0 @@ -import importlib -import os -import sys -import textwrap -import traceback -from typing import Optional - -from packaging import version - -import cpl_cli -import cpl_core -from cpl_cli.abc.project_type_abc import ProjectTypeABC -from cpl_cli.command_abc import CommandABC -from cpl_cli.configuration import VersionSettings -from cpl_cli.configuration.build_settings import BuildSettings -from cpl_cli.configuration.project_settings import ProjectSettings -from cpl_cli.configuration.project_type_enum import ProjectTypeEnum -from cpl_cli.configuration.settings_helper import SettingsHelper -from cpl_cli.configuration.venv_helper_service import VenvHelper -from cpl_cli.configuration.workspace_settings import WorkspaceSettings -from cpl_cli.helper.dependencies import Dependencies -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): - def __init__(self, configuration: ConfigurationABC): - """ - Service for the CLI command new - :param configuration: - """ - CommandABC.__init__(self) - - self._config = configuration - self._env = self._config.environment - - self._workspace: WorkspaceSettings = self._config.get_configuration(WorkspaceSettings) - self._project_dict = {} - self._build_dict = {} - self._project_name = "" - self._python_executable = "" - - self._project_type_classes = set() - - self._name: str = "" - self._rel_path: str = "" - self._project_type: ProjectTypeEnum = ProjectTypeEnum.console - self._use_nothing: bool = False - self._use_application_api: bool = False - self._use_startup: bool = False - self._use_service_providing: bool = False - self._use_async: bool = False - self._use_venv: bool = False - self._use_base: bool = False - - @property - def help_message(self) -> str: - return textwrap.dedent( - """\ - Generates a workspace and initial project or add a project to workspace. - Usage: cpl new - - Arguments: - type The project type of the initial project - name Name of the workspace or the project - - Types: - console (c|C) - library (l|L) - unittest (ut|UT) - """ - ) - - def _create_project_settings(self): - self._project_name = os.path.basename(self._name) - self._python_executable = ProjectSettings( - python_path={sys.platform: "../../venv/" if self._use_venv else ""} - ).python_executable - self._rel_path = os.path.dirname(self._name) - self._project_dict = SettingsHelper.get_project_settings_dict( - ProjectSettings( - os.path.basename(self._name), - VersionSettings("0", "0", "0"), - "", - "", - "", - "", - "", - "", - "", - "", - "", - [f"cpl-core>={version.parse(cpl_core.__version__)}"], - [f"cpl-cli>={version.parse(cpl_cli.__version__)}"], - f'>={sys.version.split(" ")[0]}', - {sys.platform: "../../venv/" if self._use_venv else ""}, - None, - [], - ) - ) - - def _create_build_settings(self, project_type: str): - self._build_dict = SettingsHelper.get_build_settings_dict( - BuildSettings( - ProjectTypeEnum[project_type], - "", - "../../dist", - f"{String.convert_to_snake_case(self._project_name)}.main", - self._project_name, - False, - [], - ["*/__pycache__", "*/logs", "*/tests"], - {}, - [], - ) - ) - - def _create_project_json(self): - """ - Creates cpl.json content - :return: - """ - self._project_json = {ProjectSettings.__name__: self._project_dict, BuildSettings.__name__: self._build_dict} - - def _get_project_path(self) -> Optional[str]: - """ - Gets project path - :return: - """ - if self._workspace is None: - project_path = os.path.join(self._env.working_directory, self._rel_path, self._project_name) - else: - base = "" if self._use_base else "src" - project_path = os.path.join( - self._env.working_directory, base, self._rel_path, String.convert_to_snake_case(self._project_name) - ) - - if os.path.isdir(project_path) and len(os.listdir(project_path)) > 0: - Console.write_line(project_path) - Console.error("Project path is not empty\n") - return None - - return project_path - - def _get_project_information(self, project_type: str): - """ - Gets project information's from user - :return: - """ - is_unittest = project_type == "unittest" - is_library = project_type == "library" - if is_library: - return - - if ( - self._use_application_api - or self._use_startup - or self._use_service_providing - or self._use_async - or self._use_nothing - ): - Console.set_foreground_color(ForegroundColorEnum.default) - Console.write_line("Skipping question due to given flags") - return - - if not is_unittest and not is_library: - self._use_application_api = Console.read("Do you want to use application base? (y/n) ").lower() == "y" - - if not is_unittest and self._use_application_api: - self._use_startup = Console.read("Do you want to use startup? (y/n) ").lower() == "y" - - if not is_unittest and not self._use_application_api: - self._use_service_providing = Console.read("Do you want to use service providing? (y/n) ").lower() == "y" - - if not self._use_async: - self._use_async = Console.read("Do you want to use async? (y/n) ").lower() == "y" - - Console.set_foreground_color(ForegroundColorEnum.default) - - def _create_venv(self): - project = self._project_name - if self._workspace is not None: - project = self._workspace.default_project - - if self._env.working_directory.endswith(project): - project = "" - - if self._workspace is None and self._use_base: - project = f"{self._rel_path}/{project}" - - VenvHelper.init_venv( - False, - self._env, - self._python_executable, - explicit_path=os.path.join( - self._env.working_directory, project, self._python_executable.replace("../", "") - ), - ) - - def _read_custom_project_types_from_path(self, path: str): - 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 file.startswith("project_file_") or not file.startswith("project_") or not file.endswith(".py"): - continue - - try: - exec(open(os.path.join(r, file), "r").read()) - self._project_type_classes.update(ProjectTypeABC.__subclasses__()) - except Exception as e: - Console.error(str(e), traceback.format_exc()) - sys.exit(-1) - - def _create_project(self, project_type: str): - for package_name in Dependencies.get_cpl_packages(): - if package_name == "cpl-cli": - continue - package = importlib.import_module(String.convert_to_snake_case(package_name[0])) - self._read_custom_project_types_from_path(os.path.dirname(package.__file__)) - - self._read_custom_project_types_from_path(self._env.working_directory) - self._read_custom_project_types_from_path(self._env.runtime_directory) - - if len(self._project_type_classes) == 0: - Console.error(f"No project types found in template directory: .cpl") - sys.exit() - - project_class = None - known_project_types = [] - for p in self._project_type_classes: - known_project_types.append(p.__name__) - if p.__name__.lower() != project_type and p.__name__.lower()[0] != project_type[0]: - continue - - project_class = p - - if project_class is None: - Console.error(f"Project type {project_type} not found in template directory: .cpl/") - sys.exit() - - project_type = String.convert_to_snake_case(project_class.__name__) - self._create_project_settings() - self._create_build_settings(project_type) - self._create_project_json() - path = self._get_project_path() - if path is None: - return - - self._get_project_information(project_type) - project_name = self._project_name - if self._rel_path != "": - project_name = f"{self._rel_path}/{project_name}" - - 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_class( - base if self._workspace is not None else "src/", - project_name, - self._workspace, - self._use_application_api, - self._use_startup, - self._use_service_providing, - self._use_async, - self._project_json, - ) - - if self._workspace is None: - TemplateBuilder.create_workspace( - f"{project_name}/cpl-workspace.json", - project_name.split("/")[-1], - { - 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 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 {file_path}", - TemplateBuilder.build, - 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 - :param args: - :return: - """ - if "nothing" in args: - self._use_nothing = True - self._use_async = False - self._use_application_api = False - self._use_startup = False - self._use_service_providing = False - if "async" in args: - args.remove("async") - if "application-base" in args: - args.remove("application-base") - if "startup" in args: - args.remove("startup") - if "service-providing" in args: - args.remove("service-providing") - - if "async" in args: - self._use_async = True - args.remove("async") - if "application-base" in args: - self._use_application_api = True - args.remove("application-base") - if "startup" in args: - self._use_startup = True - args.remove("startup") - if "service-providing" in args: - self._use_service_providing = True - args.remove("service-providing") - if "venv" in args: - self._use_venv = True - args.remove("venv") - if "base" in args: - self._use_base = True - args.remove("base") - - if len(args) <= 1: - Console.error(f"Project type not found") - Console.write_line(self.help_message) - return - - self._name = args[1] - self._create_project(args[0]) diff --git a/src/cpl_cli/command/publish_service.py b/src/cpl_cli/command/publish_service.py deleted file mode 100644 index 4db4b972..00000000 --- a/src/cpl_cli/command/publish_service.py +++ /dev/null @@ -1,32 +0,0 @@ -import textwrap - -from cpl_cli.command_abc import CommandABC -from cpl_cli.publish.publisher_abc import PublisherABC - - -class PublishService(CommandABC): - def __init__(self, publisher: PublisherABC): - """ - Service for the CLI command publish - :param publisher: - """ - CommandABC.__init__(self) - - self._publisher = publisher - - @property - def help_message(self) -> str: - return textwrap.dedent( - """\ - Prepares files for publish into an output directory named dist/ at the given output path and executes setup.py. - Usage: cpl publish - """ - ) - - def execute(self, args: list[str]): - """ - Entry point of command - :param args: - :return: - """ - self._publisher.publish() diff --git a/src/cpl_cli/command/remove_service.py b/src/cpl_cli/command/remove_service.py deleted file mode 100644 index d0dca5b0..00000000 --- a/src/cpl_cli/command/remove_service.py +++ /dev/null @@ -1,172 +0,0 @@ -import os -import shutil -import json -import textwrap - -from cpl_cli.configuration.settings_helper import SettingsHelper - -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.environment.application_environment_abc import ApplicationEnvironmentABC -from cpl_cli.command_abc import CommandABC -from cpl_cli.configuration import ( - WorkspaceSettings, - WorkspaceSettingsNameEnum, - BuildSettingsNameEnum, - ProjectSettings, - BuildSettings, -) - - -class RemoveService(CommandABC): - def __init__(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): - """ - Service for CLI command remove - :param config: - :param env: - """ - CommandABC.__init__(self) - - self._config = config - self._env = env - - self._workspace: WorkspaceSettings = self._config.get_configuration(WorkspaceSettings) - self._is_simulation = False - - @property - def help_message(self) -> str: - return textwrap.dedent( - """\ - Removes a project from workspace. - Usage: cpl remove - - Arguments: - project The name of the project to delete - """ - ) - - def _create_file(self, file_name: str, content: dict): - if self._is_simulation: - return - - 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() - - def _remove_sources(self, path: str): - if self._is_simulation: - return - shutil.rmtree(path) - - def _create_workspace(self, path: str): - ws_dict = { - WorkspaceSettings.__name__: { - WorkspaceSettingsNameEnum.default_project.value: self._workspace.default_project, - WorkspaceSettingsNameEnum.projects.value: self._workspace.projects, - WorkspaceSettingsNameEnum.scripts.value: self._workspace.scripts, - } - } - - self._create_file(path, ws_dict) - - def _get_project_settings(self, project: str) -> dict: - with open(os.path.join(os.getcwd(), self._workspace.projects[project]), "r", encoding="utf-8") as cfg: - # load json - project_json = json.load(cfg) - cfg.close() - - return project_json - - def _write_project_settings(self, project: str, project_settings: dict, build_settings: dict): - with open(os.path.join(os.getcwd(), self._workspace.projects[project]), "w", encoding="utf-8") as file: - file.write( - json.dumps( - {ProjectSettings.__name__: project_settings, BuildSettings.__name__: build_settings}, indent=2 - ) - ) - file.close() - - def _find_deps_in_projects(self, project_name: str, rel_path: str): - for project in self._workspace.projects: - if project == project_name: - continue - - project_settings = self._get_project_settings(project) - if ( - BuildSettings.__name__ not in project_settings - or BuildSettingsNameEnum.project_references.value not in project_settings[BuildSettings.__name__] - ): - continue - - ref_to_delete = "" - for ref in project_settings[BuildSettings.__name__][BuildSettingsNameEnum.project_references.value]: - if os.path.basename(ref) == f"{project_name}.json": - ref_to_delete = ref - - if ( - ref_to_delete - not in project_settings[BuildSettings.__name__][BuildSettingsNameEnum.project_references.value] - ): - continue - - project_settings[BuildSettings.__name__][BuildSettingsNameEnum.project_references.value].remove( - ref_to_delete - ) - Console.spinner( - f"Removing {project_name} from {project}", - self._write_project_settings, - project, - project_settings[ProjectSettings.__name__], - project_settings[BuildSettings.__name__], - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) - - def execute(self, args: list[str]): - """ - Entry point of command - :param args: - :return: - """ - if "simulate" in args: - args.remove("simulate") - Console.write_line("Running in simulation mode:") - self._is_simulation = True - - project_name = args[0] - if project_name not in self._workspace.projects: - Console.error(f"Project {project_name} not found in workspace.") - return - - if project_name == self._workspace.default_project: - Console.error(f"Project {project_name} is the default project.") - return - - src_path = os.path.dirname(self._workspace.projects[project_name]) - Console.spinner( - f"Removing {src_path}", - self._remove_sources, - os.path.abspath(src_path), - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) - - self._find_deps_in_projects(project_name, src_path) - - del self._workspace.projects[project_name] - path = "cpl-workspace.json" - Console.spinner( - f"Changing {path}", - self._create_workspace, - path, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) diff --git a/src/cpl_cli/command/run_service.py b/src/cpl_cli/command/run_service.py deleted file mode 100644 index 6d9360d6..00000000 --- a/src/cpl_cli/command/run_service.py +++ /dev/null @@ -1,125 +0,0 @@ -import os -import sys -import textwrap - -from cpl_cli.error import Error -from cpl_cli.command_abc import CommandABC -from cpl_cli.configuration.workspace_settings import WorkspaceSettings -from cpl_cli.configuration.build_settings import BuildSettings -from cpl_cli.configuration.project_settings import ProjectSettings -from cpl_cli.live_server.start_executable import StartExecutable -from cpl_cli.publish.publisher_service import PublisherService -from cpl_core.configuration.configuration_abc import ConfigurationABC -from cpl_core.console.console import Console -from cpl_core.dependency_injection.service_provider_abc import ServiceProviderABC -from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC -from cpl_core.utils.string import String - - -class RunService(CommandABC): - def __init__( - self, - config: ConfigurationABC, - env: ApplicationEnvironmentABC, - services: ServiceProviderABC, - project_settings: ProjectSettings, - build_settings: BuildSettings, - workspace: WorkspaceSettings, - publisher: PublisherService, - ): - """ - Service for the CLI command start - :param config: - :param env: - :param services: - :param project_settings: - :param build_settings: - :param workspace: - """ - CommandABC.__init__(self) - - self._config = config - self._env = env - self._services = services - self._project_settings = project_settings - self._build_settings = build_settings - self._workspace = workspace - self._publisher = publisher - - self._src_dir = os.path.join(self._env.working_directory, self._build_settings.source_path) - self._is_dev = False - - @property - def help_message(self) -> str: - return textwrap.dedent( - """\ - Starts your application. - Usage: cpl run - """ - ) - - def _set_project_by_args(self, name: str): - if self._workspace is None: - Error.error("The command requires to be run in an CPL workspace, but a workspace could not be found.") - sys.exit() - - if name not in self._workspace.projects: - Error.error(f"Project {name} not found in workspace") - sys.exit() - - project_path = self._workspace.projects[name] - - self._config.add_configuration(ProjectSettings, None) - self._config.add_configuration(BuildSettings, None) - - working_directory = self._config.get_configuration("PATH_WORKSPACE") - if working_directory is not None: - self._env.set_working_directory(working_directory) - - json_file = os.path.join(self._env.working_directory, project_path) - self._config.add_json_file(json_file, optional=True, output=False) - self._project_settings: ProjectSettings = self._config.get_configuration(ProjectSettings) - self._build_settings: BuildSettings = self._config.get_configuration(BuildSettings) - - if self._project_settings is None or self._build_settings is None: - Error.error(f"Project {name} not found") - sys.exit() - - self._src_dir = os.path.dirname(json_file) - - def _build(self): - if self._is_dev: - return - - self._env.set_working_directory(self._src_dir) - self._publisher.build() - self._env.set_working_directory(self._src_dir) - self._src_dir = os.path.abspath( - os.path.join( - self._src_dir, - self._build_settings.output_path, - self._project_settings.name, - "build", - String.convert_to_snake_case(self._project_settings.name), - ) - ) - - def execute(self, args: list[str]): - """ - Entry point of command - :param args: - :return: - """ - if "dev" in args: - self._is_dev = True - args.remove("dev") - - if len(args) >= 1: - self._set_project_by_args(args[0]) - args.remove(args[0]) - - self._build() - - start_service = StartExecutable(self._env, self._build_settings) - start_service.run(args, self._project_settings.python_executable, self._src_dir, output=False) - Console.write_line() diff --git a/src/cpl_cli/command/start_service.py b/src/cpl_cli/command/start_service.py deleted file mode 100644 index 2f9e2b7a..00000000 --- a/src/cpl_cli/command/start_service.py +++ /dev/null @@ -1,32 +0,0 @@ -import textwrap - -from cpl_cli.command_abc import CommandABC -from cpl_cli.live_server.live_server_service import LiveServerService - - -class StartService(CommandABC): - def __init__(self, live_server: LiveServerService): - """ - Service for the CLI command start - :param live_server: - """ - CommandABC.__init__(self) - - self._live_server = live_server - - @property - def help_message(self) -> str: - return textwrap.dedent( - """\ - Starts your application, restarting on file changes. - Usage: cpl start - """ - ) - - def execute(self, args: list[str]): - """ - Entry point of command - :param args: - :return: - """ - self._live_server.start(args) diff --git a/src/cpl_cli/command/uninstall_service.py b/src/cpl_cli/command/uninstall_service.py deleted file mode 100644 index a7c71174..00000000 --- a/src/cpl_cli/command/uninstall_service.py +++ /dev/null @@ -1,140 +0,0 @@ -import json -import os -import subprocess -import textwrap -import time - -from cpl_cli.configuration.venv_helper_service import VenvHelper -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.environment.application_environment_abc import ApplicationEnvironmentABC -from cpl_core.utils.pip import Pip -from cpl_cli.command_abc import CommandABC -from cpl_cli.configuration.build_settings import BuildSettings -from cpl_cli.configuration.project_settings import ProjectSettings -from cpl_cli.configuration.settings_helper import SettingsHelper - - -class UninstallService(CommandABC): - def __init__( - self, - config: ConfigurationABC, - env: ApplicationEnvironmentABC, - build_settings: BuildSettings, - project_settings: ProjectSettings, - ): - """ - Service for the CLI command uninstall - :param config: - :param env: - :param build_settings: - :param project_settings: - """ - CommandABC.__init__(self) - - self._config = config - self._env = env - self._build_settings = build_settings - self._project_settings = project_settings - - self._is_simulating = False - self._is_virtual = False - self._is_dev = False - - self._project_file = f"{self._project_settings.name}.json" - - @property - def help_message(self) -> str: - return textwrap.dedent( - """\ - Uninstalls given package via pip - Usage: cpl uninstall - - Arguments: - package The package to uninstall - """ - ) - - def _wait(self, t: int, *args, source: str = None, stdout=None, stderr=None): - time.sleep(t) - - def execute(self, args: list[str]): - """ - Entry point of command - :param args: - :return: - """ - if len(args) == 0: - Console.error(f"Expected package") - Console.error(f"Usage: cpl uninstall ") - return - - if "dev" in args: - self._is_dev = True - args.remove("dev") - - if "--virtual" in args: - self._is_virtual = True - args.remove("--virtual") - Console.write_line("Running in virtual mode:") - - if "--simulate" in args: - self._is_virtual = True - args.remove("--simulate") - Console.write_line("Running in simulation mode:") - - VenvHelper.init_venv(self._is_virtual, self._env, self._project_settings.python_executable) - - package = args[0] - is_in_dependencies = False - - if not self._is_virtual: - pip_package = Pip.get_package(package) - else: - pip_package = package - - deps = self._project_settings.dependencies - if self._is_dev: - deps = self._project_settings.dev_dependencies - - for dependency in deps: - if package in dependency: - is_in_dependencies = True - package = dependency - - if not is_in_dependencies and pip_package is None: - Console.error(f"Package {package} not found") - return - - elif not is_in_dependencies and pip_package is not None: - package = pip_package - - Console.spinner( - f"Uninstalling: {package}" if not self._is_dev else f"Uninstalling dev: {package}", - Pip.uninstall if not self._is_virtual else self._wait, - package if not self._is_virtual else 2, - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) - - deps = self._project_settings.dependencies - if self._is_dev: - deps = self._project_settings.dev_dependencies - - if package in deps: - deps.remove(package) - if not self._is_simulating: - config = { - ProjectSettings.__name__: SettingsHelper.get_project_settings_dict(self._project_settings), - BuildSettings.__name__: SettingsHelper.get_build_settings_dict(self._build_settings), - } - with open(os.path.join(self._env.working_directory, self._project_file), "w") as project_file: - project_file.write(json.dumps(config, indent=2)) - project_file.close() - - Console.write_line(f"Removed {package}") - if not self._is_virtual: - Pip.reset_executable() diff --git a/src/cpl_cli/command/update_service.py b/src/cpl_cli/command/update_service.py deleted file mode 100644 index 290c51d6..00000000 --- a/src/cpl_cli/command/update_service.py +++ /dev/null @@ -1,228 +0,0 @@ -import json -import os -import subprocess -import textwrap - -from cpl_cli.configuration.venv_helper_service import VenvHelper -from cpl_cli.migrations.base.migration_service_abc import MigrationServiceABC -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.environment.application_environment_abc import ApplicationEnvironmentABC -from cpl_core.utils.pip import Pip -from cpl_cli.cli_settings import CLISettings -from cpl_cli.command_abc import CommandABC -from cpl_cli.configuration import BuildSettings -from cpl_cli.configuration.project_settings import ProjectSettings -from cpl_cli.configuration.settings_helper import SettingsHelper - - -class UpdateService(CommandABC): - def __init__( - self, - config: ConfigurationABC, - env: ApplicationEnvironmentABC, - build_settings: BuildSettings, - project_settings: ProjectSettings, - cli_settings: CLISettings, - migrations: MigrationServiceABC, - ): - """ - Service for the CLI command update - :param config: - :param env: - :param build_settings: - :param project_settings: - :param cli_settings: - """ - CommandABC.__init__(self) - - self._config = config - self._env = env - self._build_settings = build_settings - self._project_settings = project_settings - self._cli_settings = cli_settings - self._migrations = migrations - self._is_simulation = False - - self._project_file = f"{self._project_settings.name}.json" - - @property - def help_message(self) -> str: - return textwrap.dedent( - """\ - Updates the CPL and project dependencies. - Usage: cpl update - """ - ) - - def _collect_project_dependencies(self) -> list[tuple]: - """ - Collects project dependencies - :return: - """ - dependencies = [] - for package in [*self._project_settings.dependencies, *self._project_settings.dev_dependencies]: - name = package - if "==" in package: - name = package.split("==")[0] - elif ">=" in package: - name = package.split(">=")[0] - elif "<=" in package: - name = package.split("<=")[0] - - dependencies.append((package, name)) - - return dependencies - - def _update_project_dependencies(self, dependencies): - """ - Updates project dependencies - :return: - """ - for package, name in dependencies: - Pip.install( - name, - "--upgrade", - "--upgrade-strategy", - "eager", - source=self._cli_settings.pip_path, - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - ) - - new_package = Pip.get_package(name) - if new_package is None: - Console.error(f"Update for package {package} failed") - continue - - self._project_json_update_dependency(package, new_package) - - def _check_project_dependencies(self): - """ - Checks project dependencies for updates - :return: - """ - dependencies = Console.spinner( - "Collecting installed dependencies", - self._collect_project_dependencies, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) - - Console.spinner( - "Updating installed dependencies", - self._update_project_dependencies, - dependencies, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) - - if "cpl-cli" in [y for x, y in dependencies]: - import cpl_cli - - Console.spinner( - "Running migrations", - self._migrations.migrate_from, - cpl_cli.__version__, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) - - Console.write_line(f"Found {len(self._project_settings.dependencies)} dependencies.") - - @staticmethod - def _check_outdated(): - """ - Checks for outdated packages in project - :return: - """ - table_str: bytes = Console.spinner( - "Analyzing for available package updates", - Pip.get_outdated, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) - - table = str(table_str, "utf-8").split("\n") - if len(table) > 1 and table[0] != "": - Console.write_line("\tAvailable updates for packages:") - for row in table: - Console.write_line(f"\t{row}") - - Console.set_foreground_color(ForegroundColorEnum.yellow) - Console.write_line(f"\tUpdate with {Pip.get_executable()} -m pip install --upgrade ") - Console.set_foreground_color(ForegroundColorEnum.default) - - def _save_formatted_package_name_to_deps_collection(self, deps: [str], old_package: str, new_package: str): - if old_package not in deps: - return - - initial_package = new_package - - if "/" in new_package: - new_package = new_package.split("/")[0] - - if "\r" in new_package: - new_package = new_package.replace("\r", "") - - if new_package == old_package: - return - - index = deps.index(old_package) - deps[index] = new_package - - def _project_json_update_dependency(self, old_package: str, new_package: str): - """ - Writes new package version to project.json - :param old_package: - :param new_package: - :return: - """ - if self._is_simulation: - return - - self._save_formatted_package_name_to_deps_collection( - self._project_settings.dependencies, old_package, new_package - ) - self._save_formatted_package_name_to_deps_collection( - self._project_settings.dev_dependencies, old_package, new_package - ) - - config = { - ProjectSettings.__name__: SettingsHelper.get_project_settings_dict(self._project_settings), - BuildSettings.__name__: SettingsHelper.get_build_settings_dict(self._build_settings), - } - - with open(os.path.join(self._env.working_directory, self._project_file), "w") as project: - project.write(json.dumps(config, indent=2)) - project.close() - - def execute(self, args: list[str]): - """ - Entry point of command - :param args: - :return: - """ - if "simulate" in args: - args.remove("simulate") - Console.write_line("Running in simulation mode:") - self._is_simulation = True - - if "cpl-prod" in args: - args.remove("cpl-prod") - self._cli_settings.from_dict({"PipPath": "https://pip.sh-edraft.de"}) - - if "cpl-exp" in args: - args.remove("cpl-exp") - self._cli_settings.from_dict({"PipPath": "https://pip-exp.sh-edraft.de"}) - - if "cpl-dev" in args: - args.remove("cpl-dev") - self._cli_settings.from_dict({"PipPath": "https://pip-dev.sh-edraft.de"}) - - VenvHelper.init_venv(False, self._env, self._project_settings.python_executable) - - self._check_project_dependencies() - self._check_outdated() - Pip.reset_executable() diff --git a/src/cpl_cli/command/version_service.py b/src/cpl_cli/command/version_service.py deleted file mode 100644 index fb9837d6..00000000 --- a/src/cpl_cli/command/version_service.py +++ /dev/null @@ -1,49 +0,0 @@ -import pkgutil -import sys -import platform -import pkg_resources -import textwrap - -import cpl_cli -from cpl_cli.helper.dependencies import Dependencies -from cpl_core.console.console import Console -from cpl_core.console.foreground_color_enum import ForegroundColorEnum -from cpl_cli.command_abc import CommandABC - - -class VersionService(CommandABC): - def __init__(self): - """ - Service for the CLI command version - """ - CommandABC.__init__(self) - - @property - def help_message(self) -> str: - return textwrap.dedent( - """\ - Lists the version of CPL, CPL CLI and all installed packages from pip. - Usage: cpl version - """ - ) - - def execute(self, args: list[str]): - """ - Entry point of command - :param args: - :return: - """ - Console.set_foreground_color(ForegroundColorEnum.yellow) - Console.banner("CPL CLI") - Console.set_foreground_color(ForegroundColorEnum.default) - if "__version__" in dir(cpl_cli): - Console.write_line(f"Common Python library CLI: ") - Console.write(cpl_cli.__version__) - - Console.write_line(f"Python: ") - Console.write(f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}") - Console.write_line(f"OS: {platform.system()} {platform.processor()}") - Console.write_line("\nCPL packages:") - Console.table(["Name", "Version"], Dependencies.get_cpl_packages()) - Console.write_line("\nPython packages:") - Console.table(["Name", "Version"], Dependencies.get_packages()) diff --git a/src/cpl_cli/command_abc.py b/src/cpl_cli/command_abc.py deleted file mode 100644 index cb6a662f..00000000 --- a/src/cpl_cli/command_abc.py +++ /dev/null @@ -1,26 +0,0 @@ -from abc import abstractmethod, ABC - -from cpl_core.configuration.argument_executable_abc import ArgumentExecutableABC -from cpl_core.console import Console - - -class CommandABC(ArgumentExecutableABC): - @abstractmethod - def __init__(self): - ABC.__init__(self) - - @property - @abstractmethod - def help_message(self) -> str: - pass - - @abstractmethod - def execute(self, args: list[str]): - pass - - def run(self, args: list[str]): - if "help" in args: - Console.write_line(self.help_message) - return - - self.execute(args) diff --git a/src/cpl_cli/configuration/__init__.py b/src/cpl_cli/configuration/__init__.py deleted file mode 100644 index ba679b35..00000000 --- a/src/cpl_cli/configuration/__init__.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli.configuration" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports: -from .build_settings import BuildSettings -from .build_settings_name_enum import BuildSettingsNameEnum -from .project_settings import ProjectSettings -from .project_settings_name_enum import ProjectSettingsNameEnum -from .version_settings import VersionSettings -from .version_settings_name_enum import VersionSettingsNameEnum -from .workspace_settings import WorkspaceSettings -from .workspace_settings_name_enum import WorkspaceSettingsNameEnum - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/configuration/build_settings.py b/src/cpl_cli/configuration/build_settings.py deleted file mode 100644 index 60431999..00000000 --- a/src/cpl_cli/configuration/build_settings.py +++ /dev/null @@ -1,95 +0,0 @@ -import sys -import traceback -from typing import Optional - -from cpl_cli.configuration.build_settings_name_enum import BuildSettingsNameEnum -from cpl_cli.configuration.project_type_enum import ProjectTypeEnum -from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC -from cpl_core.console.console import Console -from cpl_core.console.foreground_color_enum import ForegroundColorEnum - - -class BuildSettings(ConfigurationModelABC): - def __init__( - self, - project_type: ProjectTypeEnum = None, - source_path: str = None, - output_path: str = None, - main: str = None, - entry_point: str = None, - include_package_data: bool = None, - included: list = None, - excluded: list = None, - package_data: dict = None, - project_references: list = None, - ): - ConfigurationModelABC.__init__(self) - - self._project_type: Optional[ProjectTypeEnum] = project_type - self._source_path: Optional[str] = source_path - self._output_path: Optional[str] = output_path - self._main: Optional[str] = main - self._entry_point: Optional[str] = entry_point - self._include_package_data: Optional[bool] = include_package_data - self._included: Optional[list[str]] = included - self._excluded: Optional[list[str]] = excluded - self._package_data: Optional[dict[str, list[str]]] = package_data - self._project_references: Optional[list[str]] = [] if project_references is None else project_references - - if sys.platform == "win32": - self._source_path = str(self._source_path).replace("/", "\\") - self._output_path = str(self._output_path).replace("/", "\\") - - # windows paths for excluded files - excluded = [] - for ex in self._excluded: - excluded.append(str(ex).replace("/", "\\")) - - self._excluded = excluded - - # windows paths for included files - included = [] - for inc in self._included: - included.append(str(inc).replace("/", "\\")) - - self._included = included - - @property - def project_type(self): - return self._project_type - - @property - def source_path(self) -> str: - return self._source_path - - @property - def output_path(self) -> str: - return self._output_path - - @property - def main(self) -> str: - return self._main - - @property - def entry_point(self) -> str: - return self._entry_point - - @property - def include_package_data(self) -> bool: - return self._include_package_data - - @property - def included(self) -> list[str]: - return self._included - - @property - def excluded(self) -> list[str]: - return self._excluded - - @property - def package_data(self) -> dict[str, list[str]]: - return self._package_data - - @property - def project_references(self) -> list[str]: - return self._project_references diff --git a/src/cpl_cli/configuration/build_settings_name_enum.py b/src/cpl_cli/configuration/build_settings_name_enum.py deleted file mode 100644 index 7b5e0cf3..00000000 --- a/src/cpl_cli/configuration/build_settings_name_enum.py +++ /dev/null @@ -1,14 +0,0 @@ -from enum import Enum - - -class BuildSettingsNameEnum(Enum): - project_type = "ProjectType" - source_path = "SourcePath" - output_path = "OutputPath" - main = "Main" - entry_point = "EntryPoint" - include_package_data = "IncludePackageData" - included = "Included" - excluded = "Excluded" - package_data = "PackageData" - project_references = "ProjectReferences" diff --git a/src/cpl_cli/configuration/project_settings.py b/src/cpl_cli/configuration/project_settings.py deleted file mode 100644 index 5ddf6b31..00000000 --- a/src/cpl_cli/configuration/project_settings.py +++ /dev/null @@ -1,132 +0,0 @@ -import os -import sys -from typing import Optional - -from cpl_cli.configuration.project_settings_name_enum import ProjectSettingsNameEnum -from cpl_cli.configuration.version_settings import VersionSettings -from cpl_cli.error import Error -from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC - - -class ProjectSettings(ConfigurationModelABC): - def __init__( - self, - name: str = None, - version: VersionSettings = None, - author: str = None, - author_email: str = None, - description: str = None, - long_description: str = None, - url: str = None, - copyright_date: str = None, - copyright_name: str = None, - license_name: str = None, - license_description: str = None, - dependencies: list = None, - dev_dependencies: list = None, - python_version: str = None, - python_path: dict = None, - python_executable: str = None, - classifiers: list = None, - ): - ConfigurationModelABC.__init__(self) - - self._name: Optional[str] = name - self._version: Optional[VersionSettings] = version - self._author: Optional[str] = author - self._author_email: Optional[str] = author_email - self._description: Optional[str] = description - self._long_description: Optional[str] = long_description - self._url: Optional[str] = url - self._copyright_date: Optional[str] = copyright_date - self._copyright_name: Optional[str] = copyright_name - self._license_name: Optional[str] = license_name - self._license_description: Optional[str] = license_description - self._dependencies: Optional[list[str]] = [] if dependencies is None else dependencies - self._dev_dependencies: Optional[list[str]] = [] if dev_dependencies is None else dev_dependencies - self._python_version: Optional[str] = python_version - self._python_path: Optional[str] = python_path - self._python_executable: Optional[str] = python_executable - self._classifiers: Optional[list[str]] = [] if classifiers is None else classifiers - - if python_path is not None and sys.platform in python_path: - path = f"{python_path[sys.platform]}" - - if path == "" or path is None: - Error.warn(f"{ProjectSettingsNameEnum.python_path.value} not set") - path = sys.executable - else: - if not path.endswith("bin/python"): - path = os.path.join(path, "bin/python") - else: - path = sys.executable - - self._python_executable = path - - @property - def name(self): - return self._name - - @property - def version(self) -> VersionSettings: - return self._version - - @property - def author(self) -> str: - return self._author - - @property - def author_email(self) -> str: - return self._author_email - - @property - def description(self) -> str: - return self._description - - @property - def long_description(self) -> str: - return self._long_description - - @property - def url(self) -> str: - return self._url - - @property - def copyright_date(self) -> str: - return self._copyright_date - - @property - def copyright_name(self) -> str: - return self._copyright_name - - @property - def license_name(self) -> str: - return self._license_name - - @property - def license_description(self) -> str: - return self._license_description - - @property - def dependencies(self) -> list[str]: - return self._dependencies - - @property - def dev_dependencies(self) -> list[str]: - return self._dev_dependencies - - @property - def python_version(self) -> str: - return self._python_version - - @property - def python_path(self) -> str: - return self._python_path - - @property - def python_executable(self) -> str: - return self._python_executable - - @property - def classifiers(self) -> list[str]: - return self._classifiers diff --git a/src/cpl_cli/configuration/project_settings_name_enum.py b/src/cpl_cli/configuration/project_settings_name_enum.py deleted file mode 100644 index fbd45ff3..00000000 --- a/src/cpl_cli/configuration/project_settings_name_enum.py +++ /dev/null @@ -1,20 +0,0 @@ -from enum import Enum - - -class ProjectSettingsNameEnum(Enum): - name = "Name" - version = "Version" - author = "Author" - author_email = "AuthorEmail" - description = "Description" - long_description = "LongDescription" - url = "URL" - copyright_date = "CopyrightDate" - copyright_name = "CopyrightName" - license_name = "LicenseName" - license_description = "LicenseDescription" - dependencies = "Dependencies" - dev_dependencies = "DevDependencies" - python_version = "PythonVersion" - python_path = "PythonPath" - classifiers = "Classifiers" diff --git a/src/cpl_cli/configuration/project_type_enum.py b/src/cpl_cli/configuration/project_type_enum.py deleted file mode 100644 index 4c4be9b0..00000000 --- a/src/cpl_cli/configuration/project_type_enum.py +++ /dev/null @@ -1,8 +0,0 @@ -from enum import Enum - - -class ProjectTypeEnum(Enum): - console = "console" - library = "library" - unittest = "unittest" - discord_bot = "discord-bot" diff --git a/src/cpl_cli/configuration/schematic_collection.py b/src/cpl_cli/configuration/schematic_collection.py deleted file mode 100644 index 23365d38..00000000 --- a/src/cpl_cli/configuration/schematic_collection.py +++ /dev/null @@ -1,13 +0,0 @@ -from cpl_core.utils import String - - -class SchematicCollection: - _schematics: dict = {} - - @classmethod - def register(cls, template: type, schematic: str, aliases: list[str]): - cls._schematics[schematic] = {"Template": template, "Aliases": aliases} - - @classmethod - def get_schematics(cls) -> dict: - return cls._schematics diff --git a/src/cpl_cli/configuration/settings_helper.py b/src/cpl_cli/configuration/settings_helper.py deleted file mode 100644 index de43131b..00000000 --- a/src/cpl_cli/configuration/settings_helper.py +++ /dev/null @@ -1,47 +0,0 @@ -from cpl_cli.configuration.version_settings_name_enum import VersionSettingsNameEnum -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 - - -class SettingsHelper: - @staticmethod - def get_project_settings_dict(project: ProjectSettings) -> dict: - return { - ProjectSettingsNameEnum.name.value: project.name, - ProjectSettingsNameEnum.version.value: { - VersionSettingsNameEnum.major.value: project.version.major, - VersionSettingsNameEnum.minor.value: project.version.minor, - VersionSettingsNameEnum.micro.value: project.version.micro, - }, - ProjectSettingsNameEnum.author.value: project.author, - ProjectSettingsNameEnum.author_email.value: project.author_email, - ProjectSettingsNameEnum.description.value: project.description, - ProjectSettingsNameEnum.long_description.value: project.long_description, - ProjectSettingsNameEnum.url.value: project.url, - ProjectSettingsNameEnum.copyright_date.value: project.copyright_date, - ProjectSettingsNameEnum.copyright_name.value: project.copyright_name, - ProjectSettingsNameEnum.license_name.value: project.license_name, - ProjectSettingsNameEnum.license_description.value: project.license_description, - ProjectSettingsNameEnum.dependencies.value: project.dependencies, - ProjectSettingsNameEnum.dev_dependencies.value: project.dev_dependencies, - ProjectSettingsNameEnum.python_version.value: project.python_version, - ProjectSettingsNameEnum.python_path.value: project.python_path, - ProjectSettingsNameEnum.classifiers.value: project.classifiers, - } - - @staticmethod - def get_build_settings_dict(build: BuildSettings) -> dict: - return { - BuildSettingsNameEnum.project_type.value: build.project_type.value, - BuildSettingsNameEnum.source_path.value: build.source_path, - BuildSettingsNameEnum.output_path.value: build.output_path, - BuildSettingsNameEnum.main.value: build.main, - BuildSettingsNameEnum.entry_point.value: build.entry_point, - BuildSettingsNameEnum.include_package_data.value: build.include_package_data, - BuildSettingsNameEnum.included.value: build.included, - BuildSettingsNameEnum.excluded.value: build.excluded, - BuildSettingsNameEnum.package_data.value: build.package_data, - BuildSettingsNameEnum.project_references.value: build.project_references, - } diff --git a/src/cpl_cli/configuration/venv_helper_service.py b/src/cpl_cli/configuration/venv_helper_service.py deleted file mode 100644 index 31a37efa..00000000 --- a/src/cpl_cli/configuration/venv_helper_service.py +++ /dev/null @@ -1,42 +0,0 @@ -import os -import subprocess -import sys - -from cpl_cli.configuration import ProjectSettings -from cpl_core.environment import ApplicationEnvironmentABC - -from cpl_core.utils import Pip - -from cpl_core.console import Console, ForegroundColorEnum - - -class VenvHelper: - @staticmethod - def init_venv(is_virtual: bool, env: ApplicationEnvironmentABC, python_executable: str, explicit_path=None): - if is_virtual: - return - - venv_path = os.path.abspath(os.path.join(env.working_directory, python_executable, "../../")) - - if explicit_path is not None: - venv_path = os.path.abspath(explicit_path) - - if not os.path.exists(venv_path): - Console.spinner( - f"Creating venv: {venv_path}", - VenvHelper.create_venv, - venv_path, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) - - Pip.set_executable(python_executable) - - @staticmethod - def create_venv(path): - subprocess.run( - [sys.executable, "-m", "venv", os.path.abspath(os.path.join(path, "../../"))], - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - stdin=subprocess.DEVNULL, - ) diff --git a/src/cpl_cli/configuration/version_settings.py b/src/cpl_cli/configuration/version_settings.py deleted file mode 100644 index 2e067a64..00000000 --- a/src/cpl_cli/configuration/version_settings.py +++ /dev/null @@ -1,42 +0,0 @@ -from typing import Optional - -from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC -from cpl_cli.configuration.version_settings_name_enum import VersionSettingsNameEnum - - -class VersionSettings(ConfigurationModelABC): - def __init__(self, major: str = None, minor: str = None, micro: str = None): - ConfigurationModelABC.__init__(self) - - self._major: Optional[str] = major - self._minor: Optional[str] = minor - self._micro: Optional[str] = micro if micro != "" else None - - @property - def major(self) -> str: - return self._major - - @property - def minor(self) -> str: - return self._minor - - @property - def micro(self) -> str: - return self._micro - - def to_str(self) -> str: - if self._micro is None: - return f"{self._major}.{self._minor}" - else: - return f"{self._major}.{self._minor}.{self._micro}" - - def to_dict(self) -> dict: - version = { - VersionSettingsNameEnum.major.value: self._major, - VersionSettingsNameEnum.minor.value: self._minor, - } - - if self._micro is not None: - version[VersionSettingsNameEnum.micro.value] = self._micro - - return version diff --git a/src/cpl_cli/configuration/version_settings_name_enum.py b/src/cpl_cli/configuration/version_settings_name_enum.py deleted file mode 100644 index 06c972c7..00000000 --- a/src/cpl_cli/configuration/version_settings_name_enum.py +++ /dev/null @@ -1,7 +0,0 @@ -from enum import Enum - - -class VersionSettingsNameEnum(Enum): - major = "Major" - minor = "Minor" - micro = "Micro" diff --git a/src/cpl_cli/configuration/workspace_settings.py b/src/cpl_cli/configuration/workspace_settings.py deleted file mode 100644 index 08c4f3fb..00000000 --- a/src/cpl_cli/configuration/workspace_settings.py +++ /dev/null @@ -1,32 +0,0 @@ -import traceback -from typing import Optional - -from cpl_cli.configuration.workspace_settings_name_enum import WorkspaceSettingsNameEnum -from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC -from cpl_core.console import Console - - -class WorkspaceSettings(ConfigurationModelABC): - def __init__( - self, - default_project: str = None, - projects: dict = None, - scripts: dict = None, - ): - ConfigurationModelABC.__init__(self) - - self._default_project: Optional[str] = default_project - self._projects: dict[str, str] = {} if projects is None else projects - self._scripts: dict[str, str] = {} if scripts is None else scripts - - @property - def default_project(self) -> str: - return self._default_project - - @property - def projects(self) -> dict[str, str]: - return self._projects - - @property - def scripts(self): - return self._scripts diff --git a/src/cpl_cli/configuration/workspace_settings_name_enum.py b/src/cpl_cli/configuration/workspace_settings_name_enum.py deleted file mode 100644 index acd742be..00000000 --- a/src/cpl_cli/configuration/workspace_settings_name_enum.py +++ /dev/null @@ -1,7 +0,0 @@ -from enum import Enum - - -class WorkspaceSettingsNameEnum(Enum): - default_project = "DefaultProject" - projects = "Projects" - scripts = "Scripts" diff --git a/src/cpl_cli/cpl-cli.json b/src/cpl_cli/cpl-cli.json deleted file mode 100644 index 5a0384ac..00000000 --- a/src/cpl_cli/cpl-cli.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "ProjectSettings": { - "Name": "cpl-cli", - "Version": { - "Major": "2024", - "Minor": "7", - "Micro": "0" - }, - "Author": "Sven Heidemann", - "AuthorEmail": "sven.heidemann@sh-edraft.de", - "Description": "CPL CLI", - "LongDescription": "CPL Command Line Interface", - "URL": "https://www.sh-edraft.de", - "CopyrightDate": "2020 - 2024", - "CopyrightName": "sh-edraft.de", - "LicenseName": "MIT", - "LicenseDescription": "MIT, see LICENSE for more details.", - "Dependencies": [ - "cpl-core>=2024.6.2024.07.0" - ], - "DevDependencies": [], - "PythonVersion": ">=3.12", - "PythonPath": { - "linux": "../../venv" - }, - "Classifiers": [] - }, - "BuildSettings": { - "ProjectType": "console", - "SourcePath": "", - "OutputPath": "../../dist", - "Main": "cpl_cli.main", - "EntryPoint": "cpl", - "IncludePackageData": true, - "Included": [ - "*/_templates" - ], - "Excluded": [ - "*/__pycache__", - "*/logs", - "*/tests" - ], - "PackageData": { - "cpl_cli": [ - "*.json", - ".cpl/*.py" - ] - }, - "ProjectReferences": [] - } -} \ No newline at end of file diff --git a/src/cpl_cli/error.py b/src/cpl_cli/error.py deleted file mode 100644 index 7cc16d96..00000000 --- a/src/cpl_cli/error.py +++ /dev/null @@ -1,15 +0,0 @@ -from cpl_core.console.foreground_color_enum import ForegroundColorEnum -from cpl_core.console.console import Console - - -class Error: - @staticmethod - def error(message: str): - Console.error(message) - Console.error("Run 'cpl help'\n") - - @staticmethod - def warn(message: str): - Console.set_foreground_color(ForegroundColorEnum.yellow) - Console.write_line(message, "\n") - Console.set_foreground_color(ForegroundColorEnum.default) diff --git a/src/cpl_cli/helper/__init__.py b/src/cpl_cli/helper/__init__.py deleted file mode 100644 index 1bd8e9a9..00000000 --- a/src/cpl_cli/helper/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli.helper" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/helper/dependencies.py b/src/cpl_cli/helper/dependencies.py deleted file mode 100644 index b4b5002b..00000000 --- a/src/cpl_cli/helper/dependencies.py +++ /dev/null @@ -1,22 +0,0 @@ -import pkg_resources - - -class Dependencies: - _packages = [] - _cpl_packages = [] - - _dependencies = dict(tuple(str(ws).split()) for ws in pkg_resources.working_set) - for p in _dependencies: - if str(p).startswith("cpl-"): - _cpl_packages.append([p, _dependencies[p]]) - continue - - _packages.append([p, _dependencies[p]]) - - @classmethod - def get_cpl_packages(cls) -> list[list]: - return cls._cpl_packages - - @classmethod - def get_packages(cls) -> list[list]: - return cls._packages diff --git a/src/cpl_cli/live_server/__init__.py b/src/cpl_cli/live_server/__init__.py deleted file mode 100644 index 1f64e6af..00000000 --- a/src/cpl_cli/live_server/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli.live_server" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/live_server/live_server_service.py b/src/cpl_cli/live_server/live_server_service.py deleted file mode 100644 index 077904f8..00000000 --- a/src/cpl_cli/live_server/live_server_service.py +++ /dev/null @@ -1,129 +0,0 @@ -import os -import time -from contextlib import suppress - -import psutil as psutil -from watchdog.events import FileSystemEventHandler -from watchdog.observers import Observer - -from cpl_cli.publish import PublisherService -from cpl_core.console.console import Console -from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC -from cpl_cli.configuration.build_settings import BuildSettings -from cpl_cli.configuration.project_settings import ProjectSettings -from cpl_cli.live_server.live_server_thread import LiveServerThread -from cpl_core.utils import String - - -class LiveServerService(FileSystemEventHandler): - def __init__( - self, - env: ApplicationEnvironmentABC, - project_settings: ProjectSettings, - build_settings: BuildSettings, - publisher: PublisherService, - ): - """ - Service for the live development server - :param env: - :param project_settings: - :param build_settings: - """ - FileSystemEventHandler.__init__(self) - - self._env = env - self._project_settings = project_settings - self._build_settings = build_settings - self._publisher = publisher - - self._src_dir = os.path.join(self._env.working_directory, self._build_settings.source_path) - self._wd = self._src_dir - self._ls_thread = None - self._observer = None - - self._args: list[str] = [] - self._is_dev = False - - def _start_observer(self): - """ - Starts the file changes observer - :return: - """ - self._observer = Observer() - self._observer.schedule(self, path=os.path.abspath(os.path.join(self._src_dir, "../")), recursive=True) - self._observer.start() - - def _restart(self): - """ - Restarts the CPL project - :return: - """ - for proc in psutil.process_iter(): - with suppress(Exception): - if proc.cmdline() == self._ls_thread.command: - proc.kill() - - Console.write_line("Restart\n") - while self._ls_thread.is_alive(): - time.sleep(1) - - self._start() - - def on_modified(self, event): - """ - Triggers when source file is modified - :param event: - :return: - """ - if event.is_directory: - return None - - # Event is modified, you can process it now - if str(event.src_path).endswith(".py"): - self._observer.stop() - self._restart() - - def _start(self): - self._build() - self._start_observer() - self._ls_thread = LiveServerThread( - self._project_settings.python_executable, self._wd, self._args, self._env, self._build_settings - ) - self._ls_thread.start() - self._ls_thread.join() - Console.close() - - def _build(self): - if self._is_dev: - return - - self._env.set_working_directory(self._src_dir) - self._publisher.build() - self._env.set_working_directory(self._src_dir) - self._wd = os.path.abspath( - os.path.join( - self._src_dir, - self._build_settings.output_path, - self._project_settings.name, - "build", - String.convert_to_snake_case(self._project_settings.name), - ) - ) - - def start(self, args: list[str]): - """ - Starts the CPL live development server - :param args: - :return: - """ - if self._build_settings.main == "": - Console.error("Project has no entry point.") - return - - if "dev" in args: - self._is_dev = True - args.remove("dev") - - self._args = args - Console.write_line("** CPL live development server is running **") - self._start() diff --git a/src/cpl_cli/live_server/live_server_thread.py b/src/cpl_cli/live_server/live_server_thread.py deleted file mode 100644 index a4301397..00000000 --- a/src/cpl_cli/live_server/live_server_thread.py +++ /dev/null @@ -1,86 +0,0 @@ -import os -import subprocess -import sys -import threading -from datetime import datetime - -from cpl_core.console.console import Console -from cpl_core.console.foreground_color_enum import ForegroundColorEnum -from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC -from cpl_cli.configuration import BuildSettings - - -class LiveServerThread(threading.Thread): - def __init__( - self, executable: str, path: str, args: list[str], env: ApplicationEnvironmentABC, build_settings: BuildSettings - ): - """ - Thread to start the CPL project for the live development server - :param executable: - :param path: - :param args: - :param env: - :param build_settings: - """ - threading.Thread.__init__(self) - - self._executable = os.path.abspath(executable) - - self._path = path - self._args = args - self._env = env - self._build_settings = build_settings - - self._main = "" - self._command = [] - self._env_vars = os.environ - - @property - def command(self) -> list[str]: - return self._command - - @property - def main(self) -> str: - return self._main - - def run(self): - """ - Starts the CPL project - :return: - """ - main = self._build_settings.main - if "." in self._build_settings.main: - length = len(self._build_settings.main.split(".")) - 1 - main = self._build_settings.main.split(".")[length] - - self._main = os.path.join(self._path, f"{main}.py") - if not os.path.isfile(self._main): - Console.error("Entry point main.py not found") - return - - # set cwd to src/ - self._env.set_working_directory(os.path.abspath(os.path.join(self._path))) - src_cwd = os.path.abspath(os.path.join(self._path, "../")) - if sys.platform == "win32": - self._env_vars["PYTHONPATH"] = ( - f"{src_cwd};" f"{os.path.join(self._env.working_directory, self._build_settings.source_path)}" - ) - else: - self._env_vars["PYTHONPATH"] = ( - f"{src_cwd}:" f"{os.path.join(self._env.working_directory, self._build_settings.source_path)}" - ) - - Console.set_foreground_color(ForegroundColorEnum.green) - Console.write_line("Read successfully") - Console.set_foreground_color(ForegroundColorEnum.cyan) - now = datetime.now() - Console.write_line(f'Started at {now.strftime("%Y-%m-%d %H:%M:%S")}\n\n') - Console.set_foreground_color(ForegroundColorEnum.default) - - self._command = [self._executable, self._main] - # if len(self._args) > 0: - # self._command.append(' '.join(self._args)) - for arg in self._args: - self._command.append(arg) - - subprocess.run(self._command, env=self._env_vars) diff --git a/src/cpl_cli/live_server/start_executable.py b/src/cpl_cli/live_server/start_executable.py deleted file mode 100644 index 2eef533a..00000000 --- a/src/cpl_cli/live_server/start_executable.py +++ /dev/null @@ -1,84 +0,0 @@ -import os -import subprocess -import sys -from datetime import datetime - -from cpl_core.console.console import Console -from cpl_core.console.foreground_color_enum import ForegroundColorEnum -from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC -from cpl_cli.configuration.build_settings import BuildSettings - - -class StartExecutable: - def __init__(self, env: ApplicationEnvironmentABC, build_settings: BuildSettings): - """ - Service to start the CPL project for the live development server - :param env: - :param build_settings: - """ - - self._executable = None - - self._env = env - self._build_settings = build_settings - - self._main = "" - self._command = [] - self._env_vars = os.environ - - self._set_venv() - - def _set_venv(self): - if self._executable is None or self._executable == sys.executable: - return - - path = os.path.abspath(os.path.dirname(os.path.dirname(self._executable))) - if sys.platform == "win32": - self._env_vars["PATH"] = f"{path}\\bin" + os.pathsep + os.environ.get("PATH", "") - else: - self._env_vars["PATH"] = f"{path}/bin" + os.pathsep + os.environ.get("PATH", "") - - self._env_vars["VIRTUAL_ENV"] = path - - def run(self, args: list[str], executable: str, path: str, output=True): - self._executable = os.path.abspath(os.path.join(self._env.working_directory, executable)) - if not os.path.exists(self._executable): - Console.error(f"Executable not found") - return - - main = self._build_settings.main - if "." in self._build_settings.main: - length = len(self._build_settings.main.split(".")) - 1 - main = self._build_settings.main.split(".")[length] - - self._main = os.path.join(path, f"{main}.py") - if not os.path.isfile(self._main): - Console.error("Entry point main.py not found") - return - - # set cwd to src/ - self._env.set_working_directory(os.path.abspath(os.path.join(path))) - src_cwd = os.path.abspath(os.path.join(path, "../")) - if sys.platform == "win32": - self._env_vars["PYTHONPATH"] = ( - f"{src_cwd};" f"{os.path.join(self._env.working_directory, self._build_settings.source_path)}" - ) - else: - self._env_vars["PYTHONPATH"] = ( - f"{src_cwd}:" f"{os.path.join(self._env.working_directory, self._build_settings.source_path)}" - ) - - if output: - Console.set_foreground_color(ForegroundColorEnum.green) - Console.write_line("Read successfully") - Console.set_foreground_color(ForegroundColorEnum.cyan) - Console.write_line(f'Started at {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}\n\n') - Console.set_foreground_color(ForegroundColorEnum.default) - - self._command = [self._executable, self._main] - # if len(self._args) > 0: - # self._command.append(' '.join(self._args)) - for arg in args: - self._command.append(arg) - - subprocess.run(self._command, env=self._env_vars) diff --git a/src/cpl_cli/main.py b/src/cpl_cli/main.py deleted file mode 100644 index 4374caec..00000000 --- a/src/cpl_cli/main.py +++ /dev/null @@ -1,56 +0,0 @@ -import importlib.metadata -from typing import Type - -from cpl_cli.cli import CLI -from cpl_cli.startup import Startup -from cpl_cli.startup_argument_extension import StartupArgumentExtension -from cpl_cli.startup_migration_extension import StartupMigrationExtension -from cpl_cli.startup_workspace_extension import StartupWorkspaceExtension -from cpl_core.application.application_builder import ApplicationBuilder -from cpl_core.application.startup_extension_abc import StartupExtensionABC -from cpl_core.console import Console - - -def get_startup_extensions() -> list[Type[StartupExtensionABC]]: - blacklisted_packages = ["cpl-cli"] - startup_extensions = [] - - installed_packages = importlib.metadata.distributions() - for p in installed_packages: - if not p.name.startswith("cpl-") or p.name in blacklisted_packages: - continue - - package = p.name.replace("-", "_") - loaded_package = __import__(package) - if "__cli_startup_extension__" not in dir(loaded_package): - continue - startup_extensions.append(loaded_package.__cli_startup_extension__) - - return startup_extensions - - -def main(): - app_builder = ApplicationBuilder(CLI) - app_builder.use_startup(Startup) - app_builder.use_extension(StartupWorkspaceExtension) - app_builder.use_extension(StartupArgumentExtension) - app_builder.use_extension(StartupMigrationExtension) - for extension in get_startup_extensions(): - app_builder.use_extension(extension) - - app_builder.build().run() - Console.write_line() - - -if __name__ == "__main__": - main() - -# (( -# ( `) -# ; / , -# / \/ -# / | -# / ~/ -# / ) ) ~ edraft -# ___// | / -# `--' \_~-, diff --git a/src/cpl_cli/migrations/__init__.py b/src/cpl_cli/migrations/__init__.py deleted file mode 100644 index 7749078a..00000000 --- a/src/cpl_cli/migrations/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli.migrations" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/migrations/base/__init__.py b/src/cpl_cli/migrations/base/__init__.py deleted file mode 100644 index b93bbf1b..00000000 --- a/src/cpl_cli/migrations/base/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli.migrations.base" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/migrations/base/migration_abc.py b/src/cpl_cli/migrations/base/migration_abc.py deleted file mode 100644 index 9848ea5f..00000000 --- a/src/cpl_cli/migrations/base/migration_abc.py +++ /dev/null @@ -1,15 +0,0 @@ -from abc import ABC, abstractmethod - - -class MigrationABC(ABC): - @abstractmethod - def __init__(self, version: str): - self._version = version - - @property - def version(self) -> str: - return self._version - - @abstractmethod - def migrate(self): - pass diff --git a/src/cpl_cli/migrations/base/migration_service_abc.py b/src/cpl_cli/migrations/base/migration_service_abc.py deleted file mode 100644 index 4d6d9639..00000000 --- a/src/cpl_cli/migrations/base/migration_service_abc.py +++ /dev/null @@ -1,11 +0,0 @@ -from abc import ABC, abstractmethod - - -class MigrationServiceABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - def migrate_from(self, version: str): - pass diff --git a/src/cpl_cli/migrations/migration_2022_10.py b/src/cpl_cli/migrations/migration_2022_10.py deleted file mode 100644 index ae54b684..00000000 --- a/src/cpl_cli/migrations/migration_2022_10.py +++ /dev/null @@ -1,10 +0,0 @@ -from cpl_cli.migrations.base.migration_abc import MigrationABC - - -class Migration202210(MigrationABC): - def __init__(self): - MigrationABC.__init__(self, "2022.10") - - def migrate(self): - # This migration could be deleted, but stays as an example. - pass diff --git a/src/cpl_cli/migrations/service/__init__.py b/src/cpl_cli/migrations/service/__init__.py deleted file mode 100644 index 51ba1ed3..00000000 --- a/src/cpl_cli/migrations/service/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli.migrations.service" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/migrations/service/migration_service.py b/src/cpl_cli/migrations/service/migration_service.py deleted file mode 100644 index 4779ed52..00000000 --- a/src/cpl_cli/migrations/service/migration_service.py +++ /dev/null @@ -1,20 +0,0 @@ -from packaging import version - -from cpl_cli.migrations.base.migration_abc import MigrationABC -from cpl_cli.migrations.base.migration_service_abc import MigrationServiceABC -from cpl_core.dependency_injection import ServiceProviderABC - - -class MigrationService(MigrationServiceABC): - def __init__(self, services: ServiceProviderABC): - MigrationServiceABC.__init__(self) - - self._services = services - - def migrate_from(self, _v: str): - for migration_type in MigrationABC.__subclasses__(): - migration: MigrationABC = self._services.get_service(migration_type) - if version.parse(migration.version) <= version.parse(_v): - continue - - migration.migrate() diff --git a/src/cpl_cli/publish/__init__.py b/src/cpl_cli/publish/__init__.py deleted file mode 100644 index 10d17087..00000000 --- a/src/cpl_cli/publish/__init__.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli.publish" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports: -from .publisher_abc import PublisherABC -from .publisher_service import PublisherService - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/publish/publisher_abc.py b/src/cpl_cli/publish/publisher_abc.py deleted file mode 100644 index 01f79230..00000000 --- a/src/cpl_cli/publish/publisher_abc.py +++ /dev/null @@ -1,33 +0,0 @@ -from abc import abstractmethod, ABC - - -class PublisherABC(ABC): - @abstractmethod - def __init__(self): - ABC.__init__(self) - - @property - @abstractmethod - def source_path(self) -> str: - pass - - @property - @abstractmethod - def dist_path(self) -> str: - pass - - @abstractmethod - def include(self, path: str): - pass - - @abstractmethod - def exclude(self, path: str): - pass - - @abstractmethod - def build(self): - pass - - @abstractmethod - def publish(self): - pass diff --git a/src/cpl_cli/publish/publisher_service.py b/src/cpl_cli/publish/publisher_service.py deleted file mode 100644 index 5aa2de96..00000000 --- a/src/cpl_cli/publish/publisher_service.py +++ /dev/null @@ -1,519 +0,0 @@ -import os -import shutil -import sys -from string import Template as stringTemplate - -import setuptools -from packaging import version -from setuptools import sandbox - -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.environment.application_environment_abc import ApplicationEnvironmentABC -from cpl_cli.configuration.build_settings import BuildSettings -from cpl_cli.configuration.project_settings import ProjectSettings -from cpl_cli.publish.publisher_abc import PublisherABC -from cpl_cli._templates.build.init_template import InitTemplate -from cpl_cli._templates.publish.setup_template import SetupTemplate - - -class PublisherService(PublisherABC): - def __init__( - self, config: ConfigurationABC, env: ApplicationEnvironmentABC, project: ProjectSettings, build: BuildSettings - ): - """ - Service to build or publish files for distribution - :param config: - :param env: - :param project: - :param build: - """ - PublisherABC.__init__(self) - - self._config = config - self._env = env - self._project_settings = project - self._build_settings = build - - self._source_path = os.path.join(self._env.working_directory, self._build_settings.source_path) - self._output_path = os.path.join(self._env.working_directory, self._build_settings.output_path) - - self._included_files: list[str] = [] - self._included_dirs: list[str] = [] - self._distributed_files: list[str] = [] - - self._path_mark = "/" - if sys.platform == "win32": - self._path_mark = "\\" - - self._src_path_part = f"src{self._path_mark}" - - @property - def source_path(self) -> str: - return self._source_path - - @property - def dist_path(self) -> str: - return self._output_path - - def _get_module_name_from_dirs(self, file: str) -> str: - """ - Extracts module name from directories - :param file: - :return: - """ - if self._src_path_part in file: - file = file.split(self._src_path_part)[1].replace(self._src_path_part, "", 1) - - dirs = os.path.dirname(file).split(self._path_mark) - for d in dirs: - if d.__contains__("."): - dirs.remove(d) - - if len(dirs) == 0: - return os.path.basename(file) - else: - return ".".join(dirs) - - @staticmethod - def _delete_path(path: str): - """ - Deletes full path tree - :param path: - :return: - """ - if os.path.isdir(path): - try: - shutil.rmtree(path) - except Exception as e: - Console.error(f"{e}") - sys.exit() - - @staticmethod - def _create_path(path: str): - """ - Creates full path tree - :param path: - :return: - """ - if not os.path.isdir(path): - try: - os.makedirs(path) - except Exception as e: - Console.error(f"{e}") - sys.exit() - - def _is_path_included(self, path: str) -> bool: - """ - Checks if the path is included - :param path: - :return: - """ - for included in self._build_settings.included: - if included.startswith("*"): - included = included.replace("*", "") - - if included in path and path not in self._build_settings.excluded: - return True - - return False - - def _is_path_excluded(self, path: str) -> bool: - """ - Checks if the path is excluded - :param path: - :return: - """ - for excluded in self._build_settings.excluded: - if excluded.startswith("*"): - excluded = excluded.replace("*", "") - - if excluded in path and not self._is_path_included(path): - return True - - return False - - def _is_file_excluded(self, file: str) -> bool: - """ - Checks if the file is excluded - :param file: - :return: - """ - for excluded in self._build_settings.excluded: - if excluded.startswith("*"): - excluded = excluded.replace("*", "") - - if excluded in file and not self._is_path_included(file): - return True - - return False - - def _read_sources_from_path(self, path: str): - """ - Reads all source files from given path - :param path: - :return: - """ - for r, d, f in os.walk(path): - for file in f: - relative_path = os.path.relpath(r) - file_path = os.path.join(relative_path, os.path.relpath(file)) - if self._is_file_excluded(file_path): - continue - - if len(d) > 0: - for directory in d: - empty_dir = os.path.join(os.path.dirname(file_path), directory) - if len(os.listdir(empty_dir)) == 0: - self._included_dirs.append(empty_dir) - - if not self._is_path_excluded(relative_path): - self._included_files.append(os.path.relpath(file_path)) - - def _read_sources(self): - """ - Reads all source files and save included files - :return: - """ - for file in self._build_settings.included: - rel_path = os.path.relpath(file) - if os.path.isdir(rel_path): - for r, d, f in os.walk(rel_path): - for sub_file in f: - relative_path = os.path.relpath(r) - file_path = os.path.join(relative_path, os.path.relpath(sub_file)) - - self._included_files.append(os.path.relpath(file_path)) - - elif os.path.isfile(rel_path): - self._included_files.append(rel_path) - - self._read_sources_from_path(self._source_path) - - for project in self._build_settings.project_references: - project = os.path.abspath(os.path.join(self._source_path, project)) - if not os.path.isfile(os.path.abspath(project)): - Console.error(f"Cannot import project: {project}") - return - - self.exclude(f"*/{os.path.basename(project)}") - self._read_sources_from_path(os.path.dirname(project)) - - def _create_packages(self): - """ - Writes information from template to all included __init__.py - :return: - """ - for file in self._included_files: - if not file.endswith("__init__.py"): - continue - - template_content = "" - module_file_lines: list[str] = [] - - title = self._get_module_name_from_dirs(file) - if title == "": - title = self._project_settings.name - - module_py_lines: list[str] = [] - imports = "" - - with open(file, "r") as py_file: - module_file_lines = py_file.readlines() - py_file.close() - - if len(module_file_lines) == 0: - imports = "# imports:" - else: - is_started = False - build_ignore = False - for line in module_file_lines: - if line.__contains__("# imports"): - is_started = True - - if line.__contains__("# build-ignore"): - build_ignore = True - - if line.__contains__("# build-ignore-end") and is_started: - module_py_lines.append("# build-ignore-end".replace("\n", "")) - build_ignore = False - - if ( - ((line.__contains__("from") or line.__contains__("import")) and is_started) - or line.startswith("__cli_startup_extension__") - or build_ignore - ): - module_py_lines.append(line.replace("\n", "")) - - if len(module_py_lines) > 0: - imports = "\n".join(module_py_lines) - - template_content = stringTemplate(InitTemplate.get_init_py()).substitute( - Name=self._project_settings.name, - Description=self._project_settings.description, - LongDescription=self._project_settings.long_description, - CopyrightDate=self._project_settings.copyright_date, - CopyrightName=self._project_settings.copyright_name, - LicenseName=self._project_settings.license_name, - LicenseDescription=self._project_settings.license_description, - Title=title if title is not None and title != "" else self._project_settings.name, - Author=self._project_settings.author, - Version=version.parse(self._project_settings.version.to_str()), - Major=self._project_settings.version.major, - Minor=self._project_settings.version.minor, - Micro=self._project_settings.version.micro, - Imports=imports, - ) - - with open(file, "w+") as py_file: - py_file.write(template_content) - py_file.close() - - def _dist_files(self): - """ - Copies all included source files to dist_path - :return: - """ - build_path = os.path.join(self._output_path) - self._delete_path(build_path) - self._create_path(build_path) - - for file in self._included_files: - dist_file = file - if self._src_path_part in dist_file: - dist_file = dist_file.replace(self._src_path_part, "", 1) - - output_path = os.path.join(build_path, os.path.dirname(dist_file)) - output_file = os.path.join(build_path, dist_file) - - try: - if not os.path.isdir(output_path): - os.makedirs(output_path, exist_ok=True) - except Exception as e: - Console.error(__name__, f"Cannot create directories: {output_path} -> {e}") - return - - try: - self._distributed_files.append(output_file) - shutil.copy(os.path.abspath(file), output_file) - except Exception as e: - Console.error(__name__, f"Cannot copy file: {file} to {output_path} -> {e}") - return - - for empty_dir in self._included_dirs: - dist_dir = empty_dir - if self._src_path_part in dist_dir: - dist_dir = dist_dir.replace(self._src_path_part, "", 1) - - output_path = os.path.join(build_path, dist_dir) - if not os.path.isdir(output_path): - os.makedirs(output_path) - - def _clean_dist_files(self): - """ - Deletes all included source files from dist_path - :return: - """ - paths: list[str] = [] - for file in self._distributed_files: - paths.append(os.path.dirname(file)) - - if os.path.isfile(file): - os.remove(file) - - for path in paths: - if path != self._output_path and os.path.isdir(path): - shutil.rmtree(path) - - def _create_setup(self): - """ - Generates setup.py - - Dependencies: ProjectSettings, BuildSettings - :return: - """ - setup_file = os.path.join(self._output_path, "setup.py") - if os.path.isfile(setup_file): - os.remove(setup_file) - - entry_points = {} - if self._build_settings.main != "": - main = None - try: - main_name = self._build_settings.main - - if "." in self._build_settings.main: - length = len(self._build_settings.main.split(".")) - main_name = self._build_settings.main.split(".")[length - 1] - - sys.path.insert(0, os.path.join(self._source_path, "../")) - main_mod = __import__(self._build_settings.main) - main = getattr(main_mod, main_name) - except Exception as e: - Console.error("Could not find entry point", str(e)) - return - - if main is None or not callable(main) and not hasattr(main, "main"): - Console.error("Could not find entry point") - return - - if callable(main): - mod_name = main.__module__ - func_name = main.__name__ - else: - mod_name = main.__name__ - func_name = main.main.__name__ - - entry_points = {"console_scripts": [f"{self._build_settings.entry_point} = {mod_name}:{func_name}"]} - - with open(setup_file, "w+") as setup_py: - setup_string = stringTemplate(SetupTemplate.get_setup_py()).substitute( - Name=self._project_settings.name, - Version=self._project_settings.version.to_str(), - Packages=setuptools.find_packages(where=self._output_path, exclude=self._build_settings.excluded), - URL=self._project_settings.url, - LicenseName=self._project_settings.license_name, - Author=self._project_settings.author, - AuthorMail=self._project_settings.author_email, - IncludePackageData=self._build_settings.include_package_data, - Description=self._project_settings.description, - PyRequires=self._project_settings.python_version, - Dependencies=self._project_settings.dependencies, - EntryPoints=entry_points, - PackageData=self._build_settings.package_data, - ) - setup_py.write(setup_string) - setup_py.close() - - def _run_setup(self): - """ - Starts setup.py - :return: - """ - setup_py = os.path.join(self._output_path, "setup.py") - if not os.path.isfile(setup_py): - Console.error(__name__, f"setup.py not found in {self._output_path}") - return - - try: - sandbox.run_setup( - os.path.abspath(setup_py), - [ - "sdist", - f'--dist-dir={os.path.join(self._output_path, "setup")}', - "bdist_wheel", - f'--bdist-dir={os.path.join(self._output_path, "bdist")}', - f'--dist-dir={os.path.join(self._output_path, "setup")}', - ], - ) - os.remove(setup_py) - except Exception as e: - Console.error("Executing setup.py failed", str(e)) - - def include(self, path: str): - """ - Includes given path from sources - :param path: - :return: - """ - self._build_settings.included.append(path) - - def exclude(self, path: str): - """ - Excludes given path from sources - :param path: - :return: - """ - self._build_settings.excluded.append(path) - - def build(self): - """ - Build the CPL project to dist_path/build - - 1. Reads all included source files - 2. Writes informations from template to all included __init__.py - 3. Copies all included source files to dist_path/build - :return: - """ - self._env.set_working_directory( - os.path.join(self._env.working_directory, "../") - ) # probably causing some errors (#125) - self.exclude(f"*/{self._project_settings.name}.json") - self._output_path = os.path.abspath(os.path.join(self._output_path, self._project_settings.name, "build")) - - Console.spinner( - "Reading source files:", - self._read_sources, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.blue, - ) - Console.spinner( - "Creating internal packages:", - self._create_packages, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.blue, - ) - Console.spinner( - "Building application:", - self._dist_files, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.blue, - ) - Console.write_line() - - def publish(self): - """ - Publishes the CPL project to dist_path/publish - - 1. Builds the project - 2. Generates setup.py - 3. Start setup.py - 4. Remove all included source from dist_path/publish - :return: - """ - self._env.set_working_directory( - os.path.join(self._env.working_directory, "../") - ) # probably causing some errors (#125) - self.exclude(f"*/{self._project_settings.name}.json") - self._output_path = os.path.abspath(os.path.join(self._output_path, self._project_settings.name, "publish")) - - Console.write_line("Build:") - Console.spinner( - "Reading source files:", - self._read_sources, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.blue, - ) - - Console.spinner( - "Creating internal packages:", - self._create_packages, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.blue, - ) - - Console.spinner( - "Building application:", - self._dist_files, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.blue, - ) - - Console.write_line("\nPublish:") - Console.spinner( - "Generating setup.py:", - self._create_setup, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.blue, - ) - - 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.write_line() diff --git a/src/cpl_cli/source_creator/__init__.py b/src/cpl_cli/source_creator/__init__.py deleted file mode 100644 index d98351dc..00000000 --- a/src/cpl_cli/source_creator/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli.source_creator" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/source_creator/template_builder.py b/src/cpl_cli/source_creator/template_builder.py deleted file mode 100644 index a5691870..00000000 --- a/src/cpl_cli/source_creator/template_builder.py +++ /dev/null @@ -1,55 +0,0 @@ -import json -import os - -from cpl_cli.abc.file_template_abc import FileTemplateABC -from cpl_cli.configuration import WorkspaceSettings, WorkspaceSettingsNameEnum -from cpl_core.console import Console, ForegroundColorEnum - - -class TemplateBuilder: - @staticmethod - def build_cpl_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.build_cpl_file, - path, - ws_dict, - text_foreground_color=ForegroundColorEnum.green, - spinner_foreground_color=ForegroundColorEnum.cyan, - ) - - @staticmethod - def build(file_path: str, template: FileTemplateABC): - """ - Creates template - :param file_path: - :param template: - :return: - """ - if not os.path.isdir(os.path.dirname(file_path)): - os.makedirs(os.path.dirname(file_path)) - - with open(file_path, "w") as file: - file.write(template.value) - file.close() diff --git a/src/cpl_cli/startup.py b/src/cpl_cli/startup.py deleted file mode 100644 index f8958547..00000000 --- a/src/cpl_cli/startup.py +++ /dev/null @@ -1,81 +0,0 @@ -import os - -from cpl_cli.command.add_service import AddService -from cpl_cli.command.build_service import BuildService -from cpl_cli.command.custom_script_service import CustomScriptService -from cpl_cli.command.generate_service import GenerateService -from cpl_cli.command.help_service import HelpService -from cpl_cli.command.install_service import InstallService -from cpl_cli.command.new_service import NewService -from cpl_cli.command.publish_service import PublishService -from cpl_cli.command.remove_service import RemoveService -from cpl_cli.command.run_service import RunService -from cpl_cli.command.start_service import StartService -from cpl_cli.command.uninstall_service import UninstallService -from cpl_cli.command.update_service import UpdateService -from cpl_cli.command.version_service import VersionService -from cpl_cli.validators.project_validator import ProjectValidator - -from cpl_cli.validators.workspace_validator import WorkspaceValidator - -from cpl_core.console import Console - -from cpl_cli.error import Error -from cpl_cli.live_server.live_server_service import LiveServerService -from cpl_cli.publish.publisher_abc import PublisherABC -from cpl_cli.publish.publisher_service import PublisherService -from cpl_core.application.startup_abc import StartupABC -from cpl_core.configuration.configuration_abc import ConfigurationABC -from cpl_core.dependency_injection.service_collection_abc import ServiceCollectionABC -from cpl_core.dependency_injection.service_provider_abc import ServiceProviderABC -from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC - - -class Startup(StartupABC): - def __init__(self): - StartupABC.__init__(self) - - def configure_configuration( - self, configuration: ConfigurationABC, environment: ApplicationEnvironmentABC - ) -> ConfigurationABC: - environment.set_runtime_directory(os.path.dirname(__file__)) - configuration.argument_error_function = Error.error - - configuration.add_environment_variables("PYTHON_") - configuration.add_environment_variables("CPL_") - - is_unittest = configuration.get_configuration("IS_UNITTEST") - if is_unittest == "YES": - Console.disable() - - configuration.add_json_file( - "appsettings.json", path=environment.runtime_directory, optional=False, output=False - ) - - return configuration - - def configure_services( - self, services: ServiceCollectionABC, environment: ApplicationEnvironmentABC - ) -> ServiceProviderABC: - services.add_transient(PublisherABC, PublisherService) - services.add_transient(LiveServerService) - - services.add_transient(WorkspaceValidator) - services.add_transient(ProjectValidator) - - services.add_transient(AddService) - services.add_transient(BuildService) - services.add_transient(CustomScriptService) - services.add_transient(GenerateService) - services.add_transient(HelpService) - services.add_transient(InstallService) - services.add_transient(NewService) - services.add_transient(PublishService) - services.add_transient(RemoveService) - services.add_transient(RunService) - services.add_transient(StartService) - services.add_transient(UninstallService) - services.add_transient(UpdateService) - services.add_transient(VersionService) - - return services.build_service_provider() diff --git a/src/cpl_cli/startup_argument_extension.py b/src/cpl_cli/startup_argument_extension.py deleted file mode 100644 index b86dc06d..00000000 --- a/src/cpl_cli/startup_argument_extension.py +++ /dev/null @@ -1,114 +0,0 @@ -from cpl_cli.command.add_service import AddService -from cpl_cli.command.build_service import BuildService -from cpl_cli.command.generate_service import GenerateService -from cpl_cli.command.help_service import HelpService -from cpl_cli.command.install_service import InstallService -from cpl_cli.command.new_service import NewService -from cpl_cli.command.publish_service import PublishService -from cpl_cli.command.remove_service import RemoveService -from cpl_cli.command.run_service import RunService -from cpl_cli.command.start_service import StartService -from cpl_cli.command.uninstall_service import UninstallService -from cpl_cli.command.update_service import UpdateService -from cpl_cli.command.version_service import VersionService -from cpl_cli.validators.project_validator import ProjectValidator -from cpl_cli.validators.workspace_validator import WorkspaceValidator -from cpl_core.application.startup_extension_abc import StartupExtensionABC -from cpl_core.configuration.argument_type_enum import ArgumentTypeEnum -from cpl_core.configuration.configuration_abc import ConfigurationABC -from cpl_core.dependency_injection.service_collection_abc import ServiceCollectionABC -from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC - - -class StartupArgumentExtension(StartupExtensionABC): - def __init__(self): - pass - - def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): - config.create_console_argument( - ArgumentTypeEnum.Executable, "", "add", ["a", "A"], AddService, True, validators=[WorkspaceValidator] - ).add_console_argument(ArgumentTypeEnum.Flag, "--", "simulate", ["s", "S"]) - - config.create_console_argument( - ArgumentTypeEnum.Executable, "", "build", ["b", "B"], BuildService, True, validators=[ProjectValidator] - ) - - config.create_console_argument(ArgumentTypeEnum.Executable, "", "generate", ["g", "G"], GenerateService, True) - - config.create_console_argument( - ArgumentTypeEnum.Executable, "", "install", ["i", "I"], InstallService, True, validators=[ProjectValidator] - ).add_console_argument(ArgumentTypeEnum.Flag, "--", "dev", ["d", "D"]).add_console_argument( - ArgumentTypeEnum.Flag, "--", "virtual", ["v", "V"] - ).add_console_argument( - ArgumentTypeEnum.Flag, "--", "simulate", ["s", "S"] - ).add_console_argument( - ArgumentTypeEnum.Flag, "--", "cpl-prod", ["cp", "CP"] - ).add_console_argument( - ArgumentTypeEnum.Flag, "--", "cpl-exp", ["ce", "CE"] - ).add_console_argument( - ArgumentTypeEnum.Flag, "--", "cpl-dev", ["cd", "CD"] - ) - - config.create_console_argument( - ArgumentTypeEnum.Executable, "", "new", ["n", "N"], NewService, True - ).add_console_argument(ArgumentTypeEnum.Flag, "--", "async", ["a", "A"]).add_console_argument( - ArgumentTypeEnum.Flag, "--", "application-base", ["ab", "AB"] - ).add_console_argument( - ArgumentTypeEnum.Flag, "--", "startup", ["s", "S"] - ).add_console_argument( - ArgumentTypeEnum.Flag, "--", "service-providing", ["sp", "SP"] - ).add_console_argument( - ArgumentTypeEnum.Flag, "--", "nothing", ["n", "N"] - ).add_console_argument( - ArgumentTypeEnum.Flag, "--", "venv", ["v", "V"] - ).add_console_argument( - ArgumentTypeEnum.Flag, "--", "base", ["b", "B"] - ) - - config.create_console_argument( - ArgumentTypeEnum.Executable, "", "publish", ["p", "P"], PublishService, True, validators=[ProjectValidator] - ) - - config.create_console_argument( - ArgumentTypeEnum.Executable, "", "remove", ["r", "R"], RemoveService, True, validators=[WorkspaceValidator] - ).add_console_argument(ArgumentTypeEnum.Flag, "--", "simulate", ["s", "S"]) - - config.create_console_argument( - ArgumentTypeEnum.Executable, "", "run", [], RunService, True, validators=[ProjectValidator] - ).add_console_argument(ArgumentTypeEnum.Flag, "--", "dev", ["d", "D"]) - - config.create_console_argument( - ArgumentTypeEnum.Executable, "", "start", ["s", "S"], StartService, True, validators=[ProjectValidator] - ).add_console_argument(ArgumentTypeEnum.Flag, "--", "dev", ["d", "D"]) - - config.create_console_argument( - ArgumentTypeEnum.Executable, - "", - "uninstall", - ["ui", "UI"], - UninstallService, - True, - validators=[ProjectValidator], - ).add_console_argument(ArgumentTypeEnum.Flag, "--", "dev", ["d", "D"]).add_console_argument( - ArgumentTypeEnum.Flag, "--", "virtual", ["v", "V"] - ).add_console_argument( - ArgumentTypeEnum.Flag, "--", "simulate", ["s", "S"] - ) - - config.create_console_argument( - ArgumentTypeEnum.Executable, "", "update", ["u", "U"], UpdateService, True, validators=[ProjectValidator] - ).add_console_argument(ArgumentTypeEnum.Flag, "--", "simulate", ["s", "S"]).add_console_argument( - ArgumentTypeEnum.Flag, "--", "cpl-prod", ["cp", "CP"] - ).add_console_argument( - ArgumentTypeEnum.Flag, "--", "cpl-exp", ["ce", "CE"] - ).add_console_argument( - ArgumentTypeEnum.Flag, "--", "cpl-dev", ["cd", "CD"] - ) - - config.create_console_argument(ArgumentTypeEnum.Executable, "", "version", ["v", "V"], VersionService, True) - - config.for_each_argument(lambda a: a.add_console_argument(ArgumentTypeEnum.Flag, "--", "help", ["h", "H"])) - config.create_console_argument(ArgumentTypeEnum.Executable, "", "help", ["h", "H"], HelpService) - - def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC): - pass diff --git a/src/cpl_cli/startup_migration_extension.py b/src/cpl_cli/startup_migration_extension.py deleted file mode 100644 index c8597837..00000000 --- a/src/cpl_cli/startup_migration_extension.py +++ /dev/null @@ -1,20 +0,0 @@ -from cpl_cli.migrations.base.migration_abc import MigrationABC -from cpl_cli.migrations.base.migration_service_abc import MigrationServiceABC -from cpl_cli.migrations.migration_2022_10 import Migration202210 -from cpl_cli.migrations.service.migration_service import MigrationService -from cpl_core.application.startup_extension_abc import StartupExtensionABC -from cpl_core.configuration.configuration_abc import ConfigurationABC -from cpl_core.dependency_injection.service_collection_abc import ServiceCollectionABC -from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC - - -class StartupMigrationExtension(StartupExtensionABC): - def __init__(self): - pass - - def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): - pass - - def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC): - services.add_singleton(MigrationServiceABC, MigrationService) - services.add_singleton(MigrationABC, Migration202210) diff --git a/src/cpl_cli/startup_workspace_extension.py b/src/cpl_cli/startup_workspace_extension.py deleted file mode 100644 index 2c79e10e..00000000 --- a/src/cpl_cli/startup_workspace_extension.py +++ /dev/null @@ -1,57 +0,0 @@ -import os -from typing import Optional - -from cpl_cli.command.custom_script_service import CustomScriptService -from cpl_cli.configuration.workspace_settings import WorkspaceSettings -from cpl_core.application.startup_extension_abc import StartupExtensionABC -from cpl_core.configuration.argument_type_enum import ArgumentTypeEnum -from cpl_core.configuration.configuration_abc import ConfigurationABC -from cpl_core.dependency_injection.service_collection_abc import ServiceCollectionABC -from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC -from cpl_core.utils.string import String - - -class StartupWorkspaceExtension(StartupExtensionABC): - def __init__(self): - pass - - @staticmethod - def _search_project_json(working_directory: str) -> Optional[str]: - project_name = None - name = os.path.basename(working_directory) - for r, d, f in os.walk(working_directory): - for file in f: - if file.endswith(".json"): - f_name = file.split(".json")[0] - if ( - f_name == name - or String.convert_to_camel_case(f_name).lower() == String.convert_to_camel_case(name).lower() - ): - project_name = f_name - break - - return project_name - - def _read_cpl_environment(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): - workspace: Optional[WorkspaceSettings] = config.get_configuration(WorkspaceSettings) - config.add_configuration("PATH_WORKSPACE", env.working_directory) - if workspace is not None: - for script in workspace.scripts: - config.create_console_argument(ArgumentTypeEnum.Executable, "", script, [], CustomScriptService) - return - - project = self._search_project_json(env.working_directory) - if project is not None: - project = f"{project}.json" - - if project is None: - return - - config.add_json_file(project, optional=True, output=False) - - def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): - config.add_json_file("cpl-workspace.json", path=env.working_directory, optional=True, output=False) - self._read_cpl_environment(config, env) - - def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC): - pass diff --git a/src/cpl_cli/validators/__init__.py b/src/cpl_cli/validators/__init__.py deleted file mode 100644 index 873d1881..00000000 --- a/src/cpl_cli/validators/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli CPL CLI -~~~~~~~~~~~~~~~~~~~ - -CPL Command Line Interface - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_cli.validators" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.10.0" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="10", micro="0") diff --git a/src/cpl_cli/validators/project_validator.py b/src/cpl_cli/validators/project_validator.py deleted file mode 100644 index 75b22785..00000000 --- a/src/cpl_cli/validators/project_validator.py +++ /dev/null @@ -1,35 +0,0 @@ -import os - -from cpl_cli import Error -from cpl_cli.configuration import WorkspaceSettings, ProjectSettings -from cpl_core.configuration import ConfigurationABC -from cpl_core.configuration.validator_abc import ValidatorABC -from cpl_core.environment import ApplicationEnvironmentABC - - -class ProjectValidator(ValidatorABC): - def __init__( - self, - config: ConfigurationABC, - env: ApplicationEnvironmentABC, - workspace: WorkspaceSettings, - project: ProjectSettings, - ): - self._config: ConfigurationABC = config - self._env: ApplicationEnvironmentABC = env - self._workspace: WorkspaceSettings = workspace - self._project: ProjectSettings = project - - ValidatorABC.__init__(self) - - def validate(self) -> bool: - if self._project is None and self._workspace is not None: - project = self._workspace.projects[self._workspace.default_project] - self._config.add_json_file(project, optional=True, output=False) - self._project = self._config.get_configuration(ProjectSettings) - self._env.set_working_directory(os.path.join(self._env.working_directory, os.path.dirname(project))) - - result = self._project is not None or self._workspace is not None - if not result: - Error.error("The command requires to be run in an CPL project, but a project could not be found.") - return result diff --git a/src/cpl_cli/validators/workspace_validator.py b/src/cpl_cli/validators/workspace_validator.py deleted file mode 100644 index 994d0166..00000000 --- a/src/cpl_cli/validators/workspace_validator.py +++ /dev/null @@ -1,16 +0,0 @@ -from cpl_cli import Error -from cpl_cli.configuration import WorkspaceSettings -from cpl_core.configuration.validator_abc import ValidatorABC - - -class WorkspaceValidator(ValidatorABC): - def __init__(self, workspace: WorkspaceSettings): - self._workspace = workspace - - ValidatorABC.__init__(self) - - def validate(self) -> bool: - result = self._workspace is not None - if not result: - Error.error("The command requires to be run in an CPL workspace, but a workspace could not be found.") - return result diff --git a/src/cpl_core/__init__.py b/src/cpl_core/__init__.py index 062b60a5..8b137891 100644 --- a/src/cpl_core/__init__.py +++ b/src/cpl_core/__init__.py @@ -1,26 +1 @@ -# -*- coding: utf-8 -*- -""" -cpl-core CPL core -~~~~~~~~~~~~~~~~~~~ - -CPL core package - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_core" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.6.0" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="6", micro="0") diff --git a/src/cpl_core/application/__init__.py b/src/cpl_core/application/__init__.py index bddf35ab..5ce8988c 100644 --- a/src/cpl_core/application/__init__.py +++ b/src/cpl_core/application/__init__.py @@ -1,32 +1,6 @@ -# -*- coding: utf-8 -*- - -""" -cpl-core CPL core -~~~~~~~~~~~~~~~~~~~ - -CPL core package - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_core.application" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.6.0" - -from collections import namedtuple - - -# imports: from .application_abc import ApplicationABC from .application_builder import ApplicationBuilder from .application_builder_abc import ApplicationBuilderABC from .application_extension_abc import ApplicationExtensionABC from .startup_abc import StartupABC from .startup_extension_abc import StartupExtensionABC - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="6", micro="0") diff --git a/src/cpl_core/application/application_abc.py b/src/cpl_core/application/application_abc.py index df4ede17..3f814e46 100644 --- a/src/cpl_core/application/application_abc.py +++ b/src/cpl_core/application/application_abc.py @@ -51,7 +51,6 @@ class ApplicationABC(ABC): Called by :class:`cpl_core.application.application_abc.ApplicationABC.run` """ - pass @abstractmethod def main(self): @@ -59,4 +58,3 @@ class ApplicationABC(ABC): Called by :class:`cpl_core.application.application_abc.ApplicationABC.run` """ - pass diff --git a/src/cpl_core/application/application_builder_abc.py b/src/cpl_core/application/application_builder_abc.py index f2f2640b..7fca01f6 100644 --- a/src/cpl_core/application/application_builder_abc.py +++ b/src/cpl_core/application/application_builder_abc.py @@ -20,7 +20,6 @@ class ApplicationBuilderABC(ABC): startup: Type[:class:`cpl_core.application.startup_abc.StartupABC`] Startup class to use """ - pass @abstractmethod async def use_startup(self, startup: Type[StartupABC]): @@ -30,7 +29,6 @@ class ApplicationBuilderABC(ABC): startup: Type[:class:`cpl_core.application.startup_abc.StartupABC`] Startup class to use """ - pass @abstractmethod def build(self) -> ApplicationABC: @@ -39,7 +37,6 @@ class ApplicationBuilderABC(ABC): Returns: Object of :class:`cpl_core.application.application_abc.ApplicationABC` """ - pass @abstractmethod async def build_async(self) -> ApplicationABC: @@ -48,4 +45,3 @@ class ApplicationBuilderABC(ABC): Returns: Object of :class:`cpl_core.application.application_abc.ApplicationABC` """ - pass diff --git a/src/cpl_core/application/startup_abc.py b/src/cpl_core/application/startup_abc.py index 00bd955d..706221f2 100644 --- a/src/cpl_core/application/startup_abc.py +++ b/src/cpl_core/application/startup_abc.py @@ -24,7 +24,6 @@ class StartupABC(ABC): Returns: Object of :class:`cpl_core.configuration.configuration_abc.ConfigurationABC` """ - pass @abstractmethod def configure_services(self, service: ServiceCollectionABC, env: ApplicationEnvironmentABC) -> ServiceProviderABC: @@ -37,4 +36,3 @@ class StartupABC(ABC): Returns: Object of :class:`cpl_core.dependency_injection.service_provider_abc.ServiceProviderABC` """ - pass diff --git a/src/cpl_core/application/startup_extension_abc.py b/src/cpl_core/application/startup_extension_abc.py index 1bf88945..e8a22337 100644 --- a/src/cpl_core/application/startup_extension_abc.py +++ b/src/cpl_core/application/startup_extension_abc.py @@ -20,7 +20,6 @@ class StartupExtensionABC(ABC): config: :class:`cpl_core.configuration.configuration_abc.ConfigurationABC` env: :class:`cpl_core.environment.application_environment_abc` """ - pass @abstractmethod def configure_services(self, service: ServiceCollectionABC, env: ApplicationEnvironmentABC): @@ -30,4 +29,3 @@ class StartupExtensionABC(ABC): services: :class:`cpl_core.dependency_injection.service_collection_abc` env: :class:`cpl_core.environment.application_environment_abc` """ - pass diff --git a/src/cpl_core/configuration/__init__.py b/src/cpl_core/configuration/__init__.py index 1d50fdea..7d525c43 100644 --- a/src/cpl_core/configuration/__init__.py +++ b/src/cpl_core/configuration/__init__.py @@ -1,26 +1,3 @@ -# -*- coding: utf-8 -*- - -""" -cpl-core CPL core -~~~~~~~~~~~~~~~~~~~ - -CPL core package - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_core.configuration" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.6.0" - -from collections import namedtuple - - -# imports: from .argument_abc import ArgumentABC from .argument_builder import ArgumentBuilder from .argument_executable_abc import ArgumentExecutableABC @@ -33,6 +10,3 @@ from .executable_argument import ExecutableArgument from .flag_argument import FlagArgument from .validator_abc import ValidatorABC from .variable_argument import VariableArgument - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="6", micro="0") diff --git a/src/cpl_core/configuration/configuration.py b/src/cpl_core/configuration/configuration.py index 71965d23..9911380a 100644 --- a/src/cpl_core/configuration/configuration.py +++ b/src/cpl_core/configuration/configuration.py @@ -3,11 +3,10 @@ import os import sys import traceback from collections.abc import Callable -from typing import Union, Type, Optional +from typing import Union, Optional from cpl_core.configuration.argument_abc import ArgumentABC from cpl_core.configuration.argument_builder import ArgumentBuilder -from cpl_core.configuration.argument_executable_abc import ArgumentExecutableABC from cpl_core.configuration.argument_type_enum import ArgumentTypeEnum from cpl_core.configuration.configuration_abc import ConfigurationABC from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC @@ -16,7 +15,6 @@ from cpl_core.configuration.configuration_variable_name_enum import ( ) from cpl_core.configuration.executable_argument import ExecutableArgument from cpl_core.configuration.flag_argument import FlagArgument -from cpl_core.configuration.validator_abc import ValidatorABC from cpl_core.configuration.variable_argument import VariableArgument from cpl_core.console.console import Console from cpl_core.console.foreground_color_enum import ForegroundColorEnum @@ -344,7 +342,7 @@ class Configuration(ConfigurationABC): arg_list = sys.argv[1:] executables: list[ExecutableArgument] = [] self._parse_arguments(executables, arg_list, self._argument_types) - except Exception as e: + except Exception: Console.error("An error occurred while parsing arguments.", traceback.format_exc()) sys.exit() @@ -380,7 +378,7 @@ class Configuration(ConfigurationABC): self._handle_pre_or_post_executables(False, exe, services) prevent = exe.prevent_next_executable success = True - except Exception as e: + except Exception: Console.error("An error occurred while executing arguments.", traceback.format_exc()) sys.exit() diff --git a/src/cpl_core/configuration/configuration_abc.py b/src/cpl_core/configuration/configuration_abc.py index 66bf3e35..1a537d27 100644 --- a/src/cpl_core/configuration/configuration_abc.py +++ b/src/cpl_core/configuration/configuration_abc.py @@ -1,8 +1,7 @@ from abc import abstractmethod, ABC from collections.abc import Callable -from typing import Type, Union, Optional +from typing import Optional -from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC from cpl_core.configuration.argument_abc import ArgumentABC from cpl_core.configuration.argument_type_enum import ArgumentTypeEnum from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC @@ -13,7 +12,6 @@ class ConfigurationABC(ABC): @abstractmethod def __init__(self): r"""ABC for the :class:`cpl_core.configuration.configuration.Configuration`""" - pass @property @abstractmethod @@ -48,7 +46,6 @@ class ConfigurationABC(ABC): prefix: :class:`str` Prefix of the variables """ - pass @abstractmethod def add_console_argument(self, argument: ArgumentABC): @@ -58,7 +55,6 @@ class ConfigurationABC(ABC): argument: :class:`cpl_core.configuration.console_argument.ConsoleArgumentABC` Specifies the console argument """ - pass @abstractmethod def add_json_file(self, name: str, optional: bool = None, output: bool = True, path: str = None): @@ -74,7 +70,6 @@ class ConfigurationABC(ABC): path: :class:`str` Path in which the file should be stored """ - pass @abstractmethod def add_configuration(self, key_type: T, value: any): @@ -86,7 +81,6 @@ class ConfigurationABC(ABC): value: any Object of the value """ - pass @abstractmethod def create_console_argument( @@ -111,7 +105,6 @@ class ConfigurationABC(ABC): Returns: Object of :class:`cpl_core.configuration.console_argument.ConsoleArgumentABC` """ - pass @abstractmethod def for_each_argument(self, call: Callable): @@ -121,7 +114,6 @@ class ConfigurationABC(ABC): call: :class:`Callable` Call for each argument """ - pass @abstractmethod def get_configuration(self, search_type: T) -> Optional[R]: @@ -134,7 +126,6 @@ class ConfigurationABC(ABC): Returns: Object of Union[:class:`str`, :class:`cpl_core.configuration.configuration_model_abc.ConfigurationModelABC`] """ - pass @abstractmethod def parse_console_arguments(self, services: "ServiceProviderABC", error: bool = None) -> bool: @@ -147,4 +138,3 @@ class ConfigurationABC(ABC): Returns: Bool to specify if executables were executed or not. """ - pass diff --git a/src/cpl_core/configuration/configuration_model_abc.py b/src/cpl_core/configuration/configuration_model_abc.py index b291e603..45952c2e 100644 --- a/src/cpl_core/configuration/configuration_model_abc.py +++ b/src/cpl_core/configuration/configuration_model_abc.py @@ -10,7 +10,6 @@ class ConfigurationModelABC(ABC): @abstractmethod def __init__(self): r"""ABC for settings representation""" - pass @base_func def from_dict(self, settings: dict): @@ -20,4 +19,3 @@ class ConfigurationModelABC(ABC): Parameter: settings: :class:`dict` """ - pass diff --git a/src/cpl_core/console/__init__.py b/src/cpl_core/console/__init__.py index aeb3c5ce..c86383e8 100644 --- a/src/cpl_core/console/__init__.py +++ b/src/cpl_core/console/__init__.py @@ -1,31 +1,5 @@ -# -*- coding: utf-8 -*- - -""" -cpl-core CPL core -~~~~~~~~~~~~~~~~~~~ - -CPL core package - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_core.console" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.6.0" - -from collections import namedtuple - - -# imports: from .background_color_enum import BackgroundColorEnum from .console import Console from .console_call import ConsoleCall from .foreground_color_enum import ForegroundColorEnum from .spinner_thread import SpinnerThread - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="6", micro="0") diff --git a/src/cpl_core/console/console.py b/src/cpl_core/console/console.py index 1b783410..6226a685 100644 --- a/src/cpl_core/console/console.py +++ b/src/cpl_core/console/console.py @@ -17,6 +17,7 @@ from cpl_core.console.spinner_thread import SpinnerThread class Console: r"""Useful functions for handling with input and output""" + colorama.init() _is_first_write = True diff --git a/src/cpl_core/cpl-core.json b/src/cpl_core/cpl-core.json deleted file mode 100644 index 5e3032d8..00000000 --- a/src/cpl_core/cpl-core.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "ProjectSettings": { - "Name": "cpl-core", - "Version": { - "Major": "2024", - "Minor": "7", - "Micro": "0" - }, - "Author": "Sven Heidemann", - "AuthorEmail": "sven.heidemann@sh-edraft.de", - "Description": "CPL core", - "LongDescription": "CPL core package", - "URL": "https://www.sh-edraft.de", - "CopyrightDate": "2020 - 2024", - "CopyrightName": "sh-edraft.de", - "LicenseName": "MIT", - "LicenseDescription": "MIT, see LICENSE for more details.", - "Dependencies": [ - "art>=6.2", - "colorama>=0.4.6", - "psutil>=6.0.0", - "packaging>=24.1", - "pynput>=1.7.6", - "setuptools>=70.1.0", - "tabulate>=0.9.0", - "termcolor>=2.4.0", - "watchdog>=4.0.1", - "wheel>=0.43.0", - "mysql-connector-python>=8.4.0" - ], - "DevDependencies": [ - "Sphinx==5.0.2", - "sphinx-rtd-theme==1.0.0", - "myst-parser==0.18.1", - "twine==4.0.2", - "sphinx-markdown-builder==0.5.5", - "pygount==1.5.1" - ], - "PythonVersion": ">=3.12", - "PythonPath": {}, - "Classifiers": [] - }, - "BuildSettings": { - "ProjectType": "library", - "SourcePath": "", - "OutputPath": "../../dist", - "Main": "", - "EntryPoint": "", - "IncludePackageData": true, - "Included": [ - "*/templates" - ], - "Excluded": [ - "*/__pycache__", - "*/logs", - "*/tests" - ], - "PackageData": { - "cpl_core": [ - ".cpl/*.py" - ] - }, - "ProjectReferences": [] - } -} \ No newline at end of file diff --git a/src/cpl_core/database/__init__.py b/src/cpl_core/database/__init__.py index 310d1bd1..1d0467c0 100644 --- a/src/cpl_core/database/__init__.py +++ b/src/cpl_core/database/__init__.py @@ -1,29 +1,3 @@ -# -*- coding: utf-8 -*- - -""" -cpl-core CPL core -~~~~~~~~~~~~~~~~~~~ - -CPL core package - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_core.database" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.6.0" - -from collections import namedtuple - - -# imports: from .database_settings_name_enum import DatabaseSettingsNameEnum from .database_settings import DatabaseSettings from .table_abc import TableABC - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="6", micro="0") diff --git a/src/cpl_core/database/connection/__init__.py b/src/cpl_core/database/connection/__init__.py index 5c3c70d2..06103864 100644 --- a/src/cpl_core/database/connection/__init__.py +++ b/src/cpl_core/database/connection/__init__.py @@ -1,28 +1,2 @@ -# -*- coding: utf-8 -*- - -""" -cpl-core CPL core -~~~~~~~~~~~~~~~~~~~ - -CPL core package - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_core.database.connection" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.6.0" - -from collections import namedtuple - - -# imports: from .database_connection import DatabaseConnection from .database_connection_abc import DatabaseConnectionABC - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="6", micro="0") diff --git a/src/cpl_core/database/connection/database_connection_abc.py b/src/cpl_core/database/connection/database_connection_abc.py index 92f70917..4ebfcb57 100644 --- a/src/cpl_core/database/connection/database_connection_abc.py +++ b/src/cpl_core/database/connection/database_connection_abc.py @@ -30,4 +30,3 @@ class DatabaseConnectionABC(ABC): connection_string: :class:`str` Database connection string, see: https://docs.sqlalchemy.org/en/14/core/engines.html """ - pass diff --git a/src/cpl_core/database/context/__init__.py b/src/cpl_core/database/context/__init__.py index 1b34178a..b061887d 100644 --- a/src/cpl_core/database/context/__init__.py +++ b/src/cpl_core/database/context/__init__.py @@ -1,28 +1,2 @@ -# -*- coding: utf-8 -*- - -""" -cpl-core CPL core -~~~~~~~~~~~~~~~~~~~ - -CPL core package - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_core.database.context" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.6.0" - -from collections import namedtuple - - -# imports: from .database_context import DatabaseContext from .database_context_abc import DatabaseContextABC - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="6", micro="0") diff --git a/src/cpl_core/database/context/database_context.py b/src/cpl_core/database/context/database_context.py index ce2a3e4e..b557757d 100644 --- a/src/cpl_core/database/context/database_context.py +++ b/src/cpl_core/database/context/database_context.py @@ -1,12 +1,10 @@ from typing import Optional -import mysql from cpl_core.database.connection.database_connection import DatabaseConnection from cpl_core.database.connection.database_connection_abc import DatabaseConnectionABC from cpl_core.database.context.database_context_abc import DatabaseContextABC from cpl_core.database.database_settings import DatabaseSettings -from cpl_core.database.table_abc import TableABC from mysql.connector.cursor import MySQLCursorBuffered @@ -31,7 +29,7 @@ class DatabaseContext(DatabaseContextABC): def _ping_and_reconnect(self): try: self._db.server.ping(reconnect=True, attempts=3, delay=5) - except Exception as err: + except Exception: # reconnect your cursor as you did in __init__ or wherever if self._settings is None: raise Exception("Call DatabaseContext.connect first") diff --git a/src/cpl_core/database/context/database_context_abc.py b/src/cpl_core/database/context/database_context_abc.py index 68738dd8..6ab03ff4 100644 --- a/src/cpl_core/database/context/database_context_abc.py +++ b/src/cpl_core/database/context/database_context_abc.py @@ -23,12 +23,10 @@ class DatabaseContextABC(ABC): Parameter: database_settings :class:`cpl_core.database.database_settings.DatabaseSettings` """ - pass @abstractmethod def save_changes(self): r"""Saves changes of the database""" - pass @abstractmethod def select(self, statement: str) -> list[tuple]: @@ -40,4 +38,3 @@ class DatabaseContextABC(ABC): Returns: list: Fetched list of selected elements """ - pass diff --git a/src/cpl_core/dependency_injection/__init__.py b/src/cpl_core/dependency_injection/__init__.py index 4a793dc4..e7dfcfe4 100644 --- a/src/cpl_core/dependency_injection/__init__.py +++ b/src/cpl_core/dependency_injection/__init__.py @@ -1,26 +1,3 @@ -# -*- coding: utf-8 -*- - -""" -cpl-core CPL core -~~~~~~~~~~~~~~~~~~~ - -CPL core package - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_core.dependency_injection" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.6.0" - -from collections import namedtuple - - -# imports: from .scope import Scope from .scope_abc import ScopeABC from .service_collection import ServiceCollection @@ -29,6 +6,3 @@ from .service_descriptor import ServiceDescriptor from .service_lifetime_enum import ServiceLifetimeEnum from .service_provider import ServiceProvider from .service_provider_abc import ServiceProviderABC - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="6", micro="0") diff --git a/src/cpl_core/dependency_injection/scope.py b/src/cpl_core/dependency_injection/scope.py index 57a7f045..ca571fb2 100644 --- a/src/cpl_core/dependency_injection/scope.py +++ b/src/cpl_core/dependency_injection/scope.py @@ -1,4 +1,3 @@ -from cpl_core.console.console import Console from cpl_core.dependency_injection.scope_abc import ScopeABC from cpl_core.dependency_injection.service_provider_abc import ServiceProviderABC diff --git a/src/cpl_core/dependency_injection/scope_abc.py b/src/cpl_core/dependency_injection/scope_abc.py index f4f081c2..6e48e0c5 100644 --- a/src/cpl_core/dependency_injection/scope_abc.py +++ b/src/cpl_core/dependency_injection/scope_abc.py @@ -15,9 +15,7 @@ class ScopeABC(ABC): Returns: Object of type :class:`cpl_core.dependency_injection.service_provider_abc.ServiceProviderABC` """ - pass @abstractmethod def dispose(self): r"""Sets service_provider to None""" - pass diff --git a/src/cpl_core/dependency_injection/service_collection_abc.py b/src/cpl_core/dependency_injection/service_collection_abc.py index 8da9a519..034f19c0 100644 --- a/src/cpl_core/dependency_injection/service_collection_abc.py +++ b/src/cpl_core/dependency_injection/service_collection_abc.py @@ -1,5 +1,4 @@ from abc import abstractmethod, ABC -from collections.abc import Callable from typing import Type from cpl_core.database.database_settings import DatabaseSettings @@ -23,27 +22,22 @@ class ServiceCollectionABC(ABC): db_context: Type[:class:`cpl_core.database.context.database_context_abc.DatabaseContextABC`] Database context """ - pass @abstractmethod def add_logging(self): r"""Adds the CPL internal logger""" - pass @abstractmethod def add_pipes(self): r"""Adds the CPL internal pipes as transient""" - pass def add_discord(self): r"""Adds the CPL discord""" raise NotImplementedError("You should install and use the cpl-discord package") - pass def add_translation(self): r"""Adds the CPL translation""" raise NotImplementedError("You should install and use the cpl-translation package") - pass @abstractmethod def add_transient(self, service_type: T, service: T = None) -> "ServiceCollectionABC": @@ -58,7 +52,6 @@ class ServiceCollectionABC(ABC): Returns: self: :class:`cpl_core.dependency_injection.service_collection_abc.ServiceCollectionABC` """ - pass @abstractmethod def add_scoped(self, service_type: T, service: T = None) -> "ServiceCollectionABC": @@ -73,7 +66,6 @@ class ServiceCollectionABC(ABC): Returns: self: :class:`cpl_core.dependency_injection.service_collection_abc.ServiceCollectionABC` """ - pass @abstractmethod def add_singleton(self, service_type: T, service: T = None) -> "ServiceCollectionABC": @@ -88,7 +80,6 @@ class ServiceCollectionABC(ABC): Returns: self: :class:`cpl_core.dependency_injection.service_collection_abc.ServiceCollectionABC` """ - pass @abstractmethod def build_service_provider(self) -> ServiceProviderABC: @@ -97,4 +88,3 @@ class ServiceCollectionABC(ABC): Returns: Object of type :class:`cpl_core.dependency_injection.service_provider_abc.ServiceProviderABC` """ - pass diff --git a/src/cpl_core/dependency_injection/service_descriptor.py b/src/cpl_core/dependency_injection/service_descriptor.py index 5e5c050a..dc5a6993 100644 --- a/src/cpl_core/dependency_injection/service_descriptor.py +++ b/src/cpl_core/dependency_injection/service_descriptor.py @@ -1,6 +1,5 @@ from typing import Union, Optional -from cpl_core.console import Console from cpl_core.dependency_injection.service_lifetime_enum import ServiceLifetimeEnum diff --git a/src/cpl_core/dependency_injection/service_provider_abc.py b/src/cpl_core/dependency_injection/service_provider_abc.py index dde58278..f22329fb 100644 --- a/src/cpl_core/dependency_injection/service_provider_abc.py +++ b/src/cpl_core/dependency_injection/service_provider_abc.py @@ -1,7 +1,7 @@ import functools from abc import abstractmethod, ABC from inspect import Signature, signature -from typing import Optional, Type +from typing import Optional from cpl_core.dependency_injection.scope_abc import ScopeABC from cpl_core.type import T, R @@ -37,7 +37,6 @@ class ServiceProviderABC(ABC): ------- Object of the given type """ - pass @abstractmethod def set_scope(self, scope: ScopeABC): @@ -48,7 +47,6 @@ class ServiceProviderABC(ABC): Object of type :class:`cpl_core.dependency_injection.scope_abc.ScopeABC` Service scope """ - pass @abstractmethod def create_scope(self) -> ScopeABC: @@ -58,7 +56,6 @@ class ServiceProviderABC(ABC): ------- Object of type :class:`cpl_core.dependency_injection.scope_abc.ScopeABC` """ - pass @abstractmethod def get_service(self, instance_type: T, *args, **kwargs) -> Optional[R]: @@ -73,7 +70,6 @@ class ServiceProviderABC(ABC): ------- Object of type Optional[:class:`cpl_core.type.T`] """ - pass @abstractmethod def get_services(self, service_type: T, *args, **kwargs) -> list[Optional[R]]: @@ -88,7 +84,6 @@ class ServiceProviderABC(ABC): ------- Object of type list[Optional[:class:`cpl_core.type.T`] """ - pass @classmethod def inject(cls, f=None): diff --git a/src/cpl_core/environment/__init__.py b/src/cpl_core/environment/__init__.py index 7c5f985f..f891e575 100644 --- a/src/cpl_core/environment/__init__.py +++ b/src/cpl_core/environment/__init__.py @@ -1,29 +1,3 @@ -# -*- coding: utf-8 -*- - -""" -cpl-core CPL core -~~~~~~~~~~~~~~~~~~~ - -CPL core package - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_core.environment" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.6.0" - -from collections import namedtuple - - -# imports: from .application_environment_abc import ApplicationEnvironmentABC from .environment_name_enum import EnvironmentNameEnum from .application_environment import ApplicationEnvironment - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="6", micro="0") diff --git a/src/cpl_core/environment/application_environment_abc.py b/src/cpl_core/environment/application_environment_abc.py index 07f3444f..963848f3 100644 --- a/src/cpl_core/environment/application_environment_abc.py +++ b/src/cpl_core/environment/application_environment_abc.py @@ -87,7 +87,6 @@ class ApplicationEnvironmentABC(ABC): runtime_directory: :class:`str` Path of the runtime directory """ - pass @abstractmethod def set_working_directory(self, working_directory: str): @@ -97,4 +96,3 @@ class ApplicationEnvironmentABC(ABC): working_directory: :class:`str` Path of the current working directory """ - pass diff --git a/src/cpl_core/logging/__init__.py b/src/cpl_core/logging/__init__.py index a8c5f0db..76f25864 100644 --- a/src/cpl_core/logging/__init__.py +++ b/src/cpl_core/logging/__init__.py @@ -1,31 +1,5 @@ -# -*- coding: utf-8 -*- - -""" -cpl-core CPL core -~~~~~~~~~~~~~~~~~~~ - -CPL core package - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_core.logging" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.6.0" - -from collections import namedtuple - - -# imports: from .logger_service import Logger from .logger_abc import LoggerABC from .logging_level_enum import LoggingLevelEnum from .logging_settings import LoggingSettings from .logging_settings_name_enum import LoggingSettingsNameEnum - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="6", micro="0") diff --git a/src/cpl_core/logging/logger_abc.py b/src/cpl_core/logging/logger_abc.py index a57ddf5d..8507af23 100644 --- a/src/cpl_core/logging/logger_abc.py +++ b/src/cpl_core/logging/logger_abc.py @@ -16,7 +16,6 @@ class LoggerABC(ABC): string: :class:`str` String to write as header """ - pass @abstractmethod def trace(self, name: str, message: str): @@ -28,7 +27,6 @@ class LoggerABC(ABC): message: :class:`str` Message string """ - pass @abstractmethod def debug(self, name: str, message: str): @@ -40,7 +38,6 @@ class LoggerABC(ABC): message: :class:`str` Message string """ - pass @abstractmethod def info(self, name: str, message: str): @@ -52,7 +49,6 @@ class LoggerABC(ABC): message: :class:`str` Message string """ - pass @abstractmethod def warn(self, name: str, message: str): @@ -64,7 +60,6 @@ class LoggerABC(ABC): message: :class:`str` Message string """ - pass @abstractmethod def error(self, name: str, message: str, ex: Exception = None): @@ -78,7 +73,6 @@ class LoggerABC(ABC): ex: :class:`Exception` Thrown exception """ - pass @abstractmethod def fatal(self, name: str, message: str, ex: Exception = None): @@ -92,4 +86,3 @@ class LoggerABC(ABC): ex: :class:`Exception` Thrown exception """ - pass diff --git a/src/cpl_core/logging/logging_settings.py b/src/cpl_core/logging/logging_settings.py index 1150b9ec..9cf711e7 100644 --- a/src/cpl_core/logging/logging_settings.py +++ b/src/cpl_core/logging/logging_settings.py @@ -1,11 +1,7 @@ -import traceback from typing import Optional from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC -from cpl_core.console.console import Console -from cpl_core.console.foreground_color_enum import ForegroundColorEnum from cpl_core.logging.logging_level_enum import LoggingLevelEnum -from cpl_core.logging.logging_settings_name_enum import LoggingSettingsNameEnum class LoggingSettings(ConfigurationModelABC): diff --git a/src/cpl_core/mailing/__init__.py b/src/cpl_core/mailing/__init__.py index a8249b55..a303b2f4 100644 --- a/src/cpl_core/mailing/__init__.py +++ b/src/cpl_core/mailing/__init__.py @@ -1,31 +1,5 @@ -# -*- coding: utf-8 -*- - -""" -cpl-core CPL core -~~~~~~~~~~~~~~~~~~~ - -CPL core package - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_core.mailing" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.6.0" - -from collections import namedtuple - - -# imports: from .email import EMail from .email_client_service import EMailClient from .email_client_abc import EMailClientABC from .email_client_settings import EMailClientSettings from .email_client_settings_name_enum import EMailClientSettingsNameEnum - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="6", micro="0") diff --git a/src/cpl_core/mailing/email_client_abc.py b/src/cpl_core/mailing/email_client_abc.py index 9b1609ef..be291c16 100644 --- a/src/cpl_core/mailing/email_client_abc.py +++ b/src/cpl_core/mailing/email_client_abc.py @@ -13,7 +13,6 @@ class EMailClientABC(ABC): @abstractmethod def connect(self): r"""Connects to server""" - pass @abstractmethod def send_mail(self, email: EMail): @@ -23,4 +22,3 @@ class EMailClientABC(ABC): email: :class:`cpl_core.mailing.email.EMail` Object of the E-Mail to send """ - pass diff --git a/src/cpl_core/pipes/__init__.py b/src/cpl_core/pipes/__init__.py index 304e0e34..d51a5e75 100644 --- a/src/cpl_core/pipes/__init__.py +++ b/src/cpl_core/pipes/__init__.py @@ -1,29 +1,3 @@ -# -*- coding: utf-8 -*- - -""" -cpl-core CPL core -~~~~~~~~~~~~~~~~~~~ - -CPL core package - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_core.pipes" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.6.0" - -from collections import namedtuple - - -# imports: from .bool_pipe import BoolPipe from .ip_address_pipe import IPAddressPipe from .pipe_abc import PipeABC - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="6", micro="0") diff --git a/src/cpl_core/pyproject.toml b/src/cpl_core/pyproject.toml new file mode 100644 index 00000000..f984dc5c --- /dev/null +++ b/src/cpl_core/pyproject.toml @@ -0,0 +1,39 @@ +[build-system] +requires = ["setuptools>=70.1.0", "wheel>=0.43.0"] +build-backend = "setuptools.build_meta" + +[project] +name = "cpl-core" +version = "2024.7.0" +description = "CPL core" +readme = { text = "CPL core package" } +requires-python = ">=3.12" +license = { text = "MIT" } +authors = [ + { name = "Sven Heidemann", email = "sven.heidemann@sh-edraft.de" } +] +keywords = ["cpl", "core", "backend", "shared", "library"] + +dynamic = ["dependencies", "optional-dependencies"] + +[project.urls] +Homepage = "https://www.sh-edraft.de" + +[tool.setuptools.dynamic] +dependencies = { file = ["requirements.txt"] } +optional-dependencies.dev = { file = ["requirements.dev.txt"] } + +[tool.setuptools] +include-package-data = true + +[tool.setuptools.packages.find] +include = ["*"] +exclude = [ + "*/__pycache__", + "*/logs", + "*/tests", +] + +[tool.setuptools.package-data] +cpl_core = [".cpl/*.py"] +"" = ["templates/**"] diff --git a/src/cpl_core/requirements.dev.txt b/src/cpl_core/requirements.dev.txt new file mode 100644 index 00000000..e7664b42 --- /dev/null +++ b/src/cpl_core/requirements.dev.txt @@ -0,0 +1 @@ +black==25.1.0 \ No newline at end of file diff --git a/src/cpl_core/requirements.txt b/src/cpl_core/requirements.txt new file mode 100644 index 00000000..578347a1 --- /dev/null +++ b/src/cpl_core/requirements.txt @@ -0,0 +1,5 @@ +art==6.5 +colorama==0.4.6 +tabulate==0.9.0 +termcolor==3.1.0 +mysql-connector-python==9.4.0 diff --git a/src/cpl_core/time/__init__.py b/src/cpl_core/time/__init__.py index 3b2a72fe..ff9dad0b 100644 --- a/src/cpl_core/time/__init__.py +++ b/src/cpl_core/time/__init__.py @@ -1,28 +1,2 @@ -# -*- coding: utf-8 -*- - -""" -cpl-core CPL core -~~~~~~~~~~~~~~~~~~~ - -CPL core package - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_core.time" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.6.0" - -from collections import namedtuple - - -# imports: from .time_format_settings import TimeFormatSettings from .time_format_settings_names_enum import TimeFormatSettingsNamesEnum - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="6", micro="0") diff --git a/src/cpl_core/time/time_format_settings.py b/src/cpl_core/time/time_format_settings.py index 536ecae6..342825f4 100644 --- a/src/cpl_core/time/time_format_settings.py +++ b/src/cpl_core/time/time_format_settings.py @@ -1,10 +1,6 @@ -import traceback from typing import Optional from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC -from cpl_core.console.console import Console -from cpl_core.console.foreground_color_enum import ForegroundColorEnum -from cpl_core.time.time_format_settings_names_enum import TimeFormatSettingsNamesEnum class TimeFormatSettings(ConfigurationModelABC): diff --git a/src/cpl_core/utils/__init__.py b/src/cpl_core/utils/__init__.py index ce4d64db..5fabb9c9 100644 --- a/src/cpl_core/utils/__init__.py +++ b/src/cpl_core/utils/__init__.py @@ -1,29 +1,3 @@ -# -*- coding: utf-8 -*- - -""" -cpl-core CPL core -~~~~~~~~~~~~~~~~~~~ - -CPL core package - -:copyright: (c) 2020 - 2024 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_core.utils" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de" -__version__ = "2024.6.0" - -from collections import namedtuple - - -# imports: from .credential_manager import CredentialManager from .string import String from .pip import Pip - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2024", minor="6", micro="0") diff --git a/src/cpl_core/utils/pip.py b/src/cpl_core/utils/pip.py index fb403645..bc626e16 100644 --- a/src/cpl_core/utils/pip.py +++ b/src/cpl_core/utils/pip.py @@ -4,11 +4,10 @@ import sys from contextlib import suppress from typing import Optional -from cpl_core.console import Console - class Pip: r"""Executes pip commands""" + _executable = sys.executable _env = os.environ diff --git a/src/cpl_discord/.cpl/__init__.py b/src/cpl_discord/.cpl/__init__.py deleted file mode 100644 index 6b56a505..00000000 --- a/src/cpl_discord/.cpl/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-discord CPL Discord -~~~~~~~~~~~~~~~~~~~ - -Link between discord.py and CPL - -:copyright: (c) 2022 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_discord" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "2023.10.0.post1" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="10", micro="0.post1") diff --git a/src/cpl_discord/.cpl/project_discord_bot.py b/src/cpl_discord/.cpl/project_discord_bot.py deleted file mode 100644 index 1ed6a121..00000000 --- a/src/cpl_discord/.cpl/project_discord_bot.py +++ /dev/null @@ -1,85 +0,0 @@ -import os - -from cpl_cli.abc.project_type_abc import ProjectTypeABC -from cpl_cli.configuration import WorkspaceSettings -from cpl_core.utils import String - - -class DiscordBot(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_discord import DiscordBotProjectFile - from project_file_discord_appsettings import DiscordBotProjectFileAppsettings - from project_file_discord_code_application import DiscordBotProjectFileApplication - from project_file_discord_code_main import DiscordBotProjectFileMain - from project_file_discord_code_startup import DiscordBotProjectFileStartup - from project_file_discord_readme import DiscordBotProjectFileReadme - from project_file_discord_license import DiscordBotProjectFileLicense - from schematic_discord_init import DiscordBotInit - from schematic_discord_event import Event - from schematic_discord_command import Command - - use_application_api, use_startup, use_service_providing, use_async = True, True, True, True - - 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(DiscordBotProjectFile(project_name.split("/")[-1], project_path, project_file_data)) - if workspace is None: - self.add_template(DiscordBotProjectFileLicense("")) - self.add_template(DiscordBotProjectFileReadme("")) - self.add_template(DiscordBotInit("", "init", f"{base_path}tests/")) - - self.add_template(DiscordBotInit("", "init", project_path)) - self.add_template(DiscordBotProjectFileAppsettings(project_path)) - - self.add_template(DiscordBotInit("", "init", f"{project_path}events/")) - self.add_template(Event("OnReady", "event", f"{project_path}events/")) - self.add_template(DiscordBotInit("", "init", f"{project_path}commands/")) - self.add_template(Command("Ping", "command", f"{project_path}commands/")) - - self.add_template( - DiscordBotProjectFileApplication( - project_path, use_application_api, use_startup, use_service_providing, use_async - ) - ) - self.add_template( - DiscordBotProjectFileStartup( - project_name.split("/")[-1], - project_path, - use_application_api, - use_startup, - use_service_providing, - use_async, - ) - ) - self.add_template( - DiscordBotProjectFileMain( - project_name.split("/")[-1], - project_path, - use_application_api, - use_startup, - use_service_providing, - use_async, - ) - ) diff --git a/src/cpl_discord/.cpl/project_file_discord.py b/src/cpl_discord/.cpl/project_file_discord.py deleted file mode 100644 index cae5b29a..00000000 --- a/src/cpl_discord/.cpl/project_file_discord.py +++ /dev/null @@ -1,13 +0,0 @@ -import json - -from cpl_cli.abc.file_template_abc import FileTemplateABC - - -class DiscordBotProjectFile(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_discord/.cpl/project_file_discord_appsettings.py b/src/cpl_discord/.cpl/project_file_discord_appsettings.py deleted file mode 100644 index 2f046d6d..00000000 --- a/src/cpl_discord/.cpl/project_file_discord_appsettings.py +++ /dev/null @@ -1,35 +0,0 @@ -import textwrap - -from cpl_cli.abc.file_template_abc import FileTemplateABC - - -class DiscordBotProjectFileAppsettings(FileTemplateABC): - def __init__(self, path: str): - FileTemplateABC.__init__(self, "", path, "{}") - self._name = "appsettings.json" - - def get_code(self) -> str: - return 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" - }, - - "DiscordBotSettings": { - "Token": "", - "Prefix": "!bot " - } - } - """ - ) diff --git a/src/cpl_discord/.cpl/project_file_discord_code_application.py b/src/cpl_discord/.cpl/project_file_discord_code_application.py deleted file mode 100644 index a7aef9f9..00000000 --- a/src/cpl_discord/.cpl/project_file_discord_code_application.py +++ /dev/null @@ -1,58 +0,0 @@ -from cpl_cli.abc.code_file_template_abc import CodeFileTemplateABC - - -class DiscordBotProjectFileApplication(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 - - return 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 - from cpl_core.logging import LoggerABC - from cpl_discord.application.discord_bot_application_abc import DiscordBotApplicationABC - from cpl_discord.configuration.discord_bot_settings import DiscordBotSettings - from cpl_discord.service.discord_bot_service import DiscordBotService - from cpl_discord.service.discord_bot_service_abc import DiscordBotServiceABC - - - class Application(DiscordBotApplicationABC): - - def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): - ApplicationABC.__init__(self, config, services) - - self._bot: DiscordBotServiceABC = services.get_service(DiscordBotServiceABC) - self._logger: LoggerABC = services.get_service(LoggerABC) - self._bot_settings: DiscordBotSettings = config.get_configuration(DiscordBotSettings) - - async def configure(self): - pass - - async def main(self): - try: - self._logger.debug(__name__, f'Starting...\\n') - self._logger.trace(__name__, f'Try to start {DiscordBotService.__name__}') - await self._bot.start_async() - except Exception as e: - self._logger.error(__name__, 'Start failed', e) - - async def stop_async(self): - try: - self._logger.trace(__name__, f'Try to stop {DiscordBotService.__name__}') - await self._bot.close() - self._logger.trace(__name__, f'Stopped {DiscordBotService.__name__}') - except Exception as e: - self._logger.error(__name__, 'stop failed', e) - - Console.write_line() - """ - ) diff --git a/src/cpl_discord/.cpl/project_file_discord_code_main.py b/src/cpl_discord/.cpl/project_file_discord_code_main.py deleted file mode 100644 index fdfb6858..00000000 --- a/src/cpl_discord/.cpl/project_file_discord_code_main.py +++ /dev/null @@ -1,58 +0,0 @@ -from cpl_cli.abc.code_file_template_abc import CodeFileTemplateABC -from cpl_core.utils import String - - -class DiscordBotProjectFileMain(CodeFileTemplateABC): - 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"{String.convert_to_snake_case(name)}." - - self._main_with_application_host_and_startup = textwrap.dedent( - f"""\ - import asyncio - from typing import Optional - - from cpl_core.application import ApplicationBuilder, ApplicationABC - from {import_pkg}application import Application - from {import_pkg}startup import Startup - - - class Program: - - def __init__(self): - self._app: Optional[Application] = None - - async def main(self): - app_builder = ApplicationBuilder(Application) - app_builder.use_startup(Startup) - self._app: ApplicationABC = await app_builder.build_async() - await self._app.run_async() - - async def stop(self): - await self._app.stop_async() - - - if __name__ == '__main__': - program = Program() - try: - asyncio.run(program.main()) - except KeyboardInterrupt: - asyncio.run(program.stop()) - """ - ) - - def get_code(self) -> str: - return self._main_with_application_host_and_startup diff --git a/src/cpl_discord/.cpl/project_file_discord_code_startup.py b/src/cpl_discord/.cpl/project_file_discord_code_startup.py deleted file mode 100644 index a1bfaba1..00000000 --- a/src/cpl_discord/.cpl/project_file_discord_code_startup.py +++ /dev/null @@ -1,58 +0,0 @@ -from cpl_cli.abc.code_file_template_abc import CodeFileTemplateABC -from cpl_core.utils import String - - -class DiscordBotProjectFileStartup(CodeFileTemplateABC): - def __init__( - self, - project_name: str, - path: str, - use_application_api: bool, - use_startup: bool, - use_service_providing: bool, - use_async: bool, - ): - CodeFileTemplateABC.__init__( - self, "startup", path, "", use_application_api, use_startup, use_service_providing, use_async - ) - self._project_name = project_name - - def get_code(self) -> str: - import textwrap - - import_pkg = f"{String.convert_to_snake_case(self._project_name)}." - - return textwrap.dedent( - f"""\ - 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 - from cpl_discord import get_discord_collection - from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum - from {import_pkg}commands.ping_command import PingCommand - from {import_pkg}events.on_ready_event import OnReadyEvent - - - class Startup(StartupABC): - - def __init__(self): - StartupABC.__init__(self) - - def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironment) -> ConfigurationABC: - configuration.add_json_file('appsettings.json', optional=False) - configuration.add_environment_variables('CPL_') - configuration.add_environment_variables('DISCORD_') - - return configuration - - def configure_services(self, services: ServiceCollectionABC, environment: ApplicationEnvironment) -> ServiceProviderABC: - services.add_logging() - services.add_discord() - dc_collection = get_discord_collection(services) - dc_collection.add_event(DiscordEventTypesEnum.on_ready.value, OnReadyEvent) - dc_collection.add_command(PingCommand) - - return services.build_service_provider() - """ - ) diff --git a/src/cpl_discord/.cpl/project_file_discord_license.py b/src/cpl_discord/.cpl/project_file_discord_license.py deleted file mode 100644 index 76a8a2b1..00000000 --- a/src/cpl_discord/.cpl/project_file_discord_license.py +++ /dev/null @@ -1,10 +0,0 @@ -from cpl_cli.abc.file_template_abc import FileTemplateABC - - -class DiscordBotProjectFileLicense(FileTemplateABC): - def __init__(self, path: str): - FileTemplateABC.__init__(self, "", path, "") - self._name = "LICENSE" - - def get_code(self) -> str: - return self._code diff --git a/src/cpl_discord/.cpl/project_file_discord_readme.py b/src/cpl_discord/.cpl/project_file_discord_readme.py deleted file mode 100644 index 18ce8f12..00000000 --- a/src/cpl_discord/.cpl/project_file_discord_readme.py +++ /dev/null @@ -1,10 +0,0 @@ -from cpl_cli.abc.file_template_abc import FileTemplateABC - - -class DiscordBotProjectFileReadme(FileTemplateABC): - def __init__(self, path: str): - FileTemplateABC.__init__(self, "", path, "") - self._name = "README.md" - - def get_code(self) -> str: - return self._code diff --git a/src/cpl_discord/.cpl/schematic_discord_command.py b/src/cpl_discord/.cpl/schematic_discord_command.py deleted file mode 100644 index d070189f..00000000 --- a/src/cpl_discord/.cpl/schematic_discord_command.py +++ /dev/null @@ -1,39 +0,0 @@ -import textwrap - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC - - -class Command(GenerateSchematicABC): - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - - def get_code(self) -> str: - code = """\ - from cpl_core.logging import LoggerABC - from cpl_discord.command import DiscordCommandABC - from cpl_discord.service import DiscordBotServiceABC - from discord.ext import commands - from discord.ext.commands import Context - - - class $Name(DiscordCommandABC): - - def __init__( - self, - logger: LoggerABC, - bot: DiscordBotServiceABC - ): - DiscordCommandABC.__init__(self) - - self._logger = logger - self._bot = bot - - @commands.hybrid_command() - async def ping(self, ctx: Context): - await ctx.send('Pong') - """ - return self.build_code_str(code, Name=self._class_name) - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "command", []) diff --git a/src/cpl_discord/.cpl/schematic_discord_event.py b/src/cpl_discord/.cpl/schematic_discord_event.py deleted file mode 100644 index 437f5016..00000000 --- a/src/cpl_discord/.cpl/schematic_discord_event.py +++ /dev/null @@ -1,86 +0,0 @@ -import sys -import textwrap - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC -from cpl_core.console import Console -from cpl_core.utils import String - - -class Event(GenerateSchematicABC): - def __init__(self, name: str, schematic: str, path: str): - GenerateSchematicABC.__init__(self, name, schematic, path) - - event = None - event_class = None - - from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum - - for event_type in DiscordEventTypesEnum: - event_name = event_type.value.__name__.replace("ABC", "") - - if name.endswith(event_name): - name = name.replace(event_name, "") - event = event_name - event_class = event_type.value - break - - if event is None: - Console.error(f"No valid event found in name {name}") - Console.write_line("Available events:") - for event_type in DiscordEventTypesEnum: - Console.write_line(f'\t{event_type.value.__name__.replace("ABC", "")}') - sys.exit() - - self._event_class_name = f"{event}ABC" - event_snake_case = String.convert_to_snake_case(self._event_class_name.replace("ABC", "")) - - if event_snake_case.lower() not in dir(event_class): - Console.error(f"Error in event {event}: Function {event_snake_case} not found!") - sys.exit() - - self._name = f"{event_snake_case}_{schematic}.py" - self._class_name = f'{self._event_class_name.replace("ABC", "")}{String.first_to_upper(schematic)}' - - from inspect import signature - - self._func_name = event_snake_case - self._signature = str(signature(getattr(event_class, event_snake_case)))[1:][:-1] - - if name != "": - self._name = f"{String.convert_to_snake_case(name)}_{self._name}" - self._class_name = f"{String.first_to_upper(name)}{self._class_name}" - - def get_code(self) -> str: - code = """\ - import discord - from cpl_core.logging import LoggerABC - from cpl_discord.events import $EventClass - from cpl_discord.service import DiscordBotServiceABC - - - class $Name($EventClass): - - def __init__( - self, - logger: LoggerABC, - bot: DiscordBotServiceABC, - ): - $EventClass.__init__(self) - - self._logger = logger - self._bot = bot - - async def $Func($Signature): - pass - """ - return self.build_code_str( - code, - Name=self._class_name, - EventClass=self._event_class_name, - Func=self._func_name, - Signature=self._signature, - ) - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "event", []) diff --git a/src/cpl_discord/.cpl/schematic_discord_init.py b/src/cpl_discord/.cpl/schematic_discord_init.py deleted file mode 100644 index dcb92826..00000000 --- a/src/cpl_discord/.cpl/schematic_discord_init.py +++ /dev/null @@ -1,19 +0,0 @@ -import textwrap - -from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC - - -class DiscordBotInit(GenerateSchematicABC): - def __init__(self, *args: str): - GenerateSchematicABC.__init__(self, *args) - self._name = f"__init__.py" - - def get_code(self) -> str: - code = """\ - # imports - """ - return self.build_code_str(code, Name=self._class_name) - - @classmethod - def register(cls): - GenerateSchematicABC.register(cls, "init", []) diff --git a/src/cpl_discord/__init__.py b/src/cpl_discord/__init__.py deleted file mode 100644 index 8633b454..00000000 --- a/src/cpl_discord/__init__.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-discord CPL Discord -~~~~~~~~~~~~~~~~~~~ - -Link between discord.py and CPL - -:copyright: (c) 2022 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_discord" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "2023.10.0.post1" - -from collections import namedtuple - - -# imports -# build-ignore - - -def add_discord(self): - from cpl_core.console import Console - from cpl_discord.service.discord_bot_service_abc import DiscordBotServiceABC - from cpl_discord.service.discord_bot_service import DiscordBotService - from cpl_discord.service.discord_service_abc import DiscordServiceABC - from cpl_discord.service.discord_service import DiscordService - - try: - self.add_singleton(DiscordServiceABC, DiscordService) - self.add_singleton(DiscordBotServiceABC, DiscordBotService) - except ImportError as e: - Console.error("cpl-discord is not installed", str(e)) - - -def init(): - from cpl_core.dependency_injection import ServiceCollection - - ServiceCollection.add_discord = add_discord - - -init() - - -def get_discord_collection(services: "ServiceCollectionABC") -> "DiscordCollectionABC": - from cpl_discord.service.discord_collection import DiscordCollection - from cpl_discord.service.discord_collection_abc import DiscordCollectionABC - - collection = DiscordCollection(services) - services.add_singleton(DiscordCollectionABC, collection) - return collection - - -# build-ignore-end - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="10", micro="0.post1") diff --git a/src/cpl_discord/application/__init__.py b/src/cpl_discord/application/__init__.py deleted file mode 100644 index 55268d11..00000000 --- a/src/cpl_discord/application/__init__.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-discord CPL Discord -~~~~~~~~~~~~~~~~~~~ - -Link between discord.py and CPL - -:copyright: (c) 2022 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_discord.application" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "2023.10.0.post1" - -from collections import namedtuple - - -# imports -from .discord_bot_application_abc import DiscordBotApplicationABC - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="10", micro="0.post1") diff --git a/src/cpl_discord/application/discord_bot_application_abc.py b/src/cpl_discord/application/discord_bot_application_abc.py deleted file mode 100644 index d9ad42cf..00000000 --- a/src/cpl_discord/application/discord_bot_application_abc.py +++ /dev/null @@ -1,14 +0,0 @@ -from abc import abstractmethod - -from cpl_core.application import ApplicationABC -from cpl_core.configuration.configuration_abc import ConfigurationABC -from cpl_core.dependency_injection.service_provider_abc import ServiceProviderABC - - -class DiscordBotApplicationABC(ApplicationABC): - def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): - ApplicationABC.__init__(self, config, services) - - @abstractmethod - def stop_async(self): - pass diff --git a/src/cpl_discord/command/__init__.py b/src/cpl_discord/command/__init__.py deleted file mode 100644 index 488fddd8..00000000 --- a/src/cpl_discord/command/__init__.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-discord CPL Discord -~~~~~~~~~~~~~~~~~~~ - -Link between discord.py and CPL - -:copyright: (c) 2022 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_discord.command" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "2023.10.0.post1" - -from collections import namedtuple - - -# imports: -from .discord_command_abc import DiscordCommandABC -from .discord_commands_meta import DiscordCogMeta - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="10", micro="0.post1") diff --git a/src/cpl_discord/command/discord_command_abc.py b/src/cpl_discord/command/discord_command_abc.py deleted file mode 100644 index 312e56d6..00000000 --- a/src/cpl_discord/command/discord_command_abc.py +++ /dev/null @@ -1,11 +0,0 @@ -from abc import ABC, abstractmethod - -from discord.ext import commands - -from cpl_discord.command.discord_commands_meta import DiscordCogMeta - - -class DiscordCommandABC(ABC, commands.Cog, metaclass=DiscordCogMeta): - @abstractmethod - def __init__(self): - pass diff --git a/src/cpl_discord/command/discord_commands_meta.py b/src/cpl_discord/command/discord_commands_meta.py deleted file mode 100644 index 4876704b..00000000 --- a/src/cpl_discord/command/discord_commands_meta.py +++ /dev/null @@ -1,6 +0,0 @@ -from abc import ABCMeta -from discord.ext import commands - - -class DiscordCogMeta(ABCMeta, commands.CogMeta): - pass diff --git a/src/cpl_discord/configuration/__init__.py b/src/cpl_discord/configuration/__init__.py deleted file mode 100644 index 0c3b5632..00000000 --- a/src/cpl_discord/configuration/__init__.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-discord CPL Discord -~~~~~~~~~~~~~~~~~~~ - -Link between discord.py and CPL - -:copyright: (c) 2022 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_discord.configuration" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "2023.10.0.post1" - -from collections import namedtuple - - -# imports -from .discord_bot_settings import DiscordBotSettings - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="10", micro="0.post1") diff --git a/src/cpl_discord/configuration/discord_bot_settings.py b/src/cpl_discord/configuration/discord_bot_settings.py deleted file mode 100644 index 08097351..00000000 --- a/src/cpl_discord/configuration/discord_bot_settings.py +++ /dev/null @@ -1,21 +0,0 @@ -from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC - - -class DiscordBotSettings(ConfigurationModelABC): - def __init__( - self, - token: str = None, - prefix: str = None, - ): - ConfigurationModelABC.__init__(self) - - self._token = token - self._prefix = prefix - - @property - def token(self) -> str: - return self._token - - @property - def prefix(self) -> str: - return self._prefix diff --git a/src/cpl_discord/container/__init__.py b/src/cpl_discord/container/__init__.py deleted file mode 100644 index d318cbfe..00000000 --- a/src/cpl_discord/container/__init__.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-discord CPL Discord -~~~~~~~~~~~~~~~~~~~ - -Link between discord.py and CPL - -:copyright: (c) 2022 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_discord.container" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "2023.10.0.post1" - -from collections import namedtuple - - -# imports -from .category_channel import CategoryChannel -from .container import Container -from .guild import Guild -from .member import Member -from .role import Role -from .text_channel import TextChannel -from .thread import Thread -from .voice_channel import VoiceChannel - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="10", micro="0.post1") diff --git a/src/cpl_discord/container/category_channel.py b/src/cpl_discord/container/category_channel.py deleted file mode 100644 index 058a6792..00000000 --- a/src/cpl_discord/container/category_channel.py +++ /dev/null @@ -1,20 +0,0 @@ -import discord - -from cpl_discord.container.container import Container -from cpl_discord.container.text_channel import TextChannel -from cpl_discord.container.voice_channel import VoiceChannel -from cpl_discord.helper.to_containers_converter import ToContainersConverter -from cpl_query.extension.list import List - - -class CategoryChannel(discord.CategoryChannel, Container): - def __init__(self, _t: discord.CategoryChannel): - Container.__init__(self, _t, CategoryChannel) - - @property - def text_channels(self) -> List[TextChannel]: - return List(TextChannel, ToContainersConverter.convert(self._object.text_channels, TextChannel)) - - @property - def voice_channels(self) -> List[VoiceChannel]: - return List(VoiceChannel, ToContainersConverter.convert(self._object.voice_channels, VoiceChannel)) diff --git a/src/cpl_discord/container/container.py b/src/cpl_discord/container/container.py deleted file mode 100644 index a41e26d8..00000000 --- a/src/cpl_discord/container/container.py +++ /dev/null @@ -1,30 +0,0 @@ -from abc import abstractmethod -from typing import Callable - - -class Container: - def __init__(self, _o: object, _t: type): - self._object = _o - self._type = _t - - def __to_type(_f: Callable, _t: type): - def wrapper(*args, **kwargs): - result = _f(*args, **kwargs) - return _t(result) - - return wrapper - - def __getitem__(self, item): - result = self._object[item] - if isinstance(result, type(self._guild)): - result = self._type(result) - return result - - def __getattr__(self, item): - result = getattr(self._object, item) - if callable(result): - result = self.__to_type(result, self._type) - return result - - def __repr__(self): - return repr(self._object) diff --git a/src/cpl_discord/container/guild.py b/src/cpl_discord/container/guild.py deleted file mode 100644 index 91740f79..00000000 --- a/src/cpl_discord/container/guild.py +++ /dev/null @@ -1,41 +0,0 @@ -import discord - -from cpl_discord.container.category_channel import CategoryChannel -from cpl_discord.container.container import Container -from cpl_discord.container.member import Member -from cpl_discord.container.role import Role -from cpl_discord.container.text_channel import TextChannel -from cpl_discord.container.voice_channel import VoiceChannel -from cpl_discord.helper.to_containers_converter import ToContainersConverter -from cpl_query.extension.list import List - - -class Guild(Container, discord.Guild): - def __init__(self, _t: discord.Guild): - self._object: discord.Guild = _t - - Container.__init__(self, _t, Guild) - - @property - def categories(self) -> List[CategoryChannel]: - return List(CategoryChannel, ToContainersConverter.convert(self._object.categories, CategoryChannel)) - - @property - def members(self) -> List[Member]: - return List(Member, ToContainersConverter.convert(self._object.members, Member)) - - @property - def roles(self) -> List[Role]: - return List(Role, ToContainersConverter.convert(self._object.roles, Role)) - - @property - def text_channels(self) -> List[TextChannel]: - return List(TextChannel, ToContainersConverter.convert(self._object.text_channels, TextChannel)) - - @property - def threads(self) -> List[TextChannel]: - return List(TextChannel, ToContainersConverter.convert(self._object.threads, TextChannel)) - - @property - def voice_channels(self) -> List[VoiceChannel]: - return List(VoiceChannel, ToContainersConverter.convert(self._object.voice_channels, VoiceChannel)) diff --git a/src/cpl_discord/container/member.py b/src/cpl_discord/container/member.py deleted file mode 100644 index 21b6bcbb..00000000 --- a/src/cpl_discord/container/member.py +++ /dev/null @@ -1,16 +0,0 @@ -import discord - -from cpl_discord.container.container import Container -from cpl_discord.helper.to_containers_converter import ToContainersConverter -from cpl_query.extension.list import List - - -class Member(discord.Member, Container): - def __init__(self, _t: discord.Member): - Container.__init__(self, _t, Member) - - @property - def roles(self) -> List["Role"]: - from cpl_discord.container.role import Role - - return List(Role, ToContainersConverter.convert(self._object.roles, Role)) diff --git a/src/cpl_discord/container/role.py b/src/cpl_discord/container/role.py deleted file mode 100644 index 6a174933..00000000 --- a/src/cpl_discord/container/role.py +++ /dev/null @@ -1,17 +0,0 @@ -import discord - -from cpl_discord.container.container import Container - -from cpl_discord.helper.to_containers_converter import ToContainersConverter -from cpl_query.extension.list import List - - -class Role(discord.Role, Container): - def __init__(self, _t: discord.Role): - Container.__init__(self, _t, Role) - - @property - def members(self) -> List["Member"]: - from cpl_discord.container.member import Member - - return List(Member, ToContainersConverter.convert(self._object.members, Member)) diff --git a/src/cpl_discord/container/text_channel.py b/src/cpl_discord/container/text_channel.py deleted file mode 100644 index d6ae2782..00000000 --- a/src/cpl_discord/container/text_channel.py +++ /dev/null @@ -1,20 +0,0 @@ -import discord - -from cpl_discord.container.container import Container -from cpl_discord.container.member import Member -from cpl_discord.container.thread import Thread -from cpl_discord.helper.to_containers_converter import ToContainersConverter -from cpl_query.extension.list import List - - -class TextChannel(discord.TextChannel, Container): - def __init__(self, _t: discord.TextChannel): - Container.__init__(self, _t, TextChannel) - - @property - def members(self) -> List[discord.Member]: - return List(discord.Member, ToContainersConverter.convert(self._object.members, Member)) - - @property - def threads(self) -> List[Thread]: - return List(Thread, ToContainersConverter.convert(self._object.threads, Thread)) diff --git a/src/cpl_discord/container/thread.py b/src/cpl_discord/container/thread.py deleted file mode 100644 index 66ecd49d..00000000 --- a/src/cpl_discord/container/thread.py +++ /dev/null @@ -1,15 +0,0 @@ -import discord - -from cpl_discord.container.container import Container -from cpl_discord.container.member import Member -from cpl_discord.helper.to_containers_converter import ToContainersConverter -from cpl_query.extension.list import List - - -class Thread(discord.Thread, Container): - def __init__(self, _t: discord.Thread): - Container.__init__(self, _t, Thread) - - @property - def members(self) -> List[Member]: - return List(Member, ToContainersConverter.convert(self._object.members, Member)) diff --git a/src/cpl_discord/container/voice_channel.py b/src/cpl_discord/container/voice_channel.py deleted file mode 100644 index c273d036..00000000 --- a/src/cpl_discord/container/voice_channel.py +++ /dev/null @@ -1,15 +0,0 @@ -import discord - -from cpl_discord.container.container import Container -from cpl_discord.container.member import Member -from cpl_discord.helper.to_containers_converter import ToContainersConverter -from cpl_query.extension.list import List - - -class VoiceChannel(discord.VoiceChannel, Container): - def __init__(self, _t: discord.VoiceChannel): - Container.__init__(self, _t, VoiceChannel) - - @property - def members(self) -> List[Member]: - return List(Member, ToContainersConverter.convert(self._object.members, Member)) diff --git a/src/cpl_discord/cpl-discord.json b/src/cpl_discord/cpl-discord.json deleted file mode 100644 index 26476457..00000000 --- a/src/cpl_discord/cpl-discord.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "ProjectSettings": { - "Name": "cpl-discord", - "Version": { - "Major": "2024", - "Minor": "7", - "Micro": "0" - }, - "Author": "Sven Heidemann", - "AuthorEmail": "sven.heidemann@sh-edraft.de", - "Description": "CPL Discord", - "LongDescription": "Link between discord.py and CPL", - "URL": "https://www.sh-edraft.de", - "CopyrightDate": "2022 - 2023", - "CopyrightName": "sh-edraft.de", - "LicenseName": "MIT", - "LicenseDescription": "MIT, see LICENSE for more details.", - "Dependencies": [ - "cpl-core>=2024.6.2024.07.0", - "discord.py>=2.3.2", - "cpl-query>=2024.6.2024.07.0" - ], - "DevDependencies": [ - "cpl-cli>=2024.6.2024.07.0" - ], - "PythonVersion": ">=3.10", - "PythonPath": {}, - "Classifiers": [] - }, - "BuildSettings": { - "ProjectType": "library", - "SourcePath": "", - "OutputPath": "../../dist", - "Main": "", - "EntryPoint": "", - "IncludePackageData": false, - "Included": [], - "Excluded": [ - "*/__pycache__", - "*/logs", - "*/tests" - ], - "PackageData": { - "cpl_discord": [ - ".cpl/*.py" - ] - }, - "ProjectReferences": [] - } -} \ No newline at end of file diff --git a/src/cpl_discord/discord_event_types_enum.py b/src/cpl_discord/discord_event_types_enum.py deleted file mode 100644 index 9d306cb7..00000000 --- a/src/cpl_discord/discord_event_types_enum.py +++ /dev/null @@ -1,117 +0,0 @@ -from enum import Enum - -from cpl_discord.events.on_bulk_message_delete_abc import OnBulkMessageDeleteABC -from cpl_discord.events.on_command_abc import OnCommandABC -from cpl_discord.events.on_command_completion_abc import OnCommandCompletionABC -from cpl_discord.events.on_command_error_abc import OnCommandErrorABC -from cpl_discord.events.on_connect_abc import OnConnectABC -from cpl_discord.events.on_disconnect_abc import OnDisconnectABC -from cpl_discord.events.on_error_abc import OnErrorABC -from cpl_discord.events.on_group_join_abc import OnGroupJoinABC -from cpl_discord.events.on_group_remove_abc import OnGroupRemoveABC -from cpl_discord.events.on_guild_available_abc import OnGuildAvailableABC -from cpl_discord.events.on_guild_channel_create_abc import OnGuildChannelCreateABC -from cpl_discord.events.on_guild_channel_delete_abc import OnGuildChannelDeleteABC -from cpl_discord.events.on_guild_channel_pins_update_abc import OnGuildChannelPinsUpdateABC -from cpl_discord.events.on_guild_channel_update_abc import OnGuildChannelUpdateABC -from cpl_discord.events.on_guild_emojis_update_abc import OnGuildEmojisUpdateABC -from cpl_discord.events.on_guild_integrations_update_abc import OnGuildIntegrationsUpdateABC -from cpl_discord.events.on_guild_join_abc import OnGuildJoinABC -from cpl_discord.events.on_guild_remove_abc import OnGuildRemoveABC -from cpl_discord.events.on_guild_role_create_abc import OnGuildRoleCreateABC -from cpl_discord.events.on_guild_role_delete_abc import OnGuildRoleDeleteABC -from cpl_discord.events.on_guild_role_update_abc import OnGuildRoleUpdateABC -from cpl_discord.events.on_guild_unavailable_abc import OnGuildUnavailableABC -from cpl_discord.events.on_guild_update_abc import OnGuildUpdateABC -from cpl_discord.events.on_invite_create_abc import OnInviteCreateABC -from cpl_discord.events.on_invite_delete_abc import OnInviteDeleteABC -from cpl_discord.events.on_member_ban_abc import OnMemberBanABC -from cpl_discord.events.on_member_join_abc import OnMemberJoinABC -from cpl_discord.events.on_member_remove_abc import OnMemberRemoveABC -from cpl_discord.events.on_member_unban_abc import OnMemberUnbanABC -from cpl_discord.events.on_member_update_abc import OnMemberUpdateABC -from cpl_discord.events.on_message_abc import OnMessageABC -from cpl_discord.events.on_message_delete_abc import OnMessageDeleteABC -from cpl_discord.events.on_message_edit_abc import OnMessageEditABC -from cpl_discord.events.on_private_channel_create_abc import OnPrivateChannelCreateABC -from cpl_discord.events.on_private_channel_delete_abc import OnPrivateChannelDeleteABC -from cpl_discord.events.on_private_channel_pins_update_abc import OnPrivateChannelPinsUpdateABC -from cpl_discord.events.on_private_channel_update_abc import OnPrivateChannelUpdateABC -from cpl_discord.events.on_raw_reaction_add_abc import OnRawReactionAddABC -from cpl_discord.events.on_raw_reaction_clear_abc import OnRawReactionClearABC -from cpl_discord.events.on_raw_reaction_clear_emoji_abc import OnRawReactionClearEmojiABC -from cpl_discord.events.on_raw_reaction_remove_abc import OnRawReactionRemoveABC -from cpl_discord.events.on_reaction_add_abc import OnReactionAddABC -from cpl_discord.events.on_reaction_clear_abc import OnReactionClearABC -from cpl_discord.events.on_reaction_clear_emoji_abc import OnReactionClearEmojiABC -from cpl_discord.events.on_reaction_remove_abc import OnReactionRemoveABC -from cpl_discord.events.on_ready_abc import OnReadyABC -from cpl_discord.events.on_resume_abc import OnResumeABC -from cpl_discord.events.on_scheduled_event_create_abc import OnScheduledEventCreateABC -from cpl_discord.events.on_scheduled_event_delete_abc import OnScheduledEventDeleteABC -from cpl_discord.events.on_scheduled_event_update_abc import OnScheduledEventUpdateABC -from cpl_discord.events.on_scheduled_event_user_add_abc import OnScheduledEventUserAddABC -from cpl_discord.events.on_scheduled_event_user_remove_abc import OnScheduledEventUserRemoveABC -from cpl_discord.events.on_typing_abc import OnTypingABC -from cpl_discord.events.on_user_update_abc import OnUserUpdateABC -from cpl_discord.events.on_voice_state_update_abc import OnVoiceStateUpdateABC -from cpl_discord.events.on_webhooks_update_abc import OnWebhooksUpdateABC - - -class DiscordEventTypesEnum(Enum): - on_bulk_message_delete = OnBulkMessageDeleteABC - on_command = OnCommandABC - on_command_error = OnCommandErrorABC - on_command_completion = OnCommandCompletionABC - on_connect = OnConnectABC - on_disconnect = OnDisconnectABC - on_error = OnErrorABC - on_group_join = OnGroupJoinABC - on_group_remove = OnGroupRemoveABC - on_guild_available = OnGuildAvailableABC - on_guild_channel_create = OnGuildChannelCreateABC - on_guild_channel_delete = OnGuildChannelDeleteABC - on_guild_channel_pins_update = OnGuildChannelPinsUpdateABC - on_guild_channel_update = OnGuildChannelUpdateABC - on_guild_emojis_update = OnGuildEmojisUpdateABC - on_guild_integrations_update = OnGuildIntegrationsUpdateABC - on_guild_join = OnGuildJoinABC - on_guild_remove = OnGuildRemoveABC - on_guild_role_create = OnGuildRoleCreateABC - on_guild_role_delete = OnGuildRoleDeleteABC - on_guild_role_update = OnGuildRoleUpdateABC - on_guild_unavailable = OnGuildUnavailableABC - on_scheduled_event_create = OnScheduledEventCreateABC - on_scheduled_event_delete = OnScheduledEventDeleteABC - on_scheduled_event_update = OnScheduledEventUpdateABC - on_scheduled_event_user_add = OnScheduledEventUserAddABC - on_scheduled_event_user_remove = OnScheduledEventUserRemoveABC - on_guild_update = OnGuildUpdateABC - on_invite_create = OnInviteCreateABC - on_invite_delete = OnInviteDeleteABC - on_member_ban = OnMemberBanABC - on_member_join = OnMemberJoinABC - on_member_remove = OnMemberRemoveABC - on_member_unban = OnMemberUnbanABC - on_member_update = OnMemberUpdateABC - on_message = OnMessageABC - on_message_delete = OnMessageDeleteABC - on_message_edit = OnMessageEditABC - on_private_channel_create = OnPrivateChannelCreateABC - on_private_channel_delete = OnPrivateChannelDeleteABC - on_private_channel_pins_update = OnPrivateChannelPinsUpdateABC - on_private_channel_update = OnPrivateChannelUpdateABC - on_raw_reaction_add = OnRawReactionAddABC - on_raw_reaction_clear = OnRawReactionClearABC - on_raw_reaction_clear_emoji = OnRawReactionClearEmojiABC - on_raw_reaction_remove = OnRawReactionRemoveABC - on_reaction_add = OnReactionAddABC - on_reaction_clear = OnReactionClearABC - on_reaction_clear_emoji = OnReactionClearEmojiABC - on_reaction_remove = OnReactionRemoveABC - on_ready = OnReadyABC - on_resume = OnResumeABC - on_typing = OnTypingABC - on_user_update = OnUserUpdateABC - on_voice_state_update = OnVoiceStateUpdateABC - on_webhooks_update = OnWebhooksUpdateABC diff --git a/src/cpl_discord/events/__init__.py b/src/cpl_discord/events/__init__.py deleted file mode 100644 index 74a2fed2..00000000 --- a/src/cpl_discord/events/__init__.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-discord CPL Discord -~~~~~~~~~~~~~~~~~~~ - -Link between discord.py and CPL - -:copyright: (c) 2022 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_discord.events" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "2023.10.0.post1" - -from collections import namedtuple - - -# imports: -from .on_bulk_message_delete_abc import OnBulkMessageDeleteABC -from .on_command_abc import OnCommandABC -from .on_command_completion_abc import OnCommandCompletionABC -from .on_command_error_abc import OnCommandErrorABC -from .on_connect_abc import OnConnectABC -from .on_disconnect_abc import OnDisconnectABC -from .on_group_join_abc import OnGroupJoinABC -from .on_group_remove_abc import OnGroupRemoveABC -from .on_guild_available_abc import OnGuildAvailableABC -from .on_guild_channel_create_abc import OnGuildChannelCreateABC -from .on_guild_channel_delete_abc import OnGuildChannelDeleteABC -from .on_guild_channel_pins_update_abc import OnGuildChannelPinsUpdateABC -from .on_guild_channel_update_abc import OnGuildChannelUpdateABC -from .on_guild_emojis_update_abc import OnGuildEmojisUpdateABC -from .on_guild_integrations_update_abc import OnGuildIntegrationsUpdateABC -from .on_guild_join_abc import OnGuildJoinABC -from .on_guild_remove_abc import OnGuildRemoveABC -from .on_guild_role_create_abc import OnGuildRoleCreateABC -from .on_guild_role_delete_abc import OnGuildRoleDeleteABC -from .on_guild_role_update_abc import OnGuildRoleUpdateABC -from .on_guild_unavailable_abc import OnGuildUnavailableABC -from .on_guild_update_abc import OnGuildUpdateABC -from .on_invite_create_abc import OnInviteCreateABC -from .on_invite_delete_abc import OnInviteDeleteABC -from .on_member_ban_abc import OnMemberBanABC -from .on_member_join_abc import OnMemberJoinABC -from .on_member_remove_abc import OnMemberRemoveABC -from .on_member_unban_abc import OnMemberUnbanABC -from .on_member_update_abc import OnMemberUpdateABC -from .on_message_abc import OnMessageABC -from .on_message_delete_abc import OnMessageDeleteABC -from .on_message_edit_abc import OnMessageEditABC -from .on_private_channel_create_abc import OnPrivateChannelCreateABC -from .on_private_channel_delete_abc import OnPrivateChannelDeleteABC -from .on_private_channel_pins_update_abc import OnPrivateChannelPinsUpdateABC -from .on_private_channel_update_abc import OnPrivateChannelUpdateABC -from .on_reaction_add_abc import OnReactionAddABC -from .on_reaction_clear_abc import OnReactionClearABC -from .on_reaction_clear_emoji_abc import OnReactionClearEmojiABC -from .on_reaction_remove_abc import OnReactionRemoveABC -from .on_ready_abc import OnReadyABC -from .on_resume_abc import OnResumeABC -from .on_typing_abc import OnTypingABC -from .on_user_update_abc import OnUserUpdateABC -from .on_voice_state_update_abc import OnVoiceStateUpdateABC -from .on_webhooks_update_abc import OnWebhooksUpdateABC - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="10", micro="0.post1") diff --git a/src/cpl_discord/events/on_bulk_message_delete_abc.py b/src/cpl_discord/events/on_bulk_message_delete_abc.py deleted file mode 100644 index 637c7226..00000000 --- a/src/cpl_discord/events/on_bulk_message_delete_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnBulkMessageDeleteABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_bulk_message_delete(self, messages: list[discord.Message]): - pass diff --git a/src/cpl_discord/events/on_command_abc.py b/src/cpl_discord/events/on_command_abc.py deleted file mode 100644 index 4b3bdd30..00000000 --- a/src/cpl_discord/events/on_command_abc.py +++ /dev/null @@ -1,13 +0,0 @@ -from abc import ABC, abstractmethod - -from discord.ext.commands import Context - - -class OnCommandABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_command(self, ctx: Context): - pass diff --git a/src/cpl_discord/events/on_command_completion_abc.py b/src/cpl_discord/events/on_command_completion_abc.py deleted file mode 100644 index bb6053f8..00000000 --- a/src/cpl_discord/events/on_command_completion_abc.py +++ /dev/null @@ -1,13 +0,0 @@ -from abc import ABC, abstractmethod - -from discord.ext.commands import Context, CommandError - - -class OnCommandCompletionABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_command_completion(self, ctx: Context): - pass diff --git a/src/cpl_discord/events/on_command_error_abc.py b/src/cpl_discord/events/on_command_error_abc.py deleted file mode 100644 index c5f68145..00000000 --- a/src/cpl_discord/events/on_command_error_abc.py +++ /dev/null @@ -1,13 +0,0 @@ -from abc import ABC, abstractmethod - -from discord.ext.commands import Context, CommandError - - -class OnCommandErrorABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_command_error(self, ctx: Context, error: CommandError): - pass diff --git a/src/cpl_discord/events/on_connect_abc.py b/src/cpl_discord/events/on_connect_abc.py deleted file mode 100644 index eeebc349..00000000 --- a/src/cpl_discord/events/on_connect_abc.py +++ /dev/null @@ -1,11 +0,0 @@ -from abc import ABC, abstractmethod - - -class OnConnectABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_connect(self): - pass diff --git a/src/cpl_discord/events/on_disconnect_abc.py b/src/cpl_discord/events/on_disconnect_abc.py deleted file mode 100644 index eaea1378..00000000 --- a/src/cpl_discord/events/on_disconnect_abc.py +++ /dev/null @@ -1,11 +0,0 @@ -from abc import ABC, abstractmethod - - -class OnDisconnectABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_disconnect(self): - pass diff --git a/src/cpl_discord/events/on_error_abc.py b/src/cpl_discord/events/on_error_abc.py deleted file mode 100644 index e757c685..00000000 --- a/src/cpl_discord/events/on_error_abc.py +++ /dev/null @@ -1,11 +0,0 @@ -from abc import ABC, abstractmethod - - -class OnErrorABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_error(self, event: str, *args, **kwargs): - pass diff --git a/src/cpl_discord/events/on_group_join_abc.py b/src/cpl_discord/events/on_group_join_abc.py deleted file mode 100644 index 96ab9867..00000000 --- a/src/cpl_discord/events/on_group_join_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnGroupJoinABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_group_join(self, channel: discord.GroupChannel, user: discord.User): - pass diff --git a/src/cpl_discord/events/on_group_remove_abc.py b/src/cpl_discord/events/on_group_remove_abc.py deleted file mode 100644 index 73ccc3d9..00000000 --- a/src/cpl_discord/events/on_group_remove_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnGroupRemoveABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_group_remove(self, chhanel: discord.GroupChannel, user: discord.User): - pass diff --git a/src/cpl_discord/events/on_guild_available_abc.py b/src/cpl_discord/events/on_guild_available_abc.py deleted file mode 100644 index d7ed0ba5..00000000 --- a/src/cpl_discord/events/on_guild_available_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnGuildAvailableABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_guild_available(self, guild: discord.Guild): - pass diff --git a/src/cpl_discord/events/on_guild_channel_create_abc.py b/src/cpl_discord/events/on_guild_channel_create_abc.py deleted file mode 100644 index bdb3e79d..00000000 --- a/src/cpl_discord/events/on_guild_channel_create_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnGuildChannelCreateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_guild_channel_create(self, channel: discord.abc.GuildChannel): - pass diff --git a/src/cpl_discord/events/on_guild_channel_delete_abc.py b/src/cpl_discord/events/on_guild_channel_delete_abc.py deleted file mode 100644 index 7a986732..00000000 --- a/src/cpl_discord/events/on_guild_channel_delete_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnGuildChannelDeleteABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_guild_channel_delete(self, channel: discord.abc.GuildChannel): - pass diff --git a/src/cpl_discord/events/on_guild_channel_pins_update_abc.py b/src/cpl_discord/events/on_guild_channel_pins_update_abc.py deleted file mode 100644 index 4a7a7d2b..00000000 --- a/src/cpl_discord/events/on_guild_channel_pins_update_abc.py +++ /dev/null @@ -1,14 +0,0 @@ -from abc import ABC, abstractmethod -from datetime import datetime -from typing import Optional -import discord - - -class OnGuildChannelPinsUpdateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_guild_channel_pins_update(self, channel: discord.abc.GuildChannel, list_pin: Optional[datetime]): - pass diff --git a/src/cpl_discord/events/on_guild_channel_update_abc.py b/src/cpl_discord/events/on_guild_channel_update_abc.py deleted file mode 100644 index 95ffa01e..00000000 --- a/src/cpl_discord/events/on_guild_channel_update_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnGuildChannelUpdateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_guild_channel_update(self, before: discord.abc.GuildChannel, after: discord.abc.GuildChannel): - pass diff --git a/src/cpl_discord/events/on_guild_emojis_update_abc.py b/src/cpl_discord/events/on_guild_emojis_update_abc.py deleted file mode 100644 index d9522af1..00000000 --- a/src/cpl_discord/events/on_guild_emojis_update_abc.py +++ /dev/null @@ -1,15 +0,0 @@ -from abc import ABC, abstractmethod -from typing import Sequence -import discord - - -class OnGuildEmojisUpdateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_guild_emojis_update( - self, guild: discord.Guild, before: Sequence[discord.Emoji], after: Sequence[discord.Emoji] - ): - pass diff --git a/src/cpl_discord/events/on_guild_integrations_update_abc.py b/src/cpl_discord/events/on_guild_integrations_update_abc.py deleted file mode 100644 index 3476266a..00000000 --- a/src/cpl_discord/events/on_guild_integrations_update_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnGuildIntegrationsUpdateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_guild_integrations_update(self, guild: discord.Guild): - pass diff --git a/src/cpl_discord/events/on_guild_join_abc.py b/src/cpl_discord/events/on_guild_join_abc.py deleted file mode 100644 index b7f83b8f..00000000 --- a/src/cpl_discord/events/on_guild_join_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnGuildJoinABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_guild_join(self, guild: discord.Guild): - pass diff --git a/src/cpl_discord/events/on_guild_remove_abc.py b/src/cpl_discord/events/on_guild_remove_abc.py deleted file mode 100644 index 9f748d20..00000000 --- a/src/cpl_discord/events/on_guild_remove_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnGuildRemoveABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_guild_remove(self, guild: discord.Guild): - pass diff --git a/src/cpl_discord/events/on_guild_role_create_abc.py b/src/cpl_discord/events/on_guild_role_create_abc.py deleted file mode 100644 index 6722b839..00000000 --- a/src/cpl_discord/events/on_guild_role_create_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnGuildRoleCreateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_guild_role_create(self, role: discord.Role): - pass diff --git a/src/cpl_discord/events/on_guild_role_delete_abc.py b/src/cpl_discord/events/on_guild_role_delete_abc.py deleted file mode 100644 index 62652074..00000000 --- a/src/cpl_discord/events/on_guild_role_delete_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnGuildRoleDeleteABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_guild_role_delete(self, role: discord.Role): - pass diff --git a/src/cpl_discord/events/on_guild_role_update_abc.py b/src/cpl_discord/events/on_guild_role_update_abc.py deleted file mode 100644 index 5a82fc11..00000000 --- a/src/cpl_discord/events/on_guild_role_update_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnGuildRoleUpdateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_guild_role_update(self, before: discord.Role, after: discord.Role): - pass diff --git a/src/cpl_discord/events/on_guild_unavailable_abc.py b/src/cpl_discord/events/on_guild_unavailable_abc.py deleted file mode 100644 index 1de4a329..00000000 --- a/src/cpl_discord/events/on_guild_unavailable_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnGuildUnavailableABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_guild_unavailable(self, guild: discord.Guild): - pass diff --git a/src/cpl_discord/events/on_guild_update_abc.py b/src/cpl_discord/events/on_guild_update_abc.py deleted file mode 100644 index 4901da1b..00000000 --- a/src/cpl_discord/events/on_guild_update_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnGuildUpdateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_guild_update(self, before: discord.Guild, after: discord.Guild): - pass diff --git a/src/cpl_discord/events/on_invite_create_abc.py b/src/cpl_discord/events/on_invite_create_abc.py deleted file mode 100644 index 7931c9b7..00000000 --- a/src/cpl_discord/events/on_invite_create_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnInviteCreateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_invite_create(self, invite: discord.Invite): - pass diff --git a/src/cpl_discord/events/on_invite_delete_abc.py b/src/cpl_discord/events/on_invite_delete_abc.py deleted file mode 100644 index 779a778c..00000000 --- a/src/cpl_discord/events/on_invite_delete_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnInviteDeleteABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_invite_delete(self, invite: discord.Invite): - pass diff --git a/src/cpl_discord/events/on_member_ban_abc.py b/src/cpl_discord/events/on_member_ban_abc.py deleted file mode 100644 index 5102af01..00000000 --- a/src/cpl_discord/events/on_member_ban_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnMemberBanABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_member_ban(self, guild: discord.Guild, user: discord.User): - pass diff --git a/src/cpl_discord/events/on_member_join_abc.py b/src/cpl_discord/events/on_member_join_abc.py deleted file mode 100644 index 5a9ea95b..00000000 --- a/src/cpl_discord/events/on_member_join_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnMemberJoinABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_member_join(self, member: discord.Member): - pass diff --git a/src/cpl_discord/events/on_member_remove_abc.py b/src/cpl_discord/events/on_member_remove_abc.py deleted file mode 100644 index faa965fe..00000000 --- a/src/cpl_discord/events/on_member_remove_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnMemberRemoveABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_member_remove(self, member: discord.Member): - pass diff --git a/src/cpl_discord/events/on_member_unban_abc.py b/src/cpl_discord/events/on_member_unban_abc.py deleted file mode 100644 index 6a82095c..00000000 --- a/src/cpl_discord/events/on_member_unban_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnMemberUnbanABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_member_unban(self, guild: discord.Guild, user: discord.User): - pass diff --git a/src/cpl_discord/events/on_member_update_abc.py b/src/cpl_discord/events/on_member_update_abc.py deleted file mode 100644 index fe1e1835..00000000 --- a/src/cpl_discord/events/on_member_update_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnMemberUpdateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_member_update(self, before: discord.Member, after: discord.Member): - pass diff --git a/src/cpl_discord/events/on_message_abc.py b/src/cpl_discord/events/on_message_abc.py deleted file mode 100644 index 15cfaee8..00000000 --- a/src/cpl_discord/events/on_message_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnMessageABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_message(self, message: discord.Message): - pass diff --git a/src/cpl_discord/events/on_message_delete_abc.py b/src/cpl_discord/events/on_message_delete_abc.py deleted file mode 100644 index 39737550..00000000 --- a/src/cpl_discord/events/on_message_delete_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnMessageDeleteABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_message_delete(self, message: discord.Message): - pass diff --git a/src/cpl_discord/events/on_message_edit_abc.py b/src/cpl_discord/events/on_message_edit_abc.py deleted file mode 100644 index b2307240..00000000 --- a/src/cpl_discord/events/on_message_edit_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnMessageEditABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_message_edit(self, before: discord.Message, after: discord.Message): - pass diff --git a/src/cpl_discord/events/on_private_channel_create_abc.py b/src/cpl_discord/events/on_private_channel_create_abc.py deleted file mode 100644 index fa12e739..00000000 --- a/src/cpl_discord/events/on_private_channel_create_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnPrivateChannelCreateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_private_channel_create(self, channel: discord.abc.PrivateChannel): - pass diff --git a/src/cpl_discord/events/on_private_channel_delete_abc.py b/src/cpl_discord/events/on_private_channel_delete_abc.py deleted file mode 100644 index bb0cef00..00000000 --- a/src/cpl_discord/events/on_private_channel_delete_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnPrivateChannelDeleteABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_private_channel_delete(self, channel: discord.abc.PrivateChannel): - pass diff --git a/src/cpl_discord/events/on_private_channel_pins_update_abc.py b/src/cpl_discord/events/on_private_channel_pins_update_abc.py deleted file mode 100644 index b3f9d56b..00000000 --- a/src/cpl_discord/events/on_private_channel_pins_update_abc.py +++ /dev/null @@ -1,14 +0,0 @@ -from abc import ABC, abstractmethod -from datetime import datetime -from typing import Optional -import discord - - -class OnPrivateChannelPinsUpdateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_private_channel_pins_update(self, channel: discord.abc.PrivateChannel, list_pin: Optional[datetime]): - pass diff --git a/src/cpl_discord/events/on_private_channel_update_abc.py b/src/cpl_discord/events/on_private_channel_update_abc.py deleted file mode 100644 index 16a498c7..00000000 --- a/src/cpl_discord/events/on_private_channel_update_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnPrivateChannelUpdateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_private_channel_update(self, before: discord.GroupChannel, after: discord.GroupChannel): - pass diff --git a/src/cpl_discord/events/on_raw_reaction_add_abc.py b/src/cpl_discord/events/on_raw_reaction_add_abc.py deleted file mode 100644 index 385af8bf..00000000 --- a/src/cpl_discord/events/on_raw_reaction_add_abc.py +++ /dev/null @@ -1,13 +0,0 @@ -from abc import ABC, abstractmethod -import discord -from discord import RawReactionActionEvent - - -class OnRawReactionAddABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_raw_reaction_add(self, payload: RawReactionActionEvent): - pass diff --git a/src/cpl_discord/events/on_raw_reaction_clear_abc.py b/src/cpl_discord/events/on_raw_reaction_clear_abc.py deleted file mode 100644 index 9937abe4..00000000 --- a/src/cpl_discord/events/on_raw_reaction_clear_abc.py +++ /dev/null @@ -1,13 +0,0 @@ -from abc import ABC, abstractmethod -import discord -from discord import RawReactionActionEvent - - -class OnRawReactionClearABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_raw_reaction_clear(self, payload: RawReactionActionEvent): - pass diff --git a/src/cpl_discord/events/on_raw_reaction_clear_emoji_abc.py b/src/cpl_discord/events/on_raw_reaction_clear_emoji_abc.py deleted file mode 100644 index 70521836..00000000 --- a/src/cpl_discord/events/on_raw_reaction_clear_emoji_abc.py +++ /dev/null @@ -1,13 +0,0 @@ -from abc import ABC, abstractmethod -import discord -from discord import RawReactionActionEvent - - -class OnRawReactionClearEmojiABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_raw_reaction_clear_emoji(self, payload: RawReactionActionEvent): - pass diff --git a/src/cpl_discord/events/on_raw_reaction_remove_abc.py b/src/cpl_discord/events/on_raw_reaction_remove_abc.py deleted file mode 100644 index 50efb2d2..00000000 --- a/src/cpl_discord/events/on_raw_reaction_remove_abc.py +++ /dev/null @@ -1,13 +0,0 @@ -from abc import ABC, abstractmethod -import discord -from discord import RawReactionActionEvent - - -class OnRawReactionRemoveABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_raw_reaction_remove(self, payload: RawReactionActionEvent): - pass diff --git a/src/cpl_discord/events/on_reaction_add_abc.py b/src/cpl_discord/events/on_reaction_add_abc.py deleted file mode 100644 index 1bfa872f..00000000 --- a/src/cpl_discord/events/on_reaction_add_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnReactionAddABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_reaction_add(self, reaction: discord.Reaction, user: discord.User): - pass diff --git a/src/cpl_discord/events/on_reaction_clear_abc.py b/src/cpl_discord/events/on_reaction_clear_abc.py deleted file mode 100644 index 881c6632..00000000 --- a/src/cpl_discord/events/on_reaction_clear_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnReactionClearABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_reaction_clear(self, message: discord.Message, reactions: list[discord.Reaction]): - pass diff --git a/src/cpl_discord/events/on_reaction_clear_emoji_abc.py b/src/cpl_discord/events/on_reaction_clear_emoji_abc.py deleted file mode 100644 index bfd7e876..00000000 --- a/src/cpl_discord/events/on_reaction_clear_emoji_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnReactionClearEmojiABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_reaction_clear_emoji(self, reaction: discord.Reaction): - pass diff --git a/src/cpl_discord/events/on_reaction_remove_abc.py b/src/cpl_discord/events/on_reaction_remove_abc.py deleted file mode 100644 index b43d890a..00000000 --- a/src/cpl_discord/events/on_reaction_remove_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnReactionRemoveABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_reaction_remove(self, reaction: discord.Reaction, user: discord.User): - pass diff --git a/src/cpl_discord/events/on_ready_abc.py b/src/cpl_discord/events/on_ready_abc.py deleted file mode 100644 index 91eb4a37..00000000 --- a/src/cpl_discord/events/on_ready_abc.py +++ /dev/null @@ -1,11 +0,0 @@ -from abc import ABC, abstractmethod - - -class OnReadyABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_ready(self): - pass diff --git a/src/cpl_discord/events/on_resume_abc.py b/src/cpl_discord/events/on_resume_abc.py deleted file mode 100644 index 6409b4db..00000000 --- a/src/cpl_discord/events/on_resume_abc.py +++ /dev/null @@ -1,11 +0,0 @@ -from abc import ABC, abstractmethod - - -class OnResumeABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_resume(self): - pass diff --git a/src/cpl_discord/events/on_scheduled_event_create_abc.py b/src/cpl_discord/events/on_scheduled_event_create_abc.py deleted file mode 100644 index 7a0924f4..00000000 --- a/src/cpl_discord/events/on_scheduled_event_create_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnScheduledEventCreateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_scheduled_event_create(self, event: discord.ScheduledEvent): - pass diff --git a/src/cpl_discord/events/on_scheduled_event_delete_abc.py b/src/cpl_discord/events/on_scheduled_event_delete_abc.py deleted file mode 100644 index 15cbb434..00000000 --- a/src/cpl_discord/events/on_scheduled_event_delete_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnScheduledEventDeleteABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_scheduled_event_delete(self, event: discord.ScheduledEvent): - pass diff --git a/src/cpl_discord/events/on_scheduled_event_update_abc.py b/src/cpl_discord/events/on_scheduled_event_update_abc.py deleted file mode 100644 index ba2a4c16..00000000 --- a/src/cpl_discord/events/on_scheduled_event_update_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnScheduledEventUpdateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_scheduled_event_update(self, before: discord.ScheduledEvent, after: discord.ScheduledEvent): - pass diff --git a/src/cpl_discord/events/on_scheduled_event_user_add_abc.py b/src/cpl_discord/events/on_scheduled_event_user_add_abc.py deleted file mode 100644 index 0c2dcfc6..00000000 --- a/src/cpl_discord/events/on_scheduled_event_user_add_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnScheduledEventUserAddABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_scheduled_event_user_add(self, event: discord.ScheduledEvent, user: discord.User): - pass diff --git a/src/cpl_discord/events/on_scheduled_event_user_remove_abc.py b/src/cpl_discord/events/on_scheduled_event_user_remove_abc.py deleted file mode 100644 index 723e4189..00000000 --- a/src/cpl_discord/events/on_scheduled_event_user_remove_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnScheduledEventUserRemoveABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_scheduled_event_user_remove(self, event: discord.ScheduledEvent, user: discord.User): - pass diff --git a/src/cpl_discord/events/on_typing_abc.py b/src/cpl_discord/events/on_typing_abc.py deleted file mode 100644 index 3776c0a7..00000000 --- a/src/cpl_discord/events/on_typing_abc.py +++ /dev/null @@ -1,16 +0,0 @@ -from abc import ABC, abstractmethod -from datetime import datetime -from typing import Union -import discord - - -class OnTypingABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_typing( - self, channel: discord.abc.Messageable, user: Union[discord.User, discord.Member], when: datetime - ): - pass diff --git a/src/cpl_discord/events/on_user_update_abc.py b/src/cpl_discord/events/on_user_update_abc.py deleted file mode 100644 index 6fd90e91..00000000 --- a/src/cpl_discord/events/on_user_update_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnUserUpdateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_user_update(self, before: discord.User, after: discord.User): - pass diff --git a/src/cpl_discord/events/on_voice_state_update_abc.py b/src/cpl_discord/events/on_voice_state_update_abc.py deleted file mode 100644 index 150a8b3f..00000000 --- a/src/cpl_discord/events/on_voice_state_update_abc.py +++ /dev/null @@ -1,14 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnVoiceStateUpdateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_voice_state_update( - self, member: discord.Member, before: discord.VoiceState, after: discord.VoiceState - ): - pass diff --git a/src/cpl_discord/events/on_webhooks_update_abc.py b/src/cpl_discord/events/on_webhooks_update_abc.py deleted file mode 100644 index 6b497681..00000000 --- a/src/cpl_discord/events/on_webhooks_update_abc.py +++ /dev/null @@ -1,12 +0,0 @@ -from abc import ABC, abstractmethod -import discord - - -class OnWebhooksUpdateABC(ABC): - @abstractmethod - def __init__(self): - pass - - @abstractmethod - async def on_webhooks_update(self, channel: discord.abc.GuildChannel): - pass diff --git a/src/cpl_discord/helper/__init__.py b/src/cpl_discord/helper/__init__.py deleted file mode 100644 index 28a89154..00000000 --- a/src/cpl_discord/helper/__init__.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-discord CPL Discord -~~~~~~~~~~~~~~~~~~~ - -Link between discord.py and CPL - -:copyright: (c) 2022 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_discord.helper" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "2023.10.0.post1" - -from collections import namedtuple - - -# imports -from .to_containers_converter import ToContainersConverter - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="10", micro="0.post1") diff --git a/src/cpl_discord/helper/to_containers_converter.py b/src/cpl_discord/helper/to_containers_converter.py deleted file mode 100644 index 1389f6b6..00000000 --- a/src/cpl_discord/helper/to_containers_converter.py +++ /dev/null @@ -1,12 +0,0 @@ -from typing import Union, Sequence - -from cpl_discord.container.container import Container - - -class ToContainersConverter: - @staticmethod - def convert(_l: Union[list[object], Sequence[object]], _t: type) -> list[Container]: - values = [] - for e in _l: - values.append(_t(e)) - return values diff --git a/src/cpl_discord/service/__init__.py b/src/cpl_discord/service/__init__.py deleted file mode 100644 index 45140b51..00000000 --- a/src/cpl_discord/service/__init__.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-discord CPL Discord -~~~~~~~~~~~~~~~~~~~ - -Link between discord.py and CPL - -:copyright: (c) 2022 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_discord.service" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "2023.10.0.post1" - -from collections import namedtuple - - -# imports: -from .command_error_handler_service import CommandErrorHandlerService -from .discord_bot_service import DiscordBotService -from .discord_bot_service_abc import DiscordBotServiceABC -from .discord_collection import DiscordCollection -from .discord_service import DiscordService -from .discord_service_abc import DiscordServiceABC - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="10", micro="0.post1") diff --git a/src/cpl_discord/service/command_error_handler_service.py b/src/cpl_discord/service/command_error_handler_service.py deleted file mode 100644 index 3b33b4bc..00000000 --- a/src/cpl_discord/service/command_error_handler_service.py +++ /dev/null @@ -1,13 +0,0 @@ -from discord.ext.commands import Context, CommandError - -from cpl_core.logging import LoggerABC -from cpl_discord.events.on_command_error_abc import OnCommandErrorABC - - -class CommandErrorHandlerService(OnCommandErrorABC): - def __init__(self, logger: LoggerABC): - OnCommandErrorABC.__init__(self) - self._logger = logger - - async def on_command_error(self, ctx: Context, error: CommandError): - self._logger.error(__name__, f"Error in command: {ctx.command}", error) diff --git a/src/cpl_discord/service/discord_bot_service.py b/src/cpl_discord/service/discord_bot_service.py deleted file mode 100644 index 4213eabd..00000000 --- a/src/cpl_discord/service/discord_bot_service.py +++ /dev/null @@ -1,98 +0,0 @@ -import discord - -from cpl_core.configuration import ConfigurationABC -from cpl_core.console import Console -from cpl_core.environment import ApplicationEnvironmentABC -from cpl_core.logging import LoggerABC, LoggingSettings, LoggingLevelEnum -from cpl_discord.configuration.discord_bot_settings import DiscordBotSettings -from cpl_discord.container.guild import Guild -from cpl_discord.helper.to_containers_converter import ToContainersConverter -from cpl_discord.service.discord_bot_service_abc import DiscordBotServiceABC -from cpl_discord.service.discord_service_abc import DiscordServiceABC -from cpl_query.extension.list import List - - -class DiscordBotService(DiscordBotServiceABC): - def __init__( - self, - config: ConfigurationABC, - logger: LoggerABC, - discord_bot_settings: DiscordBotSettings, - env: ApplicationEnvironmentABC, - logging_st: LoggingSettings, - discord_service: DiscordServiceABC, - *args, - **kwargs, - ): - # services - self._config = config - self._logger = logger - self._env = env - self._logging_st = logging_st - self._discord_service = discord_service - - # settings - self._discord_settings = self._get_settings(discord_bot_settings) - - # setup super - DiscordBotServiceABC.__init__( - self, - *args, - command_prefix=self._discord_settings.prefix, - help_command=None, - intents=discord.Intents().all(), - **kwargs, - ) - self._base = super(DiscordBotServiceABC, self) - - @staticmethod - def _is_string_invalid(x): - return x is None or x == "" - - def _get_settings(self, settings_from_config: DiscordBotSettings) -> DiscordBotSettings: - new_settings = DiscordBotSettings() - token = None if settings_from_config is None else settings_from_config.token - prefix = None if settings_from_config is None else settings_from_config.prefix - env_token = self._config.get_configuration("TOKEN") - env_prefix = self._config.get_configuration("PREFIX") - - new_settings = DiscordBotSettings( - env_token if token is None or token == "" else token, - ("! " if self._is_string_invalid(env_prefix) else env_prefix) - if self._is_string_invalid(prefix) - else prefix, - ) - - if new_settings.token is None or new_settings.token == "": - raise Exception("You have to configure discord token by appsettings or environment variables") - return new_settings - - async def start_async(self): - self._logger.trace(__name__, "Try to connect to discord") - await self.start(self._discord_settings.token) - # continue at on_ready - - async def stop_async(self): - self._logger.trace(__name__, "Try to disconnect from discord") - try: - await self.close() - except Exception as e: - self._logger.error(__name__, "Stop failed", e) - - async def on_ready(self): - self._logger.info(__name__, "Connected to discord") - - self._logger.header(f"{self.user.name}:") - if self._logging_st.console.value >= LoggingLevelEnum.INFO.value: - Console.banner(self._env.application_name if self._env.application_name != "" else "A bot") - - await self._discord_service.init(self) - await self.wait_until_ready() - await self.tree.sync() - self._logger.debug(__name__, f"Finished syncing commands") - - await self._discord_service.on_ready() - - @property - def guilds(self) -> List[Guild]: - return List(Guild, ToContainersConverter.convert(self._base.guilds, Guild)) diff --git a/src/cpl_discord/service/discord_bot_service_abc.py b/src/cpl_discord/service/discord_bot_service_abc.py deleted file mode 100644 index 0ee271bc..00000000 --- a/src/cpl_discord/service/discord_bot_service_abc.py +++ /dev/null @@ -1,28 +0,0 @@ -from abc import abstractmethod - -from discord.ext import commands - -from cpl_discord.container.guild import Guild -from cpl_query.extension.list import List - - -class DiscordBotServiceABC(commands.Bot): - def __init__(self, *args, **kwargs): - commands.Bot.__init__(self, *args, **kwargs) - - @abstractmethod - async def start_async(self): - pass - - @abstractmethod - async def stop_async(self): - pass - - @abstractmethod - async def on_ready(self): - pass - - @property - @abstractmethod - def guilds(self) -> List[Guild]: - pass diff --git a/src/cpl_discord/service/discord_collection.py b/src/cpl_discord/service/discord_collection.py deleted file mode 100644 index 28b18122..00000000 --- a/src/cpl_discord/service/discord_collection.py +++ /dev/null @@ -1,33 +0,0 @@ -from typing import Type - -from cpl_core.console import Console, ForegroundColorEnum -from cpl_core.dependency_injection import ServiceCollectionABC -from cpl_discord.command.discord_command_abc import DiscordCommandABC -from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum -from cpl_discord.service.command_error_handler_service import CommandErrorHandlerService -from cpl_discord.service.discord_collection_abc import DiscordCollectionABC - - -class DiscordCollection(DiscordCollectionABC): - def __init__(self, service_collection: ServiceCollectionABC): - DiscordCollectionABC.__init__(self) - - self._services = service_collection - - self._services.add_transient(DiscordEventTypesEnum.on_command_error.value, CommandErrorHandlerService) - - def add_command(self, _t: Type[DiscordCommandABC]): - Console.set_foreground_color(ForegroundColorEnum.yellow) - Console.write_line( - f"{type(self).__name__}.add_command is deprecated. Instead, use ServiceCollection.add_transient directly!" - ) - Console.color_reset() - self._services.add_transient(DiscordCommandABC, _t) - - def add_event(self, _t_event: Type, _t: Type): - Console.set_foreground_color(ForegroundColorEnum.yellow) - Console.write_line( - f"{type(self).__name__}.add_event is deprecated. Instead, use ServiceCollection.add_transient directly!" - ) - Console.color_reset() - self._services.add_transient(_t_event, _t) diff --git a/src/cpl_discord/service/discord_collection_abc.py b/src/cpl_discord/service/discord_collection_abc.py deleted file mode 100644 index 1b9dde62..00000000 --- a/src/cpl_discord/service/discord_collection_abc.py +++ /dev/null @@ -1,18 +0,0 @@ -from abc import ABC, abstractmethod -from typing import Type - -from cpl_discord.command import DiscordCommandABC -from cpl_query.extension.list import List - - -class DiscordCollectionABC(ABC): - def __init__(self): - ABC.__init__(self) - - @abstractmethod - def add_command(self, _t: Type[DiscordCommandABC]): - pass - - @abstractmethod - def add_event(self, _t_event: Type, _t: Type): - pass diff --git a/src/cpl_discord/service/discord_service.py b/src/cpl_discord/service/discord_service.py deleted file mode 100644 index 82bcd35a..00000000 --- a/src/cpl_discord/service/discord_service.py +++ /dev/null @@ -1,397 +0,0 @@ -from datetime import datetime -from typing import Optional, Sequence, Union, Type - -import discord -from discord import RawReactionActionEvent -from discord.ext import commands -from discord.ext.commands import Context, CommandError, Cog - -from cpl_core.dependency_injection import ServiceProviderABC -from cpl_core.logging import LoggerABC -from cpl_core.utils import String -from cpl_discord.command import DiscordCommandABC -from cpl_discord.command.discord_commands_meta import DiscordCogMeta -from cpl_discord.events.on_bulk_message_delete_abc import OnBulkMessageDeleteABC -from cpl_discord.events.on_command_abc import OnCommandABC -from cpl_discord.events.on_command_completion_abc import OnCommandCompletionABC -from cpl_discord.events.on_command_error_abc import OnCommandErrorABC -from cpl_discord.events.on_connect_abc import OnConnectABC -from cpl_discord.events.on_disconnect_abc import OnDisconnectABC -from cpl_discord.events.on_error_abc import OnErrorABC -from cpl_discord.events.on_group_join_abc import OnGroupJoinABC -from cpl_discord.events.on_group_remove_abc import OnGroupRemoveABC -from cpl_discord.events.on_guild_available_abc import OnGuildAvailableABC -from cpl_discord.events.on_guild_channel_create_abc import OnGuildChannelCreateABC -from cpl_discord.events.on_guild_channel_delete_abc import OnGuildChannelDeleteABC -from cpl_discord.events.on_guild_channel_pins_update_abc import OnGuildChannelPinsUpdateABC -from cpl_discord.events.on_guild_channel_update_abc import OnGuildChannelUpdateABC -from cpl_discord.events.on_guild_emojis_update_abc import OnGuildEmojisUpdateABC -from cpl_discord.events.on_guild_integrations_update_abc import OnGuildIntegrationsUpdateABC -from cpl_discord.events.on_guild_join_abc import OnGuildJoinABC -from cpl_discord.events.on_guild_remove_abc import OnGuildRemoveABC -from cpl_discord.events.on_guild_role_create_abc import OnGuildRoleCreateABC -from cpl_discord.events.on_guild_role_delete_abc import OnGuildRoleDeleteABC -from cpl_discord.events.on_guild_role_update_abc import OnGuildRoleUpdateABC -from cpl_discord.events.on_guild_unavailable_abc import OnGuildUnavailableABC -from cpl_discord.events.on_guild_update_abc import OnGuildUpdateABC -from cpl_discord.events.on_invite_create_abc import OnInviteCreateABC -from cpl_discord.events.on_invite_delete_abc import OnInviteDeleteABC -from cpl_discord.events.on_member_ban_abc import OnMemberBanABC -from cpl_discord.events.on_member_join_abc import OnMemberJoinABC -from cpl_discord.events.on_member_remove_abc import OnMemberRemoveABC -from cpl_discord.events.on_member_unban_abc import OnMemberUnbanABC -from cpl_discord.events.on_member_update_abc import OnMemberUpdateABC -from cpl_discord.events.on_message_abc import OnMessageABC -from cpl_discord.events.on_message_delete_abc import OnMessageDeleteABC -from cpl_discord.events.on_message_edit_abc import OnMessageEditABC -from cpl_discord.events.on_private_channel_create_abc import OnPrivateChannelCreateABC -from cpl_discord.events.on_private_channel_delete_abc import OnPrivateChannelDeleteABC -from cpl_discord.events.on_private_channel_pins_update_abc import OnPrivateChannelPinsUpdateABC -from cpl_discord.events.on_private_channel_update_abc import OnPrivateChannelUpdateABC -from cpl_discord.events.on_raw_reaction_add_abc import OnRawReactionAddABC -from cpl_discord.events.on_raw_reaction_clear_abc import OnRawReactionClearABC -from cpl_discord.events.on_raw_reaction_clear_emoji_abc import OnRawReactionClearEmojiABC -from cpl_discord.events.on_raw_reaction_remove_abc import OnRawReactionRemoveABC -from cpl_discord.events.on_reaction_add_abc import OnReactionAddABC -from cpl_discord.events.on_reaction_clear_abc import OnReactionClearABC -from cpl_discord.events.on_reaction_clear_emoji_abc import OnReactionClearEmojiABC -from cpl_discord.events.on_reaction_remove_abc import OnReactionRemoveABC -from cpl_discord.events.on_ready_abc import OnReadyABC -from cpl_discord.events.on_resume_abc import OnResumeABC -from cpl_discord.events.on_scheduled_event_create_abc import OnScheduledEventCreateABC -from cpl_discord.events.on_scheduled_event_delete_abc import OnScheduledEventDeleteABC -from cpl_discord.events.on_scheduled_event_update_abc import OnScheduledEventUpdateABC -from cpl_discord.events.on_scheduled_event_user_add_abc import OnScheduledEventUserAddABC -from cpl_discord.events.on_scheduled_event_user_remove_abc import OnScheduledEventUserRemoveABC -from cpl_discord.events.on_typing_abc import OnTypingABC -from cpl_discord.events.on_user_update_abc import OnUserUpdateABC -from cpl_discord.events.on_voice_state_update_abc import OnVoiceStateUpdateABC -from cpl_discord.events.on_webhooks_update_abc import OnWebhooksUpdateABC -from cpl_discord.service.discord_service_abc import DiscordServiceABC - - -class DiscordService(DiscordServiceABC, commands.Cog, metaclass=DiscordCogMeta): - def __init__(self, logger: LoggerABC, services: ServiceProviderABC): - DiscordServiceABC.__init__(self) - self._logger = logger - self._services = services - - async def _handle_event(self, event: Type, *args, **kwargs): - for event_instance in self._services.get_services(event): - func_name = event.__name__ - if func_name.endswith("ABC"): - func_name = func_name.replace("ABC", "") - - func_name = String.convert_to_snake_case(func_name) - - try: - func = getattr(event_instance, func_name) - await func(*args, **kwargs) - except Exception as e: - self._logger.error(__name__, f"Cannot execute {func_name} of {type(event_instance).__name__}", e) - - async def init(self, bot: commands.Bot): - try: - await bot.add_cog(self) - except Exception as e: - self._logger.error(__name__, f"{type(self).__name__} initialization failed", e) - - try: - for command in self._services.get_services(DiscordCommandABC): - self._logger.trace(__name__, f"Register command {type(command).__name__}") - if command is None: - self._logger.warn(__name__, f"Instance of {type(command).__name__} not found") - continue - await bot.add_cog(command) - except Exception as e: - self._logger.error(__name__, f"Registration of commands failed", e) - - @commands.Cog.listener() - async def on_connect(self): - self._logger.trace(__name__, f"Received on_connect") - await self._handle_event(OnConnectABC) - - @commands.Cog.listener() - async def on_command(self, ctx: Context): - self._logger.trace(__name__, f"Received on_command") - await self._handle_event(OnCommandABC, ctx) - - @commands.Cog.listener() - async def on_command_error(self, ctx: Context, error: CommandError): - self._logger.trace(__name__, f"Received on_command_error") - await self._handle_event(OnCommandErrorABC, ctx, error) - - @commands.Cog.listener() - async def on_command_completion(self, ctx: Context): - self._logger.trace(__name__, f"Received on_command_completion") - await self._handle_event(OnCommandCompletionABC, ctx) - - @commands.Cog.listener() - async def on_disconnect(self): - self._logger.trace(__name__, f"Received on_disconnect") - await self._handle_event(OnDisconnectABC) - - @commands.Cog.listener() - async def on_error(self, event: str, *args, **kwargs): - self._logger.trace(__name__, f"Received on_error") - await self._handle_event(OnErrorABC, event, *args, **kwargs) - - async def on_ready(self): - self._logger.trace(__name__, f"Received on_ready") - await self._handle_event(OnReadyABC) - - @commands.Cog.listener() - async def on_resume(self): - self._logger.trace(__name__, f"Received on_resume") - await self._handle_event(OnResumeABC) - - @commands.Cog.listener() - async def on_error(self, event: str, *args, **kwargs): - self._logger.trace(__name__, f"Received on_error:\n\t{event}\n\t{args}\n\t{kwargs}") - await self._handle_event(OnReadyABC, event, *args, **kwargs) - - @commands.Cog.listener() - async def on_typing( - self, channel: discord.abc.Messageable, user: Union[discord.User, discord.Member], when: datetime - ): - self._logger.trace(__name__, f"Received on_typing:\n\t{channel}\n\t{user}\n\t{when}") - await self._handle_event(OnTypingABC, channel, user, when) - - @commands.Cog.listener() - async def on_message(self, message: discord.Message): - self._logger.trace(__name__, f"Received on_message:\n\t{message}") - await self._handle_event(OnMessageABC, message) - - @commands.Cog.listener() - async def on_message_delete(self, message: discord.Message): - self._logger.trace(__name__, f"Received on_message_delete:\n\t{message}") - await self._handle_event(OnMessageDeleteABC, message) - - @commands.Cog.listener() - async def on_bulk_message_delete(self, messages: list[discord.Message]): - self._logger.trace(__name__, f"Received on_bulk_message_delete:\n\t{len(messages)}") - await self._handle_event(OnBulkMessageDeleteABC, messages) - - @commands.Cog.listener() - async def on_message_edit(self, before: discord.Message, after: discord.Message): - self._logger.trace(__name__, f"Received on_message_edit:\n\t{before}\n\t{after}") - await self._handle_event(OnMessageEditABC, before, after) - - @commands.Cog.listener() - async def on_raw_reaction_add(self, payload: RawReactionActionEvent): - self._logger.trace(__name__, f"Received on_raw_reaction_add") - await self._handle_event(OnRawReactionAddABC, payload) - - @commands.Cog.listener() - async def on_raw_reaction_remove(self, payload: RawReactionActionEvent): - self._logger.trace(__name__, f"Received on_raw_reaction_remove") - await self._handle_event(OnRawReactionRemoveABC, payload) - - @commands.Cog.listener() - async def on_raw_reaction_clear(self, payload: RawReactionActionEvent): - self._logger.trace(__name__, f"Received on_raw_reaction_clear") - await self._handle_event(OnRawReactionClearABC, payload) - - @commands.Cog.listener() - async def on_raw_reaction_clear_emoji(self, payload: RawReactionActionEvent): - self._logger.trace(__name__, f"Received on_raw_reaction_clear_emoji") - await self._handle_event(OnRawReactionClearEmojiABC, payload) - - @commands.Cog.listener() - async def on_reaction_add(self, reaction: discord.Reaction, user: discord.User): - self._logger.trace(__name__, f"Received on_reaction_add:\n\t{reaction}\n\t{user}") - await self._handle_event(OnReactionAddABC, reaction, user) - - @commands.Cog.listener() - async def on_reaction_remove(self, reaction: discord.Reaction, user: discord.User): - self._logger.trace(__name__, f"Received on_reaction_remove:\n\t{reaction}\n\t{user}") - await self._handle_event(OnReactionRemoveABC, reaction, user) - - @commands.Cog.listener() - async def on_reaction_clear(self, message: discord.Message, reactions: list[discord.Reaction]): - self._logger.trace(__name__, f"Received on_reaction_reon_reaction_clearmove:\n\t{message}\n\t{len(reactions)}") - await self._handle_event(OnReactionClearABC, message, reactions) - - @commands.Cog.listener() - async def on_reaction_clear_emoji(self, reaction: discord.Reaction): - self._logger.trace(__name__, f"Received on_reaction_clear_emoji:\n\t{reaction}") - await self._handle_event(OnReactionClearEmojiABC, reaction) - - @commands.Cog.listener() - async def on_private_channel_delete(self, channel: discord.abc.PrivateChannel): - self._logger.trace(__name__, f"Received on_private_channel_delete:\n\t{channel}") - await self._handle_event(OnPrivateChannelDeleteABC, channel) - - @commands.Cog.listener() - async def on_private_channel_create(self, channel: discord.abc.PrivateChannel): - self._logger.trace(__name__, f"Received on_private_channel_create:\n\t{channel}") - await self._handle_event(OnPrivateChannelCreateABC, channel) - - @commands.Cog.listener() - async def on_private_channel_update(self, before: discord.GroupChannel, after: discord.GroupChannel): - self._logger.trace(__name__, f"Received on_private_channel_update:\n\t{before}\n\t{after}") - await self._handle_event(OnPrivateChannelUpdateABC, before, after) - - @commands.Cog.listener() - async def on_private_channel_pins_update(self, channel: discord.abc.PrivateChannel, list_pin: Optional[datetime]): - self._logger.trace(__name__, f"Received on_private_channel_pins_update:\n\t{channel}\n\t{list_pin}") - await self._handle_event(OnPrivateChannelPinsUpdateABC, channel, list_pin) - - @commands.Cog.listener() - async def on_guild_channel_delete(self, channel: discord.abc.GuildChannel): - self._logger.trace(__name__, f"Received on_guild_channel_delete:\n\t{channel}") - await self._handle_event(OnGuildChannelDeleteABC, channel) - - @commands.Cog.listener() - async def on_guild_channel_create(self, channel: discord.abc.GuildChannel): - self._logger.trace(__name__, f"Received on_guild_channel_create:\n\t{channel}") - await self._handle_event(OnGuildChannelCreateABC, channel) - - @commands.Cog.listener() - async def on_guild_channel_update(self, before: discord.abc.GuildChannel, after: discord.abc.GuildChannel): - self._logger.trace(__name__, f"Received on_guild_channel_update:\n\t{before}\n\t{after}") - await self._handle_event(OnGuildChannelUpdateABC, before, after) - - @commands.Cog.listener() - async def on_guild_channel_pins_update(self, channel: discord.abc.GuildChannel, list_pin: Optional[datetime]): - self._logger.trace(__name__, f"Received on_guild_channel_pins_update:\n\t{channel}\n\t{list_pin}") - await self._handle_event(OnGuildChannelPinsUpdateABC, channel, list_pin) - - @commands.Cog.listener() - async def on_guild_integrations_update(self, guild: discord.Guild): - self._logger.trace(__name__, f"Received on_guild_integrations_update:\n\t{guild}") - await self._handle_event(OnGuildIntegrationsUpdateABC, guild) - - @commands.Cog.listener() - async def on_webhooks_update(self, channel: discord.abc.GuildChannel): - self._logger.trace(__name__, f"Received on_webhooks_update:\n\t{channel}") - await self._handle_event(OnWebhooksUpdateABC, channel) - - @commands.Cog.listener() - async def on_member_join(self, member: discord.Member): - self._logger.trace(__name__, f"Received on_member_join:\n\t{member}") - await self._handle_event(OnMemberJoinABC, member) - - @commands.Cog.listener() - async def on_member_remove(self, member: discord.Member): - self._logger.trace(__name__, f"Received on_member_remove:\n\t{member}") - await self._handle_event(OnMemberRemoveABC, member) - - @commands.Cog.listener() - async def on_member_update(self, before: discord.Member, after: discord.Member): - self._logger.trace(__name__, f"Received on_member_update:\n\t{before}\n\t{after}") - await self._handle_event(OnMemberUpdateABC, before, after) - - @commands.Cog.listener() - async def on_user_update(self, before: discord.User, after: discord.User): - self._logger.trace(__name__, f"Received on_user_update:\n\t{before}\n\t{after}") - await self._handle_event(OnUserUpdateABC, before, after) - - @commands.Cog.listener() - async def on_guild_join(self, guild: discord.Guild): - self._logger.trace(__name__, f"Received on_guild_join:\n\t{guild}") - await self._handle_event(OnGuildJoinABC, guild) - - @commands.Cog.listener() - async def on_guild_remove(self, guild: discord.Guild): - self._logger.trace(__name__, f"Received on_guild_remove:\n\t{guild}") - await self._handle_event(OnGuildRemoveABC, guild) - - @commands.Cog.listener() - async def on_guild_update(self, before: discord.Guild, after: discord.Guild): - self._logger.trace(__name__, f"Received on_guild_update:\n\t{before}\n\t{after}") - await self._handle_event(OnGuildUpdateABC, before, after) - - @commands.Cog.listener() - async def on_guild_role_create(self, role: discord.Role): - self._logger.trace(__name__, f"Received on_guild_role_create:\n\t{role}") - await self._handle_event(OnGuildRoleCreateABC, role) - - @commands.Cog.listener() - async def on_guild_role_delete(self, role: discord.Role): - self._logger.trace(__name__, f"Received on_guild_role_delete:\n\t{role}") - await self._handle_event(OnGuildRoleDeleteABC, role) - - @commands.Cog.listener() - async def on_guild_role_update(self, before: discord.Role, after: discord.Role): - self._logger.trace(__name__, f"Received on_guild_role_update:\n\t{before}\n\t{after}") - await self._handle_event(OnGuildRoleUpdateABC, before, after) - - @commands.Cog.listener() - async def on_guild_emojis_update( - self, guild: discord.Guild, before: Sequence[discord.Emoji], after: Sequence[discord.Emoji] - ): - self._logger.trace(__name__, f"Received on_guild_emojis_update:\n\t{guild}\n\t{before}\n\t{after}") - await self._handle_event(OnGuildEmojisUpdateABC, guild, before, after) - - @commands.Cog.listener() - async def on_guild_available(self, guild: discord.Guild): - self._logger.trace(__name__, f"Received on_guild_available:\n\t{guild}") - await self._handle_event(OnGuildAvailableABC, guild) - - @commands.Cog.listener() - async def on_guild_unavailable(self, guild: discord.Guild): - self._logger.trace(__name__, f"Received on_guild_unavailable:\n\t{guild}") - await self._handle_event(OnGuildUnavailableABC, guild) - - @commands.Cog.listener() - async def on_scheduled_event_create(self, event: discord.ScheduledEvent): - self._logger.trace(__name__, f"Received on_scheduled_event_create:\n\t{event}") - await self._handle_event(OnScheduledEventCreateABC, event) - - @commands.Cog.listener() - async def on_scheduled_event_delete(self, event: discord.ScheduledEvent): - self._logger.trace(__name__, f"Received on_scheduled_event_delete:\n\t{event}") - await self._handle_event(OnScheduledEventDeleteABC, event) - - @commands.Cog.listener() - async def on_scheduled_event_update(self, before: discord.ScheduledEvent, after: discord.ScheduledEvent): - self._logger.trace(__name__, f"Received on_scheduled_event_update:\n\t{before}, {after}") - await self._handle_event(OnScheduledEventUpdateABC, before, after) - - @commands.Cog.listener() - async def on_scheduled_event_user_add(self, event: discord.ScheduledEvent, user: discord.User): - self._logger.trace(__name__, f"Received on_scheduled_event_user_add:\n\t{event}, {user}") - await self._handle_event(OnScheduledEventUserAddABC, event, user) - - @commands.Cog.listener() - async def on_scheduled_event_user_remove(self, event: discord.ScheduledEvent, user: discord.User): - self._logger.trace(__name__, f"Received on_scheduled_event_user_remove:\n\t{event}, {user}") - await self._handle_event(OnScheduledEventUserRemoveABC, event, user) - - @commands.Cog.listener() - async def on_voice_state_update( - self, member: discord.Member, before: discord.VoiceState, after: discord.VoiceState - ): - self._logger.trace(__name__, f"Received on_voice_state_update:\n\t{member}\n\t{before}\n\t{after}") - await self._handle_event(OnVoiceStateUpdateABC, member, before, after) - - @commands.Cog.listener() - async def on_member_ban(self, guild: discord.Guild, user: discord.User): - self._logger.trace(__name__, f"Received on_member_ban:\n\t{guild}\n\t{user}") - await self._handle_event(OnMemberBanABC, guild, user) - - @commands.Cog.listener() - async def on_member_unban(self, guild: discord.Guild, user: discord.User): - self._logger.trace(__name__, f"Received on_member_unban:\n\t{guild}\n\t{user}") - await self._handle_event(OnMemberUnbanABC, guild, user) - - @commands.Cog.listener() - async def on_invite_create(self, invite: discord.Invite): - self._logger.trace(__name__, f"Received on_invite_create:\n\t{invite}") - await self._handle_event(OnInviteCreateABC, invite) - - @commands.Cog.listener() - async def on_invite_delete(self, invite: discord.Invite): - self._logger.trace(__name__, f"Received on_invite_create:\n\t{invite}") - await self._handle_event(OnInviteDeleteABC, invite) - - @commands.Cog.listener() - async def on_group_join(self, channel: discord.GroupChannel, user: discord.User): - self._logger.trace(__name__, f"Received on_group_join:\n\t{channel}\n\t{user}") - await self._handle_event(OnGroupJoinABC, channel, user) - - @commands.Cog.listener() - async def on_group_remove(self, channel: discord.GroupChannel, user: discord.User): - self._logger.trace(__name__, f"Received on_group_remove:\n\t{channel}\n\t{user}") - await self._handle_event(OnGroupRemoveABC, channel, user) diff --git a/src/cpl_discord/service/discord_service_abc.py b/src/cpl_discord/service/discord_service_abc.py deleted file mode 100644 index 3065387d..00000000 --- a/src/cpl_discord/service/discord_service_abc.py +++ /dev/null @@ -1,213 +0,0 @@ -from abc import ABC, abstractmethod -from datetime import datetime -from typing import Optional, Sequence, Union - -import discord -from discord.ext import commands - - -class DiscordServiceABC(ABC): - def __init__(self): - ABC.__init__(self) - - @abstractmethod - def init(self, bot: commands.Bot): - pass - - @abstractmethod - async def on_connect(self): - pass - - @abstractmethod - async def on_command(self): - pass - - @abstractmethod - async def on_command_error(self): - pass - - @abstractmethod - async def on_command_completion(self): - pass - - @abstractmethod - async def on_disconnect(self): - pass - - @abstractmethod - async def on_error(self, event: str, *args, **kwargs): - pass - - @abstractmethod - async def on_ready(self): - pass - - @abstractmethod - async def on_resume(self): - pass - - @abstractmethod - async def on_error(self, event: str, *args, **kwargs): - pass - - @abstractmethod - async def on_typing( - self, channel: discord.abc.Messageable, user: Union[discord.User, discord.Member], when: datetime - ): - pass - - @abstractmethod - async def on_message(self, message: discord.Message): - pass - - @abstractmethod - async def on_message_delete(self, message: discord.Message): - pass - - @abstractmethod - async def on_bulk_message_delete(self, messages: list[discord.Message]): - pass - - @abstractmethod - async def on_message_edit(self, before: discord.Message, after: discord.Message): - pass - - @abstractmethod - async def on_reaction_add(self, reaction: discord.Reaction, user: discord.User): - pass - - @abstractmethod - async def on_reaction_remove(self, reaction: discord.Reaction, user: discord.User): - pass - - @abstractmethod - async def on_reaction_clear(self, message: discord.Message, reactions: list[discord.Reaction]): - pass - - @abstractmethod - async def on_reaction_clear_emoji(self, reaction: discord.Reaction): - pass - - @abstractmethod - async def on_private_channel_delete(self, channel: discord.abc.PrivateChannel): - pass - - @abstractmethod - async def on_private_channel_create(self, channel: discord.abc.PrivateChannel): - pass - - @abstractmethod - async def on_private_channel_update(self, before: discord.GroupChannel, after: discord.GroupChannel): - pass - - @abstractmethod - async def on_private_channel_pins_update(self, channel: discord.abc.PrivateChannel, list_pin: Optional[datetime]): - pass - - @abstractmethod - async def on_guild_channel_delete(self, channel: discord.abc.GuildChannel): - pass - - @abstractmethod - async def on_guild_channel_create(self, channel: discord.abc.GuildChannel): - pass - - @abstractmethod - async def on_guild_channel_update(self, before: discord.abc.GuildChannel, after: discord.abc.GuildChannel): - pass - - @abstractmethod - async def on_guild_channel_pins_update(self, channel: discord.abc.GuildChannel, list_pin: Optional[datetime]): - pass - - @abstractmethod - async def on_guild_integrations_update(self, guild: discord.Guild): - pass - - @abstractmethod - async def on_webhooks_update(self, channel: discord.abc.GuildChannel): - pass - - @abstractmethod - async def on_member_join(self, member: discord.Member): - pass - - @abstractmethod - async def on_member_remove(self, member: discord.Member): - pass - - @abstractmethod - async def on_member_update(self, before: discord.Member, after: discord.Member): - pass - - @abstractmethod - async def on_user_update(self, before: discord.User, after: discord.User): - pass - - @abstractmethod - async def on_guild_join(self, guild: discord.Guild): - pass - - @abstractmethod - async def on_guild_remove(self, guild: discord.Guild): - pass - - @abstractmethod - async def on_guild_update(self, before: discord.Guild, after: discord.Guild): - pass - - @abstractmethod - async def on_guild_role_create(self, role: discord.Role): - pass - - @abstractmethod - async def on_guild_role_delete(self, role: discord.Role): - pass - - @abstractmethod - async def on_guild_role_update(self, before: discord.Role, after: discord.Role): - pass - - @abstractmethod - async def on_guild_emojis_update( - self, guild: discord.Guild, before: Sequence[discord.Emoji], after: Sequence[discord.Emoji] - ): - pass - - @abstractmethod - async def on_guild_available(self, guild: discord.Guild): - pass - - @abstractmethod - async def on_guild_unavailable(self, guild: discord.Guild): - pass - - @abstractmethod - async def on_voice_state_update( - self, member: discord.Member, before: discord.VoiceState, after: discord.VoiceState - ): - pass - - @abstractmethod - async def on_member_ban(self, guild: discord.Guild, user: discord.User): - pass - - @abstractmethod - async def on_member_unban(self, guild: discord.Guild, user: discord.User): - pass - - @abstractmethod - async def on_invite_create(self, invite: discord.Invite): - pass - - @abstractmethod - async def on_invite_delete(self, invite: discord.Invite): - pass - - @abstractmethod - async def on_group_join(self, chhanel: discord.GroupChannel, user: discord.User): - pass - - @abstractmethod - async def on_group_remove(self, chhanel: discord.GroupChannel, user: discord.User): - pass diff --git a/src/cpl_query/__init__.py b/src/cpl_query/__init__.py index 08c95ea8..8b137891 100644 --- a/src/cpl_query/__init__.py +++ b/src/cpl_query/__init__.py @@ -1,26 +1 @@ -# -*- coding: utf-8 -*- -""" -cpl-query CPL Queries -~~~~~~~~~~~~~~~~~~~ - -CPL Python integrated Queries - -:copyright: (c) 2021 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_query" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de" -__version__ = "2023.10.0" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="10", micro="0") diff --git a/src/cpl_query/base/__init__.py b/src/cpl_query/base/__init__.py index 22d0f52d..cd7502e7 100644 --- a/src/cpl_query/base/__init__.py +++ b/src/cpl_query/base/__init__.py @@ -1,31 +1,5 @@ -# -*- coding: utf-8 -*- - -""" -cpl-query CPL Queries -~~~~~~~~~~~~~~~~~~~ - -CPL Python integrated Queries - -:copyright: (c) 2021 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_query.base" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de" -__version__ = "2023.10.0" - -from collections import namedtuple - - -# imports: from .default_lambda import default_lambda from .ordered_queryable import OrderedQueryable from .ordered_queryable_abc import OrderedQueryableABC from .queryable_abc import QueryableABC from .sequence import Sequence - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="10", micro="0") diff --git a/src/cpl_query/base/ordered_queryable_abc.py b/src/cpl_query/base/ordered_queryable_abc.py index 8034bba4..d6ebadc0 100644 --- a/src/cpl_query/base/ordered_queryable_abc.py +++ b/src/cpl_query/base/ordered_queryable_abc.py @@ -25,7 +25,6 @@ class OrderedQueryableABC(QueryableABC): Returns: list of :class:`cpl_query.base.ordered_queryable_abc.OrderedQueryableABC` """ - pass @abstractmethod def then_by_descending(self, func: Callable) -> OrderedQueryableABC: @@ -37,4 +36,3 @@ class OrderedQueryableABC(QueryableABC): Returns: list of :class:`cpl_query.base.ordered_queryable_abc.OrderedQueryableABC` """ - pass diff --git a/src/cpl_query/cpl-query.json b/src/cpl_query/cpl-query.json deleted file mode 100644 index f9c13f73..00000000 --- a/src/cpl_query/cpl-query.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "ProjectSettings": { - "Name": "cpl-query", - "Version": { - "Major": "2024", - "Minor": "7", - "Micro": "0" - }, - "Author": "Sven Heidemann", - "AuthorEmail": "sven.heidemann@sh-edraft.de", - "Description": "CPL Queries", - "LongDescription": "CPL Python integrated Queries", - "URL": "https://www.sh-edraft.de", - "CopyrightDate": "2021 - 2023", - "CopyrightName": "sh-edraft.de", - "LicenseName": "MIT", - "LicenseDescription": "MIT, see LICENSE for more details.", - "Dependencies": [], - "DevDependencies": [], - "PythonVersion": ">=3.10", - "PythonPath": {}, - "Classifiers": [] - }, - "BuildSettings": { - "ProjectType": "library", - "SourcePath": "", - "OutputPath": "../../dist", - "Main": "", - "EntryPoint": "", - "IncludePackageData": true, - "Included": [], - "Excluded": [ - "*/__pycache__", - "*/logs", - "*/tests" - ], - "PackageData": { - "cpl_query": [ - ".cpl/*.py" - ] - }, - "ProjectReferences": [] - } -} \ No newline at end of file diff --git a/src/cpl_query/enumerable/__init__.py b/src/cpl_query/enumerable/__init__.py index 26b79116..75a5d340 100644 --- a/src/cpl_query/enumerable/__init__.py +++ b/src/cpl_query/enumerable/__init__.py @@ -1,28 +1,2 @@ -# -*- coding: utf-8 -*- - -""" -cpl-query CPL Queries -~~~~~~~~~~~~~~~~~~~ - -CPL Python integrated Queries - -:copyright: (c) 2021 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_query.enumerable" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de" -__version__ = "2023.10.0" - -from collections import namedtuple - - -# imports: from .enumerable import Enumerable from .enumerable_abc import EnumerableABC - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="10", micro="0") diff --git a/src/cpl_query/exceptions.py b/src/cpl_query/exceptions.py index 39798541..5081dd06 100644 --- a/src/cpl_query/exceptions.py +++ b/src/cpl_query/exceptions.py @@ -27,9 +27,7 @@ class IndexOutOfRangeException(Exception): class InvalidTypeException(Exception): r"""Exception when type is invalid""" - pass class WrongTypeException(Exception): r"""Exception when type is unexpected""" - pass diff --git a/src/cpl_query/extension/__init__.py b/src/cpl_query/extension/__init__.py index 82bedb80..9ef128d3 100644 --- a/src/cpl_query/extension/__init__.py +++ b/src/cpl_query/extension/__init__.py @@ -1,27 +1 @@ -# -*- coding: utf-8 -*- - -""" -cpl-query CPL Queries -~~~~~~~~~~~~~~~~~~~ - -CPL Python integrated Queries - -:copyright: (c) 2021 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_query.extension" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de" -__version__ = "2023.10.0" - -from collections import namedtuple - - -# imports: from .list import List - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="10", micro="0") diff --git a/src/cpl_query/iterable/__init__.py b/src/cpl_query/iterable/__init__.py index 3aad6427..07f325d4 100644 --- a/src/cpl_query/iterable/__init__.py +++ b/src/cpl_query/iterable/__init__.py @@ -1,28 +1,2 @@ -# -*- coding: utf-8 -*- - -""" -cpl-query CPL Queries -~~~~~~~~~~~~~~~~~~~ - -CPL Python integrated Queries - -:copyright: (c) 2021 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_query.iterable" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de" -__version__ = "2023.10.0" - -from collections import namedtuple - - -# imports: from .iterable_abc import IterableABC from .iterable import Iterable - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="10", micro="0") diff --git a/src/cpl_translation/__init__.py b/src/cpl_translation/__init__.py index 3c896cf9..bb61b231 100644 --- a/src/cpl_translation/__init__.py +++ b/src/cpl_translation/__init__.py @@ -1,33 +1,8 @@ -# -*- coding: utf-8 -*- - -""" -cpl-translation CPL Translation -~~~~~~~~~~~~~~~~~~~ - -CPL translation extension - -:copyright: (c) 2022 - 2023 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "cpl_translation" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de" -__version__ = "2023.4.0.post1" - -from collections import namedtuple - - -# imports: from .translate_pipe import TranslatePipe from .translation_service import TranslationService from .translation_service_abc import TranslationServiceABC from .translation_settings import TranslationSettings -# build-ignore - def add_translation(self): from cpl_core.console import Console @@ -50,7 +25,3 @@ def init(): init() -# build-ignore-end - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2023", minor="4", micro="0.post1") diff --git a/src/cpl_translation/cpl-translation.json b/src/cpl_translation/cpl-translation.json deleted file mode 100644 index a0e58a7c..00000000 --- a/src/cpl_translation/cpl-translation.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "ProjectSettings": { - "Name": "cpl-translation", - "Version": { - "Major": "2024", - "Minor": "7", - "Micro": "0" - }, - "Author": "Sven Heidemann", - "AuthorEmail": "sven.heidemann@sh-edraft.de", - "Description": "CPL Translation", - "LongDescription": "CPL translation extension", - "URL": "https://www.sh-edraft.de", - "CopyrightDate": "2022 - 2023", - "CopyrightName": "sh-edraft.de", - "LicenseName": "MIT", - "LicenseDescription": "MIT, see LICENSE for more details.", - "Dependencies": [ - "cpl-core>=2024.6.2024.07.0" - ], - "DevDependencies": [ - "cpl-cli>=2024.6.2024.07.0" - ], - "PythonVersion": ">=3.10", - "PythonPath": {}, - "Classifiers": [] - }, - "BuildSettings": { - "ProjectType": "library", - "SourcePath": "", - "OutputPath": "../../dist", - "Main": "", - "EntryPoint": "", - "IncludePackageData": false, - "Included": [], - "Excluded": [ - "*/__pycache__", - "*/logs", - "*/tests" - ], - "PackageData": { - "cpl_translation": [ - ".cpl/*.py" - ] - }, - "ProjectReferences": [] - } -} \ No newline at end of file diff --git a/src/cpl_translation/translate_pipe.py b/src/cpl_translation/translate_pipe.py index cc1d79a7..91f0c631 100644 --- a/src/cpl_translation/translate_pipe.py +++ b/src/cpl_translation/translate_pipe.py @@ -10,6 +10,6 @@ class TranslatePipe(PipeABC): def transform(self, value: any, *args): try: return self._translation.translate(value) - except KeyError as e: + except KeyError: Console.error(f"Translation {value} not found") return "" diff --git a/tests/custom/async/src/async/__init__.py b/tests/custom/async/src/async/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/custom/async/src/async/__init__.py +++ b/tests/custom/async/src/async/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/custom/async/src/tests/__init__.py b/tests/custom/async/src/tests/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/custom/async/src/tests/__init__.py +++ b/tests/custom/async/src/tests/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/custom/database/src/tests/__init__.py b/tests/custom/database/src/tests/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/custom/database/src/tests/__init__.py +++ b/tests/custom/database/src/tests/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/custom/di/src/di/__init__.py b/tests/custom/di/src/di/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/custom/di/src/di/__init__.py +++ b/tests/custom/di/src/di/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/custom/di/src/tests/__init__.py b/tests/custom/di/src/tests/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/custom/di/src/tests/__init__.py +++ b/tests/custom/di/src/tests/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/custom/discord/src/discord_bot/__init__.py b/tests/custom/discord/src/discord_bot/__init__.py index 8326349e..8b137891 100644 --- a/tests/custom/discord/src/discord_bot/__init__.py +++ b/tests/custom/discord/src/discord_bot/__init__.py @@ -1,26 +1 @@ -# -*- coding: utf-8 -*- -""" -discord-bot -~~~~~~~~~~~~~~~~~~~ - - - -:copyright: (c) -:license: - -""" - -__title__ = "discord_bot" -__author__ = "" -__license__ = "" -__copyright__ = "Copyright (c) " -__version__ = "0.0.0" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="0", minor="0", micro="0") diff --git a/tests/custom/discord/src/modules/hello_world/__init__.py b/tests/custom/discord/src/modules/hello_world/__init__.py index 5394fcb8..8b137891 100644 --- a/tests/custom/discord/src/modules/hello_world/__init__.py +++ b/tests/custom/discord/src/modules/hello_world/__init__.py @@ -1,26 +1 @@ -# -*- coding: utf-8 -*- -""" -discord-bot -~~~~~~~~~~~~~~~~~~~ - - - -:copyright: (c) -:license: - -""" - -__title__ = "modules.hello_world" -__author__ = "" -__license__ = "" -__copyright__ = "Copyright (c) " -__version__ = "0.0.0" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="0", minor="0", micro="0") diff --git a/tests/custom/discord/src/tests/__init__.py b/tests/custom/discord/src/tests/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/custom/discord/src/tests/__init__.py +++ b/tests/custom/discord/src/tests/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/custom/general/src/general/__init__.py b/tests/custom/general/src/general/__init__.py index 425ab6c1..e69de29b 100644 --- a/tests/custom/general/src/general/__init__.py +++ b/tests/custom/general/src/general/__init__.py @@ -1 +0,0 @@ -# imports diff --git a/tests/custom/general/src/general/arguments/__init__.py b/tests/custom/general/src/general/arguments/__init__.py index b3a4b225..8b137891 100644 --- a/tests/custom/general/src/general/arguments/__init__.py +++ b/tests/custom/general/src/general/arguments/__init__.py @@ -1,26 +1 @@ -# -*- coding: utf-8 -*- -""" -general sh-edraft Common Python library -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library - -:copyright: (c) 2020 - 2021 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "general.arguments" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2021 sh-edraft.de" -__version__ = "2021.4.1" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2021", minor="04", micro="01") diff --git a/tests/custom/general/src/general/db/__init__.py b/tests/custom/general/src/general/db/__init__.py index f5809455..8b137891 100644 --- a/tests/custom/general/src/general/db/__init__.py +++ b/tests/custom/general/src/general/db/__init__.py @@ -1,26 +1 @@ -# -*- coding: utf-8 -*- -""" -general sh-edraft Common Python library -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library - -:copyright: (c) 2020 - 2021 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "general.db" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 2020 - 2021 sh-edraft.de" -__version__ = "2021.4.1" - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple("VersionInfo", "major minor micro") -version_info = VersionInfo(major="2021", minor="04", micro="01") diff --git a/tests/custom/general/test/__init__.py b/tests/custom/general/test/__init__.py index 425ab6c1..e69de29b 100644 --- a/tests/custom/general/test/__init__.py +++ b/tests/custom/general/test/__init__.py @@ -1 +0,0 @@ -# imports diff --git a/tests/custom/translation/src/tests/__init__.py b/tests/custom/translation/src/tests/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/custom/translation/src/tests/__init__.py +++ b/tests/custom/translation/src/tests/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/custom/translation/src/translation/__init__.py b/tests/custom/translation/src/translation/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/custom/translation/src/translation/__init__.py +++ b/tests/custom/translation/src/translation/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/generated/simple-app/src/simple_app/__init__.py b/tests/generated/simple-app/src/simple_app/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/generated/simple-app/src/simple_app/__init__.py +++ b/tests/generated/simple-app/src/simple_app/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/generated/simple-app/src/tests/__init__.py b/tests/generated/simple-app/src/tests/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/generated/simple-app/src/tests/__init__.py +++ b/tests/generated/simple-app/src/tests/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/generated/simple-console/src/simple_console/__init__.py b/tests/generated/simple-console/src/simple_console/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/generated/simple-console/src/simple_console/__init__.py +++ b/tests/generated/simple-console/src/simple_console/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/generated/simple-console/src/tests/__init__.py b/tests/generated/simple-console/src/tests/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/generated/simple-console/src/tests/__init__.py +++ b/tests/generated/simple-console/src/tests/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/generated/simple-di/src/simple_di/__init__.py b/tests/generated/simple-di/src/simple_di/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/generated/simple-di/src/simple_di/__init__.py +++ b/tests/generated/simple-di/src/simple_di/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/generated/simple-di/src/tests/__init__.py b/tests/generated/simple-di/src/tests/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/generated/simple-di/src/tests/__init__.py +++ b/tests/generated/simple-di/src/tests/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/generated/simple-startup-app/src/simple_startup_app/__init__.py b/tests/generated/simple-startup-app/src/simple_startup_app/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/generated/simple-startup-app/src/simple_startup_app/__init__.py +++ b/tests/generated/simple-startup-app/src/simple_startup_app/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/generated/simple-startup-app/src/tests/__init__.py b/tests/generated/simple-startup-app/src/tests/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/generated/simple-startup-app/src/tests/__init__.py +++ b/tests/generated/simple-startup-app/src/tests/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tests/generated/startup-app/src/tests/__init__.py b/tests/generated/startup-app/src/tests/__init__.py index 52f86f25..e69de29b 100644 --- a/tests/generated/startup-app/src/tests/__init__.py +++ b/tests/generated/startup-app/src/tests/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/tools/set_pip_urls/__init__.py b/tools/set_pip_urls/__init__.py index 5c7b277e..8b137891 100644 --- a/tools/set_pip_urls/__init__.py +++ b/tools/set_pip_urls/__init__.py @@ -1,26 +1 @@ -# -*- coding: utf-8 -*- -""" -set-pip-urls CPL internal tool to set pip URL for CLI by environment -~~~~~~~~~~~~~~~~~~~ - -CPL internal tool to set pip URL for CLI by environment - -:copyright: (c) 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "set_pip_urls" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 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/tools/set_version/__init__.py b/tools/set_version/__init__.py index 81e446bc..8b137891 100644 --- a/tools/set_version/__init__.py +++ b/tools/set_version/__init__.py @@ -1,26 +1 @@ -# -*- coding: utf-8 -*- -""" -set-version CPL internal tool to set version from branch name -~~~~~~~~~~~~~~~~~~~ - -CPL internal tool to set version from branch name - -:copyright: (c) 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = "set_version" -__author__ = "Sven Heidemann" -__license__ = "MIT" -__copyright__ = "Copyright (c) 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/unittests/unittests/__init__.py b/unittests/unittests/__init__.py index 52f86f25..e69de29b 100644 --- a/unittests/unittests/__init__.py +++ b/unittests/unittests/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/unittests/unittests_cli/__init__.py b/unittests/unittests_cli/__init__.py index 52f86f25..e69de29b 100644 --- a/unittests/unittests_cli/__init__.py +++ b/unittests/unittests_cli/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/unittests/unittests_cli/threads/__init__.py b/unittests/unittests_cli/threads/__init__.py index 425ab6c1..e69de29b 100644 --- a/unittests/unittests_cli/threads/__init__.py +++ b/unittests/unittests_cli/threads/__init__.py @@ -1 +0,0 @@ -# imports diff --git a/unittests/unittests_core/__init__.py b/unittests/unittests_core/__init__.py index 52f86f25..e69de29b 100644 --- a/unittests/unittests_core/__init__.py +++ b/unittests/unittests_core/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/unittests/unittests_core/pipes/__init__.py b/unittests/unittests_core/pipes/__init__.py index 425ab6c1..e69de29b 100644 --- a/unittests/unittests_core/pipes/__init__.py +++ b/unittests/unittests_core/pipes/__init__.py @@ -1 +0,0 @@ -# imports diff --git a/unittests/unittests_query/__init__.py b/unittests/unittests_query/__init__.py index 52f86f25..e69de29b 100644 --- a/unittests/unittests_query/__init__.py +++ b/unittests/unittests_query/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/unittests/unittests_shared/__init__.py b/unittests/unittests_shared/__init__.py index 52f86f25..e69de29b 100644 --- a/unittests/unittests_shared/__init__.py +++ b/unittests/unittests_shared/__init__.py @@ -1 +0,0 @@ -# imports: diff --git a/unittests/unittests_translation/__init__.py b/unittests/unittests_translation/__init__.py index 52f86f25..e69de29b 100644 --- a/unittests/unittests_translation/__init__.py +++ b/unittests/unittests_translation/__init__.py @@ -1 +0,0 @@ -# imports: