Skip to content

Commit ed387d9

Browse files
committed
Switch VersionInfo -> Version for ModOrganizer2.
1 parent 6623e19 commit ed387d9

File tree

3 files changed

+56
-1
lines changed

3 files changed

+56
-1
lines changed

src/mobase/wrappers/basic_classes.cpp

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,49 @@ namespace mo2::python {
3333

3434
void add_versioninfo_classes(py::module_ m)
3535
{
36+
// Version
37+
py::class_<Version> pyVersion(m, "Version");
38+
39+
py::enum_<Version::ReleaseType>(pyVersion, "ReleaseType")
40+
.value("DEVELOPMENT", Version::Development)
41+
.value("ALPHA", Version::Alpha)
42+
.value("BETA", Version::Beta)
43+
.value("RELEASE_CANDIDATE", Version::ReleaseCandidate)
44+
.export_values();
45+
46+
py::enum_<Version::ParseMode>(pyVersion, "ParseMode")
47+
.value("SEMVER", Version::ParseMode::SemVer)
48+
.value("MO2", Version::ParseMode::MO2);
49+
50+
pyVersion
51+
.def_static("parse", &Version::parse, "value"_a,
52+
"mode"_a = Version::ParseMode::SemVer)
53+
.def(py::init<int, int, int, QString>(), "major"_a, "minor"_a, "patch"_a,
54+
"metadata"_a = "")
55+
.def(py::init<int, int, int, Version::ReleaseType, QString>(), "major"_a,
56+
"minor"_a, "patch"_a, "type"_a, "metadata"_a = "")
57+
.def(py::init<int, int, int, Version::ReleaseType, int, QString>(),
58+
"major"_a, "minor"_a, "patch"_a, "type"_a, "prerelease"_a,
59+
"metadata"_a = "")
60+
.def(py::init<int, int, int,
61+
std::vector<std::variant<int, Version::ReleaseType>>,
62+
QString>(),
63+
"major"_a, "minor"_a, "patch"_a, "pre_releases"_a, "metadata"_a = "")
64+
.def("isPreRelease", &Version::isPreRelease)
65+
.def_property_readonly("major", &Version::major)
66+
.def_property_readonly("minor", &Version::minor)
67+
.def_property_readonly("patch", &Version::patch)
68+
.def_property_readonly("prerelease", &Version::preReleases)
69+
.def_property_readonly("build_metadata", &Version::buildMetadata)
70+
.def("__str__", &Version::string)
71+
.def(py::self < py::self)
72+
.def(py::self > py::self)
73+
.def(py::self <= py::self)
74+
.def(py::self >= py::self)
75+
.def(py::self != py::self)
76+
.def(py::self == py::self);
77+
78+
// VersionInfo
3679
py::enum_<MOBase::VersionInfo::ReleaseType>(m, "ReleaseType")
3780
.value("final", MOBase::VersionInfo::RELEASE_FINAL)
3881
.value("candidate", MOBase::VersionInfo::RELEASE_CANDIDATE)
@@ -447,7 +490,17 @@ namespace mo2::python {
447490
.def("overwritePath", &IOrganizer::overwritePath)
448491
.def("basePath", &IOrganizer::basePath)
449492
.def("modsPath", &IOrganizer::modsPath)
450-
.def("appVersion", &IOrganizer::appVersion)
493+
.def("appVersion",
494+
[](IOrganizer& o) {
495+
mo2::python::show_deprecation_warning(
496+
"appVersion", "IOrganizer::appVersion() is deprecated, use "
497+
"IOrganizer::version() instead.");
498+
#pragma warning(push)
499+
#pragma warning(disable : 4996)
500+
return o.appVersion();
501+
#pragma warning(pop)
502+
})
503+
.def("version", &IOrganizer::version)
451504
.def("createMod", &IOrganizer::createMod,
452505
py::return_value_policy::reference, "name"_a)
453506
.def("getGame", &IOrganizer::getGame, py::return_value_policy::reference,

tests/mocks/MockOrganizer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class MockOrganizer : public IOrganizer {
1414
MOCK_METHOD(QString, basePath, (), (const, override));
1515
MOCK_METHOD(QString, modsPath, (), (const, override));
1616
MOCK_METHOD(VersionInfo, appVersion, (), (const, override));
17+
MOCK_METHOD(Version, version, (), (const, override));
1718
MOCK_METHOD(IModInterface*, createMod, (GuessedValue<QString> &name), (override));
1819
MOCK_METHOD(IPluginGame*, getGame, (const QString &gameName), (const, override));
1920
MOCK_METHOD(void, modDataChanged, (IModInterface *mod), (override));

tests/python/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ foreach (test_file ${test_files})
4444
pybind11_add_module(${target} EXCLUDE_FROM_ALL THIN_LTO ${test_file})
4545
set_target_properties(${target}
4646
PROPERTIES
47+
CXX_STANDARD 20
4748
OUTPUT_NAME ${pymodule}
4849
FOLDER tests/python
4950
LIBRARY_OUTPUT_DIRECTORY "${PYLIB_DIR}/mobase_tests")

0 commit comments

Comments
 (0)