From ed387d9284e791636f769749a71f9414f5c986cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Capelle?= Date: Sun, 30 Jun 2024 15:19:04 +0200 Subject: [PATCH] Switch VersionInfo -> Version for ModOrganizer2. --- src/mobase/wrappers/basic_classes.cpp | 55 ++++++++++++++++++++++++++- tests/mocks/MockOrganizer.h | 1 + tests/python/CMakeLists.txt | 1 + 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/mobase/wrappers/basic_classes.cpp b/src/mobase/wrappers/basic_classes.cpp index c594362..772ea37 100644 --- a/src/mobase/wrappers/basic_classes.cpp +++ b/src/mobase/wrappers/basic_classes.cpp @@ -33,6 +33,49 @@ namespace mo2::python { void add_versioninfo_classes(py::module_ m) { + // Version + py::class_ pyVersion(m, "Version"); + + py::enum_(pyVersion, "ReleaseType") + .value("DEVELOPMENT", Version::Development) + .value("ALPHA", Version::Alpha) + .value("BETA", Version::Beta) + .value("RELEASE_CANDIDATE", Version::ReleaseCandidate) + .export_values(); + + py::enum_(pyVersion, "ParseMode") + .value("SEMVER", Version::ParseMode::SemVer) + .value("MO2", Version::ParseMode::MO2); + + pyVersion + .def_static("parse", &Version::parse, "value"_a, + "mode"_a = Version::ParseMode::SemVer) + .def(py::init(), "major"_a, "minor"_a, "patch"_a, + "metadata"_a = "") + .def(py::init(), "major"_a, + "minor"_a, "patch"_a, "type"_a, "metadata"_a = "") + .def(py::init(), + "major"_a, "minor"_a, "patch"_a, "type"_a, "prerelease"_a, + "metadata"_a = "") + .def(py::init>, + QString>(), + "major"_a, "minor"_a, "patch"_a, "pre_releases"_a, "metadata"_a = "") + .def("isPreRelease", &Version::isPreRelease) + .def_property_readonly("major", &Version::major) + .def_property_readonly("minor", &Version::minor) + .def_property_readonly("patch", &Version::patch) + .def_property_readonly("prerelease", &Version::preReleases) + .def_property_readonly("build_metadata", &Version::buildMetadata) + .def("__str__", &Version::string) + .def(py::self < py::self) + .def(py::self > py::self) + .def(py::self <= py::self) + .def(py::self >= py::self) + .def(py::self != py::self) + .def(py::self == py::self); + + // VersionInfo py::enum_(m, "ReleaseType") .value("final", MOBase::VersionInfo::RELEASE_FINAL) .value("candidate", MOBase::VersionInfo::RELEASE_CANDIDATE) @@ -447,7 +490,17 @@ namespace mo2::python { .def("overwritePath", &IOrganizer::overwritePath) .def("basePath", &IOrganizer::basePath) .def("modsPath", &IOrganizer::modsPath) - .def("appVersion", &IOrganizer::appVersion) + .def("appVersion", + [](IOrganizer& o) { + mo2::python::show_deprecation_warning( + "appVersion", "IOrganizer::appVersion() is deprecated, use " + "IOrganizer::version() instead."); +#pragma warning(push) +#pragma warning(disable : 4996) + return o.appVersion(); +#pragma warning(pop) + }) + .def("version", &IOrganizer::version) .def("createMod", &IOrganizer::createMod, py::return_value_policy::reference, "name"_a) .def("getGame", &IOrganizer::getGame, py::return_value_policy::reference, diff --git a/tests/mocks/MockOrganizer.h b/tests/mocks/MockOrganizer.h index 5ef98e8..b527833 100644 --- a/tests/mocks/MockOrganizer.h +++ b/tests/mocks/MockOrganizer.h @@ -14,6 +14,7 @@ class MockOrganizer : public IOrganizer { MOCK_METHOD(QString, basePath, (), (const, override)); MOCK_METHOD(QString, modsPath, (), (const, override)); MOCK_METHOD(VersionInfo, appVersion, (), (const, override)); + MOCK_METHOD(Version, version, (), (const, override)); MOCK_METHOD(IModInterface*, createMod, (GuessedValue &name), (override)); MOCK_METHOD(IPluginGame*, getGame, (const QString &gameName), (const, override)); MOCK_METHOD(void, modDataChanged, (IModInterface *mod), (override)); diff --git a/tests/python/CMakeLists.txt b/tests/python/CMakeLists.txt index 3e80a54..15db707 100644 --- a/tests/python/CMakeLists.txt +++ b/tests/python/CMakeLists.txt @@ -44,6 +44,7 @@ foreach (test_file ${test_files}) pybind11_add_module(${target} EXCLUDE_FROM_ALL THIN_LTO ${test_file}) set_target_properties(${target} PROPERTIES + CXX_STANDARD 20 OUTPUT_NAME ${pymodule} FOLDER tests/python LIBRARY_OUTPUT_DIRECTORY "${PYLIB_DIR}/mobase_tests")