Spaces:
Build error
Build error
# Copyright (c) Meta Platforms, Inc. and affiliates. | |
# All rights reserved. | |
# | |
# This source code is licensed under the license found in the | |
# LICENSE file in the root directory of this source tree. | |
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) | |
# mc.pyvector servers as a point which points to a memory cache | |
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 | |