| |
| from pathlib import Path |
| from typing import Union |
|
|
| from .base import BaseStorageBackend |
|
|
|
|
| class MemcachedBackend(BaseStorageBackend): |
| """Memcached storage backend. |
| |
| Attributes: |
| server_list_cfg (str): Config file for memcached server list. |
| client_cfg (str): Config file for memcached client. |
| sys_path (str, optional): Additional path to be appended to `sys.path`. |
| Defaults to None. |
| """ |
|
|
| def __init__(self, server_list_cfg, client_cfg, sys_path=None): |
| if sys_path is not None: |
| import sys |
| sys.path.append(sys_path) |
| try: |
| import mc |
| except ImportError: |
| raise ImportError( |
| 'Please install memcached to enable MemcachedBackend.') |
|
|
| self.server_list_cfg = server_list_cfg |
| self.client_cfg = client_cfg |
| self._client = mc.MemcachedClient.GetInstance(self.server_list_cfg, |
| self.client_cfg) |
| |
| self._mc_buffer = mc.pyvector() |
|
|
| def get(self, filepath: Union[str, Path]): |
| """Get values according to the filepath. |
| |
| Args: |
| filepath (str or Path): Path to read data. |
| |
| Returns: |
| bytes: Expected bytes object. |
| |
| Examples: |
| >>> server_list_cfg = '/path/of/server_list.conf' |
| >>> client_cfg = '/path/of/mc.conf' |
| >>> backend = MemcachedBackend(server_list_cfg, client_cfg) |
| >>> backend.get('/path/of/file') |
| b'hello world' |
| """ |
| filepath = str(filepath) |
| import mc |
| self._client.Get(filepath, self._mc_buffer) |
| value_buf = mc.ConvertBuffer(self._mc_buffer) |
| return value_buf |
|
|
| def get_text(self, filepath, encoding=None): |
| raise NotImplementedError |
|
|