mirror of
https://github.com/Tencent/MMKV.git
synced 2026-10-17 04:30:56 +08:00
add all-in-one config options to defaultMMKV() for python
This commit is contained in:
+45
-27
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user