mirror of
https://github.com/Tencent/MMKV.git
synced 2026-10-17 04:30:56 +08:00
97 lines
2.8 KiB
Python
97 lines
2.8 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import sys
|
|
import mmkv
|
|
|
|
|
|
def functional_test(decode_only):
|
|
# pass MMKVMode.MultiProcess to get a multi-process instance
|
|
# kv = mmkv.MMKV('test_python', mmkv.MMKVMode.MultiProcess)
|
|
kv = mmkv.MMKV('test_python')
|
|
|
|
if not decode_only:
|
|
kv.set(True, 'bool')
|
|
print('bool = ', kv.getBool('bool'))
|
|
|
|
if not decode_only:
|
|
kv.set(-1 * (2 ** 31), 'int32')
|
|
print('int32 = ', kv.getInt('int32'))
|
|
|
|
if not decode_only:
|
|
kv.set((2 ** 32) - 1, 'uint32')
|
|
print('uint32 = ', kv.getUInt('uint32'))
|
|
|
|
if not decode_only:
|
|
kv.set(2 ** 63, 'int64')
|
|
print('int64 = ', kv.getLongInt('int64'))
|
|
|
|
if not decode_only:
|
|
kv.set((2 ** 64) - 1, 'uint64')
|
|
print('uint64 = ', kv.getLongUInt('uint64'))
|
|
|
|
if not decode_only:
|
|
kv.set(3.1415926, 'float')
|
|
print('float = ', kv.getFloat('float'))
|
|
|
|
if not decode_only:
|
|
kv.set('Hello world, MMKV for Python!', 'string')
|
|
print('string = ', kv.getString('string'))
|
|
|
|
if not decode_only:
|
|
ls = range(0, 10)
|
|
kv.set(bytes(ls), 'bytes')
|
|
b = kv.getBytes('bytes')
|
|
print('raw bytes = ', b)
|
|
if sys.version_info >= (3, 0):
|
|
print('decoded bytes = ', list(b))
|
|
|
|
if not decode_only:
|
|
print('keys before remove:', sorted(kv.keys()))
|
|
kv.remove('bool')
|
|
print('"bool" exist after remove: ', ('bool' in kv))
|
|
kv.remove(['int32', 'float'])
|
|
print('keys after remove:', sorted(kv.keys()))
|
|
else:
|
|
print('keys:', sorted(kv.keys()))
|
|
|
|
|
|
def logger(log_level, file, line, function, message):
|
|
level = {mmkv.MMKVLogLevel.NoLog: 'N',
|
|
mmkv.MMKVLogLevel.Debug: 'D',
|
|
mmkv.MMKVLogLevel.Info: 'I',
|
|
mmkv.MMKVLogLevel.Warning: 'W',
|
|
mmkv.MMKVLogLevel.Error: 'E'}
|
|
print('r-[{0}] <{1}:{2}:{3}> {4}'.format(level[log_level], file, line, function, message))
|
|
|
|
|
|
def error_handler(mmap_id, error_type):
|
|
print('[{}] has error {}'.format(mmap_id, error_type))
|
|
return mmkv.MMKVErrorType.OnErrorRecover
|
|
|
|
|
|
def content_change_handler(mmap_id):
|
|
print("[%s]'s content has been changed by other process" % mmap_id)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
# you can enable logging
|
|
# mmkv.MMKV.initializeMMKV('/tmp/mmkv', mmkv.MMKVLogLevel.Info)
|
|
mmkv.MMKV.initializeMMKV('/tmp/mmkv')
|
|
|
|
# redirect logging
|
|
# mmkv.MMKV.registerLogHandler(logger)
|
|
|
|
# try recover on error
|
|
# mmkv.MMKV.registerErrorHandler(error_handler)
|
|
|
|
# get notified after content changed by other process
|
|
# mmkv.MMKV.registerContentChangeHandler(content_change_handler)
|
|
|
|
functional_test(False)
|
|
|
|
# mmkv.MMKV.unRegisterLogHandler()
|
|
# mmkv.MMKV.unRegisterErrorHandler()
|
|
# mmkv.MMKV.unRegisterContentChangeHandler()
|
|
mmkv.MMKV.onExit()
|