secator 0.4.0__tar.gz → 0.4.1__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.4.0 → secator-0.4.1}/CHANGELOG.md +8 -0
- {secator-0.4.0 → secator-0.4.1}/PKG-INFO +1 -1
- {secator-0.4.0 → secator-0.4.1}/pyproject.toml +1 -1
- {secator-0.4.0 → secator-0.4.1}/secator/cli.py +18 -18
- {secator-0.4.0 → secator-0.4.1}/secator/config.py +6 -3
- {secator-0.4.0 → secator-0.4.1}/secator/definitions.py +22 -50
- {secator-0.4.0 → secator-0.4.1}/.flake8 +0 -0
- {secator-0.4.0 → secator-0.4.1}/.gitignore +0 -0
- {secator-0.4.0 → secator-0.4.1}/CONTRIBUTING.md +0 -0
- {secator-0.4.0 → secator-0.4.1}/Dockerfile +0 -0
- {secator-0.4.0 → secator-0.4.1}/LICENSE +0 -0
- {secator-0.4.0 → secator-0.4.1}/README.md +0 -0
- {secator-0.4.0 → secator-0.4.1}/SECURITY.md +0 -0
- {secator-0.4.0 → secator-0.4.1}/cloudbuild.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/images/aliases.cast +0 -0
- {secator-0.4.0 → secator-0.4.1}/images/aliases.gif +0 -0
- {secator-0.4.0 → secator-0.4.1}/images/demo.gif +0 -0
- {secator-0.4.0 → secator-0.4.1}/images/demo.tap +0 -0
- {secator-0.4.0 → secator-0.4.1}/images/fmt.cast +0 -0
- {secator-0.4.0 → secator-0.4.1}/images/fmt.gif +0 -0
- {secator-0.4.0 → secator-0.4.1}/images/help.png +0 -0
- {secator-0.4.0 → secator-0.4.1}/images/input.cast +0 -0
- {secator-0.4.0 → secator-0.4.1}/images/input.gif +0 -0
- {secator-0.4.0 → secator-0.4.1}/images/pipe.cast +0 -0
- {secator-0.4.0 → secator-0.4.1}/images/pipe.gif +0 -0
- {secator-0.4.0 → secator-0.4.1}/images/short_demo.cast +0 -0
- {secator-0.4.0 → secator-0.4.1}/images/short_demo.gif +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/download_cves.sh +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/install.sh +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/install_asciinema.sh +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/install_go.sh +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/install_ruby.sh +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/msf/exploit_cve.rc +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/msf/ftp_anonymous.rc +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/msf/ftp_version.rc +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/msf/ftp_vsftpd_234_backdoor.rc +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/msf/redis.rc +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/msfinstall.sh +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/stories/STORY.md +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/stories/aliases.sh +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/stories/demo.sh +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/stories/fmt.sh +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/stories/input.sh +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/stories/pipe.sh +0 -0
- {secator-0.4.0 → secator-0.4.1}/scripts/stories/short_demo.sh +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/.gitignore +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/celery.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/profiles/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/profiles/aggressive.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/profiles/default.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/profiles/stealth.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/scans/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/scans/domain.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/scans/host.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/scans/network.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/scans/subdomain.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/scans/url.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/workflows/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/workflows/cidr_recon.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/workflows/code_scan.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/workflows/host_recon.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/workflows/port_scan.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/workflows/subdomain_recon.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/workflows/url_crawl.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/workflows/url_dirsearch.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/workflows/url_fuzz.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/workflows/url_nuclei.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/workflows/url_vuln.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/workflows/user_hunt.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/configs/workflows/wordpress.yaml +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/decorators.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/exporters/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/exporters/_base.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/exporters/csv.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/exporters/gdrive.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/exporters/json.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/exporters/table.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/exporters/txt.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/hooks/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/hooks/mongodb.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/installer.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/output_types/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/output_types/_base.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/output_types/exploit.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/output_types/ip.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/output_types/port.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/output_types/progress.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/output_types/record.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/output_types/subdomain.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/output_types/tag.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/output_types/target.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/output_types/url.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/output_types/user_account.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/output_types/vulnerability.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/report.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/rich.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/runners/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/runners/_base.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/runners/_helpers.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/runners/command.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/runners/scan.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/runners/task.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/runners/workflow.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/serializers/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/serializers/dataclass.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/serializers/json.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/serializers/regex.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/_categories.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/cariddi.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/dalfox.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/dirsearch.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/dnsx.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/dnsxbrute.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/feroxbuster.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/ffuf.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/fping.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/gau.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/gf.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/gospider.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/grype.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/h8mail.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/httpx.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/katana.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/maigret.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/mapcidr.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/msfconsole.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/naabu.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/nmap.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/nuclei.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/searchsploit.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/subfinder.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/tasks/wpscan.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/template.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/utils.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/secator/utils_test.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/fixtures/h8mail_breach.txt +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/fixtures/msfconsole_input.rc +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/fixtures/nmap_output.xml +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/integration/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/integration/inputs.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/integration/outputs.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/integration/setup.sh +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/integration/teardown.sh +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/integration/test_scans.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/integration/test_tasks.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/integration/test_worker.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/integration/test_workflows.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/integration/wordlist.txt +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/integration/wordlist_dns.txt +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/integration/wordpress_toolbox/Dockerfile +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/integration/wordpress_toolbox/Makefile +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/performance/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/performance/loadtester.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/unit/__init__.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/unit/test_celery.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/unit/test_config.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/unit/test_offline.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/unit/test_scans.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/unit/test_serializers.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/unit/test_tasks.py +0 -0
- {secator-0.4.0 → secator-0.4.1}/tests/unit/test_workflows.py +0 -0
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.4.1](https://github.com/freelabz/secator/compare/v0.4.0...v0.4.1) (2024-04-30)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* failed addons import ([#368](https://github.com/freelabz/secator/issues/368)) ([aee7ede](https://github.com/freelabz/secator/commit/aee7edeee1e96292e637b9161034f0d628a1f386))
|
|
9
|
+
* load dotenv before config import ([#370](https://github.com/freelabz/secator/issues/370)) ([ba2ea8e](https://github.com/freelabz/secator/commit/ba2ea8e3624dda7268d3788c0541fc0d37195358))
|
|
10
|
+
|
|
3
11
|
## [0.4.0](https://github.com/freelabz/secator/compare/v0.3.6...v0.4.0) (2024-04-27)
|
|
4
12
|
|
|
5
13
|
|
|
@@ -592,6 +592,24 @@ def health(json, debug):
|
|
|
592
592
|
table.add_row(*row)
|
|
593
593
|
status['secator'] = info
|
|
594
594
|
|
|
595
|
+
# Check addons
|
|
596
|
+
console.print('\n:wrench: [bold gold3]Checking installed addons ...[/]')
|
|
597
|
+
table = get_health_table()
|
|
598
|
+
with Live(table, console=console):
|
|
599
|
+
for addon in ['worker', 'google', 'mongodb', 'redis', 'dev', 'trace', 'build']:
|
|
600
|
+
addon_var = ADDONS_ENABLED[addon]
|
|
601
|
+
info = {
|
|
602
|
+
'name': addon,
|
|
603
|
+
'version': None,
|
|
604
|
+
'status': 'ok' if addon_var else 'missing',
|
|
605
|
+
'latest_version': None,
|
|
606
|
+
'installed': addon_var,
|
|
607
|
+
'location': None
|
|
608
|
+
}
|
|
609
|
+
row = fmt_health_table_row(info, 'addons')
|
|
610
|
+
table.add_row(*row)
|
|
611
|
+
status['addons'][addon] = info
|
|
612
|
+
|
|
595
613
|
# Check languages
|
|
596
614
|
console.print('\n:wrench: [bold gold3]Checking installed languages ...[/]')
|
|
597
615
|
version_cmds = {'go': 'version', 'python3': '--version', 'ruby': '--version'}
|
|
@@ -616,24 +634,6 @@ def health(json, debug):
|
|
|
616
634
|
table.add_row(*row)
|
|
617
635
|
status['tools'][tool.__name__] = info
|
|
618
636
|
|
|
619
|
-
# # Check addons
|
|
620
|
-
console.print('\n:wrench: [bold gold3]Checking installed addons ...[/]')
|
|
621
|
-
table = get_health_table()
|
|
622
|
-
with Live(table, console=console):
|
|
623
|
-
for addon in ['worker', 'google', 'mongodb', 'redis', 'dev', 'trace', 'build']:
|
|
624
|
-
addon_var = ADDONS_ENABLED[addon]
|
|
625
|
-
info = {
|
|
626
|
-
'name': addon,
|
|
627
|
-
'version': None,
|
|
628
|
-
'status': 'ok' if addon_var else 'missing',
|
|
629
|
-
'latest_version': None,
|
|
630
|
-
'installed': addon_var,
|
|
631
|
-
'location': None
|
|
632
|
-
}
|
|
633
|
-
row = fmt_health_table_row(info, 'addons')
|
|
634
|
-
table.add_row(*row)
|
|
635
|
-
status['addons'][addon] = info
|
|
636
|
-
|
|
637
637
|
# Print JSON health
|
|
638
638
|
if json:
|
|
639
639
|
import json as _json
|
|
@@ -6,11 +6,14 @@ from typing_extensions import Annotated, Self
|
|
|
6
6
|
|
|
7
7
|
import requests
|
|
8
8
|
import yaml
|
|
9
|
+
from dotenv import find_dotenv, load_dotenv
|
|
9
10
|
from dotmap import DotMap
|
|
10
11
|
from pydantic import AfterValidator, BaseModel, model_validator, ValidationError
|
|
11
12
|
|
|
12
13
|
from secator.rich import console, console_stdout
|
|
13
14
|
|
|
15
|
+
load_dotenv(find_dotenv(usecwd=True), override=False)
|
|
16
|
+
|
|
14
17
|
Directory = Annotated[Path, AfterValidator(lambda v: v.expanduser())]
|
|
15
18
|
StrExpandHome = Annotated[str, AfterValidator(lambda v: v.replace('~', str(Path.home())))]
|
|
16
19
|
|
|
@@ -245,9 +248,9 @@ class Config(DotMap):
|
|
|
245
248
|
value = float(value)
|
|
246
249
|
elif isinstance(existing_value, Path):
|
|
247
250
|
value = Path(value)
|
|
248
|
-
except ValueError
|
|
249
|
-
from secator.utils import debug
|
|
250
|
-
debug(f'Could not cast value {value} to expected type {type(existing_value).__name__}: {str(e)}', sub='config')
|
|
251
|
+
except ValueError:
|
|
252
|
+
# from secator.utils import debug
|
|
253
|
+
# debug(f'Could not cast value {value} to expected type {type(existing_value).__name__}: {str(e)}', sub='config')
|
|
251
254
|
pass
|
|
252
255
|
finally:
|
|
253
256
|
target[final_key] = value
|
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
4
|
|
|
5
|
-
from dotenv import find_dotenv, load_dotenv
|
|
6
5
|
from importlib.metadata import version
|
|
7
6
|
|
|
8
7
|
from secator.config import CONFIG, ROOT_FOLDER
|
|
9
8
|
|
|
10
|
-
load_dotenv(find_dotenv(usecwd=True), override=False)
|
|
11
9
|
|
|
12
10
|
# Globals
|
|
13
11
|
VERSION = version('secator')
|
|
@@ -105,56 +103,30 @@ WORDLIST = 'wordlist'
|
|
|
105
103
|
WORDS = 'words'
|
|
106
104
|
|
|
107
105
|
|
|
106
|
+
def is_importable(module_to_import):
|
|
107
|
+
import importlib
|
|
108
|
+
try:
|
|
109
|
+
importlib.import_module(module_to_import)
|
|
110
|
+
return True
|
|
111
|
+
except ModuleNotFoundError:
|
|
112
|
+
return False
|
|
113
|
+
except Exception as e:
|
|
114
|
+
print(f'Failed trying to import {module_to_import}: {str(e)}')
|
|
115
|
+
return False
|
|
116
|
+
|
|
117
|
+
|
|
108
118
|
ADDONS_ENABLED = {}
|
|
109
119
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
ADDONS_ENABLED['google'] = True
|
|
121
|
-
except ModuleNotFoundError:
|
|
122
|
-
ADDONS_ENABLED['google'] = False
|
|
123
|
-
|
|
124
|
-
# Check mongodb addon
|
|
125
|
-
try:
|
|
126
|
-
import pymongo # noqa: F401
|
|
127
|
-
ADDONS_ENABLED['mongodb'] = True
|
|
128
|
-
except ModuleNotFoundError:
|
|
129
|
-
ADDONS_ENABLED['mongodb'] = False
|
|
130
|
-
|
|
131
|
-
# Check redis addon
|
|
132
|
-
try:
|
|
133
|
-
import redis # noqa: F401
|
|
134
|
-
ADDONS_ENABLED['redis'] = True
|
|
135
|
-
except ModuleNotFoundError:
|
|
136
|
-
ADDONS_ENABLED['redis'] = False
|
|
137
|
-
|
|
138
|
-
# Check dev addon
|
|
139
|
-
try:
|
|
140
|
-
import flake8 # noqa: F401
|
|
141
|
-
ADDONS_ENABLED['dev'] = True
|
|
142
|
-
except ModuleNotFoundError:
|
|
143
|
-
ADDONS_ENABLED['dev'] = False
|
|
144
|
-
|
|
145
|
-
# Check build addon
|
|
146
|
-
try:
|
|
147
|
-
import hatch # noqa: F401
|
|
148
|
-
ADDONS_ENABLED['build'] = True
|
|
149
|
-
except ModuleNotFoundError:
|
|
150
|
-
ADDONS_ENABLED['build'] = False
|
|
151
|
-
|
|
152
|
-
# Check trace addon
|
|
153
|
-
try:
|
|
154
|
-
import memray # noqa: F401
|
|
155
|
-
ADDONS_ENABLED['trace'] = True
|
|
156
|
-
except ModuleNotFoundError:
|
|
157
|
-
ADDONS_ENABLED['trace'] = False
|
|
120
|
+
for addon, module in [
|
|
121
|
+
('worker', 'eventlet'),
|
|
122
|
+
('google', 'gspread'),
|
|
123
|
+
('mongodb', 'pymongo'),
|
|
124
|
+
('redis', 'redis'),
|
|
125
|
+
('dev', 'flake8'),
|
|
126
|
+
('trace', 'memray'),
|
|
127
|
+
('build', 'hatch')
|
|
128
|
+
]:
|
|
129
|
+
ADDONS_ENABLED[addon] = is_importable(module)
|
|
158
130
|
|
|
159
131
|
# Check dev package
|
|
160
132
|
if os.path.exists(f'{ROOT_FOLDER}/pyproject.toml'):
|
|
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
|