Source code for datumaro.plugins.specs
# Copyright (C) 2023 Intel Corporation
#
# SPDX-License-Identifier: MIT
from pathlib import Path
from datumaro.components.lazy_plugin import get_extra_deps, get_lazy_plugin
from datumaro.util import parse_json_file
_SOURCE_PATH = Path(__file__).resolve()
_SOURCE_DIR = _SOURCE_PATH.parent
_SPECS_JSON_PATH = _SOURCE_DIR / "specs.json"
[docs]
def get_lazy_plugins():
return [
plugin
for plugin in [
get_lazy_plugin(
spec["import_path"],
spec["plugin_name"],
spec["plugin_type"],
spec.get("extra_deps", []),
spec.get("metadata", {}),
)
for spec in parse_json_file(str(_SPECS_JSON_PATH))
]
if plugin is not None
]
if __name__ == "__main__":
from datumaro.components.environment import Environment
from datumaro.util import dump_json_file
env = Environment(use_lazy_import=False)
plugin_specs = []
def _enroll_to_plugin_specs(plugins, plugin_type):
global plugin_specs
for _, plugin in plugins.items():
mod = plugin.__module__
class_name = plugin.__name__
plugin_name = plugin.NAME
extra_deps = get_extra_deps(plugin)
plugin_spec = {
"import_path": f"{mod}.{class_name}",
"plugin_name": plugin_name,
"plugin_type": plugin_type,
}
if extra_deps:
plugin_spec["extra_deps"] = extra_deps
# Setting metadata for importers
if hasattr(plugin, "get_file_extensions"):
plugin_spec["metadata"] = {"file_extensions": sorted(plugin.get_file_extensions())}
plugin_specs.append(plugin_spec)
_enroll_to_plugin_specs(env.extractors, "DatasetBase")
_enroll_to_plugin_specs(env.importers, "Importer")
_enroll_to_plugin_specs(env.launchers, "Launcher")
_enroll_to_plugin_specs(env.exporters, "Exporter")
_enroll_to_plugin_specs(env.generators, "DatasetGenerator")
_enroll_to_plugin_specs(env.transforms, "Transform")
_enroll_to_plugin_specs(env.validators, "Validator")
dump_json_file(
_SPECS_JSON_PATH,
sorted(plugin_specs, key=lambda spec: spec["import_path"]),
indent=True,
append_newline=True,
)