Skip to content

Instantly share code, notes, and snippets.

@yareally
Created October 26, 2013 15:03
Show Gist options
  • Save yareally/7170395 to your computer and use it in GitHub Desktop.
Save yareally/7170395 to your computer and use it in GitHub Desktop.
import os
from redis import StrictRedis
from models.user import User
import scrypt
class UserHelper(object):
"""
Handles user queries to redis
@param redis_connection:
@type redis_connection: StrictRedis
@param user_id: if not empty, assumed the user exists already
@type user_id: int
"""
_NEXT_USER_KEY = 'next.user.id'
# used to reference a key+value belonging to a specific user
# order of the format is (user_id, key_name)
_USER_STRING_KEY = 'user:%d:%s'
def __init__(self, redis_connection, user_id = None):
self.redis = redis_connection
# get the next unused id for the user to be inserted
if not user_id:
self.user_id = self._next_user_id()
else:
self.user_id = user_id
def add_user(self, twit_user):
"""
@param twit_user:
@type twit_user: User
"""
twit_user.id = self.user_id
trans = self.redis.pipeline()
for key, value in twit_user:
if value == twit_user.password:
value = self.hash_password(twit_user.password)
trans.set(self._set_user_string(key), value)
self.redis.transaction(trans)
def _set_user_string(self, key, user_id = None):
if not user_id:
user_id = self.user_id
return self._USER_STRING_KEY % (user_id, key)
def _next_user_id(self):
return self.redis.incr(self._NEXT_USER_KEY)
def get_user(self, user_id = None):
"""
@param user_id:
"""
if not user_id:
user_id = self.user_id
user = User('', '', '')
user.id = user_id
for key, value in user:
self.redis.get(self._set_user_string(key, user_id))
def user_exists(self, user_id = None):
if not user_id:
user_id = self.user_id
self.redis.get(self._set_user_string('id', user_id))
@staticmethod
def hash_password(password, salt=''):
"""
@param password:
@param salt:
@return:
"""
if not salt:
salt = os.urandom(24).encode('base_64')
return scrypt.hash(password, salt)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment