Sync oslo-incubator to commit 1fc3cd473023f6d735981d721faa5d3a8263a7f8 In python-keystoneclient: rm -r keystoneclient/openstack In oslo-incubator: git checkout 1fc3cd47 python update.py ../python-keystoneclient Changes since last commit (32e7f0b56f) -------------------------------------- a7af1e2 Mask keystone token in debug output 55ca7c3 Split cliutils 9ce1d96 Fix i18n import 5d40e14 Remove code that moved to oslo.i18n 6ff6b4b Switch oslo-incubator to use oslo.utils and remove old modules f76f44c Delete the token and endpoint on expiry of token of client 6b048e7 Let oslotest manage the six.move setting for mox ed0ffb8 Do not incur the cost of a second method call 94245b1 Make it possible to get the request_id from python clients Change-Id: Id736a188a43f84a88bfada635aa4487d25322553
91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
# Copyright 2010 United States Government as represented by the
|
|
# Administrator of the National Aeronautics and Space Administration.
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
"""Super simple fake memcache client."""
|
|
|
|
from oslo.config import cfg
|
|
from oslo.utils import timeutils
|
|
|
|
memcache_opts = [
|
|
cfg.ListOpt('memcached_servers',
|
|
help='Memcached servers or None for in process cache.'),
|
|
]
|
|
|
|
CONF = cfg.CONF
|
|
CONF.register_opts(memcache_opts)
|
|
|
|
|
|
def get_client(memcached_servers=None):
|
|
client_cls = Client
|
|
|
|
if not memcached_servers:
|
|
memcached_servers = CONF.memcached_servers
|
|
if memcached_servers:
|
|
import memcache
|
|
client_cls = memcache.Client
|
|
|
|
return client_cls(memcached_servers, debug=0)
|
|
|
|
|
|
class Client(object):
|
|
"""Replicates a tiny subset of memcached client interface."""
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
"""Ignores the passed in args."""
|
|
self.cache = {}
|
|
|
|
def get(self, key):
|
|
"""Retrieves the value for a key or None.
|
|
|
|
This expunges expired keys during each get.
|
|
"""
|
|
|
|
now = timeutils.utcnow_ts()
|
|
for k in list(self.cache):
|
|
(timeout, _value) = self.cache[k]
|
|
if timeout and now >= timeout:
|
|
del self.cache[k]
|
|
|
|
return self.cache.get(key, (0, None))[1]
|
|
|
|
def set(self, key, value, time=0, min_compress_len=0):
|
|
"""Sets the value for a key."""
|
|
timeout = 0
|
|
if time != 0:
|
|
timeout = timeutils.utcnow_ts() + time
|
|
self.cache[key] = (timeout, value)
|
|
return True
|
|
|
|
def add(self, key, value, time=0, min_compress_len=0):
|
|
"""Sets the value for a key if it doesn't exist."""
|
|
if self.get(key) is not None:
|
|
return False
|
|
return self.set(key, value, time, min_compress_len)
|
|
|
|
def incr(self, key, delta=1):
|
|
"""Increments the value for a key."""
|
|
value = self.get(key)
|
|
if value is None:
|
|
return None
|
|
new_value = int(value) + delta
|
|
self.cache[key] = (self.cache[key][0], str(new_value))
|
|
return new_value
|
|
|
|
def delete(self, key, time=0):
|
|
"""Deletes the value associated with a key."""
|
|
if key in self.cache:
|
|
del self.cache[key]
|