libcalamares: move Python module-definitions to the Job

This commit is contained in:
Adriaan de Groot 2023-10-24 15:29:07 +02:00
parent 3ffa4f5bf6
commit da0ce1d3d6
2 changed files with 96 additions and 101 deletions

View File

@ -9,7 +9,6 @@
*/ */
#include "python/Api.h" #include "python/Api.h"
#include "CalamaresVersion.h"
#include "GlobalStorage.h" #include "GlobalStorage.h"
#include "JobQueue.h" #include "JobQueue.h"
#include "compat/Variant.h" #include "compat/Variant.h"
@ -577,103 +576,3 @@ GlobalStorageProxy::value( const std::string& key ) const
} // namespace Python } // namespace Python
} // namespace Calamares } // namespace Calamares
// Not using EMBEDDED_MODULE because that does not let
// use use name "libcalamares.utils" and using just "utils"
// causes command-line use of Python3 followed by `import libcalamares`
// to crash with an error about adding modules after the interpreter
// has been initialized.
static void
populate_utils( py::module_& m )
{
m.def( "obscure", &Calamares::Python::obscure, "A function that obscures (encodes) a string" );
m.def( "debug", &Calamares::Python::debug, "Log a debug-message" );
m.def( "warn", &Calamares::Python::warning, "Log a warning-message" );
m.def( "warning", &Calamares::Python::warning, "Log a warning-message" );
m.def( "error", &Calamares::Python::error, "Log an error-message" );
m.def( "load_yaml", &Calamares::Python::load_yaml, "Loads YAML from a file." );
m.def( "target_env_call",
&Calamares::Python::target_env_call,
"Runs command in target, returns exit code.",
py::arg( "command_list" ),
py::arg( "input" ) = std::string(),
py::arg( "timeout" ) = 0 );
m.def( "check_target_env_call",
&Calamares::Python::check_target_env_call,
"Runs command in target, raises on error exit.",
py::arg( "command_list" ),
py::arg( "input" ) = std::string(),
py::arg( "timeout" ) = 0 );
m.def( "check_target_env_output",
&Calamares::Python::check_target_env_output,
"Runs command in target, returns standard output or raises on error.",
py::arg( "command_list" ),
py::arg( "input" ) = std::string(),
py::arg( "timeout" ) = 0 );
m.def( "target_env_process_output",
&Calamares::Python::target_env_process_output,
"Runs command in target, updating callback and returns standard output or raises on error.",
py::arg( "command_list" ),
py::arg( "callback" ) = pybind11::none(),
py::arg( "input" ) = std::string(),
py::arg( "timeout" ) = 0 );
m.def( "host_env_process_output",
&Calamares::Python::host_env_process_output,
"Runs command in target, updating callback and returns standard output or raises on error.",
py::arg( "command_list" ),
py::arg( "callback" ) = pybind11::none(),
py::arg( "input" ) = std::string(),
py::arg( "timeout" ) = 0 );
m.def( "gettext_languages",
&Calamares::Python::gettext_languages,
"Returns list of languages (most to least-specific) for gettext." );
m.def( "gettext_path", &Calamares::Python::gettext_path, "Returns path for gettext search." );
m.def( "mount",
&Calamares::Python::mount,
"Runs the mount utility with the specified parameters.\n"
"Returns the program's exit code, or:\n"
"-1 = QProcess crash\n"
"-2 = QProcess cannot start\n"
"-3 = bad arguments" );
}
static void
populate_libcalamares( py::module_& m )
{
m.doc() = "Calamares API for Python";
m.add_object( "ORGANIZATION_NAME", Calamares::Python::String( CALAMARES_ORGANIZATION_NAME ) );
m.add_object( "ORGANIZATION_DOMAIN", Calamares::Python::String( CALAMARES_ORGANIZATION_DOMAIN ) );
m.add_object( "APPLICATION_NAME", Calamares::Python::String( CALAMARES_APPLICATION_NAME ) );
m.add_object( "VERSION", Calamares::Python::String( CALAMARES_VERSION ) );
m.add_object( "VERSION_SHORT", Calamares::Python::String( CALAMARES_VERSION_SHORT ) );
auto utils = m.def_submodule( "utils", "Calamares Utility API for Python" );
populate_utils( utils );
py::class_< Calamares::Python::JobProxy >( m, "Job" )
.def_readonly( "module_name", &Calamares::Python::JobProxy::moduleName )
.def_readonly( "pretty_name", &Calamares::Python::JobProxy::prettyName )
.def_readonly( "working_path", &Calamares::Python::JobProxy::workingPath )
.def_readonly( "configuration", &Calamares::Python::JobProxy::configuration )
.def( "setprogress", &Calamares::Python::JobProxy::setprogress );
py::class_< Calamares::Python::GlobalStorageProxy >( m, "GlobalStorage" )
.def( py::init( []( std::nullptr_t p ) { return new Calamares::Python::GlobalStorageProxy( nullptr ); } ) )
.def( "contains", &Calamares::Python::GlobalStorageProxy::contains )
.def( "count", &Calamares::Python::GlobalStorageProxy::count )
.def( "insert", &Calamares::Python::GlobalStorageProxy::insert )
.def( "keys", &Calamares::Python::GlobalStorageProxy::keys )
.def( "remove", &Calamares::Python::GlobalStorageProxy::remove )
.def( "value", &Calamares::Python::GlobalStorageProxy::value );
}
PYBIND11_MODULE( libcalamares, m )
{
populate_libcalamares( m );
}

