From ab767abc24469509ad18d0bc9868fab234308f27 Mon Sep 17 00:00:00 2001 From: Vladimir Roncevic Date: Wed, 1 Jul 2026 18:35:09 +0200 Subject: [PATCH] [dist_py_module] Refactor based on SOLID principles, updated unit tests, docs, added support for content generators --- .coverage | Bin 53248 -> 53248 bytes README.md | 15 ++-- ats_coverage.py | 4 +- dist_py_module.json | 2 +- dist_py_module.xml | 67 +++++++++--------- dist_py_module/__init__.py | 2 +- dist_py_module/application/__init__.py | 2 +- dist_py_module/application/service.py | 19 +---- dist_py_module/application/service_bundle.py | 11 ++- dist_py_module/dist_py_module_bundle.py | 2 +- dist_py_module/domain/__init__.py | 2 +- dist_py_module/domain/models.py | 2 +- dist_py_module/domain/ports/__init__.py | 2 +- dist_py_module/domain/ports/ifile_gen.py | 14 +--- dist_py_module/domain/ports/ifile_writer.py | 2 +- .../domain/ports/itemplate_provider.py | 2 +- dist_py_module/engine.py | 38 +++++----- dist_py_module/infrastructure/__init__.py | 2 +- dist_py_module/infrastructure/cli.py | 2 +- dist_py_module/infrastructure/cli_bundle.py | 2 +- .../infrastructure/config/dist_py_module.cfg | 2 +- dist_py_module/infrastructure/file_writer.py | 2 +- .../infrastructure/gen_setup_command.py | 2 +- dist_py_module/infrastructure/icli.py | 2 +- dist_py_module/infrastructure/icli_command.py | 2 +- .../infrastructure/template_provider.py | 2 +- dist_py_module/py.typed | 0 docs/build/.editorconfig | 3 - docs/build/doctrees/.editorconfig | 3 - ..._module.application.service_bundle.doctree | Bin 34358 -> 34340 bytes ...t_py_module.domain.ports.ifile_gen.doctree | Bin 28151 -> 27784 bytes .../doctrees/dist_py_module.engine.doctree | Bin 19813 -> 19847 bytes docs/build/doctrees/environment.pickle | Bin 763960 -> 762687 bytes docs/build/doctrees/index.doctree | Bin 27270 -> 27270 bytes docs/build/html/.editorconfig | 3 - .../dist_py_module/application/service.html | 21 ++---- .../application/service_bundle.html | 11 ++- .../dist_py_module/dist_py_module_bundle.html | 2 +- .../dist_py_module/domain/models.html | 2 +- .../domain/ports/ifile_gen.html | 16 +---- .../domain/ports/ifile_writer.html | 2 +- .../domain/ports/itemplate_provider.html | 2 +- .../html/_modules/dist_py_module/engine.html | 38 +++++----- .../dist_py_module/infrastructure/cli.html | 2 +- .../infrastructure/cli_bundle.html | 2 +- .../infrastructure/file_writer.html | 2 +- .../infrastructure/gen_setup_command.html | 2 +- .../dist_py_module/infrastructure/icli.html | 2 +- .../infrastructure/icli_command.html | 2 +- .../infrastructure/template_provider.html | 2 +- docs/build/html/_modules/main.html | 2 +- docs/build/html/_sources/index.rst.txt | 2 +- ..._py_module.application.service_bundle.html | 4 +- ...dist_py_module.domain.ports.ifile_gen.html | 1 - docs/build/html/dist_py_module.engine.html | 4 +- docs/build/html/index.html | 2 +- docs/build/html/objects.inv | Bin 1356 -> 1356 bytes docs/build/html/searchindex.js | 2 +- docs/source/conf.py | 2 +- docs/source/index.rst | 2 +- main.py | 2 +- run.sh | 2 +- run_coverage.py | 2 +- run_coverage.sh | 2 +- setup.py | 6 +- tests/test_domain.py | 2 +- tests/test_engine.py | 33 ++++++++- tests/test_infrastructure.py | 8 +-- tests/test_service.py | 9 ++- 69 files changed, 194 insertions(+), 214 deletions(-) create mode 100644 dist_py_module/py.typed delete mode 100644 docs/build/.editorconfig delete mode 100644 docs/build/doctrees/.editorconfig delete mode 100644 docs/build/html/.editorconfig diff --git a/.coverage b/.coverage index 1bededd4f2f7ce9bf16aa083c926f090dabd3614..b05e97301b0a8245045f1cd8c7fbf45a68cda78f 100644 GIT binary patch delta 159 zcmZozz}&Eac>`O6)?5buZ~U+MZ}T7IU(LUOzn{O3KaW3|KbYT+UyEO!pNsE1-y^`O6)+`48Z~U+MZ}T7GU&FtUe*%9!e;$7_e=xrtzZSndKL_6zzWaQq z`8M#)+AJuL#W#6wUzE0x01G3hng9pGf$!%T4=`2AK=uj&8*A|x-) diff --git a/README.md b/README.md index aacd8e3..48b4a94 100644 --- a/README.md +++ b/README.md @@ -142,9 +142,10 @@ Generator structure │   ├── template_provider.py │   └── templates/ │   └── setup.template - └── __init__.py + ├── __init__.py + └── py.typed - 7 directories, 23 files + 7 directories, 24 files ``` @@ -157,8 +158,8 @@ Generator structure |------|-------|------|-------| | `dist_py_module/__init__.py` | 8 | 0 | 100%| | `dist_py_module/application/__init__.py` | 8 | 0 | 100%| -| `dist_py_module/application/service.py` | 35 | 0 | 100%| -| `dist_py_module/application/service_bundle.py` | 29 | 0 | 100%| +| `dist_py_module/application/service.py` | 30 | 0 | 100%| +| `dist_py_module/application/service_bundle.py` | 28 | 0 | 100%| | `dist_py_module/dist_py_module_bundle.py` | 41 | 0 | 100%| | `dist_py_module/domain/__init__.py` | 8 | 0 | 100%| | `dist_py_module/domain/models.py` | 18 | 0 | 100%| @@ -166,7 +167,7 @@ Generator structure | `dist_py_module/domain/ports/ifile_gen.py` | 11 | 0 | 100%| | `dist_py_module/domain/ports/ifile_writer.py` | 10 | 0 | 100%| | `dist_py_module/domain/ports/itemplate_provider.py` | 10 | 0 | 100%| -| `dist_py_module/engine.py` | 64 | 0 | 100%| +| `dist_py_module/engine.py` | 69 | 0 | 100%| | `dist_py_module/infrastructure/__init__.py` | 8 | 0 | 100%| | `dist_py_module/infrastructure/cli.py` | 36 | 0 | 100%| | `dist_py_module/infrastructure/cli_bundle.py` | 33 | 0 | 100%| @@ -175,7 +176,7 @@ Generator structure | `dist_py_module/infrastructure/icli.py` | 11 | 0 | 100%| | `dist_py_module/infrastructure/icli_command.py` | 14 | 0 | 100%| | `dist_py_module/infrastructure/template_provider.py` | 29 | 0 | 100%| -| **Total** | 446 | 0 | 100% | +| **Total** | 445 | 0 | 100% | @@ -199,7 +200,7 @@ Running tool for creating new distributing py module ```bash mkdir -p demo/mytool/ -python3 main.py setup --package-name "dist_py_module" --version "3.1.0" --description "Package for distributing Python packages." --author "Vladimir Roncevic" --email "elektron.ronca@gmail.com" --github "vroncevic" --license "GNU General Public License (GPL)" --with-readme "True" +python3 main.py setup --package-name "dist_py_module" --version "3.1.1" --description "Package for distributing Python packages." --author "Vladimir Roncevic" --email "elektron.ronca@gmail.com" --github "vroncevic" --license "GNU General Public License (GPL)" --with-readme "True" ``` ### Docs diff --git a/ats_coverage.py b/ats_coverage.py index 92036f0..e3fddde 100644 --- a/ats_coverage.py +++ b/ats_coverage.py @@ -39,7 +39,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/ats_coverage' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/ats_coverage/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Updated' @@ -345,7 +345,7 @@ def update_structure(pro_name: str) -> None: if __name__ == "__main__": cli: OptionManager = OptionManager(OptionComponentBundle(parameters={ 'description': 'ats_coverage 2025', - 'version': '3.1.0', + 'version': '3.1.1', 'licence': 'GPLv3' })) cli.add_operation( diff --git a/dist_py_module.json b/dist_py_module.json index 60e663e..2db5299 100644 --- a/dist_py_module.json +++ b/dist_py_module.json @@ -1 +1 @@ -{"meta": {"format": 3, "version": "7.6.10", "timestamp": "2026-06-30T08:22:01.012475", "branch_coverage": false, "show_contexts": false}, "files": {"dist_py_module/__init__.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/application/__init__.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/application/service.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 41, 42, 56, 65, 66, 68, 69, 70, 72, 73, 90, 93, 96, 98, 104, 105, 113, 115, 116, 124], "summary": {"covered_lines": 35, "num_statements": 35, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"FileGen.__init__": {"executed_lines": [65, 66, 68, 69, 70], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FileGen.execute": {"executed_lines": [90, 93, 96, 98], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FileGen.is_initialized": {"executed_lines": [113], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FileGen.__str__": {"executed_lines": [124], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 41, 42, 56, 72, 73, 104, 105, 115, 116], "summary": {"covered_lines": 24, "num_statements": 24, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"FileGen": {"executed_lines": [65, 66, 68, 69, 70, 90, 93, 96, 98, 113, 124], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 41, 42, 56, 72, 73, 104, 105, 115, 116], "summary": {"covered_lines": 24, "num_statements": 24, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/application/service_bundle.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 40, 54, 55, 57, 65, 66, 68, 69, 71, 79, 80, 82, 83, 85, 93], "summary": {"covered_lines": 29, "num_statements": 29, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"ServiceBundle.validate": {"executed_lines": [65, 66, 68, 69], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ServiceBundle.merge": {"executed_lines": [79, 80, 82, 83], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ServiceBundle.to_dict": {"executed_lines": [93], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 40, 54, 55, 57, 71, 85], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"ServiceBundle": {"executed_lines": [65, 66, 68, 69, 79, 80, 82, 83, 93], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 40, 54, 55, 57, 71, 85], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/dist_py_module_bundle.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 59, 60, 61, 62, 63, 65, 76, 77, 79, 80, 82, 83, 85, 86, 88, 89, 91, 99, 100, 102, 103, 105, 113], "summary": {"covered_lines": 41, "num_statements": 41, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"DistPyModuleBundle.validate": {"executed_lines": [76, 77, 79, 80, 82, 83, 85, 86, 88, 89], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "DistPyModuleBundle.merge": {"executed_lines": [99, 100, 102, 103], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "DistPyModuleBundle.to_dict": {"executed_lines": [113], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 59, 60, 61, 62, 63, 65, 91, 105], "summary": {"covered_lines": 26, "num_statements": 26, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"DistPyModuleBundle": {"executed_lines": [76, 77, 79, 80, 82, 83, 85, 86, 88, 89, 99, 100, 102, 103, 113], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 59, 60, 61, 62, 63, 65, 91, 105], "summary": {"covered_lines": 26, "num_statements": 26, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/domain/__init__.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/domain/models.py": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 37, 49, 50, 52, 53, 67, 69], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"GeneratedFile.from_template": {"executed_lines": [67, 69], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 37, 49, 50, 52, 53], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"GeneratedFile": {"executed_lines": [67, 69], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 37, 49, 50, 52, 53], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/domain/ports/__init__.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/domain/ports/ifile_gen.py": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 48, 49, 65, 66, 76, 77], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 36}, "missing_lines": [], "excluded_lines": [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85], "functions": {"IFileGen.execute": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 14}, "missing_lines": [], "excluded_lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63]}, "IFileGen.is_initialized": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [67, 68, 69, 70, 71, 72, 73, 74]}, "IFileGen.__str__": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [78, 79, 80, 81, 82, 83, 84, 85]}, "": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 48, 49, 65, 66, 76, 77], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [48, 49, 65, 66, 76, 77]}}, "classes": {"IFileGen": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 30}, "missing_lines": [], "excluded_lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 67, 68, 69, 70, 71, 72, 73, 74, 78, 79, 80, 81, 82, 83, 84, 85]}, "": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 48, 49, 65, 66, 76, 77], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [48, 49, 65, 66, 76, 77]}}}, "dist_py_module/domain/ports/ifile_writer.py": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 47, 48, 62, 63, 73, 74], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 34}, "missing_lines": [], "excluded_lines": [47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82], "functions": {"IFileWriter.write_file": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 12}, "missing_lines": [], "excluded_lines": [49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]}, "IFileWriter.is_initialized": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [64, 65, 66, 67, 68, 69, 70, 71]}, "IFileWriter.__str__": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [75, 76, 77, 78, 79, 80, 81, 82]}, "": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 47, 48, 62, 63, 73, 74], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [47, 48, 62, 63, 73, 74]}}, "classes": {"IFileWriter": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 28}, "missing_lines": [], "excluded_lines": [49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 64, 65, 66, 67, 68, 69, 70, 71, 75, 76, 77, 78, 79, 80, 81, 82]}, "": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 47, 48, 62, 63, 73, 74], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [47, 48, 62, 63, 73, 74]}}}, "dist_py_module/domain/ports/itemplate_provider.py": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 47, 48, 60, 61, 71, 72], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 32}, "missing_lines": [], "excluded_lines": [47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80], "functions": {"ITemplateProvider.get_template_by_name": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 10}, "missing_lines": [], "excluded_lines": [49, 50, 51, 52, 53, 54, 55, 56, 57, 58]}, "ITemplateProvider.is_initialized": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [62, 63, 64, 65, 66, 67, 68, 69]}, "ITemplateProvider.__str__": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [73, 74, 75, 76, 77, 78, 79, 80]}, "": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 47, 48, 60, 61, 71, 72], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [47, 48, 60, 61, 71, 72]}}, "classes": {"ITemplateProvider": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 26}, "missing_lines": [], "excluded_lines": [49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 62, 63, 64, 65, 66, 67, 68, 69, 73, 74, 75, 76, 77, 78, 79, 80]}, "": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 47, 48, 60, 61, 71, 72], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [47, 48, 60, 61, 71, 72]}}}, "dist_py_module/engine.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 66, 68, 76, 77, 79, 80, 81, 84, 87, 90, 91, 94, 97, 100, 103, 106, 107, 110, 113, 115, 116, 117, 118, 120, 121, 127, 129, 130, 131, 132, 134, 135, 136, 138, 139, 141], "summary": {"covered_lines": 64, "num_statements": 64, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"DistPyModule.__init__": {"executed_lines": [76, 77, 79, 80, 81, 84, 87, 90, 91, 94, 97, 100, 103, 106, 107, 110, 113, 115, 116, 117, 118], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "DistPyModule.process": {"executed_lines": [127, 129, 130, 131, 132, 134, 135, 136, 138, 139, 141], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 66, 68, 120, 121], "summary": {"covered_lines": 32, "num_statements": 32, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"DistPyModule": {"executed_lines": [76, 77, 79, 80, 81, 84, 87, 90, 91, 94, 97, 100, 103, 106, 107, 110, 113, 115, 116, 117, 118, 127, 129, 130, 131, 132, 134, 135, 136, 138, 139, 141], "summary": {"covered_lines": 32, "num_statements": 32, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 66, 68, 120, 121], "summary": {"covered_lines": 32, "num_statements": 32, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/infrastructure/__init__.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/infrastructure/cli.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 41, 42, 58, 67, 68, 70, 71, 72, 73, 74, 76, 77, 87, 88, 90, 94, 95, 103, 105, 106, 114], "summary": {"covered_lines": 36, "num_statements": 36, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"CLI.__init__": {"executed_lines": [67, 68, 70, 71, 72, 73, 74], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CLI.run": {"executed_lines": [87, 88, 90], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CLI.is_initialized": {"executed_lines": [103], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CLI.__str__": {"executed_lines": [114], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 41, 42, 58, 76, 77, 94, 95, 105, 106], "summary": {"covered_lines": 24, "num_statements": 24, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"CLI": {"executed_lines": [67, 68, 70, 71, 72, 73, 74, 87, 88, 90, 103, 114], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 41, 42, 58, 76, 77, 94, 95, 105, 106], "summary": {"covered_lines": 24, "num_statements": 24, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/infrastructure/cli_bundle.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 41, 56, 57, 58, 60, 69, 70, 72, 73, 75, 76, 78, 86, 87, 89, 90, 92, 100], "summary": {"covered_lines": 33, "num_statements": 33, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"CLIBundle.validate": {"executed_lines": [69, 70, 72, 73, 75, 76], "summary": {"covered_lines": 6, "num_statements": 6, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CLIBundle.merge": {"executed_lines": [86, 87, 89, 90], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CLIBundle.to_dict": {"executed_lines": [100], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 41, 56, 57, 58, 60, 78, 92], "summary": {"covered_lines": 22, "num_statements": 22, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"CLIBundle": {"executed_lines": [69, 70, 72, 73, 75, 76, 86, 87, 89, 90, 100], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 41, 56, 57, 58, 60, 78, 92], "summary": {"covered_lines": 22, "num_statements": 22, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/infrastructure/file_writer.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 51, 52, 65, 66, 68, 69, 71, 72, 73, 75, 77, 78, 86, 88, 89, 97], "summary": {"covered_lines": 30, "num_statements": 30, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"FileWriter.write_file": {"executed_lines": [65, 66, 68, 69, 71, 72, 73, 75], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FileWriter.is_initialized": {"executed_lines": [86], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FileWriter.__str__": {"executed_lines": [97], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 51, 52, 77, 78, 88, 89], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"FileWriter": {"executed_lines": [65, 66, 68, 69, 71, 72, 73, 75, 86, 97], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 51, 52, 77, 78, 88, 89], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/infrastructure/gen_setup_command.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 54, 55, 56, 64, 66, 67, 68, 76, 78, 79, 80, 88, 126, 127, 139, 140, 142, 148, 149, 157], "summary": {"covered_lines": 35, "num_statements": 35, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"GenSetupCommand.name": {"executed_lines": [64], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GenSetupCommand.help_text": {"executed_lines": [76], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GenSetupCommand.options": {"executed_lines": [88], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GenSetupCommand.execute": {"executed_lines": [139, 140, 142], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GenSetupCommand.__str__": {"executed_lines": [157], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 54, 55, 56, 66, 67, 68, 78, 79, 80, 126, 127, 148, 149], "summary": {"covered_lines": 28, "num_statements": 28, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"GenSetupCommand": {"executed_lines": [64, 76, 88, 139, 140, 142, 157], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 54, 55, 56, 66, 67, 68, 78, 79, 80, 126, 127, 148, 149], "summary": {"covered_lines": 28, "num_statements": 28, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/infrastructure/icli.py": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 48, 49, 59, 60, 70, 71], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 30}, "missing_lines": [], "excluded_lines": [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79], "functions": {"ICLI.run": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [50, 51, 52, 53, 54, 55, 56, 57]}, "ICLI.is_initialized": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [61, 62, 63, 64, 65, 66, 67, 68]}, "ICLI.__str__": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [72, 73, 74, 75, 76, 77, 78, 79]}, "": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 48, 49, 59, 60, 70, 71], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [48, 49, 59, 60, 70, 71]}}, "classes": {"ICLI": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 24}, "missing_lines": [], "excluded_lines": [50, 51, 52, 53, 54, 55, 56, 57, 61, 62, 63, 64, 65, 66, 67, 68, 72, 73, 74, 75, 76, 77, 78, 79]}, "": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 48, 49, 59, 60, 70, 71], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [48, 49, 59, 60, 70, 71]}}}, "dist_py_module/infrastructure/icli_command.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 53, 54, 55, 65, 66, 67, 77, 78, 79, 89, 90, 104, 105], "summary": {"covered_lines": 14, "num_statements": 14, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 57}, "missing_lines": [], "excluded_lines": [53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "functions": {"ICLICommand.name": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [56, 57, 58, 59, 60, 61, 62, 63]}, "ICLICommand.help_text": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [68, 69, 70, 71, 72, 73, 74, 75]}, "ICLICommand.options": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [80, 81, 82, 83, 84, 85, 86, 87]}, "ICLICommand.execute": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 12}, "missing_lines": [], "excluded_lines": [91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102]}, "ICLICommand.__str__": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [106, 107, 108, 109, 110, 111, 112, 113]}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 53, 54, 55, 65, 66, 67, 77, 78, 79, 89, 90, 104, 105], "summary": {"covered_lines": 14, "num_statements": 14, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 13}, "missing_lines": [], "excluded_lines": [53, 54, 55, 65, 66, 67, 77, 78, 79, 89, 90, 104, 105]}}, "classes": {"ICLICommand": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 44}, "missing_lines": [], "excluded_lines": [56, 57, 58, 59, 60, 61, 62, 63, 68, 69, 70, 71, 72, 73, 74, 75, 80, 81, 82, 83, 84, 85, 86, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 106, 107, 108, 109, 110, 111, 112, 113]}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 53, 54, 55, 65, 66, 67, 77, 78, 79, 89, 90, 104, 105], "summary": {"covered_lines": 14, "num_statements": 14, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 13}, "missing_lines": [], "excluded_lines": [53, 54, 55, 65, 66, 67, 77, 78, 79, 89, 90, 104, 105]}}}, "dist_py_module/infrastructure/template_provider.py": {"executed_lines": [3, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 52, 60, 62, 63, 64, 76, 78, 79, 81, 82, 84, 85, 93, 95, 96, 104], "summary": {"covered_lines": 29, "num_statements": 29, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"TemplateProvider.__init__": {"executed_lines": [60], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "TemplateProvider.get_template_by_name": {"executed_lines": [76, 78, 79, 81, 82], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "TemplateProvider.is_initialized": {"executed_lines": [93], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "TemplateProvider.__str__": {"executed_lines": [104], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 52, 62, 63, 64, 84, 85, 95, 96], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"TemplateProvider": {"executed_lines": [60, 76, 78, 79, 81, 82, 93, 104], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 52, 62, 63, 64, 84, 85, 95, 96], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}}, "totals": {"covered_lines": 446, "num_statements": 446, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 189}} \ No newline at end of file +{"meta": {"format": 3, "version": "7.6.10", "timestamp": "2026-07-01T12:33:23.172967", "branch_coverage": false, "show_contexts": false}, "files": {"dist_py_module/__init__.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/application/__init__.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/application/service.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 54, 63, 64, 66, 67, 68, 70, 71, 88, 91, 94, 96, 102, 103, 111], "summary": {"covered_lines": 30, "num_statements": 30, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"FileGen.__init__": {"executed_lines": [63, 64, 66, 67, 68], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FileGen.execute": {"executed_lines": [88, 91, 94, 96], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FileGen.is_initialized": {"executed_lines": [111], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 54, 70, 71, 102, 103], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"FileGen": {"executed_lines": [63, 64, 66, 67, 68, 88, 91, 94, 96, 111], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 54, 70, 71, 102, 103], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/application/service_bundle.py": {"executed_lines": [3, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 53, 54, 56, 64, 65, 67, 68, 70, 78, 79, 81, 82, 84, 92], "summary": {"covered_lines": 28, "num_statements": 28, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"ServiceBundle.validate": {"executed_lines": [64, 65, 67, 68], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ServiceBundle.merge": {"executed_lines": [78, 79, 81, 82], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ServiceBundle.to_dict": {"executed_lines": [92], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 53, 54, 56, 70, 84], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"ServiceBundle": {"executed_lines": [64, 65, 67, 68, 78, 79, 81, 82, 92], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 53, 54, 56, 70, 84], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/dist_py_module_bundle.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 59, 60, 61, 62, 63, 65, 76, 77, 79, 80, 82, 83, 85, 86, 88, 89, 91, 99, 100, 102, 103, 105, 113], "summary": {"covered_lines": 41, "num_statements": 41, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"DistPyModuleBundle.validate": {"executed_lines": [76, 77, 79, 80, 82, 83, 85, 86, 88, 89], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "DistPyModuleBundle.merge": {"executed_lines": [99, 100, 102, 103], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "DistPyModuleBundle.to_dict": {"executed_lines": [113], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 59, 60, 61, 62, 63, 65, 91, 105], "summary": {"covered_lines": 26, "num_statements": 26, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"DistPyModuleBundle": {"executed_lines": [76, 77, 79, 80, 82, 83, 85, 86, 88, 89, 99, 100, 102, 103, 113], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 59, 60, 61, 62, 63, 65, 91, 105], "summary": {"covered_lines": 26, "num_statements": 26, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/domain/__init__.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/domain/models.py": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 37, 49, 50, 52, 53, 67, 69], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"GeneratedFile.from_template": {"executed_lines": [67, 69], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 37, 49, 50, 52, 53], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"GeneratedFile": {"executed_lines": [67, 69], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 37, 49, 50, 52, 53], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/domain/ports/__init__.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/domain/ports/ifile_gen.py": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 47, 48, 64, 65], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 26}, "missing_lines": [], "excluded_lines": [47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73], "functions": {"IFileGen.execute": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 14}, "missing_lines": [], "excluded_lines": [49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62]}, "IFileGen.is_initialized": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [66, 67, 68, 69, 70, 71, 72, 73]}, "": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 47, 48, 64, 65], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 4}, "missing_lines": [], "excluded_lines": [47, 48, 64, 65]}}, "classes": {"IFileGen": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 22}, "missing_lines": [], "excluded_lines": [49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 67, 68, 69, 70, 71, 72, 73]}, "": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 47, 48, 64, 65], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 4}, "missing_lines": [], "excluded_lines": [47, 48, 64, 65]}}}, "dist_py_module/domain/ports/ifile_writer.py": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 47, 48, 62, 63, 73, 74], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 34}, "missing_lines": [], "excluded_lines": [47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82], "functions": {"IFileWriter.write_file": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 12}, "missing_lines": [], "excluded_lines": [49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]}, "IFileWriter.is_initialized": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [64, 65, 66, 67, 68, 69, 70, 71]}, "IFileWriter.__str__": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [75, 76, 77, 78, 79, 80, 81, 82]}, "": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 47, 48, 62, 63, 73, 74], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [47, 48, 62, 63, 73, 74]}}, "classes": {"IFileWriter": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 28}, "missing_lines": [], "excluded_lines": [49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 64, 65, 66, 67, 68, 69, 70, 71, 75, 76, 77, 78, 79, 80, 81, 82]}, "": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 47, 48, 62, 63, 73, 74], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [47, 48, 62, 63, 73, 74]}}}, "dist_py_module/domain/ports/itemplate_provider.py": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 47, 48, 60, 61, 71, 72], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 32}, "missing_lines": [], "excluded_lines": [47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80], "functions": {"ITemplateProvider.get_template_by_name": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 10}, "missing_lines": [], "excluded_lines": [49, 50, 51, 52, 53, 54, 55, 56, 57, 58]}, "ITemplateProvider.is_initialized": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [62, 63, 64, 65, 66, 67, 68, 69]}, "ITemplateProvider.__str__": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [73, 74, 75, 76, 77, 78, 79, 80]}, "": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 47, 48, 60, 61, 71, 72], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [47, 48, 60, 61, 71, 72]}}, "classes": {"ITemplateProvider": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 26}, "missing_lines": [], "excluded_lines": [49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 62, 63, 64, 65, 66, 67, 68, 69, 73, 74, 75, 76, 77, 78, 79, 80]}, "": {"executed_lines": [3, 22, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 47, 48, 60, 61, 71, 72], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [47, 48, 60, 61, 71, 72]}}}, "dist_py_module/engine.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 66, 68, 76, 77, 79, 80, 81, 84, 87, 90, 91, 94, 97, 100, 103, 106, 107, 110, 113, 115, 116, 117, 118, 120, 121, 127, 129, 130, 131, 132, 133, 135, 136, 137, 139, 140, 142, 144, 145, 146, 147], "summary": {"covered_lines": 69, "num_statements": 69, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"DistPyModule.__init__": {"executed_lines": [76, 77, 79, 80, 81, 84, 87, 90, 91, 94, 97, 100, 103, 106, 107, 110, 113, 115, 116, 117, 118], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "DistPyModule.process": {"executed_lines": [127, 129, 130, 131, 132, 133, 135, 136, 137, 139, 140, 142, 144, 145, 146, 147], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 66, 68, 120, 121], "summary": {"covered_lines": 32, "num_statements": 32, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"DistPyModule": {"executed_lines": [76, 77, 79, 80, 81, 84, 87, 90, 91, 94, 97, 100, 103, 106, 107, 110, 113, 115, 116, 117, 118, 127, 129, 130, 131, 132, 133, 135, 136, 137, 139, 140, 142, 144, 145, 146, 147], "summary": {"covered_lines": 37, "num_statements": 37, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 66, 68, 120, 121], "summary": {"covered_lines": 32, "num_statements": 32, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/infrastructure/__init__.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/infrastructure/cli.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 41, 42, 58, 67, 68, 70, 71, 72, 73, 74, 76, 77, 87, 88, 90, 94, 95, 103, 105, 106, 114], "summary": {"covered_lines": 36, "num_statements": 36, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"CLI.__init__": {"executed_lines": [67, 68, 70, 71, 72, 73, 74], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CLI.run": {"executed_lines": [87, 88, 90], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CLI.is_initialized": {"executed_lines": [103], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CLI.__str__": {"executed_lines": [114], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 41, 42, 58, 76, 77, 94, 95, 105, 106], "summary": {"covered_lines": 24, "num_statements": 24, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"CLI": {"executed_lines": [67, 68, 70, 71, 72, 73, 74, 87, 88, 90, 103, 114], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 41, 42, 58, 76, 77, 94, 95, 105, 106], "summary": {"covered_lines": 24, "num_statements": 24, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/infrastructure/cli_bundle.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 41, 56, 57, 58, 60, 69, 70, 72, 73, 75, 76, 78, 86, 87, 89, 90, 92, 100], "summary": {"covered_lines": 33, "num_statements": 33, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"CLIBundle.validate": {"executed_lines": [69, 70, 72, 73, 75, 76], "summary": {"covered_lines": 6, "num_statements": 6, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CLIBundle.merge": {"executed_lines": [86, 87, 89, 90], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CLIBundle.to_dict": {"executed_lines": [100], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 41, 56, 57, 58, 60, 78, 92], "summary": {"covered_lines": 22, "num_statements": 22, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"CLIBundle": {"executed_lines": [69, 70, 72, 73, 75, 76, 86, 87, 89, 90, 100], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 41, 56, 57, 58, 60, 78, 92], "summary": {"covered_lines": 22, "num_statements": 22, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/infrastructure/file_writer.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 51, 52, 65, 66, 68, 69, 71, 72, 73, 75, 77, 78, 86, 88, 89, 97], "summary": {"covered_lines": 30, "num_statements": 30, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"FileWriter.write_file": {"executed_lines": [65, 66, 68, 69, 71, 72, 73, 75], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FileWriter.is_initialized": {"executed_lines": [86], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FileWriter.__str__": {"executed_lines": [97], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 51, 52, 77, 78, 88, 89], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"FileWriter": {"executed_lines": [65, 66, 68, 69, 71, 72, 73, 75, 86, 97], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 51, 52, 77, 78, 88, 89], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/infrastructure/gen_setup_command.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 54, 55, 56, 64, 66, 67, 68, 76, 78, 79, 80, 88, 126, 127, 139, 140, 142, 148, 149, 157], "summary": {"covered_lines": 35, "num_statements": 35, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"GenSetupCommand.name": {"executed_lines": [64], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GenSetupCommand.help_text": {"executed_lines": [76], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GenSetupCommand.options": {"executed_lines": [88], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GenSetupCommand.execute": {"executed_lines": [139, 140, 142], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GenSetupCommand.__str__": {"executed_lines": [157], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 54, 55, 56, 66, 67, 68, 78, 79, 80, 126, 127, 148, 149], "summary": {"covered_lines": 28, "num_statements": 28, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"GenSetupCommand": {"executed_lines": [64, 76, 88, 139, 140, 142, 157], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 54, 55, 56, 66, 67, 68, 78, 79, 80, 126, 127, 148, 149], "summary": {"covered_lines": 28, "num_statements": 28, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "dist_py_module/infrastructure/icli.py": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 48, 49, 59, 60, 70, 71], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 30}, "missing_lines": [], "excluded_lines": [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79], "functions": {"ICLI.run": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [50, 51, 52, 53, 54, 55, 56, 57]}, "ICLI.is_initialized": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [61, 62, 63, 64, 65, 66, 67, 68]}, "ICLI.__str__": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [72, 73, 74, 75, 76, 77, 78, 79]}, "": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 48, 49, 59, 60, 70, 71], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [48, 49, 59, 60, 70, 71]}}, "classes": {"ICLI": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 24}, "missing_lines": [], "excluded_lines": [50, 51, 52, 53, 54, 55, 56, 57, 61, 62, 63, 64, 65, 66, 67, 68, 72, 73, 74, 75, 76, 77, 78, 79]}, "": {"executed_lines": [3, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 48, 49, 59, 60, 70, 71], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [48, 49, 59, 60, 70, 71]}}}, "dist_py_module/infrastructure/icli_command.py": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 53, 54, 55, 65, 66, 67, 77, 78, 79, 89, 90, 104, 105], "summary": {"covered_lines": 14, "num_statements": 14, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 57}, "missing_lines": [], "excluded_lines": [53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "functions": {"ICLICommand.name": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [56, 57, 58, 59, 60, 61, 62, 63]}, "ICLICommand.help_text": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [68, 69, 70, 71, 72, 73, 74, 75]}, "ICLICommand.options": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [80, 81, 82, 83, 84, 85, 86, 87]}, "ICLICommand.execute": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 12}, "missing_lines": [], "excluded_lines": [91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102]}, "ICLICommand.__str__": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [106, 107, 108, 109, 110, 111, 112, 113]}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 53, 54, 55, 65, 66, 67, 77, 78, 79, 89, 90, 104, 105], "summary": {"covered_lines": 14, "num_statements": 14, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 13}, "missing_lines": [], "excluded_lines": [53, 54, 55, 65, 66, 67, 77, 78, 79, 89, 90, 104, 105]}}, "classes": {"ICLICommand": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 44}, "missing_lines": [], "excluded_lines": [56, 57, 58, 59, 60, 61, 62, 63, 68, 69, 70, 71, 72, 73, 74, 75, 80, 81, 82, 83, 84, 85, 86, 87, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 106, 107, 108, 109, 110, 111, 112, 113]}, "": {"executed_lines": [3, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 38, 39, 53, 54, 55, 65, 66, 67, 77, 78, 79, 89, 90, 104, 105], "summary": {"covered_lines": 14, "num_statements": 14, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 13}, "missing_lines": [], "excluded_lines": [53, 54, 55, 65, 66, 67, 77, 78, 79, 89, 90, 104, 105]}}}, "dist_py_module/infrastructure/template_provider.py": {"executed_lines": [3, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 52, 60, 62, 63, 64, 76, 78, 79, 81, 82, 84, 85, 93, 95, 96, 104], "summary": {"covered_lines": 29, "num_statements": 29, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"TemplateProvider.__init__": {"executed_lines": [60], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "TemplateProvider.get_template_by_name": {"executed_lines": [76, 78, 79, 81, 82], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "TemplateProvider.is_initialized": {"executed_lines": [93], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "TemplateProvider.__str__": {"executed_lines": [104], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 52, 62, 63, 64, 84, 85, 95, 96], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"TemplateProvider": {"executed_lines": [60, 76, 78, 79, 81, 82, 93, 104], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [3, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 52, 62, 63, 64, 84, 85, 95, 96], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}}, "totals": {"covered_lines": 445, "num_statements": 445, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 179}} \ No newline at end of file diff --git a/dist_py_module.xml b/dist_py_module.xml index 426553e..84d07f4 100644 --- a/dist_py_module.xml +++ b/dist_py_module.xml @@ -1,5 +1,5 @@ - + @@ -128,12 +128,17 @@ - + - + - + + + + + + @@ -162,35 +167,30 @@ - + - - - - - + + + + + - - - - - + + + + - - - - - - - + + + @@ -200,7 +200,7 @@ - + @@ -208,23 +208,22 @@ - + - + - - + + - + - - + + - + - - - + + diff --git a/dist_py_module/__init__.py b/dist_py_module/__init__.py index 2eb2cb1..cc58feb 100644 --- a/dist_py_module/__init__.py +++ b/dist_py_module/__init__.py @@ -23,7 +23,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/application/__init__.py b/dist_py_module/application/__init__.py index 5e0c8eb..b74a1e8 100644 --- a/dist_py_module/application/__init__.py +++ b/dist_py_module/application/__init__.py @@ -23,7 +23,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/application/service.py b/dist_py_module/application/service.py index b6a022f..f153ce0 100644 --- a/dist_py_module/application/service.py +++ b/dist_py_module/application/service.py @@ -20,8 +20,6 @@ ''' from typing import Any, override -from ats_utilities.factory_class import format_instance_to_string -from ats_utilities.exceptions.ats_value_error import ATSValueError from dist_py_module.domain.ports.ifile_gen import IFileGen from dist_py_module.application.service_bundle import ServiceBundle from dist_py_module.domain.ports.itemplate_provider import ITemplateProvider @@ -32,7 +30,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' @@ -60,10 +58,10 @@ def __init__(self, component_bundle: ServiceBundle) -> None: :param component_bundle: Bundle containing template provider and file writer. :type component_bundle: :exceptions: - | ATSValueError: Component bundle (ServiceBundle) cannot be None or invalid. + | ValueError: Component bundle (ServiceBundle) cannot be None or invalid. ''' if component_bundle is None: - raise ATSValueError('component bundle (ServiceBundle) cannot be None.') + raise ValueError('component bundle (ServiceBundle) cannot be None.') component_bundle.validate() self._template_provider: ITemplateProvider = component_bundle.template_provider @@ -111,14 +109,3 @@ def is_initialized(self) -> bool: :exceptions: None. ''' return True - - @override - def __str__(self) -> str: - ''' - Returns the file generator as string representation. - - :return: The file generator as string representation. - :rtype: - :exceptions: None. - ''' - return format_instance_to_string(self) diff --git a/dist_py_module/application/service_bundle.py b/dist_py_module/application/service_bundle.py index ea75bf3..a719b43 100644 --- a/dist_py_module/application/service_bundle.py +++ b/dist_py_module/application/service_bundle.py @@ -21,7 +21,6 @@ from dataclasses import dataclass from typing import Any -from ats_utilities.exceptions.ats_value_error import ATSValueError from dist_py_module.domain.ports.itemplate_provider import ITemplateProvider from dist_py_module.domain.ports.ifile_writer import IFileWriter @@ -29,7 +28,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' @@ -59,14 +58,14 @@ def validate(self) -> None: Validates that essential components are set. :exceptions: - | ATSValueError: Template provider must be provided. - | ATSValueError: File writer must be provided. + | ValueError: Template provider must be provided. + | ValueError: File writer must be provided. ''' if self.template_provider is None: - raise ATSValueError('template provider must be provided.') + raise ValueError('template provider must be provided.') if self.file_writer is None: - raise ATSValueError("file writer must be provided.") + raise ValueError("file writer must be provided.") def merge(self, other: 'ServiceBundle') -> None: ''' diff --git a/dist_py_module/dist_py_module_bundle.py b/dist_py_module/dist_py_module_bundle.py index 9abe37a..d08e7b4 100644 --- a/dist_py_module/dist_py_module_bundle.py +++ b/dist_py_module/dist_py_module_bundle.py @@ -32,7 +32,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/domain/__init__.py b/dist_py_module/domain/__init__.py index f096b36..cbc8799 100644 --- a/dist_py_module/domain/__init__.py +++ b/dist_py_module/domain/__init__.py @@ -23,7 +23,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/domain/models.py b/dist_py_module/domain/models.py index 7bbaced..46a1b4f 100644 --- a/dist_py_module/domain/models.py +++ b/dist_py_module/domain/models.py @@ -26,7 +26,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/domain/ports/__init__.py b/dist_py_module/domain/ports/__init__.py index 70519d7..8cd3214 100644 --- a/dist_py_module/domain/ports/__init__.py +++ b/dist_py_module/domain/ports/__init__.py @@ -23,7 +23,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/domain/ports/ifile_gen.py b/dist_py_module/domain/ports/ifile_gen.py index 1508f6a..10830ba 100644 --- a/dist_py_module/domain/ports/ifile_gen.py +++ b/dist_py_module/domain/ports/ifile_gen.py @@ -26,7 +26,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' @@ -42,7 +42,6 @@ class IFileGen(ABC): :methods: | execute - Executes the file generation. | is_initialized - Checks if the file generator component is initialized. - | __str__ - Returns the file generator as string representation. ''' @abstractmethod @@ -72,14 +71,3 @@ def is_initialized(self) -> bool: :exceptions: None. ''' pass - - @abstractmethod - def __str__(self) -> str: - ''' - Returns the file generator as string representation. - - :return: The file generator as string representation. - :rtype: - :exceptions: None. - ''' - pass diff --git a/dist_py_module/domain/ports/ifile_writer.py b/dist_py_module/domain/ports/ifile_writer.py index 81af3cb..1ae5452 100644 --- a/dist_py_module/domain/ports/ifile_writer.py +++ b/dist_py_module/domain/ports/ifile_writer.py @@ -25,7 +25,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/domain/ports/itemplate_provider.py b/dist_py_module/domain/ports/itemplate_provider.py index 91829c2..98ee49b 100644 --- a/dist_py_module/domain/ports/itemplate_provider.py +++ b/dist_py_module/domain/ports/itemplate_provider.py @@ -25,7 +25,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/engine.py b/dist_py_module/engine.py index e13be29..a122069 100644 --- a/dist_py_module/engine.py +++ b/dist_py_module/engine.py @@ -43,7 +43,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' @@ -60,7 +60,7 @@ class DistPyModule(Base): | _cli - Adapter for command line user interface. :methods: | __init__ - Initializes the DistPyModule engine with adapters and services. - | run - Starts the dist_py_module. + | process - Starts DistPyModule via CLI adapter. ''' _info_file: str = 'infrastructure/config/dist_py_module.cfg' @@ -112,7 +112,7 @@ def __init__(self, component_bundle: DistPyModuleBundle | None = None) -> None: ]) self._reporter.success(["✅ dist_py_module: engine initialized successfully."]) - except ATSValueError as exc: + except (ATSValueError, ValueError) as exc: self._reporter.error([f'❌ dist_py_module: {exc}']) except Exception as exc: self._reporter.error([f'❌ dist_py_module unexpected exception: {exc}']) @@ -120,22 +120,28 @@ def __init__(self, component_bundle: DistPyModuleBundle | None = None) -> None: @override def process(self) -> None: ''' - Starts the CLI adapter to run the tool command. + Starts DistPyModule via CLI adapter. :exceptions: None. ''' result: dict[str, Any] = {} - if self.is_initialized(): - self._reporter.success(["🔥 Starting execution command..."]) - result = self._cli.run() - self._reporter.success(["✅ Execution finished!"]) - - if result.get("returncode") != 0: - self._reporter.error([f'❌ dist_py_module: {result.get("stderr")}']) - self._reporter.error([f'❌ dist_py_module: exiting with error.']) + try: + if self.is_initialized(): + self._reporter.success(["🔥 Starting execution command..."]) + result = self._cli.run() + self._reporter.success(["✅ Execution finished!"]) + + if result.get("returncode") != 0: + self._reporter.error([f'❌ dist_py_module: {result.get("stderr")}']) + self._reporter.error([f'❌ dist_py_module: exiting with error.']) + else: + self._reporter.success([f'✅ dist_py_module: {result.get("stdout") or 'done!'}']) + self._reporter.success([f'✅ dist_py_module: exiting successfully.']) else: - self._reporter.success([f'✅ dist_py_module: {result.get("stdout") or 'done!'}']) - self._reporter.success([f'✅ dist_py_module: exiting successfully.']) - else: - self._reporter.error([f'❌ dist_py_module: engine not initialized.']) + self._reporter.error([f'❌ dist_py_module: engine not initialized.']) + + except (ATSValueError, ValueError) as exc: + self._reporter.error([f'❌ dist_py_module: {exc}']) + except Exception as exc: + self._reporter.error([f'❌ dist_py_module unexpected exception: {exc}']) diff --git a/dist_py_module/infrastructure/__init__.py b/dist_py_module/infrastructure/__init__.py index 03d9e7e..4215bdf 100644 --- a/dist_py_module/infrastructure/__init__.py +++ b/dist_py_module/infrastructure/__init__.py @@ -23,7 +23,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/infrastructure/cli.py b/dist_py_module/infrastructure/cli.py index 00331e3..d1720f9 100644 --- a/dist_py_module/infrastructure/cli.py +++ b/dist_py_module/infrastructure/cli.py @@ -32,7 +32,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/infrastructure/cli_bundle.py b/dist_py_module/infrastructure/cli_bundle.py index fad1807..c72ddc0 100644 --- a/dist_py_module/infrastructure/cli_bundle.py +++ b/dist_py_module/infrastructure/cli_bundle.py @@ -30,7 +30,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/infrastructure/config/dist_py_module.cfg b/dist_py_module/infrastructure/config/dist_py_module.cfg index 96fb5f9..bb81295 100644 --- a/dist_py_module/infrastructure/config/dist_py_module.cfg +++ b/dist_py_module/infrastructure/config/dist_py_module.cfg @@ -1,5 +1,5 @@ ats_name = dist_py_module -ats_version = 3.1.0 +ats_version = 3.1.1 ats_build_date = 23 Jun 2026 ats_licence = https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE ats_repository = dist_py_module diff --git a/dist_py_module/infrastructure/file_writer.py b/dist_py_module/infrastructure/file_writer.py index 17821dc..16a4f56 100644 --- a/dist_py_module/infrastructure/file_writer.py +++ b/dist_py_module/infrastructure/file_writer.py @@ -29,7 +29,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/infrastructure/gen_setup_command.py b/dist_py_module/infrastructure/gen_setup_command.py index aea3dc0..45919cc 100644 --- a/dist_py_module/infrastructure/gen_setup_command.py +++ b/dist_py_module/infrastructure/gen_setup_command.py @@ -30,7 +30,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/infrastructure/icli.py b/dist_py_module/infrastructure/icli.py index 9167411..50644bc 100644 --- a/dist_py_module/infrastructure/icli.py +++ b/dist_py_module/infrastructure/icli.py @@ -26,7 +26,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/infrastructure/icli_command.py b/dist_py_module/infrastructure/icli_command.py index dcdeddc..5c9f5f6 100644 --- a/dist_py_module/infrastructure/icli_command.py +++ b/dist_py_module/infrastructure/icli_command.py @@ -29,7 +29,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/infrastructure/template_provider.py b/dist_py_module/infrastructure/template_provider.py index becffdf..ee86693 100644 --- a/dist_py_module/infrastructure/template_provider.py +++ b/dist_py_module/infrastructure/template_provider.py @@ -28,7 +28,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/dist_py_module/py.typed b/dist_py_module/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/docs/build/.editorconfig b/docs/build/.editorconfig deleted file mode 100644 index b92ec54..0000000 --- a/docs/build/.editorconfig +++ /dev/null @@ -1,3 +0,0 @@ -[**.*] -indent_style = tab -tab_width = 4 \ No newline at end of file diff --git a/docs/build/doctrees/.editorconfig b/docs/build/doctrees/.editorconfig deleted file mode 100644 index b92ec54..0000000 --- a/docs/build/doctrees/.editorconfig +++ /dev/null @@ -1,3 +0,0 @@ -[**.*] -indent_style = tab -tab_width = 4 \ No newline at end of file diff --git a/docs/build/doctrees/dist_py_module.application.service_bundle.doctree b/docs/build/doctrees/dist_py_module.application.service_bundle.doctree index 71eb16de0af40fbbbe9ae0d746a56181628d0cec..d3c15be622c731534d03b3d314149fda91cc6e98 100644 GIT binary patch delta 75 zcmdni!?dJ_iKT&cs^mr%lM3e88imPr6-JZKR%%V2TcO6N59H}{PRU@8osuEe1LjRO UtW0Lq1gYSF3TtjYTbaoN0OPM3g8%>k delta 85 zcmZ3|!?dl3iKT&cs`f?}lM1%v8U@FY;K}AazxX=^*3wr@V#nbdv{TiQw&N@-~er31@!N-5Z4zw7YILfvj% zVR6$YfS?tyrzI-rQWI1*aV?o$HL`Jmq<4|;1EJc@G#t#CN}c|j_`DSXWB#PelNIEl*(>tS9z&lcLue`W~@Az3-eaDG`a z{9WglT~x}*Tw%|~oBe6{bf?X8m^(W{hLBS^!KW@ijQ0 z?e158yJvK0M){IIN`pgV1KM*qv1A8hcNj3Ovl4OMGP$S!rgq8Dd#Y+CR5U?*NlDD zB@l{amb8FYbX2Z@y*T%ay~-hJ?kc^vh+Z{Q4&jl?9{cP6pXCX) zs_|HMRry$}0k5`H!PoI&BgT zHAr%z_HLe9>4i#ia)Ed?7VXuj>sV1)fd9P9wFsam7X03FFLcC$Bd0=6Rh=;0E7d9OLbg`sbw2M)&YT#LxW4on;oT#J_192J2kizV2%B0pml6_GR< zQ?%m4*%cw6*B-Y(XY>WS5aSdnkh;zb1eb4t=#iq~yhIeV^12cz|b1K0X{n>;vx6Vf6XH8xjQ=9A9m{DuI8MwN| z2%`k&P1~hnkI)abquoYqyGO=L&9&?SBVMkkW3R_(Xe1W|$ps?mVaicFx3-kMA9K>U zUeUN(;53f)c%gq|Q z^dy{IYh(0twlSacJGj0SO1OulQ7go`4P_dwvZOe)%;{vMVjMN%(7t&PDpE`oi&-40vue7nrH-U6FUu$u*J<04pY z58~dN(Vr!lSj3`khfTa3N3gr9Z4 z%8U}e*-(c!H+jJ+7QSjrHs?yT3ny)cB;vp~*DS%E_q2ge3rtFsl~Rd|m@b8r{Y9i< zI|Wd;&@|jrLw7x%gk!bbg7s5R74*{jE{m=iCP+B%x3g}Eww%x9&9Z~Td=IX znC>f)GzZi)S&~pS$&WoQ;f3~Gcv53+vMO2J$K^LtDUPe)2MD~xqO;p2{Qc%~UKRC3 z%a-Y=0C+t}fK1ti^#i%8{&o?hs=teTCiEv}KTm(y*Wtpy4GgMam!n{BN5RDG=YfR> z2Qv+j6y9_1zYIz5a)f_i-$;gqPY;iU@~Lx?Wpcz18}O}>S9AB%AyD{V55-J}Ox%2w NV_ZG6;klh#;6JuL!CwFX delta 3544 zcmb7Hdu)@}73W^Z_Gc1@goK3PXY7zT>I zYk|&XD96xN8z_{iUDylcmPlpoCUt+Te^gBsO;yF(!B%OTh9+$jVj82{x%Ye6c@%Y# z@;&Z3=lA=abI-ls_32N@{aZx;ZT`(TUK+$dS=_yRDm&8!+RT$ojuy*E;`5;NQ;l zwM{FM)_fUhc`Rb=k418#E5{XndEE1{so05_Ct_g-D121sfi5W}{z-l>rQhf8R@hrm zMqZAeC|E=2&nVn!+)A#(Z#Fj5cV%;7;X2bV=&Dr+aFv3us+fMDdd(J=P#mkuT@U9% z8Bo!)&h;|)v_^Ch8=K{i_BL{CFdT7k1^N9kHjS};Pr|t(3;8Sjq{wBxi(bbfCCp0D zI}wCzF*?270=F{rU?!AmjwJ)b$w3=*dtA={;Aqr%WROi9KN^m)hx}DK6doT^-s9&z zBa}LIaQTTE;sJk+9lmI^@`22rnl!6U6&t+@ck*6?wq`R7l-7`K=xO7HNpfM{_@7G& zA$`JTEMK=~KM%LCZoC~EWbeS8N;kY&?jY~O_4;f{saZEPS8XESP^l%wyBB_1)j&=Q ztY5XPhr<=2obL#rkXEdS8w+*_j@D#LDivI-E?eW5c{^m@eNbQNA-xc&+zu&K4k7|n zZL`VR7+M!;n-$vLSG3uTva>AhmLe^WTmVOPAm?LYe3ZD^6~*1HE=O^enmV{qvqap3 zWO3HoCE^|kaTd7U*dQsMm}KoPQU>#N^+J^c9@hG#;uNL+o0@nz<+-GkVXnbW*`j%!6B&Q11qCE6 zfM@*s#w8igiHxDeYlnx8Hp0V2&eW{O9ilGd0?LXS$HK$%syYi%?|zdC$!p-E`Fh+r zY;xh%LL%(->e8&YQ0&sAUflLNu|ieT2AZqG4dGy_PrqsvJB51y+XHVlZBO&^O5o;! zfqC%Xre~?2OYy+W_M4;=4mL;Vuso2lFI5`CVB9;rKz#qCr{wXc%s-|l-$Fe1+DRGwINoq?IDt3l^yNWdr3O86zBPERcHad8-+xWz>-LhkMoxY<{+MY}YZR0W3Hr+4Qd&9i%oXh^fGGy_X%hE}4HR2m4j zZluRGl;teHZ7rfNYIc?7)KZq{qgmc?+H(r7Ul)#6ldfreht& z@}Jn@!k0ZAKK_z4)zr#?Tqdn0aaH0>>`EmQya!+=V5CEOF^JO)ANCtb5Joy%>Az%2 ze1+XZYGsAlz`XYeH5o-;1T6-gg(01P6TN3xhEW8iT_vbu$gh`uf~;ID}dcb4fv$rn3ZG?a#uWUz*C(C@Q%NjKAxcRCsCE+ zSJA)ELWh^rq$16rpz$xFNmFRJJqW4Y<+M{>Ko)Zz-<{-Bj#r0=k=!7Qqm-!O>F`A4 z$e~y`vJnq!MfhKgpKyZS!pp-I?VB*&S52=Nu@&>k zCAi(!pK6dWbFs;%!|nqeX{rz`@eEu(FiUeJrK=>EeDZCYB|(346P)XG(-PUjd&q+* z*o*HO;qRS=@bI9Ydet!Aj9X!_% z1Y6BXduqA_zSdmA5ZNX6_``yuXGIR)h8Hvr31p4}2nNf@>u@$`p+8dPVzU=;v%O7^ zCHSELg#;)zyE(~@Iiz)$@uJ9!+hU&4=ABmq+mNzJ_$ahtr|7szgqAyQo6Hi~c z`?D*>8Kj;eo#1THn%Xri@8p7p*=k{^@eZsim%y=Xp pe<-leVJ&MT2Vj7`yaKRLCySV31IxFoTtq*%cvv$!On(lPQNY&OlrEyB_6pak&EN^B8h76eu<_uZC3^~8e3$*_T$EgtES-922DMnZ*I@!@t OXL0}w%Vq}$RbBu`n1px$ delta 318 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

