Exemplo n.º 1
0
def writeSinglePair(pair, bucketName, riakIP):

    rc = RiakClient(protocol='pbc', host=riakIP, pb_port=8087)
    bucket = rc.bucket(bucketName)

    #create key value pairs to stock in riak
    key = str(str(pair[0]) + '_' + str(pair[1]))
    val = {'StockA': pair[0], \
                'StockB': pair[1], \
                'Date': pair[2],\
                'CloseA': pair[3], \
                'CloseB': pair[4], \
                'ZScore': pair[5],\
                'Beta': pair[6],\
                'SignalMean': pair[7],\
                'SignalSD': pair[8]}
    myDate = pair[2].split('-')
    obj = RiakObject(rc, bucket, key)

    #add 2i tags
    obj.add_index("stocka_bin", str(pair[0]))
    obj.add_index("stockb_bin", str(pair[3]))
    obj.add_index("year_int", int(myDate[0]))
    obj.add_index("month_int", int(myDate[1]))
    obj.add_index("day_int", int(myDate[2]))
    obj.content_type = 'text/json'
    obj.data = val
    obj.data = json.dumps(val)
    #store
    obj.store()

    #return a list of written pairs
    return pair
Exemplo n.º 2
0
def writeSinglePair(pair, bucketName, riakIP):

    rc = RiakClient(protocol="pbc", host=riakIP, pb_port=8087)
    bucket = rc.bucket(bucketName)

    # create key value pairs to stock in riak
    key = str(str(pair[0]) + "_" + str(pair[1]))
    val = {
        "StockA": pair[0],
        "StockB": pair[1],
        "Date": pair[2],
        "CloseA": pair[3],
        "CloseB": pair[4],
        "ZScore": pair[5],
        "Beta": pair[6],
        "SignalMean": pair[7],
        "SignalSD": pair[8],
    }
    myDate = pair[2].split("-")
    obj = RiakObject(rc, bucket, key)

    # add 2i tags
    obj.add_index("stocka_bin", str(pair[0]))
    obj.add_index("stockb_bin", str(pair[3]))
    obj.add_index("year_int", int(myDate[0]))
    obj.add_index("month_int", int(myDate[1]))
    obj.add_index("day_int", int(myDate[2]))
    obj.content_type = "text/json"
    obj.data = val
    obj.data = json.dumps(val)
    # store
    obj.store()

    # return a list of written pairs
    return pair
Exemplo n.º 3
0
    def from_config(cls, config):
        config = config.copy()
        bucket_prefix = config.pop('bucket_prefix')
        load_bunch_size = config.pop('load_bunch_size',
                                     cls.DEFAULT_LOAD_BUNCH_SIZE)
        mapreduce_timeout = config.pop('mapreduce_timeout',
                                       cls.DEFAULT_MAPREDUCE_TIMEOUT)
        transport_type = config.pop('transport_type', 'http')

        host = config.get('host', '127.0.0.1')
        port = config.get('port')
        prefix = config.get('prefix', 'riak')
        mapred_prefix = config.get('mapred_prefix', 'mapred')
        client_id = config.get('client_id')
        transport_options = config.get('transport_options', {})

        client_args = dict(
            host=host, prefix=prefix, mapred_prefix=mapred_prefix,
            protocol=transport_type, client_id=client_id,
            transport_options=transport_options)

        if port is not None:
            client_args['port'] = port

        client = RiakClient(**client_args)
        # Some versions of the riak client library use simplejson by
        # preference, which breaks some of our unicode assumptions. This makes
        # sure we're using stdlib json which doesn't sometimes return
        # bytestrings instead of unicode.
        client.set_encoder('application/json', json.dumps)
        client.set_encoder('text/json', json.dumps)
        client.set_decoder('application/json', json.loads)
        client.set_decoder('text/json', json.loads)
        return cls(client, bucket_prefix, load_bunch_size=load_bunch_size,
                   mapreduce_timeout=mapreduce_timeout)
Exemplo n.º 4
0
    def test_close_underlying_socket_retry(self):
        c = RiakClient(PB_HOST,
                       PB_PORT,
                       transport_class=RiakPbcTransport,
                       transport_options={"max_attempts": 2})

        bucket = c.bucket('bucket_test_close')
        rand = self.randint()
        obj = bucket.new('barbaz', rand)
        obj.store()
        obj = bucket.get('barbaz')
        self.assertTrue(obj.exists())
        self.assertEqual(obj.get_bucket().get_name(), 'bucket_test_close')
        self.assertEqual(obj.get_key(), 'barbaz')
        self.assertEqual(obj.get_data(), rand)

        # Close the underlying socket. This gets a bit sketchy,
        # since we are reaching into the internals, but there is
        # no other way to get at the socket
        conns = c._cm.conns
        conns[0].sock.close()

        # This should work, since we have a retry
        obj = bucket.get('barbaz')
        self.assertTrue(obj.exists())
        self.assertEqual(obj.get_bucket().get_name(), 'bucket_test_close')
        self.assertEqual(obj.get_key(), 'barbaz')
        self.assertEqual(obj.get_data(), rand)
Exemplo n.º 5
0
def riakGetStock(searchVal, riakIP):
    myData = []
    myBucket = RiakClient(protocol="pbc", host=riakIP, pb_port=8087).bucket("stocks")
    for key in myBucket.get_index("ticker_bin", searchVal):  # get all from 2002 to 2012
        value = json.loads(myBucket.get(key).data)
        myData.append([(value["CLOSE"]), (value["VOLUME"]), str(value["DATE"])])
    return myData
Exemplo n.º 6
0
    def test_close_underlying_socket_retry(self):
        c = RiakClient(PB_HOST, PB_PORT, transport_class=RiakPbcTransport,
                                         transport_options={"max_attempts": 2})

        bucket = c.bucket('bucket_test_close')
        rand = self.randint()
        obj = bucket.new('barbaz', rand)
        obj.store()
        obj = bucket.get('barbaz')
        self.assertTrue(obj.exists)
        self.assertEqual(obj.bucket.name, 'bucket_test_close')
        self.assertEqual(obj.key, 'barbaz')
        self.assertEqual(obj.data, rand)

        # Close the underlying socket. This gets a bit sketchy,
        # since we are reaching into the internals, but there is
        # no other way to get at the socket
        conns = c._cm.conns
        conns[0].sock.close()

        # This should work, since we have a retry
        obj = bucket.get('barbaz')
        self.assertTrue(obj.exists)
        self.assertEqual(obj.bucket.name, 'bucket_test_close')
        self.assertEqual(obj.key, 'barbaz')
        self.assertEqual(obj.data, rand)
