add all-in-one config options to defaultMMKV() for python

This commit is contained in:
guoling
2026-03-17 21:56:29 +08:00
parent d7f2324ae7
commit 588a95ef39
+45 -27
View File
@@ -32,6 +32,24 @@ using namespace mmkv;
using namespace std;
namespace py = pybind11;
static MMKVConfig pyArgsToConfig(MMKVMode mode, const string &cryptKey, const MMKVPath_t &rootDir,
size_t expectedCapacity, bool aes256, std::optional<bool> enableKeyExpire,
uint32_t expiredInSeconds, bool enableCompareBeforeSet,
std::optional<MMKVRecoverStrategic> recover, uint32_t itemSizeLimit) {
MMKVConfig config;
config.mode = mode;
config.aes256 = aes256;
config.cryptKey = (cryptKey.length() > 0) ? (string *) &cryptKey : nullptr;
config.rootPath = (rootDir.length() > 0) ? (MMKVPath_t *) &rootDir : nullptr;
config.expectedCapacity = expectedCapacity;
config.enableKeyExpire = enableKeyExpire;
config.expiredInSeconds = expiredInSeconds;
config.enableCompareBeforeSet = enableCompareBeforeSet;
config.recover = recover;
config.itemSizeLimit = itemSizeLimit;
return config;
}
static MMBuffer pyBytes2MMBuffer(const py::bytes &bytes) {
char *buffer = nullptr;
ssize_t length = 0;
@@ -102,17 +120,8 @@ PYBIND11_MODULE(mmkv, m) {
const size_t expectedCapacity, bool aes256, std::optional<bool> enableKeyExpire,
uint32_t expiredInSeconds, bool enableCompareBeforeSet,std::optional<MMKVRecoverStrategic> recover,
uint32_t itemSizeLimit) {
MMKVConfig config;
config.mode = mode;
config.aes256 = aes256;
config.cryptKey = (cryptKey.length() > 0) ? (string *) &cryptKey : nullptr;
config.rootPath = (!self.getRootDir().empty()) ? (MMKVPath_t *) &self.getRootDir() : nullptr;
config.expectedCapacity = expectedCapacity;
config.enableKeyExpire = enableKeyExpire;
config.expiredInSeconds = expiredInSeconds;
config.enableCompareBeforeSet = enableCompareBeforeSet;
config.recover = recover;
config.itemSizeLimit = itemSizeLimit;
auto config = pyArgsToConfig(mode, cryptKey, self.getRootDir(), expectedCapacity, aes256,
enableKeyExpire, expiredInSeconds, enableCompareBeforeSet, recover, itemSizeLimit);
return MMKV::mmkvWithID(mmapID, config);
},
"Parameters:\n"
@@ -167,17 +176,8 @@ PYBIND11_MODULE(mmkv, m) {
const size_t expectedCapacity, bool aes256, std::optional<bool> enableKeyExpire,
uint32_t expiredInSeconds, bool enableCompareBeforeSet,std::optional<MMKVRecoverStrategic> recover,
uint32_t itemSizeLimit) {
MMKVConfig config;
config.mode = mode;
config.aes256 = aes256;
config.cryptKey = (cryptKey.length() > 0) ? (string *) &cryptKey : nullptr;
config.rootPath = (rootDir.length() > 0) ? (MMKVPath_t *) &rootDir : nullptr;
config.expectedCapacity = expectedCapacity;
config.enableKeyExpire = enableKeyExpire;
config.expiredInSeconds = expiredInSeconds;
config.enableCompareBeforeSet = enableCompareBeforeSet;
config.recover = recover;
config.itemSizeLimit = itemSizeLimit;
auto config = pyArgsToConfig(mode, cryptKey, rootDir, expectedCapacity, aes256,
enableKeyExpire, expiredInSeconds, enableCompareBeforeSet, recover, itemSizeLimit);
return MMKV::mmkvWithID(mmapID, config);
}),
"Parameters:\n"
@@ -217,12 +217,30 @@ PYBIND11_MODULE(mmkv, m) {
clsMMKV.def_static(
"defaultMMKV",
[](MMKVMode mode, const string &cryptKey, bool aes256) {
string *cryptKeyPtr = (cryptKey.length() > 0) ? (string *) &cryptKey : nullptr;
return MMKV::defaultMMKV(mode, cryptKeyPtr, aes256);
[](MMKVMode mode, const string &cryptKey, bool aes256, size_t expectedCapacity,
std::optional<bool> enableKeyExpire, uint32_t expiredInSeconds, bool enableCompareBeforeSet,
std::optional<MMKVRecoverStrategic> recover, uint32_t itemSizeLimit) {
auto config = pyArgsToConfig(mode, cryptKey, string(), expectedCapacity, aes256,
enableKeyExpire, expiredInSeconds, enableCompareBeforeSet, recover, itemSizeLimit);
return MMKV::defaultMMKV(config);
},
"a generic purpose instance", py::arg("mode") = MMKV_SINGLE_PROCESS, py::arg("cryptKey") = string(),
py::arg("aes256") = false);
"a generic purpose instance\n"
"Parameters:\n"
" mode: pass MMKVMode.MultiProcess for a multi-process MMKV\n"
" cryptKey: pass a non-empty string for an encrypted MMKV, 32 bytes at most\n"
" aes256: use AES 256 key length\n"
" expectedCapacity: the file size you expected when opening or creating file\n"
" enableKeyExpire: enable auto key expiration\n"
" expiredInSeconds: expiration in seconds\n"
" enableCompareBeforeSet: enable compare before set, if new value is the same, dont update/insert\n"
" recover: recover strategy on file corruption\n"
" itemSizeLimit: size limit for a key-value pair\n",
py::arg("mode") = MMKV_SINGLE_PROCESS, py::arg("cryptKey") = string(),
py::arg("aes256") = false, py::arg("expectedCapacity") = 0,
py::arg("enableKeyExpire") = std::nullopt, py::arg("expiredInSeconds") = 0,
py::arg("enableCompareBeforeSet") = false,
py::arg("recover") = std::nullopt,
py::arg("itemSizeLimit") = 0);
clsMMKV.def_static("nameSpace", &MMKV::nameSpace, "get a namespace with custom root dir");
clsMMKV.def_static("defaultNameSpace", &MMKV::defaultNameSpace, "identical with the original MMKV with the global root dir");