kopia lustrzana https://github.com/bellingcat/auto-archiver
64 wiersze
1.9 KiB
Python
64 wiersze
1.9 KiB
Python
import json
|
|
import os
|
|
import io
|
|
|
|
from ruamel.yaml import YAML
|
|
|
|
from auto_archiver.core.module import ModuleFactory
|
|
from auto_archiver.core.consts import MODULE_TYPES
|
|
from auto_archiver.core.config import EMPTY_CONFIG
|
|
|
|
|
|
class SchemaEncoder(json.JSONEncoder):
|
|
def default(self, obj):
|
|
if isinstance(obj, set):
|
|
return list(obj)
|
|
return json.JSONEncoder.default(self, obj)
|
|
|
|
|
|
# Get available modules
|
|
module_factory = ModuleFactory()
|
|
available_modules = module_factory.available_modules()
|
|
|
|
modules_by_type = {}
|
|
# Categorize modules by type
|
|
for module in available_modules:
|
|
for type in module.manifest.get("type", []):
|
|
modules_by_type.setdefault(type, []).append(module)
|
|
|
|
all_modules_ordered_by_type = sorted(
|
|
available_modules, key=lambda x: (MODULE_TYPES.index(x.type[0]), not x.requires_setup)
|
|
)
|
|
|
|
yaml: YAML = YAML()
|
|
|
|
config_string = io.BytesIO()
|
|
yaml.dump(EMPTY_CONFIG, config_string)
|
|
config_string = config_string.getvalue().decode("utf-8")
|
|
output_schema = {
|
|
"modules": dict(
|
|
(
|
|
module.name,
|
|
{
|
|
"name": module.name,
|
|
"display_name": module.display_name,
|
|
"manifest": module.manifest,
|
|
"configs": module.configs or None,
|
|
},
|
|
)
|
|
for module in all_modules_ordered_by_type
|
|
),
|
|
"steps": dict(
|
|
(f"{module_type}s", [module.name for module in modules_by_type[module_type]]) for module_type in MODULE_TYPES
|
|
),
|
|
"configs": [m.name for m in all_modules_ordered_by_type if m.configs],
|
|
"module_types": MODULE_TYPES,
|
|
"empty_config": config_string,
|
|
}
|
|
|
|
current_file_dir = os.path.dirname(os.path.abspath(__file__))
|
|
output_file = os.path.join(current_file_dir, "settings/src/schema.json")
|
|
with open(output_file, "w") as file:
|
|
print(f"Writing schema to {output_file}")
|
|
json.dump(output_schema, file, indent=4, cls=SchemaEncoder)
|