View File

@ -8,6 +8,7 @@
*/ */
#include "python/PythonJob.h" #include "python/PythonJob.h"
#include "CalamaresVersion.h"
#include "GlobalStorage.h" #include "GlobalStorage.h"
#include "JobQueue.h" #include "JobQueue.h"
#include "python/Api.h" #include "python/Api.h"
@ -74,6 +75,96 @@ getPrettyNameFromScope( const py::dict& scope )
return QString(); return QString();
} }
void
populate_utils( py::module_& m )
{
m.def( "obscure", &Calamares::Python::obscure, "A function that obscures (encodes) a string" );
m.def( "debug", &Calamares::Python::debug, "Log a debug-message" );
m.def( "warn", &Calamares::Python::warning, "Log a warning-message" );
m.def( "warning", &Calamares::Python::warning, "Log a warning-message" );
m.def( "error", &Calamares::Python::error, "Log an error-message" );
m.def( "load_yaml", &Calamares::Python::load_yaml, "Loads YAML from a file." );
m.def( "target_env_call",
&Calamares::Python::target_env_call,
"Runs command in target, returns exit code.",
py::arg( "command_list" ),
py::arg( "input" ) = std::string(),
py::arg( "timeout" ) = 0 );
m.def( "check_target_env_call",
&Calamares::Python::check_target_env_call,
"Runs command in target, raises on error exit.",
py::arg( "command_list" ),
py::arg( "input" ) = std::string(),
py::arg( "timeout" ) = 0 );
m.def( "check_target_env_output",
&Calamares::Python::check_target_env_output,
"Runs command in target, returns standard output or raises on error.",
py::arg( "command_list" ),
py::arg( "input" ) = std::string(),
py::arg( "timeout" ) = 0 );
m.def( "target_env_process_output",
&Calamares::Python::target_env_process_output,
"Runs command in target, updating callback and returns standard output or raises on error.",
py::arg( "command_list" ),
py::arg( "callback" ) = pybind11::none(),
py::arg( "input" ) = std::string(),
py::arg( "timeout" ) = 0 );
m.def( "host_env_process_output",
&Calamares::Python::host_env_process_output,
"Runs command in target, updating callback and returns standard output or raises on error.",
py::arg( "command_list" ),
py::arg( "callback" ) = pybind11::none(),
py::arg( "input" ) = std::string(),
py::arg( "timeout" ) = 0 );
m.def( "gettext_languages",
&Calamares::Python::gettext_languages,
"Returns list of languages (most to least-specific) for gettext." );
m.def( "gettext_path", &Calamares::Python::gettext_path, "Returns path for gettext search." );
m.def( "mount",
&Calamares::Python::mount,
"Runs the mount utility with the specified parameters.\n"
"Returns the program's exit code, or:\n"
"-1 = QProcess crash\n"
"-2 = QProcess cannot start\n"
"-3 = bad arguments" );
}
void
populate_libcalamares( py::module_& m )
{
m.doc() = "Calamares API for Python";
m.add_object( "ORGANIZATION_NAME", Calamares::Python::String( CALAMARES_ORGANIZATION_NAME ) );
m.add_object( "ORGANIZATION_DOMAIN", Calamares::Python::String( CALAMARES_ORGANIZATION_DOMAIN ) );
m.add_object( "APPLICATION_NAME", Calamares::Python::String( CALAMARES_APPLICATION_NAME ) );
m.add_object( "VERSION", Calamares::Python::String( CALAMARES_VERSION ) );
m.add_object( "VERSION_SHORT", Calamares::Python::String( CALAMARES_VERSION_SHORT ) );
auto utils = m.def_submodule( "utils", "Calamares Utility API for Python" );
populate_utils( utils );
py::class_< Calamares::Python::JobProxy >( m, "Job" )
.def_readonly( "module_name", &Calamares::Python::JobProxy::moduleName )
.def_readonly( "pretty_name", &Calamares::Python::JobProxy::prettyName )
.def_readonly( "working_path", &Calamares::Python::JobProxy::workingPath )
.def_readonly( "configuration", &Calamares::Python::JobProxy::configuration )
.def( "setprogress", &Calamares::Python::JobProxy::setprogress );
py::class_< Calamares::Python::GlobalStorageProxy >( m, "GlobalStorage" )
.def( py::init( []( std::nullptr_t p ) { return new Calamares::Python::GlobalStorageProxy( nullptr ); } ) )
.def( "contains", &Calamares::Python::GlobalStorageProxy::contains )
.def( "count", &Calamares::Python::GlobalStorageProxy::count )
.def( "insert", &Calamares::Python::GlobalStorageProxy::insert )
.def( "keys", &Calamares::Python::GlobalStorageProxy::keys )
.def( "remove", &Calamares::Python::GlobalStorageProxy::remove )
.def( "value", &Calamares::Python::GlobalStorageProxy::value );
}
} // namespace } // namespace
namespace Calamares namespace Calamares
@ -284,3 +375,8 @@ Job::setInjectedPreScript( const char* script )
} // namespace Python } // namespace Python
} // namespace Calamares } // namespace Calamares
PYBIND11_MODULE( libcalamares, m )
{
populate_libcalamares( m );
}