Alex -

I suspect you may be looking at some older documentation.  AFAIK all HTTP 
functionality is now (Riak 2.0) supported via PBC so you can pick either 
transport or the other for all of your communication.  In the past there was 
some functionality available only via HTTP.  There are now some direct queries 
to the Solr API which are available only via HTTP, but that’s outside of Riak’s 
core [1].

I’m sure those more in the know will correct me if I’ve misspoken.

Brett

[1] http://docs.basho.com/riak/2.0.0beta1/dev/advanced/search/

On June 23, 2014 at 10:47:45 AM, Alex De la rosa ([email protected]) 
wrote:

Hi Luc,

Cool, thanks! I can see how to do it now:

bucket = client.bucket_type('counter_bucket').bucket('counters')

Will be checking it more to see what can I do that is not yet documented.

The Python documentation says at one point: "Some requests are only valid over 
'http', and will always be sent via those transports, regardless of which 
protocol is preferred.". Can I know which requests are HTTP only? is it for 
something in particular? or they will be made into PBC at some point?

Thanks,
Alex


On Mon, Jun 23, 2014 at 5:29 PM, Luc Perkins <[email protected]> wrote:
Alex,

It sounds like you're working mostly with the lower-level Python API at the 
moment, but if you want to use the higher-level parts of the client for 
interacting with Riak Data Types (sets, maps, and counters), there is a 
tutorial here:

https://raw.githubusercontent.com/basho/basho_docs/2.0.0/source/languages/en/riak/dev/using/data-types.md

You'll see the Python samples interspersed throughout. I know it's annoying 
because it's just raw Markdown at the moment, but this will be deployed to our 
normal docs site soon.

Hope that helps!

Luc


On Mon, Jun 23, 2014 at 4:54 PM, Alex De la rosa <[email protected]> 
wrote:
Hi Sean,

Thanks for your quick reply, is what i suspected, moreover after checking 
riak.proto file in the source. So mainly the contents to store (json or not 
json) is not PB encoded semantically, but is encoded as a "body" field in the 
Message. That's good though.

Another question... is there any estimated date for Riak 2.0 to be released? 
I'm playing with 2.0 beta 1 and the "list" object is a must-have for me (same 
as the "counter" object that can be found in Riak 1.4).

Is crucial for me to decide which technologies to use in my new project; so far 
Riak 2.0 seems a great option, but I can not build under a beta.

Another question now that I talk about "counters"... how do you do it with 
Python's PBC? I can see the functions: RiakClient.get_counter() and 
RiakClient.update_counter()... but... how do you create a new counter? how do 
you specify the special connotations to the bucket?

Thanks,
Alex


On Mon, Jun 23, 2014 at 4:38 PM, Sean Cribbs <[email protected]> wrote:
Hi Alex,

By default, the client assumes new objects use JSON as the encoding. The 
protocol buffers are only used on the wire to encode Riak's protocol. If you 
want to use your own protobuffs messages, I suggest two things:

1. Decide on a `content_type` property for each of your data types and be sure 
to assign that to each key as you create it. I've used 'application/pb-person' 
as an example below.
2. Register encoder and decoder functions [1] on the RiakClient object, like so:

client.set_decoder('application/pb-person', Person.ParseFromString)
client.set_encoder('application/pb-person', lambda x: x.SerializeToString())

[1] 
http://riak-python-client.readthedocs.org/en/latest/client.html#serialization

Cheers,


On Mon, Jun 23, 2014 at 9:19 AM, Alex De la rosa <[email protected]> 
wrote:
Hi there,

I just installed RIAK 2.0 beta 1 and was playing with the Python library using 
'pbc' (Protocol Buffers).

test.py
--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
import riak
client = riak.RiakClient(host ='127.0.0.1', http_port = 8098, pb_port = 8087, 
protocol = 'pbc')
bucket = client.bucket('people')

key = bucket.new('alex', data={"username":"Alex","age":33})
key.store()

print bucket.get('alex').encoded_data
--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------

it works perfectly and it prints {"username": "Alex", "age": 33} as it should 
print.

However, I'm not using a proto file (person.proto) and compiling it into binary 
for Python to use it... something like:

person.proto
--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
message Person {
  required string username = 1;
  required int32 age = 2;
}
--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------

xxx.py
--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
import person_pb2
person = person_pb2.Person()
person.username = "Alex"
person.age = 33
data = person.SerializeToString()
--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------

Am I using the 'pbc' interface wrong? however, on Riak's examples page is done 
also without the "proto" file... I'm a bit confused at the moment as it changed 
the way I normally would use Protocol Buffers.

Thanks,
Alex

_______________________________________________
riak-users mailing list
[email protected]
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com




--
Sean Cribbs <[email protected]>
Software Engineer
Basho Technologies, Inc.
http://basho.com/


_______________________________________________
riak-users mailing list
[email protected]
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com



_______________________________________________  
riak-users mailing list  
[email protected]  
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com  
_______________________________________________
riak-users mailing list
[email protected]
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com

Reply via email to