From a30f86e3470acae1f9926ee87e6330e138ebefff Mon Sep 17 00:00:00 2001 From: Vladimir Roncevic Date: Tue, 1 Sep 2026 13:04:03 +0200 Subject: [PATCH] [gen_efi_app] Refactor done based on SOLID principles, updated unit tests, docs, github workflows --- .../gen_efi_app_interface_checker.yml | 29 + .github/workflows/gen_efi_app_isp_checker.yml | 29 + .../workflows/gen_efi_app_package_checker.yml | 20 +- .../workflows/gen_efi_app_python3_build.yml | 9 +- .../workflows/gen_efi_app_python_checker.yml | 33 +- .github/workflows/gen_efi_app_release.yml | 39 + .github/workflows/gen_efi_app_srp_checker.yml | 29 + .github/workflows/gen_efi_app_toc.yaml | 12 - .github/workflows/gen_efi_app_toc.yml | 20 + .gitignore | 10 +- .gitmodules | 6 + .pylintrc | 25 + .readthedocs.yml | 6 +- README.md | 209 +++-- coverage | 1 + docs/build/doctrees/environment.pickle | Bin 236757 -> 1241555 bytes docs/build/doctrees/gen_efi_app.core.doctree | Bin 0 -> 7517 bytes .../doctrees/gen_efi_app.core.model.doctree | Bin 0 -> 7580 bytes ...n_efi_app.core.model.project_setup.doctree | Bin 0 -> 15329 bytes .../doctrees/gen_efi_app.core.service.doctree | Bin 0 -> 7697 bytes .../gen_efi_app.core.service.engine.doctree | Bin 0 -> 22685 bytes .../gen_efi_app.core.service.iservice.doctree | Bin 0 -> 23293 bytes ...efi_app.core.service.isubprocessor.doctree | Bin 0 -> 23908 bytes docs/build/doctrees/gen_efi_app.doctree | Bin 29841 -> 7951 bytes .../build/doctrees/gen_efi_app.engine.doctree | Bin 0 -> 22139 bytes .../gen_efi_app.infrastructure.cli.doctree | Bin 0 -> 8217 bytes ..._efi_app.infrastructure.cli.engine.doctree | Bin 0 -> 28708 bytes ...en_efi_app.infrastructure.cli.icli.doctree | Bin 0 -> 21729 bytes ...pp.infrastructure.cli.setup.bundle.doctree | Bin 0 -> 24668 bytes ...astructure.cli.setup.dep_validator.doctree | Bin 0 -> 21869 bytes ...rastructure.cli.setup.dependencies.doctree | Bin 0 -> 17553 bytes ...n_efi_app.infrastructure.cli.setup.doctree | Bin 0 -> 8235 bytes ...p.infrastructure.cli.setup.factory.doctree | Bin 0 -> 22666 bytes ..._app.infrastructure.cli.setup.keys.doctree | Bin 0 -> 34818 bytes ...astructure.cli.setup.opt_validator.doctree | Bin 0 -> 21444 bytes ...p.infrastructure.cli.setup.options.doctree | Bin 0 -> 14779 bytes ....infrastructure.cli.setup.registry.doctree | Bin 0 -> 21614 bytes ...infrastructure.cli.setup.validator.doctree | Bin 0 -> 20786 bytes ...app.infrastructure.command.command.doctree | Bin 0 -> 20718 bytes ...gen_efi_app.infrastructure.command.doctree | Bin 0 -> 8029 bytes ...command.gen_efi_command_definition.doctree | Bin 0 -> 21560 bytes ...e.command.gen_efi_command_executor.doctree | Bin 0 -> 26584 bytes ...ucture.command.icommand_definition.doctree | Bin 0 -> 17235 bytes ...tructure.command.icommand_executor.doctree | Bin 0 -> 25750 bytes .../gen_efi_app.infrastructure.doctree | Bin 0 -> 8152 bytes ...fi_app.infrastructure.subprocessor.doctree | Bin 0 -> 30511 bytes docs/build/doctrees/gen_efi_app.pro.doctree | Bin 35774 -> 0 bytes .../gen_efi_app.pro.read_template.doctree | Bin 29148 -> 0 bytes .../gen_efi_app.pro.write_template.doctree | Bin 27924 -> 0 bytes .../doctrees/gen_efi_app.setup.bundle.doctree | Bin 0 -> 25837 bytes .../gen_efi_app.setup.dep_validator.doctree | Bin 0 -> 21430 bytes .../gen_efi_app.setup.dependencies.doctree | Bin 0 -> 18915 bytes docs/build/doctrees/gen_efi_app.setup.doctree | Bin 0 -> 7779 bytes .../gen_efi_app.setup.factory.doctree | Bin 0 -> 25978 bytes .../doctrees/gen_efi_app.setup.keys.doctree | Bin 0 -> 34265 bytes .../gen_efi_app.setup.opt_validator.doctree | Bin 0 -> 21002 bytes .../gen_efi_app.setup.options.doctree | Bin 0 -> 12274 bytes .../gen_efi_app.setup.registry.doctree | Bin 0 -> 21178 bytes .../gen_efi_app.setup.validator.doctree | Bin 0 -> 20372 bytes docs/build/doctrees/index.doctree | Bin 24019 -> 66838 bytes docs/build/doctrees/main.doctree | Bin 0 -> 9463 bytes docs/build/doctrees/modules.doctree | Bin 2803 -> 2817 bytes docs/build/html/_modules/gen_efi_app.html | 264 ------ .../gen_efi_app/core/model/project_setup.html | 131 +++ .../gen_efi_app/core/service/engine.html | 182 +++++ .../gen_efi_app/core/service/iservice.html | 152 ++++ .../core/service/isubprocessor.html | 152 ++++ .../html/_modules/gen_efi_app/engine.html | 225 ++++++ .../infrastructure/cli/engine.html | 209 +++++ .../gen_efi_app/infrastructure/cli/icli.html | 150 ++++ .../infrastructure/cli/setup/bundle.html | 155 ++++ .../cli/setup/dep_validator.html | 183 +++++ .../cli/setup/dependencies.html | 139 ++++ .../infrastructure/cli/setup/factory.html | 188 +++++ .../infrastructure/cli/setup/keys.html | 182 +++++ .../cli/setup/opt_validator.html | 183 +++++ .../infrastructure/cli/setup/options.html | 135 ++++ .../infrastructure/cli/setup/registry.html | 175 ++++ .../infrastructure/cli/setup/validator.html | 189 +++++ .../infrastructure/command/command.html | 135 ++++ .../command/gen_efi_command_definition.html | 187 +++++ .../command/gen_efi_command_executor.html | 181 +++++ .../command/icommand_definition.html | 124 +++ .../command/icommand_executor.html | 151 ++++ .../infrastructure/subprocessor.html | 238 ++++++ docs/build/html/_modules/gen_efi_app/pro.html | 238 ------ .../gen_efi_app/pro/read_template.html | 208 ----- .../gen_efi_app/pro/write_template.html | 226 ------ .../_modules/gen_efi_app/setup/bundle.html | 157 ++++ .../gen_efi_app/setup/dep_validator.html | 185 +++++ .../gen_efi_app/setup/dependencies.html | 141 ++++ .../_modules/gen_efi_app/setup/factory.html | 231 ++++++ .../html/_modules/gen_efi_app/setup/keys.html | 183 +++++ .../gen_efi_app/setup/opt_validator.html | 183 +++++ .../_modules/gen_efi_app/setup/options.html | 129 +++ .../_modules/gen_efi_app/setup/registry.html | 185 +++++ .../_modules/gen_efi_app/setup/validator.html | 193 +++++ docs/build/html/_modules/index.html | 39 +- docs/build/html/_modules/main.html | 141 ++++ ...n_efi_app.core.model.project_setup.rst.txt | 8 + .../_sources/gen_efi_app.core.model.rst.txt} | 9 +- .../html/_sources/gen_efi_app.core.rst.txt | 20 + .../gen_efi_app.core.service.engine.rst.txt} | 4 +- .../gen_efi_app.core.service.iservice.rst.txt | 8 + ...efi_app.core.service.isubprocessor.rst.txt | 8 + .../_sources/gen_efi_app.core.service.rst.txt | 21 + .../html/_sources/gen_efi_app.engine.rst.txt | 8 + ..._efi_app.infrastructure.cli.engine.rst.txt | 8 + ...en_efi_app.infrastructure.cli.icli.rst.txt | 8 + .../gen_efi_app.infrastructure.cli.rst.txt | 28 + ...pp.infrastructure.cli.setup.bundle.rst.txt | 8 + ...astructure.cli.setup.dep_validator.rst.txt | 8 + ...rastructure.cli.setup.dependencies.rst.txt | 8 + ...p.infrastructure.cli.setup.factory.rst.txt | 8 + ..._app.infrastructure.cli.setup.keys.rst.txt | 8 + ...astructure.cli.setup.opt_validator.rst.txt | 8 + ...p.infrastructure.cli.setup.options.rst.txt | 8 + ....infrastructure.cli.setup.registry.rst.txt | 8 + ...n_efi_app.infrastructure.cli.setup.rst.txt | 27 + ...infrastructure.cli.setup.validator.rst.txt | 8 + ...app.infrastructure.command.command.rst.txt | 8 + ...command.gen_efi_command_definition.rst.txt | 8 + ...e.command.gen_efi_command_executor.rst.txt | 8 + ...ucture.command.icommand_definition.rst.txt | 8 + ...tructure.command.icommand_executor.rst.txt | 8 + ...gen_efi_app.infrastructure.command.rst.txt | 23 + .../gen_efi_app.infrastructure.rst.txt | 28 + ...fi_app.infrastructure.subprocessor.rst.txt | 8 + docs/build/html/_sources/gen_efi_app.rst.txt | 12 +- .../_sources/gen_efi_app.setup.bundle.rst.txt | 8 + .../gen_efi_app.setup.dep_validator.rst.txt | 8 + ...=> gen_efi_app.setup.dependencies.rst.txt} | 4 +- .../gen_efi_app.setup.factory.rst.txt | 8 + .../_sources/gen_efi_app.setup.keys.rst.txt | 8 + .../gen_efi_app.setup.opt_validator.rst.txt | 8 + .../gen_efi_app.setup.options.rst.txt | 8 + .../gen_efi_app.setup.registry.rst.txt | 8 + .../html/_sources/gen_efi_app.setup.rst.txt | 27 + .../gen_efi_app.setup.validator.rst.txt | 8 + docs/build/html/_sources/index.rst.txt | 207 +++-- docs/build/html/_sources/main.rst.txt | 8 + docs/build/html/_sources/modules.rst.txt | 1 + docs/build/html/gen_efi_app.core.html | 185 +++++ docs/build/html/gen_efi_app.core.model.html | 164 ++++ .../gen_efi_app.core.model.project_setup.html | 173 ++++ .../html/gen_efi_app.core.service.engine.html | 213 +++++ docs/build/html/gen_efi_app.core.service.html | 188 +++++ .../gen_efi_app.core.service.iservice.html | 215 +++++ ...en_efi_app.core.service.isubprocessor.html | 215 +++++ docs/build/html/gen_efi_app.engine.html | 207 +++++ docs/build/html/gen_efi_app.html | 206 +++-- ...gen_efi_app.infrastructure.cli.engine.html | 227 ++++++ .../html/gen_efi_app.infrastructure.cli.html | 230 ++++++ .../gen_efi_app.infrastructure.cli.icli.html | 210 +++++ ...i_app.infrastructure.cli.setup.bundle.html | 209 +++++ ...nfrastructure.cli.setup.dep_validator.html | 206 +++++ ...infrastructure.cli.setup.dependencies.html | 189 +++++ ..._app.infrastructure.cli.setup.factory.html | 219 +++++ .../gen_efi_app.infrastructure.cli.setup.html | 239 ++++++ ...efi_app.infrastructure.cli.setup.keys.html | 239 ++++++ ...nfrastructure.cli.setup.opt_validator.html | 206 +++++ ..._app.infrastructure.cli.setup.options.html | 182 +++++ ...app.infrastructure.cli.setup.registry.html | 214 +++++ ...pp.infrastructure.cli.setup.validator.html | 206 +++++ ...fi_app.infrastructure.command.command.html | 180 +++++ ...re.command.gen_efi_command_definition.html | 206 +++++ ...ture.command.gen_efi_command_executor.html | 213 +++++ .../gen_efi_app.infrastructure.command.html | 203 +++++ ...structure.command.icommand_definition.html | 175 ++++ ...rastructure.command.icommand_executor.html | 216 +++++ .../html/gen_efi_app.infrastructure.html | 225 ++++++ ...n_efi_app.infrastructure.subprocessor.html | 232 ++++++ docs/build/html/gen_efi_app.pro.html | 279 ------- .../html/gen_efi_app.pro.read_template.html | 210 ----- .../html/gen_efi_app.pro.write_template.html | 192 ----- docs/build/html/gen_efi_app.setup.bundle.html | 212 +++++ .../html/gen_efi_app.setup.dep_validator.html | 202 +++++ .../html/gen_efi_app.setup.dependencies.html | 192 +++++ .../build/html/gen_efi_app.setup.factory.html | 226 ++++++ docs/build/html/gen_efi_app.setup.html | 237 ++++++ docs/build/html/gen_efi_app.setup.keys.html | 235 ++++++ .../html/gen_efi_app.setup.opt_validator.html | 202 +++++ .../build/html/gen_efi_app.setup.options.html | 171 ++++ .../html/gen_efi_app.setup.registry.html | 210 +++++ .../html/gen_efi_app.setup.validator.html | 202 +++++ docs/build/html/genindex.html | 751 +++++++++++++++++- docs/build/html/index.html | 431 ++++++++-- docs/build/html/main.html | 144 ++++ docs/build/html/modules.html | 41 +- docs/build/html/objects.inv | Bin 555 -> 2240 bytes docs/build/html/py-modindex.html | 197 ++++- docs/build/html/searchindex.js | 2 +- docs/source/conf.py | 38 +- docs/source/coverage_table.csv | 42 + .../gen_efi_app.core.model.project_setup.rst | 8 + .../gen_efi_app.core.model.rst} | 9 +- docs/source/gen_efi_app.core.rst | 20 + .../gen_efi_app.core.service.engine.rst} | 4 +- .../gen_efi_app.core.service.iservice.rst | 8 + ...gen_efi_app.core.service.isubprocessor.rst | 8 + docs/source/gen_efi_app.core.service.rst | 21 + docs/source/gen_efi_app.engine.rst | 8 + .../gen_efi_app.infrastructure.cli.engine.rst | 8 + .../gen_efi_app.infrastructure.cli.icli.rst | 8 + .../source/gen_efi_app.infrastructure.cli.rst | 28 + ...fi_app.infrastructure.cli.setup.bundle.rst | 8 + ...infrastructure.cli.setup.dep_validator.rst | 8 + ....infrastructure.cli.setup.dependencies.rst | 8 + ...i_app.infrastructure.cli.setup.factory.rst | 8 + ..._efi_app.infrastructure.cli.setup.keys.rst | 8 + ...infrastructure.cli.setup.opt_validator.rst | 8 + ...i_app.infrastructure.cli.setup.options.rst | 8 + ..._app.infrastructure.cli.setup.registry.rst | 8 + .../gen_efi_app.infrastructure.cli.setup.rst | 27 + ...app.infrastructure.cli.setup.validator.rst | 8 + ...efi_app.infrastructure.command.command.rst | 8 + ...ure.command.gen_efi_command_definition.rst | 8 + ...cture.command.gen_efi_command_executor.rst | 8 + ...astructure.command.icommand_definition.rst | 8 + ...frastructure.command.icommand_executor.rst | 8 + .../gen_efi_app.infrastructure.command.rst | 23 + docs/source/gen_efi_app.infrastructure.rst | 28 + ...en_efi_app.infrastructure.subprocessor.rst | 8 + docs/source/gen_efi_app.rst | 12 +- docs/source/gen_efi_app.setup.bundle.rst | 8 + .../gen_efi_app.setup.dep_validator.rst | 8 + ...rst => gen_efi_app.setup.dependencies.rst} | 4 +- docs/source/gen_efi_app.setup.factory.rst | 8 + docs/source/gen_efi_app.setup.keys.rst | 8 + .../gen_efi_app.setup.opt_validator.rst | 8 + docs/source/gen_efi_app.setup.options.rst | 8 + docs/source/gen_efi_app.setup.registry.rst | 8 + docs/source/gen_efi_app.setup.rst | 27 + docs/source/gen_efi_app.setup.validator.rst | 8 + docs/source/index.rst | 207 +++-- docs/source/main.rst | 8 + docs/source/modules.rst | 1 + gates | 1 + gen-efi-app.code-workspace | 2 +- gen_efi_app/__init__.py | 169 +--- gen_efi_app/conf/.editorconfig | 3 - gen_efi_app/conf/gen_efi_app.cfg | 4 - gen_efi_app/conf/gen_efi_app_util.cfg | 0 gen_efi_app/conf/project.yaml | 15 - gen_efi_app/conf/template/.editorconfig | 3 - gen_efi_app/conf/template/cflags.template | 28 - gen_efi_app/conf/template/ldflags.template | 30 - gen_efi_app/conf/template/main.template | 11 - gen_efi_app/conf/template/makefile.template | 33 - gen_efi_app/conf/template/objects.template | 17 - gen_efi_app/conf/template/ocflags.template | 21 - gen_efi_app/core/__init__.py | 31 + gen_efi_app/core/model/__init__.py | 31 + gen_efi_app/core/model/project_setup.py | 48 ++ gen_efi_app/core/service/__init__.py | 31 + gen_efi_app/core/service/engine.py | 93 +++ gen_efi_app/core/service/iservice.py | 63 ++ gen_efi_app/core/service/isubprocessor.py | 63 ++ gen_efi_app/engine.py | 139 ++++ gen_efi_app/infrastructure/__init__.py | 31 + gen_efi_app/infrastructure/cli/__init__.py | 31 + gen_efi_app/infrastructure/cli/engine.py | 120 +++ gen_efi_app/infrastructure/cli/icli.py | 61 ++ .../infrastructure/cli/setup/__init__.py | 31 + .../infrastructure/cli/setup/bundle.py | 69 ++ .../infrastructure/cli/setup/dep_validator.py | 94 +++ .../infrastructure/cli/setup/dependencies.py | 56 ++ .../infrastructure/cli/setup/factory.py | 99 +++ gen_efi_app/infrastructure/cli/setup/keys.py | 93 +++ .../infrastructure/cli/setup/opt_validator.py | 94 +++ .../infrastructure/cli/setup/options.py | 52 ++ .../infrastructure/cli/setup/registry.py | 86 ++ .../infrastructure/cli/setup/validator.py | 100 +++ .../infrastructure/command/__init__.py | 31 + gen_efi_app/infrastructure/command/command.py | 52 ++ .../command/gen_efi_command_definition.py | 104 +++ .../command/gen_efi_command_executor.py | 92 +++ .../command/icommand_definition.py | 41 + .../command/icommand_executor.py | 62 ++ .../infrastructure/config/gen_efi_app.cfg | 8 + .../config}/gen_efi_app.logo | 0 .../infrastructure/config/templates.tgz | Bin 0 -> 1473 bytes gen_efi_app/infrastructure/subprocessor.py | 149 ++++ gen_efi_app/log/.editorconfig | 3 - gen_efi_app/log/gen_efi_app.log | 0 gen_efi_app/pro/.editorconfig | 3 - gen_efi_app/pro/__init__.py | 144 ---- gen_efi_app/pro/read_template.py | 118 --- gen_efi_app/pro/write_template.py | 136 ---- gen_efi_app/run/.editorconfig | 3 - gen_efi_app/run/gen_efi_app_run.py | 43 - gen_efi_app/setup/__init__.py | 31 + gen_efi_app/setup/bundle.py | 71 ++ gen_efi_app/setup/dep_validator.py | 96 +++ gen_efi_app/setup/dependencies.py | 58 ++ gen_efi_app/setup/factory.py | 142 ++++ gen_efi_app/setup/keys.py | 94 +++ gen_efi_app/setup/opt_validator.py | 94 +++ gen_efi_app/setup/options.py | 46 ++ gen_efi_app/setup/registry.py | 96 +++ gen_efi_app/setup/validator.py | 104 +++ main.py | 58 ++ run.sh | 10 + run_coverage.sh | 12 + run_quality_gates.sh | 15 + setup.py | 96 +-- tests/.coverage | Bin 53248 -> 0 bytes tests/__init__.py | 6 + tests/ats_coverage.py | 215 ----- tests/core/__init__.py | 6 + tests/core/model/__init__.py | 6 + tests/core/model/project_setup_test.py | 21 + tests/core/service/__init__.py | 6 + tests/core/service/engine_test.py | 67 ++ tests/engine_test.py | 234 ++++++ tests/full_simple/Makefile | 33 - tests/full_simple/cflags.mk | 28 - tests/full_simple/ldflags.mk | 30 - tests/full_simple/main.c | 11 - tests/full_simple/objects.mk | 17 - tests/full_simple/ocflags.mk | 21 - tests/gen_efi_app | 1 - tests/gen_efi_app_coverage.json | 1 - tests/gen_efi_app_coverage.xml | 272 ------- tests/gen_efi_app_pro_test.py | 108 --- tests/gen_efi_app_test.py | 110 --- tests/htmlcov/class_index.html | 171 ---- tests/htmlcov/coverage_html_cb_6fb7b396.js | 733 ----------------- tests/htmlcov/favicon_32_cb_58284776.png | Bin 1732 -> 0 bytes tests/htmlcov/function_index.html | 219 ----- tests/htmlcov/index.html | 132 --- tests/htmlcov/keybd_closed_cb_ce680311.png | Bin 9004 -> 0 bytes tests/htmlcov/status.json | 1 - tests/htmlcov/style_cb_8e611ae1.css | 337 -------- .../z_0efec487487f0ec9___init___py.html | 275 ------- .../z_710084fe59ca60c2___init___py.html | 241 ------ .../z_710084fe59ca60c2_read_template_py.html | 215 ----- .../z_710084fe59ca60c2_write_template_py.html | 233 ------ tests/infrastructure/__init__.py | 6 + tests/infrastructure/cli/__init__.py | 6 + tests/infrastructure/cli/engine_test.py | 127 +++ tests/infrastructure/cli/setup/__init__.py | 6 + .../cli/setup/dep_validator_test.py | 75 ++ .../infrastructure/cli/setup/factory_test.py | 44 + .../cli/setup/opt_validator_test.py | 73 ++ .../infrastructure/cli/setup/registry_test.py | 51 ++ .../cli/setup/validator_test.py | 63 ++ tests/infrastructure/command/__init__.py | 6 + .../command/gen_efi_command_test.py | 70 ++ tests/infrastructure/subprocessor_test.py | 118 +++ tests/latest/Makefile | 33 - tests/latest/cflags.mk | 28 - tests/latest/ldflags.mk | 30 - tests/latest/main.c | 11 - tests/latest/objects.mk | 17 - tests/latest/ocflags.mk | 21 - tests/new_simple_test/Makefile | 33 - tests/new_simple_test/cflags.mk | 28 - tests/new_simple_test/ldflags.mk | 30 - tests/new_simple_test/main.c | 11 - tests/new_simple_test/objects.mk | 17 - tests/new_simple_test/ocflags.mk | 21 - tests/read_template_test.py | 108 --- tests/run_coverage.sh | 19 - tests/setup/__init__.py | 6 + tests/setup/bundle_test.py | 44 + tests/setup/dep_validator_test.py | 106 +++ tests/setup/factory_test.py | 35 + tests/setup/keys_test.py | 31 + tests/setup/opt_validator_test.py | 38 + tests/setup/registry_test.py | 72 ++ tests/setup/validator_test.py | 139 ++++ tests/write_template_test.py | 111 --- 373 files changed, 21231 insertions(+), 6854 deletions(-) create mode 100644 .github/workflows/gen_efi_app_interface_checker.yml create mode 100644 .github/workflows/gen_efi_app_isp_checker.yml create mode 100644 .github/workflows/gen_efi_app_release.yml create mode 100644 .github/workflows/gen_efi_app_srp_checker.yml delete mode 100755 .github/workflows/gen_efi_app_toc.yaml create mode 100644 .github/workflows/gen_efi_app_toc.yml create mode 100644 .gitmodules create mode 100644 .pylintrc create mode 160000 coverage create mode 100644 docs/build/doctrees/gen_efi_app.core.doctree create mode 100644 docs/build/doctrees/gen_efi_app.core.model.doctree create mode 100644 docs/build/doctrees/gen_efi_app.core.model.project_setup.doctree create mode 100644 docs/build/doctrees/gen_efi_app.core.service.doctree create mode 100644 docs/build/doctrees/gen_efi_app.core.service.engine.doctree create mode 100644 docs/build/doctrees/gen_efi_app.core.service.iservice.doctree create mode 100644 docs/build/doctrees/gen_efi_app.core.service.isubprocessor.doctree create mode 100644 docs/build/doctrees/gen_efi_app.engine.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.cli.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.cli.engine.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.cli.icli.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.bundle.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.dep_validator.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.dependencies.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.factory.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.keys.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.opt_validator.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.options.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.registry.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.validator.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.command.command.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.command.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.command.gen_efi_command_definition.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.command.gen_efi_command_executor.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.command.icommand_definition.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.command.icommand_executor.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.doctree create mode 100644 docs/build/doctrees/gen_efi_app.infrastructure.subprocessor.doctree delete mode 100644 docs/build/doctrees/gen_efi_app.pro.doctree delete mode 100644 docs/build/doctrees/gen_efi_app.pro.read_template.doctree delete mode 100644 docs/build/doctrees/gen_efi_app.pro.write_template.doctree create mode 100644 docs/build/doctrees/gen_efi_app.setup.bundle.doctree create mode 100644 docs/build/doctrees/gen_efi_app.setup.dep_validator.doctree create mode 100644 docs/build/doctrees/gen_efi_app.setup.dependencies.doctree create mode 100644 docs/build/doctrees/gen_efi_app.setup.doctree create mode 100644 docs/build/doctrees/gen_efi_app.setup.factory.doctree create mode 100644 docs/build/doctrees/gen_efi_app.setup.keys.doctree create mode 100644 docs/build/doctrees/gen_efi_app.setup.opt_validator.doctree create mode 100644 docs/build/doctrees/gen_efi_app.setup.options.doctree create mode 100644 docs/build/doctrees/gen_efi_app.setup.registry.doctree create mode 100644 docs/build/doctrees/gen_efi_app.setup.validator.doctree create mode 100644 docs/build/doctrees/main.doctree delete mode 100644 docs/build/html/_modules/gen_efi_app.html create mode 100644 docs/build/html/_modules/gen_efi_app/core/model/project_setup.html create mode 100644 docs/build/html/_modules/gen_efi_app/core/service/engine.html create mode 100644 docs/build/html/_modules/gen_efi_app/core/service/iservice.html create mode 100644 docs/build/html/_modules/gen_efi_app/core/service/isubprocessor.html create mode 100644 docs/build/html/_modules/gen_efi_app/engine.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/cli/engine.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/cli/icli.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/bundle.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/dep_validator.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/dependencies.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/factory.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/keys.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/opt_validator.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/options.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/registry.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/validator.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/command/command.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/command/gen_efi_command_definition.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/command/gen_efi_command_executor.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/command/icommand_definition.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/command/icommand_executor.html create mode 100644 docs/build/html/_modules/gen_efi_app/infrastructure/subprocessor.html delete mode 100644 docs/build/html/_modules/gen_efi_app/pro.html delete mode 100644 docs/build/html/_modules/gen_efi_app/pro/read_template.html delete mode 100644 docs/build/html/_modules/gen_efi_app/pro/write_template.html create mode 100644 docs/build/html/_modules/gen_efi_app/setup/bundle.html create mode 100644 docs/build/html/_modules/gen_efi_app/setup/dep_validator.html create mode 100644 docs/build/html/_modules/gen_efi_app/setup/dependencies.html create mode 100644 docs/build/html/_modules/gen_efi_app/setup/factory.html create mode 100644 docs/build/html/_modules/gen_efi_app/setup/keys.html create mode 100644 docs/build/html/_modules/gen_efi_app/setup/opt_validator.html create mode 100644 docs/build/html/_modules/gen_efi_app/setup/options.html create mode 100644 docs/build/html/_modules/gen_efi_app/setup/registry.html create mode 100644 docs/build/html/_modules/gen_efi_app/setup/validator.html create mode 100644 docs/build/html/_modules/main.html create mode 100644 docs/build/html/_sources/gen_efi_app.core.model.project_setup.rst.txt rename docs/{source/gen_efi_app.pro.rst => build/html/_sources/gen_efi_app.core.model.rst.txt} (51%) create mode 100644 docs/build/html/_sources/gen_efi_app.core.rst.txt rename docs/{source/gen_efi_app.pro.write_template.rst => build/html/_sources/gen_efi_app.core.service.engine.rst.txt} (56%) create mode 100644 docs/build/html/_sources/gen_efi_app.core.service.iservice.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.core.service.isubprocessor.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.core.service.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.engine.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.cli.engine.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.cli.icli.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.cli.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.bundle.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.dep_validator.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.dependencies.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.factory.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.keys.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.opt_validator.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.options.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.registry.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.validator.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.command.command.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.command.gen_efi_command_definition.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.command.gen_efi_command_executor.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.command.icommand_definition.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.command.icommand_executor.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.command.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.infrastructure.subprocessor.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.setup.bundle.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.setup.dep_validator.rst.txt rename docs/build/html/_sources/{gen_efi_app.pro.read_template.rst.txt => gen_efi_app.setup.dependencies.rst.txt} (57%) create mode 100644 docs/build/html/_sources/gen_efi_app.setup.factory.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.setup.keys.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.setup.opt_validator.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.setup.options.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.setup.registry.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.setup.rst.txt create mode 100644 docs/build/html/_sources/gen_efi_app.setup.validator.rst.txt create mode 100644 docs/build/html/_sources/main.rst.txt create mode 100644 docs/build/html/gen_efi_app.core.html create mode 100644 docs/build/html/gen_efi_app.core.model.html create mode 100644 docs/build/html/gen_efi_app.core.model.project_setup.html create mode 100644 docs/build/html/gen_efi_app.core.service.engine.html create mode 100644 docs/build/html/gen_efi_app.core.service.html create mode 100644 docs/build/html/gen_efi_app.core.service.iservice.html create mode 100644 docs/build/html/gen_efi_app.core.service.isubprocessor.html create mode 100644 docs/build/html/gen_efi_app.engine.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.cli.engine.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.cli.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.cli.icli.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.cli.setup.bundle.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.cli.setup.dep_validator.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.cli.setup.dependencies.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.cli.setup.factory.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.cli.setup.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.cli.setup.keys.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.cli.setup.opt_validator.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.cli.setup.options.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.cli.setup.registry.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.cli.setup.validator.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.command.command.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.command.gen_efi_command_definition.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.command.gen_efi_command_executor.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.command.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.command.icommand_definition.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.command.icommand_executor.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.html create mode 100644 docs/build/html/gen_efi_app.infrastructure.subprocessor.html delete mode 100644 docs/build/html/gen_efi_app.pro.html delete mode 100644 docs/build/html/gen_efi_app.pro.read_template.html delete mode 100644 docs/build/html/gen_efi_app.pro.write_template.html create mode 100644 docs/build/html/gen_efi_app.setup.bundle.html create mode 100644 docs/build/html/gen_efi_app.setup.dep_validator.html create mode 100644 docs/build/html/gen_efi_app.setup.dependencies.html create mode 100644 docs/build/html/gen_efi_app.setup.factory.html create mode 100644 docs/build/html/gen_efi_app.setup.html create mode 100644 docs/build/html/gen_efi_app.setup.keys.html create mode 100644 docs/build/html/gen_efi_app.setup.opt_validator.html create mode 100644 docs/build/html/gen_efi_app.setup.options.html create mode 100644 docs/build/html/gen_efi_app.setup.registry.html create mode 100644 docs/build/html/gen_efi_app.setup.validator.html create mode 100644 docs/build/html/main.html create mode 100644 docs/source/coverage_table.csv create mode 100644 docs/source/gen_efi_app.core.model.project_setup.rst rename docs/{build/html/_sources/gen_efi_app.pro.rst.txt => source/gen_efi_app.core.model.rst} (51%) create mode 100644 docs/source/gen_efi_app.core.rst rename docs/{build/html/_sources/gen_efi_app.pro.write_template.rst.txt => source/gen_efi_app.core.service.engine.rst} (56%) create mode 100644 docs/source/gen_efi_app.core.service.iservice.rst create mode 100644 docs/source/gen_efi_app.core.service.isubprocessor.rst create mode 100644 docs/source/gen_efi_app.core.service.rst create mode 100644 docs/source/gen_efi_app.engine.rst create mode 100644 docs/source/gen_efi_app.infrastructure.cli.engine.rst create mode 100644 docs/source/gen_efi_app.infrastructure.cli.icli.rst create mode 100644 docs/source/gen_efi_app.infrastructure.cli.rst create mode 100644 docs/source/gen_efi_app.infrastructure.cli.setup.bundle.rst create mode 100644 docs/source/gen_efi_app.infrastructure.cli.setup.dep_validator.rst create mode 100644 docs/source/gen_efi_app.infrastructure.cli.setup.dependencies.rst create mode 100644 docs/source/gen_efi_app.infrastructure.cli.setup.factory.rst create mode 100644 docs/source/gen_efi_app.infrastructure.cli.setup.keys.rst create mode 100644 docs/source/gen_efi_app.infrastructure.cli.setup.opt_validator.rst create mode 100644 docs/source/gen_efi_app.infrastructure.cli.setup.options.rst create mode 100644 docs/source/gen_efi_app.infrastructure.cli.setup.registry.rst create mode 100644 docs/source/gen_efi_app.infrastructure.cli.setup.rst create mode 100644 docs/source/gen_efi_app.infrastructure.cli.setup.validator.rst create mode 100644 docs/source/gen_efi_app.infrastructure.command.command.rst create mode 100644 docs/source/gen_efi_app.infrastructure.command.gen_efi_command_definition.rst create mode 100644 docs/source/gen_efi_app.infrastructure.command.gen_efi_command_executor.rst create mode 100644 docs/source/gen_efi_app.infrastructure.command.icommand_definition.rst create mode 100644 docs/source/gen_efi_app.infrastructure.command.icommand_executor.rst create mode 100644 docs/source/gen_efi_app.infrastructure.command.rst create mode 100644 docs/source/gen_efi_app.infrastructure.rst create mode 100644 docs/source/gen_efi_app.infrastructure.subprocessor.rst create mode 100644 docs/source/gen_efi_app.setup.bundle.rst create mode 100644 docs/source/gen_efi_app.setup.dep_validator.rst rename docs/source/{gen_efi_app.pro.read_template.rst => gen_efi_app.setup.dependencies.rst} (57%) create mode 100644 docs/source/gen_efi_app.setup.factory.rst create mode 100644 docs/source/gen_efi_app.setup.keys.rst create mode 100644 docs/source/gen_efi_app.setup.opt_validator.rst create mode 100644 docs/source/gen_efi_app.setup.options.rst create mode 100644 docs/source/gen_efi_app.setup.registry.rst create mode 100644 docs/source/gen_efi_app.setup.rst create mode 100644 docs/source/gen_efi_app.setup.validator.rst create mode 100644 docs/source/main.rst create mode 160000 gates delete mode 100644 gen_efi_app/conf/.editorconfig delete mode 100644 gen_efi_app/conf/gen_efi_app.cfg delete mode 100644 gen_efi_app/conf/gen_efi_app_util.cfg delete mode 100644 gen_efi_app/conf/project.yaml delete mode 100644 gen_efi_app/conf/template/.editorconfig delete mode 100644 gen_efi_app/conf/template/cflags.template delete mode 100644 gen_efi_app/conf/template/ldflags.template delete mode 100644 gen_efi_app/conf/template/main.template delete mode 100644 gen_efi_app/conf/template/makefile.template delete mode 100644 gen_efi_app/conf/template/objects.template delete mode 100644 gen_efi_app/conf/template/ocflags.template create mode 100644 gen_efi_app/core/__init__.py create mode 100644 gen_efi_app/core/model/__init__.py create mode 100644 gen_efi_app/core/model/project_setup.py create mode 100644 gen_efi_app/core/service/__init__.py create mode 100644 gen_efi_app/core/service/engine.py create mode 100644 gen_efi_app/core/service/iservice.py create mode 100644 gen_efi_app/core/service/isubprocessor.py create mode 100644 gen_efi_app/engine.py create mode 100644 gen_efi_app/infrastructure/__init__.py create mode 100644 gen_efi_app/infrastructure/cli/__init__.py create mode 100644 gen_efi_app/infrastructure/cli/engine.py create mode 100644 gen_efi_app/infrastructure/cli/icli.py create mode 100644 gen_efi_app/infrastructure/cli/setup/__init__.py create mode 100644 gen_efi_app/infrastructure/cli/setup/bundle.py create mode 100644 gen_efi_app/infrastructure/cli/setup/dep_validator.py create mode 100644 gen_efi_app/infrastructure/cli/setup/dependencies.py create mode 100644 gen_efi_app/infrastructure/cli/setup/factory.py create mode 100644 gen_efi_app/infrastructure/cli/setup/keys.py create mode 100644 gen_efi_app/infrastructure/cli/setup/opt_validator.py create mode 100644 gen_efi_app/infrastructure/cli/setup/options.py create mode 100644 gen_efi_app/infrastructure/cli/setup/registry.py create mode 100644 gen_efi_app/infrastructure/cli/setup/validator.py create mode 100644 gen_efi_app/infrastructure/command/__init__.py create mode 100644 gen_efi_app/infrastructure/command/command.py create mode 100644 gen_efi_app/infrastructure/command/gen_efi_command_definition.py create mode 100644 gen_efi_app/infrastructure/command/gen_efi_command_executor.py create mode 100644 gen_efi_app/infrastructure/command/icommand_definition.py create mode 100644 gen_efi_app/infrastructure/command/icommand_executor.py create mode 100644 gen_efi_app/infrastructure/config/gen_efi_app.cfg rename gen_efi_app/{conf => infrastructure/config}/gen_efi_app.logo (100%) create mode 100644 gen_efi_app/infrastructure/config/templates.tgz create mode 100644 gen_efi_app/infrastructure/subprocessor.py delete mode 100644 gen_efi_app/log/.editorconfig delete mode 100644 gen_efi_app/log/gen_efi_app.log delete mode 100644 gen_efi_app/pro/.editorconfig delete mode 100644 gen_efi_app/pro/__init__.py delete mode 100644 gen_efi_app/pro/read_template.py delete mode 100644 gen_efi_app/pro/write_template.py delete mode 100644 gen_efi_app/run/.editorconfig delete mode 100644 gen_efi_app/run/gen_efi_app_run.py create mode 100644 gen_efi_app/setup/__init__.py create mode 100644 gen_efi_app/setup/bundle.py create mode 100644 gen_efi_app/setup/dep_validator.py create mode 100644 gen_efi_app/setup/dependencies.py create mode 100644 gen_efi_app/setup/factory.py create mode 100644 gen_efi_app/setup/keys.py create mode 100644 gen_efi_app/setup/opt_validator.py create mode 100644 gen_efi_app/setup/options.py create mode 100644 gen_efi_app/setup/registry.py create mode 100644 gen_efi_app/setup/validator.py create mode 100644 main.py create mode 100755 run.sh create mode 100755 run_coverage.sh create mode 100755 run_quality_gates.sh delete mode 100644 tests/.coverage create mode 100644 tests/__init__.py delete mode 100644 tests/ats_coverage.py create mode 100644 tests/core/__init__.py create mode 100644 tests/core/model/__init__.py create mode 100644 tests/core/model/project_setup_test.py create mode 100644 tests/core/service/__init__.py create mode 100644 tests/core/service/engine_test.py create mode 100644 tests/engine_test.py delete mode 100644 tests/full_simple/Makefile delete mode 100644 tests/full_simple/cflags.mk delete mode 100644 tests/full_simple/ldflags.mk delete mode 100644 tests/full_simple/main.c delete mode 100644 tests/full_simple/objects.mk delete mode 100644 tests/full_simple/ocflags.mk delete mode 120000 tests/gen_efi_app delete mode 100644 tests/gen_efi_app_coverage.json delete mode 100644 tests/gen_efi_app_coverage.xml delete mode 100644 tests/gen_efi_app_pro_test.py delete mode 100644 tests/gen_efi_app_test.py delete mode 100644 tests/htmlcov/class_index.html delete mode 100644 tests/htmlcov/coverage_html_cb_6fb7b396.js delete mode 100644 tests/htmlcov/favicon_32_cb_58284776.png delete mode 100644 tests/htmlcov/function_index.html delete mode 100644 tests/htmlcov/index.html delete mode 100644 tests/htmlcov/keybd_closed_cb_ce680311.png delete mode 100644 tests/htmlcov/status.json delete mode 100644 tests/htmlcov/style_cb_8e611ae1.css delete mode 100644 tests/htmlcov/z_0efec487487f0ec9___init___py.html delete mode 100644 tests/htmlcov/z_710084fe59ca60c2___init___py.html delete mode 100644 tests/htmlcov/z_710084fe59ca60c2_read_template_py.html delete mode 100644 tests/htmlcov/z_710084fe59ca60c2_write_template_py.html create mode 100644 tests/infrastructure/__init__.py create mode 100644 tests/infrastructure/cli/__init__.py create mode 100644 tests/infrastructure/cli/engine_test.py create mode 100644 tests/infrastructure/cli/setup/__init__.py create mode 100644 tests/infrastructure/cli/setup/dep_validator_test.py create mode 100644 tests/infrastructure/cli/setup/factory_test.py create mode 100644 tests/infrastructure/cli/setup/opt_validator_test.py create mode 100644 tests/infrastructure/cli/setup/registry_test.py create mode 100644 tests/infrastructure/cli/setup/validator_test.py create mode 100644 tests/infrastructure/command/__init__.py create mode 100644 tests/infrastructure/command/gen_efi_command_test.py create mode 100644 tests/infrastructure/subprocessor_test.py delete mode 100644 tests/latest/Makefile delete mode 100644 tests/latest/cflags.mk delete mode 100644 tests/latest/ldflags.mk delete mode 100644 tests/latest/main.c delete mode 100644 tests/latest/objects.mk delete mode 100644 tests/latest/ocflags.mk delete mode 100644 tests/new_simple_test/Makefile delete mode 100644 tests/new_simple_test/cflags.mk delete mode 100644 tests/new_simple_test/ldflags.mk delete mode 100644 tests/new_simple_test/main.c delete mode 100644 tests/new_simple_test/objects.mk delete mode 100644 tests/new_simple_test/ocflags.mk delete mode 100644 tests/read_template_test.py delete mode 100755 tests/run_coverage.sh create mode 100644 tests/setup/__init__.py create mode 100644 tests/setup/bundle_test.py create mode 100644 tests/setup/dep_validator_test.py create mode 100644 tests/setup/factory_test.py create mode 100644 tests/setup/keys_test.py create mode 100644 tests/setup/opt_validator_test.py create mode 100644 tests/setup/registry_test.py create mode 100644 tests/setup/validator_test.py delete mode 100644 tests/write_template_test.py diff --git a/.github/workflows/gen_efi_app_interface_checker.yml b/.github/workflows/gen_efi_app_interface_checker.yml new file mode 100644 index 0000000..cf799c8 --- /dev/null +++ b/.github/workflows/gen_efi_app_interface_checker.yml @@ -0,0 +1,29 @@ +name: gen_efi_app_interface_checker + +permissions: + contents: read + +on: + push: + branches: [ master, main ] + paths: + - 'gen_efi_app/**/*.py' + - 'setup.py' + pull_request: + branches: [ master, main ] + paths: + - 'gen_efi_app/**/*.py' + - 'setup.py' + +jobs: + interface_gate: + runs-on: ubuntu-latest + steps: + - name: Checkout repository code + uses: actions/checkout@v4 + with: + submodules: true + + - name: Verify that each concrete class implements a valid interface + run: | + python3 gates/gates/interfaces_checker.py gen_efi_app diff --git a/.github/workflows/gen_efi_app_isp_checker.yml b/.github/workflows/gen_efi_app_isp_checker.yml new file mode 100644 index 0000000..4f38982 --- /dev/null +++ b/.github/workflows/gen_efi_app_isp_checker.yml @@ -0,0 +1,29 @@ +name: gen_efi_app_isp_checker + +permissions: + contents: read + +on: + push: + branches: [ master, main ] + paths: + - 'gen_efi_app/**/*.py' + - 'setup.py' + pull_request: + branches: [ master, main ] + paths: + - 'gen_efi_app/**/*.py' + - 'setup.py' + +jobs: + isp_gate: + runs-on: ubuntu-latest + steps: + - name: Checkout repository code + uses: actions/checkout@v4 + with: + submodules: true + + - name: Check Interface Segregation Principle violations + run: | + python3 gates/gates/isp_checker.py gen_efi_app diff --git a/.github/workflows/gen_efi_app_package_checker.yml b/.github/workflows/gen_efi_app_package_checker.yml index 610f869..6ff7384 100755 --- a/.github/workflows/gen_efi_app_package_checker.yml +++ b/.github/workflows/gen_efi_app_package_checker.yml @@ -1,33 +1,35 @@ name: gen_efi_app_package_checker on: push: - branches: [ main ] + branches: [ master, main ] paths: - 'gen_efi_app/**' - - 'tests/**' - 'setup.py' pull_request: - branches: [ main ] + branches: [ master, main ] paths: - 'gen_efi_app/**' - - 'tests/**' - 'setup.py' +permissions: + contents: read + jobs: build: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.10', '3.11', '3.12'] + python-version: ['3.12', '3.13', '3.14'] steps: - uses: actions/checkout@v4 - - name: Set up python ${{ matrix.python-version }} + - name: set up python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - - name: Install dependencies + - name: install dependencies run: | - pip install flake8 - - name: Lint with flake8 + python -m pip install --upgrade pip + pip install -r requirements.txt + - name: lint with flake8 run: | pip install flake8 # stop the build if there are Python syntax errors or undefined names diff --git a/.github/workflows/gen_efi_app_python3_build.yml b/.github/workflows/gen_efi_app_python3_build.yml index 373c702..78f031d 100755 --- a/.github/workflows/gen_efi_app_python3_build.yml +++ b/.github/workflows/gen_efi_app_python3_build.yml @@ -1,19 +1,22 @@ name: gen_efi_app_python3_build on: push: - branches: [ main ] + branches: [ master, main ] paths: - 'gen_efi_app/**' - 'MANIFEST.in' - 'pyproject.toml' - 'setup.py' pull_request: - branches: [ main ] + branches: [ master, main ] paths: - 'gen_efi_app/**' - 'MANIFEST.in' - 'pyproject.toml' - 'setup.py' +permissions: + contents: read + jobs: deploy: runs-on: ubuntu-latest @@ -22,7 +25,7 @@ jobs: - name: Set up python3 uses: actions/setup-python@v5 with: - python-version: '3.10' + python-version: '3.12' - name: Install dependencies run: | python3 -m pip install --upgrade setuptools diff --git a/.github/workflows/gen_efi_app_python_checker.yml b/.github/workflows/gen_efi_app_python_checker.yml index 989f45a..f321204 100644 --- a/.github/workflows/gen_efi_app_python_checker.yml +++ b/.github/workflows/gen_efi_app_python_checker.yml @@ -1,33 +1,28 @@ name: gen_efi_app_python_checker + on: push: - branches: [ main ] + branches: [ master, main ] paths: - - 'gen_efi_app/**' - - 'tests/**' + - 'gen_efi_app/**/*.py' - 'setup.py' pull_request: - branches: [ main ] + branches: [ master, main ] paths: - - 'gen_efi_app/**' - - 'tests/**' + - 'gen_efi_app/**/*.py' - 'setup.py' + +permissions: + contents: read + jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Check max length of lines in modules - id: long_line_checker + with: + submodules: true + + - name: Check module length and line limits run: | - modules_ok=0 - modules=($(find gen_efi_app/ tests/ -type f -name '*.py' -exec echo '{}' \;)) - for mod in "${modules[@]}"; do line_length=$(wc -L < "${mod}"); [[ $line_length -gt 127 ]] && modules_ok=1; done - [[ $modules_ok -eq 0 ]] && echo ok || exit 1 - - name: Check max number of lines in modules - id: num_line_checker - run: | - modules_ok=0 - modules=($(find gen_efi_app/ tests/ -type f -name '*.py' -exec echo '{}' \;)) - for mod in "${modules[@]}"; do line_numbers=$(wc -l < "${mod}"); [[ $line_numbers -gt 300 ]] && modules_ok=1; done - [[ $modules_ok -eq 0 ]] && echo ok || exit 1 \ No newline at end of file + python3 gates/gates/limits_checker.py gen_efi_app diff --git a/.github/workflows/gen_efi_app_release.yml b/.github/workflows/gen_efi_app_release.yml new file mode 100644 index 0000000..e4a6011 --- /dev/null +++ b/.github/workflows/gen_efi_app_release.yml @@ -0,0 +1,39 @@ +name: gen_efi_app_release + +on: + push: + tags: + - '*' + +permissions: + contents: write + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up python3 + uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install dependencies + run: | + python3 -m pip install --upgrade setuptools + python3 -m pip install --upgrade pip + python3 -m pip install --upgrade build + python3 -m pip install --upgrade wheel + pip3 install -r requirements.txt + + - name: Build python3 package + run: | + python3 -m build + + - name: Create Release + uses: softprops/action-gh-release@v2 + with: + name: Release ${{ github.ref_name }} + files: dist/* + generate_release_notes: true diff --git a/.github/workflows/gen_efi_app_srp_checker.yml b/.github/workflows/gen_efi_app_srp_checker.yml new file mode 100644 index 0000000..2598e27 --- /dev/null +++ b/.github/workflows/gen_efi_app_srp_checker.yml @@ -0,0 +1,29 @@ +name: gen_efi_app_srp_checker + +permissions: + contents: read + +on: + push: + branches: [ master, main ] + paths: + - 'gen_efi_app/**/*.py' + - 'setup.py' + pull_request: + branches: [ master, main ] + paths: + - 'gen_efi_app/**/*.py' + - 'setup.py' + +jobs: + srp_gate: + runs-on: ubuntu-latest + steps: + - name: Checkout repository code + uses: actions/checkout@v4 + with: + submodules: true + + - name: Check Single Responsibility Principle violations + run: | + python3 gates/gates/srp_checker.py gen_efi_app diff --git a/.github/workflows/gen_efi_app_toc.yaml b/.github/workflows/gen_efi_app_toc.yaml deleted file mode 100755 index 0cbe6fa..0000000 --- a/.github/workflows/gen_efi_app_toc.yaml +++ /dev/null @@ -1,12 +0,0 @@ -name: gen_efi_app_toc -on: - push: - branches: [ master ] - paths: - - '**.md' -jobs: - generateTOC: - name: gen_efi_app_toc - runs-on: ubuntu-latest - steps: - - uses: technote-space/toc-generator@v4 \ No newline at end of file diff --git a/.github/workflows/gen_efi_app_toc.yml b/.github/workflows/gen_efi_app_toc.yml new file mode 100644 index 0000000..a9b9225 --- /dev/null +++ b/.github/workflows/gen_efi_app_toc.yml @@ -0,0 +1,20 @@ +name: gen_efi_app_toc + +on: + push: + paths: + - '**.md' + +permissions: + contents: write + +jobs: + generateTOC: + name: gen_efi_app_toc + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Generate TOC + uses: technote-space/toc-generator@v4 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 0e4f7f4..002206e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,11 @@ __pycache__/ *.py[cod] -*$py.class \ No newline at end of file +*$py.class + +# Reports +*.report +*.xml +*.json +.coverage +htmlcov/ +.coverage.gen_efi_app diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..cc75b2b --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "gates"] + path = gates + url = git@github.com:vroncevic/quality-gates-py.git +[submodule "coverage"] + path = coverage + url = git@github.com:vroncevic/ats_coverage.git diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 0000000..5847e39 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,25 @@ +[SIMILARITIES] + +# Minimum lines of a similarity. +min-similarity-lines=15 + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + +# Ignore imports when computing similarities. +ignore-imports=yes + +[FORMAT] +# Maximum number of characters on a single line. +max-line-length=150 + +[DESIGN] +# Maximum number of lines in a module. +max-module-lines=500 + +[MESSAGES CONTROL] +# Disable specific pylint warnings. +disable=broad-exception-caught diff --git a/.readthedocs.yml b/.readthedocs.yml index 54e6559..7405213 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -2,6 +2,10 @@ version: 2 build: os: ubuntu-22.04 tools: - python: "3.11" + python: "3.12" +python: + install: + - method: pip + path: . sphinx: configuration: docs/source/conf.py \ No newline at end of file diff --git a/README.md b/README.md index 1147235..ccedd46 100644 --- a/README.md +++ b/README.md @@ -10,27 +10,29 @@ The README is used to introduce the modules and provide instructions on how to install the modules, any machine dependencies it may have and any other information that should be provided before the modules are installed. -[![gen_efi_app python checker](https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_python_checker.yml/badge.svg)](https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_python_checker.yml) [![gen_efi_app package checker](https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_package_checker.yml/badge.svg)](https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_package.yml) [![GitHub issues open](https://img.shields.io/github/issues/electux/gen_efi_app.svg)](https://github.com/electux/gen_efi_app/issues) [![GitHub contributors](https://img.shields.io/github/contributors/electux/gen_efi_app.svg)](https://github.com/electux/gen_efi_app/graphs/contributors) +[![gen_efi_app python checker](https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_python_checker.yml/badge.svg)](https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_python_checker.yml) [![gen_efi_app package checker](https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_package_checker.yml/badge.svg)](https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_package.yml) [![gen_efi_app interface checker](https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_interface_checker.yml/badge.svg)](https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_interface_checker.yml) [![gen_efi_app isp checker](https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_isp_checker.yml/badge.svg)](https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_isp_checker.yml) [![gen_efi_app srp checker](https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_srp_checker.yml/badge.svg)](https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_srp_checker.yml) [![GitHub issues open](https://img.shields.io/github/issues/electux/gen_efi_app.svg)](https://github.com/electux/gen_efi_app/issues) [![GitHub contributors](https://img.shields.io/github/contributors/electux/gen_efi_app.svg)](https://github.com/electux/gen_efi_app/graphs/contributors) **Table of Contents** -- [Installation](#installation) +- [🚀 Installation](#-installation) - [Install using pip](#install-using-pip) - [Install using build](#install-using-build) - [Install using py setup](#install-using-py-setup) - [Install using docker](#install-using-docker) -- [Dependencies](#dependencies) -- [Tool structure](#tool-structure) -- [Code coverage](#code-coverage) -- [Docs](#docs) -- [Contributing](#contributing) -- [Copyright and Licence](#copyright-and-licence) +- [📦 Dependencies](#-dependencies) +- [📁 Tool structure](#-tool-structure) + - [✨ Features](#-features) +- [📊 Code coverage](#-code-coverage) +- [🛠 Usage](#-usage) +- [📚 Docs](#-docs) +- [👥 Contributing](#-contributing) +- [📄 Copyright and licence](#-copyright-and-licence) -### Installation +### 🚀 Installation Used next development environment @@ -74,8 +76,8 @@ pip3 install -r requirements.txt python3 -m build --no-isolation --wheel pip3 install ./dist/gen_efi_app-*-py3-none-any.whl rm -f get-pip.py -chmod 755 /usr/local/lib/python3.9/dist-packages/usr/local/bin/gen_efi_app_run.py -ln -s /usr/local/lib/python3.9/dist-packages/usr/local/bin/gen_efi_app_run.py /usr/local/bin/gen_efi_app_run.py +chmod 755 /usr/local/lib/python3.10/dist-packages/usr/local/bin/gen_efi_app_run.py +ln -s /usr/local/lib/python3.10/dist-packages/usr/local/bin/gen_efi_app_run.py /usr/local/bin/gen_efi_app_run.py ``` ##### Install using py setup @@ -97,74 +99,181 @@ python3 setup.py install_egg_info You can use Dockerfile to create image/container. -### Dependencies +### 📦 Dependencies **gen_efi_app** requires next modules and libraries -* [ats-utilities - Python App/Tool/Script Utilities](https://electux.github.io/ats-utilities) +* [ats-utilities - Python App/Tool/Script Utilities](https://pypi.org/project/ats-utilities/) -### Tool structure +### 📁 Tool structure -**gen_efi_app** is based on OOP +**gen_efi_app** is based on OOP. -Generator structure +Tool structure + +
+Click to expand framework structure ```bash gen_efi_app/ - ├── conf/ - │   ├── gen_efi_app.cfg - │   ├── gen_efi_app.logo - │   ├── gen_efi_app_util.cfg - │   ├── project.yaml - │   └── template/ - │   ├── cflags.template - │   ├── ldflags.template - │   ├── main.template - │   ├── makefile.template - │   ├── objects.template - │   └── ocflags.template - ├── __init__.py - ├── log/ - │   └── gen_efi_app.log - ├── pro/ + ├── core/ + │   ├── __init__.py + │   ├── model/ + │   │   ├── __init__.py + │   │   └── project_setup.py + │   └── service/ + │   ├── engine.py + │   ├── __init__.py + │   ├── iservice.py + │   └── isubprocessor.py + ├── engine.py + ├── infrastructure/ + │   ├── cli/ + │   │   ├── engine.py + │   │   ├── icli.py + │   │   ├── __init__.py + │   │   └── setup/ + │   │   ├── bundle.py + │   │   ├── dep_validator.py + │   │   ├── dependencies.py + │   │   ├── factory.py + │   │   ├── __init__.py + │   │   ├── keys.py + │   │   ├── opt_validator.py + │   │   ├── options.py + │   │   ├── registry.py + │   │   └── validator.py + │   ├── command/ + │   │   ├── command.py + │   │   ├── gen_efi_command_definition.py + │   │   ├── gen_efi_command_executor.py + │   │   ├── icommand_definition.py + │   │   ├── icommand_executor.py + │   │   └── __init__.py + │   ├── config/ + │   │   ├── gen_efi_app.cfg + │   │   ├── gen_efi_app.logo + │   │   ├── scheme.json + │   │   └── templates.tgz │   ├── __init__.py - │   ├── read_template.py - │   └── write_template.py + │   └── subprocessor.py + ├── __init__.py ├── py.typed - └── run/ - └── gen_efi_app_run.py - - 6 directories, 17 files + └── setup/ + ├── bundle.py + ├── dep_validator.py + ├── dependencies.py + ├── factory.py + ├── __init__.py + ├── keys.py + ├── opt_validator.py + ├── options.py + ├── registry.py + └── validator.py + + 10 directories, 45 files ``` +
+ +#### ✨ Features -### Code coverage +* Automatically scaffolds EFI application projects with proper configuration and build setups. +* Provides a modular and extensible architecture based on OOP and SOLID principles. +* Includes command line interface (CLI) support via a command/executor structure. +* Robust validation of project bundles, dependencies, and options. +* Comes with configurable templates and JSON schema definitions. +* High code quality with full type checking. + +### 📊 Code coverage + +
+Click to expand code coverage | Name | Stmts | Miss | Cover | |------|-------|------|-------| -| `gen_efi_app/__init__.py` | 69 | 10 | 86%| -| `gen_efi_app/pro/__init__.py` | 57 | 0 | 100%| -| `gen_efi_app/pro/read_template.py` | 51 | 0 | 100%| -| `gen_efi_app/pro/write_template.py` | 57 | 2 | 96%| -| **Total** | 234 | 12 | 95% | +| `gen_efi_app/__init__.py` | 9 | 0 | 100%| +| `gen_efi_app/core/__init__.py` | 9 | 0 | 100%| +| `gen_efi_app/core/model/__init__.py` | 9 | 0 | 100%| +| `gen_efi_app/core/model/project_setup.py` | 14 | 0 | 100%| +| `gen_efi_app/core/service/__init__.py` | 9 | 0 | 100%| +| `gen_efi_app/core/service/engine.py` | 27 | 0 | 100%| +| `gen_efi_app/core/service/iservice.py` | 14 | 0 | 100%| +| `gen_efi_app/core/service/isubprocessor.py` | 14 | 0 | 100%| +| `gen_efi_app/engine.py` | 57 | 0 | 100%| +| `gen_efi_app/infrastructure/__init__.py` | 9 | 0 | 100%| +| `gen_efi_app/infrastructure/cli/__init__.py` | 9 | 0 | 100%| +| `gen_efi_app/infrastructure/cli/engine.py` | 39 | 0 | 100%| +| `gen_efi_app/infrastructure/cli/icli.py` | 15 | 0 | 100%| +| `gen_efi_app/infrastructure/cli/setup/__init__.py` | 9 | 0 | 100%| +| `gen_efi_app/infrastructure/cli/setup/bundle.py` | 22 | 0 | 100%| +| `gen_efi_app/infrastructure/cli/setup/dep_validator.py` | 36 | 0 | 100%| +| `gen_efi_app/infrastructure/cli/setup/dependencies.py` | 18 | 0 | 100%| +| `gen_efi_app/infrastructure/cli/setup/factory.py` | 35 | 0 | 100%| +| `gen_efi_app/infrastructure/cli/setup/keys.py` | 26 | 0 | 100%| +| `gen_efi_app/infrastructure/cli/setup/opt_validator.py` | 36 | 0 | 100%| +| `gen_efi_app/infrastructure/cli/setup/options.py` | 15 | 0 | 100%| +| `gen_efi_app/infrastructure/cli/setup/registry.py` | 24 | 0 | 100%| +| `gen_efi_app/infrastructure/cli/setup/validator.py` | 43 | 0 | 100%| +| `gen_efi_app/infrastructure/command/__init__.py` | 9 | 0 | 100%| +| `gen_efi_app/infrastructure/command/command.py` | 16 | 0 | 100%| +| `gen_efi_app/infrastructure/command/gen_efi_command_definition.py` | 24 | 0 | 100%| +| `gen_efi_app/infrastructure/command/gen_efi_command_executor.py` | 23 | 0 | 100%| +| `gen_efi_app/infrastructure/command/icommand_definition.py` | 14 | 0 | 100%| +| `gen_efi_app/infrastructure/command/icommand_executor.py` | 14 | 0 | 100%| +| `gen_efi_app/infrastructure/subprocessor.py` | 55 | 0 | 100%| +| `gen_efi_app/setup/__init__.py` | 9 | 0 | 100%| +| `gen_efi_app/setup/bundle.py` | 23 | 0 | 100%| +| `gen_efi_app/setup/dep_validator.py` | 36 | 0 | 100%| +| `gen_efi_app/setup/dependencies.py` | 19 | 0 | 100%| +| `gen_efi_app/setup/factory.py` | 48 | 0 | 100%| +| `gen_efi_app/setup/keys.py` | 27 | 0 | 100%| +| `gen_efi_app/setup/opt_validator.py` | 34 | 0 | 100%| +| `gen_efi_app/setup/options.py` | 12 | 0 | 100%| +| `gen_efi_app/setup/registry.py` | 32 | 0 | 100%| +| `gen_efi_app/setup/validator.py` | 48 | 0 | 100%| +| **Total** | 941 | 0 | 100% | + +
+ +### 🛠 Usage + +Install package + +```bash +pip3 install gen_efi_app +``` + +Prepare main entry point by downloading [main.py](https://raw.githubusercontent.com/electux/gen_efi_app/main/main.py) or create your own. + + +```bash +wget -O main.py https://raw.githubusercontent.com/electux/gen_efi_app/main/main.py +``` + +Running tool for creating new EFI application project + +```bash +python3 main.py create --name mytool --output ./demo/ +``` -### Docs +### 📚 Docs -[![Documentation Status](https://readthedocs.org/projects/gen_efi_app/badge/?version=latest)](https://gen-efi-app.readthedocs.io/en/latest/?badge=latest) +[![Documentation Status](https://readthedocs.org/projects/gen-efi-app/badge/?version=latest)](https://gen-efi-app.readthedocs.io/en/latest/?badge=latest) More documentation and info at -* [gen_efi_app.readthedocs.io](https://gen-efi-app.readthedocs.io/en/latest/) +* [gen-efi-app.readthedocs.io](https://gen-efi-app.readthedocs.io) * [www.python.org](https://www.python.org/) -### Contributing +### 👥 Contributing [Contributing to gen_efi_app](CONTRIBUTING.md) -### Copyright and Licence +### 📄 Copyright and licence [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) -Copyright (C) 2020 - 2026 by [electux.github.io/gen_efi_app](https://electux.github.io/gen_efi_app/) +Copyright (C) 2020 - 2026 by [electux.github.io/gen_efi_app](https://electux.github.io/gen_efi_app) **gen_efi_app** is free software; you can redistribute it and/or modify it under the same terms as Python itself, either Python version 3.x or, diff --git a/coverage b/coverage new file mode 160000 index 0000000..e9949b5 --- /dev/null +++ b/coverage @@ -0,0 +1 @@ +Subproject commit e9949b5c1f656e5f1c7c477742b1ca37018ce29c diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index f06981b85851d7d22c939b977b1f16457409d907..a96f778e4ddb0e3fc13d17ae164581ab8ad76251 100644 GIT binary patch literal 1241555 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

9Xj=7zv8yFfdUe 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.core.service.doctree b/docs/build/doctrees/gen_efi_app.core.service.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5e5a8708a3f4242a669518dfe6a55fc82d39ac7e GIT binary patch literal 7697 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 G{r><1t#mv9 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.doctree b/docs/build/doctrees/gen_efi_app.doctree index 51a79dc85dc37486d49f8a7ddf1edcdaf95438a9..cc7d7965c23d74be39ac75a15bb313814600c5cc 100644 GIT binary patch delta 1330 zcma)+U2D@&7{_~(w9~S#+t3Z2cAdJ}Ii1QJD8fYMjTWk7iqoymv^(9CY)!K^0Tp}& zg<_!SiHM4VD2SKZ4={(!mtAc51$2rEUOB`M;B&I3MlZyRhUR~s|MT+eb9&<&DfRg; z`ENx0E2LhS}U^hnK7yxV8p+C{uoWWlu$h8=oy&242sl{|u(}hF!$};e(c3cB#ubf^D#LNCSd!sHT!NDc7%sv{5t2nX75Bkt5l$y<6S|(nIy3WvNZ1p`d5is^6dl!g?K6sQlc4<|# zU$KeMqWXx>ht5UUS)u;L zeIL3n_$}ONejtEQ=@`+u)^V^_&IwUX>WkuqE{nX)f=bcqIt0Nmv?4qxI#ERv+PLo6Ytg<9?!lDf e#S1pWdh_jMh7IQ8~OTjjpOAo&Hk{mR(@ literal 29841 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 diff --git a/docs/build/doctrees/gen_efi_app.engine.doctree b/docs/build/doctrees/gen_efi_app.engine.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4177cc6d902547300dac72d2cc056a6d8231499a GIT binary patch literal 22139 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.infrastructure.cli.doctree b/docs/build/doctrees/gen_efi_app.infrastructure.cli.doctree new file mode 100644 index 0000000000000000000000000000000000000000..bcd6cedace577107794c92aa8e2cb95c92bf9400 GIT binary patch literal 8217 zcmeHMS#KQ25vC|!yF7If26VU$M=}MAyNVqIfowQt6w4-LuN0D!B}c}fccyoH$l006 zOb^KokRW-mAtLP{fX9FhI0%rJyyhPmfsx}O$uGzOB>5ddzM6YiA}Qv{4-!COr>456 zuCJ=A`X}R`%(0Q=pPmnWX}h}(ZdtBpi7?hvmS;vi;i~xK`0`KVAH_?$7Vw?Wivm-` zdITJ%v>huDZv1|%=ZIa|PT0uSPlm!&w&xbh<+z-Xlkdk%vZlwCtsGH#rI)(GePD== z{lMV9->}_Iz(W;8riud5Fdduu+}z?_5z`*nVr)a~l5EM!5n4HN*vb#$RF4UtLuwVv z6S`&;YRcn!BGay=#~j-gaVu(bUFS*#b~{qA3R&T}ZH1)qr0MW51QEZ-UEWK7O<9p& zKC~foAUebo=}E=A^eUF~@~oVZ=j3sDUU!-nSG;M7?WW&X(sP?H8_M&XunCKhTBKF8 zYbzPG2S^Y+Y^DNN>5nm8BM71Fg`1;MTTZ9GES<5C6ZG_Y)Xt0?rdD1Yq-FMl@K;me zTk-;#NIna@$mige=ka$De=p$gGIW+NCb}-C?D7hP7>5uw#E#eVy~wpHF_4Cb9D$)c zQw5?LAKAP8J|xfT3l(!c#s=^gTprkomsME%WCjV%`)T;#3EQ0CVc>rfI^4+25{bNS9EOe-rJp~9)kdlUqmb*A>3$|Z67tT?F?qKo-`$h<_T>FN`QFVD`Tafl zAjL=SW6B9X9`>>1kM(KA1cN@U!>75;OP3B(5AZ0N^8k;|zmvF=nVzc z_0fF$tBP+IA4(2QxgY+FqV)6swBEjzQfx z221}bsU7vwbQObT=&$J-sypu@CCbWMJze>9Zl(cRX{-M{xvl<%1pPOvtPt*>kAQcm z68^oy3{A>Zoaf$Z+5AJsOlp4#wf~rBwR^uA9T~aq`TfA|N>wj@v8C&m*-KYn`X;;U zaLex50bBE2Q*7HNdsR4MO9h_Wz@N!q@AkOuG*E(Ht5+Px?2vU(c3J3k)DDhF*I3_+ zn8{s+dWAqvPeII9jJsCT3mDL1clsdIQOQNXloX6YGbESN!<(%;>`mc{fIIAV)OH}t z+qNm(P%s`cpD3Xe7Hjv3y?%qfzMg%Z-JtUUCm3B}0_PumU|R$sp4rR!2eRF+FfXVt zaYX_L%uDL=Wk}g)4u?Sby2h}&rB)WR-9%*R`A|Y)FX*{rI}U3L7KNe{Iae4?f%SJ+ zH{QB+XM?S@?z4AS*49>98~0xUC(dq>Vq#mQ``A6-v7s6a8E{wiA#wekH`cDd1^$)q ztiHXvaUVjn8><_wH`dqLjazGMh236R+gQDR=k1j>cKgoS?OW?_H0tZH$sxAvB)$j) zvxI_Y!$$o+92Y_$$6}Ii3pmge_BO=f$lg8)bJ(8T@!W2m)B-0W!w)=ws@Gtv9p-xK z3JW3Et5PZdTC=&cv(xChQNs(mO*okx95!ETWC`mpdF<+15w1A~E0h9(o1@1@MxGpm zNLUF7j{_?I1yuf#e=bW2|IVN9{jv(3r+|41n6D^c7WJh9CpsG;>l ztAQd=t%T3)R}6AU?$1zu?flT!_U{4p1f+-pJJ!!q)luHHeZP+b)#h2+`0OTW11K-v zTLEOBR;j%9KCM#2r-&!2QU}0f^Bf{AFA)0NLG>)h$H7b`M!tS@jBLJ4asMa`^eBpH zx$`jA4?arfhtx6PY9YbZ{%ED1CO@ZwpX%wso9E|LD!yM*&90tR_0?6kCd`iraXdYYCQ~mA zQTK;WF+rAB^l622e~A8r<^aj*S%m2Xd0cslJLv#0<4NX$5k=`SJ!eJ%&8LlG8abGay9I`N_80{Yo@OzBG-$$2Zz0M!4KMq# zKH0%GXc0u^Aw8oTILdhtU&M@7vy(1p@1Lx>H}rWBkH5{g01hmlX&@x5$8 zHg<36nLzknpbQ617tA@T>ykUg1Db}9;Urg1%PiFVY*=jPCwxv(NQ0>OKr z)Zj8xkV+(``qA5Lj-{r7!rN4gF!690J@nf*7K?5 zE4z#*yTtnZ(3_zxHh&Ln>$!B_Qigo>xxp7hi}eEOfY=KqOyoePSkF4#?MApjfyFI6 zk77QpPoXdL0?WWK8tv<8_p+`1Q6u?lH`XXvOHtAM*+1Uc6~1t7Q5h40wkV6da=vpV~jbnX=I1>TD zX<+6D_b9ky3iRcRSHA&!&IKKFXnUfR+h5AJr<)@R*)0(?Y@s^IH;@pTQuQ3bx2AX- zD6;6HVoIM!O!kZdoP`2Lh*T+X0kIJFUB!0|iOG^f)1?^qV3-2LdM4~~0PP16P#wZh zr;_LN(QrJIr*|XzyeTn!GvU4zZ?JM=Lag4xeac>PO_*GIWN835B#;-`8!?dOg_D#h zFvlKZvwIY~j)&P6NkkWPTQNcgw<#77+=m2G2!(H)F~PNE2x>PBTxbT!yNT2%vMWi% zs?$kx+MYfx+-`Pt?#i1HEsi*$`RRo{o`xL!+m z_vGfD{CqFr+Kc3KL{FB_VEMBAO!ktsm`Hzt_HQDUy(k0u__??Ol3x_HF)zEAw}&X# z@k2UJEdmvqq$6t0A2jdDgT64Du2TpHe7u<$S3(tCW-vJ_ZDOZOFzP7cTC$aWIDj@iuZ&fUy- zc4nEGweQ+A1)(&t^eQSc6$MmLwIW3n0Rk0L)I#}H)QX~ts!CB2e;|QqA{0PCrB)Su zzVFA(o4wt+-Mw?_NQsp5%-i?t`}_O8@6Gr9{J zTnnnry5+~oE6IUhNIslQu#wQb90kp=Y9(wFYE*5aLua8G14D$7txhc>=!dGF8AT|>^MG&G#nW)D*~nfN%<9F^TBJHnHWZsn z^iyK*vd8Ql_RaQIdz{s$Yi4Xt*Q`s^jg{CA{ONluaS(XXG_XU!5p2^-PHZ<9az&VU zG%Y5qmv=^EIg9}F{^MJk3-%^9;P^FbStEy_lzj_ev~LBXZ^Qq$*ZO9ncX9+VvpPBh;cEoXCab>nEilO8Bkb-m1kvT0{LNp z{HV}+_Q2WCZP~PGHfXGb&XOIM(kEkL_JDEl?t?#NJnfk^r|yKtslcyVmz=6`$nva< zaTxez{9iR6UaFgpSFQ&2!zGPkh7%c!p=B9Suoz#4BAPK)f~HY5eIvAL;A5d{3@0{B zzcw9&r2U-56%>@35ZTa(ZOb6ujEJiA^4R=S#$%Rmg{Egb*9vj3InxT`hTgceN!A!@&$?Nze#P{P6-+gC~ zKuq5?OUl^3YnEEwhOW#~N749IWe(WQMW#y$L~*4|D1Ns`p|F2H$MkFqY-QG4PMV9| zMCE{PgZzA~TL+XX!&VmetQ=4>tPc}-x)aLYH|H+~rAKL8afU<7tRn1tO&oH8L<#qVz6 zcOYR0v{g#yMSK~ZCq*msO>7&2Nmb1x3MeKJbQq;yDv^UY2*r4`I&2pGPAq_tJ*Hx@cg0MVnmQ;j5|4s?mRqc98&YD zL=Cfw38YnwI}aa50EEY|_OSupB2yynPi)?_NoPA9M$wl(^kzdzA)Zpkb;~WCB5lJ~6hF=E+%wzgs%> z+*x$xK8im?g=5t3n43|-JxV1C;1LdRE3{j=2vRU~ALGy2JU>9Kd0?^qJcntXVv@tu z_geEiTRgwLe0~%Ls#}Nvw1nZ<;q}S0AeYh_=_oqk_oxw4B_L&WlOO`=no2AF21O&q z4eB++;&LGt*=B#WKwc7v3h@tTRRkV|rmHlXJ_6dS)X?S`H9nrQp|7klbYu0~ z3a6zD5np=M0<3xbgl$34mJMN`c%=dBCv`Nh5}Vx=h0BG#g68Bk5nJX|L zHB8ze!FCWdOu|Z}SAzu?`(H^;-Lt_S8OHq*jXubR5eoIV<`RIEuq#w0(!^2X{s-#t z;*TcS!lECtngqek)W>*gOTch9QHfYzC_7pW{8-=X%l1vua2~tq5feei8DmCq@yv4q z%IBn>-N%Mx6-|(TAP2L@1?Jq(qaamEdpmT7h{}+M{TYO@HCA!AAymP4{;=gDF`TK( zVfwMa-fiOwNT>)%;*^lY9EAv9gVfEKy9NKWN~JC@DL1+Q3V?JaZ%h%fsmF$sM^o#5>8G{Q3!(TGN1sbxpECMer@o-_|Fc)&z)5Q?QRyrlJYlCj$~ zO|~Pu>8v8byXMK%7U$dNVuWpZ)FJg!a%CAt4)=-?_aQ-WL_BnYkFf0vUQoSQ`MG8g z>%RTje+E~~WP9*4B?JFGZ&YY0gG~@)$~fkDDbZ=)DhR8#h1edk05(u~wX$jk4T>VP zIub7NvkrzVAr_)XimAXm0V{FdGT=gBt49uMEn7J95QGsrIAJzuhey>T4ICM9kQS)A zh|okaOrV8sX5c5=K`lz5sL&R6rGoC}XfNCJoDWhjU}c&E-x!h*Osa{3;nf(CK`ytN zUD))|&yxgTq-vl74p0CF4r@eviU#UMz>5cCg}o{@e~vI~X+`zsM0{>yN;PymYg^Te zk>Q9vGsS90sDy!12%Kl zTaPl47ZuVtW3G>Xiab85>WQi(>1#MN?lV+1)dm9?;0$l&p2a_kr=;Y#7ql`qBn^Y& zoAf5Kq?Ti1vEKd6a~F+tChS=kWt^E~WI&!&gq=-2GHk%kgQ zotzdpwlPRj#NDXwGT!(`FT7#z&veAsSMf&<@W(cYs0#88>n{WSyH^SHgS~U1g0i2c z89?8=N&wy4hlD7I`f8hj^!*J3sVlAiRSegqRww<~n^qr5wR-VfP7%yw?tB+>d4j5@ zN}9}uwk+#wGtj+`0u;Jop6DuGN&78Ey4b>|;C)>;D`)ORet$3pCJhJOh{?5D!*Q*Q zjba+P{%HTrJ*QVG>BEV=5WOhly$7}ynav5;La**3{^X)US!k480J#lvU)mM>%r&}M zmcts~Msjb{(e||$s)0u%JGzL?RLf71YN9(yUSgb z$Iui`Q#ZRR=ZZ%u+EtOG=wVXfhah$}BnhO&SC80DV;&MZdB1I@WzlJ|6A zjiP;!wy{eR8M)CRAQ`cd&H{YsYFBg#CV z?c0hxpT5be26}t6-7SScY!pqVibvTvnmkxI&^v@CCkuhtD4JX-9%bWba5N32#O&r zuK1}b_lxw(j|A%PelR6I6UNa6KTwaOs(6Y%30}crh8^-p^}Yu+5{->FmZq%22TcL-#A zuCvwgkD+uR5&THsGyDIKplRm~gPtNE-$}b-zj4h*KEzHbed3Pe!uhbr)C*=DRVY~j zq6*lE7ay;d9h@F9m#nZncane2dP2PNW!FSkp@p|n#Pl3mcoR*#3@!Yqc$6YjC`W0# zDj016J7b;g14XRUw@IAri3;m*Fa^|^p=jL#Y-?;XCU@T;gtr=-Z=vw&8JnEI3rlks zs30v(D&ES>OyW1q%%}-NX?|NWOW$TjbpSJ?y6w@-xL?K`+(Ve6`=|8u5Iy}_`t%h% zU2*@M|NRU8_b>V1zv6%Yn*aSO{Urdef;l*xo>J)39vtk!9?0W6>oy2GxIsvJTWt}B z6;vu}loe!x{WK`CK{nx3+7FC_OoAMxtw|V80nT{l#loTbHU>Yb3(*?bUxz6W(DrBwGTwG;1bwS1 zIDx{eXA1J7E^NVXVnk^RGPzd9;8pyn83Q$C7=x2EdpOg58w1q=jDhO5FJtgWn20b2 ze@su@81Sbbw=tN_@AFR_FnTZw;?xfINgvReIsb8jmdT2*5c1=#+b-Npb|K#7Kc2~ecmIj-z&lPqYYfF<#!3cEw6E-dSHUPZU@?F5Bam@6Pi!8ur0O4hL*6C+Cy*0`J zI^GLFV2UyKakMDXK*ap=oG$_1>fyBTnKTG|!+^=s9)<%rlYhc<)Q{W<|JI(`E#Luwap?}cb>BNA=S zzx_js=?(RBug3YeZ)2*ko%y}h_UGUJy%4Ix9b7p|Tl}@0fBRwKD7vBR>FnTo&%d?B zQ~OgoyM}}TXfLwe;HjHaI^)Ho6vfwysG$zeWE$wM!h!lGh#F`e%eJ;OX@4%@{e?hu zL6f|3)uC>?IBc(Z-uA`ekhD*oSA^L_SFH&D5R!QHR)iH$M63vx@FZ7+-1wkCpKTu{&?}F*AEp-jkJIs%jFeYx?f=WY%ulT-e~B86E1#})MY(G2fBzZKTO6FG z^b5!`hg?F&gkVNad*rc>Yv7(qo__$(Ru~>gIiTJb@-#VAE52o5L#9#7AExBTI);Z86eIM+q2Nz_LV>GLP>ud+4$ne&Nm{u9!gbt{NQAr%kVkTUk^R4kXEH#*Jp2 z%-g%>*$8kbav>#n!95Sii(}Rsc-bBXL5!&a!OIETJdIB*#1tq8+(lF<$=7D+;cX`+ z8KdiL=vPc-Kpf#@dl%6S90yDL@nyD?E&}qK^~y4`>eQ2$*(l|GX;jGBK*IA3(5#*+=?9Xs=E2U5l$yK%+C-48(L7FM!NFMSSslb z$ZFPt3R2Rd)^4Ol3nB}N9Cnk@o^eybGA2E$}@gZF?w4}U+78(x*`naLsTf9-MwThci~UOMyQw{dq*Yy!l(jhO6EJ~=`?u` zWd1#eOCNo>blBFV6S*#(wQ}h|7T-hX=K@@cowyWRX|kOc&Xg*!s}ZK)7m4s9!J!uywToV|9qXCK*`+D+L!zV-T^di6^n0( z6HKx8B{tY-R+hg4et9uD1+Br4x>t~JE`p$l0aJyWE8d_*Ji2BiUM_i|cU1 N7i@x5pTdVO|37Rht>gdz literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.infrastructure.cli.icli.doctree b/docs/build/doctrees/gen_efi_app.infrastructure.cli.icli.doctree new file mode 100644 index 0000000000000000000000000000000000000000..06c250966a03cba6a4f013005eb5eb7d04f0bb83 GIT binary patch literal 21729 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 VNw3z(G?wc$AEc&}oSwK^`CmGPETsSd literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.bundle.doctree b/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.bundle.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ba65e15964eafe58d147d452c95aa6fd09bd5c8f GIT binary patch literal 24668 zcmeHPdyE~|S>Lt2uj{vyIEmKlPMWq}C%bnmCsggmHFh?3ys^Crw$sG1qnp`#=kCmS z?##{1Tzi)$P!NS!oS@K5p$)W%5>y^4ZK?PJ2|Ao2Uo zW9H1=duQ*xUW*#VlK0M>Ij`?^zVCeJJKrZpKK(;44Do+#chs~Uf3BW5t`SdpcPiFgbkra)popEX!*(W3EM^0W5S1M++S$6z-Xhw0^s>ZF*Dpx(H99eOz zSzd1WHP12{L9K-js6TYK?V`0x^W?n@Q7=RN^zz9>z&F}70Zp9Pd)Y)K1>fGvMkUls zY@6r!RzkszE~abml* zoGZe_qd75Qy?i5-mcs~;A3U?AwQLWu5y!7ts~Uj>?ddX;>J z8J-bD7Be)vVwC_|1TXy3puC{ra4s)Wa}cRHE>d$TK=Z^pprXHG1ogg%2EG{vSSLBU zOBp6L{7D9yU=xrsb0svJw)T}xq_a?1(@HYLnY|;fVo%wZh@mmDD-hU1EI+4J1{79d z(DaO_TFV~ha@MI@ zeq}|#f!qT)E z(}Y7KXi}rYnB|(`nV67jS8fM4gQ{jYKA*B3Gy#N-z5wTS$McM3%Vt`!AtZSC&$7wV@2cQ9wq3OqKm~rXc$@2@R zQUAoFi)R-vUc#h}Q;QduPF}cRoO<%Sal&}&#QBSh3s0Xtao%|9>GMxLdEsQabOAWo z0GD-6i_kJ^Rt(BU<;EZM% zK%g3BW3g`dK|EtbnAcG|j+^sybJwq5FR%EmauBY}fyhMQXzo~9u3k?l-enUhyQUJD zm1Gk5qrFQYmM$)VTOlVOhn!qiW68DP1@->y=XAMwS6becmhV$(+0Q?&+omlrVO$kPY>QK2&#w$3`)QR_G+`J)~^nV7}|%WPyAJ z;`ysRMSPNOdWJD6W(V#c%Z~6!uqgOwYDJ zS7yECq`BBkR0ila$j__28lY4ey0W-uWq^`mJx<{1MkqV5=+}eNW3=b7B5s~6oLz)@ zL>uSzYJVHmRyY+e8MJTphC8`W;mV%&uzy;l?AhH#Q?vJX|DMh3Z+oAYqQV}`>+N2t zK$QVRZ&Vag#oy-zYtK|#Ui!IXDmvi&T@1|+LM(xwz1@SIO^Za2hUj#i|5rE$G zVWsoklMeoo%SZ2z;mDdd4slW*IyPe*RoJRTO_Pw3Rxu78I|knicc|@WBfLenPPy+J z9vaexM8~}7OCNgJP%8kQQZaMOZJp#z3O0N_F?A;pmH~H$noRQHi{yt*tTw!P4ig-S z&CnuBS_$>=UeUwBbZqwP-{^ zz_&v_k&3rsHmxL^^K;Y__knhv^Ek~}On98e*=VlM7SDAbpDX#K8W!9UZT>;_$N#@p zqI4k=%Ww*|&Y{B(2>J}My&N~dcLk1@(2RqyQ@#BREi(G87SfLm2kRG&Yl1`}eu^}7 zo(G$vk;fakFXBh3Qnpv>g?U3Mh7@kj1!0{ljJ-X;fm zgR0kzR{vN?t3r7Go+H5h75rpu+F2I#%v;`gQEQHuCoj?xRiUnw4? zXz`b$)OZa7CCv`IwZv1+*^E0Ja!(k5fzBE2J&xECO){eOgfj_cw{g`X*HD7c-o?cVPgN zLRAo*1Cu{tCE7a%%P#yoNp5?~Mh7zHxGuFv**H$1J-(q3K$Q@xQzc@>QR4n3=E;kH zGC^DseaLDO90!PgQ|S&GAl*wP!mX=33Dv-l^N>Haf*+6@X_>{8Bhzm1yu-oV|m6$R_}24vz}s|XFK zIx$Rqs(=UqKX2`Ga%wh?Ah<3S3UHb$x9+EIHxCxDOI%UpzyokLT#kcTxt!E(i0+QK+rAj%9GoBHq#L1JSteSu{o=@-5ro4Ll1{h@ zwtd+Ps#hy7wt`sqTRuC4HEBKzd7Lj9`1g|X(i^kJMZ^?I7Yc%Bsi8pV+U|VPgGuH3sTXC0KGzSS-7{2s(mhQ-Q;Ot}YpmW9hUK8PrcIQ6VIY#e zqzEV2K#@t6_CU^;6uqJiNtsfCTSS~)H3(8v+XpqT`w_*Nz4NIu-3Mu!(QBn2df5lr zCpq0(d)m^99$`#gS%Oc<(qSyUwv-asF_r>JTw<|7zjfwyuW$B*I~DIe}xt&EMy z#Ze(Iea}$yMe4j)Evy!vH>puNBLLuD(TDxeOITzFT!!6cttSCgUOJBS-?ajNkfs@? zey<-)*#|Qj_}zAFo~j*aiY2ud=kCGcQHq?qa+HoP$4(C0 znZlv;MJ%@`-{_EHFo!MqUfMV7q*djqn}jWY=+xP1d%O^=Ug*>jgI%4rONHYNjK*8z zv>gP^ogKH!g<$u9=I(kbzoN-7qijWUx6{ykg~ zS3&GeGC;nRcE!GO`xqb!cOA@+*}ei*`>-p%kz%S-7+v8)`gJtz(XRND;!%q13OPzg zt=K&T;(LVy4y+b8F9c!(RVbj&6imB!prew?xZeE(g1=o!{Td2ywUS!D6bKbHG}5M` z)N-H{)G#V&3Q7S0{qh@b6e><$eltaQ9-0?(6ilkDikB>C=|B<*s&E=hwfr7}t1 zGi~x9NVG}XR3>MOM=4S! za+HqBq*GAobA>|k@uqTRx6PXi-6D~Ka9b1 z8=X|}l^XdtYG`UifdDn~K7xjyI}f@j{!dl?7LNH)Qvd*sciyti~Lodp&?3Wibd znR5A6$xF&poADKHCt`M7-M3L~Eu85aDcU=!s)1K_F-*ZNfQ{DduVY@&gT1&K zzf%Z8@zza@(h*ZzAs-r|-YFbqU_|jzHXBbf>SS(sMuXtL3L)qPPrbO#$486o&BA*C zlI9($p`ygHwP%0fKm!v*4Yb)b>FmFKpb&^2Xws`y^ZP{nNw?$b;(n`le`oF{#LWe? zGR?eE>u5d-kqj6awwg^`tWz1>?k@tgTWpEBPk>Is^g55Hyy>OpE=@0XM+c?Luj)#l zvs%_cj?YVx?6{?$wqHJkOQP&ni5s;PnbXC$n^{G)LE zD@3bskBvh>&Pz?KcHZheLub$rI#mdWM~$YG>L(Sbhk%IbX?!vBSQ>DL#8~`dxG%2C ztGrlX##}NB7;^nJ$^iOAKLCM0Cf%3OqQ_th0=#`2(Z+HjVrSBIc-4)=bV}B0)#8Z@ z5Mdx}*wV?YC)D{mg<# z6U(uY1jYSLH0}}8H1VD=odQP#5YolAFR~?aMw-ma7A+OoyPe{3s z_3adjcTy<$(|}MQQK~$t%Rrd6kFq0hbIu}YdKT$Xahj;7k;R1qXO`!@oE6z{X62<1 zOVORTR>@U2%AKN;(3&aMBQcVNc!&sPB~{0&;k8BM4YOUsvwrNGG(g+)=S<9^z^tX%dg3#r4^lO<7luUpeRf|BP z`8hstRzap1B;Lf?GMi|{_1O>4@_R=I@*gW!7zSa*M#dNq*Qvnt%%Z zlCY_^FKu182gYEZE?VEJ8P{*vy!qT z5X%c3aAWA39(A~zmvCk$>SsmG$ZFMs3UbGw)*jr|2_mbax8z(>jVsrj$f0x<=nL_s zk-6*m_rI{-|CU;vSa0bC=iRqBoh;E>sPKRsa(xZSyIB3TN0tAXU(kq;ZB z60c{5*Ayp@e zBP154Y|lJhXTt8HntTGNSwTi(kO%iN5Yl8dXW#$9hk?&sVZGYcJ(XnLe?WCl38jf; zuOb1GW5sno1{Q=lJ8pOo--*~JI+SuarQtf~qM|J5{xjcclu#3wZ;UISSGGYO9Gr z56UXeQ-#ZA;0CxSsA5$I56E?4A1xG7Yq_l&GChHJy#VQUX-1T{`)UG~X)IecNbnkF zU|UE6af97eMXjq9i&7z0kpCRHh$wsaE0jfq-~9ludUdg;-C$cS{~G20X5(Ttf%t+G z5vt-qHsXr7QqTEjFD3=fim}{cMaMlJTFu$MTq#`x;l=2!p1#nPNJ=J->SI(Wp51>U zz4;IL6R`;@=8-I@#6R4K?E8?Ln}3IDJc=70qw;>gTG!Q;!OVSkljsZXsel0^h>936U2=29+tXss?b{u{ X>a}VlT`ROeBHuT(f?Pm_MP2@1R3~!% literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.dep_validator.doctree b/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.dep_validator.doctree new file mode 100644 index 0000000000000000000000000000000000000000..dddbc27b28a85539d387694ac4fe616663d9e4a3 GIT binary patch literal 21869 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.dependencies.doctree b/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.dependencies.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f6d869d3b1f9facbc4ad50a589aafb079f3a4914 GIT binary patch literal 17553 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.doctree b/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.doctree new file mode 100644 index 0000000000000000000000000000000000000000..12534c705fe470ea14e214c924a4f3210c26ddd2 GIT binary patch literal 8235 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 M1BAIuJm}j00;~=D5&!@I literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.keys.doctree b/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.keys.doctree new file mode 100644 index 0000000000000000000000000000000000000000..46d948ae85914df2991f474af9f40144360173df GIT binary patch literal 34818 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 WtIZ1e-8zNNLWSmwD71z+yZC=tjRt)H literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.opt_validator.doctree b/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.opt_validator.doctree new file mode 100644 index 0000000000000000000000000000000000000000..172dc4b5e753a68616c7dce878fb866254307330 GIT binary patch literal 21444 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.options.doctree b/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.options.doctree new file mode 100644 index 0000000000000000000000000000000000000000..66fe9fb988731b78ccf7b192d874d9d28a4923f6 GIT binary patch literal 14779 zcmeHOU2Gl4btWb8=Uz#qWLt_0ipr)=BC6rNH?WhSVN}7gEZMAVTBWGivYo8=?#|`z zYVYoPe<%`-)i$kDv6&VIvPsjR4bZ2eFGZTS_Ms0gg8a2jiWKNmQ6OlGpg>WeNFVyv z@67D%&n0=uYpFm4Sb#2fXV08D=gj$=Gc&(F@#SxPa!mZ=vvFuU{$|^-EI+VVobhQZ zFw;Kslk7{``QOOi$`*JdGVa7d8ksEPV}LMi$Fm~lXP?RV41p((7q|2NQ!z6WC-95z z_JloYPkkm^up4|LaT1SJKJkyQGyip+^_SVm%WEVj`Jw-P(>J5T9J5O{G1vLYUd#m>5u*lD-c1j6HvB)HnX zuTa}j4A#$HJCt_qF+Sn=7Tc`Mk(@sJ{b1Gp0L1F zl<|+rdHR%AA$eaqGX9k8)*7joJ-L!(Mrwb=Zk1A8vCm?zpdzytB<4G$J-X+BQKi;Z zy?kr{NOuy}uR!vXFABYD=4#juw}c9kP9I5FRD+$Auu?})bM>0*8c4h*Ct8wd>?v5{ zXc_wO$M04jDpKs!4XXpg>IlQ?lpHOQ{$M8kbuH+PHgQm%aWHm8NW57Jvm(M=iyFKE zTQk-pBeW}D`JiO&)3v5jc*ennr`z-PEz)a{_BsrAsH9)50D})U6!>xuOiVuwrk|Cb z(w=zbPY#WZT@J#n$XU0OX7QvgTt2To`Ozmop?%sjET`{8+G^mNY{N0N3(RA;lPK`p z_-`6dulEhdYnws;VzV-XniFfih%qe=ddVHQt0iqKNHx>&wTM|zZ0V6SC(#Vw>I4zF zN~gDlhGq(jj#Z2udH5v9`Ki*S$<)8?G}jEt}d^wT)A;W zyZX|qc1gQ_X?1P+^34}6t!meAu3mrX#+7#S24u32EPG-uBBog^!OX_(<}FNI41zpM zvyBag2{f6r0dfq@gzhNu4Vxb?@YkEf7Dk6=gi!#K>bJG!p5_P1q85X$3wDx(OP$W0 zJ9paae%cPA^$sSPCOGa~Z08>AmzD1FMxn0CcU4+S3;eZ%TOiz*u)xExlV63Myr#y= zy}=vm{gpqe+Rb~`@}9N)j9SZS{^7z(hN@{+8q7OYgF(j7Kmy2+Zz7*AlM(*-USU8P z3d;G1>5(+(qP(f zps=*3Y5ai-2mH*i(4`DwI8bR6e>S2~*x#rrJwJq4Sz@bM^YAoLC7?%OKfim>1eAag zD~DrN2`B~Dr-{9463U-j_Ip9|3X;h%PASKVkyjuAx%|R19{OS6W66ee5{XGHGNGPh zid2p=4+82UxAWM}4B-eNR^pd0rC|Q)U}DafH6kydW$%xMi;8Vv7nv9fRx^#%yPt*maOh5lrWg(503{COzMGeTcp z%4;+Wq7FhSdu9Ey@9O`2#(!xP`1atq*|0*u7(asYmRSk7lG_DTJZ9*N9y_STP}Qjd z!%yrSM3l0|sIGuchL3Dpm`=6VldoNPB0*(pNjoP*aqi-xc0moI$Dv_j^;Upr=Pq7E zDMjEt%_l^U(%-lr93LC2>ROdxiK{yFxTee#PldL+?Exh9)PRrQ$&6}E2R7<1QkOX~ z{4h1-jm^HdBzQt;FpOBtq79Z2hM$)h&K6_yZ~n}eGIr4_)HYxxWBiz$aa2mFWLL@D zMk-fHrwVs8Vy|*8pD*OOTLo!>AB85jFcE@Gew?TlIwjs&b(-DFK;=G*ADXVKgm=y@ zr^~%UEsFhyV1IyjS0fNA#-85AR!W**B`{Im+@0oWqFE9=P2=oG>nlTO<&Wk?ZCGG? z!(n$!RJJods~%yrrX56;8QjnDQNo@W(K<^|Y1UH+`YGX`oJOWIPnwIp5aR|R)`4IUfT+p^{itiZxk+eDu=H4$KT7xwdbWc$=pNc zTfm@iV&*E!!squN1&h2X4>e>|)+#;SuhA&dSQ-Ug6)L_yKtc0nNu_1A@l^c;uO%4A(hq`ZsJq4zHkDHS=_pcl|C^xa-2b9K^Gd$3QP7yP&<(7u3ZeY< z5k&Yo?cIux#Hx!~t&Cj=$v#_=%z~Q3{bp3D zl(cZ4@ZkPuO;aZ@z<-EdLp`ng6Y4eR{_6oif4pOWil2K|l>qlqpyb!{SzZ_=q200A z(h7%$YQVGig{mzHsuu+czp5gb`#6YKs+t?1J6~zz?;ETD6o_fT?%t}x(lHX4tI}ch zS}NyfNfY*72DuinxePzGoUXo1%a=Z{7O41NJbbI_LWp8@={`}FV(YGv#5x@+!l?}w z=SP3q4g!*~&Z73RtTVkRUxl!#ii0y8vWlaJsgL7BJE}6{Ma0HaIVW);$laEvd_3G) z8hKM1bRU1xuG^{-zeoM$^Fs%5KM53j6=3pFe!ntGzFs}eX9i?Za`n#80jnOpn)u75 zMUnWszlA}?ceVOm9BFFAf*}r>>7c-TfK>uHOR)@?b0yb%yWqM_Q-_a4E0 z6L2Jte2uL5ft!DsSQBdo_jdqU_g=$}t+?9&uOL9sR%i#~(t^~4M&XYK3kPbY_}9eF z6p9OCrRe?*y^0D>_1zCz@=zJpjDDaVXH;{G4v=j@KaS-e)%!_6-#npex=>|MTy;lBz&kPhb{CiF7|MQ1QQf2qRq~t6f6fNA6Z(MxDlkGOrGx%(*C!Q*lr=sy^GH~qD>yt{s-R<7}KT>=LVKrR(*4q(|3!f@8N0N{l579Tk-pM;`i^x?+?W959xPE)Y*ITsZ$=8Rq-2~lshl=o_So( z3$pdxMR2iJaB;KXLOi`oE^sP6H}8^=1^WVj3Z~OSA*_Y7=m_rBQ~M}OJ1udzxRoC+ zZsnz6rZiu4S4Y|R-5FMg{tb2H95S<;*z!Is*HZQ(tOJMF>kg>q71TL?dyzku;KXN) zQxS9`T%4O^u{_5=kzg;^Ls5e_6%4cRn$mdVe8x;8x+S0&cLI*77I`;-Pv;2;u2Gz% zTLj`>L=UHWv4LS_eDc$Vm*Skfs_yVfoJkGSBwMj(S9k*w#fCwGohiKFXf2BqqaWhs zXcPnqNQJmJGd|wQu*D~?W1s-%-v&T4e@!C~Z^vn)h3*;9SCBFx(quWzF6*U#?p89Ln*>Qn(l#~29bWDAani58uXo$6vs0L);#yhDEZVTB)y zSQtc!?%}vC#CeD}ZNn>GC-_OW=|GCuH&0^)G{Gk<)=k%eZ-(|1XyXNVnbAi}1JhwL zqMGP)e8^14@j0AtMzY5nY0_)`VoPjwovDA+Sri44ZljdxVO@^v9N-PRV0>0ezJg^! zV9EIWz?T6O?iXQJd`99eX;8h-)ISV#<|l{;=w56?L>_p`_;Jth*HbKPA#vKKJcN5S z{85|;4kAmp7;Qpf7`k4u!Y7gV_OPP|i8z*02yDX57-@@pjQy8<<3UqAk1L_3!e1e$i)t*92%tYUCVn?d%td8^AM%N=o zaw?~ksle=xfteWDxm=b*YjQBX=XhWa_ef6D69z%zBWx2J*uZ9C%8%j#5~fPNUK{5p zMg7!c{yG%V!)f{?d-23MJ`=J~r!6XRwvw2^9$pA-2km4U{Bb%}7UM)Tnq%DIpvyJl zRCLBq5u_jhkUDOEV0ut($37MdTOa!9#~{y{sAmqKrU6=b-Lg!A7S zKNk0~(<*lcVhHL{@h&zBU|E4_jSb5PkE^#+2cLUqd zp1_1(hYsX^;Sq8aaoQaKLsjk*gKorq6soNP;rr%{2EO-kP*bE!z+x(OXsM|WD z6Q?>ZoZ+YlU6#7XPv%#~psQX_`m}9+nE4xY-HK03Zvyj$CSvXAz%~+H79@n;oCHzO ztVC>VK+ABs>aC1FQfsCC2GI;`z2b#V!P4C=fKO4Qe0D!ek@GeD#JoYxVrdB=@nJi* zKY*K1;yZ%l1#Bfu=G779*VPVnxfZ`5st&b?G~vXEirGDi|Nnro9;%Bz`Oz_P)Ib~< z5v3KE>Mt%OrY>c#DL-CSY9Z$1*g2Mw7owLf)cbhu?Q* z&diznn7!9_psr%ccW2I=$M=2b`@Zv?-+6p`{EOzwnE1zchaJoI)*D8%>G@3-CVWTJ zH{&+*qU4?A$j>G}lg#m2U|bLVI51hl$B@IcY_}OOFL^cL)0923-LR3BpA4B9*}j(- zx5ljrYx31(&Z_b8$c|j5eBw{6G4G1bTJ{y)=yV#k*9wd<3Su*g1J*EIyAiS|?lc0n zW+Qz=Yx~U@RZxwnaQg~dCrU*i2rvu1g`&@>`rp~E7uBM8C!;d5K#Rcnlo+g_8cE8Ud#pmi^JweEx9@5lcK@c$wFKSF#%bb&3n zo#Wd(h8-mQ@wBI&)D)UGCnVvIrRC;FD`rhBMTrqx4_otvAeXGe=q{+q?k0rh*`$}c z3q9&#jg<4Qu1vZev9^+v?|WY8UR~;9qq8COkP2^)SWwD5k!DU6^&pq8nZAL>b7^O% zG#UeCODvs*PJI1lbwZKjLfO0)U|tKtycQIe7D9>#9m0r~BP-_K@X`$bWuET9DY8!s6nTDqYtVv!{cqYw` zG{b8y_yPG$yS0IYdJMx3w8&x_>1#+mOfSzYUDTdo9t#XtJ0GvQpyfH+WM0TLBh)&S z5?ZXOt!_~E`Wb5dLe{!=#z(CN+162w!6%`CYb*%yu01Ln$Z9*P`9Xcoh=|}o^E*`N z2&ml9TmuBja*b|w3$B`)?Fo`CzXK*L)CE4T+pepvGA#~SD|U}+@XYm>&aOQB!o?Ns z#L{K$r4!4`Cze(&KZ%_1r*WjQYb>qDZg*T8tU-{0;YAyuxc>a<i_e`{*3MsCKL5gn(~bHC$Yc{)wnSe9Olz_T zJsURam(g({2y&a6Wn5$EK$F?mK#rlA&>bnhs{V0(Z>>&jp>=3RC-7lZ?S^)?rFnjI zR0~1ZF)NBXiwg_auU~Jhd2z!J))vso)WPAx@kZvwJ}z~a*K&20HmIZ&7Wk>*Ef6kD zSl~9;$?LF_S7ck6KX^^PU;3JAHy>Eb2iEcfYApx(gSnMds%cUf%-gELAZn-~5M+ou z5n0P<+ZyM04;lufF%Hg9H1$=rslfvtp8yGQU?==u8f+qeabV*ViM$K*eH-R`@X`sG z=?BA-9Be-rmb$}+p@yY_rtuXy9PmR`Lzgs&>P&@E{Pu`OVSS^d^n5GE%A&TCHCKm; zG63BU`}xIT15nD0v9h{m8GzEj`V_IJ2BG|!vtG-upGGj*31f<}Lc|paKu$e(77y)? z?_uVKa1wz@C?cVjZHiEiA`i;6irCI&y%EB8s#uCYeJKR<*Tac9o7#xDfTq8HUKJPc zledWr>)>svs^IpYhUZqQ!5(n?onh60GD9@OsR79`Q-kUP$CZhTz#Sm`hP1ko=KB*N z=8Ax1_{X6zCxyN&OSEQA03sB#D-)Q_QGg=}|A~KvsaGotw_ZREA}w!0{J0#?`wSjd8FETI}coYrtSZ=3(#9e`@|(=Ff} zu$M8uGwpPsrv&0DFNEz5c?QTZ< zr3%{l{tWttSvIcO?79j3JK?+KBP`jp{6Oi`&72|y^N|s(u?TRqo}!p##CB8o4X80H zv73o=1*D7E9B5p^M+8Hu->!D^o{F>>6r2OdVGxuH{2GEyc%8)SuQ~wmlafa8iIkg> z36ajrn&3MC%($Y%Qr_x7v`rltU=$|KFMt%0{FwysJAEi}5;KR0nb}QvCQr9htg@+tm;P;#~0C_BGi=B-{q5g}nr3}B8``gJZi{dQ5kTqt_ra~mc?=Y{4 zaZg`IhbcR5h(-03yyrU)aO1bhTS{(m>ip<9sV{Xn5L< z`E;Zxbsb6XYgEmQ^A-H5iaBz1bAB2*#oV;%V^ZiP&Tmq}BxkO$n@JzK;W08y#tzRZuXYb^30g@(tsTv}|sD)6_`2%8B zK;{mo$5fvSZT&$Fd7W=%)JlUWE2cV_WUSud9on~drp`uyrm(IAha!i!Qd(iie>tkW zoWDp_1G73+HEMin)%DG*`cK7vREjt3#Wn-7-3%A&8vebZnE}IePfzD>+Prp3yoUgm zF*eI-U6vO^mM$Utd2JaBu7MW{Fk7z16v%u%WwplZEt|Q`{>y1_cH`o+;_76CotG3Y zUJ02dGY+II^Y=oI|2c{ro$pib8RvWSXI4rSh6(C2;#d9VhC(8LX;`_vf%(kM$c&bd zbZHjPU)YG=k7$DgV(l(KG1vy$3vG6*>TT2jq% zH1IE?RHZ+4{+UY6INuo}>)-b@pt!P|n(jOMQ6>M$l5)-+(dI^*@AS+MG!eUKsSCjL z|M^?2uTdhf3m5Yyc!4RpmM*$}00?5O zt58|#ogYILgD?ncugbQ{Q`ii4cqMO-|KS}8JCs$9w(9_da4xH&-qoe{>CB=lweX&A zFvm@>~e-vVphp^5W#B=$Jbl1dE@d&*}1Hc1YXkv^@cVk-*qd)l!Z*_a?8 z>9o?C@O`Mr4$$)%;P!LSTo z5hED@TBuhK0Qw?WO#x8nlVHsG6n@GB-OrPuj|jesE*D^?^BJo3@HYH>mYyEO6Ym3n z^RDsvvx#$q8oqB6rm^@$jAr1d9Ccx&m#7Z~nB;sO6-j?8=b5j`1o+E-sDK>B27E2N zX#)%mXCk1J5U(Gezzb4-IO85M*mrxS?EG7wwD*)WUOz8`qEJd)O)A8EY7{X`)Z-~C zG%I5UsSzBo#kIOl03?3D?=W$;3|O!c0#WNd;rSI|^gcOus>e zW}Rd7=kU31Grjbua2RiBCsr=JXt*&u9Rz-`SY?`8I}Rh-35{*Q*X$;3B=)kc#YpMU z7Hg^qJC8-JD_G9SDjlj;Y%#aJFv8L(qYXmO;}{B^6QDNiC`6rI|B7QWIbpKA+L123`G%NBUmZjv=&r%t`c70;Cs)C=!JmrED% zzSLcq!5@!e2G-#Mk^Q3{Qz(JTpMXeiuf9rwybm=O;`poECyrjNDJ#uKZ$&5Juy4A2 z!R`=KMo<=U2P?42~z2L1a_XlQY$(BQ1V22Pu`~c2!r%=znfTMilUDVjw50 z4MZ|tUDqheZ)0szd-}A0kc(fy(v($lXV`ux@un zS($wwR_)FW1#Zbr1;v_I4(cf6-SV2nFknH}#`F}&QXDhu@G7!fu*yzEr9f;-q$Fctmt)w{i-{Pq+j$JY# ziDLJG?iK4RW7yIxFygsrB#j|9!LVm5_p8Z>c9UF%>VG?HR|X?xXRB&k3INXju=q&G z{O<~x-xQ*qgO3^9o4*(0{jX8PD?zgNsL-r*nl$69#Ig?%)+>XIeCMLngaKa*5_gPe zVOJJ!ZKeU(6^0U3eo29ViIu7WS%HB6U1Z%H0v;Nmd|(vDr0hRTg=U@aQ5WH(yO~9;ZU-u$pBk#QV`vs1Vzvv$k;@(s>kxhmHXV2Uvm8}bMS*eH$!l}lzbuaxTQvO>%)NlrpO=2${2v@y9SR zna5u3c_7x9$*Gr2;najZFK)q^mp)@YJG#K+PEb)^Uc9vV@kMz_l_4)kqM@RWlbPGZ zbZ*u<3RA*WOM^X2e(jWXl;0KMVv-Ptcj@*balHo%(`%>3Bb+sKu_c$+WggbVYfSBJ z;nQXu(4|&-eudRenUY>*#dm;jns4IXuf25XmAJ^Og{3?kq-i1+5fFTsFYDomN*s0K zC|R<0FYy{=isLL14oTq!H^4Bg4759VnF@SA0;v%AdcwCXU|UN{0&NDliVXGaH4a?7 z?Vp&A^g#E$9w<6C?eT`=awZG9c5mfOi&e3}m7cXS+QrfbVW zR5+8S;3fl+qSNgty4bmhE2_|5Rv^2pYl-g+SjP_{-Nmgi5a(82w+uIb9p`)5x(zAf zTxT50OyhjK$yVbv)Hh9sUg#_k>Sab7DK&J5$%tyA&-NfQ9eYD@4G-q_ycS2T`H#(u zGgpVoA9Y4cJi3Kt2bbXztqCF($FcbCRPstK1nI7#5#S>n&)Ir4N-q zbQR`%hzICiXhB3ScuM##*YMV2V~s)LbYgBRE`sCxadC|wG<9{E7;=~Z&e6irGDyU3 zN`=5-uxTTXe7#8GTXE(Mo9yCtN6%Fff)xoiv@!4um%47ZND<0Ty|J!O_oh>*{-p)8Kd0h>&ECVIB|JT!VgeRK>%{TlTvU<91j#Tz43mP_yTA~d&gas>VyD;BcWURu9nvs>9+rej{ zlWjdW&YXel@bL}4C*1HNV_mm!^_5H4UnRIakM;-fonad%{?g+sAq2Hwyo=K;uq@v+ zGSSYO7B)wi==jv$AY~y!l)f5w0JPD)gW@v5%njUt_V^||J9HrP3;W1Xgz;)uHoHx_ z>-xBSizuR7{jMfZnf5Ac!h$zIfyHo!^9Da)BG*-&(Zwh_Zb-yBCEe}!7T=rQaR^;? zTd7aG!M8E*8r=@acck6~<_k>(RA|FCB0b$IC~gMa3!6;}-+`y?f%&(3ukJ0tvryhh0aNkk^`;YMiPhkN_PcMOlmaQbB;+qYP3 zW6k!1F+>8-b|L^C$Kvc9tR2+ o!Zgwba~E4mp30Mjc2C)!>Bdd6rZu|q5;y)~6v!NA8bvq$7oa+y?f?J) literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.validator.doctree b/docs/build/doctrees/gen_efi_app.infrastructure.cli.setup.validator.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fedd752f840b63fc2eaa2b847a3d44690d039273 GIT binary patch literal 20786 zcmeHPeT*H~RbSit;eEDuV>>a4HtS52G+ry-w^d3@*%&L1V>hmojcadGJ4rQ}op;~P zjOWd~&c}L}gtmO7joXU|&9qI6A|y~n;SYpFB`W?YNDxX3;txQe3JHm-5>Sb+7J>K& ze&^1;Gk4zZn|;rAqZq}K-_G2*U+3I&&OPUMKR!A3`6C}55&!sf+;!Ywy=k>tLD*t( z#&@?uJMFL_$zIEj{%rO$*&LsYtgCUDMmEd%2y)nt>$f5nWFO7=6lG6bKW@tM6EU+B zHw=p6&X_aqOnfw(b0+y%;wC=RKJlMeWx?|%YrD^zR=3-9gLY)aNtD`28nLGByUmy- zX}7s%`EJWf!pP`^trT@om8fxanXOY-MMWc2(a4Y$y`1G#j(084lw{6+K4}(AaCY%= zN&6BX_1%DFOX-Tm8&;A;?n;_~XT+mjZYw5!OxV5^$4JEUSYUPXr`@fzTfVGV_LYdW zDNo8L5^I${WzMuS_89($K!>(!+QDvjBQ3Sh(CO8XS(8y@G&=Nv2|^v@LiWg$(TEJ)OhGU553=b#K`*;p&K7L zyZrc5PcIuMmo6J0IeFp2$))AX42HFU=^Y{-scU)}ilVX)dDvd}stqZ@@# zt4`B6+cttQIcCJ@*KsFFx{C`7SFc`et_Eo{j8+#g$TYz5!ilD|WFJzp%O?wQRZ6I( zlp6Sn!8H(OOlaUP=*f%Fljl@h(jvT|-Y>nO>&-jb@{YE=O||6^f1uEkS~1N^g?Uw1 z7dSgl{UUA3inwI*i#+TG|!0)b`x|BlHXDXHAw}(^;=XWYX&v#<3 zENiQ1bG@6W9MDnd&o2(@fKq16mGw0%2b3n(M~FP#3FY^m4ccMjnIeoP4}_eQQ%{_Q zlN7Xkwt4a&r80`M`AbRj-weh<8M%llpCa79tef)r?DidW4sDmK?BhQU-bXbqx1o>U z8+2SKGYA@NT!?x(F7*XYXpw{f1i-SUQiGx5@bMV&8^99&1cv!hG0G)_=LA$iUbGfc z3=p0l&G^aTN;EgOp4G+bBYYHCl&#H#In{FjCZ_0%8M^>Y2qMz*@Y^>xGj~*oFBL@i zkAhYJS6GB7ddY{LJAPjRAZgJ!BA9aI#4+QzYRHVcmW|M=$YLBhaRR7^z_bqWF;Sv4 z2HyQUMn-hG(>tBlr8m99Pzr{pLUO%kPbJlPoA0=qSvvdzE%T01kr~l^ok;S@^^U(N zXabhkjaba0HI`8g_vSSmF52c_za{X7E#(Uk1oUQv@6E>@04JernsYTQKBmTL=yK(# zK3;HkE5K)t?}1#;V@O0-`9A8okS_7g^a1xyp(^h&{LsLip?YV$a^Sqvl%iNLDOk`; z|AEcwqDb88Q%S|MRJXt>x29q@QIV6dn_Awk_m^sV&kst38rs=hbJdD@8;t+E85v6%ynRakX7_nr zYB@!CcOZvFfGc2Tur}ijVsN=VC4RN1-Kx0;ATAo`JAoC$=5EaAb4F$Ch?Fjs)bN$^(+jTl_&Ue0hS z+`7If!l|!cq`uDH;xh!8O(Ih_UxHQ#&Y|}WqF3PB9;e4#q)UOlxvs1Crffq=a#f=A zsX%t{)*p#2*}CU!0@w!&H!ucjda9(AO8D2qvdsIdd`uBB>0>&{_pJD#eZ~A(8YUH& z!CUMwpvJ9uv0>ofONLyfV8*;59cvc%hE+1F8=E3GvYv97eI+*B9CF7rEF&<&^F^L! zqmk1($s28#`K_%NtYE3e#AnS;DNng5DeSZ6_Do0;6f=wWl9B&83?scCQ0^J;-{{Y* zVkuM#y_20^30oUl7x|?D8TS$xa(zsrg<4Y#qSkJ~8t1UakNXE1L&dDYGMAj31~%5; zRqEB^!+e~UU9kv#jySr93hNy8rjVinK|Vhea})(bmMTd(JRB+BEb?znM(Nu0t|HUC zGD+>scw_ieHwRMIU3pfLylpJF_b(Oc976-&7o}>=s`pP+YR3EC09n7gsR7NLU03w( z9YmGFs`?C-~2qGYkZ=$A}`&SV4dzW=a z?=B@Yci+o|(z?A=uwl!X)?=vAYvZTlvsXDPh zDl+4J4u1qhgH1O%re}8306V`n;d46**AGu+)4#b*)7{NY(_W0C>46mT>$Q#4Dr8Qe z_eIp8EFTus6%s30>b6uDuzg622-IvfK!aU|IB0}$Fv?snR4CH;+Wl=K` zQpR0oyKUDVAdaN@T7--<-kTt#cWU>39f_L^TSZX%yA4$}e3keFhklDzbS9OB_+6dU zPh9xea2gBE$zASi)bG#aHTF~N9AS*GPcaH&UExNHDQD|p&cBx<{NL1$Hepn4zutL$ zguTB-u`=f0Ji>W1H!xs79GI2Ft^cUumgjF4_r6;Sb>!iOkvcw8D4vYe!l;}#s)!0v zAz`_4%s0Vu&w$Pxmh(Ois=QC&r#d_QJn7o7n4lOx0kL_XqG}KC!q2Da=>a_Pt)N+6 z&S;;`yld3zYz?(o6d?*FRHx=BsLUlAIe}|-9Ca<6UHD}OATm( z#KANG6c8-)|HWwm_aBtB!+-hb&D{6?b&IqgYH7T2Ubz;rV!obKGWpanOjhCjBUETs zc{H%!-YBF+NraraN(niVyA8(tys=zaWj2zK_UG9Ifv}cZbB5m{Ay*R{DX@=CH>1ku zQ0S}lNJ@g99g3h!lzYZo#vgbeSim#>;ghfFYj5;L7eZQbt|y}GN^jZzlU6RkGv0?q zKl+<`QdJq~(iqe^_>@%yx-;HSiLBcT&BO&cZAs=9?X0%IgBLb?HoXefSaT%djCMiCymJYrFn)n2kHpJ3__XqSU*6;N9 zAe_%n24E2(2-V}1N}i`v02^=z_sWmzeLr%@WuLgnG#!L0P35DSs6A{*Pq1i{3IFTI zh*I*4BuuLocWwk$QK;YB6;@IG`;ovZs`8rwt1N{$6C*Z5yhX6ecOjU%c^)W=`+iTM zs+QMAanxR~M(MtI8Ay=*m9Wa+7wz4`9*Po^tznh&tAtgGgwhC)j8@00%J#WoV3m@i z-v1JFbEN09niFzUAQbPH^&0y@Ce@gJTLHtdF%1y#U9;@w$uAxIk%Wpj%@`xDXs%i`%6V*9hr?+a6Bpx!g zMJrnu^8Ou?q5~gWtKJWEksK|ifj&@&_+A=@;ARXS-vw_4`%q}RgWS=R_u~ez4sT#K zk+qjt$JPvbdtn`gb?%FGlvHfOI=%yo`xamwp9k}Etm6$l^}#v{Lh7&%m8pt#sEGrP z$vNge9!deg?$xe*W@S#{wo6uJml&YM>Z7mh2H>P|C*%zM~-a#{xD2d z$j0wcp;_fr&}3VSY#iMN*-*qQY{R<@NmDop-_}+5i=jx6SjM+eXlpEkzUa=fh@rOv zWVCLVLfc!q|CEyp?Tq(L(Ua<2rq42DG-V7;e6RDXDXT;?z9zD6k7hL3y3NE{(h>qY zT_%-;{Z9{D>N_kkjsK!Tv)=F0pTp;R1%-d-CFA7sMOcfJosOa~TI@x>I%%8`_JxC) zYi^5f-SJXO4@Xk<5984pDIQrJ^$P! zHp*KI4AmP|gE|6?W60POj)k2B$4?Cri{~hv*U%<>wSr&Sk#gqd(68+3&8n^(_UW;z zHq;KgbGY2YvX=^0hQ31hqageS$4e1?GpZ^Hp1pYlZyx>XcBF@IRK8%EZm5ou>gM%O zjpI4qgT2FCD+e}oCqv%v}PkLjsJPj41ae}boL-Z#bXpNijaiQjLF-#-(-e@?$N zKlDKcYv(CX0;hK=RI%Ky-pe%!oXTC)72GtZ;$sCBQ9*@xx=t!^0gMDUOA_Xs$Z1Dx?vx9nKzeixeG8#utW zD|aTGW0(PPQ%rwJF0RdSj`7_~Fd~A2*4V8zr@S0M4 zJNT5HMsz8USzN)hSEb}v@$lUeD8|i2`{~jiaTQS;D@ZtC(8~C@n2yUud2HQJlWv-1 zOV0EXp9EL2%^$Z4Wq85O6%3PUr;C?8Q5YuZDpqB4Bm9ZSo<_FrS1_#ct7q$5K3g1UpBn4^5T*o2IPWB3)qQk>o6W4pt#Y-_N zoXJyg0$Ze*bgP3YcA4RZ9keG4$h(G?_}++h!zeL*+-3oG?&J-}@{89ozMrkT;37`G zrLoF1#>ZN0C0#{*Q*;=B&PbqMW_6G!{feYd@+yOLBUBx*SKAm%3t7S~olJVJ|FFjRwUxjM%sl48@532Ot)ek*| z`E5i4WG{BWA|Etme4lRxtEsihz;QZEv=diZ@q@Tt zw(Ef52)(tx-1geD-63jSke}4z#uF*Nymr!PA1k0w5XLh z*}2_(7Bbl}3*{^bkjFEx@!R5!AhFg>2Uqs^bZt+D%fDz@n(vJ}I0=;>4T!<0gW_GB z6o6)hwk26RYdctuw=wX!zJbevg(!U`?P7(DZcY=|p-D4v4bl_ZubG;7c8%|1!5ZCe#&_q|1nLV(#2TLq-AK$FViPx;?MJ5|SqaQ7EIN*7kTvHA zDyektKqRBKcJV@&Owd(n$UZ@d`Lp*T&7SM{iTNZYi?9Qk#D{CK^DbOFCca~WJdT3} z;}Y*HH!8{<2*qZi;{vYILr>gk7Gqw_UJ-#M+PdZL(~^h5#eqO^*wdpuNFMD`@(7{x z2*FGFK3%W{tM}p9S3diK{do%6FO@GJQ$2;0PNYH+IxC@H=!!_Zy(h8AJz1%7Qne}y z9jMfgsVKrRhaLQm-n!%$cm%MnHg1%H3Ss)SL*IuKLf$aHPMnhIuR%s$&Mv@GVBa2W r4n!`7a^wvbMz)f?r$`p^y~hn~KW&jdtKRo0|7j3oC101Lt7vz+5#>5Q1qq9Lm!L4KnwJxD2f8fL(zx66leqV z`_Gv(mnC<&OS6Uqm;iTo&YU^_`LE}{oH^ed{k?y?zEAw|$*^nL-g?7mwLHJY!h}z> zd^7GaFG@a4F8p@#Tgf!91;$$F$AQTbz7IW2%XV7<^OCm{ew4aLwi`Cm=f^{4Mz-%| zk6WYGm^J=(GHuoPXkbStqY ztuxkP>q+Z?HN}IumJu0qEw(z>-H0sTn|n@=eBTY{KqtbG5S&}FBP(u}nlSNjPENSk zz5_uUK?uapUfmxzt$lpd_F8Pcz#Yjr>vKTV`aDQ}4*yT#|2+OL5YnJqU<*{I`N6JX z2MK>x^5}W3FyS3$k??2aL$gCXV~s6Gi4j|0vSxGoEn8>7C5Xmk3$*fV5=7m#fus`V zqBK6<(@D1@)+zMl$6punR##%!-4LQjl6){?L8?>vS6jzt2lwpcjC5z=0jlM)B zjFun?KisV(6lgeCR;RfX5B1&XZp@S1fQR0S=C_Ao8H8p8NL?1xuIGd-kS~><8m~da zjFrIXT7|p3m#WsOQd3SiV{pRh)|7RZyyr4b%jm=$4wV=dCfMN7c$KVwJx=U7HetE4eDOM zLeOuf(6uW*Mm0#KW;6y11OTfn2yv}FrvRj*&1im5pEe?zaG?2JdguaXxuLlRCZwKg z^rD+%)zWNFOxg0gK*GXUz;n%ZU9HKqIArbEozY;2>u)UGdiC1vTiU|%UG0s98#fk~ zZ{2+!Jz+iLNMox^j$?Pat_{>c$iVQT4a~Uy`sEvoucH6LOG~dU-MWiOYgd+TEnmKQ zQ@e8QhPI$xU$}8=Y4P@J3pcduw{Kj(cJp$heiJm=ftGE-i-2h@7J;*2qkb2R3o#+L zrCG)*0|QNFuVOleW!KA!-TAq> zwY9aziWfKhU}X+WCI*Ldml~<{`l^y$UdzN)*{woLu7U3lu7NOJLIV##Pks}6a!COqie5#gu%Edxp! z`*+Ae{Xr2_{{@eaVG40zC;W4?*hKz(U*P0{d<6CV9@O{Lodu}rXUmdWY(HC;dfkSB zmZiR`@dLFS@F%O5E~OCFopPo4vmuqj`iqj#^Zi&W^U+G$T1pb|ozL9D?fgeaRzNc97k3NejHK!6<$rI16#{$n9z3W*uMxF|*MB`JB+QtaT$ z7vh>7vH=$o{*}RdH%b7Ls;t01eh?Whv#JIbcg~DZd?yr2 zVl|!X%)IvA08_P7Wz+Kq8%ybsLdHd&0zp-(d_#_^9?QnOoQ`vEFDK_W9VGS;*pW?i)Nmo6d0 zByxtQ_^5ayH^m7Gq;DlUhH(((PR#`$Ld_j(IHiON7{7`3kdX)<~ADD=J{IFy-a>kUvEO@kE z8bBLTWsoZjO!83Anvg@=Vg2lkFLMu5Nla_E1^bVxLFmmCWK-E~lG2fbMPu z{oNvHXBJn=q2PTi@kfxhL5+)Q1aQ+&H; zb87r)KSf=qZbeySCe+YM3G#-V`ybQP`r7PD8vKJq z=RpyjJ{tG0)ld@L-a_eA6L#a}^6iP|uE-Lze0*3s!K%7h;kM#~*uuUV# zOZDeRKW%jW25@q1bpDnuDLbcB@$vvVlBuGSn{4S*1gKI&=kEyS_UiQu+=`n{SyJvP zu^hQq!2e_={!W#oq)@gcd9?{VR|$02ME`W`-_V4g$p}AFApEaa(qIt652B)%tD#h> zXcc?MWcXG<=Vm3KU9(gHs#uTqh#xDJ2<#O<;%X>+$B%DS0(u1a@%>5!_KF{WR1IbC z`01P0(o*?Akl(K1x6(&to6+VhlbroDRD%78t1D;te^UB)*xUT@pXZEe3%76xuq+%A|m zRX59?+>+eP@li2UapQDO+wL&5bv){Q#<@>lQ;Nz^PRubyq3O3a3KQkc-4OB{nbHkK zMB$YP4i{#Sk;*z-sFOUCXL@@;^y97~<1U`esr|ddP}@4o$7n-1w#Hv2s(+`K>dq!w zvi#iBgA1O*Wtc~DBz`a)63$2HzdZuEgVejTotCWMAvkB8Z{n+Jd8MxJ$*v@qJFFCr zOb~|89+RMu?%nV8TwSv>79 zjOw)UQF7|a(NS8|`^Ri3{@0ICvA9G@Q9O0d6-oKkz1y20%*k|5(llGtO9id}$cVX} z!&4ax{~V7ZH9JV|?tiMGROKd8D8^5LISYL;Td-e7_( zYg%@aWa)3O%bJsJv&c2a`5AFUNMSyP^HVg+pxF6eL`Kdp@KM&s5t`L7RWlI>i%7^h zK+pEKF3v&RcP@Zwyl0z0sSNzx#2KTGPopEzBaM+2K3G0J#%&pEI1~6;Hg;97v^eAR zWIg~^B{gjCA~r2!(OPD`lMiRf(q~U*-A7g5gKJM1FFt3rOD`DP{`)Xf@0PN8^_+~Z~|Eou7 z9n5LC%_{h#p;kdP)RuDNr?Js*h*kF8j8#LgvK>4+;41rmHI%AVHife7DqB@^{-6@% zuGiR4q2|29`kE4Ckh=39R??u-g{mTZwR7|5l|Xk*_=m%}*_Qa**Pee;Nryp*KZyVO z(`qQY)hv|{&X4myGFb`e z5#hLA+cx~m9Y)6`73~fGZlm%4 zIsEJAPRro01A=S`{&Fu`g?=8o6+%CS3nI5SQp*E}X?LNY8UUf68g|Ig&v^lJaNffd zofqlX`}Aue`}GojZ90qM^JVdQS$tj*pRb6|SLu@w>=UB(XFENV2C+}5@Gh?(_rWCH ze_IM*B^Erx;)4te@oSe@;82$|%FI!iwl4B#5a-RJ^fZg3To4Ht54=HqD_%6pzSCkn zQxY#8R_DO%@FJBuEyqyjwSZn$9WRF+kRh2h1D(LhFXi%c$(pDmaI6{rILby|h~pbj zL(;|J11ywB;EYCi@J9GiGY;s09X&fv=dfy#$LjEjG*ZXuL&xa= z9&wyd8%JZH(%(w>*w+j<#vwDReu9d69ChO;S+*vZc@5M=^&RglCb&RRjD?ZW>Ehy0 z;QJA#3R15pd}I!rGUXI#|HyrGsHc~4;Nt2C?MR>_dgv~uGAi>4{6rhW;H4&3xcPt| zp<|A`xTCM*u!m0afFGq-gu6O15D$hJ@QiH1d)A^wr?VS$QOgH1fR{dyo*T5x4+pI4 z2a)dL%nFcmKd)Pcn_Z6b<80jq74dde9I8&Ee6+=y@e0N}N;P`g-HvgY(LqZM>@XRj zMDw#f&`ifW=r|+SGsh4<`er$4~Z*+k2H3>l&}cD;Zic1sBacB>pU@T#kxH}U=0i-T8%;!ao3 zL=uD*4K}1P@C=s*oD?lW*opgjQ#WLB%h&M&7f&Ski#KNr|1`e;59R$n|R|1qqV^DLpZk! ztdf^kNBD73p>&zI0zq_fBu$jOe(XFy+GSmxwtR>K3J4jzDA9$qWA3CH{4~9q9pYFK zG>14eh|Z-FM~fuDqe0v38J=45;lHScr;0X- z?0ptAY!bttE9$sV-&$lep+&98O0G`uDad3;&y+JmAbkaJlOGE=yvSJBEga0_ z(&0P_4)VewDhWRvcCaN$*5N}C>M?OG%JR@G-!xLvPMH>7nliz7sc)dNAR(TCTu!nAhio8$WVlFv!|QgA=!0(91TP>q7%mMClHxVleM718<>H` z@NUQ^KWU=ZeVx&<4LZ(g!wZFU&e#KfJUwX*vg)>_P21!Ln72wNmGKE_O`yJzL?l^l z=tiW=ZSF#Dj$=}gtO({779AxuvgZ6msg>&bq8X#LvkTg&M#r9^`#3eq-_GyTs`(*4 zLSCb0k%L7iabq*IK96I>#CyRNo!~%0a#TN=S4wvuq7bA_Kbv^Ed1)m1rx(ININm{n*|z7~JdE|U?ORcgdn*1SzWnp}r}46`Nwy#Qk+gWM zN1$N|$F(K*;!k5ePwL8X!$#JBD&&@Oe6Q#(Cd8ze`ZQh^H9esmje}vvxA_6tm-HT?-XkaJ{aKv)GZ`>g zuVS&JYi8lD7}JxPmn}W+Iv$T(QJd*HQ%XARNFh2DjWNd#$@3}8Wnl;*eouI;m;Rcz zqo8cGVYlQR(uwqxVqN+aiv@9B%!&(QOkC7EO`9p!wE12$=qurS&38@Z`)=4oWXLu0 ztl4#xh}r`p7#=oLgRAl*LfDWY9DeQgXw()n>AIE+vzQBXeJg7Bd^>XCO%m*L1EMT~ zF#k$weoMSYK@yh`8Sy$6=eziO1AlMf?=rj=-%Gq*P1VH;OqhTPHDrRL2)feeonU(8V$FtmshNILV zH2+9!i3j4Lc+B;5j~&=NP$IrP4qUJx@fIlRx_&!8)RV%oZPbfHJ(mqr2&TQL*XEMj z@$C^^Ps&5+du|`Pb(EcQwJ4L;#l<9prjURi45yu5$dYDtUm`SI#%wqfZ=hc#6Op;R z$Xs0y%hYFi9uG+?SzRwNTx9hzz*@MQpvtg(Pr<1IUC+o%h#kBb#G(qsmH@F4J>hsZ zKX?{jM`36H9C|!pj*Ru&X*sxVJU?|}eK}QLJ%O&6Y^j*hs(y}0X2z%G1l3`oOkC4- zP`dKXs4QAFeP&3>bQJGZH1+8;=ylU11e#_e=qFW;wxV&x<$&^Js+^a-yjiZt?@zuS zzeQpH#WyYNmEbi8_rqoe>t@BFYqSrbqv+C2(1-t?3$e zO4bFOMCGfVsZ5`TYd}`U?C&R!*weIePFJXU@yl3Vzihm7<(>D8k6mUvJx3awzGv}0$1>jMF5gws z_Zs-K*azJnb6naaZqzFaXE>qJ!3Ji8en;)&xN*(s`;lQW&p@q1LZ>GR!%+s#H%(s} zK#tStLr}+_$fcnKHz-9zT2^X&*m_`m$UQEZYuu08E^N8uSlkP_!9pV-Nhr8&wELu9 zzeTfeWwRT%Xs2aVmRAgpvjisC<1$3scsHLQ8*Rn#Wqp|`GFTdZQp+#H%D&+;7?k&G z47*!;WgCu{m@NDNP6&(zKldHiHQL;WLf(no6$2-#`ooRwkM2F#Hr85?jfZQSn`^D@ z$Je2Wb5NuVzQ@yXoL=BMa1DW!%u{_>T)%sBbNwUeul;c2&c^m*7;W6z*lyk2+A?n4 z+cegU`)ixq8|x45tZf?iA8g*gw{^2o-$G2D6U$Dr7Lpq_S6JDwQGbku3t^CJ8-nd| zETF}mJ($B#%>y##d1Ery_qug*3!2D`K>7exuVHL-49{09MhLs!7fJ=!n$7+F{YKY| z8oul{vB{KD_pkXk(3Dh=gAR>s+Ayc3^@4*aPsGTuB;yXEpI>i zs*0PJXnBd2Zz)>N={F0M9Gj+b37D^|fWbkbh6@}Hs3`x{J@D0|wt*asM=O+5{jWOJ z(U&Ma2@@je#QG9#Hp;(t-@eTsd$@F_Qx`4^skm zLivihDPNT7B=k{4>vl@dTahGs*DT1~*<6y6x_Ua~O5wr`wtK0duRFNTftj&mJ^3+n zBamD<<)9~V83`g4x5PqA*Ko_j9gNsGG;pWlp<=xNjT!0t3Z^2s2eCfYjP*=v0vHT$ z7Yg;P8A%tdInY%m5ybQrrc4mm)sOY*4u-+4fLA^~(Q`zrgDW!+a6#$CPxL%(Yk^5i zmhed}eLj`oY>-Gyx^I{{Nsalk4jF6R(zB8WzEq}*dlteus_TNeMRP(g@dJ=1@J>Zx zt~8-1Y~GH#uzw!6F%MCMhUBaVNexS8adL_5b3DY%#JLFw z(d1J4(iFG~yWs7R2Jp>Nv0g|cUm0a0870;ihrSFAvGXfnT+gTDmNw+QFARPd>Z}*Z z2jpHT5F!^o#d^+VUN^!U1R`#uJqkKgzk;ivFKtk~0Wt^E5V73SlYndoZXzO%ohO8t z)bk7^u33uosDpHyv!h;M7Ac9qCISc9C_U!VfD4Hv0R*jnDGEX!*}i$uql8-I2Z0}Q za9w53Bugx1?m3~8rtE@=i#lt&SCQm89P6{BnHT^~6LcSzM`1apAzyvt%2mX3UUsaZ;Ym^s|7JcsJ-krL z?sD01xauTxpdd7b>bZb#O|dpmWD~DFtuG=cdu9R7!T~cxx#Zxh7sI}%*nufPCb>i? z#dt=-#Xr`wVUGc5KaPOv5P^CnX{Sxo^(~fi>iVK3z_(dgz7%hWauP!H-i-oGL9cBI zN1l}d5bBViiX#WIx^S8b1*q&HHK#|p>-wOx$Rc{*+KrJiAm42uxDN{i=L&P2wV<_Y za=L1mco&qYyNT6H*~=bs)$OD;?NE<#Z;#%|^mJNH0AFMxh-U}bP^MzC%fWWzjcf@< zA+r=-3sKR*J5n{*rw63z%NfKNty47U`a_RykWY~?{k^>70pmNnbPSNf-|0}x!heyj zk(TNQFdOeuiQb`*hl$EzBwisr3+BKhD0w$-Wi zO#TIO;j?%X1p=ftN(~-tLtrAEu&AvA;+aC6r1ebpcm)`BDWgH2qx@%;GCj~Y{txty Bxzzvw literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.infrastructure.command.gen_efi_command_definition.doctree b/docs/build/doctrees/gen_efi_app.infrastructure.command.gen_efi_command_definition.doctree new file mode 100644 index 0000000000000000000000000000000000000000..88d87aa7919e8bdee0fecf92b05aa7abc710e940 GIT binary patch literal 21560 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 I@WZSB2Qj6DMgRZ+ literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.infrastructure.command.icommand_definition.doctree b/docs/build/doctrees/gen_efi_app.infrastructure.command.icommand_definition.doctree new file mode 100644 index 0000000000000000000000000000000000000000..91815382d9a942e4e46472950dbdc1518671e0ac GIT binary patch literal 17235 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 E1F)I+Z2$lO literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.infrastructure.command.icommand_executor.doctree b/docs/build/doctrees/gen_efi_app.infrastructure.command.icommand_executor.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7193d953e0bc7d75ca3b00da1290201dbd7db482 GIT binary patch literal 25750 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.infrastructure.doctree b/docs/build/doctrees/gen_efi_app.infrastructure.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7d4b55a2aba572c5863c728fc9b268721e162bf8 GIT binary patch literal 8152 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 diff --git a/docs/build/doctrees/gen_efi_app.pro.read_template.doctree b/docs/build/doctrees/gen_efi_app.pro.read_template.doctree deleted file mode 100644 index 882ef17e61dbba12002401547142989c86f9b32b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29148 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 diff --git a/docs/build/doctrees/gen_efi_app.pro.write_template.doctree b/docs/build/doctrees/gen_efi_app.pro.write_template.doctree deleted file mode 100644 index f2e30eb11292d83211cf1fe8487a635bf373b50b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27924 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 Mc3zr95eb+77i{q|nE(I) diff --git a/docs/build/doctrees/gen_efi_app.setup.bundle.doctree b/docs/build/doctrees/gen_efi_app.setup.bundle.doctree new file mode 100644 index 0000000000000000000000000000000000000000..751968a3872153dfe41b3fee4772ce100c5008f5 GIT binary patch literal 25837 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.setup.dep_validator.doctree b/docs/build/doctrees/gen_efi_app.setup.dep_validator.doctree new file mode 100644 index 0000000000000000000000000000000000000000..62da26b59cb311378c89499fa6f91f2d1d2d9f5e GIT binary patch literal 21430 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 O<%6Y{Mp1af)&B><^?VQj literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.setup.dependencies.doctree b/docs/build/doctrees/gen_efi_app.setup.dependencies.doctree new file mode 100644 index 0000000000000000000000000000000000000000..01e99060e154c0c3fe2ba41b89d959910d749564 GIT binary patch literal 18915 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 B?yCR* literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.setup.doctree b/docs/build/doctrees/gen_efi_app.setup.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4c51cf4306d2cad8c4be605677b130a044883ecd GIT binary patch literal 7779 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 Gb@M-Hx>kAs literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.setup.factory.doctree b/docs/build/doctrees/gen_efi_app.setup.factory.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9f3a054fbaa3734139ef2cde16ef8e88898befd7 GIT binary patch literal 25978 zcmeHQYiu0XbrvO&)UG7Tl5NEvv)SzUO)E^; zwx-{R+g2w^UP})CeDc|3npFbxa_GlF!%EmD^k~?Q*9@#q^67+4Q1{63!kQdE9$Jma z@jK~od(b04^HL&UAM2WcG)nBNy=NS%{ZRRyCt2 zaF*f-lpxHvIL(l-9B+7L7@`sHM>}R)yxZ1{yV-{&vvD!7TGS_IcUnTY~d(z%v z@3XhqQ_P%gni2k3mu9;wk?nV857#5#_rh6Ffe<2mW|y7Fj+b&x06d%(0PF2}a@B$m zccBnMk}HGz1?A(^Rr4p2~Xrwh(4g-&%R zvf5ftw)=4|D^)2vweAWR8xp#$krm|nj)}fPuJ$tZQHl&eJR|reKs5W3j4(P4w!W}l zwrV7s<&r;}fj>t)2SYl`hTkfoKNvm&kWX-0Rx>hb#F3n@unLsHTn@~xt$oXiG_&{S znliGOgOjChPuUkp76ICG(5zA#eoE^MJgm~r$7N?i`XM0wh%i$2=rg~*dDEujes?8s zmhGsTzB8teA2ja2@BWV&PkCn3X*+>&&hIp=OHRW$YI)YhDDXQq{BM{KEw@d_t2O-g zv8u)!!wHR6U|B}!x1!6iCv(P%9~%v`V+2+cA}dUW;Y5bnY0mlqsf5#7K|?i$76wLS zTLwvCNW7#Ek1jlEJZg2U!1Ro>@sbBv9&;L2C$tPRG`iFh+E&w8TA}XMleGGIxw>)E z$E+qP%pt>qvA_bCtRTc^fTrSz;ci-Sr%x20{jACt3l-)yGeqJAMlN=N~@(*y+U!0NOZtdU4^z`SZrfC(ar3 z#@YFEi>Hr2`Plq91u!lIKwi_Z%}W*- z*sz>S0LL^MkR3(7GX8jeXSqsfVRcAGH}IiS?V54AWpw=LkP!l|qjnT^=VoUwU%p&h z?!+}eSe^xwiNWFQv6{3^KdWSyRZ?+PR!M8gH1P9-Yak30*T5~%lNX>T&#JYgHF#cq ze&$VGZ{F9I_qF8))t0^No>WUp#Wcwj=2cx`;0sjXp;>SU;mT%i2D`1_HlUQTe}`GY>U=e_K+U?fctO(QO!LTk5MC z-&WfJ+gG-ADTOHSlqtpALn?*+J2|0eo3U4Bv*on8+)Y#t=vL^@FAVB{QfKUy zls49f2tC~iWgj`+Y5CQY@&HTzMl+Fxwv>po~42Wv5BRBw@XgTxU?!#OX6ceU-uz}oeO>>a`C0XINf8g*@0)wPb}IB?EYtu z-W4IHGiMy&C?7a>$T+GNtA|~)fs@Nt$=k%?RzDpcaK#g(FtPYHx25R~YsCI>Y8u zv<8p=^~Po!VIxr4Mi8up#WN*Xu$yH(7g|-j+ZfmQ&Zp_0a8ik zOs2n6ST}Dc5kBUNv(1RY!q~0M2xFaN6H)I?nr71dHeSkh_f(AB&!8ti!!>;zo;r#9 zU1}I78C~f@(B-bcwxh+mf;dydiIS_l1Hw%mysdz~Qa(6y2|Ph?DYCl2E5r%bZxO6h zH>_y}8A%w*wjf|(!=rNFAxwDG*k$xq2x}&a!#Q?RMur=dNz(Tv1WJPQlBC;m3I2`D zfu7{temX)x1y>wUZ?$XW+A?DN^{~Wn|4Q%@XAzy36}ElJ^BWiIKNtH^Zjb((x$K5( zu4>@li$>kSd86KPJj<9d&YBe0^j95LsE6g^+GDRO9&p$Eu6t45m0v2OcY2 zHHGZJBc~z~jo>%7@fq01ma`1kvMD3fh|>ztuPY|ri_0-9fp7IzfGNp}=4WqS^p{4Js@F=!3D>i%nviKAHHpZO^FCwR#p6Q|vG zwKg^`wMmgN{hX2KFu~E+gDj9oiPe2HNGFTC6)g%B_R@`A0C|03e{nTWC%R9VF+aY zd@=ig)J8_4{eV2wzy1#~(c*&j7LFyA^ z`(EiH?#D4jzbKnr<#lZp>BH z*tHr?%V`X7s3hyg&yR{u{f$pvGG%BmlT7zl39TONKYTz_@>zK6feCuV;C*1t3I}^u z>rrd8mJbMV8Hi^;E~REE&;9{JAsN4c7iB2e$S2g6gm)Rw{-b=A-^bUhBty!dTxAgX z+qwlL?7JZkfD1w*>mqlCC_$@(uo3c*&EbB76N-Xm?&l!D?&t9*Z~wkTa$ORXi|~V{VFYWCy2}X1x1-|!@ruiS82pu7(ogmLupFDVN+g}RD$$;9X*xwNR988 z$VhX24c)Z~usy43i|)d-(D+KaUlxOjD$;bA5F1A%j7OT>kJ3jTuhlh&alE-?5BO@Rx(e%&}f`$SdChEYc3=w(|!IcVmK(!`zT<=Nu5@G#mRg z1Xnjb1DXGNVNl*9E;X67UQy}v-M8n4cRpQ@y>$b+VmYCqlxy6K<^9*4g)YK{EwpC) zL6qX#%kLV>i_J*qhBPY&4ldyy?h;Z0Fhs%%3YpgI)JBQE*x1#rak`!sbz(E=S_MVu zsY^mTfC0bgqkCv^2cw0o#^r>{sYpL(6n?do!fd3o+Oz!z4ViSmhL=_TOK@V)8j5~^OAjUO?4=C@d#X8r__ROiKh?V;Wpj~wW$=iuR zyJdz{K-Xx{2*`z?v>yn2q?Wt>8U0B(;KrVD~`jBBfd& zv8zyopFfqQ8F|4`dH+%rqen~Eq^+Z6#vTIGrWadzB#|=_ce{QN)x$O}{rQzyC_L*E zI_`N<&?PhP!n{lpJ?VZKFJ)oOY!JJ>4bU9iSmBB$-7v)k7I*N!C}!-pvx|hBKwOUL zLU6E$7hB?ix;+(kS7Ce5bk{8ynfoCF5FDNzH1{%MuwOs{=mT0N`IFrlKp-jvbs_lBXNx;Fh?8Z@PjPUQIM z*QPS`lnK$i^gE528DkOo-M!Np49Wv9Pyfb&NhV>{5x2z?X1XCy&ogrOOFw7G{@GB- z{wejIbia=m{;oyOs6LKD0rX4>E#pKXrY-zS z>7iDE+=((`U9~ZWvpkC*nM?%3kCWaTY*Kvi6JTGhR7-8MgKE=8Pn$`|TkE0O019+=Fa=VCDCkTNe?#fb#!s9P z%m5mbnG*RtsRt2Fbl(Mf?#JofPwCxU z`tAtcU3HK0zn|cLkMX~sd(qmm5t4tOI^NU^Z13=d%?4nYit>L*gQncC)644X2R2F>QlctUc3bWK1@#u&qU?~7 z_b-Qmf^OKR`E!LT@olOy)MVYOD9W`(+&E}}zKevAVTpLS9O8Y(nS z-vX3T@n8ts)50_;v4y9((=T6UJE;_VCvMlTApfA9yv!zWa&o$L)HkLA?;$3f6fG!0 z$y@4FoT1Ji96%v(tS1M^>gNk=M_}<(IS=K0LC(#rYMV%_lOIRfZtIEzDx%g`9A>Sf zO=~G$#(Wc0g@uaKU|!2?qoo3NG%SLe;Bz{lSsk~EsGp1!2v&)s*35%5yx`Bi{Fil$ zE@taCZo@narOL+$)CQ^)?GlvNW*OzPBy6hiO<@Z6lTa8oA?D3sP^0(dzbFi5HxUky zz0d}UJm8eDou1iQj?HBY6sIywn^7{K-HeLEe$cGz(QD9QOgy7U6mgnLAW)rX!i*!o zo;9(}D6WKj#<<c$@&*Ue7<5dJShtI}aA7CzXHDJEikp5N<;c+MCREAsLkmya zW+S|Llgbt;ZVy-&sL7Ph+Aws1(&@`@81!}hg$b@(vNjzl=sgd1yO%Yx*e=k)I z!6GPn#&r{=yD(c5EZ>gb767Zn$1@{rH_w9ftj;n7(L=TFD0%#*18kyeb?a2rhu3Z; zWKid*3uy=Jq#Eots#+PM;xd{;RDY-H`n>9L!fvIW902sJqi#IdgQ_T~{9|=z?!ND% zpyx!;Y80lYmTdZa)bv!qpG5Ye71SInYVkE-5N7SD?LmDjk+}pdYDRW)W*eJ=Ot$N( za;6B#f^=8eP2ox>GOyHa)GYU?Zh3;ABcSXbwu5J*iV7|v2z9fTomxk67t<3zLNL{^ zkq^}X`-HxM%AADAWxW`8@vIsBLIeNV1!)GZLVElLulb_v!X7ddVZ2o6=Cnz6Js(xm z2_pKPgo_D8roCh}p}{MFz_w5r>?*spfnFEu7FD#Z3r35Rg@`C2ZPN zw#DjPqTgF!+k`cN`a%-%w44Loi0UGRo6F5^00qg4U~Xa2k;F^ZobAcAQneP|jM-Z0 z2dc75Ki+`uIzsI(B6opvEWIlP8hg^L6 z@F+j_>3#`*dLhIXn7mA$=Sx`Y2Kk8qS+VNwMsJro4$`i*oo8ByADXvKoq}Y(_GrP_kqBBj@Ga9(PxJ zyO-NNiEQG;M&sCOrcF>^8as*GCQa%(ErPT~5%dFSixz2%01nzD&0lTNra_wqXj-`a zvvq%Oc4v3?Zg04EJV7d81E%(7XXed&^WK}^yxpDm)ZnLIeP##$kB$2^({eXv^>W$u z%7))$d&*v^Q8nD4`F!)})6FNFQ*5NJU-rF5y<{}m4%8@_mQ$`9Zu9Xb8>8xh<@mEv z`(fWG1(xT=&CNk`$Q*vWIc1Kp!N3X}L%PLoT{qmviblnHtf<#&v%V2DYO@!OO<${e zp@qqhF5#ajau?!O)p)n8x^Y4V8emFPPdxo zxH)0&HE%I@nUm}Tb7eiy=gP*Vx!Pu6dhXo2ih<`j{v7xxZitz=bt^C%YpEg(+@A{v zESF1ynyvd_^6;shjWu%z8?@ZAu^~w~6ux;Ym@?l2QQn6CZ^!>f@c&U_5HhM;oUJLg zyQW+9COaI;{%%bgoJ6t7Cc_Fd9qyY$D?w9lm~S^{5*e(RhaqW9<#-wVx)v!((XlXi zp=h$Eys4#9(F%;JRFjQ8!1bd*x-whadqk=X4h&`G#i%l|`yQ}+Z|H{1 z!G~YoxnswoSKF*x>t;}hue7PfquM*)@y?&p9&+@uRkiBcs^^xBOIArcW;n*hpzgV| z_`jsTXT7Rh&TPr69xq7qp;^9GsT+podzIia{KmYt={2;H?rL?T3>^(!gJuPq?w04g zI(a9nvWbF10|r;u0@Kh)^L&~@`f=aNgW7$DYt(f|JKI=uFqYF+$#8u`(|xT*CBA8t zwY5#EUN}kA&qdU=lOB52$wH0#R?%npZDO=>ZM6u6Z?TbQGi9 z)EpfH676PN*-f}AYnIE0YJQ8%=*5nyKh z*}?@(oR0xHWzEzt8JNJ5VO_#-bgcy45#m$LkK?)P1!4=-p&7Nh2V<(vYReVP^@3^5 z$GDD}K~S5Yo4b7Z^6a|XnDy%GbC_hBV1MrTY~+vLD|DBQ#Of+MkyMgc;79XYAe<4m zz+JGD55Z0z6|^Eh@PzpN@Jq7YykRYGSj%;4Er-}0v6U#*w3!&pr(}b{`ac3BW&rpB ztR}dE-P~yz5XRWKLPF}ZGO5lB9vi|C8g&a;l@^=8o9{@RFvSZn-%r7O4?Vm9Gks%O z5{vB{%TgsRm;EnUJO)RhvW_-dC%VSX*8^lT^A%A~iHHLGEw0HC{J zKR=%rfKp|wmFk`a0HuZXJ;a_2LfHe$ZpACCHr&9f8h{kln&)B<`?wYFo`wq4naiWs6xQ2X8A^0#x zcZ$A+07%fNrxxHFGw4hm<$6vn5fea5-37en+a9TV_RdF--4-DFGp`-tY#up2tsN7T zihd2&Hm}81v?IrlBecN-PKVeaZ;?0{`)va|cF3wEk2>s2COx1DOT<;IjP`6xCuuCe z1}-;sImQBWw5O@b1ShZ3GB&bNb>=xw2(;DehHum_8BOZptzi#`W7_P>HHk!IYYd_j z(Cr;;Z#a<%CsGVdLSQ#_&_5yIj`tI>-ygG{6|0$IqtLt=$c&R_`)DM5`uT4|o)LQy zUD@~I4@veU^*doFlC_tpM6fi%S!(6yV1_~qUNY|`d^|$E^SEF(AA5+8kcmA+d#mw3 ztQbE#7)5wtK(m)D<8ldM-XD8r~+R7~vzz+2Kx)A{27Q;YbI*geFw-7T$ zZL8e0AHx_qFh;Da$qr>J1K0D5t=xn{N*t|yBWmar$V8YHqH3}N3Cvrw5qWN==9vwJ zK$91Lyoqo!-AHPZ4&6edo{SX->hxwR z3BiLf3t)mkj;tpE&v>uS-h4tw1YusAuWinA?VW!jiec^Y;QW<|tGs&0Rdx~3pJVyBUe6IK3|7P@Iqh=4LD&UPX| z3wO3T6T0Kn9Fg>1qHZSa7x9m3!HyNk{u$KdTfMS}J(kH=PF`=$7t$jgP^~Q(ya{Y% z|1mMZqsca-%TPxX4eTF$i`1rn9VUwRjcDXT;nRvI`}&CO>u|y{r9ZkHAUcBwBya*^ zJxP@%GWc${GO)iBPCYg@^3;#8(KW{_T`YdE;RW)d{ji6K#C-B(Y`&o3zYlBoE}dOk zxp!%0@j~&$!nq}FMmvw)%^DmR!o;+#33oq;{i?P;?VX)lT777FQS?X92LaXAJyrL; zK6v8n>X}7^nh|IYhw3-h5Y#OhzK@+*%bu<4{ufU#N8OejtGC|HoISsMW~I2ia`H^^ zWkYfTEphG>vgHJRsBpk80xK3N=TdJ=6v2Jse$EJ%>%&J1vAdKf($X%W%q_9}o`m z`_e)swjps-zCcR|RDQ%8c_z6iv8(^?#;)wwsP=^YAN0?purN4cET<6x2~g-ftp~!`+F)o<#jT zqPQT7qOay6gmM)rB;uLAO5(Xs63=!lUI?Ra{Uxl=UnSO0_uoYwV*Twj5yJg_6GF08 zZ++W{_D>^3XTl!DKdQYRRoxX36q@Abz25g2?3#HbE|@J0QdA&K-=#?m#`3 zACeQ9uz$ckhccpIf1j$x)=mCK+RgX$h{ryNE?FB2oXQTBW<}w(c&Co%J@fh7%}OgY z?dQ|ae`3Z&sKve+0~LNu_<>2OjNO(I8*e8+xzok^uDceB* zb_IV@F~@ZLKZ>7!GwzDLc-=f%X%`!REMea!%k9RGU`vkO`|KjUto)E(e-w|N#Y3n@ zH6;=IE_Bi9VOm7x1&K5X5QA%c}l2%pxeTxRkqmejA@m+CswI@BvBRBR8%SzQORTSRW+5Z zd7(#9kpvTSpaIC%-H%yI`mn#j&50g5+8=>3+aJZB^qTUsq~o2QY;p_W4-oB-Q@vbE zr2Q;W`UDtbnU9oN+rs#4)4oD&7}}6mi5^P|J%nriOHxVx$jAN!Y6>S4InGX>iBMlZ zhw4%XKtH0}Rx~yh`pl6SkF-9O6;JIxPpl2Yp;Ab>X}?52`6F-nx9iP>AGP55o$HCq zF;P52AFyn~%kGVCir@QDBYNWM$CbuiPn3yz)DzLeW9tBmX!8m&dlNBBYefX?#B|9SekR;dRmJUTmBO$f^5raEZ!BW`=huk z_QG|E>bT4@)(91-YjNh;@a@|%=UMPgx$b=nO>^S6e^gUZIrE50CJM>IZ$DO&$_qvI zqn8vE=_h=PSW2(8+3;=GZk3MbnVw9+wZOOiN-B9})_3@pDW`1scDs^;9CAt)@z!u; zCVWdAhW#ojT!v{5;zdNO8}xRMng^AU+=Zq&(c39C6%~4msN_L!7t~a?<^||25@6!+ ziN5Uc`!Q!pANJQVk>ML-eF1NImcbCaT?Struv_cuC!pH~nn=)1=pcZ|???U*>d+f> z6CD7$iEg`uZuS>22KzY-(f%S`U7@RAi?6FzcS)U{*wS+feI{EudCRryXt`XqSS3Tv@jgEBqp6Q?|lwz^-48yJDZe zE@4+JzYPDrZRquTG51|Vuir+~oY3pf)KpZSIHHn?AhMv>Un@!Fg%MX3dPOYdfnGmQ za-)P4D#5ituh*1R^2)65&?{3;+0bivP~{JD$SGNZb3w1fY1m&Q;boZS$dTx^z;58z zt!h40hBASsIpNognu-d3MO5;@ue;S$w&n%!OA=z@{Amob^Y6#pC4Ja0VnX`}!SXJT zAq=|!-a5drtQAo}u}9EMf?`4^0mVKS*>=xROmqM!Cc5njirE-q2*oba6^CN{>RLmw z6&ZxcZ$N!$0XX@24!#G3Y4XYwIj2eItWF;vyS%@GyNE*SvJ#cV6>;=uGkl@ zPmGolXU1x@)=eFtipa>@p3KU8v%Lr%#;oeQWXp2Pk{BAsEHV@KqVEV@B!14Akg zr+g#ee=wMwXl-0gMTOQPDtXY_q?(G#@>Yps$@)&i;`uLb>>#iS4WL+HMbkgco5 zGsJCoLwp@@TgRnRfVX34D}gtmrvPtHMq=w3yon9~-bA-Ofw$8bVhG+IpeqjE_|>%r zZ}+vmxZEphySoe2)=G5SaP4hbaIKw6J5IYHvl48v{YGMq70jV*joUzGYjIcXv)2zY zYZpp}-`_SQ+l+bd8j>~8G$$l`R!v3am?J8=A=#&ur1HXxs|v{?mhwQdSCrf+p@vFu zEs*T%N-B9})^|vjDW_~m_Dv-RIpmZq#JM0@;xg=jNN1Sl=n?v$v`8P6c7w;hujWK$ zD*u3{Iq}$ks;Q{(SVScc9(!F)Wourr2BgH8xPKaj?Ed>Pe@P$qo6Kg@Jr|<;8!scRL}5BbO87zy6p*m&0>fl{F(BV#{ z-+_O3%PCPI-`$)QHOd7Rwv*n8y&t+E+jXwjbZ%mK< z>h%K{v!|90E5~6`=}$lK-fY&#a3V0;>2~6NjaUL%u(7LG1`}c0W$Kj=7bof*;NMZu z+1gMNquz3MIolbXXV&p>>-5a|)b)hjiCB1$Ry{nTLHZV*-J~{(Ojx>CZX@aTGfJV! zS|@)IvE|GCX>!|m%l~PNuMIzBzfSj}k`*Q1il}5tt_7FAtfbPjz&MqD%V}B|&%m@a z<$tK;Adj5#;H$wH3#NHC&$pYTy4 z)WP4_PX12;Qt!^@J^+s0nSbqXrqB5z6nQcH_8@VVp_5N|w|^S!^$#E0qkDh|`R5l0 zan&IP*=bdZFfg0W&okBz2`!6d2lKTM=|?77o-&^hA8@euDvtA!pkJP&eT3uaXP1f5 zPC%eCph{yS*=QjVI^phYt>?2~Y?KV1lEW8MT3AYo62?Bz4P#vh8@nVyE>rP3QWFCHzjL!a^r=#S;FYrBQmlRK^mBUaS7f3v7Bv8hyX~ z)tKJ(^y+q&`eeir4rJ8}-CfqL#P@wG=6c)lgG7M#tJG^a%m6?x25Y^=3bH$XO76Iy z(SaW+MI!6bwTTY=3&xi-I`F!Z73D4~qLL>%ux}(>p@ey-EwyKXZ8tiQDW~k{z+03Y zA4LbUJp~zd_@ilBR*@l61@* z5g?&=vGW%eC}3FUHBj353$L1(NDn*z|HVMVo&W1}#drSvsvkT5Tx`5qoLiIRB59R( z6u^j5WMsrI_7(&e`{;^u!LNGc0$H%5<8u-grp#k(5;4UYq&k?v+4D0zY0M0zD4vPZ zau^~`!z+p;*-}<3ks@3d$*gIeC?Gf2t}wi8PQy5m7Fz+sMJ{l2n!O3x+FTz=b15%1 zPx*@U06Z7?V1TSt4vxiU1yRQ+<7b2D4Y09NqfVK|i*a7@y`m({FV6NvM++gn`hMiU z3G<~_kdPSJV9I#f@sRE`kbzsAEsi`ZjiA;Dnk(k`3LAlxkdq}qk{2C~;xo6oT^ynkWUib!}z+2MV3I1!d0yCp9vQpVgOe~ALjfL_!f zN}#^N_STJ>R}YE~G6h4NJ6XZho%rV<+iz@GkRmdGHGENNkPViNwZ=O78>7rEl+XtK z8hRBaBbbhoL8GSeSuSK&M2-WbX2vm2Y@`uXX5Kx+GX&j|zF9Qtb+2ADk+RP*knntn zhFU^Gqw!GkQZIwN7oyvL=JdrvVD&3 zt~c~`0}`icc{a0Uc!}~WGy(WH(YxJ^<7#A_qOD2RTxZEy$?N-2RTAfIP?Ql~POh zRFZUmhv**0tCPxJH0raK5mY!0ID|Pfs5&s;kw9OA6_o?Cd1?=vgicnAv2n%>L}}`- zup9hMH_$hVCeoohloGwkc2kbfCfn;*k+v$#=i)<92l;QF-UXKBm2?Ms1JO>FOuWrf z!pkh7y+O)cglK)SQNx*PV;Egv1(1K}2ChJRyb^znRQQDh`|g(l)uI19EB6vHz)Idl6lC}>sycZ)udQ-{1cJCG`+93i|Iy;b5L zl)%?2^YURT46p4&v>G17AD@j-F+Vg8eexSueDf_&;&4E^j|J}-(tiv^2ZRd0F4BD^ zF9;pu`%-zU!v-xM>tFLZf+km}uSwRpCU11{*R-&hMtLiF)-|3Zj~|6-(^{lx@?CFH?G zy>M3L5;8kp3R9@Ac}{FCyzoseg>mhXRF5NqDsOZk)jt-aIuc?Gup3+ZitYdtz`vF} zq=Th}WVGZtPN=n5VTTu^^5>x?&oo!zEAaLhybhGkhk1kqV>g>B9*v8+hL2iq$!V0y TqSncB3uRgfBBvQ*V#@Lt=ywv)JtHtS59HeM6&-N>yVY+Vz_u@l$HCbc)Ious;%z4zRm z8PA=$otbOzlF*h%nm9d(luX+c6d{373m;G=DuMV?K0qifh!2232nmU*5>Sa(i>UZg ze*g2BIdk{kx%b*}6icz>yEA9b>;FIh*ZG~tXD7b+J8rO1wHu8fY_K@x zI~!rW(_%rAzMdZb`Sj<~1wI|wSK_b})mh5NkfZLnej{Q*`pJ~fQ1-<2nQYtWcal2$_;f8J)Y-u&6@4pw+;;<( zu5{LHUa^xTa@RTu_(FWx;WlETd8+Q)ag0PfPXu;LKJ9FD+WE_xUB48uCgthysl;BV zPpLEO%sIQAJDnZQJYQb|dG=C+U0!N$CQcYEeW;d%p&u`SCqx&KwY2UgPG_xReo)zaH1_9$e+W;#9mt?Bu zyC6r)r72jqc4ex$32PZS`THIhLR5ih8Qf`a3aKK|98XwOC^0EZNU=M>^{Wykbo8to zN7+%kFB6HbGZ^lduXVT$_ALqhSn4KXnIr-O6|7rfbKtl@9JZnRrv!H^IpYj=DY=;D z(@+?DJ+j-5@s;oG?to^})(<(m?BUr}bLO3kB(><~bI`<6-acbw22HFq^GTJN81Nt% z@US#-&cubUZXX*v8MZegcil-U*^{+!^00OE{-Zx>J?+~Kx8+9GxiF}+%WmB|#(Z`u ziNc_Y|8@Jp^_K1W)q2=EUNOeZa$~C*F=oYKGr0o$vutgK9jk5!R>T?*XlY_BH?i!X zu_W!C+uTG#r2~D9ti)j!NoP!>OD~VCJY_w?0v6f6^<-zwM_(Ru>nwo-VxXhv$@79NO1FE(oRv1+l?1VZTSr~L=I*eX! zTE2}A>2lR>a&xL0mK%sJJ7F6{IH(JBUU7ZjT4PoxX3dU&#Da;feB#XNqfb1wYMofQ zXno?uxpOC0Rxf@8Ibj$(iN!86S&!Rl`z}ZWBO^OVHqqnCCVW#i+A!Fq+rLhF!>b`(OrT2<>z(+a}m zh!vw>$DAZ-FE1@!xpJkt9(1ZJTnO8N6!S!u<~>^^Q8!cf)q2HTtoQgGZl@+TZ4gd zszY;HzT`akyWu#h<}4xvpegHLmxTa)ar6#52SzQG)9^3D)1b$3FKGDQu;WOXLGWKQkapbwFcj*(`pHj{{t)8(vdVyZ}&QhQ8Ed7YIqxi3*` za#|4CP2pVwltByHzaW zE_Kr<*_IoA?>6MH2}T844CbZ0LM#l|Jb>b9K_d91?C}syYa`@L@}0m-d@&5N{}mv{ z^%_9BBu>3wLgOO&b1C3$`jF=&vAdJHKcC4OB=8POkwJ*ot$G+FCi(Q zBx2cGZf`CNfnR=JlK6aPH>XqtZ_o*6_uqhwd zE|4!HyZ7ra^XOUA(85<$yYC-D#E+tHn)NZyR`pUKNT}WXYfVJvwl3o=VfNlkNoCbfDl!(El z?n#C#@ikRI6Ha~oGWB)-=CbeLElEh3a|3A(LOSo8M4mvgJx-5Of^+$NX9H62E!77t z*hK*|-GCzCrW=@^T;6pi0oH@H8JGg?dc(=32t`jitbQrBT#36IJ_4Av zISnI_U$j`QR3tB^d8O$xztMZm3U+Kld^W6@4vDjp!g?Dq&XgiiGdp|F8T~(_FxvY8 z<(~8Ylm5(WmO}&4JJtEMu(4@$k#AfhV_yV=-X5mX@@!2Afzhvwbim*Ut%eAZY zZU-e=u9X&h^F|u?A1MbpvX&O)`Xs{APxtIR)-K~dY&dK!9=F!8^+Kq|f_IPEfd{(K z1IeRNFoa!#xw4!Q57$UWjoFvCXg1piIau#1RFqQhr%^>e=z!WQQ- z-y~>3CK0sp1+am4(d6sSTr%Z^Ay3FH+KU<0JtxK+gqEa z4Io+5L+RolmNrtVi;_U^%cwzHKYpNOEW9@i8CJl^fxabjK76~hi)IvJ&Q#@GIGd?@ zFQIYqUBfN+k7{94G0TnHtnN15`VdoFa^hkZJLkOx8oK?x_ghHZV(1Fe(?6Cd>gj95 zBFr*+v|{onFU0R?b^OFdV2?;NQ!g3kU!{J(Dr@Yg`4Yp7u+uRLVpA)}GZ)l*xaIeJ zaDPPY7!IW93(U@&gX{f0isdlG*1?s{T*rX@aA;N%xBk0?Tb{pF?E7w3G{KP3@j$-N zTm97JF^qDzQiOPj1_cb}BfbR~d>T|rV9@(CX!1UTpQ7{lMN+bXFr*kR0rGjDqk0bR zz|YI{bT6LxK=7C6?(XH(yGm{T#IS^8xrK;TFrxNm(47l3gaU-|K93r;Mbopg=XC-< zI{JKC`S9lM zR~35o3sh)$iMnew>M#QI1UPiWI&J&dHXCA>MRdiDS+-6%Fkjy7FOAY|7?(Nkb-}Z8 z^3+HWc_WQPsT^qBLK_J^4=*qDD(r({=5uaic2z97AVbGVHQ6nAI6kQtLcR%__!Jgu z#6pPo$Mh-|7|r(}T$INZup|{B#R-9#;4MLr!^HELI z9u^4`EJ39rbbB9BN+Feko%K@H^}sY5g?u-{G`ep$9;VSPT`x?t65@D{*q!kX!8G56 zbecAMsHx%iy9yOmy>x0w?RBe_8O!Gr5i-IGrunC=y_+X+(Gt-crpdo5m?lfe4e!`^ zacGKMUKj=2tgL0Xcww6n4BdCN?B4mZQhTf zh{wKW_OcJW@`3VJzJV&XOwJX)qFNaS>pWWCN*UIvTDjr)%EP5yG}U&bDfl~zuRJKm zy{J1w2ujiMo1_*kl)_hLdbHBJkoR8@9}`IFt(!kE<#arA3w@vy@jX|Q;O!VUz5^i) zw%X8+4z&+S_TxIR6K`lXk@Z*DNpA+do3NA2c=yFlavHW^C;tG0d?T=vFM`(+J9!gN z!(b;F8AD?yx(JlsI=07UW4a-}Oog98zZVMm0jX_V_M<|hN#%~X;84$pm3n|fK zAp#Dt{x=n=HykPXqfvOOk&-{4Li0KrAe5KrLd9jpipmYgua+@Hn5SUp|BByki2uUEO zDf4e1Q?^P_al_V6U5|Xi5MFcnoZ9NOP>a(|-hJI7P%1onlNJfiAQP$fbL|va%WGAJ zm+aV}TGf6oW$SP#&m$X5o@G!;wWmvm1tVdjI*iLb_DI;M_a|_^ULBn9{*;~?^z>Ht z^k;aw>U~T6{<--5w)p*y`27p<`He?kFB1(qVuo@UOUv@Ha=7DM08D2ExVLxw@#6l6Y-r2w8ni+`{)`YaRE~k z>svUw(Mb8EaOL^l0vw9yB<)U;t~j$Rd>VYi0Ser#l;Q<%qiZs1V)GoXAVPbpfVzEYh3}47JB*T= zkLy9e&h5P7*najp!S}HZ7hJ@Nz)q|)P4I~ZTkEW&z8N}ZL8nhpFSA=nnZ|I`8TFd_ z=LXDgB)%Odsjx|`(`wf;kpyE! zf(vPk0xYkgnpu$|gq=n|Pin`k(+F!gw1`}LaSSGmSnu9x#e7XlI z#dT=3XwG-XEu1lv$1Y+p>K5@XPGLZ^!n&dS(~)lc9(^YhBsg7Rjz3;ua?A5#7^vDTTs1?yonw-3}*qa z^4sdjb*aYahKw3+wnNxYx3#^(_o=(-Agg{;+O(^D2MaFKeQ$iHv?fqrNFvr7UFb$q zlgOU9>un!81<6WaZeh`J^o6WB-(N_jGaDiqwKcOBy0wEYk3;q;N|evu3*;X+@DuZC zN*0q6WD*~)#?IZimrZrGpDV%^eu)XOkWX`Qnd9h zyoyYnhZm}2wo7@moysHd&m(ZK!}pk?E10aDfV&$K}#-rALz<(@9oIIUY1h4vTfhqH-rh+`YSt-CJu1wJ44vyMx+pd@gx_0abr zXOJj((5aIu{dGveOX)e-0&FmZRe?~&5P#WVW=0FiyRu{QWai6LcAaz;DKAYNW8&Q5xgT16%s;1`~m#FGxtq);{+t~5KEq& zIrE)!zWe#UZ@$kAf9-GeKJmvVeOEW^?V6%#wxcmW;$xblhAn0X(Oc2c&ql9AbG+gy zTfP%|DvNj@AXMG3G>_TQixHn7@W8PAS~7psXKG+Lb~arf)<^Ww7o$17!iNJRuvp<0 zzk8k8FUYKEydW#CTk}~Ex;4k86@01XXd%F9HYN|Pv2DUi%;}>!eck809>utixC$^0 zB7KTiux*H9lQRJ95{~U*TDrM zi0G-W8-X4+N<%>0ug3@%$II-hc|Pboe0m^k=zV;)#?Nx`XH=D?y}$`bYGIoEa8M4r{=bW+K|!>1NFBUQP4# zF;N+ycsiC>jH1$&Wkk_3#QO4$inYM9y3qW3j{YLa90IY|C8ybg{}6aTP(CSmSfMxaM;d2FG(7}2FpGbg- z=*K|x6S0%hhcA9_ps(+Qh))$VM`Jsp&B$`A##~fp3u~R!v%NO12ZsOFr;ArU!w$ zSg&twZPnK8u;zH{bqJXR?AMRi65sUkRCjqLQ`gih6-IIk{PgZE5ROS$;2`YeW!TB{ z>0XI9cqx6p_^qPd+_IKi)^d|t%QU|~vyz@_8s!G_X3<~}3sexHF$9DNW%DqD-`?#Q zNR6>OK)%&G#jUy@czgsXgq{)cJL#|qoW-u2Q+)9@%=b;0@ASnbnCY!!DLrg&9ZQ{I z!>*2{uBP$L^f=&$dL3P zV4Rh`S55;^I#?eg@`^zye`MKiI#q;rC!5BS>mo3+HH#&Y7s5ycBown0qstiN%9vn? zmP#2OKjf_V)9x6Xq$na1piK1rUXcKQ_=fRD&TwOsbBaFLJw>T-_kp6n?pC-24Dxp; zT;f$C+};z87t#@t=7Yht)RwL*!I4gAI+rjxKN(6Ni}3n6d@=aFKACW8$TNH z2fDtjU47lCS9;#Zhfoz#3x{P)(;O-c6ZA&*4HPH{>skMD^kiZUWqy$Z3_hr8=z%IsbsxfGttIB~VQ z%p4zwCN6-50s+34@DbV|o>@^q<_RoiK7k7{`V_4@W9E!DPtr(ASVa)lL6s>H2$dzL zc{g3pF@KJLMFsHcn2!xNd&4YkY zsA`F_EEpE?DzVLJn5Z{LCHeA^7|WiUroKWS;bSOaSc2&>&Q%m;RT;Iiz>mz&VOuf$ zMuZA7y~rU+eGU=gvzg97lkT9AI4(%-LUrt*SW?eRn^_vp?|ocBabQteblZzUaTi~D zHE6py6l!a2muXKJYVcC#=|&Uif}8qEvadcH^Ny_2WwwSDm9gag4BSl%P~2h;{@3Dp59WD`0%0I6~@#UMz`3 zmy4FLuTwNai@#1-&)&428Vn^R>2)H3_d3EW^F5+Ol$Ome(QT~HxwhU|w3jH(jZMxS z>TeT_QcW-GSkcudxhi|dmjhH`@LdERAw4EbV>vVaaJ|eh-;ZUB1g0q43LkG+ zj=CX#GIWB{5q@?t|17pxmGJi|M4?SbZW>5!7Nj*KH1sTqXIDXGv`3y(t;PgZc(rLT zOS}35DfmkW|0^n#F|0v0M7#sXu%<7HH2Q+KO{L3yt z|9r&;1s`xj$)kAyOY&2>4$O6pwz@>}QfA`FAs4TAb}ievoK0r_CH2(i?Lf4g9?zMx zg)vT_#p2pYDf=z%K*^qYsW_=p*guI)@{wFO&yf;z55!FkYnlv~QaDmh7n0!nOtut% z_vXvXirf;3jCoIyU4y8iCXr+x$EWo;jhEffR)g@0guFjHfpC{IlVu#ZT2{mR-7B+V zH8w&SKVidMD5BIQ^$vP&Vm^W;y5-)jZjji#6Y%oxX#eyJpM0V8UOB%*!<4yO==i zNK&kn9C+DfqD+LO<`)53b|}5t2h1IS7Z$)_lP=qNEX>97tz?d|Gs#R7jUN$Rqew(W zqGA4+9z`Bse72p1xFH8AhwY@d6Y1~*HQ%(M9($6P>GKpIlI+pXfF^Ax9ZTV8CE5?U zcz}d2+9Ae$h=?VBmjrrAVwh_~r$*7FghOc-3l8P=kn+rgLrG>;R-&JP3+C_W@>9C} zo-RMj?tYHD9rG9B`kuJ{Qe1x}uD=%7-_W&81sbWYAYo2F#;G8>fM|IE?NbY)8nKWx z(kvti9ZM+{uxYDRxp}wajADi8<4U7LK7#%WHw>Z`eR73Yz$@hR0ct>aKpP431EuBSVcc_^0H}hI z+Y#@tM<}U@u0KTR_67i|$z$kQc-l*~5Ndj(w?Jh$Rz<$QiDgjOMc|sfyv+AfTc91b z`kJpf7o@j9wdRHuSOJOgw_mp<+a)77JNq?H~sGB@>cPycNF3W3J-`vW3rnE3pfjCq~SQCDR4W7yP zRE%C87!1x2P(@XWPsW@ttTHTCiTG^Cn~o*S z!9jSDiFn-{hjjL#@{5kid>_#O-Sc&@$O26f-)kxMdZ?^3aGVN)18Cpm2hjcEc$%y+ zsuN)wYX4i|BXBNFRM@}~LrWC`b+QR13>-Nh;sYr2q0$<*Tsc!oFjfp0&_>TzELw0< zj0j~X>E}bP&qB?SQ3MCnK9pq~pUK6ULQB*@-ZXq8R@q4zy-7;LB0>@@M^jUQ+3f)_ zK0II?#XxHkFp;Z@{>^F1Qn3k2?ZP%uFve;cL_Ur_SBNTpJl)TyMEYehdmV~sp>r&V zp5AwaPq@sLsfr}}2#6Sz*<5Hla3|B?x6>C?AKgC~_R)z*ot~ltDB=eRQXl|G89j^; z50Y(^nwYzA-vbYWpA%kF?O2{h^5ySOm#1b@QrQjW)eIIi#U5}7bvDdKzl7K)*9VZaBY4v1$_ zCxB%+s$xNJ&_X(^>S!=jA^6zdz-7Tg%-#rHoNm-DELwmQH?RZkaa0kir+#5SISM~) zbbuKx(p}3z2OnWXJ-ZtbRHoHn8Z5XC40MJP^$tI%0%}8M)LkK?uNfazsB`x+pGrED zp{rIi_GvqOklCBm`^(2-Zvyj$CgOZHU>kuPhjN0rDIf*S3gB+x(NUZsZ_f9ZMyVhn zhOt^Rd!UXFY9t2uC=JH<<{xpuneXG`^9l`%;~PNY#g4Dvg-%`Z9>?A>)EY*TxH9$Y zX%RV(caDj`t`x5h8$OP}=rSFo%kU{TNxN$DsZXqF5WB zq+n${LcS=4i{(=sAp;VlQ0i90u`<0EgST}IX3&+=ij{O%F=>BkeH<$uiWdF+VCP!N z8=UU&lqy;^VGcM-RmZZRQP3Tnm7^z;@wXuF*P~TfJw7+Ue?WbFD0;kM<}gdcbDyXE`&P zote%>B5UW;ixVq3MT~lqI4O*xNP%8Zv;q3kx1tXXiaz#^z7$9sv`v9FZCtcKU;6!L z=FFTKa)-N=oGO3?XgPD{T>ks{|NmURF#5IMUm6kr_*Cedmb=z6Ivv;RurT3!I$k^O zF*i!yNsj(}^4VmTHv;2&=*2;sC42-m+NR}n0_G;KCVY~rN0t+|vi9R4Ye$yn=FQDf zbIcrnHJLRVd^EBmhbf=72WXtR>-2*Zv|}C3Zr0M>v^3R^{F{p?_OqW z1eRztLXAdh8oimM(2w~BV2u*<0B`6ya^@~Rmf^I>cRQBLlErw%;7ucn0&69XKnucs zm(>Xg&+)cngdqy?Jn9;~^l48g_KTMlqkT1CU8)oF@yJ-EPl-8YPMdqp`^;VD3}2b= z7?CmGVb|vU^~m(x`N#Fh^PF%VbRdifq4`xSGUJs}5daV8Q-Ia-3c*@I2t*H`+ZnHz zBYf0yJ8Vs%cFG9zejsK(0Fpk0{}1E;5&S<&NPPygC{fvz{;oz ze;}he36)cB%v1U5f-qcfk7%K$G;`S*fI35$h>6`N8Lf zyfmf!wET4;JJfi0#DY@gv9xk3T!*-P&BO*Uo=bU_!f5oR8liL+to`hES*s9jUdaEv z0{;Rr9!zmpHLqL818{u@fIcnA*(@lf&?jSmgEycO#%f^rrt+0fD8ovsl*$Uy7=x2W zH)qVtB$5E`6=+y39bZ-|0~1zT`BYY!(0&qVKb@K@bM(@0?i?98<@xJ@wQ5Gq{7IWV zbyR!oV~_o`_M&5StezEUOPbmbPKFHn&k?RP0t4sCi()N z*Dc4ojOJ|p#ec|G=c5?Bu_R`6vrIU-xm!CjQ7`!;r*fo~+WA%K; z0%{;+V7SpbAZ|W?dg;`&sDJXQv(KGfz6_wXGiR3b119UCs5PV_FEfj+;^BFU-$hzka>7>c%ZESe*xxiNWFg ziB@KxJ}qUJH*#^6I;fNs8u{DB5MH3r8JPOWrw%~5_&ziB`!WB&@pP~TFA>ObM}F@O*U zR>JS6$tLm^`VLM$#=B78x1qj=E}ev$emE`3$@ar(sp>WiG%fX2jc>~7fZta)bxDP& zuT&_-?+vLG=66a$&v#<3EP5+xbG@4=9njs-pI;u-0j0{AE9-lf4k%5mPZD~n6Uxt> zb-P~kG@MC4jLF9e;a9)`QQb-Sm%isB>VjJd2PG69QP*kR^~6xKF;GwY7&Vy|!`De3Z>;s41%VUN zbAG@=7F=Tq_3&WY!{K~v{Kf?E>OhrPHvS*5KHeDl^lHj#<3RXOu zlVh{&&McpRM9zVZ0tCK~AQB=W-kHiJ`xLsepT-YS`waCvZ5PzGPg99RtszjW;&pc) zL6}*+VdFg~z2DJop`1&KSzox@NKKZ6uBpJ|!Qak8RTn z6wYmB#>f?qj9`^TNbTxrDzTgpEvLnhfkg|eli05SPT@u)OP27D^cN7J3s zw0#$97?c)8;uj=Kc#{a{t=PzECndh~u@uhwQKcm@$M_y(M;t--6zV4OzHJ?exF}5Q zU&6Se_=^dW)bydKNpf``K|YfU6GZG@DoI@qsWNTPjnuq-k$BG|e17j!2J#LI+Je8n zAS8O>wG_M8a^p9iRZ%S0SF^#)nUrFrr9N{zm~iwputMQAKiH>hgk0ke61K>5Db?*? zrLHNxj|^-^=R&N1tuk)eVj@K?2Io7G=7rf?pG(bliBCkm_o$m`` zGA|J)SieEA&fLyM8k8h?sGE;~hzTFd{v$$08DPFAJbL z4`e9c=8W5v3lnD}dEZoKjh#kbgBSJ?y_sMF1g^Dgq5YvEq2`tNPEzUR0Xo z!-XD0nz$1#G&THtLu&^Nv6G$#LfV{mO1y_6->cYr87XD0Fqh~u6F#RcVO243(>8LE zqeyr+Q=}Wb*|nI{*?j#8=4(`ZR*aW)WAm26Xe%Dec!rClYW`kO^uLCosQn|VJ#GJx z{>(_)LKOjB2Kh#_$w;1L47Ts7H&ax?rmUKu#m`utJ#mA-O6EICQ&$&{Ig7 z^>>k~s(hG_(c&qVjn5ImC#bPXaC;IZGEC!-4nZ)9%1~_zG!74khCPG&o1;*;J=Jw! znui)R&a^#>KXr2^Ro#_VC86A6Qn3H6B)Fp(;9o_nTDxlh3$>cIzdu0Lf7md9V)C{X zSKD`>Oa7UXz|J1kW)<6038DLiIGS)zwA3ab&VF+EE?Olp%29W2U*%+F-vh{{jAnXh z&nRX5y=OMh6qJXV?J#ookSfR4fCcSy8^Km9RIz_rX?#?hJF!{&EX!4aMrg{c{g4Xr zCo55XO3Yzm`w78?w4LJO>LkQU1ZB^u!}f{jS1XOmVr>5my66|u(|C2-QjROLDE>-5 z9{=`j8O4_chjyYMrnfJvq}*2#;ner9los~xjU44oBU_uHZ@Y`1lGk6RUKY(3)U#iw zUS(8%P(aV8++Z9_ z64l>9DXaI}L@b0Cn~b7Ts%XUT?Zr-H!O@4qnyX>z_unA6znu2i&tRk(${-CYO4_^0 z+*mWWZ7w2H70FT*<$nk+Ws)k-H!8BKSlEAyW<~a5qgZU>%k+WzCWPSqf!RYG_|F;+ z*v>}H>bs>;&9e-ZTjUQ{_#l^2Dsx;pYecYTX~sf&Hl!I}1a@hf(f%B8u|JQW^8EFS zq`GzaOujr6;z?>WBmF5@d3!e`L2^5r_6qKQT=ht_xjAha zJ0O)wDa+y@9aT6ka`78}QOu{wDgyIq`%|Lo z)$FTnizFkr%XOxy1W8r7qd zQJ&Db#guQdwKfx*cMEksT@)3F{lPGZNp=1XHJY)H)1SlVs_J}+xb%j0a{0oGh7+^X zLEr@ogQ&39i^GUE31f%sHLF8=Y~5_vElPaaeM}u3g#wu!LNa=W>~u+NsWpjSRX!H|aL10ADKoJJA zV5D0T=mQ*~AkSalI`V9ks|Vo+~Q zwo;cTZr030Wp1jE0_%@#2WwKByQ!h-gw)bYu2iLJQ|ma(s(&mrtiIRGgCmD%AP+8w zmln0ijZUNCdU&#hEg9m;g`4_DUxpKgF=WJDxXVbjms`%J3Bj>!v7?k>;A3)c%L^bk zAIIJsvA4xOPp@K=nELK|bLnAH>~e8E`8X+y=jh<*IwlHPD}7&4Vg$Z3+o|365O0|wS<-#; zj(?*<_UE1xj_1NYmrt3WT>RM809AN;lBm2s*55jFlFLo`S8t&^W({fKQw@$ zN&05P3&=NQ!);LF7H7l%99^c_@V~=TO*XuwC^8q`H}kJ(S~(LgRRA-Ug8|dIe~V1` zOzo~T>6dO%s}S?=W#dXGqHH)-$x2g*Ge0Tz4mADyf~MQbf#>PTEHRwF7v%fzVaO-b zW$#m?8EF71YOBqD-$m)l4f_uzr~7;@K-@E$xkH&Bv=xW3dkZbbj5CRFMsPbEqG zAEN5kN#cQ1l@AYtn56xK)M&>3A+ca%s*;Z`;#^&p2+r3Z?4P1W=@gk&D9HPXVW1G( zo3pWTR?vPNjR&MO0X`6=bL40MBKi;^h13{n4a$K*#TwXINFhyEA<{#I6!tP;v~{3o zU!M%h08 zQec!~(aW)Lb1cNuHnG43K$+GSfXtf5`2&a^=CJpA4!P<%amr;*8i={<`~Z{NGeu>2 zM^GiykT)e6@-81T@=Y8<+$9328S@yF1h)e9w;B0$NaitqXN3DWLY!Hp>v+Vi7A#D! zLmG{6)Xu@CSl*O%SO>2$jkkkOw&Q>ZmT3 z^Kf*f1NT9s)x&&g4~IhH$d99B(VSZ34NwaQNFtmr!V4}wVaWFPe7sBqo)-aBka8{I zJLa)nB?W;td0a(>X7(Bf4&L_B5gWR$iM|4q(KHU_2fOG7rwOr-Isf<;-$z$kxp7Zl z!y(;X@)n<@v**5!)4Oz0R)`L#(-Iuu7bQAf3ZjdhhPX`$<7Ex9JERu*-hlaD5a|vs zLjgH=@}_Ax`Rgb@z}75K5yu+iP*xh{qaC&qucE(6I%YzrZ_qC@dMIgt9c@NX6MU8n zn(5fFiQ8uoP4h+^b>}`gCyq4TSN^CoTE@{$EE+fr_dSgfs5tG!r&7u*y^M-p5= z1u`L&Bi%O#smZG8UCR-da`8j-gh6n=Q|KlRD5AFxSU!O}+Q6#x_1q4AKx}Sun7ax= zba2;Elsv!x2%q$suhXd|aq|TsgM(Z?q#dx6YVdpL%zudcYET^F{w%tqOx#(M@Vls{ z001?0T)hSM;P3{HHZgzh;g5YB^qdU3?MnAlQgr`_?4GVcBaywzf|kXit{4LbVcv{- z4%D|187t7DPGlzM_V5|VWKYkPGe;mhdwYZL57*tuSkq11_~g*7PYEt{qdfwAZ`i{b zyY!$*2twT<-o?2SXqMMDGSbepO>C5CgYl`pfy#n}Xni&Ik=ml0?!@(VnHjhN>G9eY z&f({F;UF1`FkY!tvw9@Ej)yy^2qL;|?rH*&>8-F1GZ}7X?sC89mbRUS0 zJNdBoNO#V?#Sdh+>OoeWZfetR@LkNkMz_}SJ*hQ;`a%+soU@=Ck)H1Q6F1f!08o&u z2<8?R9fy6$n)8FDQaZdMiqTs)e;Ff_iYxF?eVhu@XZt$MiV=Q7-k@TUyF(@M;YMga zfGg(2cT9Z8aXMuz+k#l^PR;g)xxekcJ zJ1d2G?MA7`h8$HiI#}u-Q%rzEE<5;L)xNSXnCW3P+qh^9s)1>>?Kuvl3vz^cbNp0R z{tkHmX0ikefc=!PB@m?$LZ1$p8_!blL|!c9cEWPoPTV0qS*1%BafKc1du9q#&$sn| D`ZWN2 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/gen_efi_app.setup.validator.doctree b/docs/build/doctrees/gen_efi_app.setup.validator.doctree new file mode 100644 index 0000000000000000000000000000000000000000..41256a3fdd85df6065207bdae1604cb463058425 GIT binary patch literal 20372 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree index 4e94de100158d97049afeaa51819464b7be54b95..a0fb0d3fa4f930a77c96dce7d235f8e7888413b6 100644 GIT binary patch literal 66838 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

>PO)sTk% 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 diff --git a/docs/build/doctrees/main.doctree b/docs/build/doctrees/main.doctree new file mode 100644 index 0000000000000000000000000000000000000000..607ebd46fb17a75e259ad4a97e04b8aacf623269 GIT binary patch literal 9463 zcmeHN-ESOM6?Yu(+Pm>boHl7u;&cjWYm0cd>K7%6qPl6)nj~&;oVKA3|KrS<`jK-ya=l=uVL46^I*g}s$_eeH#{!YQpDukT{bsr- zYq7P>!z8v@D#rj}yPogFEJ)u<AGtb15iGaT3Cgzp6`T}xV) ztXo3FUMmrxjc7USIh^pGw0(*cF>4b{A}58_p{3NFb5FX{ z?kV@MyCAPM9ZOhEhix^ZUEzj7^J!Crq0gHg7MQHHvbv$XgW3u7}4%;d5Nwd&>1SGhRf=OS%?_>CV0>4W{4mc8fiikxy5m{cG%4yBj z^9G$y%v4NXRwK8%CQ>VLzvwO()U3Iu!7~V8&H?6uM`AR64~XTeP?qI`LqMh{Sg!;r zXRoUZ>x#T+S4o$YU_!8X0I;e7wfIlSe3%Iw_+8c9*7#Zba)HQMg;2iwX@!zudX9tx zb_N|IY-{d8GKYZ3WyPL)L3xSZOhh$VgMwO}*oxfJs+=sd!97uo3o@;PlWDpO?rl;R zAoX?V`AD98tpp4T*ht_@88DIi0?2(yI{~-y#!tt`#x8}?ZtQhjQSW~;7B4LsPd)k6 zbH;1F<#;_WHrB(yW?PE|FY-N*21dqKAa;Rq{rctg zORoTa<;B%&s~fk0v~gv1W9{)D}>ZM!PR@RLhx7KgGdh>FleiJZ7DX_jkjYC+0h#=mfj-j#SQj0aznbOCvlbIHHQj= zd1kPsn zE?+cSs1GQ;qb<{F3zc7}wor($h$1pP{ zv{^GyfW3@=V&I!@R-7o z-uOL+C*DwfM2;^mX`$^`s~Nm(b@XLgJz@rR3V2yPCi+@LN))lcfr6Vm$bCvsnTdd9 z3c6s~TXd_cV0|3R2DJl6I-%mf97h#LPGUmrMo^ZD(kNIC%~)}Vi8Q-O9>ElknC-Pa zJKaM`WcQpdKLJ9YHH9g?e~p;_rsl)z_&3Vu3^MQ52;Q&}gq4O?B5Q`13%tq!uX+oQv)atf6KUn#dnqmD|XZ9-86PrE5#)bw{DFSVd8 zqDs<$$`X>N=$wVVw!;QKM>9GE=dQ{Q15vIH7bU^|i&vh1F$@JVNh{)1u`%K#;Hs2R zF8Zh!e$3uZJQR5h%dsL@6W4JXR{md|QE2*4G78*wetR!0>HeCaPj-Jr|N6QC8!b?1 zh0g9>D7u9<@rA-UnpVPn7S3zd?_vOngYhjSHx-XyZzX)1~)(oJ);@`A(P%OxN^1G4hcmIja z2jny%ejrW{TtH0M?x}F3!>tkG&W8k7m|pG+MsNB+Z^~U@q5Mcx26ry%zzF{v=+@Ve zyUxOA_Y5iwauP0Gh0pF|G*lT$c^rhxy7{vwCj-1~s1LL!XY=W0_3FXQbhem}=K+!V zX5I&y3&MOZhoh6|KF)+d%8>36gC5EliNt*RZtg6)7j!FbISV{2XYyc&&dS?SIMS`- ztixJ$+_TiF7^MmQ-kp0^K8UyxaFoxf`=pA$@ENLiR}rDG{PgOWtmiPy!7!ow4#` zhTw&M0^XA;2IvnkF05XJ!I2o@4yYmp*h%G~CVFie1vvI#69DyWn8ZFtGZdDow@9l% zrJ_Y6kF{|OD%`BJct_4qKQ%~t<__Mtz4VTpr4mhKqKQIXT8;xx>KW9z)Qm}y)y(^w zxG&p~H9Xhkbj+eK7N(D$0oXY%>#pVZhZQ-`c06!V;1R=fpo*+Gtd(?d-7Go_0cD#w zmsvf`)F2L<5lMuf7l3CbYJh0cK*3}!5$)yYmsL`8YH-nHaU8~`izLBkXjxVXRpdKz zPIJC=N=2QL%7vkop(DDCtZG)DTi}rIJ~g;7v{@b{8lZdJ1&e(3BAW57pp#e~298q# zIgY-!d;o2YFm_CbQRa}1W;SajA~cIBIgVTrkFul}nSGT6 zW7P!887vME9&yZ^no-J5(l4eW&Jrgy@p1#yQMMC>oSEgFN=s~EZh73(Dm!PQ>14Hh zA|%6dGB*{N-86{d@CeH8aOg}1X0|;a#G%K0fEYEw za-QrBniF)Oh(20^BE5d}2{{|F$b^;X0x=PThf4%)2kvAV@?k2CakOJy=<^{MeJvfS3aHUzKj4O~_%#O}=`BL5HU)ORN`H?Rlo32hG*tiE43 zMvj6ftsyY4N4o2WXw4Ev^wo&X6e`neF$WgB3k+O_m)o8^ZUbu5WOxzyCMpuB1ke{G z?#TJ~PzpZ`Ro;=KgE&7UuoYLL|<_k?kyh1t;z0>bOr8o0H3YsP0ZsF0Qa*iO1K^W1sXuq0hlzKe#UCzfG_ArJfYibscOS*KB-A>B*#+dO z)$DPa`}O?EQuM(usF&BkySL(TM7#73g~y-auFv#)1zB-RJpxs^C6O~_g;Ok;u|23Q z@epj$GvrrtIL+(wjD~~dLP2}2(C_Q80)233vJYJwII))Bsx}=PI3FP*7AXw=`0!cT z3L-VUo{fGwR2yN@4t*cm0U8kZCNE|4??ZO)rt7d^JXYZgpb8vHt1s+3zk%r^{b{9l aN4&uH6NmJ?L#_(n(13r=T$#=g8~*_<5o1>X literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/modules.doctree b/docs/build/doctrees/modules.doctree index ad7834fafa62e5d194415b17e1a14fe04e3a8d43..349b03b661fec6915a80b43d11473b8bfb917072 100644 GIT binary patch delta 112 zcmew?+9<}-z&iEYMix#c6Aix}?)22W_|&w__{4&ODQ#2ydRTH3GxLC~)E=J9yyTqH z6rf~IYVnlVDH<6L8BVF2jhXV989O#FX1&iW6P*!J+{2ldn44NsSpZa2J0&B!vp7Q$ MNJng*#~I2909dyw`~Uy| delta 98 zcmZn^`z*@Rz&iECMix#cHNPJ2^whlg)U?d_#Dan;ZBr6^crx>nb4pWyLOH3$Q(~uN zI3#X%WXfk|Y}>q%^**yqWJXwV4`*ItZfZ$o0Z>Kll#IyE;tWL~9kzK5XDA~8Dx@XN diff --git a/docs/build/html/_modules/gen_efi_app.html b/docs/build/html/_modules/gen_efi_app.html deleted file mode 100644 index fc44b20..0000000 --- a/docs/build/html/_modules/gen_efi_app.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - - gen_efi_app — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation - - - - - - - - - - -

- -
-
-
-
- -

Source code for gen_efi_app

-# -*- coding: UTF-8 -*-
-
-'''
-Module
-    __init__.py
-Copyright
-    Copyright (C) 2020 - 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
-    gen_efi_app is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-    gen_efi_app is distributed in the hope that it will be useful, but
-    WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-    See the GNU General Public License for more details.
-    You should have received a copy of the GNU General Public License along
-    with this program. If not, see <http://www.gnu.org/licenses/>.
-Info
-    Defines class GenEfiApp with attribute(s) and method(s).
-    Loads a base info, creates a CLI interface and runs operations.
-'''
-
-import sys
-from typing import List, Dict, Optional
-from os.path import exists, dirname, realpath
-from os import getcwd
-from argparse import Namespace
-
-try:
-    from ats_utilities.splash import Splash
-    from ats_utilities.cli import ATSCli
-    from ats_utilities.logging import ATSLogger
-    from ats_utilities.console_io.error import error_message
-    from ats_utilities.console_io.verbose import verbose_message
-    from ats_utilities.console_io.success import success_message
-    from ats_utilities.exceptions.ats_type_error import ATSTypeError
-    from ats_utilities.exceptions.ats_value_error import ATSValueError
-    from gen_efi_app.pro import GenEfi
-except ImportError as ats_error_message:  # pragma: no cover
-    # Force exit python #######################################################
-    sys.exit(f'\n{__file__}\n{ats_error_message}\n')  # pragma: no cover
-
-__author__: str = 'Vladimir Roncevic'
-__copyright__: str = '(C) 2026, https://electux.github.io/gen_efi_app'
-__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__: str = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
-__version__: str = '1.3.6'
-__maintainer__: str = 'Vladimir Roncevic'
-__email__: str = 'elektron.ronca@gmail.com'
-__status__: str = 'Updated'
-
-
-
-[docs] -class GenEfiApp(ATSCli): - ''' - Defines class GenEfiApp with attribute(s) and method(s). - Loads a base info, creates a CLI interface and runs operations. - - It defines: - - :attributes: - | _GEN_VERBOSE - Console text indicator for process-phase. - | _CONFIG - Tool info file path. - | _LOG - Tool log file path. - | _LOGO - Logo for splash screen. - | _OPS - List of tool options. - | _logger - Logger object API. - :methods: - | __init__ - Initials GenEfiApp constructor. - | process - Processes and runs operations. - ''' - - _GEN_VERBOSE: str = 'GEN_EFI_APP' - _CONFIG: str = '/conf/gen_efi_app.cfg' - _LOG: str = '/log/gen_efi_app.log' - _LOGO: str = '/conf/gen_efi_app.logo' - _OPS: List[str] = ['-n', '--name', '-v', '--verbose'] - - def __init__(self, verbose: bool = False) -> None: - ''' - Initials GenEfiApp constructor. - - :param verbose: Enable/Disable verbose option - :type verbose: <bool> - :exceptions: None - ''' - current_dir: str = dirname(realpath(__file__)) - gen_efi_app_property: Dict[str, str | bool] = { - 'ats_organization': 'electux', - 'ats_repository': f'{self._GEN_VERBOSE.lower()}', - 'ats_name': f'{self._GEN_VERBOSE.lower()}', - 'ats_logo_path': f'{current_dir}{self._LOGO}', - 'ats_use_github_infrastructure': True - } - Splash(gen_efi_app_property, verbose) - base_info: str = f'{current_dir}{self._CONFIG}' - super().__init__(base_info, verbose) - verbose_message( - verbose, [f'{self._GEN_VERBOSE.lower()} init tool info'] - ) - self._logger: ATSLogger = ATSLogger( - self._GEN_VERBOSE.lower(), True, None, True, verbose - ) - if self.is_operational(): - self.add_new_option( - self._OPS[0], self._OPS[1], dest='name', - help='generate project (provide name)' - ) - self.add_new_option( - self._OPS[2], self._OPS[3], - action='store_true', default=False, - help='activate verbose mode for generation' - ) - -
-[docs] - def process(self, verbose: bool = False) -> bool: - ''' - Processes and runs operations. - - :param verbose: Enable/Disable verbose option - :type verbose: <bool> - :return: True (success operation) | False - :rtype: <bool> - :exceptions: None - ''' - status: bool = False - if self.is_operational(): - try: - args: Optional[Namespace] = self.parse_args(sys.argv) - if not bool(getattr(args, 'name')): - error_message( - [f'{self._GEN_VERBOSE.lower()} missing name argument'] - ) - return status - if exists(f'{getcwd()}/{str(getattr(args, "name"))}'): - error_message([ - f'{self._GEN_VERBOSE.lower()}', - f'project with name [{getattr(args, "name")}] exists' - ]) - return status - gen: GenEfi = GenEfi(getattr(args, 'verbose') or verbose) - try: - print( - " ".join([ - f'[{self._GEN_VERBOSE.lower()}]', - 'gen autoconf project skeleton', - str(getattr(args, 'name')) - ]) - ) - status = gen.gen_project( - f'{getattr(args, "name")}', - getattr(args, 'verbose') or verbose - ) - except (ATSTypeError, ATSValueError) as e: - error_message([f'{self._GEN_VERBOSE.lower()} {str(e)}']) - self._logger.write_log(f'{str(e)}', self._logger.ATS_ERROR) - if status: - success_message([f'{self._GEN_VERBOSE.lower()} done\n']) - self._logger.write_log( - f'generation {getattr(args, "name")} done', - self._logger.ATS_INFO - ) - else: - error_message([f'{self._GEN_VERBOSE.lower()} failed']) - self._logger.write_log( - 'generation failed', self._logger.ATS_ERROR - ) - except SystemExit: - error_message( - [f'{self._GEN_VERBOSE.lower()} expected argument name'] - ) - return status - else: - error_message( - [f'{self._GEN_VERBOSE.lower()} tool is not operational'] - ) - self._logger.write_log( - 'tool is not operational', self._logger.ATS_ERROR - ) - return status
-
- -
- -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/core/model/project_setup.html b/docs/build/html/_modules/gen_efi_app/core/model/project_setup.html new file mode 100644 index 0000000..3ef369f --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/core/model/project_setup.html @@ -0,0 +1,131 @@ + + + + + + + gen_efi_app.core.model.project_setup — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.core.model.project_setup

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    project_setup.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Defines domain model for a project setup.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Mapping
+from dataclasses import dataclass
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +@dataclass(frozen=True, slots=True, kw_only=True) +class ProjectSetup: + ''' + Defines domain model for a project setup. + + It defines: + + :attributes: + | project_config - Mapping with project configuration. + ''' + + project_config: Mapping[str, object]
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/core/service/engine.html b/docs/build/html/_modules/gen_efi_app/core/service/engine.html new file mode 100644 index 0000000..0cc0004 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/core/service/engine.html @@ -0,0 +1,182 @@ + + + + + + + gen_efi_app.core.service.engine — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.core.service.engine

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    engine.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Defines application service for file generation.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Mapping
+
+from gen_efi_app.core.model.project_setup import ProjectSetup
+from gen_efi_app.core.service.isubprocessor import ISubProcessor
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class Service: + ''' + Service for orchestrating the file generation process. + + It defines: + + :attributes: + | _subprocessor - Adapter for subprocessing. + :methods: + | __init__ - Initializes the service. + | execute - Generates and writes user files. + | is_initialized - Checks if the service is initialized. + ''' + + _subprocessor: ISubProcessor + + def __init__(self, subprocessor: ISubProcessor) -> None: + ''' + Initializes the service. + + :param subprocessor: The subprocessor. + :exceptions: + | ValueError: The subprocessor must be provided. + | TypeError: The subprocessor must be of type ISubProcessor. + ''' + ctx: str = 'service::init(...)' + msg_subprocessor_none: str = 'the subprocessor must be provided' + msg_subprocessor_istype: str = f'the subprocessor must be of type {ISubProcessor.__name__}' + + if subprocessor is None: + raise ValueError(f'{ctx} - {msg_subprocessor_none}') + + if not isinstance(subprocessor, ISubProcessor): + raise TypeError(f'{ctx} - {msg_subprocessor_istype}') + + self._subprocessor = subprocessor + +
+[docs] + def execute(self, *, params: ProjectSetup) -> Mapping[str, object]: + ''' + Generates EFI application configuration files. + + :param params: The ProjectSetup object. + :return: The result of the execution (return code, stdout, stderr). + :exceptions: None. + ''' + return self._subprocessor.run(params=params)
+ + +
+[docs] + def is_initialized(self) -> bool: + ''' + Checks if the service is initialized. + + :return: True if the service is initialized, False otherwise. + :exceptions: None. + ''' + return self._subprocessor.is_initialized()
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/core/service/iservice.html b/docs/build/html/_modules/gen_efi_app/core/service/iservice.html new file mode 100644 index 0000000..9a9b110 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/core/service/iservice.html @@ -0,0 +1,152 @@ + + + + + + + gen_efi_app.core.service.iservice — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.core.service.iservice

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    iservice.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Defines the abstract interface for services.
+    Provides an interface for the service factory.
+'''
+
+from __future__ import annotations
+
+from typing import Protocol, runtime_checkable
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +@runtime_checkable +class IService[ServiceParamsType, ExecuteResultType](Protocol): + ''' + Defines the abstract interface for services. + Provides an interface for the service factory. + + It defines: + + :methods: + | execute - Executes the service. + | is_initialized - Checks if the service is initialized. + ''' + +
+[docs] + def execute(self, *, params: ServiceParamsType) -> ExecuteResultType: + ''' + Executes the service. + + :param params: The parameters for the service execution. + :return: The result of the execution. + '''
+ + +
+[docs] + def is_initialized(self) -> bool: + ''' + Checks if the service is initialized. + + :return: True if the service is initialized, False otherwise. + '''
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/core/service/isubprocessor.html b/docs/build/html/_modules/gen_efi_app/core/service/isubprocessor.html new file mode 100644 index 0000000..e401e83 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/core/service/isubprocessor.html @@ -0,0 +1,152 @@ + + + + + + + gen_efi_app.core.service.isubprocessor — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.core.service.isubprocessor

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    isubprocessor.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Defines the abstract interface for sub-process execution.
+    Provides an interface for the sub-process factory.
+'''
+
+from __future__ import annotations
+
+from typing import Protocol, runtime_checkable
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +@runtime_checkable +class ISubProcessor[SubProcessorParamsType, SubProcessorResultType](Protocol): + ''' + Defines the abstract interface for sub-process execution. + Provides an interface for the sub-process factory. + + It defines: + + :methods: + | run - Runs a sub-process. + | is_initialized - Checks if the subprocessor is initialized. + ''' + +
+[docs] + def run(self, *, params: SubProcessorParamsType) -> SubProcessorResultType: + ''' + Runs a sub-process. + + :param params: The parameters for the sub-process execution. + :return: The result of the execution. + '''
+ + +
+[docs] + def is_initialized(self) -> bool: + ''' + Checks if the subprocessor is initialized. + + :return: True if the subprocessor is initialized, False otherwise. + '''
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/engine.html b/docs/build/html/_modules/gen_efi_app/engine.html new file mode 100644 index 0000000..80b3628 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/engine.html @@ -0,0 +1,225 @@ + + + + + + + gen_efi_app.engine — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.engine

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    engine.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Engine orchestrating the initialization and execution of gen_efi_app.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Mapping
+from logging import INFO, ERROR
+from sys import stdout
+
+from ats_utilities.base.engine import Base
+from ats_utilities.logger.ilogger import ILogger
+from ats_utilities.exceptions import ATSValueError, ATSTypeError
+
+from gen_efi_app.setup.bundle import GenEfiAppBundle
+from gen_efi_app.setup.validator import GenEfiAppBundleValidator
+from gen_efi_app.infrastructure.cli.icli import ICLI
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class GenEfiApp(Base): + ''' + Engine orchestrating the initialization and execution of gen_efi_app. + + It defines: + + :attributes: + | _is_initialized - The flag indicating whether the engine is initialized. + | _logger - The logger for logging messages during initialization and execution. + | _cli - The adapter for the command line interface. + :methods: + | __init__ - Initializes the gen_efi_app engine with adapters and services. + | process - Processes the gen_efi_app commands. + ''' + + _is_initialized: bool + _logger: ILogger + _cli: ICLI + + def __init__(self, bundle: GenEfiAppBundle) -> None: + ''' + Initializes the gen_efi_app engine with adapters and services. + + :param bundle: GenEfiApp bundle containing adapters and services. + :exceptions: None. + ''' + self._is_initialized = False + + try: + GenEfiAppBundleValidator.validate(bundle) + + # Initialize base engine + super().__init__(bundle.base) + + # Mark as not initialized (waiting for other components to be initialized) + self._is_initialized = False + + # Setting up primary inbound adapter (CLI interface) + self._cli = bundle.cli + + # Mark as initialized (all components initialized) + self._is_initialized = all( + component.is_initialized() for component in [ + bundle.base.option_manager, + bundle.service, + bundle.subprocessor, + self._cli + ] if component + ) + + # Setting up logger for tool engine + self._logger = self.get_context().logger + self._logger.write_log(INFO, '✅ gen_efi_app: engine initialized successfully!') + + except (ATSValueError, ATSTypeError) as exc: + stdout.write(f'❌ gen_efi_app: {exc}!\n') + + except Exception as exc: + stdout.write(f'❌ gen_efi_app unexpected exception: {exc}!\n') + +
+[docs] + def process(self, verbose: bool = False) -> bool: + ''' + Processes the gen_efi_app commands. + + :param verbose: Enable verbose output. + :return: True if successful, False otherwise. + :exceptions: None. + ''' + result: Mapping[str, object] = {} + + try: + if self.is_initialized(): + self._logger.write_log(INFO, '🔥 Starting execution command...') + result = self._cli.run() + self._logger.write_log(INFO, '✅ Execution finished!') + + if result.get('returncode') != 0: + self._logger.write_log(ERROR, f'❌ gen_efi_app: {result.get("stderr") or "failed!"}') + return False + + self._logger.write_log(INFO, '✅ gen_efi_app: done!') + self._logger.write_log(INFO, '✅ gen_efi_app: exiting successfully!') + return True + + self._logger.write_log(ERROR, '❌ gen_efi_app: engine not initialized!') + return False + + except (ATSValueError, ATSTypeError) as exc: + self._logger.write_log(ERROR, f'❌ gen_efi_app: {exc}!') + return False + + except Exception as exc: + self._logger.write_log(ERROR, f'❌ gen_efi_app unexpected exception: {exc}!') + return False
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/cli/engine.html b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/engine.html new file mode 100644 index 0000000..e418a10 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/engine.html @@ -0,0 +1,209 @@ + + + + + + + gen_efi_app.infrastructure.cli.engine — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.cli.engine

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    engine.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Defines CLI class implementing inbound CLI port.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Mapping
+
+from ats_utilities.option.imanager import IOptionManager
+from ats_utilities.exceptions import ATSRuntimeError, ATSValueError, ATSTypeError
+from ats_utilities.utils.reflection import to_str
+
+from gen_efi_app.infrastructure.cli.setup.bundle import CLIBundle
+from gen_efi_app.infrastructure.cli.setup.validator import CLIBundleValidator
+from gen_efi_app.core.service.iservice import IService
+from gen_efi_app.infrastructure.command.icommand_definition import ICommandDefinition
+from gen_efi_app.infrastructure.command.icommand_executor import ICommandExecutor
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class CLI: + ''' + Adapter that implements CLI commands for the code generator. + + It defines: + + :attributes: + | _service - File generation orchestrator service. + | _parser - Argument parser for parsing CLI command args. + | _executors - Map of command names to command executor instances. + :methods: + | __init__ - Initializes the CLI with service, parser and commands list. + | run - Parses command line arguments and runs selected command strategy. + | is_initialized - Checks if the CLI is initialized. + | __str__ - Returns the CLI as string representation. + ''' + + _service: IService + _parser: IOptionManager + _executors: Mapping[str, ICommandExecutor[ICommandDefinition, object, object, object]] + + def __init__(self, bundle: CLIBundle) -> None: + ''' + Initializes the CLI with service, parser and commands list. + + :param bundle: Bundle containing CLI adapters. + :exceptions: + | ATSValueError: The CLI bundle must be provided and have proper values. + | ATSTypeError: The CLI bundle must be an instance of CLIBundle and + | its attributes must be instances of their respective types. + ''' + CLIBundleValidator.validate(bundle) + self._service = bundle.service + self._parser = bundle.parser + self._executors = {pair.definition.name: pair.executor for pair in bundle.commands} + self._parser.register_commands([pair.definition for pair in bundle.commands]) + +
+[docs] + def run(self) -> Mapping[str, object]: + ''' + Parses command line arguments and runs selected command strategy. + + Note: returncode is 0 for success, 1 for exception or if command is not found, + None if process timed out or failed to start, otherwise it is the integer exit code of the process. + + :return: The execution result (return code, stdout, and stderr). + :exceptions: None. + ''' + try: + command_name, params = self._parser.parse_command() + executor: ICommandExecutor[ICommandDefinition, object, object, object] | None = self._executors.get(command_name) + + return executor.execute(params=params, service=self._service) if executor else { + 'returncode': 1, 'stdout': '', 'stderr': 'cli::run - command not found' + } + + except (ATSRuntimeError, ATSValueError, ATSTypeError) as exc: + return {'returncode': 1, 'stdout': '', 'stderr': f'cli::run - {exc}'}
+ + +
+[docs] + def is_initialized(self) -> bool: + ''' + Checks if the CLI is initialized. + + :return: True if CLI is initialized, False otherwise. + :exceptions: None. + ''' + return True
+ + + def __str__(self) -> str: + ''' + Returns the CLI as string representation. + + :return: The CLI as string representation. + :exceptions: None. + ''' + return to_str(self)
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/cli/icli.html b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/icli.html new file mode 100644 index 0000000..8dea640 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/icli.html @@ -0,0 +1,150 @@ + + + + + + + gen_efi_app.infrastructure.cli.icli — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.cli.icli

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    icli.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Defines the abstract interface for the CLI.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Mapping
+from typing import Protocol, runtime_checkable
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +@runtime_checkable +class ICLI(Protocol): + ''' + Defines the abstract interface for the CLI. + + It defines: + + :methods: + | run - Runs the CLI. + | is_initialized - Checks if the CLI is initialized. + ''' + +
+[docs] + def run(self) -> Mapping[str, object]: + ''' + Runs the CLI. + + :return: The result of the execution. + '''
+ + +
+[docs] + def is_initialized(self) -> bool: + ''' + Checks if the CLI is initialized. + + :return: True if the CLI is initialized, False otherwise. + '''
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/bundle.html b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/bundle.html new file mode 100644 index 0000000..f406348 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/bundle.html @@ -0,0 +1,155 @@ + + + + + + + gen_efi_app.infrastructure.cli.setup.bundle — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.cli.setup.bundle

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    bundle.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Defines the CLI bundle.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Sequence
+from dataclasses import dataclass
+
+from ats_utilities.option.imanager import IOptionManager
+from ats_utilities.utils.reflection import instance_to_dict
+
+from gen_efi_app.core.service.iservice import IService
+from gen_efi_app.infrastructure.command.command import CommandBundle
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +@dataclass(slots=True, frozen=True, kw_only=True) +class CLIBundle: + ''' + Defines the CLI bundle. + + It defines: + + :attributes: + | service - The service orchestrating the generator. + | parser - The argument parser for parsing CLI command arguments. + | commands - The sequence of command pairs. + :methods: + | to_dict - Converts the CLI bundle to a dictionary. + ''' + + service: IService + parser: IOptionManager + commands: Sequence[CommandBundle] + +
+[docs] + def to_dict(self) -> dict[str, object]: + ''' + Converts the CLI bundle to a dictionary. + + :return: Dictionary representation of the CLI bundle. + :exceptions: None. + ''' + return instance_to_dict(self)
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/dep_validator.html b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/dep_validator.html new file mode 100644 index 0000000..3a98736 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/dep_validator.html @@ -0,0 +1,183 @@ + + + + + + + gen_efi_app.infrastructure.cli.setup.dep_validator — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.cli.setup.dep_validator

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    dep_validator.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Validator for the CLI bundle dependencies.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Mapping
+from ats_utilities.exceptions import ATSValueError, ATSTypeError
+
+from ats_utilities.validation.check_type import istype
+from ats_utilities.validation.check_value import not_none
+
+from gen_efi_app.infrastructure.cli.setup.keys import CLIBundleKeys
+from gen_efi_app.infrastructure.cli.setup.dependencies import CLIBundleDependencies
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class CLIBundleDependenciesValidator: + ''' + Validator for the CLI bundle dependencies. + + It defines: + + :methods: + | validate - Validates the CLI bundle dependencies. + | is_valid - Checks if the CLI bundle dependencies is valid. + ''' + +
+[docs] + @classmethod + def validate(cls, dependencies: CLIBundleDependencies) -> None: + ''' + Validates the CLI bundle dependencies. + + :param dependencies: The CLI bundle dependencies to be validated. + :exceptions: + | ATSValueError: The CLI bundle dependencies must be provided and have proper values. + | ATSTypeError: The CLI bundle dependencies must be an instance of Mapping and its + | attributes must be instances of their respective types. + ''' + ctx: str = 'cli_bundle_dependencies_validator::validate(...)' + msg_dependencies_none: str = 'the cli bundle dependencies must be provided' + msg_dependencies_istype: str = 'the cli bundle dependencies must be a Mapping' + + not_none(dependencies, ctx, msg_dependencies_none) + istype(dependencies, Mapping, ctx, msg_dependencies_istype) + + for attr_name, expected_type in CLIBundleKeys.get_dependency_to_type().items(): + msg_attr_name_none: str = f'the {attr_name.replace("_", " ")} must be provided' + msg_attr_name_istype: str = f'the {attr_name.replace("_", " ")} must be an instance of {expected_type.__name__}' + + attribute = dependencies.get(attr_name) + + not_none(attribute, ctx, msg_attr_name_none) + istype(attribute, expected_type, ctx, msg_attr_name_istype)
+ + +
+[docs] + @classmethod + def is_valid(cls, dependencies: CLIBundleDependencies) -> bool: + ''' + Checks if the CLI bundle dependencies is valid. + + :param dependencies: The CLI bundle dependencies to be checked. + :return: True if valid, False otherwise. + ''' + try: + cls.validate(dependencies) + return True + + except (ATSValueError, ATSTypeError): + return False
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/dependencies.html b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/dependencies.html new file mode 100644 index 0000000..1293270 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/dependencies.html @@ -0,0 +1,139 @@ + + + + + + + gen_efi_app.infrastructure.cli.setup.dependencies — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.cli.setup.dependencies

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    dependencies.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Encapsulates core CLI components for simplification of CLI bundle.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Sequence
+from typing import TypedDict
+
+from ats_utilities.option.imanager import IOptionManager
+
+from gen_efi_app.core.service.iservice import IService
+from gen_efi_app.infrastructure.command.command import CommandBundle
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class CLIBundleDependencies(TypedDict): + ''' + Encapsulates core CLI components for simplification of CLI bundle. + + It defines: + + :attributes: + | service - The service for gen execution. + | parser - The parser for command line options. + | commands - The sequence of command pairs. + ''' + + service: IService + parser: IOptionManager + commands: Sequence[CommandBundle]
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/factory.html b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/factory.html new file mode 100644 index 0000000..7ae20ad --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/factory.html @@ -0,0 +1,188 @@ + + + + + + + gen_efi_app.infrastructure.cli.setup.factory — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.cli.setup.factory

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    factory.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Encapsulates core CLI components for simplification of CLI bundle.
+'''
+
+from __future__ import annotations
+
+from ats_utilities.option.imanager import IOptionManager
+
+from gen_efi_app.core.service.iservice import IService
+from gen_efi_app.infrastructure.cli.setup.options import CLIBundleOptions
+from gen_efi_app.infrastructure.cli.setup.opt_validator import CLIBundleOptionsValidator
+from gen_efi_app.infrastructure.cli.setup.bundle import CLIBundle
+from gen_efi_app.infrastructure.cli.setup.keys import CLIBundleKeys
+from gen_efi_app.infrastructure.cli.setup.registry import CLIBundleRegistry
+from gen_efi_app.infrastructure.cli.setup.dependencies import CLIBundleDependencies
+from gen_efi_app.infrastructure.command.command import CommandBundle
+from gen_efi_app.infrastructure.command.icommand_definition import ICommandDefinition
+from gen_efi_app.infrastructure.command.icommand_executor import ICommandExecutor
+from gen_efi_app.infrastructure.command.gen_efi_command_definition import GenEfiCommandDefinition
+from gen_efi_app.infrastructure.command.gen_efi_command_executor import GenEfiCommandExecutor
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class CLIBundleFactory: + ''' + Factory for creating the CLI bundle. + + It defines: + + :methods: + | create_bundle - Creates the CLI bundle with optional pre-configured options. + | get_version - Returns the factory version. + ''' + +
+[docs] + @classmethod + def create_bundle(cls, options: CLIBundleOptions) -> CLIBundle: + ''' + Creates the CLI bundle with optional pre-configured options. + + :param options: The CLI bundle options. + :return: The CLI bundle. + :exceptions: + | ATSValueError: The CLI bundle options must be provided and have proper values. + | ATSTypeError: The CLI bundle options must be an instance of Mapping and its + | attributes must be instances of their respective types. + | ATSValueError: The CLI bundle dependencies must be provided and have proper values. + | ATSTypeError: The CLI bundle dependencies must be an instance of Mapping and its + | attributes must be instances of their respective types. + | ATSValueError: The CLI bundle must be provided and have proper values. + | ATSTypeError: The CLI bundle must be an instance of CLIBundle and + | its attributes must be instances of their respective types. + ''' + CLIBundleOptionsValidator.validate(options) + + service: IService | None = options.get(CLIBundleKeys.OPTION_SERVICE) if options else None + parser: IOptionManager | None = options.get(CLIBundleKeys.OPTION_PARSER) if options else None + + service_definition: ICommandDefinition = GenEfiCommandDefinition() + service_executor: ICommandExecutor = GenEfiCommandExecutor(definition=service_definition) + service_cmd: CommandBundle = CommandBundle(definition=service_definition, executor=service_executor) + + return CLIBundleRegistry.create_bundle( + dependencies=CLIBundleDependencies(service=service, parser=parser, commands=[service_cmd]) + )
+ + +
+[docs] + @classmethod + def get_version(cls) -> str: + ''' + Returns the factory version. + + :return: The factory version. + :exceptions: None. + ''' + return __version__
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/keys.html b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/keys.html new file mode 100644 index 0000000..b71a269 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/keys.html @@ -0,0 +1,182 @@ + + + + + + + gen_efi_app.infrastructure.cli.setup.keys — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.cli.setup.keys

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    keys.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Runtime components and interface constraints for the CLI bundle.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Sequence
+from typing import ClassVar
+from types import MappingProxyType
+
+from ats_utilities.option.imanager import IOptionManager
+
+from gen_efi_app.core.service.iservice import IService
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class CLIBundleKeys: + ''' + Runtime components and interface constraints for the CLI bundle. + + It defines: + + :attributes: + | DEPENDENCY_SERVICE - The service interface constant of the CLI bundle. + | DEPENDENCY_PARSER - The parser interface constant of the CLI bundle. + | DEPENDENCY_COMMANDS - The commands constant of the CLI bundle. + | OPTION_SERVICE - The service option constant of the CLI bundle. + | OPTION_PARSER - The parser option constant of the CLI bundle. + :methods: + | get_dependency_to_type - Returns the mapping of the CLI bundle dependencies to their types. + | get_option_to_type - Returns the mapping of the CLI bundle options to their types. + ''' + + # Dependency Keys + DEPENDENCY_SERVICE: ClassVar[str] = 'service' + DEPENDENCY_PARSER: ClassVar[str] = 'parser' + DEPENDENCY_COMMANDS: ClassVar[str] = 'commands' + + # Option Keys + OPTION_SERVICE: ClassVar[str] = 'service' + OPTION_PARSER: ClassVar[str] = 'parser' + +
+[docs] + @classmethod + def get_dependency_to_type(cls) -> MappingProxyType[str, type]: + ''' + Returns the mapping of the CLI bundle dependencies to their types. + + :return: The mapping of the CLI bundle dependencies to their types. + :exceptions: None. + ''' + return MappingProxyType({ + cls.DEPENDENCY_SERVICE: IService, + cls.DEPENDENCY_PARSER: IOptionManager, + cls.DEPENDENCY_COMMANDS: Sequence, + })
+ + +
+[docs] + @classmethod + def get_option_to_type(cls) -> MappingProxyType[str, type]: + ''' + Returns the mapping of the CLI bundle options to their types. + + :return: The mapping of the CLI bundle options to their types. + :exceptions: None. + ''' + return MappingProxyType({ + cls.OPTION_SERVICE: IService, + cls.OPTION_PARSER: IOptionManager, + })
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/opt_validator.html b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/opt_validator.html new file mode 100644 index 0000000..b41304d --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/opt_validator.html @@ -0,0 +1,183 @@ + + + + + + + gen_efi_app.infrastructure.cli.setup.opt_validator — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.cli.setup.opt_validator

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    opt_validator.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Validator for the CLI bundle options.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Mapping
+from ats_utilities.exceptions import ATSValueError, ATSTypeError
+
+from ats_utilities.validation.check_type import istype
+from ats_utilities.validation.check_value import not_none
+
+from gen_efi_app.infrastructure.cli.setup.keys import CLIBundleKeys
+from gen_efi_app.infrastructure.cli.setup.options import CLIBundleOptions
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class CLIBundleOptionsValidator: + ''' + Validator for the CLI bundle options. + + It defines: + + :methods: + | validate - Validates the CLI bundle options. + | is_valid - Checks if the CLI bundle options is valid. + ''' + +
+[docs] + @classmethod + def validate(cls, options: CLIBundleOptions) -> None: + ''' + Validates the CLI bundle options. + + :param options: The CLI bundle options to be validated. + :exceptions: + | ATSValueError: The CLI bundle options must be provided and have proper values. + | ATSTypeError: The CLI bundle options must be an instance of Mapping and its + | attributes must be instances of their respective types. + ''' + ctx: str = 'cli_bundle_options_validator::validate(...)' + msg_options_none: str = 'the cli bundle options must be provided' + msg_options_istype: str = 'the cli bundle options must be a Mapping' + + not_none(options, ctx, msg_options_none) + istype(options, Mapping, ctx, msg_options_istype) + + for attr_name, expected_type in CLIBundleKeys.get_option_to_type().items(): + msg_attr_name_none: str = f'the {attr_name.replace("_", " ")} must be provided' + msg_attr_name_istype: str = f'the {attr_name.replace("_", " ")} must be an instance of {expected_type.__name__}' + + attribute = options.get(attr_name) + + not_none(attribute, ctx, msg_attr_name_none) + istype(attribute, expected_type, ctx, msg_attr_name_istype)
+ + +
+[docs] + @classmethod + def is_valid(cls, options: CLIBundleOptions) -> bool: + ''' + Checks if the CLI bundle options is valid. + + :param options: The CLI bundle options to be checked. + :return: True if valid, False otherwise. + ''' + try: + cls.validate(options) + return True + + except (ATSValueError, ATSTypeError): + return False
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/options.html b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/options.html new file mode 100644 index 0000000..241f2a0 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/options.html @@ -0,0 +1,135 @@ + + + + + + + gen_efi_app.infrastructure.cli.setup.options — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.cli.setup.options

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    options.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Encapsulates core CLI components for simplification of CLI bundle.
+'''
+
+from __future__ import annotations
+
+from typing import TypedDict
+
+from ats_utilities.option.imanager import IOptionManager
+
+from gen_efi_app.core.service.iservice import IService
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class CLIBundleOptions(TypedDict): + ''' + Encapsulates core CLI components for simplification of CLI bundle. + + It defines: + + :attributes: + | service - The service for gen execution. + | parser - The parser for command line options. + ''' + + service: IService + parser: IOptionManager
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/registry.html b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/registry.html new file mode 100644 index 0000000..3f70b53 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/registry.html @@ -0,0 +1,175 @@ + + + + + + + gen_efi_app.infrastructure.cli.setup.registry — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.cli.setup.registry

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    registry.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Encapsulates core CLI components for simplification of CLI bundle.
+'''
+
+from __future__ import annotations
+
+from gen_efi_app.infrastructure.cli.setup.bundle import CLIBundle
+from gen_efi_app.infrastructure.cli.setup.validator import CLIBundleValidator
+from gen_efi_app.infrastructure.cli.setup.keys import CLIBundleKeys
+from gen_efi_app.infrastructure.cli.setup.dependencies import CLIBundleDependencies
+from gen_efi_app.infrastructure.cli.setup.dep_validator import CLIBundleDependenciesValidator
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class CLIBundleRegistry: + ''' + Encapsulates core CLI components for simplification of CLI bundle. + + It defines: + + :methods: + | create_bundle - Creates a CLI bundle. + | get_version - Returns the registry version. + ''' + +
+[docs] + @classmethod + def create_bundle(cls, dependencies: CLIBundleDependencies) -> CLIBundle: + ''' + Creates a CLI bundle. + + :param dependencies: The CLI bundle dependencies. + :return: CLI bundle. + :exceptions: + | ATSValueError: The CLI bundle dependencies must be provided and have proper values. + | ATSTypeError: The CLI bundle dependencies must be an instance of Mapping and its + | attributes must be instances of their respective types. + | ATSValueError: The CLI bundle must be provided and have proper values. + | ATSTypeError: The CLI bundle must be an instance of CLIBundle and + | its attributes must be instances of their respective types. + ''' + CLIBundleDependenciesValidator.validate(dependencies) + + bundle: CLIBundle = CLIBundle( + service=dependencies.get(CLIBundleKeys.DEPENDENCY_SERVICE) if dependencies else None, + parser=dependencies.get(CLIBundleKeys.DEPENDENCY_PARSER) if dependencies else None, + commands=dependencies.get(CLIBundleKeys.DEPENDENCY_COMMANDS) if dependencies else None + ) + + CLIBundleValidator.validate(bundle) + + return bundle
+ + +
+[docs] + @classmethod + def get_version(cls) -> str: + ''' + Returns the registry version. + + :return: The registry version. + :exceptions: None. + ''' + return __version__
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/validator.html b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/validator.html new file mode 100644 index 0000000..d4bdf2d --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/cli/setup/validator.html @@ -0,0 +1,189 @@ + + + + + + + gen_efi_app.infrastructure.cli.setup.validator — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.cli.setup.validator

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    validator.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Validator for the CLI bundle.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Sequence
+from ats_utilities.exceptions import ATSValueError, ATSTypeError
+
+from ats_utilities.option.imanager import IOptionManager
+from ats_utilities.validation.check_value import not_none
+from ats_utilities.validation.check_type import istype
+
+from gen_efi_app.infrastructure.cli.setup.bundle import CLIBundle
+from gen_efi_app.core.service.iservice import IService
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class CLIBundleValidator: + ''' + Validator for the CLI bundle. + + It defines: + + :methods: + | validate - Validates the CLI bundle. + | is_valid - Checks if the CLI bundle is valid. + ''' + +
+[docs] + @classmethod + def validate(cls, bundle: CLIBundle) -> None: + ''' + Validates the CLI bundle. + + :param bundle: The CLI bundle to be validated. + :exceptions: + | ATSValueError: The CLI bundle must be provided and have proper values. + | ATSTypeError: The CLI bundle must be an instance of CLIBundle and + | its attributes must be instances of their respective types. + ''' + ctx: str = 'cli_bundle_validator::validate(...)' + msg_bundle_none: str = 'the cli bundle must be provided' + msg_bundle_istype: str = 'the cli bundle must be an instance of CLIBundle' + msg_service_none: str = 'the service must be provided' + msg_parser_none: str = 'the parser must be provided' + msg_commands_none: str = 'the commands sequence must be provided' + msg_service_istype: str = 'the service must be an instance of IService' + msg_parser_istype: str = 'the parser must be an instance of IOptionManager' + msg_commands_istype: str = 'the commands sequence must be an instance of CommandBundle' + + not_none(bundle, ctx, msg_bundle_none) + istype(bundle, CLIBundle, ctx, msg_bundle_istype) + + not_none(bundle.service, ctx, msg_service_none) + not_none(bundle.parser, ctx, msg_parser_none) + not_none(bundle.commands, ctx, msg_commands_none) + + istype(bundle.service, IService, ctx, msg_service_istype) + istype(bundle.parser, IOptionManager, ctx, msg_parser_istype) + istype(bundle.commands, Sequence, ctx, msg_commands_istype)
+ + +
+[docs] + @classmethod + def is_valid(cls, bundle: CLIBundle) -> bool: + ''' + Checks if the CLI bundle is valid. + + :param bundle: The CLI bundle to be checked. + :return: True if valid, False otherwise. + ''' + try: + cls.validate(bundle) + return True + + except (ATSValueError, ATSTypeError): + return False
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/command/command.html b/docs/build/html/_modules/gen_efi_app/infrastructure/command/command.html new file mode 100644 index 0000000..1cf02bc --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/command/command.html @@ -0,0 +1,135 @@ + + + + + + + gen_efi_app.infrastructure.command.command — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.command.command

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    command.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Defines command bundle dataclass combining command definition and executor.
+'''
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+
+from gen_efi_app.infrastructure.command.icommand_definition import ICommandDefinition
+from gen_efi_app.infrastructure.command.icommand_executor import ICommandExecutor
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +@dataclass(slots=True, frozen=True) +class CommandBundle: + ''' + Command bundle holding command definition and command executor. + + It defines: + + :attributes: + | definition - The command CLI metadata definition. + | executor - The command execution strategy. + ''' + + definition: ICommandDefinition + executor: ICommandExecutor[ICommandDefinition, object, object, object]
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/command/gen_efi_command_definition.html b/docs/build/html/_modules/gen_efi_app/infrastructure/command/gen_efi_command_definition.html new file mode 100644 index 0000000..9f9d898 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/command/gen_efi_command_definition.html @@ -0,0 +1,187 @@ + + + + + + + gen_efi_app.infrastructure.command.gen_efi_command_definition — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.command.gen_efi_command_definition

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    gen_efi_command_definition.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Defines GenEfiCommandDefinition class.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Sequence
+
+from ats_utilities.option.command.data import OptionData
+from ats_utilities.utils.reflection import to_str
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class GenEfiCommandDefinition: + ''' + CLI subcommand metadata definition for EFI application configuration files generation. + + It defines: + + :methods: + | name - Returns the command name. + | help_text - Returns the command help text. + | options - Returns the sequence of command options. + | __str__ - Returns the command definition as string representation. + ''' + + @property + def name(self) -> str: + ''' + Returns the command name. + + :return: The command name. + ''' + return 'create' + + @property + def help_text(self) -> str: + ''' + Returns the command help text. + + :return: The command help text. + ''' + return 'Generate EFI application project files' + + @property + def options(self) -> Sequence[OptionData]: + ''' + Returns the command options. + + :return: Sequence of command options. + ''' + return [ + OptionData( + name="--name", + help_text="EFI application project name", + action=None, + default="mytool", + required=True, + choices=None, + nargs=None + ), + OptionData( + name="--output", + help_text="Path to the output directory", + action=None, + default="./", + required=True, + choices=None, + nargs=None + ) + ] + + def __str__(self) -> str: + ''' + Returns the command definition as string representation. + + :return: The command definition as string representation. + ''' + return to_str(self)
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/command/gen_efi_command_executor.html b/docs/build/html/_modules/gen_efi_app/infrastructure/command/gen_efi_command_executor.html new file mode 100644 index 0000000..680ef72 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/command/gen_efi_command_executor.html @@ -0,0 +1,181 @@ + + + + + + + gen_efi_app.infrastructure.command.gen_efi_command_executor — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.command.gen_efi_command_executor

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    gen_efi_command_executor.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Defines GenEfiCommandExecutor class.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Mapping
+
+from ats_utilities.utils.reflection import to_str
+
+from gen_efi_app.infrastructure.command.icommand_definition import ICommandDefinition
+from gen_efi_app.core.service.iservice import IService
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class GenEfiCommandExecutor: + ''' + Command executor strategy for generating EFI application configuration files. + + It defines: + + :attributes: + | definition - The command CLI metadata definition. + :methods: + | execute - Executes the subcommand. + | get_definition - Returns the command definition metadata. + | __str__ - Returns the GenEfiCommandExecutor as string representation. + ''' + + definition: ICommandDefinition + + def __init__(self, definition: ICommandDefinition) -> None: + ''' + Initializes the command executor. + + :param definition: The command definition metadata. + ''' + self.definition = definition + +
+[docs] + def execute(self, *, params: Mapping[str, object], service: IService) -> Mapping[str, object]: + ''' + Executes the subcommand. + + :param params: Subcommand parameters from CLI parser. + :param service: Command orchestrator service instance. + :return: The result of the subcommand execution. + ''' + return service.execute(params=params) if service.is_initialized() else { + 'returncode': 1, 'stdout': '', 'stderr': 'service not initialized' + }
+ + +
+[docs] + def get_definition(self) -> ICommandDefinition: + ''' + Returns the command definition metadata. + + :return: The command definition metadata. + :exceptions: None. + ''' + return self.definition
+ + + def __str__(self) -> str: + ''' + Returns the GenEfiCommandExecutor as string representation. + + :return: The GenEfiCommandExecutor as string representation. + ''' + return to_str(self)
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/command/icommand_definition.html b/docs/build/html/_modules/gen_efi_app/infrastructure/command/icommand_definition.html new file mode 100644 index 0000000..3cbfe69 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/command/icommand_definition.html @@ -0,0 +1,124 @@ + + + + + + + gen_efi_app.infrastructure.command.icommand_definition — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.command.icommand_definition

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    icommand_definition.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Defines abstract ICommandDefinition strategy interface.
+'''
+
+from __future__ import annotations
+
+from typing import Protocol, runtime_checkable
+
+from ats_utilities.option.command.ioption_command import IOptionCommand
+from ats_utilities.option.command.ioption import IOption
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +@runtime_checkable +class ICommandDefinition(IOptionCommand[IOption], Protocol): + '''Abstract ICommandDefinition strategy interface.'''
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/command/icommand_executor.html b/docs/build/html/_modules/gen_efi_app/infrastructure/command/icommand_executor.html new file mode 100644 index 0000000..1911490 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/command/icommand_executor.html @@ -0,0 +1,151 @@ + + + + + + + gen_efi_app.infrastructure.command.icommand_executor — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.command.icommand_executor

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    icommand_executor.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Defines abstract ICommandExecutor strategy interface.
+'''
+
+from __future__ import annotations
+
+from typing import Protocol, runtime_checkable
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +@runtime_checkable +class ICommandExecutor[DefinitionType, ParametersType, ReturnType, ServiceType](Protocol): + ''' + Abstract ICommandExecutor strategy interface. + + It defines: + + :methods: + | execute - Executes the command strategy. + | get_definition - Returns the command definition metadata. + ''' + +
+[docs] + def execute(self, *, params: ParametersType, service: ServiceType) -> ReturnType: + ''' + Executes this command strategy. + + :param params: The command parameters parsed from CLI. + :param service: The service instance. + :return: The execution result. + '''
+ + +
+[docs] + def get_definition(self) -> DefinitionType: + ''' + Returns the command definition metadata. + + :return: The command definition metadata. + '''
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/infrastructure/subprocessor.html b/docs/build/html/_modules/gen_efi_app/infrastructure/subprocessor.html new file mode 100644 index 0000000..ff1f196 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/infrastructure/subprocessor.html @@ -0,0 +1,238 @@ + + + + + + + gen_efi_app.infrastructure.subprocessor — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.infrastructure.subprocessor

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    subprocessor.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Defines sub-processor adapter implementing ISubProcessor.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Mapping
+from logging import INFO
+from os import walk
+from os.path import dirname, realpath, relpath
+
+from ats_utilities.generation.imanager import IGeneratorManager
+from ats_utilities.generation.data import GeneratorData
+from ats_utilities.logger.ilogger import ILogger
+from ats_utilities.validation.check_value import not_none
+from ats_utilities.validation.check_type import istype
+from ats_utilities.utils.reflection import to_str
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class SubProcessor: + ''' + Adapter that executes sub-processes. + + It defines: + + :attributes: + | _scheme - Path to the scheme json file. + | _templates - Path to the templates tgz file. + | _generator - Generator manager used to generate code from templates. + | _logger - Logger used to log messages. + :methods: + | run - Executes a sub-process. + | is_initialized - Checks if the subprocessor is initialized. + | __str__ - Returns the SubProcessor as string representation. + ''' + + _scheme: str = 'config/scheme.json' + _templates: str = 'config/templates.tgz' + _generator: IGeneratorManager + _logger: ILogger + + def __init__(self, generator: IGeneratorManager) -> None: + ''' + Initializes the SubProcessor adapter. + + :param generator: The generator manager. + :exceptions: + | ATSValueError: The generator must be provided. + | ATSTypeError: The generator must be an instance of IGeneratorManager. + ''' + ctx: str = 'subprocessor::init(...)' + msg_generator_none: str = 'the generator must be provided' + msg_generator_istype: str = f'the generator must be an instance of {IGeneratorManager.__name__}' + + not_none(generator, ctx, msg_generator_none) + istype(generator, IGeneratorManager, ctx, msg_generator_istype) + + self._generator = generator + self._logger = generator.get_context().logger + +
+[docs] + def run(self, *, params: Mapping[str, object]) -> Mapping[str, object]: + ''' + Executes the generator. + + :param params: The command parameters for generator. + :return: Return code, stdout and stderr messages. + :exceptions: None. + ''' + try: + current_dir: str = dirname(realpath(__file__)) + output_dir: str = params.get('output') + project_name: str = params.get('name') + scheme: str = f'{current_dir}/{self._scheme}' + templates: str = f'{current_dir}/{self._templates}' + + success = self._generator.generate( + data=GeneratorData( + archive_path=templates, + target_dir=output_dir, + template_key='base', + scheme=scheme, + template_values={'project_name': project_name} + ) + ) + + if success: + self._logger.write_log(INFO, ' Generated files:') + + for root, _, files in walk(output_dir): + for file in files: + rel_dir = relpath(root, output_dir) + + if rel_dir == '.': + self._logger.write_log(INFO, f' {file}') + else: + self._logger.write_log(INFO, f' {rel_dir}/{file}') + + return { + 'returncode': 0 if success else 1, + 'stdout': f'project {project_name} successfully generated.' if success else '', + 'stderr': f'failed to generate {project_name} project.' if not success else '' + } + + except Exception as exc: + return {'returncode': 1, 'stdout': '', 'stderr': f'failed to generate {project_name} project {exc}'}
+ + +
+[docs] + def is_initialized(self) -> bool: + ''' + Checks if the subprocessor is initialized. + + :return: True if the subprocessor is initialized, False otherwise. + :exceptions: None. + ''' + return self._generator.is_initialized()
+ + + def __str__(self) -> str: + ''' + Returns the SubProcessor as string representation. + + :return: The SubProcessor as string representation. + :exceptions: None. + ''' + return to_str(self)
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/pro.html b/docs/build/html/_modules/gen_efi_app/pro.html deleted file mode 100644 index eebaa93..0000000 --- a/docs/build/html/_modules/gen_efi_app/pro.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - gen_efi_app.pro — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation - - - - - - - - - - - - -
-
-
-
- -

Source code for gen_efi_app.pro

-# -*- coding: UTF-8 -*-
-
-'''
-Module
-    __init__.py
-Copyright
-    Copyright (C) 2020 - 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
-    gen_efi_app is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-    gen_efi_app is distributed in the hope that it will be useful, but
-    WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-    See the GNU General Public License for more details.
-    You should have received a copy of the GNU General Public License along
-    with this program. If not, see <http://www.gnu.org/licenses/>.
-Info
-    Defines class GenEfi with attribute(s) and method(s).
-    Generates an EFI project structure.
-'''
-
-import sys
-from typing import List, Dict, Optional
-from os.path import dirname, realpath
-
-try:
-    from ats_utilities.pro_config import ProConfig
-    from ats_utilities.pro_config.pro_name import ProName
-    from ats_utilities.config_io.file_check import FileCheck
-    from ats_utilities.console_io.verbose import verbose_message
-    from ats_utilities.config_io.yaml.yaml2object import Yaml2Object
-    from ats_utilities.exceptions.ats_type_error import ATSTypeError
-    from ats_utilities.exceptions.ats_value_error import ATSValueError
-    from gen_efi_app.pro.read_template import ReadTemplate
-    from gen_efi_app.pro.write_template import WriteTemplate
-except ImportError as ats_error_message:  # pragma: no cover
-    # Force exit python #######################################################
-    sys.exit(f'\n{__file__}\n{ats_error_message}\n')  # pragma: no cover
-
-__author__: str = 'Vladimir Roncevic'
-__copyright__: str = '(C) 2026, https://electux.github.io/gen_efi_app'
-__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__: str = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
-__version__: str = '1.3.6'
-__maintainer__: str = 'Vladimir Roncevic'
-__email__: str = 'elektron.ronca@gmail.com'
-__status__: str = 'Updated'
-
-
-
-[docs] -class GenEfi(FileCheck, ProConfig, ProName): - ''' - Defined class GenPro with attribute(s) and method(s). - Generates an EFI project structure. - - It defines: - - :attributes: - | _GEN_VERBOSE - Console text indicator for process-phase. - | _PRO_STRUCTURE - Project setup (template, module). - | _reader - Reader API. - | _writer - Writer API. - :methods: - | __init__ - Initials GenPro constructor. - | get_reader - Gets template reader. - | get_writer - Gets template writer. - | gen_project - Generates EFI project structure. - ''' - - _GEN_VERBOSE: str = 'GEN_EFI_APP::PRO::GEN_EFI' - _PRO_STRUCTURE: str = '/../conf/project.yaml' - - def __init__(self, verbose: bool = False) -> None: - ''' - Initial constructor. - - :param verbose: Enable/Disable verbose option - :type verbose: <bool> - :exceptions: None - ''' - FileCheck.__init__(self, verbose) - ProConfig.__init__(self, verbose) - ProName.__init__(self, verbose) - verbose_message(verbose, [f'{self._GEN_VERBOSE} init generator']) - self._reader: Optional[ReadTemplate] = ReadTemplate(verbose) - self._writer: Optional[WriteTemplate] = WriteTemplate(verbose) - current_dir: str = dirname(realpath(__file__)) - pro_structure: str = f'{current_dir}{self._PRO_STRUCTURE}' - self.check_path(pro_structure, verbose) - self.check_mode('r', verbose) - self.check_format(pro_structure, 'yaml', verbose) - if self.is_file_ok(): - yml2obj: Optional[Yaml2Object] = Yaml2Object(pro_structure) - self.config = yml2obj.read_configuration() - -
-[docs] - def get_reader(self) -> Optional[ReadTemplate]: - ''' - Gets template reader. - - :return: Template reader object | None - :rtype: <Optional[ReadTemplate]> - :exceptions: None - ''' - return self._reader
- - -
-[docs] - def get_writer(self) -> Optional[WriteTemplate]: - ''' - Gets template writer. - - :return: Template writer object | none - :rtype: <Optional[WriteTemplate]> - :exceptions: None - ''' - return self._writer
- - -
-[docs] - def gen_project(self, pro_name: str, verbose: bool = False) -> bool: - ''' - Generates EFI project structure. - - :param pro_name: Project name | None - :type pro_name: <Optional[str]> - :param verbose: Enable/Disable verbose option - :type verbose: <bool> - :return: True (success operation) | False - :rtype: <bool> - :exceptions: ATSTypeError | ATSValueError - ''' - error_msg: Optional[str] = None - error_id: Optional[int] = None - error_msg, error_id = self.check_params([ - ('str:pro_name', pro_name) - ]) - if error_id == self.TYPE_ERROR: - raise ATSTypeError(error_msg) - if not bool(pro_name): - raise ATSValueError('missing project name') - status: bool = False - if bool(self.config) and self._reader and self._writer: - templates: List[Dict[str, str]] = self._reader.read( - self.config, verbose - ) - if bool(templates): - status = self._writer.write(templates, pro_name, verbose) - return status
-
- -
- -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/pro/read_template.html b/docs/build/html/_modules/gen_efi_app/pro/read_template.html deleted file mode 100644 index 4d53765..0000000 --- a/docs/build/html/_modules/gen_efi_app/pro/read_template.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - gen_efi_app.pro.read_template — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation - - - - - - - - - - - - -
-
-
-
- -

Source code for gen_efi_app.pro.read_template

-# -*- coding: UTF-8 -*-
-
-'''
-Module
-    read_template.py
-Copyright
-    Copyright (C) 2020 - 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
-    gen_efi_app is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-    gen_efi_app is distributed in the hope that it will be useful, but
-    WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-    See the GNU General Public License for more details.
-    You should have received a copy of the GNU General Public License along
-    with this program. If not, see <http://www.gnu.org/licenses/>.
-Info
-    Defines class ReadTemplate with attribute(s) and method(s).
-    Creates an API for reading a template files.
-'''
-
-import sys
-from typing import Any, List, Dict, Optional
-from os.path import dirname, realpath, isdir
-
-try:
-    from ats_utilities.config_io.file_check import FileCheck
-    from ats_utilities.console_io.verbose import verbose_message
-    from ats_utilities.pro_config import ProConfig
-    from ats_utilities.pro_config.template_dir import TemplateDir
-    from ats_utilities.exceptions.ats_type_error import ATSTypeError
-    from ats_utilities.exceptions.ats_value_error import ATSValueError
-except ImportError as ats_error_message:  # pragma: no cover
-    # Force exit python #######################################################
-    sys.exit(f'\n{__file__}\n{ats_error_message}\n')  # pragma: no cover
-
-__author__: str = 'Vladimir Roncevic'
-__copyright__: str = '(C) 2026, https://electux.github.io/gen_efi_app'
-__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__: str = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
-__version__: str = '1.3.6'
-__maintainer__: str = 'Vladimir Roncevic'
-__email__: str = 'elektron.ronca@gmail.com'
-__status__: str = 'Updated'
-
-
-
-[docs] -class ReadTemplate(FileCheck, TemplateDir): - ''' - Defines class ReadTemplate with attribute(s) and method(s). - Creates an API for reading a templatee files. - - It defines: - - :attributes: - | _GEN_VERBOSE - Console text indicator for process-phase. - | _TEMPLATE_DIR - Prefix path to templates. - :methods: - | __init__ - Initials ReadTemplate constructor. - | read - Reads a templates. - ''' - - _GEN_VERBOSE: str = 'GEN_AUTOCONF::PRO::READ_TEMPLATE' - _TEMPLATE_DIR: str = '/../conf/template/' - - def __init__(self, verbose: bool = False) -> None: - ''' - Initials ReadTemplate constructor. - - :param verbose: Enable/Disable verbose option - :type verbose: <bool> - :exceptions: None - ''' - FileCheck.__init__(self, verbose) - TemplateDir.__init__(self, verbose) - verbose_message(verbose, [f'{self._GEN_VERBOSE.lower()} init reader']) - current_dir: str = dirname(realpath(__file__)) - pro_template_dir: str = f'{current_dir}{self._TEMPLATE_DIR}' - if isdir(pro_template_dir): - self.template_dir = pro_template_dir - -
-[docs] - def read( - self, config: Dict[Any, Any], verbose: bool = False - ) -> List[Dict[str, str]]: - ''' - Reads a templates. - - :param config: Project configuration - :type config: <Dict[Any, Any]> - :param verbose: Enable/Disable verbose option - :type verbose: <bool> - :return: List with templates - :rtype: <List[Dict[str, str]]> - :exceptions: ATSTypeError | ATSValueError - ''' - error_msg: Optional[str] = None - error_id: Optional[int] = None - error_msg, error_id = self.check_params([('dict:config', config)]) - if error_id == self.TYPE_ERROR: - raise ATSTypeError(error_msg) - if not bool(config): - raise ATSValueError('missing templates') - templates: List[str] = config[ProConfig.TEMPLATES] - modules: List[str] = config[ProConfig.MODULES] - loaded_templates: List[Dict[str, str]] = [] - for template_file, module_file in zip(templates, modules): - template_content: Optional[str] = None - template_file_path: str = f'{self.template_dir}{template_file}' - self.check_path(template_file_path, verbose) - self.check_mode('r', verbose) - self.check_format(template_file_path, ProConfig.FORMAT, verbose) - if self.is_file_ok(): - with open( - template_file_path, 'r', encoding='utf-8' - ) as template_module: - template_content = template_module.read() - loaded_templates.append({module_file: template_content}) - return loaded_templates
-
- -
- -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/pro/write_template.html b/docs/build/html/_modules/gen_efi_app/pro/write_template.html deleted file mode 100644 index c323e12..0000000 --- a/docs/build/html/_modules/gen_efi_app/pro/write_template.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - gen_efi_app.pro.write_template — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation - - - - - - - - - - - - -
-
-
-
- -

Source code for gen_efi_app.pro.write_template

-# -*- coding: UTF-8 -*-
-
-'''
-Module
-    write_template.py
-Copyright
-    Copyright (C) 2020 - 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
-    gen_efi_app is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-    gen_efi_app is distributed in the hope that it will be useful, but
-    WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-    See the GNU General Public License for more details.
-    You should have received a copy of the GNU General Public License along
-    with this program. If not, see <http://www.gnu.org/licenses/>.
-Info
-    Defines class WriteTemplate with attribute(s) and method(s).
-    Creates an API for writing source and build modules.
-'''
-
-import sys
-from typing import List, Dict, Optional
-from os import getcwd, chmod, mkdir
-from os.path import exists
-from string import Template
-from datetime import date
-
-try:
-    from ats_utilities.config_io.file_check import FileCheck
-    from ats_utilities.console_io.verbose import verbose_message
-    from ats_utilities.exceptions.ats_type_error import ATSTypeError
-    from ats_utilities.exceptions.ats_value_error import ATSValueError
-except ImportError as ats_error_message:  # pragma: no cover
-    # Force exit python #######################################################
-    sys.exit(f'\n{__file__}\n{ats_error_message}\n')  # pragma: no cover
-
-__author__: str = 'Vladimir Roncevic'
-__copyright__: str = '(C) 2026, https://electux.github.io/gen_efi_app'
-__credits__: List[str] = ['Vladimir Roncevic', 'Python Software Foundation']
-__license__: str = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
-__version__: str = '1.3.6'
-__maintainer__: str = 'Vladimir Roncevic'
-__email__: str = 'elektron.ronca@gmail.com'
-__status__: str = 'Updated'
-
-
-
-[docs] -class WriteTemplate(FileCheck): - ''' - Defines class WriteTemplate with attribute(s) and method(s). - Creates an API for writing source and build modules. - - It defines: - - :attributes: - | _GEN_VERBOSE - Console text indicator for process-phase. - :methods: - | __init__ - Initials WriteTemplate constructor. - | write - Writes a templates with parameters. - ''' - - _GEN_VERBOSE: str = 'GEN_EFI_APP::PRO::WRITE_TEMPLATE' - - def __init__(self, verbose: bool = False) -> None: - ''' - Initial constructor. - - :param verbose: Enable/Disable verbose option - :type verbose: <bool> - :exceptions: None - ''' - super().__init__(verbose) - verbose_message(verbose, [f'{self._GEN_VERBOSE.lower()} init writer']) - -
-[docs] - def write( - self, - templates: List[Dict[str, str]], - pro_name: Optional[str], - verbose: bool = False - ) -> bool: - ''' - Writes a templates with parameters. - - :param templates: List of templates - :type templates: <List[Dict[str, str]]> - :param pro_name: Project name | None - :type pro_name: <Optional[str]> - :param verbose: Enable/Disable verbose option - :type verbose: <bool> - :return: True (templates written) | False - :rtype: <bool> - :exceptions: ATSTypeError | ATSValueError - ''' - error_msg: Optional[str] = None - error_id: Optional[int] = None - error_msg, error_id = self.check_params([ - ('list:templates', templates), ('str:pro_name', pro_name) - ]) - if error_id == self.TYPE_ERROR: - raise ATSTypeError(error_msg) - if not bool(templates): - raise ATSValueError('missing templates') - if not bool(pro_name): - raise ATSValueError('missing project name') - all_stat: List[bool] = [] - pro_dir: str = f'{getcwd()}/{pro_name}/' - num_of_modules: int = len(templates) - if not exists(pro_dir): - mkdir(pro_dir) - for template_content in templates: - module_name: str = list(template_content.keys())[0] - template = Template(template_content[module_name]) - module_path: str = f'{pro_dir}{module_name}' - module_dict: Dict[str, str] = { - 'PRO': f'{pro_name}', 'YEAR': f'{date.today().year}' - } - with open(module_path, 'w', encoding='utf-8') as module_file: - module_content: str = template.substitute(module_dict) - module_file.write(module_content) - chmod(module_path, 0o666) - self.check_path(module_path, verbose) - self.check_mode('w', verbose) - if 'makefile'.capitalize() in module_path: - self.check_format(module_path, 'makefile', verbose) - else: - self.check_format( - module_path, module_path.split('.')[1], verbose - ) - if self.is_file_ok(): - all_stat.append(True) - else: - all_stat.append(False) - return all([ - bool(all_stat), all(all_stat), len(all_stat) == num_of_modules - ])
-
- -
- -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/setup/bundle.html b/docs/build/html/_modules/gen_efi_app/setup/bundle.html new file mode 100644 index 0000000..b42010d --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/setup/bundle.html @@ -0,0 +1,157 @@ + + + + + + + gen_efi_app.setup.bundle — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.setup.bundle

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    bundle.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Defines the gen_efi_app bundle.
+'''
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+
+from ats_utilities.base.setup.bundle import BaseBundle
+from ats_utilities.utils.reflection import instance_to_dict
+
+from gen_efi_app.core.service.iservice import IService
+from gen_efi_app.core.service.isubprocessor import ISubProcessor
+from gen_efi_app.infrastructure.cli.icli import ICLI
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +@dataclass(slots=True, frozen=True, kw_only=True) +class GenEfiAppBundle: + ''' + GenEfiApp bundle holding the components of the gen_efi_app. + + It defines: + + :attributes: + | base - The base bundle with the base components. + | service - The service orchestrating the gen_efi_app execution. + | subprocessor - The adapter executing the gen_efi_app sub-processes. + | cli - The command-line interface adapter. + :methods: + | to_dict - Converts the gen_efi_app bundle to a dictionary. + ''' + + base: BaseBundle + service: IService + subprocessor: ISubProcessor + cli: ICLI + +
+[docs] + def to_dict(self) -> dict[str, object]: + ''' + Converts the gen_efi_app bundle to a dictionary. + + :return: Dictionary representation of the gen_efi_app bundle. + :exceptions: None. + ''' + return instance_to_dict(self)
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/setup/dep_validator.html b/docs/build/html/_modules/gen_efi_app/setup/dep_validator.html new file mode 100644 index 0000000..55ce76c --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/setup/dep_validator.html @@ -0,0 +1,185 @@ + + + + + + + gen_efi_app.setup.dep_validator — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.setup.dep_validator

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    dep_validator.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Validator for the gen_efi_app bundle dependencies.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Mapping
+from ats_utilities.exceptions import ATSValueError, ATSTypeError
+
+from ats_utilities.validation.check_type import istype
+from ats_utilities.validation.check_value import not_none
+
+from gen_efi_app.setup.dependencies import GenEfiAppBundleDependencies
+from gen_efi_app.setup.keys import GenEfiAppBundleKeys
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class GenEfiAppBundleDependenciesValidator: + ''' + Validator for the gen_efi_app bundle dependencies. + + It defines: + + :methods: + | validate - Validates the gen_efi_app bundle dependencies. + | is_valid - Checks if the gen_efi_app bundle dependencies is valid. + ''' + +
+[docs] + @classmethod + def validate(cls, dependencies: GenEfiAppBundleDependencies) -> None: + ''' + Validates the gen_efi_app bundle dependencies. + + :param dependencies: The gen_efi_app bundle dependencies to be validated. + :exceptions: + | ATSValueError: The gen_efi_app bundle dependencies must be provided and have proper values. + | ATSTypeError: The gen_efi_app bundle dependencies must be an instance of Mapping and its + | attributes must be instances of their respective types. + ''' + ctx: str = 'gen_efi_app_bundle_dependencies_validator::validate(...)' + msg_dependencies_none: str = 'the gen_efi_app bundle dependencies must be provided' + msg_dependencies_istype: str = 'the gen_efi_app bundle dependencies must be a Mapping' + + not_none(dependencies, ctx, msg_dependencies_none) + istype(dependencies, Mapping, ctx, msg_dependencies_istype) + + for attr_name, expected_type in GenEfiAppBundleKeys.get_dependency_to_type().items(): + msg_attr_name_none: str = f'the {attr_name.replace("_", " ")} must be provided' + msg_attr_name_istype: str = ( + f'the {attr_name.replace("_", " ")} must be an instance of {expected_type.__name__}' + ) + + attribute = dependencies.get(attr_name) + + not_none(attribute, ctx, msg_attr_name_none) + istype(attribute, expected_type, ctx, msg_attr_name_istype)
+ + +
+[docs] + @classmethod + def is_valid(cls, dependencies: GenEfiAppBundleDependencies) -> bool: + ''' + Checks if the gen_efi_app bundle dependencies is valid. + + :param dependencies: The gen_efi_app bundle dependencies to be checked. + :return: True if valid, False otherwise. + ''' + try: + cls.validate(dependencies) + return True + + except (ATSValueError, ATSTypeError): + return False
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/setup/dependencies.html b/docs/build/html/_modules/gen_efi_app/setup/dependencies.html new file mode 100644 index 0000000..43a3a9b --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/setup/dependencies.html @@ -0,0 +1,141 @@ + + + + + + + gen_efi_app.setup.dependencies — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.setup.dependencies

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    dependencies.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    GenEfiApp bundle dependencies for the gen_efi_app bundle.
+'''
+
+from __future__ import annotations
+
+from typing import TypedDict
+
+from ats_utilities.base.setup.bundle import BaseBundle
+
+from gen_efi_app.core.service.iservice import IService
+from gen_efi_app.core.service.isubprocessor import ISubProcessor
+from gen_efi_app.infrastructure.cli.icli import ICLI
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class GenEfiAppBundleDependencies(TypedDict): + ''' + GenEfiApp bundle dependencies for the gen_efi_app bundle. + + It defines: + + :attributes: + | base - The base bundle with the base components for the gen_efi_app bundle. + | service - The service orchestrating the gen_efi_app execution for the bundle. + | subprocessor - The adapter executing the gen_efi_app sub-processes for the bundle. + | cli - The command-line interface adapter for the gen_efi_app bundle. + ''' + + base: BaseBundle + service: IService + subprocessor: ISubProcessor + cli: ICLI
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/setup/factory.html b/docs/build/html/_modules/gen_efi_app/setup/factory.html new file mode 100644 index 0000000..78aab9b --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/setup/factory.html @@ -0,0 +1,231 @@ + + + + + + + gen_efi_app.setup.factory — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.setup.factory

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    factory.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Factory for creating the gen_efi_app bundle.
+'''
+
+from __future__ import annotations
+
+from ats_utilities.base.setup.factory import BaseBundleFactory
+from ats_utilities.base.setup.bundle import BaseBundle
+from ats_utilities.base.setup.options import BaseBundleOptions
+from ats_utilities.context.bundle import ContextBundle
+from ats_utilities.context.factory import ContextBundleFactory
+
+from gen_efi_app.setup.bundle import GenEfiAppBundle
+from gen_efi_app.setup.options import GenEfiAppBundleOptions
+from gen_efi_app.setup.registry import GenEfiAppBundleRegistry
+from gen_efi_app.setup.dependencies import GenEfiAppBundleDependencies
+from gen_efi_app.setup.opt_validator import GenEfiAppBundleOptionsValidator
+from gen_efi_app.setup.keys import GenEfiAppBundleKeys
+from gen_efi_app.core.service.engine import Service
+from gen_efi_app.infrastructure.subprocessor import SubProcessor
+from gen_efi_app.infrastructure.cli.engine import CLI
+from gen_efi_app.infrastructure.cli.setup.bundle import CLIBundle
+from gen_efi_app.infrastructure.cli.setup.dependencies import CLIBundleDependencies
+from gen_efi_app.infrastructure.cli.setup.registry import CLIBundleRegistry
+from gen_efi_app.infrastructure.command.command import CommandBundle
+from gen_efi_app.infrastructure.command.gen_efi_command_definition import GenEfiCommandDefinition
+from gen_efi_app.infrastructure.command.gen_efi_command_executor import GenEfiCommandExecutor
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class GenEfiAppBundleFactory: + ''' + Factory for creating the gen_efi_app bundle. + + It defines: + + :attributes: + | _info_file - Path to the gen_efi_app info file. + :methods: + | create_bundle - Creates the gen_efi_app bundle with optional pre-configured options. + | get_version - Returns the factory version. + ''' + + _info_file: str = 'gen_efi_app/infrastructure/config/gen_efi_app.cfg' + +
+[docs] + @classmethod + def create_bundle(cls, options: GenEfiAppBundleOptions | None = None) -> GenEfiAppBundle: + ''' + Creates the gen_efi_app bundle with optional pre-configured options. + + :param options: The pre-configured options for the gen_efi_app bundle. + :return: The gen_efi_app bundle. + :exceptions: + | ATSValueError: The gen_efi_app bundle options must be provided and have proper values. + | ATSTypeError: The gen_efi_app bundle options must be an instance of Mapping and its + | attributes must be instances of their respective types. + | ATSValueError: The gen_efi_app bundle dependencies must be provided and have proper values. + | ATSTypeError: The gen_efi_app bundle dependencies must be an instance of Mapping and its + | attributes must be instances of their respective types. + | ATSValueError: The gen_efi_app bundle must be provided and have proper values. + | ATSTypeError: The gen_efi_app bundle must be an instance of GenEfiAppBundle and + | its attributes must be instances of their respective types. + ''' + if options is not None: + GenEfiAppBundleOptionsValidator.validate(options) + + info_file = options.get(GenEfiAppBundleKeys.OPTION_INFO_FILE) if options else cls._info_file + + context_bundle: ContextBundle = ContextBundleFactory.create_bundle() + + base_bundle: BaseBundle = BaseBundleFactory.create_bundle( + options=BaseBundleOptions( + info_file=info_file, + use_generator=True, + context_bundle=context_bundle + ) + ) + + subprocessor: SubProcessor = SubProcessor(generator=base_bundle.generation_manager) + + service: Service = Service(subprocessor=subprocessor) + + gen_efi_definition: GenEfiCommandDefinition = GenEfiCommandDefinition() + + gen_efi_bundle: CommandBundle = CommandBundle( + definition=gen_efi_definition, + executor=GenEfiCommandExecutor(gen_efi_definition) + ) + + cli_bundle: CLIBundle = CLIBundleRegistry.create_bundle( + dependencies=CLIBundleDependencies( + service=service, + parser=base_bundle.option_manager, + commands=[gen_efi_bundle] + ) + ) + + cli: CLI = CLI(cli_bundle) + + return GenEfiAppBundleRegistry.create_bundle( + dependencies=GenEfiAppBundleDependencies( + base=base_bundle, + service=service, + subprocessor=subprocessor, + cli=cli + ) + )
+ + +
+[docs] + @classmethod + def get_version(cls) -> str: + ''' + Returns the factory version. + + :return: The factory version. + :exceptions: None. + ''' + return __version__
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/setup/keys.html b/docs/build/html/_modules/gen_efi_app/setup/keys.html new file mode 100644 index 0000000..a069db0 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/setup/keys.html @@ -0,0 +1,183 @@ + + + + + + + gen_efi_app.setup.keys — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.setup.keys

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    keys.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Runtime components and interface constraints for the gen_efi_app bundle.
+'''
+
+from __future__ import annotations
+
+from typing import ClassVar
+from types import MappingProxyType
+
+from ats_utilities.base.setup.bundle import BaseBundle
+
+from gen_efi_app.core.service.iservice import IService
+from gen_efi_app.core.service.isubprocessor import ISubProcessor
+from gen_efi_app.infrastructure.cli.icli import ICLI
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class GenEfiAppBundleKeys: + ''' + Runtime components and interface constraints for the gen_efi_app bundle. + + It defines: + + :attributes: + | DEPENDENCY_BASE - The base bundle constant for the gen_efi_app bundle. + | DEPENDENCY_SERVICE - The service interface constant for the gen_efi_app bundle. + | DEPENDENCY_SUBPROCESSOR - The subprocessor interface constant for the gen_efi_app bundle. + | DEPENDENCY_CLI - The cli interface constant for the gen_efi_app bundle. + | OPTION_INFO_FILE - The info file option constant for the gen_efi_app bundle. + :methods: + | get_dependency_to_type - Returns the mapping of the bundle dependencies to their types. + | get_option_to_type - Returns the mapping of the bundle options to their types. + ''' + + # Dependency Keys + DEPENDENCY_BASE: ClassVar[str] = 'base' + DEPENDENCY_SERVICE: ClassVar[str] = 'service' + DEPENDENCY_SUBPROCESSOR: ClassVar[str] = 'subprocessor' + DEPENDENCY_CLI: ClassVar[str] = 'cli' + + # Option Keys + OPTION_INFO_FILE: ClassVar[str] = 'info_file' + +
+[docs] + @classmethod + def get_dependency_to_type(cls) -> MappingProxyType[str, type]: + ''' + Returns the mapping of the gen_efi_app bundle dependencies to their types. + + :return: The mapping of the gen_efi_app bundle dependencies to their types. + :exceptions: None. + ''' + return MappingProxyType({ + cls.DEPENDENCY_BASE: BaseBundle, + cls.DEPENDENCY_SERVICE: IService, + cls.DEPENDENCY_SUBPROCESSOR: ISubProcessor, + cls.DEPENDENCY_CLI: ICLI, + })
+ + +
+[docs] + @classmethod + def get_option_to_type(cls) -> MappingProxyType[str, type]: + ''' + Returns the mapping of the gen_efi_app bundle options to their types. + + :return: The mapping of the gen_efi_app bundle options to their types. + :exceptions: None. + ''' + return MappingProxyType({ + cls.OPTION_INFO_FILE: str, + })
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/setup/opt_validator.html b/docs/build/html/_modules/gen_efi_app/setup/opt_validator.html new file mode 100644 index 0000000..d8d6176 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/setup/opt_validator.html @@ -0,0 +1,183 @@ + + + + + + + gen_efi_app.setup.opt_validator — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.setup.opt_validator

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    opt_validator.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Validator for the gen_efi_app bundle options.
+'''
+
+from __future__ import annotations
+
+from collections.abc import Mapping
+from ats_utilities.exceptions import ATSValueError, ATSTypeError
+
+from ats_utilities.validation.check_type import istype
+from ats_utilities.validation.check_value import not_none
+
+from gen_efi_app.setup.options import GenEfiAppBundleOptions
+from gen_efi_app.setup.keys import GenEfiAppBundleKeys
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class GenEfiAppBundleOptionsValidator: + ''' + Validator for the gen_efi_app bundle options. + + It defines: + + :methods: + | validate - Validates the gen_efi_app bundle options. + | is_valid - Checks if the gen_efi_app bundle options is valid. + ''' + +
+[docs] + @classmethod + def validate(cls, options: GenEfiAppBundleOptions) -> None: + ''' + Validates the gen_efi_app bundle options. + + :param options: The gen_efi_app bundle options to be validated. + :exceptions: + | ATSValueError: The gen_efi_app bundle options must be provided and have proper values. + | ATSTypeError: The gen_efi_app bundle options must be an instance of Mapping and its + | attributes must be instances of their respective types. + ''' + ctx: str = 'gen_efi_app_bundle_options_validator::validate(...)' + msg_options_none: str = 'the gen_efi_app bundle options must be provided' + msg_options_istype: str = 'the gen_efi_app bundle options must be a Mapping' + + not_none(options, ctx, msg_options_none) + istype(options, Mapping, ctx, msg_options_istype) + + for attr_name, expected_type in GenEfiAppBundleKeys.get_option_to_type().items(): + msg_attr_name_istype: str = ( + f'the {attr_name.replace("_", " ")} must be an instance of {expected_type.__name__}' + ) + + attribute = options.get(attr_name) + + istype(attribute, expected_type, ctx, msg_attr_name_istype)
+ + +
+[docs] + @classmethod + def is_valid(cls, options: GenEfiAppBundleOptions) -> bool: + ''' + Checks if the gen_efi_app bundle options is valid. + + :param options: The gen_efi_app bundle options to be checked. + :return: True if valid, False otherwise. + ''' + try: + cls.validate(options) + return True + + except (ATSValueError, ATSTypeError): + return False
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/setup/options.html b/docs/build/html/_modules/gen_efi_app/setup/options.html new file mode 100644 index 0000000..f4690fe --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/setup/options.html @@ -0,0 +1,129 @@ + + + + + + + gen_efi_app.setup.options — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.setup.options

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    options.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    GenEfiApp bundle options for the gen_efi_app bundle.
+'''
+
+from __future__ import annotations
+
+from typing import TypedDict
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class GenEfiAppBundleOptions(TypedDict): + ''' + GenEfiApp bundle options for the gen_efi_app bundle. + + It defines: + + :attributes: + | info_file - The info file path for the gen_efi_app bundle. + ''' + + info_file: str
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/setup/registry.html b/docs/build/html/_modules/gen_efi_app/setup/registry.html new file mode 100644 index 0000000..1179cd8 --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/setup/registry.html @@ -0,0 +1,185 @@ + + + + + + + gen_efi_app.setup.registry — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.setup.registry

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    registry.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Encapsulates core gen_efi_app components for simplification of bundle.
+'''
+
+from __future__ import annotations
+
+from ats_utilities.base.setup.bundle import BaseBundle
+
+from gen_efi_app.core.service.iservice import IService
+from gen_efi_app.core.service.isubprocessor import ISubProcessor
+from gen_efi_app.infrastructure.cli.icli import ICLI
+from gen_efi_app.setup.bundle import GenEfiAppBundle
+from gen_efi_app.setup.validator import GenEfiAppBundleValidator
+from gen_efi_app.setup.keys import GenEfiAppBundleKeys
+from gen_efi_app.setup.dependencies import GenEfiAppBundleDependencies
+from gen_efi_app.setup.dep_validator import GenEfiAppBundleDependenciesValidator
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class GenEfiAppBundleRegistry: + ''' + Encapsulates core gen_efi_app components for simplification of bundle. + + It defines: + + :methods: + | create_bundle - Creates the gen_efi_app bundle. + | get_version - Returns the registry version. + ''' + +
+[docs] + @classmethod + def create_bundle(cls, dependencies: GenEfiAppBundleDependencies) -> GenEfiAppBundle: + ''' + Creates the gen_efi_app bundle. + + :param dependencies: The gen_efi_app bundle dependencies. + :return: The gen_efi_app bundle. + :exceptions: + | ATSValueError: The gen_efi_app bundle dependencies must be provided and have proper values. + | ATSTypeError: The gen_efi_app bundle dependencies must be an instance of Mapping and its + | attributes must be instances of their respective types. + | ATSValueError: The gen_efi_app bundle must be provided and have proper values. + | ATSTypeError: The gen_efi_app bundle must be an instance of GenEfiAppBundle and + | its attributes must be instances of their respective types. + ''' + GenEfiAppBundleDependenciesValidator.validate(dependencies) + + base: BaseBundle | None = dependencies.get(GenEfiAppBundleKeys.DEPENDENCY_BASE) if dependencies else None + service: IService | None = dependencies.get(GenEfiAppBundleKeys.DEPENDENCY_SERVICE) if dependencies else None + subprocessor: ISubProcessor | None = dependencies.get( + GenEfiAppBundleKeys.DEPENDENCY_SUBPROCESSOR + ) if dependencies else None + cli: ICLI | None = dependencies.get(GenEfiAppBundleKeys.DEPENDENCY_CLI) if dependencies else None + + bundle: GenEfiAppBundle = GenEfiAppBundle( + base=base, service=service, subprocessor=subprocessor, cli=cli + ) + + GenEfiAppBundleValidator.validate(bundle) + + return bundle
+ + +
+[docs] + @classmethod + def get_version(cls) -> str: + ''' + Returns the registry version. + + :return: The registry version. + :exceptions: None. + ''' + return __version__
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/gen_efi_app/setup/validator.html b/docs/build/html/_modules/gen_efi_app/setup/validator.html new file mode 100644 index 0000000..e3b35ab --- /dev/null +++ b/docs/build/html/_modules/gen_efi_app/setup/validator.html @@ -0,0 +1,193 @@ + + + + + + + gen_efi_app.setup.validator — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for gen_efi_app.setup.validator

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    validator.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    A validator for the gen_efi_app bundle.
+'''
+
+from __future__ import annotations
+
+from ats_utilities.base.setup.bundle import BaseBundle
+from ats_utilities.exceptions import ATSValueError, ATSTypeError
+from ats_utilities.validation.check_value import not_none
+from ats_utilities.validation.check_type import istype
+
+from gen_efi_app.setup.bundle import GenEfiAppBundle
+from gen_efi_app.core.service.iservice import IService
+from gen_efi_app.core.service.isubprocessor import ISubProcessor
+from gen_efi_app.infrastructure.cli.icli import ICLI
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +class GenEfiAppBundleValidator: + ''' + A validator for the gen_efi_app bundle. + + It defines: + + :methods: + | validate - Validates the gen_efi_app bundle. + | is_valid - Checks if the gen_efi_app bundle is valid. + ''' + +
+[docs] + @classmethod + def validate(cls, bundle: GenEfiAppBundle) -> None: + ''' + Validates the gen_efi_app bundle. + + :param bundle: The gen_efi_app bundle to be validated. + :exceptions: + | ATSValueError: The gen_efi_app bundle must be provided and have proper values. + | ATSTypeError: The gen_efi_app bundle must be an instance of GenEfiAppBundle and + | its attributes must be instances of their respective types. + ''' + ctx: str = 'gen_efi_app_bundle_validator::validate(...)' + msg_bundle_none: str = 'the gen_efi_app bundle must be provided' + msg_bundle_istype: str = 'the gen_efi_app bundle must be an instance of GenEfiAppBundle' + msg_base_none: str = 'the base bundle must be provided' + msg_service_none: str = 'the service must be provided' + msg_subprocessor_none: str = 'the subprocessor must be provided' + msg_cli_none: str = 'the cli must be provided' + msg_base_istype: str = 'the base bundle must be an instance of BaseBundle' + msg_service_istype: str = 'the service must be an instance of IService' + msg_subprocessor_istype: str = 'the subprocessor must be an instance of ISubProcessor' + msg_cli_istype: str = 'the cli must be an instance of ICLI' + + not_none(bundle, ctx, msg_bundle_none) + istype(bundle, GenEfiAppBundle, ctx, msg_bundle_istype) + + not_none(bundle.base, ctx, msg_base_none) + not_none(bundle.service, ctx, msg_service_none) + not_none(bundle.subprocessor, ctx, msg_subprocessor_none) + not_none(bundle.cli, ctx, msg_cli_none) + + istype(bundle.base, BaseBundle, ctx, msg_base_istype) + istype(bundle.service, IService, ctx, msg_service_istype) + istype(bundle.subprocessor, ISubProcessor, ctx, msg_subprocessor_istype) + istype(bundle.cli, ICLI, ctx, msg_cli_istype)
+ + +
+[docs] + @classmethod + def is_valid(cls, bundle: GenEfiAppBundle) -> bool: + ''' + Checks if the gen_efi_app bundle is valid. + + :param bundle: The gen_efi_app bundle to be checked. + :return: True if valid, False otherwise. + ''' + try: + cls.validate(bundle) + return True + + except (ATSValueError, ATSTypeError): + return False
+
+ +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_modules/index.html b/docs/build/html/_modules/index.html index d01922c..4386d91 100644 --- a/docs/build/html/_modules/index.html +++ b/docs/build/html/_modules/index.html @@ -35,11 +35,40 @@

Navigation

diff --git a/docs/build/html/_modules/main.html b/docs/build/html/_modules/main.html new file mode 100644 index 0000000..355078d --- /dev/null +++ b/docs/build/html/_modules/main.html @@ -0,0 +1,141 @@ + + + + + + + main — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + +
+
+
+
+ +

Source code for main

+# -*- coding: UTF-8 -*-
+
+'''
+Module
+    main.py
+Copyright
+    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com>
+    gen_efi_app is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    gen_efi_app is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License along
+    with this program. If not, see <http://www.gnu.org/licenses/>.
+Info
+    Main entry point for EFI Application Generator CLI.
+'''
+
+from __future__ import annotations
+
+from sys import exit as sys_exit
+
+from gen_efi_app.engine import GenEfiApp
+from gen_efi_app.setup.factory import GenEfiAppBundleFactory
+
+__author__ = 'Vladimir Roncevic'
+__copyright__ = '(C) 2026, https://electux.github.io/gen_efi_app'
+__credits__ = ['Vladimir Roncevic', 'Python Software Foundation']
+__license__ = 'https://github.com/electux/gen_efi_app/blob/dev/LICENSE'
+__version__ = '1.3.7'
+__maintainer__ = 'Vladimir Roncevic'
+__email__ = 'elektron.ronca@gmail.com'
+__status__ = 'Updated'
+
+
+
+[docs] +def main() -> bool: + ''' + Bootstraps and runs the gen_efi_app with required adapters. + + :return: True if successful, False otherwise. + :exceptions: None. + ''' + gen_efi_app: GenEfiApp = GenEfiApp(GenEfiAppBundleFactory.create_bundle()) + + return gen_efi_app.process()
+ + + +if __name__ == '__main__': + ''' + Entry point for gen_efi_app execution. + + :exit code: 0 if successful, 1 otherwise. + :exceptions: None. + ''' + sys_exit(0 if main() else 1) +
+ +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/_sources/gen_efi_app.core.model.project_setup.rst.txt b/docs/build/html/_sources/gen_efi_app.core.model.project_setup.rst.txt new file mode 100644 index 0000000..e62f136 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.core.model.project_setup.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.core.model.project\_setup module +============================================== + +.. automodule:: gen_efi_app.core.model.project_setup + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/source/gen_efi_app.pro.rst b/docs/build/html/_sources/gen_efi_app.core.model.rst.txt similarity index 51% rename from docs/source/gen_efi_app.pro.rst rename to docs/build/html/_sources/gen_efi_app.core.model.rst.txt index f1743a0..f7fc17f 100644 --- a/docs/source/gen_efi_app.pro.rst +++ b/docs/build/html/_sources/gen_efi_app.core.model.rst.txt @@ -1,5 +1,5 @@ -gen\_efi\_app.pro package -========================= +gen\_efi\_app.core.model package +================================ Submodules ---------- @@ -7,13 +7,12 @@ Submodules .. toctree:: :maxdepth: 4 - gen_efi_app.pro.read_template - gen_efi_app.pro.write_template + gen_efi_app.core.model.project_setup Module contents --------------- -.. automodule:: gen_efi_app.pro +.. automodule:: gen_efi_app.core.model :members: :undoc-members: :show-inheritance: diff --git a/docs/build/html/_sources/gen_efi_app.core.rst.txt b/docs/build/html/_sources/gen_efi_app.core.rst.txt new file mode 100644 index 0000000..09e61ae --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.core.rst.txt @@ -0,0 +1,20 @@ +gen\_efi\_app.core package +========================== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + gen_efi_app.core.model + gen_efi_app.core.service + +Module contents +--------------- + +.. automodule:: gen_efi_app.core + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/source/gen_efi_app.pro.write_template.rst b/docs/build/html/_sources/gen_efi_app.core.service.engine.rst.txt similarity index 56% rename from docs/source/gen_efi_app.pro.write_template.rst rename to docs/build/html/_sources/gen_efi_app.core.service.engine.rst.txt index 7130759..196ac88 100644 --- a/docs/source/gen_efi_app.pro.write_template.rst +++ b/docs/build/html/_sources/gen_efi_app.core.service.engine.rst.txt @@ -1,7 +1,7 @@ -gen\_efi\_app.pro.write\_template module +gen\_efi\_app.core.service.engine module ======================================== -.. automodule:: gen_efi_app.pro.write_template +.. automodule:: gen_efi_app.core.service.engine :members: :undoc-members: :show-inheritance: diff --git a/docs/build/html/_sources/gen_efi_app.core.service.iservice.rst.txt b/docs/build/html/_sources/gen_efi_app.core.service.iservice.rst.txt new file mode 100644 index 0000000..a07bc05 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.core.service.iservice.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.core.service.iservice module +========================================== + +.. automodule:: gen_efi_app.core.service.iservice + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.core.service.isubprocessor.rst.txt b/docs/build/html/_sources/gen_efi_app.core.service.isubprocessor.rst.txt new file mode 100644 index 0000000..3543c8a --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.core.service.isubprocessor.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.core.service.isubprocessor module +=============================================== + +.. automodule:: gen_efi_app.core.service.isubprocessor + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.core.service.rst.txt b/docs/build/html/_sources/gen_efi_app.core.service.rst.txt new file mode 100644 index 0000000..922d635 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.core.service.rst.txt @@ -0,0 +1,21 @@ +gen\_efi\_app.core.service package +================================== + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + gen_efi_app.core.service.engine + gen_efi_app.core.service.iservice + gen_efi_app.core.service.isubprocessor + +Module contents +--------------- + +.. automodule:: gen_efi_app.core.service + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.engine.rst.txt b/docs/build/html/_sources/gen_efi_app.engine.rst.txt new file mode 100644 index 0000000..a7ae070 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.engine.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.engine module +=========================== + +.. automodule:: gen_efi_app.engine + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.cli.engine.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.engine.rst.txt new file mode 100644 index 0000000..ee26503 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.engine.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.cli.engine module +============================================== + +.. automodule:: gen_efi_app.infrastructure.cli.engine + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.cli.icli.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.icli.rst.txt new file mode 100644 index 0000000..3f3e5a4 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.icli.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.cli.icli module +============================================ + +.. automodule:: gen_efi_app.infrastructure.cli.icli + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.cli.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.rst.txt new file mode 100644 index 0000000..60a33bf --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.rst.txt @@ -0,0 +1,28 @@ +gen\_efi\_app.infrastructure.cli package +======================================== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + gen_efi_app.infrastructure.cli.setup + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + gen_efi_app.infrastructure.cli.engine + gen_efi_app.infrastructure.cli.icli + +Module contents +--------------- + +.. automodule:: gen_efi_app.infrastructure.cli + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.bundle.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.bundle.rst.txt new file mode 100644 index 0000000..8db0e33 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.bundle.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.cli.setup.bundle module +==================================================== + +.. automodule:: gen_efi_app.infrastructure.cli.setup.bundle + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.dep_validator.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.dep_validator.rst.txt new file mode 100644 index 0000000..b8ecd83 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.dep_validator.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.cli.setup.dep\_validator module +============================================================ + +.. automodule:: gen_efi_app.infrastructure.cli.setup.dep_validator + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.dependencies.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.dependencies.rst.txt new file mode 100644 index 0000000..985605b --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.dependencies.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.cli.setup.dependencies module +========================================================== + +.. automodule:: gen_efi_app.infrastructure.cli.setup.dependencies + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.factory.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.factory.rst.txt new file mode 100644 index 0000000..429b11a --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.factory.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.cli.setup.factory module +===================================================== + +.. automodule:: gen_efi_app.infrastructure.cli.setup.factory + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.keys.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.keys.rst.txt new file mode 100644 index 0000000..6494853 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.keys.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.cli.setup.keys module +================================================== + +.. automodule:: gen_efi_app.infrastructure.cli.setup.keys + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.opt_validator.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.opt_validator.rst.txt new file mode 100644 index 0000000..bd93e61 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.opt_validator.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.cli.setup.opt\_validator module +============================================================ + +.. automodule:: gen_efi_app.infrastructure.cli.setup.opt_validator + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.options.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.options.rst.txt new file mode 100644 index 0000000..b555588 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.options.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.cli.setup.options module +===================================================== + +.. automodule:: gen_efi_app.infrastructure.cli.setup.options + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.registry.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.registry.rst.txt new file mode 100644 index 0000000..d2005e7 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.registry.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.cli.setup.registry module +====================================================== + +.. automodule:: gen_efi_app.infrastructure.cli.setup.registry + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.rst.txt new file mode 100644 index 0000000..ecdd304 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.rst.txt @@ -0,0 +1,27 @@ +gen\_efi\_app.infrastructure.cli.setup package +============================================== + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + gen_efi_app.infrastructure.cli.setup.bundle + gen_efi_app.infrastructure.cli.setup.dep_validator + gen_efi_app.infrastructure.cli.setup.dependencies + gen_efi_app.infrastructure.cli.setup.factory + gen_efi_app.infrastructure.cli.setup.keys + gen_efi_app.infrastructure.cli.setup.opt_validator + gen_efi_app.infrastructure.cli.setup.options + gen_efi_app.infrastructure.cli.setup.registry + gen_efi_app.infrastructure.cli.setup.validator + +Module contents +--------------- + +.. automodule:: gen_efi_app.infrastructure.cli.setup + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.validator.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.validator.rst.txt new file mode 100644 index 0000000..ce99573 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.cli.setup.validator.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.cli.setup.validator module +======================================================= + +.. automodule:: gen_efi_app.infrastructure.cli.setup.validator + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.command.command.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.command.command.rst.txt new file mode 100644 index 0000000..27d3fde --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.command.command.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.command.command module +=================================================== + +.. automodule:: gen_efi_app.infrastructure.command.command + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.command.gen_efi_command_definition.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.command.gen_efi_command_definition.rst.txt new file mode 100644 index 0000000..2e4ba24 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.command.gen_efi_command_definition.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.command.gen\_efi\_command\_definition module +========================================================================= + +.. automodule:: gen_efi_app.infrastructure.command.gen_efi_command_definition + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.command.gen_efi_command_executor.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.command.gen_efi_command_executor.rst.txt new file mode 100644 index 0000000..74bfc53 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.command.gen_efi_command_executor.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.command.gen\_efi\_command\_executor module +======================================================================= + +.. automodule:: gen_efi_app.infrastructure.command.gen_efi_command_executor + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.command.icommand_definition.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.command.icommand_definition.rst.txt new file mode 100644 index 0000000..1173494 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.command.icommand_definition.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.command.icommand\_definition module +================================================================ + +.. automodule:: gen_efi_app.infrastructure.command.icommand_definition + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.command.icommand_executor.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.command.icommand_executor.rst.txt new file mode 100644 index 0000000..933dcd2 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.command.icommand_executor.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.command.icommand\_executor module +============================================================== + +.. automodule:: gen_efi_app.infrastructure.command.icommand_executor + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.command.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.command.rst.txt new file mode 100644 index 0000000..e0f0710 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.command.rst.txt @@ -0,0 +1,23 @@ +gen\_efi\_app.infrastructure.command package +============================================ + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + gen_efi_app.infrastructure.command.command + gen_efi_app.infrastructure.command.gen_efi_command_definition + gen_efi_app.infrastructure.command.gen_efi_command_executor + gen_efi_app.infrastructure.command.icommand_definition + gen_efi_app.infrastructure.command.icommand_executor + +Module contents +--------------- + +.. automodule:: gen_efi_app.infrastructure.command + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.rst.txt new file mode 100644 index 0000000..190b89e --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.rst.txt @@ -0,0 +1,28 @@ +gen\_efi\_app.infrastructure package +==================================== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + gen_efi_app.infrastructure.cli + gen_efi_app.infrastructure.command + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + gen_efi_app.infrastructure.subprocessor + +Module contents +--------------- + +.. automodule:: gen_efi_app.infrastructure + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.infrastructure.subprocessor.rst.txt b/docs/build/html/_sources/gen_efi_app.infrastructure.subprocessor.rst.txt new file mode 100644 index 0000000..e144f4c --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.infrastructure.subprocessor.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.infrastructure.subprocessor module +================================================ + +.. automodule:: gen_efi_app.infrastructure.subprocessor + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.rst.txt b/docs/build/html/_sources/gen_efi_app.rst.txt index 8eaaf96..7a2a062 100644 --- a/docs/build/html/_sources/gen_efi_app.rst.txt +++ b/docs/build/html/_sources/gen_efi_app.rst.txt @@ -7,7 +7,17 @@ Subpackages .. toctree:: :maxdepth: 4 - gen_efi_app.pro + gen_efi_app.core + gen_efi_app.infrastructure + gen_efi_app.setup + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + gen_efi_app.engine Module contents --------------- diff --git a/docs/build/html/_sources/gen_efi_app.setup.bundle.rst.txt b/docs/build/html/_sources/gen_efi_app.setup.bundle.rst.txt new file mode 100644 index 0000000..26d7bce --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.setup.bundle.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.setup.bundle module +================================= + +.. automodule:: gen_efi_app.setup.bundle + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.setup.dep_validator.rst.txt b/docs/build/html/_sources/gen_efi_app.setup.dep_validator.rst.txt new file mode 100644 index 0000000..890026c --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.setup.dep_validator.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.setup.dep\_validator module +========================================= + +.. automodule:: gen_efi_app.setup.dep_validator + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.pro.read_template.rst.txt b/docs/build/html/_sources/gen_efi_app.setup.dependencies.rst.txt similarity index 57% rename from docs/build/html/_sources/gen_efi_app.pro.read_template.rst.txt rename to docs/build/html/_sources/gen_efi_app.setup.dependencies.rst.txt index dd8c035..0710b8c 100644 --- a/docs/build/html/_sources/gen_efi_app.pro.read_template.rst.txt +++ b/docs/build/html/_sources/gen_efi_app.setup.dependencies.rst.txt @@ -1,7 +1,7 @@ -gen\_efi\_app.pro.read\_template module +gen\_efi\_app.setup.dependencies module ======================================= -.. automodule:: gen_efi_app.pro.read_template +.. automodule:: gen_efi_app.setup.dependencies :members: :undoc-members: :show-inheritance: diff --git a/docs/build/html/_sources/gen_efi_app.setup.factory.rst.txt b/docs/build/html/_sources/gen_efi_app.setup.factory.rst.txt new file mode 100644 index 0000000..73fe65c --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.setup.factory.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.setup.factory module +================================== + +.. automodule:: gen_efi_app.setup.factory + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.setup.keys.rst.txt b/docs/build/html/_sources/gen_efi_app.setup.keys.rst.txt new file mode 100644 index 0000000..6544f58 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.setup.keys.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.setup.keys module +=============================== + +.. automodule:: gen_efi_app.setup.keys + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.setup.opt_validator.rst.txt b/docs/build/html/_sources/gen_efi_app.setup.opt_validator.rst.txt new file mode 100644 index 0000000..f5bc20a --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.setup.opt_validator.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.setup.opt\_validator module +========================================= + +.. automodule:: gen_efi_app.setup.opt_validator + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.setup.options.rst.txt b/docs/build/html/_sources/gen_efi_app.setup.options.rst.txt new file mode 100644 index 0000000..32d4506 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.setup.options.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.setup.options module +================================== + +.. automodule:: gen_efi_app.setup.options + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.setup.registry.rst.txt b/docs/build/html/_sources/gen_efi_app.setup.registry.rst.txt new file mode 100644 index 0000000..8f59347 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.setup.registry.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.setup.registry module +=================================== + +.. automodule:: gen_efi_app.setup.registry + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.setup.rst.txt b/docs/build/html/_sources/gen_efi_app.setup.rst.txt new file mode 100644 index 0000000..86c3d88 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.setup.rst.txt @@ -0,0 +1,27 @@ +gen\_efi\_app.setup package +=========================== + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + gen_efi_app.setup.bundle + gen_efi_app.setup.dep_validator + gen_efi_app.setup.dependencies + gen_efi_app.setup.factory + gen_efi_app.setup.keys + gen_efi_app.setup.opt_validator + gen_efi_app.setup.options + gen_efi_app.setup.registry + gen_efi_app.setup.validator + +Module contents +--------------- + +.. automodule:: gen_efi_app.setup + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/gen_efi_app.setup.validator.rst.txt b/docs/build/html/_sources/gen_efi_app.setup.validator.rst.txt new file mode 100644 index 0000000..e48a835 --- /dev/null +++ b/docs/build/html/_sources/gen_efi_app.setup.validator.rst.txt @@ -0,0 +1,8 @@ +gen\_efi\_app.setup.validator module +==================================== + +.. automodule:: gen_efi_app.setup.validator + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt index 3741292..d2e75c1 100644 --- a/docs/build/html/_sources/index.rst.txt +++ b/docs/build/html/_sources/index.rst.txt @@ -1,15 +1,15 @@ -Create EFI application ------------------------ +Generate EFI application configuration/build setup +---------------------------------------------------- -**gen_efi_app** is tool for creating EFI project skeleton. +**gen_efi_app** is toolset for generation of EFI application configuration/build setup. Developed in `python `_ code. -The README is used to introduce the modules and provide instructions on -how to install the modules, any machine dependencies it may have and any -other information that should be provided before the modules are installed. +The README is used to introduce the tool and provide instructions on +how to install the tool, any machine dependencies it may have and any +other information that should be provided before the tool is installed. -|gen_efi_app python checker| |gen_efi_app python package| |github issues| |documentation status| |github contributors| +|gen_efi_app python checker| |gen_efi_app python package| |gen_efi_app interface checker| |gen_efi_app isp checker| |gen_efi_app srp checker| |github issues| |documentation status| |github contributors| .. |gen_efi_app python checker| image:: https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_python_checker.yml/badge.svg :target: https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_python_checker.yml @@ -17,6 +17,15 @@ other information that should be provided before the modules are installed. .. |gen_efi_app python package| image:: https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_package_checker.yml/badge.svg :target: https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_package.yml +.. |gen_efi_app interface checker| image:: https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_interface_checker.yml/badge.svg + :target: https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_interface_checker.yml + +.. |gen_efi_app isp checker| image:: https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_isp_checker.yml/badge.svg + :target: https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_isp_checker.yml + +.. |gen_efi_app srp checker| image:: https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_srp_checker.yml/badge.svg + :target: https://github.com/electux/gen_efi_app/actions/workflows/gen_efi_app_srp_checker.yml + .. |github issues| image:: https://img.shields.io/github/issues/electux/gen_efi_app.svg :target: https://github.com/electux/gen_efi_app/issues @@ -33,8 +42,8 @@ other information that should be provided before the modules are installed. self modules -Installation -------------- +🚀 Installation +--------------- |gen_efi_app python3 build| @@ -50,94 +59,160 @@ To install **gen_efi_app** type the following .. code-block:: bash tar xvzf gen_efi_app-x.y.z.tar.gz - cd gen_efi_app-x.y.z - #python3 + cd gen_efi_app-x.y.z/ + # python3 + wget https://bootstrap.pypa.io/get-pip.py + python3 get-pip.py + python3 -m pip install --upgrade setuptools + python3 -m pip install --upgrade pip + python3 -m pip install --upgrade build pip3 install -r requirements.txt - python3 setup.py install_lib - python3 setup.py install_egg_info - python3 setup.py install_data + python3 -m build --no-isolation --wheel + pip3 install ./dist/gen_efi_app-*-py3-none-any.whl + rm -f get-pip.py + chmod 755 /usr/local/lib/python3.10/dist-packages/usr/local/bin/gen_efi_app_run.py + ln -s /usr/local/lib/python3.10/dist-packages/usr/local/bin/gen_efi_app_run.py /usr/local/bin/gen_efi_app_run.py You can use Docker to create image/container, or You can use pip to install .. code-block:: bash - #python3 + # pyton3 pip3 install gen_efi_app -Dependencies -------------- +📦 Dependencies +--------------- **gen_efi_app** requires next modules and libraries * `ats-utilities - Python App/Tool/Script Utilities `_ -Tool structure ------------------- +📁 Tool structure +----------------- -**gen_efi_app** is based on OOP +**gen_efi_app** is based on OOP. -Code structure +Tool structure .. code-block:: bash gen_efi_app/ - ├── conf/ - │   ├── gen_efi_app.cfg - │   ├── gen_efi_app.logo - │   ├── gen_efi_app_util.cfg - │   ├── project.yaml - │   └── template/ - │   ├── cflags.template - │   ├── ldflags.template - │   ├── main.template - │   ├── makefile.template - │   ├── objects.template - │   └── ocflags.template - ├── __init__.py - ├── log/ - │   └── gen_efi_app.log - ├── pro/ + ├── core/ + │   ├── __init__.py + │   ├── model/ + │   │   ├── __init__.py + │   │   └── project_setup.py + │   └── service/ + │   ├── engine.py + │   ├── __init__.py + │   ├── iservice.py + │   └── isubprocessor.py + ├── engine.py + ├── infrastructure/ + │   ├── cli/ + │   │   ├── engine.py + │   │   ├── icli.py + │   │   ├── __init__.py + │   │   └── setup/ + │   │   ├── bundle.py + │   │   ├── dep_validator.py + │   │   ├── dependencies.py + │   │   ├── factory.py + │   │   ├── __init__.py + │   │   ├── keys.py + │   │   ├── opt_validator.py + │   │   ├── options.py + │   │   ├── registry.py + │   │   └── validator.py + │   ├── command/ + │   │   ├── command.py + │   │   ├── gen_efi_command_definition.py + │   │   ├── gen_efi_command_executor.py + │   │   ├── icommand_definition.py + │   │   ├── icommand_executor.py + │   │   └── __init__.py + │   ├── config/ + │   │   ├── gen_efi_app.cfg + │   │   ├── gen_efi_app.logo + │   │   ├── scheme.json + │   │   └── templates.tgz │   ├── __init__.py - │   ├── read_template.py - │   └── write_template.py + │   └── subprocessor.py + ├── __init__.py ├── py.typed - └── run/ - └── gen_efi_app_run.py - - 6 directories, 17 files + └── setup/ + ├── bundle.py + ├── dep_validator.py + ├── dependencies.py + ├── factory.py + ├── __init__.py + ├── keys.py + ├── opt_validator.py + ├── options.py + ├── registry.py + └── validator.py + + 10 directories, 45 files + +✨ Features +----------- + +* Automatically scaffolds EFI application projects with proper configuration and build setups. +* Provides a modular and extensible architecture based on OOP and SOLID principles. +* Includes command line interface (CLI) support via a command/executor structure. +* Robust validation of project bundles, dependencies, and options. +* Comes with configurable templates and JSON schema definitions. +* High code quality with full type checking. + +📊 Code coverage +---------------- + +.. csv-table:: Code coverage + :file: coverage_table.csv + :widths: 60, 10, 10, 20 + :header-rows: 1 + +🛠 Usage +-------- + +Install package -Copyright and licence ----------------------- +.. code-block:: bash -|license: gpl v3| |license: apache 2.0| + pip3 install gen_efi_app -.. |license: gpl v3| image:: https://img.shields.io/badge/license-gplv3-blue.svg - :target: https://www.gnu.org/licenses/gpl-3.0 +Prepare main entry point by downloading `main.py` or create your own. -.. |license: apache 2.0| image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg - :target: https://opensource.org/licenses/Apache-2.0 +.. code-block:: bash -Copyright (C) 2020 - 2026 by `electux.github.io/gen_efi_app `_ + wget -O main.py https://raw.githubusercontent.com/electux/gen_efi_app/main/main.py -**gen_efi_app** is free software; you can redistribute it and/or modify -it under the same terms as Python itself, either Python version 3.x or, -at your option, any later version of Python 3 you may have available. +Running tool for creating new EFI application project -Lets help and support PSF. +.. code-block:: bash -|python software foundation| + python3 main.py create --name mytool --output ./demo/ -.. |python software foundation| image:: https://raw.githubusercontent.com/electux/gen_efi_app/dev/docs/psf-logo-alpha.png - :target: https://www.python.org/psf/ +📚 Docs +------- -|donate| +More documentation and info at -.. |donate| image:: https://www.paypalobjects.com/en_us/i/btn/btn_donatecc_lg.gif - :target: https://www.python.org/psf/donations/ +* `gen-efi-app.readthedocs.io `_ +* `www.python.org `_ -Indices and tables ------------------- +👥 Contributing +--------------- -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` +`Contributing to gen_efi_app `_ + +📄 Copyright and licence +------------------------- + +Copyright (C) 2020 - 2026 by `electux.github.io/gen_efi_app `_ + +**gen_efi_app** is free software; you can redistribute it and/or modify +it under the same terms as Python itself, either Python version 3.x or, +at your option, any later version of Python 3 you may have available. + +Lets help and support PSF. diff --git a/docs/build/html/_sources/main.rst.txt b/docs/build/html/_sources/main.rst.txt new file mode 100644 index 0000000..153c8f9 --- /dev/null +++ b/docs/build/html/_sources/main.rst.txt @@ -0,0 +1,8 @@ +main module +=========== + +.. automodule:: main + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/docs/build/html/_sources/modules.rst.txt b/docs/build/html/_sources/modules.rst.txt index 4935c82..ece8a16 100644 --- a/docs/build/html/_sources/modules.rst.txt +++ b/docs/build/html/_sources/modules.rst.txt @@ -5,3 +5,4 @@ gen_efi_app :maxdepth: 4 gen_efi_app + main diff --git a/docs/build/html/gen_efi_app.core.html b/docs/build/html/gen_efi_app.core.html new file mode 100644 index 0000000..1c70e86 --- /dev/null +++ b/docs/build/html/gen_efi_app.core.html @@ -0,0 +1,185 @@ + + + + + + + + gen_efi_app.core package — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

gen_efi_app.core package

+
+

Subpackages

+ +
+
+

Module contents

+
+
Module

__init__.py

+
+
Copyright

Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

+
+
Info

Initializes the core package.

+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.core.model.html b/docs/build/html/gen_efi_app.core.model.html new file mode 100644 index 0000000..0a1deb8 --- /dev/null +++ b/docs/build/html/gen_efi_app.core.model.html @@ -0,0 +1,164 @@ + + + + + + + + gen_efi_app.core.model package — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

gen_efi_app.core.model package

+
+

Submodules

+ +
+
+

Module contents

+
+
Module

__init__.py

+
+
Copyright

Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

+
+
Info

Initializes the core model package.

+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.core.model.project_setup.html b/docs/build/html/gen_efi_app.core.model.project_setup.html new file mode 100644 index 0000000..9d5adbd --- /dev/null +++ b/docs/build/html/gen_efi_app.core.model.project_setup.html @@ -0,0 +1,173 @@ + + + + + + + + gen_efi_app.core.model.project_setup module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

gen_efi_app.core.model.project_setup module

+
+
Module

project_setup.py

+
+
Copyright

Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

+
+
Info

Defines domain model for a project setup.

+
+
+
+
+class gen_efi_app.core.model.project_setup.ProjectSetup(*, project_config: Mapping[str, object])[source]
+

Bases: object

+

Defines domain model for a project setup.

+

It defines:

+
+
+
attributes:
+
+
project_config - Mapping with project configuration.
+
+
+
+
+
+
+project_config: Mapping[str, object]
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.core.service.engine.html b/docs/build/html/gen_efi_app.core.service.engine.html new file mode 100644 index 0000000..863e8c0 --- /dev/null +++ b/docs/build/html/gen_efi_app.core.service.engine.html @@ -0,0 +1,213 @@ + + + + + + + + gen_efi_app.core.service.engine module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

gen_efi_app.core.service.engine module

+
+
Module

engine.py

+
+
Copyright

Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

+
+
Info

Defines application service for file generation.

+
+
+
+
+class gen_efi_app.core.service.engine.Service(subprocessor: ISubProcessor)[source]
+

Bases: object

+

Service for orchestrating the file generation process.

+

It defines:

+
+
+
attributes:
+
+
_subprocessor - Adapter for subprocessing.
+
+
+
methods:
+
+
__init__ - Initializes the service.
+
execute - Generates and writes user files.
+
is_initialized - Checks if the service is initialized.
+
+
+
+
+
+
+_subprocessor: ISubProcessor
+
+ +
+
+execute(*, params: ProjectSetup) Mapping[str, object][source]
+

Generates EFI application configuration files.

+
+
Parameters:
+

params – The ProjectSetup object.

+
+
Returns:
+

The result of the execution (return code, stdout, stderr).

+
+
Exceptions:
+

None.

+
+
+
+ +
+
+is_initialized() bool[source]
+

Checks if the service is initialized.

+
+
Returns:
+

True if the service is initialized, False otherwise.

+
+
Exceptions:
+

None.

+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.core.service.html b/docs/build/html/gen_efi_app.core.service.html new file mode 100644 index 0000000..edab78b --- /dev/null +++ b/docs/build/html/gen_efi_app.core.service.html @@ -0,0 +1,188 @@ + + + + + + + + gen_efi_app.core.service package — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

gen_efi_app.core.service package

+
+

Submodules

+ +
+
+

Module contents

+
+
Module

__init__.py

+
+
Copyright

Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

+
+
Info

Initializes the core service package.

+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.core.service.iservice.html b/docs/build/html/gen_efi_app.core.service.iservice.html new file mode 100644 index 0000000..826bf1c --- /dev/null +++ b/docs/build/html/gen_efi_app.core.service.iservice.html @@ -0,0 +1,215 @@ + + + + + + + + gen_efi_app.core.service.iservice module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

gen_efi_app.core.service.iservice module

+
+
Module

iservice.py

+
+
Copyright

Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

+
+
Info

Defines the abstract interface for services. +Provides an interface for the service factory.

+
+
+
+
+class gen_efi_app.core.service.iservice.IService(*args, **kwargs)[source]
+

Bases: Protocol, Generic

+

Defines the abstract interface for services. +Provides an interface for the service factory.

+

It defines:

+
+
+
methods:
+
+
execute - Executes the service.
+
is_initialized - Checks if the service is initialized.
+
+
+
+
+
+
+_abc_impl = <_abc._abc_data object>
+
+ +
+
+_is_protocol = True
+
+ +
+
+_is_runtime_protocol = True
+
+ +
+
+execute(*, params: ServiceParamsType) ExecuteResultType[source]
+

Executes the service.

+
+
Parameters:
+

params – The parameters for the service execution.

+
+
Returns:
+

The result of the execution.

+
+
+
+ +
+
+is_initialized() bool[source]
+

Checks if the service is initialized.

+
+
Returns:
+

True if the service is initialized, False otherwise.

+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.core.service.isubprocessor.html b/docs/build/html/gen_efi_app.core.service.isubprocessor.html new file mode 100644 index 0000000..e522378 --- /dev/null +++ b/docs/build/html/gen_efi_app.core.service.isubprocessor.html @@ -0,0 +1,215 @@ + + + + + + + + gen_efi_app.core.service.isubprocessor module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

gen_efi_app.core.service.isubprocessor module

+
+
Module

isubprocessor.py

+
+
Copyright

Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

+
+
Info

Defines the abstract interface for sub-process execution. +Provides an interface for the sub-process factory.

+
+
+
+
+class gen_efi_app.core.service.isubprocessor.ISubProcessor(*args, **kwargs)[source]
+

Bases: Protocol, Generic

+

Defines the abstract interface for sub-process execution. +Provides an interface for the sub-process factory.

+

It defines:

+
+
+
methods:
+
+
run - Runs a sub-process.
+
is_initialized - Checks if the subprocessor is initialized.
+
+
+
+
+
+
+_abc_impl = <_abc._abc_data object>
+
+ +
+
+_is_protocol = True
+
+ +
+
+_is_runtime_protocol = True
+
+ +
+
+is_initialized() bool[source]
+

Checks if the subprocessor is initialized.

+
+
Returns:
+

True if the subprocessor is initialized, False otherwise.

+
+
+
+ +
+
+run(*, params: SubProcessorParamsType) SubProcessorResultType[source]
+

Runs a sub-process.

+
+
Parameters:
+

params – The parameters for the sub-process execution.

+
+
Returns:
+

The result of the execution.

+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.engine.html b/docs/build/html/gen_efi_app.engine.html new file mode 100644 index 0000000..cb30364 --- /dev/null +++ b/docs/build/html/gen_efi_app.engine.html @@ -0,0 +1,207 @@ + + + + + + + + gen_efi_app.engine module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

gen_efi_app.engine module

+
+
Module

engine.py

+
+
Copyright

Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

+
+
Info

Engine orchestrating the initialization and execution of gen_efi_app.

+
+
+
+
+class gen_efi_app.engine.GenEfiApp(bundle: GenEfiAppBundle)[source]
+

Bases: Base

+

Engine orchestrating the initialization and execution of gen_efi_app.

+

It defines:

+
+
+
attributes:
+
+
_is_initialized - The flag indicating whether the engine is initialized.
+
_logger - The logger for logging messages during initialization and execution.
+
_cli - The adapter for the command line interface.
+
+
+
methods:
+
+
__init__ - Initializes the gen_efi_app engine with adapters and services.
+
process - Processes the gen_efi_app commands.
+
+
+
+
+
+
+_cli: ICLI
+
+ +
+
+_is_initialized: bool
+
+ +
+
+_logger: ILogger
+
+ +
+
+process(verbose: bool = False) bool[source]
+

Processes the gen_efi_app commands.

+
+
Parameters:
+

verbose – Enable verbose output.

+
+
Returns:
+

True if successful, False otherwise.

+
+
Exceptions:
+

None.

+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.html b/docs/build/html/gen_efi_app.html index 2476d62..46da947 100644 --- a/docs/build/html/gen_efi_app.html +++ b/docs/build/html/gen_efi_app.html @@ -15,7 +15,7 @@ - +

This Page

@@ -246,7 +238,7 @@

Navigation

modules |
  • - next |
  • + + + + + + + gen_efi_app.infrastructure.cli.engine module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.cli.engine module

    +
    +
    Module

    engine.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Defines CLI class implementing inbound CLI port.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.cli.engine.CLI(bundle: CLIBundle)[source]
    +

    Bases: object

    +

    Adapter that implements CLI commands for the code generator.

    +

    It defines:

    +
    +
    +
    attributes:
    +
    +
    _service - File generation orchestrator service.
    +
    _parser - Argument parser for parsing CLI command args.
    +
    _executors - Map of command names to command executor instances.
    +
    +
    +
    methods:
    +
    +
    __init__ - Initializes the CLI with service, parser and commands list.
    +
    run - Parses command line arguments and runs selected command strategy.
    +
    is_initialized - Checks if the CLI is initialized.
    +
    __str__ - Returns the CLI as string representation.
    +
    +
    +
    +
    +
    +
    +_executors: Mapping[str, ICommandExecutor[ICommandDefinition, object, object, object]]
    +
    + +
    +
    +_parser: IOptionManager
    +
    + +
    +
    +_service: IService
    +
    + +
    +
    +is_initialized() bool[source]
    +

    Checks if the CLI is initialized.

    +
    +
    Returns:
    +

    True if CLI is initialized, False otherwise.

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    +
    +run() Mapping[str, object][source]
    +

    Parses command line arguments and runs selected command strategy.

    +

    Note: returncode is 0 for success, 1 for exception or if command is not found, +None if process timed out or failed to start, otherwise it is the integer exit code of the process.

    +
    +
    Returns:
    +

    The execution result (return code, stdout, and stderr).

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.cli.html b/docs/build/html/gen_efi_app.infrastructure.cli.html new file mode 100644 index 0000000..cfe605c --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.cli.html @@ -0,0 +1,230 @@ + + + + + + + + gen_efi_app.infrastructure.cli package — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.cli package

    +
    +

    Subpackages

    + +
    +
    +

    Submodules

    + +
    +
    +

    Module contents

    +
    +
    Module

    __init__.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Initializes the infrastructure cli package.

    +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.cli.icli.html b/docs/build/html/gen_efi_app.infrastructure.cli.icli.html new file mode 100644 index 0000000..0c31f07 --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.cli.icli.html @@ -0,0 +1,210 @@ + + + + + + + + gen_efi_app.infrastructure.cli.icli module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.cli.icli module

    +
    +
    Module

    icli.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Defines the abstract interface for the CLI.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.cli.icli.ICLI(*args, **kwargs)[source]
    +

    Bases: Protocol

    +

    Defines the abstract interface for the CLI.

    +

    It defines:

    +
    +
    +
    methods:
    +
    +
    run - Runs the CLI.
    +
    is_initialized - Checks if the CLI is initialized.
    +
    +
    +
    +
    +
    +
    +_abc_impl = <_abc._abc_data object>
    +
    + +
    +
    +_is_protocol = True
    +
    + +
    +
    +_is_runtime_protocol = True
    +
    + +
    +
    +is_initialized() bool[source]
    +

    Checks if the CLI is initialized.

    +
    +
    Returns:
    +

    True if the CLI is initialized, False otherwise.

    +
    +
    +
    + +
    +
    +run() Mapping[str, object][source]
    +

    Runs the CLI.

    +
    +
    Returns:
    +

    The result of the execution.

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.cli.setup.bundle.html b/docs/build/html/gen_efi_app.infrastructure.cli.setup.bundle.html new file mode 100644 index 0000000..aab58a6 --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.cli.setup.bundle.html @@ -0,0 +1,209 @@ + + + + + + + + gen_efi_app.infrastructure.cli.setup.bundle module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.cli.setup.bundle module

    +
    +
    Module

    bundle.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Defines the CLI bundle.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.cli.setup.bundle.CLIBundle(*, service: IService, parser: IOptionManager, commands: Sequence[CommandBundle])[source]
    +

    Bases: object

    +

    Defines the CLI bundle.

    +

    It defines:

    +
    +
    +
    attributes:
    +
    +
    service - The service orchestrating the generator.
    +
    parser - The argument parser for parsing CLI command arguments.
    +
    commands - The sequence of command pairs.
    +
    +
    +
    methods:
    +
    +
    to_dict - Converts the CLI bundle to a dictionary.
    +
    +
    +
    +
    +
    +
    +commands: Sequence[CommandBundle]
    +
    + +
    +
    +parser: IOptionManager
    +
    + +
    +
    +service: IService
    +
    + +
    +
    +to_dict() dict[str, object][source]
    +

    Converts the CLI bundle to a dictionary.

    +
    +
    Returns:
    +

    Dictionary representation of the CLI bundle.

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.cli.setup.dep_validator.html b/docs/build/html/gen_efi_app.infrastructure.cli.setup.dep_validator.html new file mode 100644 index 0000000..0f317fc --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.cli.setup.dep_validator.html @@ -0,0 +1,206 @@ + + + + + + + + gen_efi_app.infrastructure.cli.setup.dep_validator module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.cli.setup.dep_validator module

    +
    +
    Module

    dep_validator.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Validator for the CLI bundle dependencies.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.cli.setup.dep_validator.CLIBundleDependenciesValidator[source]
    +

    Bases: object

    +

    Validator for the CLI bundle dependencies.

    +

    It defines:

    +
    +
    +
    methods:
    +
    +
    validate - Validates the CLI bundle dependencies.
    +
    is_valid - Checks if the CLI bundle dependencies is valid.
    +
    +
    +
    +
    +
    +
    +classmethod is_valid(dependencies: CLIBundleDependencies) bool[source]
    +

    Checks if the CLI bundle dependencies is valid.

    +
    +
    Parameters:
    +

    dependencies – The CLI bundle dependencies to be checked.

    +
    +
    Returns:
    +

    True if valid, False otherwise.

    +
    +
    +
    + +
    +
    +classmethod validate(dependencies: CLIBundleDependencies) None[source]
    +

    Validates the CLI bundle dependencies.

    +
    +
    Parameters:
    +

    dependencies – The CLI bundle dependencies to be validated.

    +
    +
    Exceptions:
    +
    +
    ATSValueError: The CLI bundle dependencies must be provided and have proper values.
    +
    ATSTypeError: The CLI bundle dependencies must be an instance of Mapping and its
    +
    +
    attributes must be instances of their respective types.
    +
    +
    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.cli.setup.dependencies.html b/docs/build/html/gen_efi_app.infrastructure.cli.setup.dependencies.html new file mode 100644 index 0000000..2809db8 --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.cli.setup.dependencies.html @@ -0,0 +1,189 @@ + + + + + + + + gen_efi_app.infrastructure.cli.setup.dependencies module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.cli.setup.dependencies module

    +
    +
    Module

    dependencies.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Encapsulates core CLI components for simplification of CLI bundle.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.cli.setup.dependencies.CLIBundleDependencies[source]
    +

    Bases: TypedDict

    +

    Encapsulates core CLI components for simplification of CLI bundle.

    +

    It defines:

    +
    +
    +
    attributes:
    +
    +
    service - The service for gen execution.
    +
    parser - The parser for command line options.
    +
    commands - The sequence of command pairs.
    +
    +
    +
    +
    +
    +
    +commands: Sequence[CommandBundle]
    +
    + +
    +
    +parser: IOptionManager
    +
    + +
    +
    +service: IService
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.cli.setup.factory.html b/docs/build/html/gen_efi_app.infrastructure.cli.setup.factory.html new file mode 100644 index 0000000..19e9163 --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.cli.setup.factory.html @@ -0,0 +1,219 @@ + + + + + + + + gen_efi_app.infrastructure.cli.setup.factory module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.cli.setup.factory module

    +
    +
    Module

    factory.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Encapsulates core CLI components for simplification of CLI bundle.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.cli.setup.factory.CLIBundleFactory[source]
    +

    Bases: object

    +

    Factory for creating the CLI bundle.

    +

    It defines:

    +
    +
    +
    methods:
    +
    +
    create_bundle - Creates the CLI bundle with optional pre-configured options.
    +
    get_version - Returns the factory version.
    +
    +
    +
    +
    +
    +
    +classmethod create_bundle(options: CLIBundleOptions) CLIBundle[source]
    +

    Creates the CLI bundle with optional pre-configured options.

    +
    +
    Parameters:
    +

    options – The CLI bundle options.

    +
    +
    Returns:
    +

    The CLI bundle.

    +
    +
    Exceptions:
    +
    +
    ATSValueError: The CLI bundle options must be provided and have proper values.
    +
    ATSTypeError: The CLI bundle options must be an instance of Mapping and its
    +
    +
    attributes must be instances of their respective types.
    +
    +
    ATSValueError: The CLI bundle dependencies must be provided and have proper values.
    +
    ATSTypeError: The CLI bundle dependencies must be an instance of Mapping and its
    +
    +
    attributes must be instances of their respective types.
    +
    +
    ATSValueError: The CLI bundle must be provided and have proper values.
    +
    ATSTypeError: The CLI bundle must be an instance of CLIBundle and
    +
    +
    its attributes must be instances of their respective types.
    +
    +
    +
    +
    +
    + +
    +
    +classmethod get_version() str[source]
    +

    Returns the factory version.

    +
    +
    Returns:
    +

    The factory version.

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.cli.setup.html b/docs/build/html/gen_efi_app.infrastructure.cli.setup.html new file mode 100644 index 0000000..4fffdb8 --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.cli.setup.html @@ -0,0 +1,239 @@ + + + + + + + + gen_efi_app.infrastructure.cli.setup package — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.cli.setup package

    +
    +

    Submodules

    +
    + +
    +
    +
    +

    Module contents

    +
    +
    Module

    __init__.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Initializes the infrastructure cli setup package.

    +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.cli.setup.keys.html b/docs/build/html/gen_efi_app.infrastructure.cli.setup.keys.html new file mode 100644 index 0000000..506b90d --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.cli.setup.keys.html @@ -0,0 +1,239 @@ + + + + + + + + gen_efi_app.infrastructure.cli.setup.keys module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.cli.setup.keys module

    +
    +
    Module

    keys.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Runtime components and interface constraints for the CLI bundle.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.cli.setup.keys.CLIBundleKeys[source]
    +

    Bases: object

    +

    Runtime components and interface constraints for the CLI bundle.

    +

    It defines:

    +
    +
    +
    attributes:
    +
    +
    DEPENDENCY_SERVICE - The service interface constant of the CLI bundle.
    +
    DEPENDENCY_PARSER - The parser interface constant of the CLI bundle.
    +
    DEPENDENCY_COMMANDS - The commands constant of the CLI bundle.
    +
    OPTION_SERVICE - The service option constant of the CLI bundle.
    +
    OPTION_PARSER - The parser option constant of the CLI bundle.
    +
    +
    +
    methods:
    +
    +
    get_dependency_to_type - Returns the mapping of the CLI bundle dependencies to their types.
    +
    get_option_to_type - Returns the mapping of the CLI bundle options to their types.
    +
    +
    +
    +
    +
    +
    +DEPENDENCY_COMMANDS: ClassVar[str] = 'commands'
    +
    + +
    +
    +DEPENDENCY_PARSER: ClassVar[str] = 'parser'
    +
    + +
    +
    +DEPENDENCY_SERVICE: ClassVar[str] = 'service'
    +
    + +
    +
    +OPTION_PARSER: ClassVar[str] = 'parser'
    +
    + +
    +
    +OPTION_SERVICE: ClassVar[str] = 'service'
    +
    + +
    +
    +classmethod get_dependency_to_type() mappingproxy[str, type][source]
    +

    Returns the mapping of the CLI bundle dependencies to their types.

    +
    +
    Returns:
    +

    The mapping of the CLI bundle dependencies to their types.

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    +
    +classmethod get_option_to_type() mappingproxy[str, type][source]
    +

    Returns the mapping of the CLI bundle options to their types.

    +
    +
    Returns:
    +

    The mapping of the CLI bundle options to their types.

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.cli.setup.opt_validator.html b/docs/build/html/gen_efi_app.infrastructure.cli.setup.opt_validator.html new file mode 100644 index 0000000..ee5644d --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.cli.setup.opt_validator.html @@ -0,0 +1,206 @@ + + + + + + + + gen_efi_app.infrastructure.cli.setup.opt_validator module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.cli.setup.opt_validator module

    +
    +
    Module

    opt_validator.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Validator for the CLI bundle options.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.cli.setup.opt_validator.CLIBundleOptionsValidator[source]
    +

    Bases: object

    +

    Validator for the CLI bundle options.

    +

    It defines:

    +
    +
    +
    methods:
    +
    +
    validate - Validates the CLI bundle options.
    +
    is_valid - Checks if the CLI bundle options is valid.
    +
    +
    +
    +
    +
    +
    +classmethod is_valid(options: CLIBundleOptions) bool[source]
    +

    Checks if the CLI bundle options is valid.

    +
    +
    Parameters:
    +

    options – The CLI bundle options to be checked.

    +
    +
    Returns:
    +

    True if valid, False otherwise.

    +
    +
    +
    + +
    +
    +classmethod validate(options: CLIBundleOptions) None[source]
    +

    Validates the CLI bundle options.

    +
    +
    Parameters:
    +

    options – The CLI bundle options to be validated.

    +
    +
    Exceptions:
    +
    +
    ATSValueError: The CLI bundle options must be provided and have proper values.
    +
    ATSTypeError: The CLI bundle options must be an instance of Mapping and its
    +
    +
    attributes must be instances of their respective types.
    +
    +
    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.cli.setup.options.html b/docs/build/html/gen_efi_app.infrastructure.cli.setup.options.html new file mode 100644 index 0000000..e840b9f --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.cli.setup.options.html @@ -0,0 +1,182 @@ + + + + + + + + gen_efi_app.infrastructure.cli.setup.options module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.cli.setup.options module

    +
    +
    Module

    options.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Encapsulates core CLI components for simplification of CLI bundle.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.cli.setup.options.CLIBundleOptions[source]
    +

    Bases: TypedDict

    +

    Encapsulates core CLI components for simplification of CLI bundle.

    +

    It defines:

    +
    +
    +
    attributes:
    +
    +
    service - The service for gen execution.
    +
    parser - The parser for command line options.
    +
    +
    +
    +
    +
    +
    +parser: IOptionManager
    +
    + +
    +
    +service: IService
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.cli.setup.registry.html b/docs/build/html/gen_efi_app.infrastructure.cli.setup.registry.html new file mode 100644 index 0000000..a173c0e --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.cli.setup.registry.html @@ -0,0 +1,214 @@ + + + + + + + + gen_efi_app.infrastructure.cli.setup.registry module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.cli.setup.registry module

    +
    +
    Module

    registry.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Encapsulates core CLI components for simplification of CLI bundle.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.cli.setup.registry.CLIBundleRegistry[source]
    +

    Bases: object

    +

    Encapsulates core CLI components for simplification of CLI bundle.

    +

    It defines:

    +
    +
    +
    methods:
    +
    +
    create_bundle - Creates a CLI bundle.
    +
    get_version - Returns the registry version.
    +
    +
    +
    +
    +
    +
    +classmethod create_bundle(dependencies: CLIBundleDependencies) CLIBundle[source]
    +

    Creates a CLI bundle.

    +
    +
    Parameters:
    +

    dependencies – The CLI bundle dependencies.

    +
    +
    Returns:
    +

    CLI bundle.

    +
    +
    Exceptions:
    +
    +
    ATSValueError: The CLI bundle dependencies must be provided and have proper values.
    +
    ATSTypeError: The CLI bundle dependencies must be an instance of Mapping and its
    +
    +
    attributes must be instances of their respective types.
    +
    +
    ATSValueError: The CLI bundle must be provided and have proper values.
    +
    ATSTypeError: The CLI bundle must be an instance of CLIBundle and
    +
    +
    its attributes must be instances of their respective types.
    +
    +
    +
    +
    +
    + +
    +
    +classmethod get_version() str[source]
    +

    Returns the registry version.

    +
    +
    Returns:
    +

    The registry version.

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.cli.setup.validator.html b/docs/build/html/gen_efi_app.infrastructure.cli.setup.validator.html new file mode 100644 index 0000000..db912d0 --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.cli.setup.validator.html @@ -0,0 +1,206 @@ + + + + + + + + gen_efi_app.infrastructure.cli.setup.validator module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.cli.setup.validator module

    +
    +
    Module

    validator.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Validator for the CLI bundle.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.cli.setup.validator.CLIBundleValidator[source]
    +

    Bases: object

    +

    Validator for the CLI bundle.

    +

    It defines:

    +
    +
    +
    methods:
    +
    +
    validate - Validates the CLI bundle.
    +
    is_valid - Checks if the CLI bundle is valid.
    +
    +
    +
    +
    +
    +
    +classmethod is_valid(bundle: CLIBundle) bool[source]
    +

    Checks if the CLI bundle is valid.

    +
    +
    Parameters:
    +

    bundle – The CLI bundle to be checked.

    +
    +
    Returns:
    +

    True if valid, False otherwise.

    +
    +
    +
    + +
    +
    +classmethod validate(bundle: CLIBundle) None[source]
    +

    Validates the CLI bundle.

    +
    +
    Parameters:
    +

    bundle – The CLI bundle to be validated.

    +
    +
    Exceptions:
    +
    +
    ATSValueError: The CLI bundle must be provided and have proper values.
    +
    ATSTypeError: The CLI bundle must be an instance of CLIBundle and
    +
    +
    its attributes must be instances of their respective types.
    +
    +
    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.command.command.html b/docs/build/html/gen_efi_app.infrastructure.command.command.html new file mode 100644 index 0000000..da7989d --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.command.command.html @@ -0,0 +1,180 @@ + + + + + + + + gen_efi_app.infrastructure.command.command module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.command.command module

    +
    +
    Module

    command.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Defines command bundle dataclass combining command definition and executor.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.command.command.CommandBundle(definition: ICommandDefinition, executor: ICommandExecutor[ICommandDefinition, object, object, object])[source]
    +

    Bases: object

    +

    Command bundle holding command definition and command executor.

    +

    It defines:

    +
    +
    +
    attributes:
    +
    +
    definition - The command CLI metadata definition.
    +
    executor - The command execution strategy.
    +
    +
    +
    +
    +
    +
    +definition: ICommandDefinition
    +
    + +
    +
    +executor: ICommandExecutor[ICommandDefinition, object, object, object]
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.command.gen_efi_command_definition.html b/docs/build/html/gen_efi_app.infrastructure.command.gen_efi_command_definition.html new file mode 100644 index 0000000..5d7cc18 --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.command.gen_efi_command_definition.html @@ -0,0 +1,206 @@ + + + + + + + + gen_efi_app.infrastructure.command.gen_efi_command_definition module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.command.gen_efi_command_definition module

    +
    +
    Module

    gen_efi_command_definition.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Defines GenEfiCommandDefinition class.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.command.gen_efi_command_definition.GenEfiCommandDefinition[source]
    +

    Bases: object

    +

    CLI subcommand metadata definition for EFI application configuration files generation.

    +

    It defines:

    +
    +
    +
    methods:
    +
    +
    name - Returns the command name.
    +
    help_text - Returns the command help text.
    +
    options - Returns the sequence of command options.
    +
    __str__ - Returns the command definition as string representation.
    +
    +
    +
    +
    +
    +
    +property help_text: str
    +

    Returns the command help text.

    +
    +
    Returns:
    +

    The command help text.

    +
    +
    +
    + +
    +
    +property name: str
    +

    Returns the command name.

    +
    +
    Returns:
    +

    The command name.

    +
    +
    +
    + +
    +
    +property options: Sequence[OptionData]
    +

    Returns the command options.

    +
    +
    Returns:
    +

    Sequence of command options.

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.command.gen_efi_command_executor.html b/docs/build/html/gen_efi_app.infrastructure.command.gen_efi_command_executor.html new file mode 100644 index 0000000..d72ed04 --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.command.gen_efi_command_executor.html @@ -0,0 +1,213 @@ + + + + + + + + gen_efi_app.infrastructure.command.gen_efi_command_executor module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.command.gen_efi_command_executor module

    +
    +
    Module

    gen_efi_command_executor.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Defines GenEfiCommandExecutor class.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.command.gen_efi_command_executor.GenEfiCommandExecutor(definition: ICommandDefinition)[source]
    +

    Bases: object

    +

    Command executor strategy for generating EFI application configuration files.

    +

    It defines:

    +
    +
    +
    attributes:
    +
    +
    definition - The command CLI metadata definition.
    +
    +
    +
    methods:
    +
    +
    execute - Executes the subcommand.
    +
    get_definition - Returns the command definition metadata.
    +
    __str__ - Returns the GenEfiCommandExecutor as string representation.
    +
    +
    +
    +
    +
    +
    +definition: ICommandDefinition
    +
    + +
    +
    +execute(*, params: Mapping[str, object], service: IService) Mapping[str, object][source]
    +

    Executes the subcommand.

    +
    +
    Parameters:
    +
      +
    • params – Subcommand parameters from CLI parser.

    • +
    • service – Command orchestrator service instance.

    • +
    +
    +
    Returns:
    +

    The result of the subcommand execution.

    +
    +
    +
    + +
    +
    +get_definition() ICommandDefinition[source]
    +

    Returns the command definition metadata.

    +
    +
    Returns:
    +

    The command definition metadata.

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.command.html b/docs/build/html/gen_efi_app.infrastructure.command.html new file mode 100644 index 0000000..78636c3 --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.command.html @@ -0,0 +1,203 @@ + + + + + + + + gen_efi_app.infrastructure.command package — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.command package

    +
    +

    Submodules

    + +
    +
    +

    Module contents

    +
    +
    Module

    __init__.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Initializes the infrastructure command package.

    +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.command.icommand_definition.html b/docs/build/html/gen_efi_app.infrastructure.command.icommand_definition.html new file mode 100644 index 0000000..9abb7b3 --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.command.icommand_definition.html @@ -0,0 +1,175 @@ + + + + + + + + gen_efi_app.infrastructure.command.icommand_definition module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.command.icommand_definition module

    +
    +
    Module

    icommand_definition.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Defines abstract ICommandDefinition strategy interface.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.command.icommand_definition.ICommandDefinition(*args, **kwargs)[source]
    +

    Bases: IOptionCommand[IOption], Protocol

    +

    Abstract ICommandDefinition strategy interface.

    +
    +
    +_abc_impl = <_abc._abc_data object>
    +
    + +
    +
    +_is_protocol = True
    +
    + +
    +
    +_is_runtime_protocol = True
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.command.icommand_executor.html b/docs/build/html/gen_efi_app.infrastructure.command.icommand_executor.html new file mode 100644 index 0000000..c804242 --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.command.icommand_executor.html @@ -0,0 +1,216 @@ + + + + + + + + gen_efi_app.infrastructure.command.icommand_executor module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.command.icommand_executor module

    +
    +
    Module

    icommand_executor.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Defines abstract ICommandExecutor strategy interface.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.command.icommand_executor.ICommandExecutor(*args, **kwargs)[source]
    +

    Bases: Protocol, Generic

    +

    Abstract ICommandExecutor strategy interface.

    +

    It defines:

    +
    +
    +
    methods:
    +
    +
    execute - Executes the command strategy.
    +
    get_definition - Returns the command definition metadata.
    +
    +
    +
    +
    +
    +
    +_abc_impl = <_abc._abc_data object>
    +
    + +
    +
    +_is_protocol = True
    +
    + +
    +
    +_is_runtime_protocol = True
    +
    + +
    +
    +execute(*, params: ParametersType, service: ServiceType) ReturnType[source]
    +

    Executes this command strategy.

    +
    +
    Parameters:
    +
      +
    • params – The command parameters parsed from CLI.

    • +
    • service – The service instance.

    • +
    +
    +
    Returns:
    +

    The execution result.

    +
    +
    +
    + +
    +
    +get_definition() DefinitionType[source]
    +

    Returns the command definition metadata.

    +
    +
    Returns:
    +

    The command definition metadata.

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.html b/docs/build/html/gen_efi_app.infrastructure.html new file mode 100644 index 0000000..10cb45d --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.html @@ -0,0 +1,225 @@ + + + + + + + + gen_efi_app.infrastructure package — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure package

    +
    +

    Subpackages

    + +
    +
    +

    Submodules

    + +
    +
    +

    Module contents

    +
    +
    Module

    __init__.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Initializes the infrastructure package.

    +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.infrastructure.subprocessor.html b/docs/build/html/gen_efi_app.infrastructure.subprocessor.html new file mode 100644 index 0000000..bd3d24d --- /dev/null +++ b/docs/build/html/gen_efi_app.infrastructure.subprocessor.html @@ -0,0 +1,232 @@ + + + + + + + + gen_efi_app.infrastructure.subprocessor module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.infrastructure.subprocessor module

    +
    +
    Module

    subprocessor.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Defines sub-processor adapter implementing ISubProcessor.

    +
    +
    +
    +
    +class gen_efi_app.infrastructure.subprocessor.SubProcessor(generator: IGeneratorManager)[source]
    +

    Bases: object

    +

    Adapter that executes sub-processes.

    +

    It defines:

    +
    +
    +
    attributes:
    +
    +
    _scheme - Path to the scheme json file.
    +
    _templates - Path to the templates tgz file.
    +
    _generator - Generator manager used to generate code from templates.
    +
    _logger - Logger used to log messages.
    +
    +
    +
    methods:
    +
    +
    run - Executes a sub-process.
    +
    is_initialized - Checks if the subprocessor is initialized.
    +
    __str__ - Returns the SubProcessor as string representation.
    +
    +
    +
    +
    +
    +
    +_generator: IGeneratorManager
    +
    + +
    +
    +_logger: ILogger
    +
    + +
    +
    +_scheme: str = 'config/scheme.json'
    +
    + +
    +
    +_templates: str = 'config/templates.tgz'
    +
    + +
    +
    +is_initialized() bool[source]
    +

    Checks if the subprocessor is initialized.

    +
    +
    Returns:
    +

    True if the subprocessor is initialized, False otherwise.

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    +
    +run(*, params: Mapping[str, object]) Mapping[str, object][source]
    +

    Executes the generator.

    +
    +
    Parameters:
    +

    params – The command parameters for generator.

    +
    +
    Returns:
    +

    Return code, stdout and stderr messages.

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.pro.html b/docs/build/html/gen_efi_app.pro.html deleted file mode 100644 index 5ce0ca4..0000000 --- a/docs/build/html/gen_efi_app.pro.html +++ /dev/null @@ -1,279 +0,0 @@ - - - - - - - - gen_efi_app.pro package — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    -

    gen_efi_app.pro package

    -
    -

    Submodules

    - -
    -
    -

    Module contents

    -
    -
    Module

    __init__.py

    -
    -
    Copyright

    Copyright (C) 2020 - 2026 Vladimir Roncevic <elektron.ronca@gmail.com> -gen_efi_app is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation, either version 3 of the License, or -(at your option) any later version. -gen_efi_app is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with this program. If not, see <http://www.gnu.org/licenses/>.

    -
    -
    Info

    Defines class GenEfi with attribute(s) and method(s). -Generates an EFI project structure.

    -
    -
    -
    -
    -class gen_efi_app.pro.GenEfi(verbose: bool = False)[source]
    -

    Bases: FileCheck, ProConfig, ProName

    -

    Defined class GenPro with attribute(s) and method(s). -Generates an EFI project structure.

    -

    It defines:

    -
    -
    -
    attributes:
    -
    -
    _GEN_VERBOSE - Console text indicator for process-phase.
    -
    _PRO_STRUCTURE - Project setup (template, module).
    -
    _reader - Reader API.
    -
    _writer - Writer API.
    -
    -
    -
    methods:
    -
    -
    __init__ - Initials GenPro constructor.
    -
    get_reader - Gets template reader.
    -
    get_writer - Gets template writer.
    -
    gen_project - Generates EFI project structure.
    -
    -
    -
    -
    -
    -
    -_GEN_VERBOSE: str = 'GEN_EFI_APP::PRO::GEN_EFI'
    -
    - -
    -
    -_PRO_STRUCTURE: str = '/../conf/project.yaml'
    -
    - -
    -
    -gen_project(pro_name: str, verbose: bool = False) bool[source]
    -

    Generates EFI project structure.

    -
    -
    Parameters:
    -
      -
    • pro_name (<Optional[str]>) – Project name | None

    • -
    • verbose (<bool>) – Enable/Disable verbose option

    • -
    -
    -
    Returns:
    -

    True (success operation) | False

    -
    -
    Return type:
    -

    <bool>

    -
    -
    Exceptions:
    -

    ATSTypeError | ATSValueError

    -
    -
    -
    - -
    -
    -get_reader() ReadTemplate | None[source]
    -

    Gets template reader.

    -
    -
    Returns:
    -

    Template reader object | None

    -
    -
    Return type:
    -

    <Optional[ReadTemplate]>

    -
    -
    Exceptions:
    -

    None

    -
    -
    -
    - -
    -
    -get_writer() WriteTemplate | None[source]
    -

    Gets template writer.

    -
    -
    Returns:
    -

    Template writer object | none

    -
    -
    Return type:
    -

    <Optional[WriteTemplate]>

    -
    -
    Exceptions:
    -

    None

    -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    - -
    -
    - - - - \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.pro.read_template.html b/docs/build/html/gen_efi_app.pro.read_template.html deleted file mode 100644 index 6cd9bd4..0000000 --- a/docs/build/html/gen_efi_app.pro.read_template.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - gen_efi_app.pro.read_template module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    -

    gen_efi_app.pro.read_template module

    -
    -
    Module

    read_template.py

    -
    -
    Copyright

    Copyright (C) 2020 - 2026 Vladimir Roncevic <elektron.ronca@gmail.com> -gen_efi_app is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation, either version 3 of the License, or -(at your option) any later version. -gen_efi_app is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with this program. If not, see <http://www.gnu.org/licenses/>.

    -
    -
    Info

    Defines class ReadTemplate with attribute(s) and method(s). -Creates an API for reading a template files.

    -
    -
    -
    -
    -class gen_efi_app.pro.read_template.ReadTemplate(verbose: bool = False)[source]
    -

    Bases: FileCheck, TemplateDir

    -

    Defines class ReadTemplate with attribute(s) and method(s). -Creates an API for reading a templatee files.

    -

    It defines:

    -
    -
    -
    attributes:
    -
    -
    _GEN_VERBOSE - Console text indicator for process-phase.
    -
    _TEMPLATE_DIR - Prefix path to templates.
    -
    -
    -
    methods:
    -
    -
    __init__ - Initials ReadTemplate constructor.
    -
    read - Reads a templates.
    -
    -
    -
    -
    -
    -
    -_GEN_VERBOSE: str = 'GEN_AUTOCONF::PRO::READ_TEMPLATE'
    -
    - -
    -
    -_TEMPLATE_DIR: str = '/../conf/template/'
    -
    - -
    -
    -read(config: Dict[Any, Any], verbose: bool = False) List[Dict[str, str]][source]
    -

    Reads a templates.

    -
    -
    Parameters:
    -
      -
    • config (<Dict[Any, Any]>) – Project configuration

    • -
    • verbose (<bool>) – Enable/Disable verbose option

    • -
    -
    -
    Returns:
    -

    List with templates

    -
    -
    Return type:
    -

    <List[Dict[str, str]]>

    -
    -
    Exceptions:
    -

    ATSTypeError | ATSValueError

    -
    -
    -
    - -
    - -
    - - -
    -
    -
    -
    - -
    -
    - - - - \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.pro.write_template.html b/docs/build/html/gen_efi_app.pro.write_template.html deleted file mode 100644 index ff9711c..0000000 --- a/docs/build/html/gen_efi_app.pro.write_template.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - gen_efi_app.pro.write_template module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation - - - - - - - - - - - - - -
    -
    -
    -
    - -
    -

    gen_efi_app.pro.write_template module

    -
    -
    Module

    write_template.py

    -
    -
    Copyright

    Copyright (C) 2020 - 2026 Vladimir Roncevic <elektron.ronca@gmail.com> -gen_efi_app is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation, either version 3 of the License, or -(at your option) any later version. -gen_efi_app is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with this program. If not, see <http://www.gnu.org/licenses/>.

    -
    -
    Info

    Defines class WriteTemplate with attribute(s) and method(s). -Creates an API for writing source and build modules.

    -
    -
    -
    -
    -class gen_efi_app.pro.write_template.WriteTemplate(verbose: bool = False)[source]
    -

    Bases: FileCheck

    -

    Defines class WriteTemplate with attribute(s) and method(s). -Creates an API for writing source and build modules.

    -

    It defines:

    -
    -
    -
    attributes:
    -
    -
    _GEN_VERBOSE - Console text indicator for process-phase.
    -
    -
    -
    methods:
    -
    -
    __init__ - Initials WriteTemplate constructor.
    -
    write - Writes a templates with parameters.
    -
    -
    -
    -
    -
    -
    -_GEN_VERBOSE: str = 'GEN_EFI_APP::PRO::WRITE_TEMPLATE'
    -
    - -
    -
    -write(templates: List[Dict[str, str]], pro_name: str | None, verbose: bool = False) bool[source]
    -

    Writes a templates with parameters.

    -
    -
    Parameters:
    -
      -
    • templates (<List[Dict[str, str]]>) – List of templates

    • -
    • pro_name (<Optional[str]>) – Project name | None

    • -
    • verbose (<bool>) – Enable/Disable verbose option

    • -
    -
    -
    Returns:
    -

    True (templates written) | False

    -
    -
    Return type:
    -

    <bool>

    -
    -
    Exceptions:
    -

    ATSTypeError | ATSValueError

    -
    -
    -
    - -
    - -
    - - -
    -
    -
    -
    - -
    -
    - - - - \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.setup.bundle.html b/docs/build/html/gen_efi_app.setup.bundle.html new file mode 100644 index 0000000..8d39368 --- /dev/null +++ b/docs/build/html/gen_efi_app.setup.bundle.html @@ -0,0 +1,212 @@ + + + + + + + + gen_efi_app.setup.bundle module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.setup.bundle module

    +
    +
    Module

    bundle.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Defines the gen_efi_app bundle.

    +
    +
    +
    +
    +class gen_efi_app.setup.bundle.GenEfiAppBundle(*, base: BaseBundle, service: IService, subprocessor: ISubProcessor, cli: ICLI)[source]
    +

    Bases: object

    +

    GenEfiApp bundle holding the components of the gen_efi_app.

    +

    It defines:

    +
    +
    +
    attributes:
    +
    +
    base - The base bundle with the base components.
    +
    service - The service orchestrating the gen_efi_app execution.
    +
    subprocessor - The adapter executing the gen_efi_app sub-processes.
    +
    cli - The command-line interface adapter.
    +
    +
    +
    methods:
    +
    +
    to_dict - Converts the gen_efi_app bundle to a dictionary.
    +
    +
    +
    +
    +
    +
    +base: BaseBundle
    +
    + +
    +
    +cli: ICLI
    +
    + +
    +
    +service: IService
    +
    + +
    +
    +subprocessor: ISubProcessor
    +
    + +
    +
    +to_dict() dict[str, object][source]
    +

    Converts the gen_efi_app bundle to a dictionary.

    +
    +
    Returns:
    +

    Dictionary representation of the gen_efi_app bundle.

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.setup.dep_validator.html b/docs/build/html/gen_efi_app.setup.dep_validator.html new file mode 100644 index 0000000..953f69b --- /dev/null +++ b/docs/build/html/gen_efi_app.setup.dep_validator.html @@ -0,0 +1,202 @@ + + + + + + + + gen_efi_app.setup.dep_validator module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.setup.dep_validator module

    +
    +
    Module

    dep_validator.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Validator for the gen_efi_app bundle dependencies.

    +
    +
    +
    +
    +class gen_efi_app.setup.dep_validator.GenEfiAppBundleDependenciesValidator[source]
    +

    Bases: object

    +

    Validator for the gen_efi_app bundle dependencies.

    +

    It defines:

    +
    +
    +
    methods:
    +
    +
    validate - Validates the gen_efi_app bundle dependencies.
    +
    is_valid - Checks if the gen_efi_app bundle dependencies is valid.
    +
    +
    +
    +
    +
    +
    +classmethod is_valid(dependencies: GenEfiAppBundleDependencies) bool[source]
    +

    Checks if the gen_efi_app bundle dependencies is valid.

    +
    +
    Parameters:
    +

    dependencies – The gen_efi_app bundle dependencies to be checked.

    +
    +
    Returns:
    +

    True if valid, False otherwise.

    +
    +
    +
    + +
    +
    +classmethod validate(dependencies: GenEfiAppBundleDependencies) None[source]
    +

    Validates the gen_efi_app bundle dependencies.

    +
    +
    Parameters:
    +

    dependencies – The gen_efi_app bundle dependencies to be validated.

    +
    +
    Exceptions:
    +
    +
    ATSValueError: The gen_efi_app bundle dependencies must be provided and have proper values.
    +
    ATSTypeError: The gen_efi_app bundle dependencies must be an instance of Mapping and its
    +
    +
    attributes must be instances of their respective types.
    +
    +
    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.setup.dependencies.html b/docs/build/html/gen_efi_app.setup.dependencies.html new file mode 100644 index 0000000..55432e8 --- /dev/null +++ b/docs/build/html/gen_efi_app.setup.dependencies.html @@ -0,0 +1,192 @@ + + + + + + + + gen_efi_app.setup.dependencies module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.setup.dependencies module

    +
    +
    Module

    dependencies.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    GenEfiApp bundle dependencies for the gen_efi_app bundle.

    +
    +
    +
    +
    +class gen_efi_app.setup.dependencies.GenEfiAppBundleDependencies[source]
    +

    Bases: TypedDict

    +

    GenEfiApp bundle dependencies for the gen_efi_app bundle.

    +

    It defines:

    +
    +
    +
    attributes:
    +
    +
    base - The base bundle with the base components for the gen_efi_app bundle.
    +
    service - The service orchestrating the gen_efi_app execution for the bundle.
    +
    subprocessor - The adapter executing the gen_efi_app sub-processes for the bundle.
    +
    cli - The command-line interface adapter for the gen_efi_app bundle.
    +
    +
    +
    +
    +
    +
    +base: BaseBundle
    +
    + +
    +
    +cli: ICLI
    +
    + +
    +
    +service: IService
    +
    + +
    +
    +subprocessor: ISubProcessor
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.setup.factory.html b/docs/build/html/gen_efi_app.setup.factory.html new file mode 100644 index 0000000..d4e3101 --- /dev/null +++ b/docs/build/html/gen_efi_app.setup.factory.html @@ -0,0 +1,226 @@ + + + + + + + + gen_efi_app.setup.factory module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.setup.factory module

    +
    +
    Module

    factory.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Factory for creating the gen_efi_app bundle.

    +
    +
    +
    +
    +class gen_efi_app.setup.factory.GenEfiAppBundleFactory[source]
    +

    Bases: object

    +

    Factory for creating the gen_efi_app bundle.

    +

    It defines:

    +
    +
    +
    attributes:
    +
    +
    _info_file - Path to the gen_efi_app info file.
    +
    +
    +
    methods:
    +
    +
    create_bundle - Creates the gen_efi_app bundle with optional pre-configured options.
    +
    get_version - Returns the factory version.
    +
    +
    +
    +
    +
    +
    +_info_file: str = 'gen_efi_app/infrastructure/config/gen_efi_app.cfg'
    +
    + +
    +
    +classmethod create_bundle(options: GenEfiAppBundleOptions | None = None) GenEfiAppBundle[source]
    +

    Creates the gen_efi_app bundle with optional pre-configured options.

    +
    +
    Parameters:
    +

    options – The pre-configured options for the gen_efi_app bundle.

    +
    +
    Returns:
    +

    The gen_efi_app bundle.

    +
    +
    Exceptions:
    +
    +
    ATSValueError: The gen_efi_app bundle options must be provided and have proper values.
    +
    ATSTypeError: The gen_efi_app bundle options must be an instance of Mapping and its
    +
    +
    attributes must be instances of their respective types.
    +
    +
    ATSValueError: The gen_efi_app bundle dependencies must be provided and have proper values.
    +
    ATSTypeError: The gen_efi_app bundle dependencies must be an instance of Mapping and its
    +
    +
    attributes must be instances of their respective types.
    +
    +
    ATSValueError: The gen_efi_app bundle must be provided and have proper values.
    +
    ATSTypeError: The gen_efi_app bundle must be an instance of GenEfiAppBundle and
    +
    +
    its attributes must be instances of their respective types.
    +
    +
    +
    +
    +
    + +
    +
    +classmethod get_version() str[source]
    +

    Returns the factory version.

    +
    +
    Returns:
    +

    The factory version.

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.setup.html b/docs/build/html/gen_efi_app.setup.html new file mode 100644 index 0000000..0d1f286 --- /dev/null +++ b/docs/build/html/gen_efi_app.setup.html @@ -0,0 +1,237 @@ + + + + + + + + gen_efi_app.setup package — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.setup package

    +
    +

    Submodules

    +
    + +
    +
    +
    +

    Module contents

    +
    +
    Module

    __init__.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Initializes the setup package.

    +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.setup.keys.html b/docs/build/html/gen_efi_app.setup.keys.html new file mode 100644 index 0000000..0078f38 --- /dev/null +++ b/docs/build/html/gen_efi_app.setup.keys.html @@ -0,0 +1,235 @@ + + + + + + + + gen_efi_app.setup.keys module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.setup.keys module

    +
    +
    Module

    keys.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Runtime components and interface constraints for the gen_efi_app bundle.

    +
    +
    +
    +
    +class gen_efi_app.setup.keys.GenEfiAppBundleKeys[source]
    +

    Bases: object

    +

    Runtime components and interface constraints for the gen_efi_app bundle.

    +

    It defines:

    +
    +
    +
    attributes:
    +
    +
    DEPENDENCY_BASE - The base bundle constant for the gen_efi_app bundle.
    +
    DEPENDENCY_SERVICE - The service interface constant for the gen_efi_app bundle.
    +
    DEPENDENCY_SUBPROCESSOR - The subprocessor interface constant for the gen_efi_app bundle.
    +
    DEPENDENCY_CLI - The cli interface constant for the gen_efi_app bundle.
    +
    OPTION_INFO_FILE - The info file option constant for the gen_efi_app bundle.
    +
    +
    +
    methods:
    +
    +
    get_dependency_to_type - Returns the mapping of the bundle dependencies to their types.
    +
    get_option_to_type - Returns the mapping of the bundle options to their types.
    +
    +
    +
    +
    +
    +
    +DEPENDENCY_BASE: ClassVar[str] = 'base'
    +
    + +
    +
    +DEPENDENCY_CLI: ClassVar[str] = 'cli'
    +
    + +
    +
    +DEPENDENCY_SERVICE: ClassVar[str] = 'service'
    +
    + +
    +
    +DEPENDENCY_SUBPROCESSOR: ClassVar[str] = 'subprocessor'
    +
    + +
    +
    +OPTION_INFO_FILE: ClassVar[str] = 'info_file'
    +
    + +
    +
    +classmethod get_dependency_to_type() mappingproxy[str, type][source]
    +

    Returns the mapping of the gen_efi_app bundle dependencies to their types.

    +
    +
    Returns:
    +

    The mapping of the gen_efi_app bundle dependencies to their types.

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    +
    +classmethod get_option_to_type() mappingproxy[str, type][source]
    +

    Returns the mapping of the gen_efi_app bundle options to their types.

    +
    +
    Returns:
    +

    The mapping of the gen_efi_app bundle options to their types.

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.setup.opt_validator.html b/docs/build/html/gen_efi_app.setup.opt_validator.html new file mode 100644 index 0000000..b731485 --- /dev/null +++ b/docs/build/html/gen_efi_app.setup.opt_validator.html @@ -0,0 +1,202 @@ + + + + + + + + gen_efi_app.setup.opt_validator module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.setup.opt_validator module

    +
    +
    Module

    opt_validator.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Validator for the gen_efi_app bundle options.

    +
    +
    +
    +
    +class gen_efi_app.setup.opt_validator.GenEfiAppBundleOptionsValidator[source]
    +

    Bases: object

    +

    Validator for the gen_efi_app bundle options.

    +

    It defines:

    +
    +
    +
    methods:
    +
    +
    validate - Validates the gen_efi_app bundle options.
    +
    is_valid - Checks if the gen_efi_app bundle options is valid.
    +
    +
    +
    +
    +
    +
    +classmethod is_valid(options: GenEfiAppBundleOptions) bool[source]
    +

    Checks if the gen_efi_app bundle options is valid.

    +
    +
    Parameters:
    +

    options – The gen_efi_app bundle options to be checked.

    +
    +
    Returns:
    +

    True if valid, False otherwise.

    +
    +
    +
    + +
    +
    +classmethod validate(options: GenEfiAppBundleOptions) None[source]
    +

    Validates the gen_efi_app bundle options.

    +
    +
    Parameters:
    +

    options – The gen_efi_app bundle options to be validated.

    +
    +
    Exceptions:
    +
    +
    ATSValueError: The gen_efi_app bundle options must be provided and have proper values.
    +
    ATSTypeError: The gen_efi_app bundle options must be an instance of Mapping and its
    +
    +
    attributes must be instances of their respective types.
    +
    +
    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.setup.options.html b/docs/build/html/gen_efi_app.setup.options.html new file mode 100644 index 0000000..e73e593 --- /dev/null +++ b/docs/build/html/gen_efi_app.setup.options.html @@ -0,0 +1,171 @@ + + + + + + + + gen_efi_app.setup.options module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.setup.options module

    +
    +
    Module

    options.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    GenEfiApp bundle options for the gen_efi_app bundle.

    +
    +
    +
    +
    +class gen_efi_app.setup.options.GenEfiAppBundleOptions[source]
    +

    Bases: TypedDict

    +

    GenEfiApp bundle options for the gen_efi_app bundle.

    +

    It defines:

    +
    +
    +
    attributes:
    +
    +
    info_file - The info file path for the gen_efi_app bundle.
    +
    +
    +
    +
    +
    +
    +info_file: str
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.setup.registry.html b/docs/build/html/gen_efi_app.setup.registry.html new file mode 100644 index 0000000..92858f1 --- /dev/null +++ b/docs/build/html/gen_efi_app.setup.registry.html @@ -0,0 +1,210 @@ + + + + + + + + gen_efi_app.setup.registry module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.setup.registry module

    +
    +
    Module

    registry.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    Encapsulates core gen_efi_app components for simplification of bundle.

    +
    +
    +
    +
    +class gen_efi_app.setup.registry.GenEfiAppBundleRegistry[source]
    +

    Bases: object

    +

    Encapsulates core gen_efi_app components for simplification of bundle.

    +

    It defines:

    +
    +
    +
    methods:
    +
    +
    create_bundle - Creates the gen_efi_app bundle.
    +
    get_version - Returns the registry version.
    +
    +
    +
    +
    +
    +
    +classmethod create_bundle(dependencies: GenEfiAppBundleDependencies) GenEfiAppBundle[source]
    +

    Creates the gen_efi_app bundle.

    +
    +
    Parameters:
    +

    dependencies – The gen_efi_app bundle dependencies.

    +
    +
    Returns:
    +

    The gen_efi_app bundle.

    +
    +
    Exceptions:
    +
    +
    ATSValueError: The gen_efi_app bundle dependencies must be provided and have proper values.
    +
    ATSTypeError: The gen_efi_app bundle dependencies must be an instance of Mapping and its
    +
    +
    attributes must be instances of their respective types.
    +
    +
    ATSValueError: The gen_efi_app bundle must be provided and have proper values.
    +
    ATSTypeError: The gen_efi_app bundle must be an instance of GenEfiAppBundle and
    +
    +
    its attributes must be instances of their respective types.
    +
    +
    +
    +
    +
    + +
    +
    +classmethod get_version() str[source]
    +

    Returns the registry version.

    +
    +
    Returns:
    +

    The registry version.

    +
    +
    Exceptions:
    +

    None.

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/gen_efi_app.setup.validator.html b/docs/build/html/gen_efi_app.setup.validator.html new file mode 100644 index 0000000..0c0728f --- /dev/null +++ b/docs/build/html/gen_efi_app.setup.validator.html @@ -0,0 +1,202 @@ + + + + + + + + gen_efi_app.setup.validator module — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +

    gen_efi_app.setup.validator module

    +
    +
    Module

    validator.py

    +
    +
    Copyright

    Copyright (C) 2026 Vladimir Roncevic <elektron.ronca@gmail.com> +gen_efi_app is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +gen_efi_app is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>.

    +
    +
    Info

    A validator for the gen_efi_app bundle.

    +
    +
    +
    +
    +class gen_efi_app.setup.validator.GenEfiAppBundleValidator[source]
    +

    Bases: object

    +

    A validator for the gen_efi_app bundle.

    +

    It defines:

    +
    +
    +
    methods:
    +
    +
    validate - Validates the gen_efi_app bundle.
    +
    is_valid - Checks if the gen_efi_app bundle is valid.
    +
    +
    +
    +
    +
    +
    +classmethod is_valid(bundle: GenEfiAppBundle) bool[source]
    +

    Checks if the gen_efi_app bundle is valid.

    +
    +
    Parameters:
    +

    bundle – The gen_efi_app bundle to be checked.

    +
    +
    Returns:
    +

    True if valid, False otherwise.

    +
    +
    +
    + +
    +
    +classmethod validate(bundle: GenEfiAppBundle) None[source]
    +

    Validates the gen_efi_app bundle.

    +
    +
    Parameters:
    +

    bundle – The gen_efi_app bundle to be validated.

    +
    +
    Exceptions:
    +
    +
    ATSValueError: The gen_efi_app bundle must be provided and have proper values.
    +
    ATSTypeError: The gen_efi_app bundle must be an instance of GenEfiAppBundle and
    +
    +
    its attributes must be instances of their respective types.
    +
    +
    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html index 1d555a5..fea23c5 100644 --- a/docs/build/html/genindex.html +++ b/docs/build/html/genindex.html @@ -39,39 +39,203 @@

    Index

    _ + | B + | C + | D + | E | G + | H + | I | M + | N + | O | P | R - | W + | S + | T + | V

    _

    +
    + +

    B

    + + +
    + +

    C

    + + + +
    + +

    D

    + + + +
    + +

    E

    + + +
    @@ -87,37 +251,387 @@

    G

  • - gen_efi_app.pro + gen_efi_app.core
  • - gen_efi_app.pro.read_template + gen_efi_app.core.model
  • +
  • + gen_efi_app.core.model.project_setup + +
  • +
  • + gen_efi_app.core.service + +
  • +
  • + gen_efi_app.core.service.engine + +
  • +
  • + gen_efi_app.core.service.iservice + +
  • +
  • + gen_efi_app.core.service.isubprocessor + +
  • +
  • + gen_efi_app.engine + +
  • +
  • + gen_efi_app.infrastructure + +
  • +
  • + gen_efi_app.infrastructure.cli + +
  • +
  • + gen_efi_app.infrastructure.cli.engine + +
  • +
  • + gen_efi_app.infrastructure.cli.icli + +
  • +
  • + gen_efi_app.infrastructure.cli.setup + +
  • +
  • + gen_efi_app.infrastructure.cli.setup.bundle + +
  • +
  • + gen_efi_app.infrastructure.cli.setup.dep_validator + +
  • +
  • + gen_efi_app.infrastructure.cli.setup.dependencies + +
  • +
  • + gen_efi_app.infrastructure.cli.setup.factory + +
  • +
  • + gen_efi_app.infrastructure.cli.setup.keys + +
  • +
  • + gen_efi_app.infrastructure.cli.setup.opt_validator + +
  • +
  • + gen_efi_app.infrastructure.cli.setup.options + +
  • +
  • + gen_efi_app.infrastructure.cli.setup.registry + +
  • +
  • + gen_efi_app.infrastructure.cli.setup.validator + +
  • +
  • + gen_efi_app.infrastructure.command + +
  • +
  • + gen_efi_app.infrastructure.command.command + +
  • +
  • + gen_efi_app.infrastructure.command.gen_efi_command_definition + +
  • + + +

    H

    + + +
    + +

    I

    + + +
    @@ -126,25 +640,146 @@

    M

    +

    N

    + + +
    + +

    O

    + + + +
    +

    P

    +
    @@ -152,24 +787,78 @@

    P

    R

    +
    + +

    S

    + +
    -

    W

    +

    T

    +
    + +

    V

    +
    diff --git a/docs/build/html/index.html b/docs/build/html/index.html index c82a747..dc18a26 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -5,7 +5,7 @@ - Create EFI application — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation + Generate EFI application configuration/build setup — gen_efi_app https://github.com/electux/gen_efi_app/releases documentation @@ -30,7 +30,7 @@

    Navigation

    next | - +
    @@ -39,28 +39,35 @@

    Navigation

    -
    -

    Create EFI application

    -

    gen_efi_app is tool for creating EFI project skeleton.

    +
    +

    Generate EFI application configuration/build setup

    +

    gen_efi_app is toolset for generation of EFI application configuration/build setup.

    Developed in python code.

    -

    The README is used to introduce the modules and provide instructions on -how to install the modules, any machine dependencies it may have and any -other information that should be provided before the modules are installed.

    -

    gen_efi_app python checker gen_efi_app python package github issues documentation status github contributors

    +

    The README is used to introduce the tool and provide instructions on +how to install the tool, any machine dependencies it may have and any +other information that should be provided before the tool is installed.

    +

    gen_efi_app python checker gen_efi_app python package gen_efi_app interface checker gen_efi_app isp checker gen_efi_app srp checker github issues documentation status github contributors

    -

    Installation

    +

    🚀 Installation

    gen_efi_app python3 build

    Navigate to release page download and extract release archive.

    To install gen_efi_app type the following

    tar xvzf gen_efi_app-x.y.z.tar.gz
    -cd gen_efi_app-x.y.z
    -#python3
    +cd gen_efi_app-x.y.z/
    +# python3
    +wget https://bootstrap.pypa.io/get-pip.py
    +python3 get-pip.py
    +python3 -m pip install --upgrade setuptools
    +python3 -m pip install --upgrade pip
    +python3 -m pip install --upgrade build
     pip3 install -r requirements.txt
    -python3 setup.py install_lib
    -python3 setup.py install_egg_info
    -python3 setup.py install_data
    +python3 -m build --no-isolation --wheel
    +pip3 install ./dist/gen_efi_app-*-py3-none-any.whl
    +rm -f get-pip.py
    +chmod 755 /usr/local/lib/python3.10/dist-packages/usr/local/bin/gen_efi_app_run.py
    +ln -s /usr/local/lib/python3.10/dist-packages/usr/local/bin/gen_efi_app_run.py /usr/local/bin/gen_efi_app_run.py
     

    You can use Docker to create image/container, or You can use pip to install

    -
    #python3
    +
    # pyton3
     pip3 install gen_efi_app
     
    -

    Dependencies

    +

    📦 Dependencies

    gen_efi_app requires next modules and libraries

    -

    Tool structure

    -

    gen_efi_app is based on OOP

    -

    Code structure

    +

    📁 Tool structure

    +

    gen_efi_app is based on OOP.

    +

    Tool structure

    gen_efi_app/
    -     ├── conf/
    -        ├── gen_efi_app.cfg
    -        ├── gen_efi_app.logo
    -        ├── gen_efi_app_util.cfg
    -        ├── project.yaml
    -        └── template/
    -            ├── cflags.template
    -            ├── ldflags.template
    -            ├── main.template
    -            ├── makefile.template
    -            ├── objects.template
    -            └── ocflags.template
    -     ├── __init__.py
    -     ├── log/
    -        └── gen_efi_app.log
    -     ├── pro/
    +     ├── core/
             ├── __init__.py
    -        ├── read_template.py
    -        └── write_template.py
    +        ├── model/
    +           ├── __init__.py
    +           └── project_setup.py
    +        └── service/
    +            ├── engine.py
    +            ├── __init__.py
    +            ├── iservice.py
    +            └── isubprocessor.py
    +     ├── engine.py
    +     ├── infrastructure/
    +        ├── cli/
    +           ├── engine.py
    +           ├── icli.py
    +           ├── __init__.py
    +           └── setup/
    +               ├── bundle.py
    +               ├── dep_validator.py
    +               ├── dependencies.py
    +               ├── factory.py
    +               ├── __init__.py
    +               ├── keys.py
    +               ├── opt_validator.py
    +               ├── options.py
    +               ├── registry.py
    +               └── validator.py
    +        ├── command/
    +           ├── command.py
    +           ├── gen_efi_command_definition.py
    +           ├── gen_efi_command_executor.py
    +           ├── icommand_definition.py
    +           ├── icommand_executor.py
    +           └── __init__.py
    +        ├── config/
    +           ├── gen_efi_app.cfg
    +           ├── gen_efi_app.logo
    +           ├── scheme.json
    +           └── templates.tgz
    +        ├── __init__.py
    +        └── subprocessor.py
    +     ├── __init__.py
          ├── py.typed
    -     └── run/
    -         └── gen_efi_app_run.py
    +     └── setup/
    +         ├── bundle.py
    +         ├── dep_validator.py
    +         ├── dependencies.py
    +         ├── factory.py
    +         ├── __init__.py
    +         ├── keys.py
    +         ├── opt_validator.py
    +         ├── options.py
    +         ├── registry.py
    +         └── validator.py
     
    -6 directories, 17 files
    + 10 directories, 45 files
     
    +
    +

    ✨ Features

    +
      +
    • Automatically scaffolds EFI application projects with proper configuration and build setups.

    • +
    • Provides a modular and extensible architecture based on OOP and SOLID principles.

    • +
    • Includes command line interface (CLI) support via a command/executor structure.

    • +
    • Robust validation of project bundles, dependencies, and options.

    • +
    • Comes with configurable templates and JSON schema definitions.

    • +
    • High code quality with full type checking.

    • +
    +
    +
    +

    📊 Code coverage

    + + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Code coverage

    Name

    Stmts

    Miss

    Cover

    gen_efi_app/__init__.py

    9

    0

    100%

    gen_efi_app/core/__init__.py

    9

    0

    100%

    gen_efi_app/core/model/__init__.py

    9

    0

    100%

    gen_efi_app/core/model/project_setup.py

    14

    0

    100%

    gen_efi_app/core/service/__init__.py

    9

    0

    100%

    gen_efi_app/core/service/engine.py

    27

    0

    100%

    gen_efi_app/core/service/iservice.py

    14

    0

    100%

    gen_efi_app/core/service/isubprocessor.py

    14

    0

    100%

    gen_efi_app/engine.py

    57

    0

    100%

    gen_efi_app/infrastructure/__init__.py

    9

    0

    100%

    gen_efi_app/infrastructure/cli/__init__.py

    9

    0

    100%

    gen_efi_app/infrastructure/cli/engine.py

    39

    0

    100%

    gen_efi_app/infrastructure/cli/icli.py

    15

    0

    100%

    gen_efi_app/infrastructure/cli/setup/__init__.py

    9

    0

    100%

    gen_efi_app/infrastructure/cli/setup/bundle.py

    22

    0

    100%

    gen_efi_app/infrastructure/cli/setup/dep_validator.py

    36

    0

    100%

    gen_efi_app/infrastructure/cli/setup/dependencies.py

    18

    0

    100%

    gen_efi_app/infrastructure/cli/setup/factory.py

    35

    0

    100%

    gen_efi_app/infrastructure/cli/setup/keys.py

    26

    0

    100%

    gen_efi_app/infrastructure/cli/setup/opt_validator.py

    36

    0

    100%

    gen_efi_app/infrastructure/cli/setup/options.py

    15

    0

    100%

    gen_efi_app/infrastructure/cli/setup/registry.py

    24

    0

    100%

    gen_efi_app/infrastructure/cli/setup/validator.py

    43

    0

    100%

    gen_efi_app/infrastructure/command/__init__.py

    9

    0

    100%

    gen_efi_app/infrastructure/command/command.py

    16

    0

    100%

    gen_efi_app/infrastructure/command/gen_efi_command_definition.py

    24

    0

    100%

    gen_efi_app/infrastructure/command/gen_efi_command_executor.py

    23

    0

    100%

    gen_efi_app/infrastructure/command/icommand_definition.py

    14

    0

    100%

    gen_efi_app/infrastructure/command/icommand_executor.py

    14

    0

    100%

    gen_efi_app/infrastructure/subprocessor.py

    55

    0

    100%

    gen_efi_app/setup/__init__.py

    9

    0

    100%

    gen_efi_app/setup/bundle.py

    23

    0

    100%

    gen_efi_app/setup/dep_validator.py

    36

    0

    100%

    gen_efi_app/setup/dependencies.py

    19

    0

    100%

    gen_efi_app/setup/factory.py

    48

    0

    100%

    gen_efi_app/setup/keys.py

    27

    0

    100%

    gen_efi_app/setup/opt_validator.py

    34

    0

    100%

    gen_efi_app/setup/options.py

    12

    0

    100%

    gen_efi_app/setup/registry.py

    32

    0

    100%

    gen_efi_app/setup/validator.py

    48

    0

    100%

    Total

    941

    0

    100%

    +
    +
    +

    🛠 Usage

    +

    Install package

    +
    pip3 install gen_efi_app
    +
    +
    +

    Prepare main entry point by downloading main.py or create your own.

    +
    wget -O main.py https://raw.githubusercontent.com/electux/gen_efi_app/main/main.py
    +
    +
    +

    Running tool for creating new EFI application project

    +
    python3 main.py create --name mytool --output ./demo/
    +
    +
    +
    +
    +

    📚 Docs

    +

    More documentation and info at

    + +
    +
    +

    👥 Contributing

    +

    Contributing to gen_efi_app

    +
    -
    -

    Indices and tables

    -
    @@ -157,12 +456,16 @@

    Indices and tablesTable of Contents

    @@ -205,7 +508,7 @@

    Navigation

    next | - +