`LMwv!uJ^C8<%(ccTfa3O6YIb_vof+kd$M&)EJ; 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μNwm}&EMA#sIf&*o4 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%0D+l*X${( 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 t-qZP_~|X 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�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 delta 27 jcmZp>%Gh?5aYK$Hqrv7}M=M4~gUPv$mp4~CbE^XYl6?uw diff --git a/docs/build/html/.editorconfig b/docs/build/html/.editorconfig deleted file mode 100644 index b92ec54..0000000 --- a/docs/build/html/.editorconfig +++ /dev/null @@ -1,3 +0,0 @@ -[**.*] -indent_style = tab -tab_width = 4 \ No newline at end of file diff --git a/docs/build/html/_modules/dist_py_module/application/service.html b/docs/build/html/_modules/dist_py_module/application/service.html index 8419e20..ff6b8c0 100644 --- a/docs/build/html/_modules/dist_py_module/application/service.html +++ b/docs/build/html/_modules/dist_py_module/application/service.html @@ -58,8 +58,6 @@

Source code for dist_py_module.application.service

''' from typing import Any, override -from ats_utilities.factory_class import format_instance_to_string -from ats_utilities.exceptions.ats_value_error import ATSValueError from dist_py_module.domain.ports.ifile_gen import IFileGen from dist_py_module.application.service_bundle import ServiceBundle from dist_py_module.domain.ports.itemplate_provider import ITemplateProvider @@ -70,7 +68,7 @@

Source code for dist_py_module.application.service

__copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' @@ -100,10 +98,10 @@

Source code for dist_py_module.application.service

:param component_bundle: Bundle containing template provider and file writer. :type component_bundle: <ServiceBundle> :exceptions: - | ATSValueError: Component bundle (ServiceBundle) cannot be None or invalid. + | ValueError: Component bundle (ServiceBundle) cannot be None or invalid. ''' if component_bundle is None: - raise ATSValueError('component bundle (ServiceBundle) cannot be None.') + raise ValueError('component bundle (ServiceBundle) cannot be None.') component_bundle.validate() self._template_provider: ITemplateProvider = component_bundle.template_provider @@ -156,18 +154,7 @@

Source code for dist_py_module.application.service

:exceptions: None. ''' return True
- - - @override - def __str__(self) -> str: - ''' - Returns the file generator as string representation. - - :return: The file generator as string representation. - :rtype: <str> - :exceptions: None. - ''' - return format_instance_to_string(self)
+
diff --git a/docs/build/html/_modules/dist_py_module/application/service_bundle.html b/docs/build/html/_modules/dist_py_module/application/service_bundle.html index 6bf20c2..194fbb2 100644 --- a/docs/build/html/_modules/dist_py_module/application/service_bundle.html +++ b/docs/build/html/_modules/dist_py_module/application/service_bundle.html @@ -59,7 +59,6 @@

Source code for dist_py_module.application.service_bundle

from dataclasses import dataclass from typing import Any -from ats_utilities.exceptions.ats_value_error import ATSValueError from dist_py_module.domain.ports.itemplate_provider import ITemplateProvider from dist_py_module.domain.ports.ifile_writer import IFileWriter @@ -67,7 +66,7 @@

Source code for dist_py_module.application.service_bundle

__copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' @@ -101,14 +100,14 @@

Source code for dist_py_module.application.service_bundle

Validates that essential components are set. :exceptions: - | ATSValueError: Template provider must be provided. - | ATSValueError: File writer must be provided. + | ValueError: Template provider must be provided. + | ValueError: File writer must be provided. ''' if self.template_provider is None: - raise ATSValueError('template provider must be provided.') + raise ValueError('template provider must be provided.') if self.file_writer is None: - raise ATSValueError("file writer must be provided.")
+ raise ValueError("file writer must be provided.")
diff --git a/docs/build/html/_modules/dist_py_module/dist_py_module_bundle.html b/docs/build/html/_modules/dist_py_module/dist_py_module_bundle.html index 36c561d..79cdf54 100644 --- a/docs/build/html/_modules/dist_py_module/dist_py_module_bundle.html +++ b/docs/build/html/_modules/dist_py_module/dist_py_module_bundle.html @@ -70,7 +70,7 @@

Source code for dist_py_module.dist_py_module_bundle

__copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/docs/build/html/_modules/dist_py_module/domain/models.html b/docs/build/html/_modules/dist_py_module/domain/models.html index 8d6da3c..eda5ad1 100644 --- a/docs/build/html/_modules/dist_py_module/domain/models.html +++ b/docs/build/html/_modules/dist_py_module/domain/models.html @@ -64,7 +64,7 @@

Source code for dist_py_module.domain.models

__copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module'
 __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation']
 __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE'
-__version__: str = '3.1.0'
+__version__: str = '3.1.1'
 __maintainer__: str = 'Vladimir Roncevic'
 __email__: str = 'elektron.ronca@gmail.com'
 __status__: str = 'Development'
diff --git a/docs/build/html/_modules/dist_py_module/domain/ports/ifile_gen.html b/docs/build/html/_modules/dist_py_module/domain/ports/ifile_gen.html
index 10e4b39..50901de 100644
--- a/docs/build/html/_modules/dist_py_module/domain/ports/ifile_gen.html
+++ b/docs/build/html/_modules/dist_py_module/domain/ports/ifile_gen.html
@@ -64,7 +64,7 @@ 

Source code for dist_py_module.domain.ports.ifile_gen

__copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' @@ -82,7 +82,6 @@

Source code for dist_py_module.domain.ports.ifile_gen

:methods: | execute - Executes the file generation. | is_initialized - Checks if the file generator component is initialized. - | __str__ - Returns the file generator as string representation. '''
@@ -117,18 +116,7 @@

Source code for dist_py_module.domain.ports.ifile_gen

:exceptions: None. ''' pass
- - - @abstractmethod - def __str__(self) -> str: - ''' - Returns the file generator as string representation. - - :return: The file generator as string representation. - :rtype: <str> - :exceptions: None. - ''' - pass
+
diff --git a/docs/build/html/_modules/dist_py_module/domain/ports/ifile_writer.html b/docs/build/html/_modules/dist_py_module/domain/ports/ifile_writer.html index 8480da7..9bc4a5b 100644 --- a/docs/build/html/_modules/dist_py_module/domain/ports/ifile_writer.html +++ b/docs/build/html/_modules/dist_py_module/domain/ports/ifile_writer.html @@ -63,7 +63,7 @@

Source code for dist_py_module.domain.ports.ifile_writer

__copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/docs/build/html/_modules/dist_py_module/domain/ports/itemplate_provider.html b/docs/build/html/_modules/dist_py_module/domain/ports/itemplate_provider.html index 374b5d8..e6c45c8 100644 --- a/docs/build/html/_modules/dist_py_module/domain/ports/itemplate_provider.html +++ b/docs/build/html/_modules/dist_py_module/domain/ports/itemplate_provider.html @@ -63,7 +63,7 @@

Source code for dist_py_module.domain.ports.itemplate_provider

__copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/docs/build/html/_modules/dist_py_module/engine.html b/docs/build/html/_modules/dist_py_module/engine.html index 5e34481..ccb4253 100644 --- a/docs/build/html/_modules/dist_py_module/engine.html +++ b/docs/build/html/_modules/dist_py_module/engine.html @@ -81,7 +81,7 @@

Source code for dist_py_module.engine

 __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module'
 __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation']
 __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE'
-__version__: str = '3.1.0'
+__version__: str = '3.1.1'
 __maintainer__: str = 'Vladimir Roncevic'
 __email__: str = 'elektron.ronca@gmail.com'
 __status__: str = 'Development'
@@ -100,7 +100,7 @@ 

Source code for dist_py_module.engine

                 | _cli - Adapter for command line user interface.
             :methods:
                 | __init__ - Initializes the DistPyModule engine with adapters and services.
-                | run - Starts the dist_py_module.
+                | process - Starts DistPyModule via CLI adapter.
     '''
 
     _info_file: str = 'infrastructure/config/dist_py_module.cfg'
@@ -152,7 +152,7 @@ 

Source code for dist_py_module.engine

             ])
             self._reporter.success(["✅ dist_py_module: engine initialized successfully."])
 
-        except ATSValueError as exc:
+        except (ATSValueError, ValueError) as exc:
             self._reporter.error([f'❌ dist_py_module: {exc}'])
         except Exception as exc:
             self._reporter.error([f'❌ dist_py_module unexpected exception: {exc}'])
@@ -162,25 +162,31 @@ 

Source code for dist_py_module.engine

     @override
     def process(self) -> None:
         '''
-            Starts the CLI adapter to run the tool command.
+            Starts DistPyModule via CLI adapter.
 
             :exceptions: None.
         '''
         result: dict[str, Any] = {}
 
-        if self.is_initialized():
-            self._reporter.success(["🔥 Starting execution command..."])
-            result = self._cli.run()
-            self._reporter.success(["✅ Execution finished!"])
-
-            if result.get("returncode") != 0:
-                self._reporter.error([f'❌ dist_py_module: {result.get("stderr")}'])
-                self._reporter.error([f'❌ dist_py_module: exiting with error.'])
+        try:
+            if self.is_initialized():
+                self._reporter.success(["🔥 Starting execution command..."])
+                result = self._cli.run()
+                self._reporter.success(["✅ Execution finished!"])
+
+                if result.get("returncode") != 0:
+                    self._reporter.error([f'❌ dist_py_module: {result.get("stderr")}'])
+                    self._reporter.error([f'❌ dist_py_module: exiting with error.'])
+                else:
+                    self._reporter.success([f'✅ dist_py_module: {result.get("stdout") or 'done!'}'])
+                    self._reporter.success([f'✅ dist_py_module: exiting successfully.'])
             else:
-                self._reporter.success([f'✅ dist_py_module: {result.get("stdout") or 'done!'}'])
-                self._reporter.success([f'✅ dist_py_module: exiting successfully.'])
-        else:
-            self._reporter.error([f'❌ dist_py_module: engine not initialized.'])
+ self._reporter.error([f'❌ dist_py_module: engine not initialized.']) + + except (ATSValueError, ValueError) as exc: + self._reporter.error([f'❌ dist_py_module: {exc}']) + except Exception as exc: + self._reporter.error([f'❌ dist_py_module unexpected exception: {exc}'])
diff --git a/docs/build/html/_modules/dist_py_module/infrastructure/cli.html b/docs/build/html/_modules/dist_py_module/infrastructure/cli.html index 587ca56..20d2d34 100644 --- a/docs/build/html/_modules/dist_py_module/infrastructure/cli.html +++ b/docs/build/html/_modules/dist_py_module/infrastructure/cli.html @@ -70,7 +70,7 @@

Source code for dist_py_module.infrastructure.cli

__copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/docs/build/html/_modules/dist_py_module/infrastructure/cli_bundle.html b/docs/build/html/_modules/dist_py_module/infrastructure/cli_bundle.html index 9d76bad..b23463f 100644 --- a/docs/build/html/_modules/dist_py_module/infrastructure/cli_bundle.html +++ b/docs/build/html/_modules/dist_py_module/infrastructure/cli_bundle.html @@ -68,7 +68,7 @@

Source code for dist_py_module.infrastructure.cli_bundle

__copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/docs/build/html/_modules/dist_py_module/infrastructure/file_writer.html b/docs/build/html/_modules/dist_py_module/infrastructure/file_writer.html index 948bdb9..e7ac5bb 100644 --- a/docs/build/html/_modules/dist_py_module/infrastructure/file_writer.html +++ b/docs/build/html/_modules/dist_py_module/infrastructure/file_writer.html @@ -67,7 +67,7 @@

Source code for dist_py_module.infrastructure.file_writer

__copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/docs/build/html/_modules/dist_py_module/infrastructure/gen_setup_command.html b/docs/build/html/_modules/dist_py_module/infrastructure/gen_setup_command.html index 7c16d3b..fb03ef2 100644 --- a/docs/build/html/_modules/dist_py_module/infrastructure/gen_setup_command.html +++ b/docs/build/html/_modules/dist_py_module/infrastructure/gen_setup_command.html @@ -68,7 +68,7 @@

Source code for dist_py_module.infrastructure.gen_setup_command

__copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/docs/build/html/_modules/dist_py_module/infrastructure/icli.html b/docs/build/html/_modules/dist_py_module/infrastructure/icli.html index 8b2a628..165e1cf 100644 --- a/docs/build/html/_modules/dist_py_module/infrastructure/icli.html +++ b/docs/build/html/_modules/dist_py_module/infrastructure/icli.html @@ -64,7 +64,7 @@

Source code for dist_py_module.infrastructure.icli

__copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/docs/build/html/_modules/dist_py_module/infrastructure/icli_command.html b/docs/build/html/_modules/dist_py_module/infrastructure/icli_command.html index 4f10c86..b1c8b60 100644 --- a/docs/build/html/_modules/dist_py_module/infrastructure/icli_command.html +++ b/docs/build/html/_modules/dist_py_module/infrastructure/icli_command.html @@ -67,7 +67,7 @@

Source code for dist_py_module.infrastructure.icli_command

__copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/docs/build/html/_modules/dist_py_module/infrastructure/template_provider.html b/docs/build/html/_modules/dist_py_module/infrastructure/template_provider.html index 38aec67..6d6e487 100644 --- a/docs/build/html/_modules/dist_py_module/infrastructure/template_provider.html +++ b/docs/build/html/_modules/dist_py_module/infrastructure/template_provider.html @@ -66,7 +66,7 @@

Source code for dist_py_module.infrastructure.template_provider

__copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/docs/build/html/_modules/main.html b/docs/build/html/_modules/main.html index bb57909..74f7aed 100644 --- a/docs/build/html/_modules/main.html +++ b/docs/build/html/_modules/main.html @@ -63,7 +63,7 @@

Source code for main

 __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module'
 __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation']
 __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE'
-__version__: str = '3.1.0'
+__version__: str = '3.1.1'
 __maintainer__: str = 'Vladimir Roncevic'
 __email__: str = 'elektron.ronca@gmail.com'
 __status__: str = 'Development'
diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt
index ec5f885..f0fd8b6 100644
--- a/docs/build/html/_sources/index.rst.txt
+++ b/docs/build/html/_sources/index.rst.txt
@@ -136,7 +136,7 @@ Running tool for creating new distributing py module
 
     mkdir -p demo/mytool/
 
-    python3 main.py setup --package-name "dist_py_module" --version "3.1.0" --description "Package for distributing Python packages." --author "Vladimir Roncevic" --email "elektron.ronca@gmail.com" --github "vroncevic" --license "GNU General Public License (GPL)" --with-readme "True"
+    python3 main.py setup --package-name "dist_py_module" --version "3.1.1" --description "Package for distributing Python packages." --author "Vladimir Roncevic" --email "elektron.ronca@gmail.com" --github "vroncevic" --license "GNU General Public License (GPL)" --with-readme "True"
 
 Copyright and licence
 -----------------------
diff --git a/docs/build/html/dist_py_module.application.service_bundle.html b/docs/build/html/dist_py_module.application.service_bundle.html
index c1dd20e..54995ad 100644
--- a/docs/build/html/dist_py_module.application.service_bundle.html
+++ b/docs/build/html/dist_py_module.application.service_bundle.html
@@ -137,8 +137,8 @@ 

Navigation

Exceptions:
-
ATSValueError: Template provider must be provided.
-
ATSValueError: File writer must be provided.
+
ValueError: Template provider must be provided.
+
ValueError: File writer must be provided.
diff --git a/docs/build/html/dist_py_module.domain.ports.ifile_gen.html b/docs/build/html/dist_py_module.domain.ports.ifile_gen.html index ae57866..b213817 100644 --- a/docs/build/html/dist_py_module.domain.ports.ifile_gen.html +++ b/docs/build/html/dist_py_module.domain.ports.ifile_gen.html @@ -82,7 +82,6 @@

Navigation

execute - Executes the file generation.
is_initialized - Checks if the file generator component is initialized.
-
__str__ - Returns the file generator as string representation.
diff --git a/docs/build/html/dist_py_module.engine.html b/docs/build/html/dist_py_module.engine.html index 6708fd1..1edccb7 100644 --- a/docs/build/html/dist_py_module.engine.html +++ b/docs/build/html/dist_py_module.engine.html @@ -82,7 +82,7 @@

Navigation

methods:
__init__ - Initializes the DistPyModule engine with adapters and services.
-
run - Starts the dist_py_module.
+
process - Starts DistPyModule via CLI adapter.
@@ -100,7 +100,7 @@

Navigation

process() None[source]
-

Starts the CLI adapter to run the tool command.

+

Starts DistPyModule via CLI adapter.

Exceptions:

None.

diff --git a/docs/build/html/index.html b/docs/build/html/index.html index 3d6c8a9..f3f7d95 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -155,7 +155,7 @@

Usage

Running tool for creating new distributing py module

mkdir -p demo/mytool/
 
-python3 main.py setup --package-name "dist_py_module" --version "3.1.0" --description "Package for distributing Python packages." --author "Vladimir Roncevic" --email "elektron.ronca@gmail.com" --github "vroncevic" --license "GNU General Public License (GPL)" --with-readme "True"
+python3 main.py setup --package-name "dist_py_module" --version "3.1.1" --description "Package for distributing Python packages." --author "Vladimir Roncevic" --email "elektron.ronca@gmail.com" --github "vroncevic" --license "GNU General Public License (GPL)" --with-readme "True"
 
diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index 5ae2e5436ad30672fc04c3c7db1045c084bf54f6..2c7138fca69f8316864feeb7287fb7cd1e180085 100644 GIT binary patch delta 12 TcmX@Zb%tw#8>8VycUD#a9ccr% delta 12 TcmX@Zb%tw#8>7KScUD#a9b^Nx diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index c51ca07..fc8e489 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["dist_py_module", "dist_py_module.application", "dist_py_module.application.service", "dist_py_module.application.service_bundle", "dist_py_module.dist_py_module_bundle", "dist_py_module.domain", "dist_py_module.domain.models", "dist_py_module.domain.ports", "dist_py_module.domain.ports.ifile_gen", "dist_py_module.domain.ports.ifile_writer", "dist_py_module.domain.ports.itemplate_provider", "dist_py_module.engine", "dist_py_module.infrastructure", "dist_py_module.infrastructure.cli", "dist_py_module.infrastructure.cli_bundle", "dist_py_module.infrastructure.file_writer", "dist_py_module.infrastructure.gen_setup_command", "dist_py_module.infrastructure.icli", "dist_py_module.infrastructure.icli_command", "dist_py_module.infrastructure.template_provider", "index", "main", "modules"], "filenames": ["dist_py_module.rst", "dist_py_module.application.rst", "dist_py_module.application.service.rst", "dist_py_module.application.service_bundle.rst", "dist_py_module.dist_py_module_bundle.rst", "dist_py_module.domain.rst", "dist_py_module.domain.models.rst", "dist_py_module.domain.ports.rst", "dist_py_module.domain.ports.ifile_gen.rst", "dist_py_module.domain.ports.ifile_writer.rst", "dist_py_module.domain.ports.itemplate_provider.rst", "dist_py_module.engine.rst", "dist_py_module.infrastructure.rst", "dist_py_module.infrastructure.cli.rst", "dist_py_module.infrastructure.cli_bundle.rst", "dist_py_module.infrastructure.file_writer.rst", "dist_py_module.infrastructure.gen_setup_command.rst", "dist_py_module.infrastructure.icli.rst", "dist_py_module.infrastructure.icli_command.rst", "dist_py_module.infrastructure.template_provider.rst", "index.rst", "main.rst", "modules.rst"], "titles": ["dist_py_module package", "dist_py_module.application package", "dist_py_module.application.service module", "dist_py_module.application.service_bundle module", "dist_py_module.dist_py_module_bundle module", "dist_py_module.domain package", "dist_py_module.domain.models module", "dist_py_module.domain.ports package", "dist_py_module.domain.ports.ifile_gen module", "dist_py_module.domain.ports.ifile_writer module", "dist_py_module.domain.ports.itemplate_provider module", "dist_py_module.engine module", "dist_py_module.infrastructure package", "dist_py_module.infrastructure.cli module", "dist_py_module.infrastructure.cli_bundle module", "dist_py_module.infrastructure.file_writer module", "dist_py_module.infrastructure.gen_setup_command module", "dist_py_module.infrastructure.icli module", "dist_py_module.infrastructure.icli_command module", "dist_py_module.infrastructure.template_provider module", "Generate setup.py", "main module", "dist_py_module"], "terms": {"applic": [0, 4, 20, 21, 22], "servic": [0, 1, 3, 4, 11, 12, 13, 14, 16, 18, 20], "filegen": [0, 1, 2], "service_bundl": [0, 1, 20], "servicebundl": [0, 1, 2, 3], "domain": [0, 20, 22], "port": [0, 5, 13, 20], "model": [0, 5, 20], "generatedfil": [0, 5, 6], "infrastructur": [0, 11, 20, 22], "cli": [0, 4, 11, 12, 14, 16, 17, 18, 20, 21], "cli_bundl": [0, 12, 20], "clibundl": [0, 12, 13, 14], "file_writ": [0, 1, 3, 4, 12, 20], "filewrit": [0, 12, 15], "gen_setup_command": [0, 12, 20], "gensetupcommand": [0, 12, 16], "icli": [0, 4, 12, 13, 20], "icli_command": [0, 12, 20], "iclicommand": [0, 12, 14, 16, 18], "template_provid": [0, 1, 3, 4, 12, 20], "templateprovid": [0, 12, 19], "dist_py_module_bundl": [0, 20, 22], "distpymodulebundl": [0, 4, 11, 22], "merg": [0, 1, 3, 4, 12, 14], "parser": [0, 4, 12, 13, 14, 16, 18], "to_dict": [0, 1, 3, 4, 12, 14], "valid": [0, 1, 3, 4, 12, 14], "engin": [0, 20, 22], "distpymodul": [0, 11, 21, 22], "_abc_impl": [0, 1, 2, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19], "_info_fil": [0, 11], "process": [0, 2, 11], "__init__": [0, 1, 5, 7, 11, 12, 13, 19, 20], "py": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "copyright": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "c": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "2026": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "vladimir": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "roncev": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "elektron": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "ronca": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "gmail": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "com": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "free": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "softwar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "redistribut": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "modifi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "under": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "term": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "gnu": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "public": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "licens": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "publish": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "foundat": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "either": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "version": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "your": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "option": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "ani": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "later": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "distribut": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "hope": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "without": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "warranti": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "even": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "impli": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "merchant": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "fit": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "FOR": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "A": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "particular": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "purpos": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "see": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "more": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "detail": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "should": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "have": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "receiv": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "copi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "along": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "program": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "If": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "http": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "www": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "org": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "info": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "initi": [0, 1, 2, 5, 7, 8, 9, 10, 11, 12, 13, 15, 17, 19], "execut": [1, 2, 7, 8, 11, 12, 13, 16, 18], "is_initi": [1, 2, 7, 8, 9, 10, 12, 13, 15, 17, 19], "defin": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19], "file": [2, 3, 4, 6, 8, 9, 11, 13, 14, 15, 16, 18, 19, 20], "class": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19], "component_bundl": [2, 11, 13], "sourc": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21], "base": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20], "ifilegen": [2, 4, 5, 7, 8, 14, 16, 18], "orchestr": [2, 4, 11, 13, 14, 16, 18], "It": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19], "attribut": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19], "_template_provid": 2, "adapt": [2, 3, 4, 11, 13, 14, 15, 17, 19, 21], "provid": [2, 3, 4, 10, 14, 19, 20], "raw": [2, 3, 6, 10, 20], "templat": [2, 3, 4, 6, 8, 10, 19, 20], "_file_writ": 2, "write": [2, 3, 4, 9, 15], "method": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19], "user": [2, 4, 11], "check": [2, 8, 9, 10, 13, 15, 17, 19], "compon": [2, 3, 4, 8, 9, 10, 13, 14, 15, 17, 19], "__str__": [2, 8, 9, 10, 13, 15, 16, 17, 18, 19], "return": [2, 3, 4, 6, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19], "string": [2, 6, 8, 9, 10, 13, 15, 16, 17, 18, 19], "represent": [2, 3, 4, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19], "_abc": [2, 8, 9, 10, 11, 13, 15, 16, 17, 18, 19], "_abc_data": [2, 8, 9, 10, 11, 13, 15, 16, 17, 18, 19], "object": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19], "template_nam": [2, 8], "str": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19], "target_filenam": [2, 8], "cli_param": [2, 8], "dict": [2, 3, 4, 6, 8, 13, 14, 16, 17, 18], "from": [2, 3, 4, 6, 14, 16, 18, 19], "target": [2, 6, 9], "path": [2, 6, 8, 9, 11, 15, 19], "paramet": [2, 3, 4, 6, 8, 9, 10, 14, 15, 16, 18, 19], "The": [2, 6, 8, 9, 10, 15, 16, 18, 19, 20], "name": [2, 5, 6, 8, 10, 12, 13, 16, 18, 19, 20], "output": [2, 8], "filenam": [2, 6, 8, 9, 15], "format": [2, 6, 8], "code": [2, 8, 11, 13, 16, 17, 18, 20, 21], "stdout": [2, 8, 13, 16, 17, 18], "stderr": [2, 8, 13, 16, 17, 18], "messag": [2, 8, 13, 16, 17, 18], "type": [2, 3, 4, 6, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20], "except": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21], "filenotfounderror": [2, 19], "found": 2, "oserror": [2, 13, 15, 19], "an": [2, 15], "o": [2, 13, 15, 20], "error": [2, 13, 15], "occur": [2, 15], "while": 2, "bool": [2, 8, 9, 10, 13, 15, 17, 19], "true": [2, 8, 9, 10, 13, 15, 17, 19, 20], "success": [2, 8, 9, 10, 13, 15, 17, 19], "fals": [2, 8, 9, 10, 13, 15, 17, 19], "fail": [2, 8, 9, 10, 13, 15, 17, 19], "none": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21], "bundl": [3, 4, 14], "itemplateprovid": [3, 4, 5, 7, 10, 19], "ifilewrit": [3, 4, 5, 7, 9, 15], "data": [3, 14], "default": [3, 4, 14], "essenti": [3, 14], "ar": [3, 14, 19], "set": [3, 14], "non": [3, 4, 14], "valu": [3, 4, 14], "anoth": [3, 4, 14], "convert": [3, 4, 14], "dictionari": [3, 4, 14], "other": [3, 4, 14, 20], "one": [3, 4, 14], "atsvalueerror": [3, 4, 14], "must": [3, 4, 14], "writer": [3, 4, 9, 15], "ioptionmanag": [4, 14], "hold": 4, "all": 4, "read": [4, 19], "argument": [4, 13, 14, 17], "command": [4, 11, 12, 13, 14, 16, 17, 18], "line": [4, 11, 17], "interfac": [4, 8, 9, 10, 11, 17, 18], "ifile_gen": [5, 7, 20], "ifile_writ": [5, 7, 20], "itemplate_provid": [5, 7, 20], "from_templ": [5, 6], "repres": [6, 18], "content": [6, 9, 10, 15, 19, 22], "render": 6, "factori": 6, "build": 6, "classmethod": 6, "raw_templ": 6, "param": [6, 16, 18], "destin": [6, 9, 15], "fill": 6, "instanc": [6, 13, 14, 16, 18], "write_fil": [7, 9, 12, 15], "get_template_by_nam": [7, 10, 12, 19], "abstract": [8, 9, 10, 17, 18], "abc": [8, 9, 10, 17], "specifi": 9, "text": [9, 15, 16, 18], "wa": [9, 15], "written": [9, 15], "successfulli": [9, 15], "otherwis": [9, 15], "retriev": 10, "its": 10, "main": [11, 20, 22], "task": [11, 21], "_cli": 11, "run": [11, 12, 13, 17, 20, 21], "start": 11, "config": [11, 20], "cfg": [11, 20], "tool": 11, "help_text": [12, 16, 18], "implement": [13, 15, 16], "inbound": 13, "_servic": 13, "_parser": 13, "_command": 13, "map": 13, "pars": [13, 14, 17], "select": [13, 17], "systemexit": 13, "system": 13, "exit": 13, "list": [14, 16, 18], "arg": 14, "local": 15, "filesystem": [15, 19], "creat": [15, 20], "parent": 15, "directori": [15, 19, 20], "need": 15, "strategi": [16, 17, 18], "subcommand": [16, 18], "setup": 16, "kei": [16, 18], "help": [16, 18, 20], "configur": 16, "logic": [16, 18], "properti": [16, 18], "commandopt": [16, 18], "primari": 17, "commandlineinterfac": 17, "ioptioncommand": 18, "perform": 18, "action": 18, "load": 19, "templates_dir": 19, "_templates_dir": 19, "where": 19, "store": 19, "doe": 19, "exist": 19, "cannot": 19, "dist_py_modul": [20, 21], "toolset": 20, "develop": 20, "python": 20, "readm": 20, "introduc": 20, "instruct": 20, "how": 20, "machin": 20, "mai": 20, "inform": 20, "befor": 20, "packag": [20, 22], "subpackag": [20, 22], "submodul": [20, 22], "modul": [20, 22], "navig": 20, "releas": 20, "page": 20, "download": 20, "extract": 20, "archiv": 20, "To": 20, "follow": 20, "tar": 20, "xvzf": 20, "x": 20, "y": 20, "z": 20, "gz": 20, "cd": 20, "pyton3": 20, "pip3": 20, "r": 20, "requir": [20, 21], "txt": 20, "python3": 20, "install_lib": 20, "install_data": 20, "install_egg_info": 20, "docker": 20, "imag": 20, "contain": 20, "pip": 20, "dist": 20, "next": 20, "librari": 20, "ats": 20, "util": 20, "app": 20, "script": 20, "oop": 20, "logo": 20, "7": 20, "23": 20, "prepar": 20, "entri": [20, 21], "point": [20, 21], "wget": 20, "githubusercont": 20, "vroncev": 20, "master": 20, "new": 20, "mkdir": 20, "p": 20, "demo": 20, "mytool": 20, "1": 20, "0": 20, "descript": 20, "author": 20, "email": 20, "github": 20, "gpl": 20, "2017": 20, "io": 20, "same": 20, "itself": 20, "avail": 20, "let": 20, "support": 20, "psf": 20, "index": 20, "search": 20, "bootstrap": 21}, "objects": {"": [[0, 0, 0, "-", "dist_py_module"], [21, 0, 0, "-", "main"]], "dist_py_module": [[1, 0, 0, "-", "application"], [4, 0, 0, "-", "dist_py_module_bundle"], [5, 0, 0, "-", "domain"], [11, 0, 0, "-", "engine"], [12, 0, 0, "-", "infrastructure"]], "dist_py_module.application": [[2, 0, 0, "-", "service"], [3, 0, 0, "-", "service_bundle"]], "dist_py_module.application.service": [[2, 1, 1, "", "FileGen"]], "dist_py_module.application.service.FileGen": [[2, 2, 1, "", "_abc_impl"], [2, 3, 1, "", "execute"], [2, 3, 1, "", "is_initialized"]], "dist_py_module.application.service_bundle": [[3, 1, 1, "", "ServiceBundle"]], "dist_py_module.application.service_bundle.ServiceBundle": [[3, 2, 1, "", "file_writer"], [3, 3, 1, "", "merge"], [3, 2, 1, "", "template_provider"], [3, 3, 1, "", "to_dict"], [3, 3, 1, "", "validate"]], "dist_py_module.dist_py_module_bundle": [[4, 1, 1, "", "DistPyModuleBundle"]], "dist_py_module.dist_py_module_bundle.DistPyModuleBundle": [[4, 2, 1, "", "cli"], [4, 2, 1, "", "file_writer"], [4, 3, 1, "", "merge"], [4, 2, 1, "", "parser"], [4, 2, 1, "", "service"], [4, 2, 1, "", "template_provider"], [4, 3, 1, "", "to_dict"], [4, 3, 1, "", "validate"]], "dist_py_module.domain": [[6, 0, 0, "-", "models"], [7, 0, 0, "-", "ports"]], "dist_py_module.domain.models": [[6, 1, 1, "", "GeneratedFile"]], "dist_py_module.domain.models.GeneratedFile": [[6, 2, 1, "", "content"], [6, 3, 1, "", "from_template"], [6, 2, 1, "", "name"]], "dist_py_module.domain.ports": [[8, 0, 0, "-", "ifile_gen"], [9, 0, 0, "-", "ifile_writer"], [10, 0, 0, "-", "itemplate_provider"]], "dist_py_module.domain.ports.ifile_gen": [[8, 1, 1, "", "IFileGen"]], "dist_py_module.domain.ports.ifile_gen.IFileGen": [[8, 2, 1, "", "_abc_impl"], [8, 3, 1, "", "execute"], [8, 3, 1, "", "is_initialized"]], "dist_py_module.domain.ports.ifile_writer": [[9, 1, 1, "", "IFileWriter"]], "dist_py_module.domain.ports.ifile_writer.IFileWriter": [[9, 2, 1, "", "_abc_impl"], [9, 3, 1, "", "is_initialized"], [9, 3, 1, "", "write_file"]], "dist_py_module.domain.ports.itemplate_provider": [[10, 1, 1, "", "ITemplateProvider"]], "dist_py_module.domain.ports.itemplate_provider.ITemplateProvider": [[10, 2, 1, "", "_abc_impl"], [10, 3, 1, "", "get_template_by_name"], [10, 3, 1, "", "is_initialized"]], "dist_py_module.engine": [[11, 1, 1, "", "DistPyModule"]], "dist_py_module.engine.DistPyModule": [[11, 2, 1, "", "_abc_impl"], [11, 2, 1, "", "_info_file"], [11, 3, 1, "", "process"]], "dist_py_module.infrastructure": [[13, 0, 0, "-", "cli"], [14, 0, 0, "-", "cli_bundle"], [15, 0, 0, "-", "file_writer"], [16, 0, 0, "-", "gen_setup_command"], [17, 0, 0, "-", "icli"], [18, 0, 0, "-", "icli_command"], [19, 0, 0, "-", "template_provider"]], "dist_py_module.infrastructure.cli": [[13, 1, 1, "", "CLI"]], "dist_py_module.infrastructure.cli.CLI": [[13, 2, 1, "", "_abc_impl"], [13, 3, 1, "", "is_initialized"], [13, 3, 1, "", "run"]], "dist_py_module.infrastructure.cli_bundle": [[14, 1, 1, "", "CLIBundle"]], "dist_py_module.infrastructure.cli_bundle.CLIBundle": [[14, 2, 1, "", "commands"], [14, 3, 1, "", "merge"], [14, 2, 1, "", "parser"], [14, 2, 1, "", "service"], [14, 3, 1, "", "to_dict"], [14, 3, 1, "", "validate"]], "dist_py_module.infrastructure.file_writer": [[15, 1, 1, "", "FileWriter"]], "dist_py_module.infrastructure.file_writer.FileWriter": [[15, 2, 1, "", "_abc_impl"], [15, 3, 1, "", "is_initialized"], [15, 3, 1, "", "write_file"]], "dist_py_module.infrastructure.gen_setup_command": [[16, 1, 1, "", "GenSetupCommand"]], "dist_py_module.infrastructure.gen_setup_command.GenSetupCommand": [[16, 2, 1, "", "_abc_impl"], [16, 3, 1, "", "execute"], [16, 4, 1, "", "help_text"], [16, 4, 1, "", "name"], [16, 4, 1, "", "options"]], "dist_py_module.infrastructure.icli": [[17, 1, 1, "", "ICLI"]], "dist_py_module.infrastructure.icli.ICLI": [[17, 2, 1, "", "_abc_impl"], [17, 3, 1, "", "is_initialized"], [17, 3, 1, "", "run"]], "dist_py_module.infrastructure.icli_command": [[18, 1, 1, "", "ICLICommand"]], "dist_py_module.infrastructure.icli_command.ICLICommand": [[18, 2, 1, "", "_abc_impl"], [18, 3, 1, "", "execute"], [18, 4, 1, "", "help_text"], [18, 4, 1, "", "name"], [18, 4, 1, "", "options"]], "dist_py_module.infrastructure.template_provider": [[19, 1, 1, "", "TemplateProvider"]], "dist_py_module.infrastructure.template_provider.TemplateProvider": [[19, 2, 1, "", "_abc_impl"], [19, 3, 1, "", "get_template_by_name"], [19, 3, 1, "", "is_initialized"]], "main": [[21, 5, 1, "", "main"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:property", "5": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "titleterms": {"dist_py_modul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22], "packag": [0, 1, 5, 7, 12], "subpackag": [0, 5], "submodul": [0, 1, 5, 7, 12], "modul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "content": [0, 1, 5, 7, 12, 20], "applic": [1, 2, 3], "servic": 2, "service_bundl": 3, "dist_py_module_bundl": 4, "domain": [5, 6, 7, 8, 9, 10], "model": 6, "port": [7, 8, 9, 10], "ifile_gen": 8, "ifile_writ": 9, "itemplate_provid": 10, "engin": 11, "infrastructur": [12, 13, 14, 15, 16, 17, 18, 19], "cli": 13, "cli_bundl": 14, "file_writ": 15, "gen_setup_command": 16, "icli": 17, "icli_command": 18, "template_provid": 19, "gener": 20, "setup": 20, "py": 20, "instal": 20, "depend": 20, "tool": 20, "structur": 20, "usag": 20, "copyright": 20, "licenc": 20, "indic": 20, "tabl": 20, "main": 21}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"dist_py_module package": [[0, "dist-py-module-package"]], "Subpackages": [[0, "subpackages"], [5, "subpackages"]], "Submodules": [[0, "submodules"], [1, "submodules"], [5, "submodules"], [7, "submodules"], [12, "submodules"]], "Module contents": [[0, "module-dist_py_module"], [1, "module-dist_py_module.application"], [5, "module-dist_py_module.domain"], [7, "module-dist_py_module.domain.ports"], [12, "module-dist_py_module.infrastructure"]], "dist_py_module.application package": [[1, "dist-py-module-application-package"]], "dist_py_module.application.service module": [[2, "module-dist_py_module.application.service"]], "dist_py_module.application.service_bundle module": [[3, "module-dist_py_module.application.service_bundle"]], "dist_py_module.dist_py_module_bundle module": [[4, "module-dist_py_module.dist_py_module_bundle"]], "dist_py_module.domain package": [[5, "dist-py-module-domain-package"]], "dist_py_module.domain.models module": [[6, "module-dist_py_module.domain.models"]], "dist_py_module.domain.ports package": [[7, "dist-py-module-domain-ports-package"]], "dist_py_module.domain.ports.ifile_gen module": [[8, "module-dist_py_module.domain.ports.ifile_gen"]], "dist_py_module.domain.ports.ifile_writer module": [[9, "module-dist_py_module.domain.ports.ifile_writer"]], "dist_py_module.domain.ports.itemplate_provider module": [[10, "module-dist_py_module.domain.ports.itemplate_provider"]], "dist_py_module.engine module": [[11, "module-dist_py_module.engine"]], "dist_py_module.infrastructure package": [[12, "dist-py-module-infrastructure-package"]], "dist_py_module.infrastructure.cli module": [[13, "module-dist_py_module.infrastructure.cli"]], "dist_py_module.infrastructure.cli_bundle module": [[14, "module-dist_py_module.infrastructure.cli_bundle"]], "dist_py_module.infrastructure.file_writer module": [[15, "module-dist_py_module.infrastructure.file_writer"]], "dist_py_module.infrastructure.gen_setup_command module": [[16, "module-dist_py_module.infrastructure.gen_setup_command"]], "dist_py_module.infrastructure.icli module": [[17, "module-dist_py_module.infrastructure.icli"]], "dist_py_module.infrastructure.icli_command module": [[18, "module-dist_py_module.infrastructure.icli_command"]], "dist_py_module.infrastructure.template_provider module": [[19, "module-dist_py_module.infrastructure.template_provider"]], "Generate setup.py": [[20, "generate-setup-py"]], "Contents": [[20, null]], "Installation": [[20, "installation"]], "Dependencies": [[20, "dependencies"]], "Tool structure": [[20, "tool-structure"]], "Usage": [[20, "usage"]], "Copyright and licence": [[20, "copyright-and-licence"]], "Indices and tables": [[20, "indices-and-tables"]], "main module": [[21, "module-main"]], "dist_py_module": [[22, "dist-py-module"]]}, "indexentries": {"dist_py_module": [[0, "module-dist_py_module"]], "module": [[0, "module-dist_py_module"], [1, "module-dist_py_module.application"], [2, "module-dist_py_module.application.service"], [3, "module-dist_py_module.application.service_bundle"], [4, "module-dist_py_module.dist_py_module_bundle"], [5, "module-dist_py_module.domain"], [6, "module-dist_py_module.domain.models"], [7, "module-dist_py_module.domain.ports"], [8, "module-dist_py_module.domain.ports.ifile_gen"], [9, "module-dist_py_module.domain.ports.ifile_writer"], [10, "module-dist_py_module.domain.ports.itemplate_provider"], [11, "module-dist_py_module.engine"], [12, "module-dist_py_module.infrastructure"], [13, "module-dist_py_module.infrastructure.cli"], [14, "module-dist_py_module.infrastructure.cli_bundle"], [15, "module-dist_py_module.infrastructure.file_writer"], [16, "module-dist_py_module.infrastructure.gen_setup_command"], [17, "module-dist_py_module.infrastructure.icli"], [18, "module-dist_py_module.infrastructure.icli_command"], [19, "module-dist_py_module.infrastructure.template_provider"], [21, "module-main"]], "dist_py_module.application": [[1, "module-dist_py_module.application"]], "filegen (class in dist_py_module.application.service)": [[2, "dist_py_module.application.service.FileGen"]], "_abc_impl (dist_py_module.application.service.filegen attribute)": [[2, "dist_py_module.application.service.FileGen._abc_impl"]], "dist_py_module.application.service": [[2, "module-dist_py_module.application.service"]], "execute() (dist_py_module.application.service.filegen method)": [[2, "dist_py_module.application.service.FileGen.execute"]], "is_initialized() (dist_py_module.application.service.filegen method)": [[2, "dist_py_module.application.service.FileGen.is_initialized"]], "servicebundle (class in dist_py_module.application.service_bundle)": [[3, "dist_py_module.application.service_bundle.ServiceBundle"]], "dist_py_module.application.service_bundle": [[3, "module-dist_py_module.application.service_bundle"]], "file_writer (dist_py_module.application.service_bundle.servicebundle attribute)": [[3, "dist_py_module.application.service_bundle.ServiceBundle.file_writer"]], "merge() (dist_py_module.application.service_bundle.servicebundle method)": [[3, "dist_py_module.application.service_bundle.ServiceBundle.merge"]], "template_provider (dist_py_module.application.service_bundle.servicebundle attribute)": [[3, "dist_py_module.application.service_bundle.ServiceBundle.template_provider"]], "to_dict() (dist_py_module.application.service_bundle.servicebundle method)": [[3, "dist_py_module.application.service_bundle.ServiceBundle.to_dict"]], "validate() (dist_py_module.application.service_bundle.servicebundle method)": [[3, "dist_py_module.application.service_bundle.ServiceBundle.validate"]], "distpymodulebundle (class in dist_py_module.dist_py_module_bundle)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle"]], "cli (dist_py_module.dist_py_module_bundle.distpymodulebundle attribute)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.cli"]], "dist_py_module.dist_py_module_bundle": [[4, "module-dist_py_module.dist_py_module_bundle"]], "file_writer (dist_py_module.dist_py_module_bundle.distpymodulebundle attribute)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.file_writer"]], "merge() (dist_py_module.dist_py_module_bundle.distpymodulebundle method)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.merge"]], "parser (dist_py_module.dist_py_module_bundle.distpymodulebundle attribute)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.parser"]], "service (dist_py_module.dist_py_module_bundle.distpymodulebundle attribute)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.service"]], "template_provider (dist_py_module.dist_py_module_bundle.distpymodulebundle attribute)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.template_provider"]], "to_dict() (dist_py_module.dist_py_module_bundle.distpymodulebundle method)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.to_dict"]], "validate() (dist_py_module.dist_py_module_bundle.distpymodulebundle method)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.validate"]], "dist_py_module.domain": [[5, "module-dist_py_module.domain"]], "generatedfile (class in dist_py_module.domain.models)": [[6, "dist_py_module.domain.models.GeneratedFile"]], "content (dist_py_module.domain.models.generatedfile attribute)": [[6, "dist_py_module.domain.models.GeneratedFile.content"]], "dist_py_module.domain.models": [[6, "module-dist_py_module.domain.models"]], "from_template() (dist_py_module.domain.models.generatedfile class method)": [[6, "dist_py_module.domain.models.GeneratedFile.from_template"]], "name (dist_py_module.domain.models.generatedfile attribute)": [[6, "dist_py_module.domain.models.GeneratedFile.name"]], "dist_py_module.domain.ports": [[7, "module-dist_py_module.domain.ports"]], "ifilegen (class in dist_py_module.domain.ports.ifile_gen)": [[8, "dist_py_module.domain.ports.ifile_gen.IFileGen"]], "_abc_impl (dist_py_module.domain.ports.ifile_gen.ifilegen attribute)": [[8, "dist_py_module.domain.ports.ifile_gen.IFileGen._abc_impl"]], "dist_py_module.domain.ports.ifile_gen": [[8, "module-dist_py_module.domain.ports.ifile_gen"]], "execute() (dist_py_module.domain.ports.ifile_gen.ifilegen method)": [[8, "dist_py_module.domain.ports.ifile_gen.IFileGen.execute"]], "is_initialized() (dist_py_module.domain.ports.ifile_gen.ifilegen method)": [[8, "dist_py_module.domain.ports.ifile_gen.IFileGen.is_initialized"]], "ifilewriter (class in dist_py_module.domain.ports.ifile_writer)": [[9, "dist_py_module.domain.ports.ifile_writer.IFileWriter"]], "_abc_impl (dist_py_module.domain.ports.ifile_writer.ifilewriter attribute)": [[9, "dist_py_module.domain.ports.ifile_writer.IFileWriter._abc_impl"]], "dist_py_module.domain.ports.ifile_writer": [[9, "module-dist_py_module.domain.ports.ifile_writer"]], "is_initialized() (dist_py_module.domain.ports.ifile_writer.ifilewriter method)": [[9, "dist_py_module.domain.ports.ifile_writer.IFileWriter.is_initialized"]], "write_file() (dist_py_module.domain.ports.ifile_writer.ifilewriter method)": [[9, "dist_py_module.domain.ports.ifile_writer.IFileWriter.write_file"]], "itemplateprovider (class in dist_py_module.domain.ports.itemplate_provider)": [[10, "dist_py_module.domain.ports.itemplate_provider.ITemplateProvider"]], "_abc_impl (dist_py_module.domain.ports.itemplate_provider.itemplateprovider attribute)": [[10, "dist_py_module.domain.ports.itemplate_provider.ITemplateProvider._abc_impl"]], "dist_py_module.domain.ports.itemplate_provider": [[10, "module-dist_py_module.domain.ports.itemplate_provider"]], "get_template_by_name() (dist_py_module.domain.ports.itemplate_provider.itemplateprovider method)": [[10, "dist_py_module.domain.ports.itemplate_provider.ITemplateProvider.get_template_by_name"]], "is_initialized() (dist_py_module.domain.ports.itemplate_provider.itemplateprovider method)": [[10, "dist_py_module.domain.ports.itemplate_provider.ITemplateProvider.is_initialized"]], "distpymodule (class in dist_py_module.engine)": [[11, "dist_py_module.engine.DistPyModule"]], "_abc_impl (dist_py_module.engine.distpymodule attribute)": [[11, "dist_py_module.engine.DistPyModule._abc_impl"]], "_info_file (dist_py_module.engine.distpymodule attribute)": [[11, "dist_py_module.engine.DistPyModule._info_file"]], "dist_py_module.engine": [[11, "module-dist_py_module.engine"]], "process() (dist_py_module.engine.distpymodule method)": [[11, "dist_py_module.engine.DistPyModule.process"]], "dist_py_module.infrastructure": [[12, "module-dist_py_module.infrastructure"]], "cli (class in dist_py_module.infrastructure.cli)": [[13, "dist_py_module.infrastructure.cli.CLI"]], "_abc_impl (dist_py_module.infrastructure.cli.cli attribute)": [[13, "dist_py_module.infrastructure.cli.CLI._abc_impl"]], "dist_py_module.infrastructure.cli": [[13, "module-dist_py_module.infrastructure.cli"]], "is_initialized() (dist_py_module.infrastructure.cli.cli method)": [[13, "dist_py_module.infrastructure.cli.CLI.is_initialized"]], "run() (dist_py_module.infrastructure.cli.cli method)": [[13, "dist_py_module.infrastructure.cli.CLI.run"]], "clibundle (class in dist_py_module.infrastructure.cli_bundle)": [[14, "dist_py_module.infrastructure.cli_bundle.CLIBundle"]], "commands (dist_py_module.infrastructure.cli_bundle.clibundle attribute)": [[14, "dist_py_module.infrastructure.cli_bundle.CLIBundle.commands"]], "dist_py_module.infrastructure.cli_bundle": [[14, "module-dist_py_module.infrastructure.cli_bundle"]], "merge() (dist_py_module.infrastructure.cli_bundle.clibundle method)": [[14, "dist_py_module.infrastructure.cli_bundle.CLIBundle.merge"]], "parser (dist_py_module.infrastructure.cli_bundle.clibundle attribute)": [[14, "dist_py_module.infrastructure.cli_bundle.CLIBundle.parser"]], "service (dist_py_module.infrastructure.cli_bundle.clibundle attribute)": [[14, "dist_py_module.infrastructure.cli_bundle.CLIBundle.service"]], "to_dict() (dist_py_module.infrastructure.cli_bundle.clibundle method)": [[14, "dist_py_module.infrastructure.cli_bundle.CLIBundle.to_dict"]], "validate() (dist_py_module.infrastructure.cli_bundle.clibundle method)": [[14, "dist_py_module.infrastructure.cli_bundle.CLIBundle.validate"]], "filewriter (class in dist_py_module.infrastructure.file_writer)": [[15, "dist_py_module.infrastructure.file_writer.FileWriter"]], "_abc_impl (dist_py_module.infrastructure.file_writer.filewriter attribute)": [[15, "dist_py_module.infrastructure.file_writer.FileWriter._abc_impl"]], "dist_py_module.infrastructure.file_writer": [[15, "module-dist_py_module.infrastructure.file_writer"]], "is_initialized() (dist_py_module.infrastructure.file_writer.filewriter method)": [[15, "dist_py_module.infrastructure.file_writer.FileWriter.is_initialized"]], "write_file() (dist_py_module.infrastructure.file_writer.filewriter method)": [[15, "dist_py_module.infrastructure.file_writer.FileWriter.write_file"]], "gensetupcommand (class in dist_py_module.infrastructure.gen_setup_command)": [[16, "dist_py_module.infrastructure.gen_setup_command.GenSetupCommand"]], "_abc_impl (dist_py_module.infrastructure.gen_setup_command.gensetupcommand attribute)": [[16, "dist_py_module.infrastructure.gen_setup_command.GenSetupCommand._abc_impl"]], "dist_py_module.infrastructure.gen_setup_command": [[16, "module-dist_py_module.infrastructure.gen_setup_command"]], "execute() (dist_py_module.infrastructure.gen_setup_command.gensetupcommand method)": [[16, "dist_py_module.infrastructure.gen_setup_command.GenSetupCommand.execute"]], "help_text (dist_py_module.infrastructure.gen_setup_command.gensetupcommand property)": [[16, "dist_py_module.infrastructure.gen_setup_command.GenSetupCommand.help_text"]], "name (dist_py_module.infrastructure.gen_setup_command.gensetupcommand property)": [[16, "dist_py_module.infrastructure.gen_setup_command.GenSetupCommand.name"]], "options (dist_py_module.infrastructure.gen_setup_command.gensetupcommand property)": [[16, "dist_py_module.infrastructure.gen_setup_command.GenSetupCommand.options"]], "icli (class in dist_py_module.infrastructure.icli)": [[17, "dist_py_module.infrastructure.icli.ICLI"]], "_abc_impl (dist_py_module.infrastructure.icli.icli attribute)": [[17, "dist_py_module.infrastructure.icli.ICLI._abc_impl"]], "dist_py_module.infrastructure.icli": [[17, "module-dist_py_module.infrastructure.icli"]], "is_initialized() (dist_py_module.infrastructure.icli.icli method)": [[17, "dist_py_module.infrastructure.icli.ICLI.is_initialized"]], "run() (dist_py_module.infrastructure.icli.icli method)": [[17, "dist_py_module.infrastructure.icli.ICLI.run"]], "iclicommand (class in dist_py_module.infrastructure.icli_command)": [[18, "dist_py_module.infrastructure.icli_command.ICLICommand"]], "_abc_impl (dist_py_module.infrastructure.icli_command.iclicommand attribute)": [[18, "dist_py_module.infrastructure.icli_command.ICLICommand._abc_impl"]], "dist_py_module.infrastructure.icli_command": [[18, "module-dist_py_module.infrastructure.icli_command"]], "execute() (dist_py_module.infrastructure.icli_command.iclicommand method)": [[18, "dist_py_module.infrastructure.icli_command.ICLICommand.execute"]], "help_text (dist_py_module.infrastructure.icli_command.iclicommand property)": [[18, "dist_py_module.infrastructure.icli_command.ICLICommand.help_text"]], "name (dist_py_module.infrastructure.icli_command.iclicommand property)": [[18, "dist_py_module.infrastructure.icli_command.ICLICommand.name"]], "options (dist_py_module.infrastructure.icli_command.iclicommand property)": [[18, "dist_py_module.infrastructure.icli_command.ICLICommand.options"]], "templateprovider (class in dist_py_module.infrastructure.template_provider)": [[19, "dist_py_module.infrastructure.template_provider.TemplateProvider"]], "_abc_impl (dist_py_module.infrastructure.template_provider.templateprovider attribute)": [[19, "dist_py_module.infrastructure.template_provider.TemplateProvider._abc_impl"]], "dist_py_module.infrastructure.template_provider": [[19, "module-dist_py_module.infrastructure.template_provider"]], "get_template_by_name() (dist_py_module.infrastructure.template_provider.templateprovider method)": [[19, "dist_py_module.infrastructure.template_provider.TemplateProvider.get_template_by_name"]], "is_initialized() (dist_py_module.infrastructure.template_provider.templateprovider method)": [[19, "dist_py_module.infrastructure.template_provider.TemplateProvider.is_initialized"]], "main": [[21, "module-main"]], "main() (in module main)": [[21, "main.main"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["dist_py_module", "dist_py_module.application", "dist_py_module.application.service", "dist_py_module.application.service_bundle", "dist_py_module.dist_py_module_bundle", "dist_py_module.domain", "dist_py_module.domain.models", "dist_py_module.domain.ports", "dist_py_module.domain.ports.ifile_gen", "dist_py_module.domain.ports.ifile_writer", "dist_py_module.domain.ports.itemplate_provider", "dist_py_module.engine", "dist_py_module.infrastructure", "dist_py_module.infrastructure.cli", "dist_py_module.infrastructure.cli_bundle", "dist_py_module.infrastructure.file_writer", "dist_py_module.infrastructure.gen_setup_command", "dist_py_module.infrastructure.icli", "dist_py_module.infrastructure.icli_command", "dist_py_module.infrastructure.template_provider", "index", "main", "modules"], "filenames": ["dist_py_module.rst", "dist_py_module.application.rst", "dist_py_module.application.service.rst", "dist_py_module.application.service_bundle.rst", "dist_py_module.dist_py_module_bundle.rst", "dist_py_module.domain.rst", "dist_py_module.domain.models.rst", "dist_py_module.domain.ports.rst", "dist_py_module.domain.ports.ifile_gen.rst", "dist_py_module.domain.ports.ifile_writer.rst", "dist_py_module.domain.ports.itemplate_provider.rst", "dist_py_module.engine.rst", "dist_py_module.infrastructure.rst", "dist_py_module.infrastructure.cli.rst", "dist_py_module.infrastructure.cli_bundle.rst", "dist_py_module.infrastructure.file_writer.rst", "dist_py_module.infrastructure.gen_setup_command.rst", "dist_py_module.infrastructure.icli.rst", "dist_py_module.infrastructure.icli_command.rst", "dist_py_module.infrastructure.template_provider.rst", "index.rst", "main.rst", "modules.rst"], "titles": ["dist_py_module package", "dist_py_module.application package", "dist_py_module.application.service module", "dist_py_module.application.service_bundle module", "dist_py_module.dist_py_module_bundle module", "dist_py_module.domain package", "dist_py_module.domain.models module", "dist_py_module.domain.ports package", "dist_py_module.domain.ports.ifile_gen module", "dist_py_module.domain.ports.ifile_writer module", "dist_py_module.domain.ports.itemplate_provider module", "dist_py_module.engine module", "dist_py_module.infrastructure package", "dist_py_module.infrastructure.cli module", "dist_py_module.infrastructure.cli_bundle module", "dist_py_module.infrastructure.file_writer module", "dist_py_module.infrastructure.gen_setup_command module", "dist_py_module.infrastructure.icli module", "dist_py_module.infrastructure.icli_command module", "dist_py_module.infrastructure.template_provider module", "Generate setup.py", "main module", "dist_py_module"], "terms": {"applic": [0, 4, 20, 21, 22], "servic": [0, 1, 3, 4, 11, 12, 13, 14, 16, 18, 20], "filegen": [0, 1, 2], "service_bundl": [0, 1, 20], "servicebundl": [0, 1, 2, 3], "domain": [0, 20, 22], "port": [0, 5, 13, 20], "model": [0, 5, 20], "generatedfil": [0, 5, 6], "infrastructur": [0, 11, 20, 22], "cli": [0, 4, 11, 12, 14, 16, 17, 18, 20, 21], "cli_bundl": [0, 12, 20], "clibundl": [0, 12, 13, 14], "file_writ": [0, 1, 3, 4, 12, 20], "filewrit": [0, 12, 15], "gen_setup_command": [0, 12, 20], "gensetupcommand": [0, 12, 16], "icli": [0, 4, 12, 13, 20], "icli_command": [0, 12, 20], "iclicommand": [0, 12, 14, 16, 18], "template_provid": [0, 1, 3, 4, 12, 20], "templateprovid": [0, 12, 19], "dist_py_module_bundl": [0, 20, 22], "distpymodulebundl": [0, 4, 11, 22], "merg": [0, 1, 3, 4, 12, 14], "parser": [0, 4, 12, 13, 14, 16, 18], "to_dict": [0, 1, 3, 4, 12, 14], "valid": [0, 1, 3, 4, 12, 14], "engin": [0, 20, 22], "distpymodul": [0, 11, 21, 22], "_abc_impl": [0, 1, 2, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19], "_info_fil": [0, 11], "process": [0, 2, 11], "__init__": [0, 1, 5, 7, 11, 12, 13, 19, 20], "py": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "copyright": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "c": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "2026": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "vladimir": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "roncev": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "elektron": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "ronca": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "gmail": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "com": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "free": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "softwar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "redistribut": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "modifi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "under": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "term": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "gnu": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "public": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "licens": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "publish": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "foundat": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "either": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "version": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "your": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "option": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "ani": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "later": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "distribut": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "hope": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "without": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "warranti": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "even": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "impli": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "merchant": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "fit": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "FOR": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "A": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "particular": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "purpos": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "see": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "more": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "detail": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "should": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "have": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "receiv": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "copi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "along": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "program": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "If": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "http": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "www": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "org": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "info": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "initi": [0, 1, 2, 5, 7, 8, 9, 10, 11, 12, 13, 15, 17, 19], "execut": [1, 2, 7, 8, 11, 12, 13, 16, 18], "is_initi": [1, 2, 7, 8, 9, 10, 12, 13, 15, 17, 19], "defin": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19], "file": [2, 3, 4, 6, 8, 9, 11, 13, 14, 15, 16, 18, 19, 20], "class": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19], "component_bundl": [2, 11, 13], "sourc": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21], "base": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20], "ifilegen": [2, 4, 5, 7, 8, 14, 16, 18], "orchestr": [2, 4, 11, 13, 14, 16, 18], "It": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19], "attribut": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19], "_template_provid": 2, "adapt": [2, 3, 4, 11, 13, 14, 15, 17, 19, 21], "provid": [2, 3, 4, 10, 14, 19, 20], "raw": [2, 3, 6, 10, 20], "templat": [2, 3, 4, 6, 8, 10, 19, 20], "_file_writ": 2, "write": [2, 3, 4, 9, 15], "method": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19], "user": [2, 4, 11], "check": [2, 8, 9, 10, 13, 15, 17, 19], "compon": [2, 3, 4, 8, 9, 10, 13, 14, 15, 17, 19], "__str__": [2, 9, 10, 13, 15, 16, 17, 18, 19], "return": [2, 3, 4, 6, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19], "string": [2, 6, 9, 10, 13, 15, 16, 17, 18, 19], "represent": [2, 3, 4, 9, 10, 13, 14, 15, 16, 17, 18, 19], "_abc": [2, 8, 9, 10, 11, 13, 15, 16, 17, 18, 19], "_abc_data": [2, 8, 9, 10, 11, 13, 15, 16, 17, 18, 19], "object": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19], "template_nam": [2, 8], "str": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19], "target_filenam": [2, 8], "cli_param": [2, 8], "dict": [2, 3, 4, 6, 8, 13, 14, 16, 17, 18], "from": [2, 3, 4, 6, 14, 16, 18, 19], "target": [2, 6, 9], "path": [2, 6, 8, 9, 11, 15, 19], "paramet": [2, 3, 4, 6, 8, 9, 10, 14, 15, 16, 18, 19], "The": [2, 6, 8, 9, 10, 15, 16, 18, 19, 20], "name": [2, 5, 6, 8, 10, 12, 13, 16, 18, 19, 20], "output": [2, 8], "filenam": [2, 6, 8, 9, 15], "format": [2, 6, 8], "code": [2, 8, 11, 13, 16, 17, 18, 20, 21], "stdout": [2, 8, 13, 16, 17, 18], "stderr": [2, 8, 13, 16, 17, 18], "messag": [2, 8, 13, 16, 17, 18], "type": [2, 3, 4, 6, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20], "except": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21], "filenotfounderror": [2, 19], "found": 2, "oserror": [2, 13, 15, 19], "an": [2, 15], "o": [2, 13, 15, 20], "error": [2, 13, 15], "occur": [2, 15], "while": 2, "bool": [2, 8, 9, 10, 13, 15, 17, 19], "true": [2, 8, 9, 10, 13, 15, 17, 19, 20], "success": [2, 8, 9, 10, 13, 15, 17, 19], "fals": [2, 8, 9, 10, 13, 15, 17, 19], "fail": [2, 8, 9, 10, 13, 15, 17, 19], "none": [2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21], "bundl": [3, 4, 14], "itemplateprovid": [3, 4, 5, 7, 10, 19], "ifilewrit": [3, 4, 5, 7, 9, 15], "data": [3, 14], "default": [3, 4, 14], "essenti": [3, 14], "ar": [3, 14, 19], "set": [3, 14], "non": [3, 4, 14], "valu": [3, 4, 14], "anoth": [3, 4, 14], "convert": [3, 4, 14], "dictionari": [3, 4, 14], "other": [3, 4, 14, 20], "one": [3, 4, 14], "valueerror": 3, "must": [3, 4, 14], "writer": [3, 4, 9, 15], "ioptionmanag": [4, 14], "hold": 4, "all": 4, "read": [4, 19], "argument": [4, 13, 14, 17], "command": [4, 11, 12, 13, 14, 16, 17, 18], "line": [4, 11, 17], "interfac": [4, 8, 9, 10, 11, 17, 18], "atsvalueerror": [4, 14], "ifile_gen": [5, 7, 20], "ifile_writ": [5, 7, 20], "itemplate_provid": [5, 7, 20], "from_templ": [5, 6], "repres": [6, 18], "content": [6, 9, 10, 15, 19, 22], "render": 6, "factori": 6, "build": 6, "classmethod": 6, "raw_templ": 6, "param": [6, 16, 18], "destin": [6, 9, 15], "fill": 6, "instanc": [6, 13, 14, 16, 18], "write_fil": [7, 9, 12, 15], "get_template_by_nam": [7, 10, 12, 19], "abstract": [8, 9, 10, 17, 18], "abc": [8, 9, 10, 17], "specifi": 9, "text": [9, 15, 16, 18], "wa": [9, 15], "written": [9, 15], "successfulli": [9, 15], "otherwis": [9, 15], "retriev": 10, "its": 10, "main": [11, 20, 22], "task": [11, 21], "_cli": 11, "start": 11, "via": 11, "config": [11, 20], "cfg": [11, 20], "run": [12, 13, 17, 20, 21], "help_text": [12, 16, 18], "implement": [13, 15, 16], "inbound": 13, "_servic": 13, "_parser": 13, "_command": 13, "map": 13, "pars": [13, 14, 17], "select": [13, 17], "systemexit": 13, "system": 13, "exit": 13, "list": [14, 16, 18], "arg": 14, "local": 15, "filesystem": [15, 19], "creat": [15, 20], "parent": 15, "directori": [15, 19, 20], "need": 15, "strategi": [16, 17, 18], "subcommand": [16, 18], "setup": 16, "kei": [16, 18], "help": [16, 18, 20], "configur": 16, "logic": [16, 18], "properti": [16, 18], "commandopt": [16, 18], "primari": 17, "commandlineinterfac": 17, "ioptioncommand": 18, "perform": 18, "action": 18, "load": 19, "templates_dir": 19, "_templates_dir": 19, "where": 19, "store": 19, "doe": 19, "exist": 19, "cannot": 19, "dist_py_modul": [20, 21], "toolset": 20, "develop": 20, "python": 20, "readm": 20, "introduc": 20, "instruct": 20, "how": 20, "machin": 20, "mai": 20, "inform": 20, "befor": 20, "packag": [20, 22], "subpackag": [20, 22], "submodul": [20, 22], "modul": [20, 22], "navig": 20, "releas": 20, "page": 20, "download": 20, "extract": 20, "archiv": 20, "To": 20, "follow": 20, "tar": 20, "xvzf": 20, "x": 20, "y": 20, "z": 20, "gz": 20, "cd": 20, "pyton3": 20, "pip3": 20, "r": 20, "requir": [20, 21], "txt": 20, "python3": 20, "install_lib": 20, "install_data": 20, "install_egg_info": 20, "docker": 20, "imag": 20, "contain": 20, "pip": 20, "dist": 20, "next": 20, "librari": 20, "ats": 20, "util": 20, "app": 20, "script": 20, "oop": 20, "logo": 20, "7": 20, "23": 20, "prepar": 20, "entri": [20, 21], "point": [20, 21], "wget": 20, "githubusercont": 20, "vroncev": 20, "master": 20, "new": 20, "mkdir": 20, "p": 20, "demo": 20, "mytool": 20, "1": 20, "descript": 20, "author": 20, "email": 20, "github": 20, "gpl": 20, "2017": 20, "io": 20, "same": 20, "itself": 20, "avail": 20, "let": 20, "support": 20, "psf": 20, "index": 20, "search": 20, "bootstrap": 21}, "objects": {"": [[0, 0, 0, "-", "dist_py_module"], [21, 0, 0, "-", "main"]], "dist_py_module": [[1, 0, 0, "-", "application"], [4, 0, 0, "-", "dist_py_module_bundle"], [5, 0, 0, "-", "domain"], [11, 0, 0, "-", "engine"], [12, 0, 0, "-", "infrastructure"]], "dist_py_module.application": [[2, 0, 0, "-", "service"], [3, 0, 0, "-", "service_bundle"]], "dist_py_module.application.service": [[2, 1, 1, "", "FileGen"]], "dist_py_module.application.service.FileGen": [[2, 2, 1, "", "_abc_impl"], [2, 3, 1, "", "execute"], [2, 3, 1, "", "is_initialized"]], "dist_py_module.application.service_bundle": [[3, 1, 1, "", "ServiceBundle"]], "dist_py_module.application.service_bundle.ServiceBundle": [[3, 2, 1, "", "file_writer"], [3, 3, 1, "", "merge"], [3, 2, 1, "", "template_provider"], [3, 3, 1, "", "to_dict"], [3, 3, 1, "", "validate"]], "dist_py_module.dist_py_module_bundle": [[4, 1, 1, "", "DistPyModuleBundle"]], "dist_py_module.dist_py_module_bundle.DistPyModuleBundle": [[4, 2, 1, "", "cli"], [4, 2, 1, "", "file_writer"], [4, 3, 1, "", "merge"], [4, 2, 1, "", "parser"], [4, 2, 1, "", "service"], [4, 2, 1, "", "template_provider"], [4, 3, 1, "", "to_dict"], [4, 3, 1, "", "validate"]], "dist_py_module.domain": [[6, 0, 0, "-", "models"], [7, 0, 0, "-", "ports"]], "dist_py_module.domain.models": [[6, 1, 1, "", "GeneratedFile"]], "dist_py_module.domain.models.GeneratedFile": [[6, 2, 1, "", "content"], [6, 3, 1, "", "from_template"], [6, 2, 1, "", "name"]], "dist_py_module.domain.ports": [[8, 0, 0, "-", "ifile_gen"], [9, 0, 0, "-", "ifile_writer"], [10, 0, 0, "-", "itemplate_provider"]], "dist_py_module.domain.ports.ifile_gen": [[8, 1, 1, "", "IFileGen"]], "dist_py_module.domain.ports.ifile_gen.IFileGen": [[8, 2, 1, "", "_abc_impl"], [8, 3, 1, "", "execute"], [8, 3, 1, "", "is_initialized"]], "dist_py_module.domain.ports.ifile_writer": [[9, 1, 1, "", "IFileWriter"]], "dist_py_module.domain.ports.ifile_writer.IFileWriter": [[9, 2, 1, "", "_abc_impl"], [9, 3, 1, "", "is_initialized"], [9, 3, 1, "", "write_file"]], "dist_py_module.domain.ports.itemplate_provider": [[10, 1, 1, "", "ITemplateProvider"]], "dist_py_module.domain.ports.itemplate_provider.ITemplateProvider": [[10, 2, 1, "", "_abc_impl"], [10, 3, 1, "", "get_template_by_name"], [10, 3, 1, "", "is_initialized"]], "dist_py_module.engine": [[11, 1, 1, "", "DistPyModule"]], "dist_py_module.engine.DistPyModule": [[11, 2, 1, "", "_abc_impl"], [11, 2, 1, "", "_info_file"], [11, 3, 1, "", "process"]], "dist_py_module.infrastructure": [[13, 0, 0, "-", "cli"], [14, 0, 0, "-", "cli_bundle"], [15, 0, 0, "-", "file_writer"], [16, 0, 0, "-", "gen_setup_command"], [17, 0, 0, "-", "icli"], [18, 0, 0, "-", "icli_command"], [19, 0, 0, "-", "template_provider"]], "dist_py_module.infrastructure.cli": [[13, 1, 1, "", "CLI"]], "dist_py_module.infrastructure.cli.CLI": [[13, 2, 1, "", "_abc_impl"], [13, 3, 1, "", "is_initialized"], [13, 3, 1, "", "run"]], "dist_py_module.infrastructure.cli_bundle": [[14, 1, 1, "", "CLIBundle"]], "dist_py_module.infrastructure.cli_bundle.CLIBundle": [[14, 2, 1, "", "commands"], [14, 3, 1, "", "merge"], [14, 2, 1, "", "parser"], [14, 2, 1, "", "service"], [14, 3, 1, "", "to_dict"], [14, 3, 1, "", "validate"]], "dist_py_module.infrastructure.file_writer": [[15, 1, 1, "", "FileWriter"]], "dist_py_module.infrastructure.file_writer.FileWriter": [[15, 2, 1, "", "_abc_impl"], [15, 3, 1, "", "is_initialized"], [15, 3, 1, "", "write_file"]], "dist_py_module.infrastructure.gen_setup_command": [[16, 1, 1, "", "GenSetupCommand"]], "dist_py_module.infrastructure.gen_setup_command.GenSetupCommand": [[16, 2, 1, "", "_abc_impl"], [16, 3, 1, "", "execute"], [16, 4, 1, "", "help_text"], [16, 4, 1, "", "name"], [16, 4, 1, "", "options"]], "dist_py_module.infrastructure.icli": [[17, 1, 1, "", "ICLI"]], "dist_py_module.infrastructure.icli.ICLI": [[17, 2, 1, "", "_abc_impl"], [17, 3, 1, "", "is_initialized"], [17, 3, 1, "", "run"]], "dist_py_module.infrastructure.icli_command": [[18, 1, 1, "", "ICLICommand"]], "dist_py_module.infrastructure.icli_command.ICLICommand": [[18, 2, 1, "", "_abc_impl"], [18, 3, 1, "", "execute"], [18, 4, 1, "", "help_text"], [18, 4, 1, "", "name"], [18, 4, 1, "", "options"]], "dist_py_module.infrastructure.template_provider": [[19, 1, 1, "", "TemplateProvider"]], "dist_py_module.infrastructure.template_provider.TemplateProvider": [[19, 2, 1, "", "_abc_impl"], [19, 3, 1, "", "get_template_by_name"], [19, 3, 1, "", "is_initialized"]], "main": [[21, 5, 1, "", "main"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:property", "5": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "titleterms": {"dist_py_modul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22], "packag": [0, 1, 5, 7, 12], "subpackag": [0, 5], "submodul": [0, 1, 5, 7, 12], "modul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "content": [0, 1, 5, 7, 12, 20], "applic": [1, 2, 3], "servic": 2, "service_bundl": 3, "dist_py_module_bundl": 4, "domain": [5, 6, 7, 8, 9, 10], "model": 6, "port": [7, 8, 9, 10], "ifile_gen": 8, "ifile_writ": 9, "itemplate_provid": 10, "engin": 11, "infrastructur": [12, 13, 14, 15, 16, 17, 18, 19], "cli": 13, "cli_bundl": 14, "file_writ": 15, "gen_setup_command": 16, "icli": 17, "icli_command": 18, "template_provid": 19, "gener": 20, "setup": 20, "py": 20, "instal": 20, "depend": 20, "tool": 20, "structur": 20, "usag": 20, "copyright": 20, "licenc": 20, "indic": 20, "tabl": 20, "main": 21}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"dist_py_module package": [[0, "dist-py-module-package"]], "Subpackages": [[0, "subpackages"], [5, "subpackages"]], "Submodules": [[0, "submodules"], [1, "submodules"], [5, "submodules"], [7, "submodules"], [12, "submodules"]], "Module contents": [[0, "module-dist_py_module"], [1, "module-dist_py_module.application"], [5, "module-dist_py_module.domain"], [7, "module-dist_py_module.domain.ports"], [12, "module-dist_py_module.infrastructure"]], "dist_py_module.application package": [[1, "dist-py-module-application-package"]], "dist_py_module.application.service module": [[2, "module-dist_py_module.application.service"]], "dist_py_module.application.service_bundle module": [[3, "module-dist_py_module.application.service_bundle"]], "dist_py_module.dist_py_module_bundle module": [[4, "module-dist_py_module.dist_py_module_bundle"]], "dist_py_module.domain package": [[5, "dist-py-module-domain-package"]], "dist_py_module.domain.models module": [[6, "module-dist_py_module.domain.models"]], "dist_py_module.domain.ports package": [[7, "dist-py-module-domain-ports-package"]], "dist_py_module.domain.ports.ifile_gen module": [[8, "module-dist_py_module.domain.ports.ifile_gen"]], "dist_py_module.domain.ports.ifile_writer module": [[9, "module-dist_py_module.domain.ports.ifile_writer"]], "dist_py_module.domain.ports.itemplate_provider module": [[10, "module-dist_py_module.domain.ports.itemplate_provider"]], "dist_py_module.engine module": [[11, "module-dist_py_module.engine"]], "dist_py_module.infrastructure package": [[12, "dist-py-module-infrastructure-package"]], "dist_py_module.infrastructure.cli module": [[13, "module-dist_py_module.infrastructure.cli"]], "dist_py_module.infrastructure.cli_bundle module": [[14, "module-dist_py_module.infrastructure.cli_bundle"]], "dist_py_module.infrastructure.file_writer module": [[15, "module-dist_py_module.infrastructure.file_writer"]], "dist_py_module.infrastructure.gen_setup_command module": [[16, "module-dist_py_module.infrastructure.gen_setup_command"]], "dist_py_module.infrastructure.icli module": [[17, "module-dist_py_module.infrastructure.icli"]], "dist_py_module.infrastructure.icli_command module": [[18, "module-dist_py_module.infrastructure.icli_command"]], "dist_py_module.infrastructure.template_provider module": [[19, "module-dist_py_module.infrastructure.template_provider"]], "Generate setup.py": [[20, "generate-setup-py"]], "Contents": [[20, null]], "Installation": [[20, "installation"]], "Dependencies": [[20, "dependencies"]], "Tool structure": [[20, "tool-structure"]], "Usage": [[20, "usage"]], "Copyright and licence": [[20, "copyright-and-licence"]], "Indices and tables": [[20, "indices-and-tables"]], "main module": [[21, "module-main"]], "dist_py_module": [[22, "dist-py-module"]]}, "indexentries": {"dist_py_module": [[0, "module-dist_py_module"]], "module": [[0, "module-dist_py_module"], [1, "module-dist_py_module.application"], [2, "module-dist_py_module.application.service"], [3, "module-dist_py_module.application.service_bundle"], [4, "module-dist_py_module.dist_py_module_bundle"], [5, "module-dist_py_module.domain"], [6, "module-dist_py_module.domain.models"], [7, "module-dist_py_module.domain.ports"], [8, "module-dist_py_module.domain.ports.ifile_gen"], [9, "module-dist_py_module.domain.ports.ifile_writer"], [10, "module-dist_py_module.domain.ports.itemplate_provider"], [11, "module-dist_py_module.engine"], [12, "module-dist_py_module.infrastructure"], [13, "module-dist_py_module.infrastructure.cli"], [14, "module-dist_py_module.infrastructure.cli_bundle"], [15, "module-dist_py_module.infrastructure.file_writer"], [16, "module-dist_py_module.infrastructure.gen_setup_command"], [17, "module-dist_py_module.infrastructure.icli"], [18, "module-dist_py_module.infrastructure.icli_command"], [19, "module-dist_py_module.infrastructure.template_provider"], [21, "module-main"]], "dist_py_module.application": [[1, "module-dist_py_module.application"]], "filegen (class in dist_py_module.application.service)": [[2, "dist_py_module.application.service.FileGen"]], "_abc_impl (dist_py_module.application.service.filegen attribute)": [[2, "dist_py_module.application.service.FileGen._abc_impl"]], "dist_py_module.application.service": [[2, "module-dist_py_module.application.service"]], "execute() (dist_py_module.application.service.filegen method)": [[2, "dist_py_module.application.service.FileGen.execute"]], "is_initialized() (dist_py_module.application.service.filegen method)": [[2, "dist_py_module.application.service.FileGen.is_initialized"]], "servicebundle (class in dist_py_module.application.service_bundle)": [[3, "dist_py_module.application.service_bundle.ServiceBundle"]], "dist_py_module.application.service_bundle": [[3, "module-dist_py_module.application.service_bundle"]], "file_writer (dist_py_module.application.service_bundle.servicebundle attribute)": [[3, "dist_py_module.application.service_bundle.ServiceBundle.file_writer"]], "merge() (dist_py_module.application.service_bundle.servicebundle method)": [[3, "dist_py_module.application.service_bundle.ServiceBundle.merge"]], "template_provider (dist_py_module.application.service_bundle.servicebundle attribute)": [[3, "dist_py_module.application.service_bundle.ServiceBundle.template_provider"]], "to_dict() (dist_py_module.application.service_bundle.servicebundle method)": [[3, "dist_py_module.application.service_bundle.ServiceBundle.to_dict"]], "validate() (dist_py_module.application.service_bundle.servicebundle method)": [[3, "dist_py_module.application.service_bundle.ServiceBundle.validate"]], "distpymodulebundle (class in dist_py_module.dist_py_module_bundle)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle"]], "cli (dist_py_module.dist_py_module_bundle.distpymodulebundle attribute)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.cli"]], "dist_py_module.dist_py_module_bundle": [[4, "module-dist_py_module.dist_py_module_bundle"]], "file_writer (dist_py_module.dist_py_module_bundle.distpymodulebundle attribute)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.file_writer"]], "merge() (dist_py_module.dist_py_module_bundle.distpymodulebundle method)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.merge"]], "parser (dist_py_module.dist_py_module_bundle.distpymodulebundle attribute)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.parser"]], "service (dist_py_module.dist_py_module_bundle.distpymodulebundle attribute)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.service"]], "template_provider (dist_py_module.dist_py_module_bundle.distpymodulebundle attribute)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.template_provider"]], "to_dict() (dist_py_module.dist_py_module_bundle.distpymodulebundle method)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.to_dict"]], "validate() (dist_py_module.dist_py_module_bundle.distpymodulebundle method)": [[4, "dist_py_module.dist_py_module_bundle.DistPyModuleBundle.validate"]], "dist_py_module.domain": [[5, "module-dist_py_module.domain"]], "generatedfile (class in dist_py_module.domain.models)": [[6, "dist_py_module.domain.models.GeneratedFile"]], "content (dist_py_module.domain.models.generatedfile attribute)": [[6, "dist_py_module.domain.models.GeneratedFile.content"]], "dist_py_module.domain.models": [[6, "module-dist_py_module.domain.models"]], "from_template() (dist_py_module.domain.models.generatedfile class method)": [[6, "dist_py_module.domain.models.GeneratedFile.from_template"]], "name (dist_py_module.domain.models.generatedfile attribute)": [[6, "dist_py_module.domain.models.GeneratedFile.name"]], "dist_py_module.domain.ports": [[7, "module-dist_py_module.domain.ports"]], "ifilegen (class in dist_py_module.domain.ports.ifile_gen)": [[8, "dist_py_module.domain.ports.ifile_gen.IFileGen"]], "_abc_impl (dist_py_module.domain.ports.ifile_gen.ifilegen attribute)": [[8, "dist_py_module.domain.ports.ifile_gen.IFileGen._abc_impl"]], "dist_py_module.domain.ports.ifile_gen": [[8, "module-dist_py_module.domain.ports.ifile_gen"]], "execute() (dist_py_module.domain.ports.ifile_gen.ifilegen method)": [[8, "dist_py_module.domain.ports.ifile_gen.IFileGen.execute"]], "is_initialized() (dist_py_module.domain.ports.ifile_gen.ifilegen method)": [[8, "dist_py_module.domain.ports.ifile_gen.IFileGen.is_initialized"]], "ifilewriter (class in dist_py_module.domain.ports.ifile_writer)": [[9, "dist_py_module.domain.ports.ifile_writer.IFileWriter"]], "_abc_impl (dist_py_module.domain.ports.ifile_writer.ifilewriter attribute)": [[9, "dist_py_module.domain.ports.ifile_writer.IFileWriter._abc_impl"]], "dist_py_module.domain.ports.ifile_writer": [[9, "module-dist_py_module.domain.ports.ifile_writer"]], "is_initialized() (dist_py_module.domain.ports.ifile_writer.ifilewriter method)": [[9, "dist_py_module.domain.ports.ifile_writer.IFileWriter.is_initialized"]], "write_file() (dist_py_module.domain.ports.ifile_writer.ifilewriter method)": [[9, "dist_py_module.domain.ports.ifile_writer.IFileWriter.write_file"]], "itemplateprovider (class in dist_py_module.domain.ports.itemplate_provider)": [[10, "dist_py_module.domain.ports.itemplate_provider.ITemplateProvider"]], "_abc_impl (dist_py_module.domain.ports.itemplate_provider.itemplateprovider attribute)": [[10, "dist_py_module.domain.ports.itemplate_provider.ITemplateProvider._abc_impl"]], "dist_py_module.domain.ports.itemplate_provider": [[10, "module-dist_py_module.domain.ports.itemplate_provider"]], "get_template_by_name() (dist_py_module.domain.ports.itemplate_provider.itemplateprovider method)": [[10, "dist_py_module.domain.ports.itemplate_provider.ITemplateProvider.get_template_by_name"]], "is_initialized() (dist_py_module.domain.ports.itemplate_provider.itemplateprovider method)": [[10, "dist_py_module.domain.ports.itemplate_provider.ITemplateProvider.is_initialized"]], "distpymodule (class in dist_py_module.engine)": [[11, "dist_py_module.engine.DistPyModule"]], "_abc_impl (dist_py_module.engine.distpymodule attribute)": [[11, "dist_py_module.engine.DistPyModule._abc_impl"]], "_info_file (dist_py_module.engine.distpymodule attribute)": [[11, "dist_py_module.engine.DistPyModule._info_file"]], "dist_py_module.engine": [[11, "module-dist_py_module.engine"]], "process() (dist_py_module.engine.distpymodule method)": [[11, "dist_py_module.engine.DistPyModule.process"]], "dist_py_module.infrastructure": [[12, "module-dist_py_module.infrastructure"]], "cli (class in dist_py_module.infrastructure.cli)": [[13, "dist_py_module.infrastructure.cli.CLI"]], "_abc_impl (dist_py_module.infrastructure.cli.cli attribute)": [[13, "dist_py_module.infrastructure.cli.CLI._abc_impl"]], "dist_py_module.infrastructure.cli": [[13, "module-dist_py_module.infrastructure.cli"]], "is_initialized() (dist_py_module.infrastructure.cli.cli method)": [[13, "dist_py_module.infrastructure.cli.CLI.is_initialized"]], "run() (dist_py_module.infrastructure.cli.cli method)": [[13, "dist_py_module.infrastructure.cli.CLI.run"]], "clibundle (class in dist_py_module.infrastructure.cli_bundle)": [[14, "dist_py_module.infrastructure.cli_bundle.CLIBundle"]], "commands (dist_py_module.infrastructure.cli_bundle.clibundle attribute)": [[14, "dist_py_module.infrastructure.cli_bundle.CLIBundle.commands"]], "dist_py_module.infrastructure.cli_bundle": [[14, "module-dist_py_module.infrastructure.cli_bundle"]], "merge() (dist_py_module.infrastructure.cli_bundle.clibundle method)": [[14, "dist_py_module.infrastructure.cli_bundle.CLIBundle.merge"]], "parser (dist_py_module.infrastructure.cli_bundle.clibundle attribute)": [[14, "dist_py_module.infrastructure.cli_bundle.CLIBundle.parser"]], "service (dist_py_module.infrastructure.cli_bundle.clibundle attribute)": [[14, "dist_py_module.infrastructure.cli_bundle.CLIBundle.service"]], "to_dict() (dist_py_module.infrastructure.cli_bundle.clibundle method)": [[14, "dist_py_module.infrastructure.cli_bundle.CLIBundle.to_dict"]], "validate() (dist_py_module.infrastructure.cli_bundle.clibundle method)": [[14, "dist_py_module.infrastructure.cli_bundle.CLIBundle.validate"]], "filewriter (class in dist_py_module.infrastructure.file_writer)": [[15, "dist_py_module.infrastructure.file_writer.FileWriter"]], "_abc_impl (dist_py_module.infrastructure.file_writer.filewriter attribute)": [[15, "dist_py_module.infrastructure.file_writer.FileWriter._abc_impl"]], "dist_py_module.infrastructure.file_writer": [[15, "module-dist_py_module.infrastructure.file_writer"]], "is_initialized() (dist_py_module.infrastructure.file_writer.filewriter method)": [[15, "dist_py_module.infrastructure.file_writer.FileWriter.is_initialized"]], "write_file() (dist_py_module.infrastructure.file_writer.filewriter method)": [[15, "dist_py_module.infrastructure.file_writer.FileWriter.write_file"]], "gensetupcommand (class in dist_py_module.infrastructure.gen_setup_command)": [[16, "dist_py_module.infrastructure.gen_setup_command.GenSetupCommand"]], "_abc_impl (dist_py_module.infrastructure.gen_setup_command.gensetupcommand attribute)": [[16, "dist_py_module.infrastructure.gen_setup_command.GenSetupCommand._abc_impl"]], "dist_py_module.infrastructure.gen_setup_command": [[16, "module-dist_py_module.infrastructure.gen_setup_command"]], "execute() (dist_py_module.infrastructure.gen_setup_command.gensetupcommand method)": [[16, "dist_py_module.infrastructure.gen_setup_command.GenSetupCommand.execute"]], "help_text (dist_py_module.infrastructure.gen_setup_command.gensetupcommand property)": [[16, "dist_py_module.infrastructure.gen_setup_command.GenSetupCommand.help_text"]], "name (dist_py_module.infrastructure.gen_setup_command.gensetupcommand property)": [[16, "dist_py_module.infrastructure.gen_setup_command.GenSetupCommand.name"]], "options (dist_py_module.infrastructure.gen_setup_command.gensetupcommand property)": [[16, "dist_py_module.infrastructure.gen_setup_command.GenSetupCommand.options"]], "icli (class in dist_py_module.infrastructure.icli)": [[17, "dist_py_module.infrastructure.icli.ICLI"]], "_abc_impl (dist_py_module.infrastructure.icli.icli attribute)": [[17, "dist_py_module.infrastructure.icli.ICLI._abc_impl"]], "dist_py_module.infrastructure.icli": [[17, "module-dist_py_module.infrastructure.icli"]], "is_initialized() (dist_py_module.infrastructure.icli.icli method)": [[17, "dist_py_module.infrastructure.icli.ICLI.is_initialized"]], "run() (dist_py_module.infrastructure.icli.icli method)": [[17, "dist_py_module.infrastructure.icli.ICLI.run"]], "iclicommand (class in dist_py_module.infrastructure.icli_command)": [[18, "dist_py_module.infrastructure.icli_command.ICLICommand"]], "_abc_impl (dist_py_module.infrastructure.icli_command.iclicommand attribute)": [[18, "dist_py_module.infrastructure.icli_command.ICLICommand._abc_impl"]], "dist_py_module.infrastructure.icli_command": [[18, "module-dist_py_module.infrastructure.icli_command"]], "execute() (dist_py_module.infrastructure.icli_command.iclicommand method)": [[18, "dist_py_module.infrastructure.icli_command.ICLICommand.execute"]], "help_text (dist_py_module.infrastructure.icli_command.iclicommand property)": [[18, "dist_py_module.infrastructure.icli_command.ICLICommand.help_text"]], "name (dist_py_module.infrastructure.icli_command.iclicommand property)": [[18, "dist_py_module.infrastructure.icli_command.ICLICommand.name"]], "options (dist_py_module.infrastructure.icli_command.iclicommand property)": [[18, "dist_py_module.infrastructure.icli_command.ICLICommand.options"]], "templateprovider (class in dist_py_module.infrastructure.template_provider)": [[19, "dist_py_module.infrastructure.template_provider.TemplateProvider"]], "_abc_impl (dist_py_module.infrastructure.template_provider.templateprovider attribute)": [[19, "dist_py_module.infrastructure.template_provider.TemplateProvider._abc_impl"]], "dist_py_module.infrastructure.template_provider": [[19, "module-dist_py_module.infrastructure.template_provider"]], "get_template_by_name() (dist_py_module.infrastructure.template_provider.templateprovider method)": [[19, "dist_py_module.infrastructure.template_provider.TemplateProvider.get_template_by_name"]], "is_initialized() (dist_py_module.infrastructure.template_provider.templateprovider method)": [[19, "dist_py_module.infrastructure.template_provider.TemplateProvider.is_initialized"]], "main": [[21, "module-main"]], "main() (in module main)": [[21, "main.main"]]}}) \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index d6dfab8..1b707d1 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -29,7 +29,7 @@ project: str = 'dist_py_module' project_copyright: str = '2026, Vladimir Roncevic ' author: str = 'Vladimir Roncevic ' -version: str = '3.1.0' +version: str = '3.1.1' release: str = 'https://github.com/vroncevic/dist_py_module/releases' extensions: List[str] = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode'] templates_path: List[str] = ['_templates'] diff --git a/docs/source/index.rst b/docs/source/index.rst index ec5f885..f0fd8b6 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -136,7 +136,7 @@ Running tool for creating new distributing py module mkdir -p demo/mytool/ - python3 main.py setup --package-name "dist_py_module" --version "3.1.0" --description "Package for distributing Python packages." --author "Vladimir Roncevic" --email "elektron.ronca@gmail.com" --github "vroncevic" --license "GNU General Public License (GPL)" --with-readme "True" + python3 main.py setup --package-name "dist_py_module" --version "3.1.1" --description "Package for distributing Python packages." --author "Vladimir Roncevic" --email "elektron.ronca@gmail.com" --github "vroncevic" --license "GNU General Public License (GPL)" --with-readme "True" Copyright and licence ----------------------- diff --git a/main.py b/main.py index e252745..7d78e2a 100644 --- a/main.py +++ b/main.py @@ -25,7 +25,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/run.sh b/run.sh index b098276..83c713b 100755 --- a/run.sh +++ b/run.sh @@ -1,2 +1,2 @@ -python3 main.py setup --package-name "dist_py_module" --version "3.1.0" --description "Package for distributing Python packages." --author "Vladimir Roncevic" --email "elektron.ronca@gmail.com" --github "vroncevic" --license "GNU General Public License (GPL)" +python3 main.py setup --package-name "dist_py_module" --version "3.1.1" --description "Package for distributing Python packages." --author "Vladimir Roncevic" --email "elektron.ronca@gmail.com" --github "vroncevic" --license "GNU General Public License (GPL)" diff --git a/run_coverage.py b/run_coverage.py index 2a14000..513d752 100644 --- a/run_coverage.py +++ b/run_coverage.py @@ -26,7 +26,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/run_coverage.sh b/run_coverage.sh index 9af6771..24006b6 100755 --- a/run_coverage.sh +++ b/run_coverage.sh @@ -1,7 +1,7 @@ #!/bin/bash # # @brief dist_py_module -# @version v3.1.0 +# @version v3.1.1 # @date Sun Jun 30 09:25:12 2026 # @company None, free software to use 2026 # @author Vladimir Roncevic diff --git a/setup.py b/setup.py index 69d0447..d79fe81 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'GNU General Public License (GPL)' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Updated' @@ -67,7 +67,7 @@ def find_package_data(pkg: str) -> list[str]: setup( name='dist_py_module', - version='3.1.0', + version='3.1.1', description='Package for distributing Python packages.', author='Vladimir Roncevic', author_email='elektron.ronca@gmail.com', @@ -75,7 +75,7 @@ def find_package_data(pkg: str) -> list[str]: license='GNU General Public License (GPL) 2026 Free software to use and distributed it.', long_description=long_description, long_description_content_type='text/markdown', - keywords='dist_py_module, TODO', + keywords='dist_py_module, distribute python package', platforms='POSIX', classifiers=PYP_CLASSIFIERS, packages=find_packages(exclude=['tests', 'tests.*', '*.*.pyc', '*.pyo']), diff --git a/tests/test_domain.py b/tests/test_domain.py index efe27a0..713c3ea 100644 --- a/tests/test_domain.py +++ b/tests/test_domain.py @@ -27,7 +27,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' diff --git a/tests/test_engine.py b/tests/test_engine.py index 70bdbe4..8190287 100644 --- a/tests/test_engine.py +++ b/tests/test_engine.py @@ -34,7 +34,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' @@ -185,6 +185,37 @@ def test_process_failure_with_unexpected_error(self) -> None: engine.process() mock_print.assert_called_with('\x1b[31m❌ dist_py_module: engine not initialized.\x1b[0m') + def test_process_expected_exception(self) -> None: + ''' + Tests engine process catches expected exception. + ''' + mock_cli: MagicMock = MagicMock(spec=ICLI) + mock_cli.is_initialized.return_value = True + mock_cli.run.side_effect = ValueError("Expected error") + + bundle: DistPyModuleBundle = DistPyModuleBundle(cli=mock_cli) + engine: DistPyModule = DistPyModule(bundle) + self.assertTrue(engine.is_initialized()) + + engine.process() + mock_cli.run.assert_called_once() + + def test_process_unexpected_exception(self) -> None: + ''' + Tests engine process catches unexpected exception. + ''' + mock_cli: MagicMock = MagicMock(spec=ICLI) + mock_cli.is_initialized.return_value = True + mock_cli.run.side_effect = Exception("Unexpected error") + + bundle: DistPyModuleBundle = DistPyModuleBundle(cli=mock_cli) + engine: DistPyModule = DistPyModule(bundle) + self.assertTrue(engine.is_initialized()) + + engine.process() + mock_cli.run.assert_called_once() + + def test_dist_py_module_bundle_helpers(self) -> None: ''' Tests DistPyModuleBundle merge and to_dict helpers. diff --git a/tests/test_infrastructure.py b/tests/test_infrastructure.py index a5ce160..d9a3668 100644 --- a/tests/test_infrastructure.py +++ b/tests/test_infrastructure.py @@ -44,7 +44,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' @@ -159,7 +159,7 @@ def test_arg_parser_success(self) -> None: context: ContextBundle = ContextBundle(checker=Checker(), reporter=Reporter(), verbose=False) params: dict[str, str] = { 'ats_name': 'test_cli', - 'ats_version': '3.1.0', + 'ats_version': '3.1.1', 'ats_licence': 'MIT', 'ats_build_date': '2026-06-22' } @@ -241,7 +241,7 @@ def test_gen_setup_command_metadata(self) -> None: mock_service: MagicMock = MagicMock(spec=IFileGen) params: dict[str, str] = { "package_name": "test_pkg", - "version": "3.1.0", + "version": "3.1.1", "description": "test_desc", "author": "test_author", "email": "test_email", @@ -255,7 +255,7 @@ def test_gen_setup_command_metadata(self) -> None: target_filename="setup.py", cli_params={ "package_name": "test_pkg", - "version": "3.1.0", + "version": "3.1.1", "description": "test_desc", "author": "test_author", "email": "test_email", diff --git a/tests/test_service.py b/tests/test_service.py index 62df55a..6fad1d1 100644 --- a/tests/test_service.py +++ b/tests/test_service.py @@ -20,7 +20,6 @@ ''' import unittest -from typing import Dict from dist_py_module.domain.ports.itemplate_provider import ITemplateProvider from dist_py_module.domain.ports.ifile_writer import IFileWriter from dist_py_module.application.service_bundle import ServiceBundle @@ -30,7 +29,7 @@ __copyright__: str = '(C) 2026, https://vroncevic.github.io/dist_py_module' __credits__: list[str] = ['Vladimir Roncevic', 'Python Software Foundation'] __license__: str = 'https://github.com/vroncevic/dist_py_module/blob/dev/LICENSE' -__version__: str = '3.1.0' +__version__: str = '3.1.1' __maintainer__: str = 'Vladimir Roncevic' __email__: str = 'elektron.ronca@gmail.com' __status__: str = 'Development' @@ -48,7 +47,7 @@ class MockTemplateProvider(ITemplateProvider): | get_template_by_name - Retrieves raw template. ''' - def __init__(self, templates: Dict[str, str]): + def __init__(self, templates: dict[str, str]): ''' Initializes MockTemplateProvider. @@ -112,7 +111,7 @@ def __init__(self) -> None: :exceptions: None. ''' - self.written_files: Dict[str, str] = {} + self.written_files: dict[str, str] = {} def write_file(self, filepath: str, content: str) -> None: ''' @@ -245,7 +244,7 @@ def test_service_bundle_helpers(self) -> None: self.assertEqual(bundle1.template_provider, provider1) self.assertEqual(bundle1.file_writer, writer1) - d: Dict[str, MockTemplateProvider | MockFileWriter] = bundle1.to_dict() + d: dict[str, MockTemplateProvider | MockFileWriter] = bundle1.to_dict() self.assertEqual(d["template_provider"], provider1) self.assertEqual(d["file_writer"], writer1)