mirror of
https://github.com/mvt-project/mvt.git
synced 2026-09-03 00:21:07 +02:00
* Add the mvt.plugin import surface mvt.plugin re-exports the names a plugin needs from MVT under one import path. It holds the module base classes and Command, the alert and result types, the database errors a module raises, the timestamp converters, the plugin settings API, MVT's settings, get_plugin_logger() and MVT_VERSION. The names it exports are kept working on a best-effort basis. Changes to them are announced in the release notes. Anything else in mvt can still be imported, and may change between releases without notice. get_plugin_logger(__name__) returns a logger under mvt.ext for plugin code outside a module class. Its records then reach the console and the command.log file of a run. A file loaded with --load-module or --load-command is named after the file. * Document how to write MVT plugins The custom modules page now leads with plugin packages. Loading module files with --load-module and MVT_CUSTOM_MODULES moves to a section on developing a module locally. A new "Writing a module" section shows a module which subclasses IOSExtraction. It lists each base class, the command pair it serves and the helpers it provides. "Depending on a built-in module" says to import a built-in class from its family package. "Importing from MVT" says what mvt.plugin exports and what importing from it means. The custom commands page shows a Command subclass which lists its own modules. The sysdiagnose and plugin configuration pages import from mvt.plugin.
35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
# Mobile Verification Toolkit (MVT)
|
|
# Copyright (c) 2021-2026 The MVT Authors.
|
|
# Use of this software is governed by the MVT License 1.1 that can be found at
|
|
# https://license.mvt.re/1.1/
|
|
|
|
import mvt.plugin
|
|
from mvt.android.modules.backup.base import BackupModule
|
|
from mvt.common.config import settings
|
|
|
|
from ..plugin_fixtures import run_isolated_python
|
|
|
|
|
|
def test_the_exported_names_are_the_public_names():
|
|
public = {name for name in vars(mvt.plugin) if not name.startswith("_")}
|
|
|
|
assert public == set(mvt.plugin.__all__)
|
|
assert mvt.plugin.settings is settings
|
|
assert mvt.plugin.AndroidBackupModule is BackupModule
|
|
|
|
|
|
def test_the_surface_imports_before_anything_else_of_mvt(tmp_path):
|
|
# A plugin can import the surface as its first import of MVT. The
|
|
# subprocess gets a temporary home because importing MVT writes its
|
|
# configuration file.
|
|
result = run_isolated_python(
|
|
"from mvt.plugin import IOSExtraction, MVT_VERSION, settings\n"
|
|
"assert MVT_VERSION\n"
|
|
"assert settings.NETWORK_TIMEOUT > 0\n"
|
|
"assert IOSExtraction.__name__ == 'IOSExtraction'\n",
|
|
home=tmp_path,
|
|
)
|
|
|
|
assert result.returncode == 0, result.stderr
|
|
assert result.stderr == ""
|