From 7098671ad5e887125ed8c977a58c2633dcd0468d Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Tue, 17 Oct 2017 20:19:39 +0100 Subject: [PATCH] Update to LOOT API v0.12.0 Significant changes include: - The logging interface has changed, a callback can now be set instead of an output file and verbosity, giving clients more control. - DatabaseInterface::EvalLists() has been removed. - SimpleMessage now has a condition field. --- CMakeLists.txt | 4 ++-- src/convenience.cpp | 10 +++++----- src/convenience.h | 10 +++++++--- src/main.cpp | 34 ++++++++++++++++++++-------------- src/test.py | 16 +++++++++------- 5 files changed, 43 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c597af7..91522ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,9 +50,9 @@ add_subdirectory(${PYBIND11_EXTRACTED_PATH}) ####################################### if (CMAKE_SYSTEM_NAME MATCHES "Windows") - set(LOOT_API_URL "https://github.com/loot/loot-api/releases/download/0.11.1/loot_api-0.11.1-0-g021a253_dev-win32.7z") + set(LOOT_API_URL "https://github.com/loot/loot-api/releases/download/0.12.0/loot_api-0.12.0-0-g42cacca_dev-win32.7z") else() - set(LOOT_API_URL "https://github.com/loot/loot-api/releases/download/0.11.1/loot-api.tar.xz") + set(LOOT_API_URL "https://github.com/loot/loot-api/releases/download/0.12.0/loot-api.tar.xz") endif() ExternalProject_Add(loot-api-c++ diff --git a/src/convenience.cpp b/src/convenience.cpp index 2d58786..a7cc184 100644 --- a/src/convenience.cpp +++ b/src/convenience.cpp @@ -32,10 +32,10 @@ std::shared_ptr CreateDatabase(const GameType game, const std return gameHandle->GetDatabase(); } -PluginTags GetPluginTags(const std::shared_ptr db, const std::string& plugin) { +PluginTags GetPluginTags(const std::shared_ptr db, const std::string& plugin, bool evaluateConditions) { PluginTags tags; - auto metadata = db->GetPluginMetadata(plugin, false, false); + auto metadata = db->GetPluginMetadata(plugin, false, evaluateConditions); for (const auto &tag : metadata.GetTags()) { if (tag.IsAddition()) tags.added.insert(tag.GetName()); @@ -43,7 +43,7 @@ PluginTags GetPluginTags(const std::shared_ptr db, const std: tags.removed.insert(tag.GetName()); } - metadata = db->GetPluginUserMetadata(plugin, false); + metadata = db->GetPluginUserMetadata(plugin, evaluateConditions); tags.userlist_modified = !metadata.GetTags().empty(); for (const auto &tag : metadata.GetTags()) { if (tag.IsAddition()) @@ -55,8 +55,8 @@ PluginTags GetPluginTags(const std::shared_ptr db, const std: return tags; } -PluginCleanliness GetPluginCleanliness(const std::shared_ptr db, const std::string& plugin) { - auto metadata = db->GetPluginMetadata(plugin, true, false); +PluginCleanliness GetPluginCleanliness(const std::shared_ptr db, const std::string& plugin, bool evaluateConditions) { + auto metadata = db->GetPluginMetadata(plugin, true, evaluateConditions); if (metadata.GetDirtyInfo().empty()) { if (metadata.GetCleanInfo().empty()) { diff --git a/src/convenience.h b/src/convenience.h index b19484a..08d2a60 100644 --- a/src/convenience.h +++ b/src/convenience.h @@ -38,9 +38,13 @@ std::shared_ptr CreateDatabase(const GameType game, const std::string& game_path = "", const std::string& game_local_path = ""); -PluginTags GetPluginTags(const std::shared_ptr db, const std::string& plugin); +PluginTags GetPluginTags(const std::shared_ptr db, + const std::string& plugin, + bool evaluateConditions = false); -PluginCleanliness GetPluginCleanliness(const std::shared_ptr db, const std::string& plugin); +PluginCleanliness GetPluginCleanliness(const std::shared_ptr db, + const std::string& plugin, + bool evaluateConditions = false); } -#endif \ No newline at end of file +#endif diff --git a/src/main.cpp b/src/main.cpp index e7431a5..0237df7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include "convenience.h" #include "wrapper_version.h" @@ -44,10 +45,13 @@ void bindEnums(pybind11::module& module) { .value("fonv", GameType::fonv) .value("fo4", GameType::fo4); - enum_(module, "LogVerbosity") - .value("off", LogVerbosity::off) - .value("trace", LogVerbosity::trace) - .value("warning", LogVerbosity::warning); + enum_(module, "LogLevel") + .value("trace", LogLevel::trace) + .value("debug", LogLevel::debug) + .value("info", LogLevel::info) + .value("warning", LogLevel::warning) + .value("error", LogLevel::error) + .value("fatal", LogLevel::fatal); enum_(module, "MessageType") .value("say", MessageType::say) @@ -70,7 +74,8 @@ void bindMetadataClasses(pybind11::module& module) { class_(module, "SimpleMessage") .def_readwrite("type", &SimpleMessage::type) .def_readwrite("language", &SimpleMessage::language) - .def_readwrite("text", &SimpleMessage::text); + .def_readwrite("text", &SimpleMessage::text) + .def_readwrite("condition", &SimpleMessage::condition); class_(module, "PluginTags") .def_readwrite("added", &PluginTags::added) @@ -100,15 +105,18 @@ void bindVersionClasses(pybind11::module& module) { void bindInterfaceClasses(pybind11::module& module) { class_>(module, "DatabaseInterface") .def("load_lists", &DatabaseInterface::LoadLists, arg("masterlist_path"), arg("userlist_path") = "") - .def("eval_lists", &DatabaseInterface::EvalLists) .def("update_masterlist", &DatabaseInterface::UpdateMasterlist) .def("get_masterlist_revision", &DatabaseInterface::GetMasterlistRevision) .def("get_plugin_metadata", &DatabaseInterface::GetPluginMetadata, - arg("plugin"), - arg("includeUserMetadata") = true, - arg("evaluateConditions") = false) - .def("get_plugin_tags", &GetPluginTags) - .def("get_plugin_cleanliness", &GetPluginCleanliness) + arg("plugin"), + arg("includeUserMetadata") = true, + arg("evaluateConditions") = false) + .def("get_plugin_tags", &GetPluginTags, + arg("plugin"), + arg("evaluateConditions") = false) + .def("get_plugin_cleanliness", &GetPluginCleanliness, + arg("plugin"), + arg("evaluateConditions") = false) .def("write_minimal_list", &DatabaseInterface::WriteMinimalList); } @@ -119,9 +127,7 @@ void bindClasses(pybind11::module& module) { } void bindFunctions(pybind11::module& module) { - module.def("set_logging_verbosity", &SetLoggingVerbosity); - - module.def("set_log_file", &SetLogFile); + module.def("set_logging_callback", &SetLoggingCallback); module.def("is_compatible", &IsCompatible); diff --git a/src/test.py b/src/test.py index 40b68b4..f49b8f8 100644 --- a/src/test.py +++ b/src/test.py @@ -7,15 +7,17 @@ import unittest from loot_api import Version from loot_api import WrapperVersion from loot_api import GameType -from loot_api import LogVerbosity from loot_api import SimpleMessage from loot_api import MessageType from loot_api import create_database from loot_api import is_compatible -from loot_api import set_logging_verbosity +from loot_api import set_logging_callback from loot_api import initialise_locale -set_logging_verbosity(LogVerbosity.off) +def logging_callback(level, message): + pass + +set_logging_callback(logging_callback) initialise_locale("") class GameFixture(unittest.TestCase): @@ -38,14 +40,14 @@ class GameFixture(unittest.TestCase): class TestLootApi(GameFixture): def test_is_compatible(self): self.assertFalse(is_compatible(0, 9, 0)) - self.assertTrue(is_compatible(0, 11, 0)) + self.assertTrue(is_compatible(0, 12, 0)) def test_version(self): self.assertEqual(Version.major, 0) - self.assertEqual(Version.minor, 11) - self.assertEqual(Version.patch, 1) + self.assertEqual(Version.minor, 12) + self.assertEqual(Version.patch, 0) self.assertNotEqual(Version.revision, u'') - self.assertEqual(Version.string(), "0.11.1") + self.assertEqual(Version.string(), "0.12.0") def test_wrapper_version(self): self.assertEqual(WrapperVersion.major, 2)