MCPcopy Create free account
hub / github.com/blacklanternsecurity/bbot / preload

Method preload

bbot/core/modules.py:117–218  ·  view source on GitHub ↗

Preloads all BBOT modules. This function recursively iterates through each file in the module directories and preloads each BBOT module to gather its meta-information and dependencies. Args: module_dir (str or Path): Directory containing BBOT modules to be prelo

(self, module_dirs=None)

Source from the content-addressed store, hash-verified

115 return file.suffix.lower() == ".py" and file.stem not in ["base", "__init__"]
116
117 def preload(self, module_dirs=None):
118 """Preloads all BBOT modules.
119
120 This function recursively iterates through each file in the module directories
121 and preloads each BBOT module to gather its meta-information and dependencies.
122
123 Args:
124 module_dir (str or Path): Directory containing BBOT modules to be preloaded.
125
126 Returns:
127 dict: A dictionary where keys are the names of the preloaded modules and
128 values are their respective preloaded data.
129
130 Examples:
131 >>> preload("/path/to/bbot_modules/")
132 {
133 "module1": {...},
134 "module2": {...},
135 ...
136 }
137 """
138 new_modules = False
139 if module_dirs is None:
140 module_dirs = self.module_dirs
141
142 for module_dir in module_dirs:
143 if module_dir in self._module_dirs_preloaded:
144 log.debug(f"Already preloaded modules from {module_dir}")
145 continue
146
147 log.debug(f"Preloading modules from {module_dir}")
148 new_modules = True
149 for module_file in list_files(module_dir, filter=self.file_filter):
150 module_name = module_file.stem
151 module_file = module_file.resolve()
152
153 # try to load from cache
154 module_cache_key = (str(module_file), tuple(module_file.stat()))
155 preloaded = self.preload_cache.get(module_name, {})
156 cache_key = preloaded.get("cache_key", ())
157 if preloaded and module_cache_key == cache_key:
158 log.debug(f"Preloading {module_name} from cache")
159 else:
160 log.debug(f"Preloading {module_name} from disk")
161 if module_dir.name == "modules":
162 namespace = "bbot.modules"
163 else:
164 namespace = f"bbot.modules.{module_dir.name}"
165 try:
166 preloaded = self.preload_module(module_file)
167 if preloaded is None:
168 continue
169 module_type = "scan"
170 if module_dir.name in ("output", "internal"):
171 module_type = str(module_dir.name)
172
173 disable_auto_module_deps = preloaded.get("disable_auto_module_deps", False)
174

Callers 2

add_module_dirMethod · 0.95
addFunction · 0.80

Calls 11

preload_moduleMethod · 0.95
configsMethod · 0.95
log_to_stderrFunction · 0.90
list_filesFunction · 0.85
setFunction · 0.85
merge_defaultMethod · 0.80
debugMethod · 0.45
resolveMethod · 0.45
getMethod · 0.45
addMethod · 0.45
updateMethod · 0.45

Tested by

no test coverage detected