mirror of
https://github.com/MISP/misp-galaxy.git
synced 2024-11-26 16:57:18 +00:00
58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
|
#!/usr/bin/env python
|
||
|
# encoding: utf-8
|
||
|
|
||
|
|
||
|
"""
|
||
|
@author: william
|
||
|
@contact: 1342247033@qq.com
|
||
|
@site: http://www.xiaolewei.com
|
||
|
@file: manager.py
|
||
|
@time: 22/05/2018 16:03
|
||
|
"""
|
||
|
import importlib
|
||
|
from sponge.drivers.driver import Driver
|
||
|
|
||
|
|
||
|
class CacheManager(object):
|
||
|
_supported_stores = ('redis', 'memory', 'sqlite')
|
||
|
|
||
|
def __init__(self, cfg):
|
||
|
self._cfg = cfg
|
||
|
self._stores = {}
|
||
|
if 'default' not in cfg:
|
||
|
keys = list(self._cfg.keys())
|
||
|
if len(keys) > 0:
|
||
|
self._cfg['default'] = keys[0]
|
||
|
else:
|
||
|
raise Exception('None config is not allowed for CacheManager')
|
||
|
else:
|
||
|
self._resolve(cfg['default'])
|
||
|
self._stores['default'] = self._stores[cfg['default']]
|
||
|
|
||
|
def store(self, name='default') -> Driver:
|
||
|
'''
|
||
|
:param name:
|
||
|
:return: sponge.Driver
|
||
|
'''
|
||
|
if name in self._stores:
|
||
|
return self._stores[name]
|
||
|
elif name in self._supported_stores:
|
||
|
if name in self._cfg:
|
||
|
return self._resolve(name)
|
||
|
else:
|
||
|
raise Exception('Not supported driver [%s]' % name)
|
||
|
|
||
|
def _resolve(self, name) -> Driver:
|
||
|
'''
|
||
|
:param name:
|
||
|
:param cfg:
|
||
|
:return: sponge.Driver
|
||
|
'''
|
||
|
if name not in self._cfg:
|
||
|
raise Exception('Empty config for %s driver' % name)
|
||
|
|
||
|
pck = importlib.import_module('sponge.drivers.%s' % name)
|
||
|
driver = getattr(pck, '%sDriver' % name.capitalize())
|
||
|
self._stores[name] = driver(self._cfg[name])
|
||
|
return self._stores[name]
|