secator 0.10.1a8__tar.gz → 0.10.1a10__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.
Potentially problematic release.
This version of secator might be problematic. Click here for more details.
- {secator-0.10.1a8 → secator-0.10.1a10}/PKG-INFO +1 -1
- {secator-0.10.1a8 → secator-0.10.1a10}/pyproject.toml +1 -1
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/cli.py +4 -1
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/runners/command.py +3 -4
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/runners/task.py +4 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/runners/workflow.py +6 -3
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/unit/test_runners.py +1 -1
- {secator-0.10.1a8 → secator-0.10.1a10}/.docker/Dockerfile.alpine +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/.docker/Dockerfile.arch +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/.docker/Dockerfile.debian +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/.docker/Dockerfile.kali +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/.docker/Dockerfile.osx +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/.docker/Dockerfile.ubuntu +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/.docker/build_all.sh +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/.dockerignore +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/.flake8 +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/.gitignore +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/CHANGELOG.md +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/CONTRIBUTING.md +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/Dockerfile +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/LICENSE +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/README.md +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/SECURITY.md +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/cloudbuild.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/helm/.helmignore +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/helm/Chart.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/helm/templates/redis-service.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/helm/templates/redis.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/helm/templates/secator-manager.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/helm/templates/secator-worker.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/helm/values.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/download_cves.sh +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/install.sh +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/install_asciinema.sh +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/install_go.sh +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/install_ruby.sh +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/msf/exploit_cve.rc +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/msf/ftp_anonymous.rc +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/msf/ftp_version.rc +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/msf/ftp_vsftpd_234_backdoor.rc +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/msf/redis.rc +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/stories/STORY.md +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/stories/aliases.sh +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/stories/demo.sh +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/stories/fmt.sh +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/stories/input.sh +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/stories/pipe.sh +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/scripts/stories/short_demo.sh +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/.gitignore +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/celery.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/celery_signals.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/celery_utils.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/config.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/profiles/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/profiles/aggressive.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/profiles/default.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/profiles/stealth.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/scans/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/scans/domain.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/scans/host.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/scans/network.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/scans/subdomain.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/scans/url.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/workflows/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/workflows/cidr_recon.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/workflows/code_scan.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/workflows/host_recon.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/workflows/subdomain_recon.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/workflows/url_bypass.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/workflows/url_crawl.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/workflows/url_dirsearch.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/workflows/url_fuzz.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/workflows/url_nuclei.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/workflows/url_vuln.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/workflows/user_hunt.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/configs/workflows/wordpress.yaml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/decorators.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/definitions.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/exporters/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/exporters/_base.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/exporters/console.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/exporters/csv.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/exporters/gdrive.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/exporters/json.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/exporters/table.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/exporters/txt.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/hooks/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/hooks/gcs.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/hooks/mongodb.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/installer.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/_base.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/error.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/exploit.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/info.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/ip.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/port.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/progress.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/record.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/stat.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/state.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/subdomain.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/tag.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/target.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/url.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/user_account.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/vulnerability.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/output_types/warning.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/report.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/rich.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/runners/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/runners/_base.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/runners/_helpers.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/runners/celery.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/runners/scan.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/scans/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/serializers/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/serializers/dataclass.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/serializers/json.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/serializers/regex.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/_categories.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/bbot.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/bup.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/cariddi.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/dalfox.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/dirsearch.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/dnsx.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/dnsxbrute.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/feroxbuster.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/ffuf.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/fping.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/gau.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/gf.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/gospider.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/grype.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/h8mail.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/httpx.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/katana.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/maigret.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/mapcidr.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/msfconsole.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/naabu.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/nmap.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/nuclei.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/searchsploit.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/subfinder.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/tasks/wpscan.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/template.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/thread.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/utils.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/utils_test.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/secator/workflows/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/fixtures/h8mail_breach.txt +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/fixtures/ls.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/fixtures/msfconsole_input.rc +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/fixtures/nmap_output.xml +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/inputs.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/outputs.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/setup.sh +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/teardown.sh +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/test_addons.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/test_celery.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/test_scans.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/test_tasks.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/test_tasks_categories.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/test_worker.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/test_workflows.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/wordlist.txt +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/wordlist_dns.txt +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/wordpress_toolbox/Dockerfile +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/integration/wordpress_toolbox/Makefile +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/performance/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/performance/loadtester.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/performance/test_worker.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/unit/__init__.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/unit/test_celery.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/unit/test_cli.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/unit/test_config.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/unit/test_offline.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/unit/test_scans.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/unit/test_serializers.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/unit/test_tasks.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/unit/test_tasks_categories.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/unit/test_template.py +0 -0
- {secator-0.10.1a8 → secator-0.10.1a10}/tests/unit/test_utils.py +0 -0
|
@@ -118,11 +118,12 @@ for config in sorted(ALL_SCANS, key=lambda x: x['name']):
|
|
|
118
118
|
@click.option('-r', '--reload', is_flag=True, help='Autoreload Celery on code changes.')
|
|
119
119
|
@click.option('-Q', '--queue', type=str, default='', help='Listen to a specific queue.')
|
|
120
120
|
@click.option('-P', '--pool', type=str, default='eventlet', help='Pool implementation.')
|
|
121
|
+
@click.option('--quiet', is_flag=True, help='Quiet mode.')
|
|
121
122
|
@click.option('--check', is_flag=True, help='Check if Celery worker is alive.')
|
|
122
123
|
@click.option('--dev', is_flag=True, help='Start a worker in dev mode (celery multi).')
|
|
123
124
|
@click.option('--stop', is_flag=True, help='Stop a worker in dev mode (celery multi).')
|
|
124
125
|
@click.option('--show', is_flag=True, help='Show command (celery multi).')
|
|
125
|
-
def worker(hostname, concurrency, reload, queue, pool, check, dev, stop, show):
|
|
126
|
+
def worker(hostname, concurrency, reload, queue, pool, quiet, check, dev, stop, show):
|
|
126
127
|
"""Run a worker."""
|
|
127
128
|
|
|
128
129
|
# Check Celery addon is installed
|
|
@@ -152,6 +153,8 @@ def worker(hostname, concurrency, reload, queue, pool, check, dev, stop, show):
|
|
|
152
153
|
|
|
153
154
|
app_str = 'secator.celery.app'
|
|
154
155
|
celery = f'{sys.executable} -m celery'
|
|
156
|
+
if quiet:
|
|
157
|
+
celery += ' --quiet'
|
|
155
158
|
|
|
156
159
|
if dev:
|
|
157
160
|
subcmd = 'stop' if stop else 'show' if show else 'start'
|
|
@@ -488,9 +488,8 @@ class Command(Runner):
|
|
|
488
488
|
|
|
489
489
|
def print_description(self):
|
|
490
490
|
"""Print description"""
|
|
491
|
-
if self.sync and not self.has_children:
|
|
492
|
-
|
|
493
|
-
self._print(f'\n[bold gold3]:wrench: {self.description} [dim cyan]({self.config.name})[/][/] ...', rich=True)
|
|
491
|
+
if self.sync and not self.has_children and self.caller and self.description:
|
|
492
|
+
self._print(f'\n[bold gold3]:wrench: {self.description} [dim cyan]({self.config.name})[/][/] ...', rich=True)
|
|
494
493
|
|
|
495
494
|
def print_command(self):
|
|
496
495
|
"""Print command."""
|
|
@@ -756,7 +755,7 @@ class Command(Runner):
|
|
|
756
755
|
|
|
757
756
|
@staticmethod
|
|
758
757
|
def _validate_chunked_input(self, inputs):
|
|
759
|
-
"""Command does not suport multiple inputs in non-worker mode. Consider
|
|
758
|
+
"""Command does not suport multiple inputs in non-worker mode. Consider running with a remote worker instead."""
|
|
760
759
|
if len(inputs) > 1 and self.sync and self.file_flag is None:
|
|
761
760
|
return False
|
|
762
761
|
return True
|
|
@@ -47,6 +47,10 @@ class Task(Runner):
|
|
|
47
47
|
opts['context'] = self.context.copy()
|
|
48
48
|
opts['reports_folder'] = str(self.reports_folder)
|
|
49
49
|
opts['enable_reports'] = False # Task will handle reports
|
|
50
|
+
opts['enable_duplicate_check'] = False # Task will handle duplicate check
|
|
51
|
+
opts['has_parent'] = False
|
|
52
|
+
opts['skip_if_no_inputs'] = False
|
|
53
|
+
opts['caller'] = 'Task'
|
|
50
54
|
|
|
51
55
|
# Create task signature
|
|
52
56
|
task_id = str(uuid.uuid4())
|
|
@@ -37,14 +37,17 @@ class Workflow(Runner):
|
|
|
37
37
|
# Set hooks and reports
|
|
38
38
|
self.enable_reports = True # Workflow will handle reports
|
|
39
39
|
self.enable_hooks = False # Celery will handle hooks
|
|
40
|
+
|
|
40
41
|
# Get hooks
|
|
41
42
|
hooks = self._hooks.get(Task, {})
|
|
42
43
|
opts['hooks'] = hooks
|
|
43
44
|
opts['context'] = self.context.copy()
|
|
44
45
|
opts['reports_folder'] = str(self.reports_folder)
|
|
45
46
|
opts['enable_reports'] = False # Workflow will handle reports
|
|
47
|
+
opts['enable_duplicate_check'] = False # Workflow will handle duplicate check
|
|
46
48
|
opts['has_parent'] = True
|
|
47
49
|
opts['skip_if_no_inputs'] = True
|
|
50
|
+
opts['caller'] = 'Workflow'
|
|
48
51
|
|
|
49
52
|
# Build task signatures
|
|
50
53
|
sigs = self.get_tasks(
|
|
@@ -73,8 +76,7 @@ class Workflow(Runner):
|
|
|
73
76
|
Returns:
|
|
74
77
|
tuple (List[celery.Signature], List[str]): Celery signatures, Celery task ids.
|
|
75
78
|
"""
|
|
76
|
-
from celery import chain,
|
|
77
|
-
from secator.celery import forward_results
|
|
79
|
+
from celery import chain, group
|
|
78
80
|
sigs = []
|
|
79
81
|
for task_name, task_opts in config.items():
|
|
80
82
|
# Task opts can be None
|
|
@@ -88,7 +90,7 @@ class Workflow(Runner):
|
|
|
88
90
|
workflow_opts,
|
|
89
91
|
run_opts
|
|
90
92
|
)
|
|
91
|
-
sig =
|
|
93
|
+
sig = group(*tasks)
|
|
92
94
|
elif task_name == '_chain':
|
|
93
95
|
tasks = self.get_tasks(
|
|
94
96
|
task_opts,
|
|
@@ -107,6 +109,7 @@ class Workflow(Runner):
|
|
|
107
109
|
|
|
108
110
|
# Create task signature
|
|
109
111
|
task_id = str(uuid.uuid4())
|
|
112
|
+
opts['context'] = self.context.copy()
|
|
110
113
|
sig = task.s(inputs, **opts).set(queue=task.profile, task_id=task_id)
|
|
111
114
|
self.add_subtask(task_id, task_name, task_opts.get('description', ''))
|
|
112
115
|
self.output_types.extend(task.output_types)
|
|
@@ -192,7 +192,7 @@ class TestCommandRunner(unittest.TestCase):
|
|
|
192
192
|
cmd.run()
|
|
193
193
|
errors = cmd.errors
|
|
194
194
|
messages = [e.message for e in errors]
|
|
195
|
-
self.assertIn("Validator failed: Command does not suport multiple inputs in non-worker mode. Consider
|
|
195
|
+
self.assertIn("Validator failed: Command does not suport multiple inputs in non-worker mode. Consider running with a remote worker instead.", messages)
|
|
196
196
|
self.assertEqual(len(cmd.results), 1)
|
|
197
197
|
self.assertFalse(cmd.inputs_valid)
|
|
198
198
|
self.assertEqual(cmd.status, 'FAILURE')
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|