예제 #1
0
파일: utils.py 프로젝트: dwerner/stests
        def wrapper(*args, **kwargs):
            # JIT extend encoder - ensures all types are registered.
            encoder.initialise()

            with stores.get_store(partition) as store:
                # Invoke inner function.
                obj = func(*args, **kwargs)
                if obj is None:
                    return

                # Apply key prefixing.
                if partition in _USER_PARTITIONS:
                    obj.apply_key_prefix()

                # Invoke operation applying retry semantics in case of broken pipes.
                # TODO: revisit connection pooling,
                attempts = 0
                handler = _HANDLERS[operation]
                while attempts < _MAX_OP_ATTEMPTS:
                    try:
                        return handler(store, obj)
                    except redis.ConnectionError as err:
                        attempts += 1
                        if attempts == _MAX_OP_ATTEMPTS:
                            raise err
                        time.sleep(float(0.01))
예제 #2
0
def test_11():
    """Test registration of non core types."""
    encoder.initialise()
    from stests.generators.meta import GENERATOR_SET
    for generator in GENERATOR_SET:
        for i in generator.TYPE_SET:
            assert i in encoder.DCLASS_SET
예제 #3
0
파일: utils.py 프로젝트: piokuc/stests
        def wrapper(*args, **kwargs):

            # JIT iniitalise encoder to ensure all types are registered.
            encoder.initialise()

            with stores.get_store(partition) as store:

                if operation == StoreOperation.DELETE:
                    keypath = func(*args, **kwargs)
                    key = ":".join([str(i) for i in keypath])
                    _delete(store, key)

                elif operation == StoreOperation.FLUSH:
                    for keypaths in func(*args, **kwargs):
                        key = ":".join([str(i) for i in keypaths])
                        _flush(store, key)

                elif operation == StoreOperation.GET:
                    keypath = func(*args, **kwargs)
                    key = ":".join([str(i) for i in keypath])
                    if key.find("*") >= 0:
                        return _get_all(store, key)
                    else:
                        return _get(store, key)

                elif operation == StoreOperation.GET_COUNT:
                    keypath = func(*args, **kwargs)
                    key = ":".join([str(i) for i in keypath])
                    return int(store.get(key))

                elif operation == StoreOperation.INCR:
                    keypath = func(*args, **kwargs)
                    key = ":".join([str(i) for i in keypath])
                    store.incrby(key, 1)

                elif operation == StoreOperation.LOCK:
                    keypath, data = func(*args, **kwargs)
                    key = ":".join([str(i) for i in keypath])
                    data = dataclasses.asdict(data)
                    return key, _setnx(store, key, data)

                elif operation == StoreOperation.SET:
                    keypath, data = func(*args, **kwargs)
                    key = ":".join([str(i) for i in keypath])
                    _set(store, key, data)
                    return key

                elif operation == StoreOperation.SET_SINGLETON:
                    keypath, data = func(*args, **kwargs)
                    key = ":".join([str(i) for i in keypath])
                    was_cached = _setnx(store, key, data)
                    return key, was_cached

                else:
                    raise NotImplementedError("Cache operation is unsupported")
예제 #4
0
def test_11():
    """Test initialisation."""
    assert encoder.IS_INITIALISED == False
    encoder.initialise()
    assert encoder.IS_INITIALISED
예제 #5
0
파일: encoder.py 프로젝트: piokuc/stests
def initialise():
    """Initialises encoder to ensure all types are regsitered.

    """
    _encoder.initialise()