예제 #1
0
파일: memcached.py 프로젝트: danner/queues
def get_list():
    """Supports starling/peafowl-style queue_<name>_items introspection via stats."""
    conn = Client(CONN.split(';'))
    queue_list = []
    queue_re = re.compile(r'queue\_(.*?)\_total_items')
    try:
        for server in conn.get_stats():
            for key in server[1].keys():
                if queue_re.findall(key):
                    queue_list.append(queue_re.findall(key)[0])
    except (KeyError, AttributeError, memcache.MemcachedKeyError, MemcachedStringEncodingError):
        pass
    return queue_list
예제 #2
0
def get_list():
    """Supports starling/peafowl-style queue_<name>_items introspection via stats."""
    conn = Client(CONN.split(';'))
    queue_list = []
    queue_re = re.compile(r'queue\_(.*?)\_total_items')
    try:
        for server in conn.get_stats():
            for key in server[1].keys():
                if queue_re.findall(key):
                    queue_list.append(queue_re.findall(key)[0])
    except (KeyError, AttributeError, memcache.MemcachedKeyError,
            MemcachedStringEncodingError):
        pass
    return queue_list
예제 #3
0
class Queue(BaseQueue):
    def __init__(self, name):
        self._connection = Client(CONN.split(';'))
        self.backend = 'memcached'
        self.name = name

    def read(self):
        try:
            return self._connection.get(self.name)
        except (memcache.MemcachedKeyError, MemcachedStringEncodingError), e:
            raise QueueException, e
예제 #4
0
파일: memcached.py 프로젝트: danner/queues
class Queue(BaseQueue):
    
    def __init__(self, name):
        self._connection = Client(CONN.split(';'))
        self.backend = 'memcached'
        self.name = name

    def read(self):
        try:
            return self._connection.get(self.name)
        except (memcache.MemcachedKeyError, MemcachedStringEncodingError), e:
            raise QueueException, e
예제 #5
0
 def __init__(self, use_memcache, memcache_time=60 * 60 * 24 * 7,
              memcache_host=None, item_prefix='template/', client=None):
     if memcache_host is None:
         memcache_host = ['127.0.0.1:11211']
     if use_memcache:
         if client is None:
             try:
                 try:
                     from cmemcache import Client
                 except ImportError:
                     from memcache import Client
             except ImportError:
                 raise RuntimeError('the %r loader requires an installed '
                                    'memcache module' %
                                    self.__class__.__name__)
             client = Client(list(memcache_host))
         self.__memcache = client
         self.__memcache_time = memcache_time
     else:
         self.__memcache = None
     self.__item_prefix = item_prefix
     self.__lock = Lock()
예제 #6
0
파일: tests.py 프로젝트: xuanhan863/peafowl
class TestPeafowl(unittest.TestCase):
    def setUp(self):
        self.memcache = Client(['127.0.0.1:21122'])

    def tearDown(self):
        self.memcache.disconnect_all()

    def test_set_and_get_one_entry(self):
        v = random.randint(1, 32)
        self.assertEqual(None, self.memcache.get('test_set_and_get_one_entry'))
        self.memcache.set('test_set_and_get_one_entry', v)
        self.assertEqual(v, self.memcache.get('test_set_and_get_one_entry'))

    def test_set_with_expiry(self):
        v = random.randint(1, 32)
        self.assertEqual(None, self.memcache.get('test_set_with_expiry'))
        now = time.time()
        self.memcache.set('test_set_with_expiry', v + 2, now)
        self.memcache.set('test_set_with_expiry', v)
        time.sleep(now + 1 - time.time())
        self.assertEqual(v, self.memcache.get('test_set_with_expiry'))

    def test_long_value(self):
        string = ''.join([
            random.choice(
                "abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789")
            for i in range(300)
        ])
        self.memcache.set('test_long_value', string)
        string = self.memcache.get('test_long_value')
        self.assertEqual(len(string), 300)

    def test_stats(self):
        (key, stats) = self.memcache.get_stats()[0]
        self.assertEqual('127.0.0.1:21122 (1)', key)
        keys = [
            'bytes', 'pid', 'time', 'limit_maxbytes', 'cmd_get', 'version',
            'bytes_written', 'cmd_set', 'get_misses', 'total_connections',
            'curr_connections', 'curr_items', 'uptime', 'get_hits',
            'total_items', 'rusage_system', 'rusage_user', 'bytes_read'
        ]
        for key in keys:
            self.assert_(stats.has_key(key), "key '%s' is not in stats" % key)

    def test_unknown_command_returns_valid_result(self):
        response = self.memcache.add('blah', 1)
        self.assertEqual(False, response)

    def test_that_disconnecting_and_reconnecting_works(self):
        v = random.randint(1, 32)
        self.memcache.set('test_that_disconnecting_and_reconnecting_works', v)
        self.memcache.disconnect_all()
        self.assertEqual(
            v,
            int(
                self.memcache.get(
                    'test_that_disconnecting_and_reconnecting_works')))
예제 #7
0
파일: tests.py 프로젝트: xuanhan863/peafowl
 def setUp(self):
     self.memcache = Client(['127.0.0.1:21122'])
예제 #8
0
 def __init__(self, name):
     self._connection = Client(CONN.split(';'))
     self.backend = 'memcached'
     self.name = name
     self._connection.set('%s_head' % self.name, None)
     self._connection.set('%s_len' % self.name, 0)
