|
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) |