nf-core 3.3.1__tar.gz → 3.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nf_core-3.3.1/nf_core.egg-info → nf_core-3.3.2}/PKG-INFO +4 -4
- {nf_core-3.3.1 → nf_core-3.3.2}/README.md +1 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/commands_test_datasets.py +2 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/components_command.py +7 -7
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/components_differ.py +4 -4
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/components_test.py +2 -2
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/components_utils.py +9 -9
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/create.py +191 -5
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/info.py +20 -11
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/install.py +3 -3
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/lint/__init__.py +6 -6
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/list.py +5 -5
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/nfcore_component.py +19 -12
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/module-template/main.nf +4 -0
- nf_core-3.3.2/nf_core/module-template/meta.yml +60 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/bump_versions.py +7 -7
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/lint/__init__.py +96 -80
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/lint/main_nf.py +4 -5
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/lint/meta_yml.py +38 -46
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/modules_json.py +18 -18
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/modules_utils.py +4 -4
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/actions/nf-test/action.yml +0 -4
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/workflows/linting.yml +1 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/workflows/linting_comment.yml +1 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/workflows/nf-test.yml +24 -23
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/workflows/release-announcements.yml +1 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.pre-commit-config.yaml +1 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/README.md +2 -2
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/assets/schema_input.json +2 -2
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/conf/base.config +1 -0
- nf_core-3.3.2/nf_core/pipeline-template/modules/nf-core/fastqc/environment.yml +7 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/modules/nf-core/fastqc/main.nf +1 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/modules/nf-core/fastqc/meta.yml +14 -9
- nf_core-3.3.2/nf_core/pipeline-template/modules/nf-core/multiqc/environment.yml +7 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/modules/nf-core/multiqc/main.nf +2 -2
- nf_core-3.3.2/nf_core/pipeline-template/modules/nf-core/multiqc/meta.yml +92 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/modules/nf-core/multiqc/tests/main.nf.test.snap +9 -9
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/modules.json +2 -2
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/nextflow.config +2 -3
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/nf-test.config +1 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config +1 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/tests/.nftignore +1 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/tests/default.nf.test +1 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/tests/nextflow.config +4 -2
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/bump_version.py +5 -5
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create/__init__.py +1 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create/create.py +40 -24
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create/create.tcss +4 -4
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create/custompipeline.py +22 -7
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create/nfcorepipeline.py +21 -5
- nf_core-3.3.2/nf_core/pipelines/create/template_features.yml +583 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create/utils.py +11 -9
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create_logo.py +8 -2
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/download.py +17 -15
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/__init__.py +3 -3
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/actions_awsfulltest.py +1 -2
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/actions_schema_validation.py +6 -6
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/configs.py +8 -9
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/files_exist.py +2 -2
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/files_unchanged.py +9 -8
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/modules_json.py +2 -2
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/multiqc_config.py +4 -5
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/nextflow_config.py +2 -2
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/nf_test_content.py +47 -41
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/nfcore_yml.py +5 -6
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/plugin_includes.py +5 -6
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/readme.py +1 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/rocrate_readme_sync.py +1 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/version_consistency.py +13 -3
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint_utils.py +8 -8
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/params_file.py +2 -2
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/rocrate.py +2 -2
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/sync.py +5 -4
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/lint/main_nf.py +6 -7
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/synced_repo.py +5 -4
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/test_datasets/list.py +1 -2
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/test_datasets/search.py +8 -23
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/test_datasets/test_datasets_utils.py +51 -10
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/utils.py +50 -40
- {nf_core-3.3.1 → nf_core-3.3.2/nf_core.egg-info}/PKG-INFO +4 -4
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core.egg-info/SOURCES.txt +2 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core.egg-info/requires.txt +1 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/pyproject.toml +3 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/requirements.txt +1 -1
- {nf_core-3.3.1 → nf_core-3.3.2}/setup.py +2 -2
- nf_core-3.3.2/tests/conftest.py +53 -0
- nf_core-3.3.2/tests/modules/test_create.py +649 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/modules/test_lint.py +2 -2
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_rocrate_readme_sync.py +1 -1
- nf_core-3.3.2/tests/pipelines/lint/test_version_consistency.py +82 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/test_create.py +7 -4
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/test_create_app.py +5 -6
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/test_download.py +18 -11
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/test_sync.py +9 -8
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/test_cli.py +1 -1
- nf_core-3.3.2/tests/test_datasets/test_test_datasets_search.py +92 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/utils.py +2 -2
- nf_core-3.3.1/nf_core/module-template/meta.yml +0 -131
- nf_core-3.3.1/nf_core/pipeline-template/modules/nf-core/fastqc/environment.yml +0 -5
- nf_core-3.3.1/nf_core/pipeline-template/modules/nf-core/multiqc/environment.yml +0 -5
- nf_core-3.3.1/nf_core/pipeline-template/modules/nf-core/multiqc/meta.yml +0 -78
- nf_core-3.3.1/nf_core/pipelines/create/template_features.yml +0 -499
- nf_core-3.3.1/tests/modules/test_create.py +0 -164
- nf_core-3.3.1/tests/pipelines/lint/test_version_consistency.py +0 -19
- {nf_core-3.3.1 → nf_core-3.3.2}/LICENSE +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/MANIFEST.in +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/.pre-commit-prettier-config.yaml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/__init__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/__main__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/assets/logo/MavenPro-Bold.ttf +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/assets/logo/nf-core-repo-logo-base-darkbg.png +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/assets/logo/nf-core-repo-logo-base-lightbg.png +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/assets/logo/placeholder_logo.svg +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/commands_modules.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/commands_pipelines.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/commands_subworkflows.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/__init__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/constants.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/patch.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/remove.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/components/update.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/module-template/environment.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/module-template/tests/main.nf.test.j2 +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/__init__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/create.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/info.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/install.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/lint/environment_yml.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/lint/module_changes.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/lint/module_deprecations.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/lint/module_patch.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/lint/module_tests.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/lint/module_todos.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/lint/module_version.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/list.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/modules_repo.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/patch.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/remove.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/modules/update.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.devcontainer/devcontainer.json +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.gitattributes +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/.dockstore.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/CONTRIBUTING.md +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/actions/get-shards/action.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/workflows/awsfulltest.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/workflows/awstest.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/workflows/branch.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/workflows/clean-up.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/workflows/download_pipeline.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/workflows/fix_linting.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.github/workflows/template-version-comment.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.gitignore +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.gitpod.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.nf-core.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.prettierignore +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.prettierrc.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/.vscode/settings.json +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/CHANGELOG.md +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/CITATIONS.md +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/CODE_OF_CONDUCT.md +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/LICENSE +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/assets/adaptivecard.json +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/assets/email_template.html +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/assets/email_template.txt +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/assets/methods_description_template.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/assets/multiqc_config.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/assets/samplesheet.csv +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/assets/sendmail_template.txt +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/assets/slackreport.json +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/conf/igenomes.config +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/conf/igenomes_ignored.config +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/conf/modules.config +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/conf/test.config +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/conf/test_full.config +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/docs/README.md +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/docs/output.md +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/docs/usage.md +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/main.nf +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/modules/nf-core/fastqc/tests/main.nf.test +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/modules/nf-core/fastqc/tests/main.nf.test.snap +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/modules/nf-core/multiqc/tests/main.nf.test +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/modules/nf-core/multiqc/tests/nextflow.config +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/modules/nf-core/multiqc/tests/tags.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/nextflow_schema.json +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/local/utils_nfcore_pipeline_pipeline/main.nf +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nextflow_pipeline/meta.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test.snap +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nfcore_pipeline/meta.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test.snap +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nfschema_plugin/main.nf +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nfschema_plugin/meta.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/tower.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipeline-template/workflows/pipeline.nf +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/__init__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create/basicdetails.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create/finaldetails.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create/githubexit.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create/githubrepo.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create/githubrepoquestion.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create/loggingscreen.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create/pipelinetype.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/create/welcome.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/launch.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/actions_awstest.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/actions_nf_test.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/included_configs.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/local_component_structure.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/merge_markers.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/modules_structure.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/pipeline_if_empty_null.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/pipeline_name_conventions.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/pipeline_todos.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/schema_description.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/schema_lint.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/schema_params.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/system_exit.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/lint/template_strings.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/list.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/refgenie.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/pipelines/schema.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflow-template/main.nf +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflow-template/meta.yml +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflow-template/tests/main.nf.test.j2 +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/__init__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/create.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/info.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/install.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/lint/__init__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/lint/meta_yml.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/lint/subworkflow_changes.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/lint/subworkflow_if_empty_null.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/lint/subworkflow_tests.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/lint/subworkflow_todos.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/lint/subworkflow_version.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/list.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/patch.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/remove.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/subworkflows/update.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core/test_datasets/__init__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core.egg-info/dependency_links.txt +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core.egg-info/entry_points.txt +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core.egg-info/not-zip-safe +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/nf_core.egg-info/top_level.txt +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/setup.cfg +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/__init__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/components/__init__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/components/test_components_generate_snapshot.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/components/test_components_snapshot_test.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/components/test_components_utils.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/modules/__init__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/modules/test_bump_versions.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/modules/test_info.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/modules/test_install.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/modules/test_list.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/modules/test_modules_json.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/modules/test_modules_utils.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/modules/test_patch.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/modules/test_remove.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/modules/test_update.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/__init__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/__init__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_actions_awsfulltest.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_actions_awstest.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_actions_nf_test.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_actions_schema_validation.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_configs.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_files_exist.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_files_unchanged.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_if_empty_null.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_local_component_structure.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_merge_markers.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_modules_json.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_multiqc_config.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_nextflow_config.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_nf_test_content.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_nfcore_yml.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_plugin_includes.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/lint/test_template_strings.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/test_bump_version.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/test_create_logo.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/test_launch.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/test_lint.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/test_list.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/test_params_file.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/test_refgenie.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/test_rocrate.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/pipelines/test_schema.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/subworkflows/__init__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/subworkflows/test_create.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/subworkflows/test_info.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/subworkflows/test_install.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/subworkflows/test_lint.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/subworkflows/test_list.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/subworkflows/test_patch.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/subworkflows/test_remove.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/subworkflows/test_update.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/test_components.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/test_datasets/__init__.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/test_datasets/test_test_datasets_utils.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/test_lint_utils.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/test_modules.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/test_pipelines.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/test_subworkflows.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/test_test_utils.py +0 -0
- {nf_core-3.3.1 → nf_core-3.3.2}/tests/test_utils.py +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nf-core
|
|
3
|
-
Version: 3.3.
|
|
3
|
+
Version: 3.3.2
|
|
4
4
|
Summary: Helper tools for use with nf-core Nextflow pipelines.
|
|
5
5
|
Home-page: https://github.com/nf-core/tools
|
|
6
6
|
Author: Phil Ewels
|
|
7
7
|
Author-email: phil.ewels@scilifelab.se
|
|
8
8
|
License: MIT
|
|
9
9
|
Keywords: nf-core,nextflow,bioinformatics,workflow,pipeline,biology,sequencing,NGS,next generation sequencing
|
|
10
|
-
Requires-Python: >=3.
|
|
10
|
+
Requires-Python: >=3.9, <4
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
12
|
License-File: LICENSE
|
|
13
13
|
Requires-Dist: click
|
|
@@ -32,7 +32,7 @@ Requires-Dist: rich>=13.3.1
|
|
|
32
32
|
Requires-Dist: rocrate
|
|
33
33
|
Requires-Dist: repo2rocrate
|
|
34
34
|
Requires-Dist: tabulate
|
|
35
|
-
Requires-Dist: textual==
|
|
35
|
+
Requires-Dist: textual==3.5.0
|
|
36
36
|
Requires-Dist: trogon
|
|
37
37
|
Requires-Dist: pdiff
|
|
38
38
|
Requires-Dist: ruamel.yaml
|
|
@@ -85,7 +85,7 @@ conda install nf-core
|
|
|
85
85
|
Alternatively, you can create a new environment with both nf-core/tools and nextflow:
|
|
86
86
|
|
|
87
87
|
```bash
|
|
88
|
-
conda create --name nf-core python=3.
|
|
88
|
+
conda create --name nf-core python=3.13 nf-core nextflow
|
|
89
89
|
conda activate nf-core
|
|
90
90
|
```
|
|
91
91
|
|
|
@@ -35,7 +35,7 @@ conda install nf-core
|
|
|
35
35
|
Alternatively, you can create a new environment with both nf-core/tools and nextflow:
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
conda create --name nf-core python=3.
|
|
38
|
+
conda create --name nf-core python=3.13 nf-core nextflow
|
|
39
39
|
conda activate nf-core
|
|
40
40
|
```
|
|
41
41
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
+
from typing import Optional
|
|
2
3
|
|
|
3
4
|
import click
|
|
4
5
|
import rich
|
|
@@ -29,7 +30,7 @@ def test_datasets_list_remote(ctx: click.Context, branch: str, generate_nf_path:
|
|
|
29
30
|
|
|
30
31
|
|
|
31
32
|
def test_datasets_search(
|
|
32
|
-
ctx: click.Context, branch: str, generate_nf_path: bool, generate_dl_url: bool, query: str
|
|
33
|
+
ctx: click.Context, branch: str, generate_nf_path: bool, generate_dl_url: bool, query: Optional[str]
|
|
33
34
|
) -> None:
|
|
34
35
|
"""
|
|
35
36
|
Search all files on a given branch in the remote nf-core/testdatasets repository on github
|
|
@@ -3,7 +3,7 @@ import mmap
|
|
|
3
3
|
import os
|
|
4
4
|
import shutil
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import Optional, Union
|
|
7
7
|
|
|
8
8
|
import nf_core.utils
|
|
9
9
|
from nf_core.modules.modules_json import ModulesJson
|
|
@@ -65,7 +65,7 @@ class ComponentCommand:
|
|
|
65
65
|
self.default_subworkflows_path = Path("subworkflows", self.org)
|
|
66
66
|
self.default_subworkflows_tests_path = Path("tests", "subworkflows", self.org)
|
|
67
67
|
|
|
68
|
-
def get_local_components(self) ->
|
|
68
|
+
def get_local_components(self) -> list[str]:
|
|
69
69
|
"""
|
|
70
70
|
Get the local modules/subworkflows in a pipeline
|
|
71
71
|
"""
|
|
@@ -78,7 +78,7 @@ class ComponentCommand:
|
|
|
78
78
|
str(path.relative_to(local_component_dir)) for path in local_component_dir.iterdir() if path.suffix == ".nf"
|
|
79
79
|
]
|
|
80
80
|
|
|
81
|
-
def get_components_clone_modules(self) ->
|
|
81
|
+
def get_components_clone_modules(self) -> list[str]:
|
|
82
82
|
"""
|
|
83
83
|
Get the modules/subworkflows repository available in a clone of nf-core/modules
|
|
84
84
|
"""
|
|
@@ -142,7 +142,7 @@ class ComponentCommand:
|
|
|
142
142
|
log.error(f"Could not remove {self.component_type[:-1]} {component_name}: {e}")
|
|
143
143
|
return False
|
|
144
144
|
|
|
145
|
-
def components_from_repo(self, install_dir: str) ->
|
|
145
|
+
def components_from_repo(self, install_dir: str) -> list[str]:
|
|
146
146
|
"""
|
|
147
147
|
Gets the modules/subworkflows installed from a certain repository
|
|
148
148
|
|
|
@@ -200,7 +200,7 @@ class ComponentCommand:
|
|
|
200
200
|
modules/nf-core/modules/TOOL/SUBTOOL
|
|
201
201
|
"""
|
|
202
202
|
if self.repo_type == "pipeline":
|
|
203
|
-
wrong_location_modules:
|
|
203
|
+
wrong_location_modules: list[Path] = []
|
|
204
204
|
for directory, _, files in os.walk(Path(self.directory, "modules")):
|
|
205
205
|
if "main.nf" in files:
|
|
206
206
|
module_path = Path(directory).relative_to(Path(self.directory, "modules"))
|
|
@@ -263,7 +263,7 @@ class ComponentCommand:
|
|
|
263
263
|
][module_name]["patch"] = str(patch_path.relative_to(self.directory.resolve()))
|
|
264
264
|
modules_json.dump()
|
|
265
265
|
|
|
266
|
-
def check_if_in_include_stmts(self, component_path: str) ->
|
|
266
|
+
def check_if_in_include_stmts(self, component_path: str) -> dict[str, list[dict[str, Union[int, str]]]]:
|
|
267
267
|
"""
|
|
268
268
|
Checks for include statements in the main.nf file of the pipeline and a list of line numbers where the component is included
|
|
269
269
|
Args:
|
|
@@ -272,7 +272,7 @@ class ComponentCommand:
|
|
|
272
272
|
Returns:
|
|
273
273
|
(list): A list of dictionaries, with the workflow file and the line number where the component is included
|
|
274
274
|
"""
|
|
275
|
-
include_stmts:
|
|
275
|
+
include_stmts: dict[str, list[dict[str, Union[int, str]]]] = {}
|
|
276
276
|
if self.repo_type == "pipeline":
|
|
277
277
|
workflow_files = Path(self.directory, "workflows").glob("*.nf")
|
|
278
278
|
for workflow_file in workflow_files:
|
|
@@ -4,7 +4,7 @@ import json
|
|
|
4
4
|
import logging
|
|
5
5
|
import os
|
|
6
6
|
from pathlib import Path
|
|
7
|
-
from typing import
|
|
7
|
+
from typing import Union
|
|
8
8
|
|
|
9
9
|
from rich import box
|
|
10
10
|
from rich.console import Console, Group, RenderableType
|
|
@@ -308,7 +308,7 @@ class ComponentsDiffer:
|
|
|
308
308
|
)
|
|
309
309
|
|
|
310
310
|
@staticmethod
|
|
311
|
-
def per_file_patch(patch_fn: Union[str, Path]) ->
|
|
311
|
+
def per_file_patch(patch_fn: Union[str, Path]) -> dict[str, list[str]]:
|
|
312
312
|
"""
|
|
313
313
|
Splits a patch file for several files into one patch per file.
|
|
314
314
|
|
|
@@ -324,7 +324,7 @@ class ComponentsDiffer:
|
|
|
324
324
|
|
|
325
325
|
patches = {}
|
|
326
326
|
i = 0
|
|
327
|
-
patch_lines:
|
|
327
|
+
patch_lines: list[str] = []
|
|
328
328
|
key = "preamble"
|
|
329
329
|
while i < len(lines):
|
|
330
330
|
line = lines[i]
|
|
@@ -470,7 +470,7 @@ class ComponentsDiffer:
|
|
|
470
470
|
patch_path: Union[str, Path],
|
|
471
471
|
component_dir: Path,
|
|
472
472
|
reverse: bool = False,
|
|
473
|
-
) ->
|
|
473
|
+
) -> dict[str, list[str]]:
|
|
474
474
|
"""
|
|
475
475
|
Try applying a full patch file to a module or subworkflow
|
|
476
476
|
|
|
@@ -6,7 +6,7 @@ import logging
|
|
|
6
6
|
import os
|
|
7
7
|
import re
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from typing import
|
|
9
|
+
from typing import Optional
|
|
10
10
|
|
|
11
11
|
import questionary
|
|
12
12
|
from rich import print
|
|
@@ -79,7 +79,7 @@ class ComponentsTest(ComponentCommand): # type: ignore[misc]
|
|
|
79
79
|
self.component_name = component_name
|
|
80
80
|
self.remote_url = remote_url
|
|
81
81
|
self.branch = branch
|
|
82
|
-
self.errors:
|
|
82
|
+
self.errors: list[str] = []
|
|
83
83
|
self.verbose = verbose
|
|
84
84
|
self.obsolete_snapshots: bool = False
|
|
85
85
|
self.update = update
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import re
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from typing import
|
|
4
|
+
from typing import Optional, Union
|
|
5
5
|
|
|
6
6
|
import questionary
|
|
7
7
|
import requests
|
|
@@ -22,7 +22,7 @@ yaml.preserve_quotes = True
|
|
|
22
22
|
yaml.indent(mapping=2, sequence=2, offset=0)
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
def get_repo_info(directory: Path, use_prompt: Optional[bool] = True) ->
|
|
25
|
+
def get_repo_info(directory: Path, use_prompt: Optional[bool] = True) -> tuple[Path, Optional[str], str]:
|
|
26
26
|
"""
|
|
27
27
|
Determine whether this is a pipeline repository or a clone of
|
|
28
28
|
nf-core/modules
|
|
@@ -147,12 +147,12 @@ def prompt_component_version_sha(
|
|
|
147
147
|
|
|
148
148
|
def get_components_to_install(
|
|
149
149
|
subworkflow_dir: Union[str, Path],
|
|
150
|
-
) ->
|
|
150
|
+
) -> tuple[list[dict[str, str]], list[dict[str, str]]]:
|
|
151
151
|
"""
|
|
152
152
|
Parse the subworkflow main.nf file to retrieve all imported modules and subworkflows.
|
|
153
153
|
"""
|
|
154
|
-
modules:
|
|
155
|
-
subworkflows:
|
|
154
|
+
modules: dict[str, dict[str, str]] = {}
|
|
155
|
+
subworkflows: dict[str, dict[str, str]] = {}
|
|
156
156
|
|
|
157
157
|
with open(Path(subworkflow_dir, "main.nf")) as fh:
|
|
158
158
|
for line in fh:
|
|
@@ -165,7 +165,7 @@ def get_components_to_install(
|
|
|
165
165
|
if link.startswith("../../../"):
|
|
166
166
|
name_split = name.lower().split("_")
|
|
167
167
|
component_name = "/".join(name_split)
|
|
168
|
-
component_dict:
|
|
168
|
+
component_dict: dict[str, str] = {
|
|
169
169
|
"name": component_name,
|
|
170
170
|
}
|
|
171
171
|
modules[component_name] = component_dict
|
|
@@ -198,7 +198,7 @@ def get_components_to_install(
|
|
|
198
198
|
return list(modules.values()), list(subworkflows.values())
|
|
199
199
|
|
|
200
200
|
|
|
201
|
-
def get_biotools_response(tool_name: str) -> Optional[
|
|
201
|
+
def get_biotools_response(tool_name: str) -> Optional[dict]:
|
|
202
202
|
"""
|
|
203
203
|
Try to get bio.tools information for 'tool'
|
|
204
204
|
"""
|
|
@@ -232,12 +232,12 @@ def get_biotools_id(data: dict, tool_name: str) -> str:
|
|
|
232
232
|
return ""
|
|
233
233
|
|
|
234
234
|
|
|
235
|
-
DictWithStrAndTuple =
|
|
235
|
+
DictWithStrAndTuple = dict[str, tuple[list[str], list[str], list[str]]]
|
|
236
236
|
|
|
237
237
|
|
|
238
238
|
def get_channel_info_from_biotools(
|
|
239
239
|
data: dict, tool_name: str
|
|
240
|
-
) -> Optional[
|
|
240
|
+
) -> Optional[tuple[DictWithStrAndTuple, DictWithStrAndTuple]]:
|
|
241
241
|
"""
|
|
242
242
|
Try to find input and output channels and the respective EDAM ontology terms
|
|
243
243
|
|
|
@@ -9,13 +9,13 @@ import re
|
|
|
9
9
|
import shutil
|
|
10
10
|
import subprocess
|
|
11
11
|
from pathlib import Path
|
|
12
|
-
from typing import
|
|
12
|
+
from typing import Optional, Union
|
|
13
13
|
|
|
14
14
|
import jinja2
|
|
15
15
|
import questionary
|
|
16
16
|
import rich
|
|
17
17
|
import rich.prompt
|
|
18
|
-
import yaml
|
|
18
|
+
import ruamel.yaml
|
|
19
19
|
from packaging.version import parse as parse_version
|
|
20
20
|
|
|
21
21
|
import nf_core
|
|
@@ -26,6 +26,14 @@ from nf_core.pipelines.lint_utils import run_prettier_on_file
|
|
|
26
26
|
|
|
27
27
|
log = logging.getLogger(__name__)
|
|
28
28
|
|
|
29
|
+
# Set yaml options for meta.yml files
|
|
30
|
+
ruamel.yaml.representer.RoundTripRepresenter.ignore_aliases = (
|
|
31
|
+
lambda x, y: True
|
|
32
|
+
) # Fix to not print aliases. https://stackoverflow.com/a/64717341
|
|
33
|
+
yaml = ruamel.yaml.YAML()
|
|
34
|
+
yaml.preserve_quotes = True
|
|
35
|
+
yaml.indent(mapping=2, sequence=2, offset=0)
|
|
36
|
+
|
|
29
37
|
|
|
30
38
|
class ComponentCreate(ComponentCommand):
|
|
31
39
|
def __init__(
|
|
@@ -59,7 +67,7 @@ class ComponentCreate(ComponentCommand):
|
|
|
59
67
|
self.bioconda = None
|
|
60
68
|
self.singularity_container = None
|
|
61
69
|
self.docker_container = None
|
|
62
|
-
self.file_paths:
|
|
70
|
+
self.file_paths: dict[str, Path] = {}
|
|
63
71
|
self.not_empty_template = not empty_template
|
|
64
72
|
self.migrate_pytest = migrate_pytest
|
|
65
73
|
self.tool_identifier = ""
|
|
@@ -175,6 +183,10 @@ class ComponentCreate(ComponentCommand):
|
|
|
175
183
|
assert self._render_template()
|
|
176
184
|
log.info(f"Created component template: '{self.component_name}'")
|
|
177
185
|
|
|
186
|
+
if self.component_type == "modules":
|
|
187
|
+
# Generate meta.yml inputs and outputs
|
|
188
|
+
self.generate_meta_yml_file()
|
|
189
|
+
|
|
178
190
|
if self.migrate_pytest:
|
|
179
191
|
self._copy_old_files(component_old_path)
|
|
180
192
|
log.info("Migrate pytest tests: Copied original module files to new module")
|
|
@@ -357,7 +369,7 @@ class ComponentCreate(ComponentCommand):
|
|
|
357
369
|
elif self.component_type == "subworkflows":
|
|
358
370
|
self.component = rich.prompt.Prompt.ask("[violet]Name of subworkflow").strip()
|
|
359
371
|
|
|
360
|
-
def _get_component_dirs(self) ->
|
|
372
|
+
def _get_component_dirs(self) -> dict[str, Path]:
|
|
361
373
|
"""Given a directory and a tool/subtool or subworkflow, set the file paths and check if they already exist
|
|
362
374
|
|
|
363
375
|
Returns dict: keys are relative paths to template files, vals are target paths.
|
|
@@ -501,10 +513,184 @@ class ComponentCreate(ComponentCommand):
|
|
|
501
513
|
# Delete tags from pytest_modules.yml
|
|
502
514
|
modules_yml = Path(self.directory, "tests", "config", "pytest_modules.yml")
|
|
503
515
|
with open(modules_yml) as fh:
|
|
504
|
-
yml_file = yaml.
|
|
516
|
+
yml_file = yaml.load(fh)
|
|
505
517
|
yml_key = str(self.component_dir) if self.component_type == "modules" else f"subworkflows/{self.component_dir}"
|
|
506
518
|
if yml_key in yml_file:
|
|
507
519
|
del yml_file[yml_key]
|
|
508
520
|
with open(modules_yml, "w") as fh:
|
|
509
521
|
yaml.dump(yml_file, fh)
|
|
510
522
|
run_prettier_on_file(modules_yml)
|
|
523
|
+
|
|
524
|
+
def generate_meta_yml_file(self) -> None:
|
|
525
|
+
"""
|
|
526
|
+
Generate the meta.yml file.
|
|
527
|
+
"""
|
|
528
|
+
# TODO: The meta.yml could be handled with a Pydantic model. The reason it is not implemented is because we want to maintain comments in the meta.yml file.
|
|
529
|
+
with open(self.file_paths["meta.yml"]) as fh:
|
|
530
|
+
meta_yml: ruamel.yaml.comments.CommentedMap = yaml.load(fh)
|
|
531
|
+
|
|
532
|
+
versions: dict[str, list[dict[str, dict]]] = {
|
|
533
|
+
"versions": [
|
|
534
|
+
{
|
|
535
|
+
"versions.yml": {
|
|
536
|
+
"type": "file",
|
|
537
|
+
"description": "File containing software versions",
|
|
538
|
+
"pattern": "versions.yml",
|
|
539
|
+
"ontologies": [
|
|
540
|
+
ruamel.yaml.comments.CommentedMap({"edam": "http://edamontology.org/format_3750"})
|
|
541
|
+
],
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
]
|
|
545
|
+
}
|
|
546
|
+
versions["versions"][0]["versions.yml"]["ontologies"][0].yaml_add_eol_comment("YAML", "edam")
|
|
547
|
+
|
|
548
|
+
if self.not_empty_template:
|
|
549
|
+
meta_yml.yaml_set_comment_before_after_key(
|
|
550
|
+
"name", before="# TODO nf-core: Add a description of the module and list keywords"
|
|
551
|
+
)
|
|
552
|
+
meta_yml["tools"][0].yaml_set_start_comment(
|
|
553
|
+
"## TODO nf-core: Add a description and other details for the software below"
|
|
554
|
+
)
|
|
555
|
+
meta_yml["input"].yaml_set_start_comment(
|
|
556
|
+
"### TODO nf-core: Add a description of all of the variables used as input", indent=2
|
|
557
|
+
)
|
|
558
|
+
meta_yml["output"].yaml_set_start_comment(
|
|
559
|
+
"### TODO nf-core: Add a description of all of the variables used as output", indent=2
|
|
560
|
+
)
|
|
561
|
+
|
|
562
|
+
if hasattr(self, "inputs"):
|
|
563
|
+
inputs_array: list[Union[dict, list[dict]]] = []
|
|
564
|
+
for i, (input_name, ontologies) in enumerate(self.inputs.items()):
|
|
565
|
+
channel_entry: dict[str, dict] = {
|
|
566
|
+
input_name: {
|
|
567
|
+
"type": "file",
|
|
568
|
+
"description": f"{input_name} file",
|
|
569
|
+
"pattern": f"*.{{{','.join(ontologies[2])}}}",
|
|
570
|
+
"ontologies": [
|
|
571
|
+
ruamel.yaml.comments.CommentedMap({"edam": f"{ont_id}"}) for ont_id in ontologies[0]
|
|
572
|
+
],
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
for j, ont_desc in enumerate(ontologies[1]):
|
|
576
|
+
channel_entry[input_name]["ontologies"][j].yaml_add_eol_comment(ont_desc, "edam")
|
|
577
|
+
if self.has_meta:
|
|
578
|
+
meta_suffix = str(i + 1) if i > 0 else ""
|
|
579
|
+
meta_entry: dict[str, dict] = {
|
|
580
|
+
f"meta{meta_suffix}": {
|
|
581
|
+
"type": "map",
|
|
582
|
+
"description": "Groovy Map containing sample information. e.g. `[ id:'sample1' ]`",
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
inputs_array.append([meta_entry, channel_entry])
|
|
586
|
+
else:
|
|
587
|
+
inputs_array.append(channel_entry)
|
|
588
|
+
meta_yml["input"] = ruamel.yaml.comments.CommentedSeq(inputs_array)
|
|
589
|
+
meta_yml["input"].yaml_set_start_comment(
|
|
590
|
+
"# TODO nf-core: Update the information obtained from bio.tools and make sure that it is correct"
|
|
591
|
+
)
|
|
592
|
+
elif not self.has_meta:
|
|
593
|
+
meta_yml["input"] = [
|
|
594
|
+
{
|
|
595
|
+
"bam": {
|
|
596
|
+
"type": "file",
|
|
597
|
+
"description": "Sorted BAM/CRAM/SAM file",
|
|
598
|
+
"pattern": "*.{bam,cram,sam}",
|
|
599
|
+
"ontologies": [
|
|
600
|
+
ruamel.yaml.comments.CommentedMap({"edam": "http://edamontology.org/format_2572"}),
|
|
601
|
+
ruamel.yaml.comments.CommentedMap({"edam": "http://edamontology.org/format_2573"}),
|
|
602
|
+
ruamel.yaml.comments.CommentedMap({"edam": "http://edamontology.org/format_3462"}),
|
|
603
|
+
],
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
]
|
|
607
|
+
meta_yml["input"][0]["bam"]["ontologies"][0].yaml_add_eol_comment("BAM", "edam")
|
|
608
|
+
meta_yml["input"][0]["bam"]["ontologies"][1].yaml_add_eol_comment("CRAM", "edam")
|
|
609
|
+
meta_yml["input"][0]["bam"]["ontologies"][2].yaml_add_eol_comment("SAM", "edam")
|
|
610
|
+
|
|
611
|
+
if hasattr(self, "outputs"):
|
|
612
|
+
outputs_dict: dict[str, Union[list, dict]] = {}
|
|
613
|
+
for i, (output_name, ontologies) in enumerate(self.outputs.items()):
|
|
614
|
+
channel_contents: list[Union[list[dict], dict]] = []
|
|
615
|
+
if self.has_meta:
|
|
616
|
+
channel_contents.append(
|
|
617
|
+
[
|
|
618
|
+
{
|
|
619
|
+
"meta": {
|
|
620
|
+
"type": "map",
|
|
621
|
+
"description": "Groovy Map containing sample information. e.g. `[ id:'sample1' ]`",
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
]
|
|
625
|
+
)
|
|
626
|
+
pattern = f"*.{{{','.join(ontologies[2])}}}"
|
|
627
|
+
file_entry: dict[str, dict] = {
|
|
628
|
+
pattern: {
|
|
629
|
+
"type": "file",
|
|
630
|
+
"description": f"{output_name} file",
|
|
631
|
+
"pattern": pattern,
|
|
632
|
+
"ontologies": [
|
|
633
|
+
ruamel.yaml.comments.CommentedMap({"edam": f"{ont_id}"}) for ont_id in ontologies[0]
|
|
634
|
+
],
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
for j, ont_desc in enumerate(ontologies[1]):
|
|
638
|
+
file_entry[pattern]["ontologies"][j].yaml_add_eol_comment(ont_desc, "edam")
|
|
639
|
+
if self.has_meta:
|
|
640
|
+
if isinstance(channel_contents[0], list): # for mypy
|
|
641
|
+
channel_contents[0].append(file_entry)
|
|
642
|
+
else:
|
|
643
|
+
channel_contents.append(file_entry)
|
|
644
|
+
outputs_dict[output_name] = channel_contents
|
|
645
|
+
outputs_dict.update(versions)
|
|
646
|
+
meta_yml["output"] = ruamel.yaml.comments.CommentedMap(outputs_dict)
|
|
647
|
+
meta_yml["output"].yaml_set_start_comment(
|
|
648
|
+
"# TODO nf-core: Update the information obtained from bio.tools and make sure that it is correct"
|
|
649
|
+
)
|
|
650
|
+
elif not self.has_meta:
|
|
651
|
+
meta_yml["output"] = {
|
|
652
|
+
"bam": [
|
|
653
|
+
{
|
|
654
|
+
"*.bam": {
|
|
655
|
+
"type": "file",
|
|
656
|
+
"description": "Sorted BAM/CRAM/SAM file",
|
|
657
|
+
"pattern": "*.{bam,cram,sam}",
|
|
658
|
+
"ontologies": [
|
|
659
|
+
ruamel.yaml.comments.CommentedMap({"edam": "http://edamontology.org/format_2572"}),
|
|
660
|
+
ruamel.yaml.comments.CommentedMap({"edam": "http://edamontology.org/format_2573"}),
|
|
661
|
+
ruamel.yaml.comments.CommentedMap({"edam": "http://edamontology.org/format_3462"}),
|
|
662
|
+
],
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
]
|
|
666
|
+
}
|
|
667
|
+
meta_yml["output"]["bam"][0]["*.bam"]["ontologies"][0].yaml_add_eol_comment("BAM", "edam")
|
|
668
|
+
meta_yml["output"]["bam"][0]["*.bam"]["ontologies"][1].yaml_add_eol_comment("CRAM", "edam")
|
|
669
|
+
meta_yml["output"]["bam"][0]["*.bam"]["ontologies"][2].yaml_add_eol_comment("SAM", "edam")
|
|
670
|
+
meta_yml["output"].update(versions)
|
|
671
|
+
|
|
672
|
+
else:
|
|
673
|
+
input_entry: list[dict] = [
|
|
674
|
+
{"input": {"type": "file", "description": "", "pattern": "", "ontologies": [{"edam": ""}]}}
|
|
675
|
+
]
|
|
676
|
+
output_entry: list[dict] = [
|
|
677
|
+
{"*": {"type": "file", "description": "", "pattern": "", "ontologies": [{"edam": ""}]}}
|
|
678
|
+
]
|
|
679
|
+
if self.has_meta:
|
|
680
|
+
empty_meta_entry: list[dict] = [
|
|
681
|
+
{
|
|
682
|
+
"meta": {
|
|
683
|
+
"type": "map",
|
|
684
|
+
"description": "Groovy Map containing sample information. e.g. `[ id:'sample1' ]`",
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
]
|
|
688
|
+
meta_yml["input"] = [empty_meta_entry + input_entry]
|
|
689
|
+
meta_yml["output"] = {"output": [empty_meta_entry + output_entry]}
|
|
690
|
+
else:
|
|
691
|
+
meta_yml["input"] = input_entry
|
|
692
|
+
meta_yml["output"] = {"output": output_entry}
|
|
693
|
+
meta_yml["output"].update(versions)
|
|
694
|
+
|
|
695
|
+
with open(self.file_paths["meta.yml"], "w") as fh:
|
|
696
|
+
yaml.dump(meta_yml, fh)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import os
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from typing import
|
|
4
|
+
from typing import Optional, Union
|
|
5
5
|
|
|
6
6
|
import questionary
|
|
7
7
|
import yaml
|
|
@@ -66,7 +66,7 @@ class ComponentInfo(ComponentCommand):
|
|
|
66
66
|
no_pull: bool = False,
|
|
67
67
|
):
|
|
68
68
|
super().__init__(component_type, pipeline_dir, remote_url, branch, no_pull)
|
|
69
|
-
self.meta: Optional[
|
|
69
|
+
self.meta: Optional[dict] = None
|
|
70
70
|
self.local_path: Optional[Path] = None
|
|
71
71
|
self.remote_location: Optional[str] = None
|
|
72
72
|
self.local: bool = False
|
|
@@ -106,7 +106,7 @@ class ComponentInfo(ComponentCommand):
|
|
|
106
106
|
components = self.get_components_clone_modules()
|
|
107
107
|
elif self.repo_type == "pipeline":
|
|
108
108
|
assert self.modules_json is not None # mypy
|
|
109
|
-
all_components:
|
|
109
|
+
all_components: list[tuple[str, str]] = self.modules_json.get_all_components(
|
|
110
110
|
self.component_type
|
|
111
111
|
).get(self.modules_repo.remote_url, [])
|
|
112
112
|
|
|
@@ -170,7 +170,7 @@ class ComponentInfo(ComponentCommand):
|
|
|
170
170
|
|
|
171
171
|
return self.generate_component_info_help()
|
|
172
172
|
|
|
173
|
-
def get_local_yaml(self) -> Optional[
|
|
173
|
+
def get_local_yaml(self) -> Optional[dict]:
|
|
174
174
|
"""Attempt to get the meta.yml file from a locally installed module/subworkflow.
|
|
175
175
|
|
|
176
176
|
Returns:
|
|
@@ -213,7 +213,7 @@ class ComponentInfo(ComponentCommand):
|
|
|
213
213
|
|
|
214
214
|
return {}
|
|
215
215
|
|
|
216
|
-
def get_remote_yaml(self) -> Optional[
|
|
216
|
+
def get_remote_yaml(self) -> Optional[dict]:
|
|
217
217
|
"""Attempt to get the meta.yml file from a remote repo.
|
|
218
218
|
|
|
219
219
|
Returns:
|
|
@@ -320,18 +320,27 @@ class ComponentInfo(ComponentCommand):
|
|
|
320
320
|
# Outputs
|
|
321
321
|
if self.meta.get("output"):
|
|
322
322
|
outputs_table = self.generate_params_table("Outputs")
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
323
|
+
if self.component_type == "modules":
|
|
324
|
+
for ch_name, elements in self.meta["output"].items():
|
|
325
|
+
outputs_table.add_row(f"{ch_name}", "", "")
|
|
326
|
+
for element in elements:
|
|
327
|
+
if isinstance(element, list):
|
|
328
|
+
for ch in element:
|
|
329
|
+
for key, info in ch.items():
|
|
330
|
+
outputs_table.add_row(
|
|
331
|
+
f"[orange1 on black] {key} [/][dim i] ({info['type']})",
|
|
332
|
+
Markdown(info["description"] if info["description"] else ""),
|
|
333
|
+
info.get("pattern", ""),
|
|
334
|
+
)
|
|
335
|
+
elif isinstance(element, dict):
|
|
328
336
|
for key, info in element.items():
|
|
329
337
|
outputs_table.add_row(
|
|
330
338
|
f"[orange1 on black] {key} [/][dim i] ({info['type']})",
|
|
331
339
|
Markdown(info["description"] if info["description"] else ""),
|
|
332
340
|
info.get("pattern", ""),
|
|
333
341
|
)
|
|
334
|
-
|
|
342
|
+
elif self.component_type == "subworkflows":
|
|
343
|
+
for output in self.meta["output"]:
|
|
335
344
|
for key, info in output.items():
|
|
336
345
|
outputs_table.add_row(
|
|
337
346
|
f"[orange1 on black] {key} [/][dim i]",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import os
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from typing import
|
|
4
|
+
from typing import Optional, Union
|
|
5
5
|
|
|
6
6
|
import questionary
|
|
7
7
|
from rich import print
|
|
@@ -38,7 +38,7 @@ class ComponentInstall(ComponentCommand):
|
|
|
38
38
|
remote_url: Optional[str] = None,
|
|
39
39
|
branch: Optional[str] = None,
|
|
40
40
|
no_pull: bool = False,
|
|
41
|
-
installed_by: Optional[
|
|
41
|
+
installed_by: Optional[list[str]] = None,
|
|
42
42
|
):
|
|
43
43
|
super().__init__(component_type, pipeline_dir, remote_url, branch, no_pull)
|
|
44
44
|
self.current_remote = ModulesRepo(remote_url, branch)
|
|
@@ -52,7 +52,7 @@ class ComponentInstall(ComponentCommand):
|
|
|
52
52
|
else:
|
|
53
53
|
self.installed_by = [self.component_type]
|
|
54
54
|
|
|
55
|
-
def install(self, component: Union[str,
|
|
55
|
+
def install(self, component: Union[str, dict[str, str]], silent: bool = False) -> bool:
|
|
56
56
|
if isinstance(component, dict):
|
|
57
57
|
# Override modules_repo when the component to install is a dependency from a subworkflow.
|
|
58
58
|
remote_url = component.get("git_remote", self.current_remote.remote_url)
|
|
@@ -7,7 +7,7 @@ import logging
|
|
|
7
7
|
import operator
|
|
8
8
|
import os
|
|
9
9
|
from pathlib import Path
|
|
10
|
-
from typing import
|
|
10
|
+
from typing import Optional, Union
|
|
11
11
|
|
|
12
12
|
import rich.box
|
|
13
13
|
import rich.console
|
|
@@ -75,10 +75,10 @@ class ComponentLint(ComponentCommand):
|
|
|
75
75
|
|
|
76
76
|
self.fail_warned = fail_warned
|
|
77
77
|
self.fix = fix
|
|
78
|
-
self.passed:
|
|
79
|
-
self.warned:
|
|
80
|
-
self.failed:
|
|
81
|
-
self.all_local_components:
|
|
78
|
+
self.passed: list[LintResult] = []
|
|
79
|
+
self.warned: list[LintResult] = []
|
|
80
|
+
self.failed: list[LintResult] = []
|
|
81
|
+
self.all_local_components: list[NFCoreComponent] = []
|
|
82
82
|
|
|
83
83
|
self.lint_config: Optional[NFCoreYamlLintConfig] = None
|
|
84
84
|
self.modules_json: Optional[ModulesJson] = None
|
|
@@ -96,7 +96,7 @@ class ComponentLint(ComponentCommand):
|
|
|
96
96
|
if self.repo_type == "pipeline":
|
|
97
97
|
modules_json = ModulesJson(self.directory)
|
|
98
98
|
modules_json.check_up_to_date()
|
|
99
|
-
self.all_remote_components:
|
|
99
|
+
self.all_remote_components: list[NFCoreComponent] = []
|
|
100
100
|
for repo_url, components in modules_json.get_all_components(self.component_type).items():
|
|
101
101
|
if remote_url is not None and remote_url != repo_url:
|
|
102
102
|
continue
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import logging
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from typing import
|
|
4
|
+
from typing import Optional, Union, cast
|
|
5
5
|
|
|
6
6
|
import rich.table
|
|
7
7
|
|
|
@@ -35,7 +35,7 @@ class ComponentList(ComponentCommand):
|
|
|
35
35
|
return super()._configure_repo_and_paths(nf_dir_req)
|
|
36
36
|
|
|
37
37
|
def list_components(
|
|
38
|
-
self, keywords: Optional[
|
|
38
|
+
self, keywords: Optional[list[str]] = None, print_json: bool = False
|
|
39
39
|
) -> Union[rich.table.Table, str]:
|
|
40
40
|
keywords = keywords or []
|
|
41
41
|
"""
|
|
@@ -48,9 +48,9 @@ class ComponentList(ComponentCommand):
|
|
|
48
48
|
# Initialise rich table
|
|
49
49
|
table: rich.table.Table = rich.table.Table()
|
|
50
50
|
table.add_column(f"{self.component_type[:-1].capitalize()} Name")
|
|
51
|
-
components:
|
|
51
|
+
components: list[str] = []
|
|
52
52
|
|
|
53
|
-
def pattern_msg(keywords:
|
|
53
|
+
def pattern_msg(keywords: list[str]) -> str:
|
|
54
54
|
if len(keywords) == 0:
|
|
55
55
|
return ""
|
|
56
56
|
if len(keywords) == 1:
|
|
@@ -122,7 +122,7 @@ class ComponentList(ComponentCommand):
|
|
|
122
122
|
modules_json_file = modules_json.modules_json
|
|
123
123
|
|
|
124
124
|
for repo_url, component_with_dir in sorted(repos_with_comps.items()):
|
|
125
|
-
repo_entry:
|
|
125
|
+
repo_entry: dict[str, dict[str, dict[str, ModulesJsonModuleEntry]]]
|
|
126
126
|
if modules_json_file is None:
|
|
127
127
|
log.warning(f"Modules JSON file '{modules_json.modules_json_path}' is missing. ")
|
|
128
128
|
continue
|