Exemplo n.º 7
0
def writeHistory(ticker, data, riakIP):
    rc = RiakClient(protocol='pbc', host=riakIP, pb_port=8087)
    bucket = rc.bucket('stocks')
    gtemp = data
    if len(gtemp) == 0:
        return 0
    else:

        for j in range(0, len(gtemp.index)):

            #upload json to Riak Bucket
            date = gtemp.index[j].date()
            riakKey = str(ticker + '_' + str(date))
            riakVal = {'OPEN': gtemp.values[j,0],\
                        'HIGH': gtemp.values[j,1],\
                        'LOW': gtemp.values[j,2], \
                        'CLOSE': gtemp.values[j,3], \
                        'VOLUME': gtemp.values[j,4],\
                        'DATE': str(date),\
                        'TICKER': str(ticker)}

            obj = RiakObject(rc, bucket, riakKey)

            obj.add_index("ticker_bin", str(ticker))
            obj.add_index("year_int", int(date.year))
            obj.add_index("month_int", int(date.month))
            obj.add_index("day_int", int(date.day))

            obj.content_type = 'text/json'
            #obj.data = riakVal
            obj.data = json.dumps(riakVal)
            obj.store()

    return len(gtemp.index)
Exemplo n.º 8
0
 def _get_client(self):
     """Get client connection."""
     if self._client is None or not self._client.is_alive():
         self._client = RiakClient(protocol=self.protocol,
                                   host=self.host,
                                   pb_port=self.port)
         self._client.resolver = last_written_resolver
     return self._client
Exemplo n.º 9
0
 def test_uses_client_id_if_given(self):
     self.host = PB_HOST
     self.port = PB_PORT
     zero_client_id = "\0\0\0\0"
     c = RiakClient(PB_HOST, PB_PORT,
                         transport_class = RiakPbcTransport,
                         client_id = zero_client_id)
     self.assertEqual(zero_client_id, c.get_client_id()) #
Exemplo n.º 10
0
def register(host,user_id,time):
	currenttld = extractdom(host)
	riakclient = RiakClient()
	#bucket : trackers, key:user_id, object:json map
	str_bucket = 'trackers'
	bucket = riakclient.bucket(str_bucket)

	str_key = user_id
	obj = RiakObject(riakclient, bucket, str_key)
Exemplo n.º 11
0
    def conn(self):
        """Open connection on Riak DataBase"""
        client = RiakClient(protocol=self.conf.get("protocol"),
                            http_port=self.conf.get("port"),
                            host=self.conf.get("host"))

        conn = client.bucket(self.conf.get("db"))
        conn.enable_search()
        return conn
Exemplo n.º 12
0
 def test_uses_client_id_if_given(self):
     self.host = PB_HOST
     self.port = PB_PORT
     zero_client_id = "\0\0\0\0"
     c = RiakClient(PB_HOST,
                    PB_PORT,
                    transport_class=RiakPbcTransport,
                    client_id=zero_client_id)
     self.assertEqual(zero_client_id, c.get_client_id())  #
Exemplo n.º 13
0
def riakGetStock(searchVal, riakIP):
    myData = []
    myBucket = RiakClient(protocol='pbc', host=riakIP,
                          pb_port=8087).bucket('stocks')
    for key in myBucket.get_index('ticker_bin',
                                  searchVal):  # get all from 2002 to 2012
        value = json.loads(myBucket.get(key).data)
        myData.append([(value['CLOSE']), (value['VOLUME']),
                       str(value['DATE'])])
    return myData
Exemplo n.º 14
0
    def conn(self):
        """Open connection on Riak DataBase"""
        client = RiakClient(
            protocol=self.conf.get("protocol"),
            http_port=self.conf.get("port"),
            host=self.conf.get("host"))

        conn = client.bucket(self.conf.get("db"))
        conn.enable_search()
        return conn
Exemplo n.º 15
0
def connect():
    #nodes = []
    #for ip in ["45.55.0.44", "107.170.224.168", "45.55.1.236"]:
    #    nodes.append(dict(host=ip, http_port=RIAK_HTTP_PORT, pb_port=RIAK_PBC_PORT))
    nodes = [
        dict(host=RIAK_HOST, http_port=RIAK_HTTP_PORT, pb_port=RIAK_PBC_PORT)
    ]
    client = RiakClient(nodes=nodes)
    assert client.ping(), "Failed to connect to client"
    return client
Exemplo n.º 16
0
def riakSearchData(searchBucket, searchTerm, searchVal1, searchVal2, riakIP):
    myData = {}  # empty dict
    myBucket = RiakClient(protocol="pbc", host=riakIP, pb_port=8087).bucket(searchBucket)
    # check wether 1 or 2 search terms
    if searchVal2 != None:
        for key in myBucket.get_index(searchTerm, searchVal1, searchVal2):  # get all keys with 2i match
            myData[key] = json.loads(myBucket.get(key).data)  # store data for each key
    else:
        for key in myBucket.get_index(searchTerm, searchVal1):  # get all keys with 2i match
            myData[key] = json.loads(myBucket.get(key).data)  # store data for each key
    return myData
Exemplo n.º 17
0
    def clear_expired(cls):
        # TODO: get_keys() method is not efficent operation for searching sessions, use search feature or mapreduce or ...
        client = RiakClient(host=RIAK_DB_HOST,
                            port=RIAK_DB_PORT,
                            transport_class=RiakPbcTransport)
        sessions = client.bucket(RIAK_DB_BUCKET)

        now = int(timezone.now().strftime("%s"))
        for key in sessions.get_keys():
            data = sessions.get(key)
            if int(data.get_usermeta()['expire_age']) < now:
                data.delete()
Exemplo n.º 18
0
class RiakStorage(AbstractStorage):

    bucket_types = {
        'users':         'egara-lww',
        'users-current': 'egara-unique',
        'imap-events':   'egara-lww',
        'imap-folders':  'egara-lww',
        'imap-folders-current':  'egara-unique',
        'imap-message-timeline': 'egara-lww'
    }

    def __init__(self, *args, **kw):
        riak_host = 'localhost'
        riak_port = 8098

        self.client = RiakClient(
            protocol='http',
            host=conf['STORAGE'].get('riak_host', riak_host),
            http_port=conf['STORAGE'].get('riak_port', riak_port)
        )
        self.client.set_decoder('application/octet-stream', self._decode_binary)
        self.users_cache = CachedDict(ttl=10)

    def _decode_binary(self, data):
        return str(data).encode("utf-8")

    def _get_bucket(self, bucketname):
        _type = self.bucket_types.get(bucketname, None)
        if _type:
            return self.client.bucket_type(_type).bucket(bucketname)

        return None


    def get(self, key, index, doctype=None, fields=None, **kw):
        """
            Standard API for accessing key/value storage
        """
        result = None
        log.debug("Riak get key %r from %r", key, index)

        try:
            bucket = self._get_bucket(index)
            res = bucket.get(key)
            if res and res.data:
                result = res.data

        except Exception, e:
            log.warning("Riak exception: %s", str(e))
            result = None

        return result
Exemplo n.º 19
0
    def __init__(
        self, protocol="pbc", nodes=[], objects_bucket_name="objects",
            activities_bucket_name="activities", **kwargs):

        self._riak_backend = RiakClient(protocol=protocol, nodes=nodes)

        r_value = kwargs.get("r")
        w_value = kwargs.get("w")
        dw_value = kwargs.get("dw")
        pr_value = kwargs.get("pr")
        pw_value = kwargs.get("pw")

        self._objects = self._riak_backend.bucket(objects_bucket_name)
        self._activities = self._riak_backend.bucket(activities_bucket_name)

        if r_value:
            self._objects.r = r_value
            self._activities.r = r_value

        if w_value:
            self._objects.w = w_value
            self._activities.w = w_value

        if dw_value:
            self._objects.dw = dw_value
            self._activities.dw = dw_value

        if pr_value:
            self._objects.pr = pr_value
            self._activities.pr = pr_value

        if pw_value:
            self._objects.pw = pw_value
            self._activities.pw = pw_value
Exemplo n.º 20
0
Arquivo: ds.py Projeto: wamdam/scads
class DS_Riak(DS):
    """ Riak DS
    """
    def __init__(self, host=PB_HOST, port=PB_PORT, bucketname='_scads'):
        """
        Params:
            host: Hostname or IP Address of the riak database
            port: Port of the riak database
            bucketname: Where to store stuff
        """
        self.client = RiakClient(host, port,
                                 transport_class=RiakPbcTransport,
                                 transport_options={'max_attempts': 3})
        self.bucket = self.client.bucket(bucketname)

    def store(self, key, value, indexes=None):
        obj = self.bucket.get(key)
        obj.set_data(value)
        if indexes is not None:
            for index in indexes:
                obj.add_index('scads_bin', index)
        obj.store()

    def get_index(self, index):
        return self.bucket.get_index('scads_bin', index)

    def get(self, key):
        d = self.bucket.get(key).get_data()
        if d is None:
            return None
        return d

    def clear(self):
        for key in self.bucket.get_keys():
            self.bucket.get(key).delete()
Exemplo n.º 21
0
 def __init__(self, option):
   print "Here we be initializing yon connections and things: %r" % option
   self.riak = RiakClient(host=option['RIAKTS_HOST'], pb_port=int(option['RIAKTS_PORT']))
   self.nodes_table = option['RIAKTS_NODES_TABLE']
   self.table_name = option['RIAKTS_TABLE_NAME']
   self.family = option['RIAKTS_FAMILY']
   self.nodes = self.riak.bucket(self.nodes_table)
Exemplo n.º 22
0
 def create_client(self, host=None, port=None, transport_class=None):
     host = host or self.host
     port = port or self.port
     transport_class = transport_class or self.transport_class
     return RiakClient(self.host,
                       self.port,
                       transport_class=self.transport_class)
Exemplo n.º 23
0
def client(request):
    ids = subprocess.check_output(
        ['docker', 'ps', '-qaf', 'label=role=cluster']).strip().split('\n')
    info = json.loads(subprocess.check_output(['docker', 'inspect'] + ids))
    ips = [(i['NetworkSettings']['Networks']).values()[0]['IPAddress']
           for i in info]
    return RiakClient(nodes=[RiakNode(host=ip) for ip in ips])
Exemplo n.º 24
0
def main(argv):
    global gtable
    global gclient

    # Overhead to manage command line opts and config file
    p = getCmdLineParser()
    args = p.parse_args()
    cfg.read(args.config_file)

    # Get the logger going
    glogname = cfg.get('logging', 'logName')
    rightNow = time.strftime("%Y%m%d%H%M%S")
    logger = initLog(rightNow)
    logger.info('Starting Run: '+time.strftime("%Y%m%d%H%M%S")+'  =========================')

    # Get Riak going    
    gclient = RiakClient(protocol='pbc',nodes=[{ 'host': cfg.get('riakts', 'ip'), 'pb_port': int(cfg.get('riakts', 'port')) }])
    gtable = cfg.get('riakts','tables').split(',')

    # Get Rabbit going
    rabbitChannel = setUpRabbit(cfg.get('rabbitmq', 'ip'), int(cfg.get('rabbitmq', 'port')),cfg.get('rabbitmq', 'login'),cfg.get('rabbitmq', 'password'),cfg.get('rabbitmq', 'queue'))

    logger.info('RabbitMQ channel initialized...')
    rabbitChannel.basic_qos(prefetch_count=1)
    rabbitChannel.basic_consume(processData, queue=cfg.get('rabbitmq', 'queue'))
    logger.info('RabbitMQ consumer initialized...')
    rabbitChannel.start_consuming()


    # Clean up
    logger.info('Done! '+time.strftime("%Y%m%d%H%M%S")+'  ==========================')
Exemplo n.º 25
0
def write_flower_to_riak(repos):
    """
    We could optimize this function via memoization. If part of a flower
    already exists on the Riak cluster, then we just re-use that instead of
    calculating it again. However, in the worst-case scenario, since Riak isn't
    in strong consistency mode by default, we have no guarantee that the
    memoized view is up-to-date.

    Riak does have a strong consistency mode, but at the moment it isn't ready
    for production.
    """
    clients = [
        RiakClient(host=ip, protocol='pbc', pb_port=RIAK_PORT)
        for ip in RIAK_IPS
    ]
    neighborss = [client.bucket('%s/neighbors' % LANGUAGE) \
        for client in clients]
    flowers = [client.bucket('%s/flowers' % LANGUAGE) \
        for client in clients]
    for repo0, neighbor, flower in zip(repos, cycle(neighborss),
                                       cycle(flowers)):
        repo_set = set()
        nodes = []
        links = []
        repos1 = neighbor.get(repo0).data
        repos1 = repos1 if repos1 is not None else []
        degree0 = len(repos1)
        if repo0 not in repo_set:
            repo_set.add(repo0)
            nodes.append([repo0, degree0])
        # Take up to N
        for i in range(len(repos1)):
            repos2 = neighbor.get(repos1[i]).data
            repos2 = repos2 if repos2 is not None else []
            repos1[i] = [repos1[i], len(repos2)]
        top_repos1 = heapq.nlargest(N, repos1, lambda tup: tup[1])
        # 1st order
        for x in top_repos1:
            repo1, degree1 = x
            if repo1 not in repo_set:
                repo_set.add(repo1)
                nodes.append([repo1, degree1])
            links.append([repo0, repo1])
            # Take up to N
            repos2 = neighbor.get(repo1).data
            repos2 = repos2 if repos2 is not None else []
            for j in range(len(repos2)):
                repos3 = neighbor.get(repos2[j]).data
                repos3 = repos3 if repos3 is not None else []
                repos2[j] = [repos2[j], len(repos3)]
            top_repos2 = heapq.nlargest(N, repos2, lambda tup: tup[1])
            # 2nd order
            for y in top_repos2:
                repo2, degree2 = y
                if repo2 not in repo_set:
                    repo_set.add(repo2)
                    nodes.append([repo2, degree2])
                links.append([repo1, repo2])
        flower.new(repo0, [nodes, links]).store()
Exemplo n.º 26
0
 def _get_client(self):
     """Get client connection."""
     if self._client is None or not self._client.is_alive():
         self._client = RiakClient(protocol=self.protocol,
                                   host=self.host,
                                   pb_port=self.port)
         self._client.resolver = last_written_resolver
     return self._client
Exemplo n.º 27
0
def get_flower(lang, user, repo_name):
    client = RiakClient(host=riak_ip, pb_port=riak_port, protocol="pbc")
    bucket = client.bucket("%s/flowers" % lang)

    repo = "%s/%s" % (user, repo_name)
    graph = bucket.get(repo).data
    if graph is None:
        abort(404)

    _nodes, _links = graph
    nodes = [{"id": repo, "group": degree} for (repo, degree) in _nodes]
    del _nodes
    links = [{"source": repo_a, "target": repo_b} for \
        (repo_a, repo_b) in _links]
    del _links

    return jsonify({"nodes": nodes, "links": links})
Exemplo n.º 28
0
def getDataByTicker(ticker, dataSource, start, end, riakIP):

    rc = RiakClient(protocol="pbc", host=riakIP, pb_port=8087)
    # get daily data for each ticker
    gtemp = pd.DataFrame()
    bucket = rc.bucket("stocks")
    try:
        gtemp = DataReader(ticker, dataSource, start, end)
        print ticker
    except:
        pass

        # didnt get any data
    if len(gtemp) == 0:
        return 0
    # got data
    else:

        for j in range(0, len(gtemp.index)):

            # upload json to Riak Bucket
            date = gtemp.index[j].date()
            riakKey = str(ticker + "_" + str(date))
            riakVal = {
                "OPEN": gtemp.values[j, 0],
                "HIGH": gtemp.values[j, 1],
                "LOW": gtemp.values[j, 2],
                "CLOSE": gtemp.values[j, 3],
                "VOLUME": gtemp.values[j, 4],
                "DATE": str(date),
                "TICKER": str(ticker),
            }

            obj = RiakObject(rc, bucket, riakKey)

            obj.add_index("ticker_bin", str(ticker))
            obj.add_index("year_int", int(date.year))
            obj.add_index("month_int", int(date.month))
            obj.add_index("day_int", int(date.day))

            obj.content_type = "text/json"
            # obj.data = riakVal
            obj.data = json.dumps(riakVal)
            obj.store()

    return len(gtemp.index)
Exemplo n.º 29
0
def populate():
    cl = RiakClient(protocol='http', host='127.0.0.1', http_port=8098)
    cities = Cities(cl)
    users_list = []
    # create users
    print('doing users')
    for i in range(num_users):
        usr = User(cl, fake.email())
        users_list.append(usr)
        print(usr.info.data)
    # make users follow each others
    print('doing follows')
    for usr in users_list:
        to_follow = choices(users_list, k=10)
        for tg in to_follow:
            usr.follow_user(tg.repr)
        print(usr.info.data)
    # create messages
    print('doing messages')
    for usr in users_list:
        num_msg = randint(5, msg_per_user)
        current = datetime.now()
        for msg in range(num_msg):
            current -= timedelta(randint(1, 10))
            new_msg = usr.add_message(
                fake.text(), timestamp=current.strftime(format_timestamp))
            # figure out if make a share or a replica out of this
            random_pick = randint(0, 5)
            print('original', new_msg)
            if random_pick == 2:
                # its a replica
                replicant = choices(users_list)[0]
                reply_timestamp = current + timedelta(minutes=randint(3, 90))
                original_msg_ref = '_'.join(
                    [new_msg['owner']['email'], new_msg['timestamp']])
                new_reply = replicant.add_message(
                    fake.text(),
                    timestamp=reply_timestamp.strftime(format_timestamp),
                    reply_to={
                        'ref': original_msg_ref,
                        'content': new_msg['content']
                    })
                print('reply', new_reply)
            elif random_pick == 3:
                # its a share
                replicant = choices(users_list)[0]
                reply_timestamp = current + timedelta(minutes=randint(3, 90))
                original_msg_ref = '_'.join(
                    [new_msg['owner']['email'], new_msg['timestamp']])
                new_reply = replicant.add_message(
                    '',
                    timestamp=reply_timestamp.strftime(format_timestamp),
                    reply_to={
                        'ref': original_msg_ref,
                        'content': new_msg['content']
                    })
                print('share', new_reply)
Exemplo n.º 30
0
 def connect(self):
     return RiakClient(host=self.host,
                       port=self.port,
                       prefix=self.prefix,
                       mapred_prefix=self.mapred_prefix,
                       client_id=self.client_id,
                       transport_class=self.transport_class,
                       solr_transport_class=self.solr_transport_class,
                       transport_options=self.transport_options)
Exemplo n.º 31
0
def run_cluster_server(riak_conf):
	riak_hosts = []
	with open(riak_conf, "r") as fin:
		for line in fin:
			riak_hosts.append({"host": line.replace("\n", ""), "http_port": RIAK_PORT})
			

	cluster = RiakClient(nodes=riak_hosts)
	bucket = cluster.bucket("HashedData")

	random_str_arr = []
	random_str_arr = run_exp_init(socket.gethostname())
	insert_throuput = run_exp_insert(bucket, random_str_arr)
	lookup_throuput = run_exp_lookup(bucket, random_str_arr)
	delete_throuput = run_exp_delete(bucket, random_str_arr)

	overall_throuput = (insert_throuput + lookup_throuput + delete_throuput) / 3
	print("Overall Throughput: " + str(overall_throuput) + " OPs/s")
Exemplo n.º 32
0
def _write_neighbors(tups, RIAK_IPS, RIAK_PORT, LANGUAGE):
    clients = [RiakClient(host=ip, protocol='pbc',
                          pb_port=RIAK_PORT)
              for ip in RIAK_IPS]
    buckets = [client.bucket('%s/neighbors' % LANGUAGE)
        for client in clients]
    for tup, bucket in izip(tups, cycle(buckets)):
        repo, adj_repos, _ = tup
        _ = bucket.new(repo, adj_repos).store()
