Created
February 8, 2010 05:24
-
-
Save skyl/297913 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
keys: | |
::site-wide keys:: | |
'users' | |
The set of usernames. | |
r.sismember('users', 'foouser') | |
'groups' | |
List of all groups | |
'groups_incr' | |
The next group number | |
'items' | |
List of all item ids | |
'items_incr' | |
The next item number | |
::get username from service:: | |
'services:<service>:<unique_id>' | |
Value is our username for the service and unique identifier. | |
::keys based on username:: | |
'users:<username>:<service>' | |
Value is the the json information associated with the username and the service. | |
'users:<username>:set:created_items' | |
Set of item ids created by the user | |
'users:<username>:set:assigned_items' | |
Set of item ids assigned to the user | |
'users:<username>:set:created_groups' | |
The set of group ids created by the user. | |
'users:<username>:set:assigned_groups' | |
The set of group ids that the user has permission to | |
::groups and items:: | |
'groups:<id>' | |
json dict of group attributes | |
'groups:<id>:leader' | |
username of the creator/leader (can change?) | |
'groups:<id>:members' | |
Set of users who have permission with this group | |
'groups:<id>:list:items' | |
List of item ids for the group | |
'items:<id>' | |
json dict of item attributes | |
'items:<id>:group' | |
the id of the group that the item belongs to | |
''' | |
from tornado.escape import json_decode as decode | |
from tornado.escape import json_encode as encode | |
import redis | |
r = redis.Redis() | |
class Group(object): | |
def __init__(self, id): | |
self.id = id | |
#info CRUD | |
def info_dict(self): | |
'''Returns the dictionary of keys/values for this Group''' | |
return decode(r.get('groups:%d' % self.id) | |
def update_info(self, **kwargs): | |
'''Takes a kwargs and updates the group information with them''' | |
d = decode(r.get('groups:%d' % self.id) | |
d.update(kwargs) | |
r.set('groups:%d' % self.id, encode(d)) | |
return d | |
def add_info(self, key, value, overwrite=False): | |
'''The key/value is added if the key doesn't exist or overwrite=True''' | |
d = decode(r.get('groups:%d' % self.id)) | |
if not key in d or overwrite: | |
d[key]=value | |
r.set('groups:%d' % self.id, encode(d)) | |
return d | |
def rm_info(self, key): | |
d = decode(r.get('groups:%d' % self.id)) | |
del d[key] | |
r.set('groups:%d' % self.id, encode(d)) | |
return d | |
def items_list(self): | |
'''Returns the list of items for this Group''' | |
return r.lrange('groups:%d:list:items' % self.id, 0, -1) | |
def add_item(self): | |
'''Add and item to the top of the list ''' | |
def members_set(self): | |
'''Returns the set of members for this Group''' | |
return r.smembers('groups:%d:members' % self.id) | |
def leader(self): | |
'''Returns the username of the leader''' | |
return r.get('groups:%d:leader' % self.id) | |
class Item(object): | |
pass | |
class User(object): | |
'''Convenience methods to retrieve and interact with user data''' | |
def __init__(self, key): | |
self.key = key | |
def get_service(self, service): | |
'''Returns the dict associated with the user for a given service''' | |
return decode(r.get('user:%s:%s' % self.key, service)) | |
# sets | |
def created_groups(self): | |
'''Returns set of created groups''' | |
return r.smembers('user:%s:created_groups' % self.key) | |
def assigned_groups(self): | |
'''Returns set of assigned groups''' | |
return r.smembers('user:%s:assigned_groups' % self.key) | |
def groups(self): | |
'''Returns set of created groups (ids)''' | |
return r.sunion('user:%s:created_groups' % self.key, 'user:%s:assigned_groups' % self.key) | |
def created_items(self): | |
'''Ids for items created by the user''' | |
return r.smembers('user:%s:created_items' % self.key) | |
def assigned_items(self): | |
'''Set of ids for items assigned to the user''' | |
return r.smembers('user:%s:assigned_items' % self.key) | |
def items(self): | |
return r.sunion('user:%s:created_groups' % self.key, 'user:%s:assigned_groups' % self.key) | |
def items_list(self): |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment