Skip to content

Instantly share code, notes, and snippets.

@skyl
Created February 8, 2010 05:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save skyl/297913 to your computer and use it in GitHub Desktop.
Save skyl/297913 to your computer and use it in GitHub Desktop.
'''
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