Exemplo n.º 33
0
def getDataByTicker(ticker, dataSource, start, end, riakIP):

    rc = RiakClient(protocol='pbc', host=riakIP, pb_port=8087)
    #get daily data for each ticker
    gtemp = pd.DataFrame()
    bucket = rc.bucket('stocks')
    try:
        gtemp = DataReader(ticker, dataSource, start, end)
        print ticker
    except:
        pass

        #didnt get any data
    if len(gtemp) == 0:
        return 0
    #got data
    else:

        for j in range(0, len(gtemp.index)):

            #upload json to Riak Bucket
            date = gtemp.index[j].date()
            riakKey = str(ticker + '_' + str(date))
            riakVal = {'OPEN': gtemp.values[j,0],\
                        'HIGH': gtemp.values[j,1],\
                        'LOW': gtemp.values[j,2], \
                        'CLOSE': gtemp.values[j,3], \
                        'VOLUME': gtemp.values[j,4],\
                        'DATE': str(date),\
                        'TICKER': str(ticker)}

            obj = RiakObject(rc, bucket, riakKey)

            obj.add_index("ticker_bin", str(ticker))
            obj.add_index("year_int", int(date.year))
            obj.add_index("month_int", int(date.month))
            obj.add_index("day_int", int(date.day))

            obj.content_type = 'text/json'
            #obj.data = riakVal
            obj.data = json.dumps(riakVal)
            obj.store()

    return len(gtemp.index)
Exemplo n.º 34
0
def write_top_cooccurs(RIAK_IPS, RIAK_PORT, LANGUAGE):
    clients = [RiakClient(host=ip, protocol='pbc', pb_port=RIAK_PORT)
        for ip in RIAK_IPS]
    buckets = [client.bucket('%s/top_cooccurs' % LANGUAGE) \
        for client in clients]
    for b, (dep1, dep2, count), bucket in izip(range(len(top_cooccurs)),
                                              top_cooccurs,
                                              cycle(buckets)):
        bucket.new('%d' % b, [dep1, dep2, count]).store()
    buckets[0].new('B', len(top_cooccurs)).store()
Exemplo n.º 35
0
class UserService:
    def __init__(self):
        self.users_bucket = settings.RIAK_USERS_BUCKET
        self.riak = RiakClient(host=settings.RIAK_HOST,
                               port=settings.RIAK_PORT)

    def save(self, user_data):
        key = self.generate_key()
        password = user_data['password']
        user_data['encrypted_password'] = make_password('sha1', password)
        del user_data['password']
        user = self.riak.bucket(self.users_bucket).new(key, user_data)
        user.store()
        return key

    def get(self, user_id):
        user = self.riak.bucket(settings.RIAK_USERS_BUCKET).get(str(user_id))
        if user.exists():
            return user.get_data()
        else:
            return None

    def login(self, username, password):
        try:
            user = self.riak.search(settings.RIAK_USERS_BUCKET,
                                    "username:%s" % username).run()
        except ValueError:
            user = None

        if user:
            user = user[0]
            user.set_bucket(str(user.get_bucket()))
            user.set_key(str(user.get_key()))
            user_data = user.get().get_data()
            if check_password(password, user_data['encrypted_password']):
                return user
            else:
                return False
        else:
            return False

    def generate_key(self):
        return uuid.uuid1().hex
Exemplo n.º 36
0
    def from_config(cls, config):
        config = config.copy()
        bucket_prefix = config.pop('bucket_prefix')
        load_bunch_size = config.pop('load_bunch_size',
                                     cls.DEFAULT_LOAD_BUNCH_SIZE)
        mapreduce_timeout = config.pop('mapreduce_timeout',
                                       cls.DEFAULT_MAPREDUCE_TIMEOUT)
        transport_type = config.pop('transport_type', 'http')
        transport_class = {
            'http': RiakHttpTransport,
            'protocol_buffer': RiakPbcTransport,
        }.get(transport_type, RiakHttpTransport)

        host = config.get('host', '127.0.0.1')
        port = config.get('port', 8098)
        prefix = config.get('prefix', 'riak')
        mapred_prefix = config.get('mapred_prefix', 'mapred')
        client_id = config.get('client_id')
        # NOTE: the current riak.RiakClient expects this parameter but
        #       internally doesn't do anything with it.
        solr_transport_class = config.get('solr_transport_class', None)
        transport_options = config.get('transport_options', None)

        client = RiakClient(host=host,
                            port=port,
                            prefix=prefix,
                            mapred_prefix=mapred_prefix,
                            transport_class=transport_class,
                            client_id=client_id,
                            solr_transport_class=solr_transport_class,
                            transport_options=transport_options)
        # Some versions of the riak client library use simplejson by
        # preference, which breaks some of our unicode assumptions. This makes
        # sure we're using stdlib json which doesn't sometimes return
        # bytestrings instead of unicode.
        client.set_encoder('application/json', json.dumps)
        client.set_encoder('text/json', json.dumps)
        client.set_decoder('application/json', json.loads)
        client.set_decoder('text/json', json.loads)
        return cls(client,
                   bucket_prefix,
                   load_bunch_size=load_bunch_size,
                   mapreduce_timeout=mapreduce_timeout)
Exemplo n.º 37
0
Arquivo: ds.py Projeto: wamdam/scads
 def __init__(self, host=PB_HOST, port=PB_PORT, bucketname='_scads'):
     """
     Params:
         host: Hostname or IP Address of the riak database
         port: Port of the riak database
         bucketname: Where to store stuff
     """
     self.client = RiakClient(host, port,
                              transport_class=RiakPbcTransport,
                              transport_options={'max_attempts': 3})
     self.bucket = self.client.bucket(bucketname)
Exemplo n.º 38
0
 def __init__(self, **client_args):
     self._closed = False
     self._raw_client = RiakClient(**client_args)
     # Some versions of the riak client library use simplejson by
     # preference, which breaks some of our unicode assumptions. This makes
     # sure we're using stdlib json which doesn't sometimes return
     # bytestrings instead of unicode.
     self._client.set_encoder("application/json", json.dumps)
     self._client.set_encoder("text/json", json.dumps)
     self._client.set_decoder("application/json", json.loads)
     self._client.set_decoder("text/json", json.loads)
Exemplo n.º 39
0
    def __init__(self, *args, **kw):
        riak_host = 'localhost'
        riak_port = 8098

        self.client = RiakClient(
            protocol='http',
            host=conf['STORAGE'].get('riak_host', riak_host),
            http_port=conf['STORAGE'].get('riak_port', riak_port)
        )
        self.client.set_decoder('application/octet-stream', self._decode_binary)
        self.users_cache = CachedDict(ttl=10)
Exemplo n.º 40
0
    def test_close_underlying_socket_fails(self):
        c = RiakClient(PB_HOST, PB_PORT, transport_class=RiakPbcTransport)

        bucket = c.bucket('bucket_test_close')
        rand = self.randint()
        obj = bucket.new('foo', rand)
        obj.store()
        obj = bucket.get('foo')
        self.assertTrue(obj.exists)
        self.assertEqual(obj.bucket.name, 'bucket_test_close')
        self.assertEqual(obj.key, 'foo')
        self.assertEqual(obj.data, rand)

        # Close the underlying socket. This gets a bit sketchy,
        # since we are reaching into the internals, but there is
        # no other way to get at the socket
        conns = c._cm.conns
        conns[0].sock.close()

        # This shoud fail with a socket error now
        self.assertRaises(socket.error, bucket.get, 'foo')
Exemplo n.º 41
0
def testCluster(IPs, login, password):

        initial_attempts = 5
        port = 8087
        num_attempts = 0

        nodes = []
        for eachNode in IPs.split(","):
            thisNode = {'host': eachNode, 'pb_port': port}
            nodes.append(thisNode)

        connected = False
        client = RiakClient(protocol='pbc', nodes=nodes)
        try:
            with client.retry_count(initial_attempts):
                connected = client.ping()
        except Exception as e:
            print('[EXCP] No Riak server found after ' + str(initial_attempts) + " tries. Error: " + str(e))

        if connected:
            print('[STATE] Successful PING! Connected to Riak!')
Exemplo n.º 42
0
    def test_close_underlying_socket_fails(self):
        c = RiakClient(PB_HOST, PB_PORT, transport_class=RiakPbcTransport)

        bucket = c.bucket('bucket_test_close')
        rand = self.randint()
        obj = bucket.new('foo', rand)
        obj.store()
        obj = bucket.get('foo')
        self.assertTrue(obj.exists())
        self.assertEqual(obj.get_bucket().get_name(), 'bucket_test_close')
        self.assertEqual(obj.get_key(), 'foo')
        self.assertEqual(obj.get_data(), rand)

        # Close the underlying socket. This gets a bit sketchy,
        # since we are reaching into the internals, but there is
        # no other way to get at the socket
        conns = c._cm.conns
        conns[0].sock.close()

        # This shoud fail with a socket error now
        self.assertRaises(socket.error, bucket.get, 'foo')
Exemplo n.º 43
0
def _write_cooccurs(tups, RIAK_IPS, RIAK_PORT, B, LANGUAGE):
    results = []
    clients = [RiakClient(host=ip, protocol='pbc', pb_port=RIAK_PORT)
        for ip in RIAK_IPS]
    buckets = [client.bucket('%s/cooccurs' % LANGUAGE) \
        for client in clients]
    for (dep, counter), bucket in izip(tups, cycle(buckets)):
        top_items = heapq.nlargest(B, counter.iteritems(),
            key=lambda tup: tup[1])  # WARNING: Python 2.7
        bucket.new(dep, top_items).store()
        results.append((dep, Counter(dict(top_items))))
    return results
Exemplo n.º 44
0
def selection_function(request):
    RiakClient()
    RiakClient(protocol='http', host='127.0.0.1', http_port=8098)
    RiakClient(nodes=[{'host': '127.0.0.1', 'http_port': 8098}])
    myClient = RiakClient()
    myBucket = myClient.bucket('users')

    keys = myBucket.get_keys()
    usuarios = Clientes()

    lista2 = []
    for i in range(len(keys)):
        lista = {
            'name': myBucket.get(keys[i]).data['name'],
            'location': myBucket.get(keys[i]).data['location'],
            'role': myBucket.get(keys[i]).data['role'],
            'fullname': myBucket.get(keys[i]).data['fullname']
        }
        lista2.append(lista)

    # for i in range(len(lista1)):
    #     #lista.append(myBucket.get(keys[i]).data['name'])
    #     usuarios.nome = str(lista1[i][0])
    #     #lista.append(myBucket.get(keys[i]).data['location'])
    #     usuarios.locacao = str(lista1[i][1])
    #     #lista.append(myBucket.get(keys[i]).data['role'])
    #     usuarios.profissao = str(lista1[i][2])
    #     #lista.append(myBucket.get(keys[i]).data['fulname'])
    #     usuarios.apelido = str(lista1[i][3])
    #     usuarios.save()

    usuarios = Clientes.objects.all()
    return render(request, 'usuario.html', {'usuarios': lista2})
Exemplo n.º 45
0
def configureRiak(riakIPs, riakPort,logger):


    initial_attempts = 5
    num_attempts = 0

    initial_delay = 5      # 5 seconds between between initial attempts
    longer_delay = 5*60    # 5 minutes = 300 seconds
    delay_time = initial_delay

    nodes=[]
    for eachNode in riakIPs.split(","):
        thisNode= { 'host': eachNode, 'pb_port': riakPort}
        nodes.append(thisNode)

    riakIP=""
    for node in nodes:
        riakIP=json.dumps(node)+ " - " +riakIP

    logger.info('[STATE] Connecting to Riak...')

    connected = False  
    client = RiakClient(protocol='pbc',nodes=nodes)
    while not connected:
	   try:
            logger.info("Attempting to PING....")
            client.ping()
            connected = True
	   except:
            num_attempts += 1
            logger.error('EXCP: No Riak server found')
            if num_attempts == initial_attempts:
                delay_time = longer_delay
                # Wait to issue next connection attempt
                time.sleep(delay_time)

    logger.info('[STATE] Connected to Riak. Successful PING')
    return client
Exemplo n.º 46
0
def cache_top_K():
    clients = [
        RiakClient(host=ip, protocol='pbc', pb_port=RIAK_PORT)
        for ip in RIAK_IPS
    ]
    flowers = [client.bucket('%s/flowers' % LANGUAGE) \
        for client in clients]
    top_flowers = [client.bucket('%s/top_flowers' % LANGUAGE) \
        for client in clients]
    for k, tup, flower, top_flower in zip(range(K), top_K_repos,
                                          cycle(flowers), cycle(top_flowers)):
        dst_repo = tup[0]
        top_flower.new('%d' % k, flower.get(dst_repo).data).store()
    top_flowers[0].new('K', K).store()
def get_hosts(hosts,servers):
  
  results=list()
  riak_reply={}
    
  for server in servers:
    mcodata=RiakClient(host=server).bucket_type('puppet').bucket('nodes')
    
    if hosts is not None: 
        
      for host in hosts:
      #then get specific host
        riak_reply[server] = mcodata.search("facts.fqdn:%s" % host,index='mco_nodes') 
        if riak_reply[server]['docs']:
          results.extend(riak_reply[server]['docs'])
    else: 
      #then get all hosts
      riak_reply[server] = mcodata.get_keys()
      if riak_reply[server]:
        results.extend(riak_reply[server])
        results.sort()
  reply = {'servers':'%s'%servers,'results':results} or None
  return reply
Exemplo n.º 48
0
class MaternityService:
    def __init__(self):
        self.maternity_bucket = settings.RIAK_MATERNITY_BUCKET
        self.riak = RiakClient(host = settings.RIAK_DATABASE['HOST'],
                               port = settings.RIAK_DATABASE['PORT'])
    
    def get(self, pk):
        entity = self.riak.bucket(settings.RIAK_MATERNITY_BUCKET).get(str(pk))
        if entity.exists():
            data = json.loads(entity.get_data())
            data['statistics'] = sorted(data['statistics'].iteritems())
            return data
        else:
            return None
    
    def get_authorities(self):
        query = self.riak.add(settings.RIAK_MATERNITY_BUCKET)
        query.map('''
            function(v) {
                var data = JSON.parse(v.values[0].data);
                if(data.type == 'AUTHORITY') {
                    return [[v.key, data]];
                }
                return [];
            }
        ''')
        return query.run()
        #data = []
        #for result in query.run():
        #    d = result[1]
            #dj = json.loads(d)
        #    data.append((result[0], d))
        #return data
        #return [
        #        (result[0], json.loads(result[1]))
        #        for result in query.run()
        #        ]
Exemplo n.º 49
0
    def __init__(self,
                 protocol="pbc",
                 nodes=[],
                 objects_bucket_name="objects",
                 activities_bucket_name="activities",
                 **kwargs):

        self._riak_backend = RiakClient(protocol=protocol, nodes=nodes)

        r_value = kwargs.get("r")
        w_value = kwargs.get("w")
        dw_value = kwargs.get("dw")
        pr_value = kwargs.get("pr")
        pw_value = kwargs.get("pw")

        self._objects = self._riak_backend.bucket(objects_bucket_name)
        self._activities = self._riak_backend.bucket(activities_bucket_name)

        if r_value:
            self._objects.r = r_value
            self._activities.r = r_value

        if w_value:
            self._objects.w = w_value
            self._activities.w = w_value

        if dw_value:
            self._objects.dw = dw_value
            self._activities.dw = dw_value

        if pr_value:
            self._objects.pr = pr_value
            self._activities.pr = pr_value

        if pw_value:
            self._objects.pw = pw_value
            self._activities.pw = pw_value
def get_hosts(hosts, servers):

    results = list()
    riak_reply = {}

    for server in servers:
        mcodata = RiakClient(host=server).bucket_type('puppet').bucket('nodes')

        if hosts is not None:

            for host in hosts:
                #then get specific host
                riak_reply[server] = mcodata.search("facts.fqdn:%s" % host,
                                                    index='mco_nodes')
                if riak_reply[server]['docs']:
                    results.extend(riak_reply[server]['docs'])
        else:
            #then get all hosts
            riak_reply[server] = mcodata.get_keys()
            if riak_reply[server]:
                results.extend(riak_reply[server])
                results.sort()
    reply = {'servers': '%s' % servers, 'results': results} or None
    return reply
Exemplo n.º 51
0
def writeHistory(ticker, data, riakIP):
    rc = RiakClient(protocol="pbc", host=riakIP, pb_port=8087)
    bucket = rc.bucket("stocks")
    gtemp = data
    if len(gtemp) == 0:
        return 0
    else:

        for j in range(0, len(gtemp.index)):

            # upload json to Riak Bucket
            date = gtemp.index[j].date()
            riakKey = str(ticker + "_" + str(date))
            riakVal = {
                "OPEN": gtemp.values[j, 0],
                "HIGH": gtemp.values[j, 1],
                "LOW": gtemp.values[j, 2],
                "CLOSE": gtemp.values[j, 3],
                "VOLUME": gtemp.values[j, 4],
                "DATE": str(date),
                "TICKER": str(ticker),
            }

            obj = RiakObject(rc, bucket, riakKey)

            obj.add_index("ticker_bin", str(ticker))
            obj.add_index("year_int", int(date.year))
            obj.add_index("month_int", int(date.month))
            obj.add_index("day_int", int(date.day))

            obj.content_type = "text/json"
            # obj.data = riakVal
            obj.data = json.dumps(riakVal)
            obj.store()

    return len(gtemp.index)
Exemplo n.º 52
0
    def _connect(self):
        nodes = []
        security = None

        for host, port in self.hosts:
            node = {'host': host}

            if self.protocol == 'pbc':
                node['pb_port'] = port

            else:
                node['http_port'] = port

            nodes.append(node)

        kwargs = {}

        if self.user is not None:
            kwargs['username'] = self.user

            if self.pwd:
                kwargs['password'] = self.pwd

        if self.pkey is not None:
            kwargs['pkey_file'] = self.pkey

        if self.cert is not None:
            kwargs['cert_file'] = self.cert

        if self.cacert is not None:
            kwargs['cacert_file'] = self.cacert

        if self.crl is not None:
            kwargs['crl_file'] = self.crl

        if self.ciphers is not None:
            kwargs['ciphers'] = self.ciphers

        if kwargs:
            kwargs['ssl_version'] = self.sslver

            security = SecurityCreds(**kwargs)

        else:
            security = None

        return RiakClient(nodes=nodes, credentials=security)
Exemplo n.º 53
0
    def from_config(cls, config):
        config = config.copy()
        bucket_prefix = config.pop('bucket_prefix')
        load_bunch_size = config.pop('load_bunch_size',
                                     cls.DEFAULT_LOAD_BUNCH_SIZE)
        mapreduce_timeout = config.pop('mapreduce_timeout',
                                       cls.DEFAULT_MAPREDUCE_TIMEOUT)
        transport_type = config.pop('transport_type', 'http')
        transport_class = {
            'http': RiakHttpTransport,
            'protocol_buffer': RiakPbcTransport,
        }.get(transport_type, RiakHttpTransport)

        host = config.get('host', '127.0.0.1')
        port = config.get('port', 8098)
        prefix = config.get('prefix', 'riak')
        mapred_prefix = config.get('mapred_prefix', 'mapred')
        client_id = config.get('client_id')
        # NOTE: the current riak.RiakClient expects this parameter but
        #       internally doesn't do anything with it.
        solr_transport_class = config.get('solr_transport_class', None)
        transport_options = config.get('transport_options', None)

        client = RiakClient(host=host, port=port, prefix=prefix,
            mapred_prefix=mapred_prefix, transport_class=transport_class,
            client_id=client_id, solr_transport_class=solr_transport_class,
            transport_options=transport_options)
        # Some versions of the riak client library use simplejson by
        # preference, which breaks some of our unicode assumptions. This makes
        # sure we're using stdlib json which doesn't sometimes return
        # bytestrings instead of unicode.
        client.set_encoder('application/json', json.dumps)
        client.set_encoder('text/json', json.dumps)
        client.set_decoder('application/json', json.loads)
        client.set_decoder('text/json', json.loads)
        return cls(client, bucket_prefix, load_bunch_size=load_bunch_size,
                   mapreduce_timeout=mapreduce_timeout)
