riakkit, a python riak object mapper, has hit beta!

Andrey V. Martyanov realduke at gmail.com
Thu Mar 1 22:18:17 EST 2012


First of all, yes avoiding PEP8 style is a big deal for me. I don't like
the inconsistencies it brings to my code. Sorry for GPL, it's a typo. I
just don't like GPL-based licenses, including LGPL. I think it's
overcomplicated.

Regardless "Track dependencies between models". It's the same thing as
tracking relationships, but has more flexibility. I my particular example,
you reference the messages by index. Basically, it's some sort of
configurable relationship tracking.

Best regards,
Andrey Martyanov

On Fri, Mar 2, 2012 at 8:02 AM, Shuhao Wu <admin at thekks.net> wrote:

> Hi!
>
> First off, the code is *LGPL* licensed, not GPL. So you're free to put
> this into any code you want, it's just that when you want to modify
> riakkit, you have to release your modified version.
>
> I just went over your idea and it would be a valid solution to some of the
> problems I'm having right now with my own projects with riakkit. When I
> initially started writing riakkit, I needed something to do RAD with, which
> would make sense to have an all-in-one, very simple to use framework,
> rather than working with serialization and what not. However, now I'm
> beginning to see problems in this approach when it comes to scalability as
> I'm slowing moving out of the RAD phase. I haven't done anything as I have
> not encountered any major issues yet (though I probably will).
>
> So here's what I'm thinking for the next branch ( I still have to maintain
> the master branch due to some code i've written and need ): I'm going to
> break riakkit into 2 pieces. The first piece is the underlying piece, which
> will do what you said, serialize/deserialize objects, validation, track
> relationships and what not, however, it doesn't load it those references up
> nor does it try to accomplish everything all in one shot, and a RAD layer
> that's compatible with the current API that will allow RAD to work with it,
> but still reserve the flexibility of having that underlying API that's
> relatively easy (as oppose to dead simple) to work with and not as messy as
> what's going on right now.
>
> I do agree that the code is messy.. Most of the time it's me fixing bugs I
> didn't anticipate as I go along and hacking everything into place..
>
> One thing I'm not too clear about is what you mean by "Track dependencies
> between models". I'm not sure how you think I should go about approaching
> this (which right now is a pretty big disaster.. though relatively stable)
>
> Cheers,
>
> Shuhao
>
> P.S. I don't want to go into the whole PEP8 discussion and 4 spaces vs
> whatever.. I just like the 2 spaces and the style guide that Google uses.
> Is that really a big deal if you're using it as a library?
>
> On Thu, Mar 1, 2012 at 9:35 PM, Andrey V. Martyanov <realduke at gmail.com>wrote:
>
>> Hi!
>>
>> Two things force me to avoid using Riakkit: the code is GPL licensed and
>> non pep8 compliant. So, I cannot fork it and make changes. The code needs
>> clean up, for example, json module is imported in document.py, but not
>> used. Riakkit has no conflict resolution logic, it's basically delegate the
>> work to underlying python client. If I'd like to implement my save method I
>> need to copy and rewrite more than 150 lines of code mess. What I think the
>> mapper should do:
>> 1. Serialize the objects to valid json;
>> 2. Deserialize the data back to class instances;
>> 3. Validate the fields data;
>> 4. Track dependencies between models;
>>
>> Simple example using Riakkit-like syntax;
>>
>> class Post(Document):
>>
>>     bucket_name  = 'posts'
>>
>>     title = types.StringProperty(required=True)
>>     content = types.StringProperty(required=True)
>>
>>
>> class Comment(Document):
>>
>>     bucket_name = 'comments'
>>
>>     text = types.StringProperty(required=True)
>>     post = types.IndexReferenceProperty(reference_class=Post,
>> collection_name='comments')
>>
>> >>> post = Post('title', 'content')
>> >>> comment1 = ('comment1', post=post)
>> >>> comment2 = ('comment2', post=post)
>> >>> post.is_valid()
>> True
>> >> post.serialize()
>> {
>>     "key": "post_key",
>>     "title": "title",
>>     "content": "content",
>>     "comments": [
>>         {
>>             "key": "comment1_key",
>>             "text": "comment1"
>>         },
>>         {
>>             "key": "comment2_key",
>>             "text": "comment2"
>>         },
>>     ]
>> }
>> >>> post.store()
>> True
>> >>> post = Post.get_with_key('post_key')
>> >>> post.comments
>> ['Post comment1', 'Post comment2']
>> >>> post_json_data = get_json_data_from_request()
>> >>> post = Post.deserialize(post_json_data)
>> >>> post.title
>> 'title'
>> >>> post.comments
>> ['Post comment1', 'Post comment2']
>>
>> Something like that.
>>
>>
>> Best regards,
>> Andrey Martyanov
>>
>> On Fri, Mar 2, 2012 at 5:39 AM, Sean Carey <carey at basho.com> wrote:
>>
>>> Keep up the great work Shuhao!
>>>
>>>
>>> On Mar 1, 2012, at 7:36 PM, Shuhao Wu <admin at thekks.net> wrote:
>>>
>>> Hey guys,
>>>
>>> I started writing riakkit approximately 3 months ago and announced it
>>> here. In case you missed that, Riakkit is basically an object mapper for
>>> python and riak, which seemed to be lacking in at the time. Now that 3
>>> months has passed and I have developed this project into much more than
>>> what I had envisioned to begin with. It's currently also being used and
>>> tested in a project of mine (web application) as well and functioning quite
>>> nicely. I would say that currently this is the only object mapper that can
>>> compete with their counterparts in other languages for Riak in Python,
>>> although a lot of work still needs to be done before it could fully compete.
>>>
>>> So today I felt that riakkit is "stable" and "clean" enough to deserve
>>> the first beta release. So I whipped up a website and it's released to
>>> pypi. Here's (again), a demo (the full tutorial can be found on the links
>>> below)
>>>
>>> class User(Document):
>>>     client = riak.RiakClient()
>>>     bucket_name = "users"
>>>
>>>     name = StringProperty(required=True)
>>>
>>> >>> user = User(name="foo")
>>> >>> user.save()
>>> >>> print user.name
>>> foo
>>>
>>> If anyone is interested, you can find the website here:
>>> http://ultimatebuster.github.com/riakkit and the code at
>>> http://github.com/ultimatebuster/riakkit
>>>
>>> Cheers!
>>>
>>> Shuhao
>>>
>>> _______________________________________________
>>> riak-users mailing list
>>> riak-users at lists.basho.com
>>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>>
>>>
>>> _______________________________________________
>>> riak-users mailing list
>>> riak-users at lists.basho.com
>>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>>
>>>
>>
>> _______________________________________________
>> riak-users mailing list
>> riak-users at lists.basho.com
>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.basho.com/pipermail/riak-users_lists.basho.com/attachments/20120302/ff431ffa/attachment.html>


More information about the riak-users mailing list