예제 #9
0
class Queue(BaseQueue):
    def __init__(self, name):
        self._connection = Client(CONN.split(';'))
        self.backend = 'memcached'
        self.name = name
        self._connection.set('%s_head' % self.name, None)
        self._connection.set('%s_len' % self.name, 0)

    def read(self):
        try:
            _head = self._connection.get('%s_head' % self.name)
            if _head:
                value, _next = self._connection.get('%s_%s' %
                                                    (self.name, _head))
                length = self._connection.get('%s_len' % self.name)
                self._connection.set('%s_len' % self.name, length - 1)
                self._connection.delete('%s_%s' % (self.name, _head))
                self._connection.set('%s_head' % self.name, _next)
                return value
            else:
                return None
        except Exception:
            pass

    def write(self, message):
        try:
            _head = self._connection.get('%s_head' % self.name)
            _label = str(uuid1())
            _node_value = (message, _head)
            self._connection.set('%s_%s' % (self.name, _label), _node_value)
            length = self._connection.get('%s_len' % self.name)
            self._connection.set('%s_len' % self.name, length + 1)
            self._connection.set('%s_head' % self.name, _label)
            return True
        except Exception:
            pass

    def __len__(self):
        try:
            try:
                return self._connection.get('%s_len' % self.name)
            except Exception:
                pass
        except AttributeError:
            # If this memcached backend doesn't support starling-style stats
            # or if this queue doesn't exist
            return 0

    def __repr__(self):
        return "<Queue %s>" % self.name
예제 #10
0
파일: memcached.py 프로젝트: danner/queues
 def __init__(self, name):
     self._connection = Client(CONN.split(';'))
     self.backend = 'memcached'
     self.name = name
예제 #11
0
 def __init__(self, name):
     self._connection = Client(CONN.split(';'))
     self.backend = 'memcached'
     self.name = name
예제 #12
0
 def __init__(self, name):
     self._connection = Client(CONN.split(';'))
     self.backend = 'memcached'
     self.name = name
     self._connection.set('%s_head' % self.name, None)
     self._connection.set('%s_len' % self.name, 0)
예제 #13
0
class Queue(BaseQueue):
    def __init__(self, name):
        self._connection = Client(CONN.split(';'))
        self.backend = 'memcached'
        self.name = name
        self._connection.set('%s_head' % self.name, None)
        self._connection.set('%s_len' % self.name, 0)

    def read(self):
        try:
            _head = self._connection.get('%s_head' % self.name)
            if _head:
                value, _next = self._connection.get('%s_%s' % (self.name, _head))
                length = self._connection.get('%s_len' % self.name)
                self._connection.set('%s_len' % self.name, length - 1)
                self._connection.delete('%s_%s' % (self.name, _head))
                self._connection.set('%s_head' % self.name, _next)
                return value
            else:
                return None
        except Exception:
            pass

    def write(self, message):
        try:
            _head = self._connection.get('%s_head' % self.name)
            _label = str(uuid1())
            _node_value = (message, _head)
            self._connection.set('%s_%s' % (self.name, _label), _node_value)
            length = self._connection.get('%s_len' % self.name)
            self._connection.set('%s_len' % self.name, length + 1)
            self._connection.set('%s_head' % self.name, _label)
            return True
        except Exception:
            pass

    def __len__(self):
        try:
            try:
                return self._connection.get('%s_len' % self.name)
            except Exception:
                pass
        except AttributeError:
            # If this memcached backend doesn't support starling-style stats
            # or if this queue doesn't exist
            return 0

    def __repr__(self):
        return "<Queue %s>" % self.name
예제 #14
0
파일: tests.py 프로젝트: cyberdelia/peafowl
 def setUp(self):
     self.memcache = Client(['127.0.0.1:21122'])
예제 #15
0
파일: tests.py 프로젝트: cyberdelia/peafowl
class TestPeafowl(unittest.TestCase):
    def setUp(self):
        self.memcache = Client(['127.0.0.1:21122'])
        
    def tearDown(self):
        self.memcache.disconnect_all()

    def test_set_and_get_one_entry(self):
        v = random.randint(1, 32)
        self.assertEqual(None, self.memcache.get('test_set_and_get_one_entry'))
        self.memcache.set('test_set_and_get_one_entry', v)
        self.assertEqual(v, self.memcache.get('test_set_and_get_one_entry'))
    
    def test_set_with_expiry(self):
        v = random.randint(1, 32)
        self.assertEqual(None, self.memcache.get('test_set_with_expiry'))
        now = time.time()
        self.memcache.set('test_set_with_expiry', v + 2, now)
        self.memcache.set('test_set_with_expiry', v)
        time.sleep(now + 1 - time.time())
        self.assertEqual(v, self.memcache.get('test_set_with_expiry'))

    def test_long_value(self):
        string = ''.join([random.choice("abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789") for i in range(300)])
        self.memcache.set('test_long_value', string)
        string = self.memcache.get('test_long_value')
        self.assertEqual(len(string), 300)

    def test_stats(self):
        (key, stats) = self.memcache.get_stats()[0]
        self.assertEqual('127.0.0.1:21122 (1)', key)
        keys = ['bytes', 'pid', 'time', 'limit_maxbytes', 
                 'cmd_get', 'version', 'bytes_written', 'cmd_set', 
                 'get_misses', 'total_connections', 'curr_connections', 
                 'curr_items', 'uptime', 'get_hits', 'total_items', 
                 'rusage_system', 'rusage_user', 'bytes_read']
        for key in keys:
            self.assert_(stats.has_key(key), "key '%s' is not in stats" % key)
    
    def test_unknown_command_returns_valid_result(self):
        response = self.memcache.add('blah', 1)
        self.assertEqual(False, response)

    def test_that_disconnecting_and_reconnecting_works(self):
        v = random.randint(1, 32)
        self.memcache.set('test_that_disconnecting_and_reconnecting_works', v)
        self.memcache.disconnect_all()
        self.assertEqual(v, int(self.memcache.get('test_that_disconnecting_and_reconnecting_works')))