Exemplo n.º 54
0
def getData(tickerFile, dataSource, start, end, riakIP):

    rc = RiakClient(protocol='pbc', host=riakIP,
                    pb_port=8087)  #set up riak connection
    added = []  #list of successful adds
    notAdded = []  #list of unsuccessful adds
    stock = pd.read_csv(tickerFile, sep='\t',
                        header=None)  #read in stock tickers

    #loop over all stock tickers
    for i in range(0, len(stock.head(100))):

        ticker = stock.ix[i, 0]
        if getDataByTicker(ticker, dataSource, start, end, riakIP) == 0:
            notAdded.append(ticker)
        else:
            added.append(ticker)
    return added, notAdded
Exemplo n.º 55
0
class RiakTSFinder(object):
    def __init__(self, config):
        self.config = config
        self.riak = RiakClient(host=config['riak_ts']['host'],port=config['riak_ts']['port'])

    def find_nodes(self, query):
        #print vars(query)
        bucket = self.riak.bucket_type('default').bucket('metric_nodes')

        exact = bucket.get("node-%s" % query.pattern)
        nodes = []
        if exact.exists:
            yield LeafNode(query.pattern,RiakTSReader(query.pattern, self.riak, self.config))
        else:
            pattern = query.pattern
            pattern = re.sub('\.select metric','',pattern)
            # If there's not a star in the pattern:
            if re.match('^[^*]*$', pattern):
              # remove any possible trailing .'s, and add a .* at the end
              pattern = re.sub('\.*$', '.*', pattern)
            # Replace all embeded *'s with a Solr regex compatible wildcard, scoped between .'s: [^.]*
            pattern = re.sub('\*','[^.]*', pattern)
            print "Solr pattern: %s" % pattern
            results = bucket.search("branch_s:/%s/" % pattern, index='metric_nodes', rows=1000000)

            print(results)
            if results['num_found'] > 0:
                print "Branch search results"
                for doc in results['docs']:
                    branch = bucket.get(doc['_yz_rk'])
                    branch_node = BranchNode(branch.data['branch_s'])
                    print "BranchNode: name: %s, path: %s" % (branch_node.name, branch_node.path)
                    yield branch_node
            else:
                node_results = bucket.search("node_s:/%s/" % pattern, index='metric_nodes', rows=1000000)
                print "Node search results"
                print(node_results['docs'])
                for doc in node_results['docs']:
                    node = bucket.get(doc['_yz_rk'])
                    node_name = node.data['node_s']
                    print "Node: %s" % node_name
                    yield LeafNode(node_name, RiakTSReader(node_name, self.riak, self.config))
Exemplo n.º 56
0
def get_bucket():
    if 'RIAK_PORT_8098_TCP_ADDR' in os.environ:
        riak = RiakClient('http', host=os.environ['RIAK_PORT_8098_TCP_ADDR'])
    else:
        riak = RiakClient('http')
    return riak.bucket('apps')
Exemplo n.º 57
0
class RiakBackend(KeyValueStoreBackend):
    # TODO: allow using other protocols than protobuf ?
    #: default protocol used to connect to Riak, might be `http` or `pbc`
    protocol = 'pbc'

    #: default Riak bucket name (`default`)
    bucket_name = 'celery'

    #: default Riak server hostname (`localhost`)
    host = 'localhost'

    #: default Riak server port (8087)
    port = 8087

    # supports_autoexpire = False

    def __init__(self, host=None, port=None, bucket_name=None, protocol=None,
                 url=None, *args, **kwargs):
        """Initialize Riak backend instance.

        :raises celery.exceptions.ImproperlyConfigured: if
            module :mod:`riak` is not available.
        """
        super(RiakBackend, self).__init__(*args, **kwargs)

        if not riak:
            raise ImproperlyConfigured(
                'You need to install the riak library to use the '
                'Riak backend.')

        uhost = uport = uname = upass = ubucket = None
        if url:
            uprot, uhost, uport, uname, upass, ubucket, _ = _parse_url(url)
            if ubucket:
                ubucket = ubucket.strip('/')

        config = self.app.conf.get('CELERY_RIAK_BACKEND_SETTINGS', None)
        if config is not None:
            if not isinstance(config, dict):
                raise ImproperlyConfigured(
                    'Riak backend settings should be grouped in a dict')
        else:
            config = {}

        self.host = uhost or config.get('host', self.host)
        self.port = int(uport or config.get('port', self.port))
        self.bucket_name = ubucket or config.get('bucket', self.bucket_name)
        self.protocol = protocol or config.get('protocol', self.protocol)

        # riak bucket must be ascii letters or numbers only
        if not is_ascii(self.bucket_name):
            raise ValueError(E_BUCKET_NAME.format(self.bucket_name))

        self._client = None

    def _get_client(self):
        """Get client connection."""
        if self._client is None or not self._client.is_alive():
            self._client = RiakClient(protocol=self.protocol,
                                      host=self.host,
                                      pb_port=self.port)
            self._client.resolver = last_written_resolver
        return self._client

    def _get_bucket(self):
        """Connect to our bucket."""
        if (
            self._client is None or not self._client.is_alive()
            or not self._bucket
        ):
            self._bucket = self.client.bucket(self.bucket_name)
        return self._bucket

    @property
    def client(self):
        return self._get_client()

    @property
    def bucket(self):
        return self._get_bucket()

    def get(self, key):
        return self.bucket.get(key).data

    def set(self, key, value):
        _key = self.bucket.new(key, data=value)
        _key.store()

    def mget(self, keys):
        return [self.get(key).data for key in keys]

    def delete(self, key):
        self.bucket.delete(key)
Exemplo n.º 58
0
 def test_mapred_bucket_exception(self):
     c = RiakClient()
     with self.assertRaises(ListError):
         c.add('bucket')