src/pyams_cache/handler/memcached.py
changeset 0 30591ce88556
child 1 e89686e172cd
equal deleted inserted replaced
-1:000000000000 0:30591ce88556
       
     1 #
       
     2 # Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
       
     3 # All Rights Reserved.
       
     4 #
       
     5 # This software is subject to the provisions of the Zope Public License,
       
     6 # Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
       
     7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
       
     8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
       
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
       
    10 # FOR A PARTICULAR PURPOSE.
       
    11 #
       
    12 
       
    13 __docformat__ = 'restructuredtext'
       
    14 
       
    15 
       
    16 # import standard library
       
    17 import logging
       
    18 logger = logging.getLogger('PyAMS (cache)')
       
    19 
       
    20 # import interfaces
       
    21 from pyams_cache.interfaces import ICacheHandler, IAioCacheHandler
       
    22 
       
    23 # import packages
       
    24 from pyams_utils.registry import utility_config
       
    25 
       
    26 
       
    27 # Default Memcached handler
       
    28 try:
       
    29     import pylibmc
       
    30 except ImportError:
       
    31     logger.debug("Missing pylibmc package. Can't init Memcached cache handler")
       
    32 else:
       
    33     @utility_config(name='memcached', provides=ICacheHandler)
       
    34     class MemcachedCacheHandler(object):
       
    35         """Memcached cache handler utility"""
       
    36 
       
    37         client = None
       
    38 
       
    39         def open(self, server):
       
    40             self.client = pylibmc.Client([server])
       
    41 
       
    42         def get(self, key, default=None):
       
    43             result = self.client.get(key)
       
    44             if result is None:
       
    45                 result = default
       
    46             return result
       
    47 
       
    48         def set(self, key, value):
       
    49             self.client.set(key, value)
       
    50 
       
    51 
       
    52 # Aio Memcached handler
       
    53 try:
       
    54     from aiomcache import Client as MemcachedClient
       
    55 except ImportError:
       
    56     logger.debug("Missing aiomache package. Can't init Memcached asyncio cache handler.")
       
    57 else:
       
    58     @utility_config(name='memcached', provides=IAioCacheHandler)
       
    59     class MemcachedAioCacheHandler(object):
       
    60         """Memcached asyncio cache handler utility"""
       
    61 
       
    62         client = None
       
    63 
       
    64         def open(self, server):
       
    65             ip, port = server.split(':')
       
    66             self.client = MemcachedClient(ip, int(port))
       
    67 
       
    68         def get(self, key, default=None):
       
    69             yield from self.client.get(key, default)
       
    70 
       
    71         def set(self, key, value):
       
    72             yield from self.client.set(key, value)