def process(command):
    client = RedisClient(host='localhost', port=6391)
    client.select(2)
    proposal_id_lock = "proposal_id_lock"
    proposal_id_key = "uuid"
    proposal_id = 0
    #get proposal id
    try:
        with RedisLock(client, proposal_id_lock, timeout=lock_timeout) as lock:
            proposal_id = client.get(proposal_id_key)
            client.set(proposal_id_key, int(proposal_id) + 1)
    except LockNotAcquired:
        return reply(False, command)
    proposeal_key = "proposal" + str(proposal_id)
    client.hset(proposeal_key, 'title', command['title'])
    client.hset(proposeal_key, 'content', command['content'])
    #提议: 复议/未复议
    #复议: 赞同/反对
    #会议: 进行中/已完成/为开始
    #决议: 执行
    client.hset(proposeal_key, 'state', 0)
    client.hset(proposeal_key, 'type', 0)
    client.hset(proposeal_key, 'time', time.time())
    client.lpush("list", proposal_id)
    #set proposal title
    #proposal_id: title: ***
    #             content: ***
    #             state: ***
    #             time:
    #SORT list get proposal_*->time
    #sort list by proposal*->time get proposal*->content
    return reply(True, command, proposal_id)
def process(command):
    client = RedisClient(host='localhost', port=6391)
    client.select(3)
    #get notices
    notices = client.smembers('notices')
    print notices
    return reply(True, notices, command)
def process(command):
    proposal_id = command['proposal_id']
    comment = command['comment']
    user_name = command['user_name']

    client = RedisClient(host='localhost', port=6391)
    client.select(2)
    #check propsoal 
    key = "proposal" + str(proposal_id)
    print "key %r" % key
    result = client.exists(key)
    if not result:
       return {'command': command['command'], 'sequence_id': command['sequence_id'], "result": result}

    #sadd
    comment_id = "comment_" + str(proposal_id)
    client.lpush(comment_id, user_name+'^'+comment+'^'+str(time.time()))

    comments = []
    comment_list = client.lrange(comment_id, 0, -1)
    for comment in comment_list:
        result = comment.split('^')
        if len(result)>=3:
            comments.append(Comment(result[0], result[1], result[2]).data_dict)
    return reply(True, command, comments)
def process(command):
    proposal_id = command['proposal_id']
    client = RedisClient(host='localhost', port=6391)
    client.select(2)
    #get proposal
    #get proposal comment

    return reply(True, command, proposal_title_list)
def process(command):
    user_name = command["user_name"]
    password = command["password"]
    print user_name
    print password
    client = RedisClient(host='localhost', port=6391)
    client.select(1)
    pw = client.hget('user_name', user_name)
    if pw == password:
	    return reply(True, 10001, 1, command)
    else:
        print "password is not right : %r" % user_name
    return reply(False, 0, 0, command)
def process(command):
    proposal_id = command['proposal_id']

    client = RedisClient(host='localhost', port=6391)
    client.select(2)
    comments = []
    comment_id = "comment_" + str(proposal_id)
    comment_list = client.lrange(comment_id, 0, -1)
    for comment in comment_list:
        result = comment.split('^')
        if len(result)>=3:
            comments.append(Comment(result[0], result[1], result[2]).data_dict)
    return reply(True, command, comments)
def process(command):
    user_name = command["user_name"]
    password = command["password"]
    print user_name
    print password
    client = RedisClient(host='localhost', port=6391)
    client.select(1)
    pw = client.hget('user_name', user_name)
    if pw == password:
	    return {"result":True, "user_id":10001, "privilege":1}
    else:
        print "password is not right : %r" % user_name
    return {"result":False, "user_id":0, "privilege":0}
def process(command):
    notice = command["content"]
    client = RedisClient(host='localhost', port=6391)
    client.select(3)
    #Write notice to redis
    #Set
    print notice.encode('UTF8')
    result = client.sadd('notices', notice.encode('UTF8'))
    print "sadd result", result
    if result:
        return reply(True, command)
    else:
        return reply(False, command)
def process(command):
    #get account id
    client = RedisClient('localhost', 6391)
    client.select(1)
    accout_id_key = "accout_id"
    accout_id_lock = "accout_id_lock"
    try:
        with RedisLock(client, accout_id_lock, timeout=lock_timeout) as lock:
            accout_id = client.get(accout_id_key)
            client.set(accout_id_key, int(accout_id) + 1)
    except LockNotAcquired:
        pass
    #create account: name password privilege

    return {"result":False, "user_id":0, "privilege":0}
def process(command):
    proposal_id = command['proposal_id']
    print "proposal_id %r" %proposal_id
    client = RedisClient(host='localhost', port=6391)
    client.select(2)
    proposal_key = "proposal" + str(proposal_id)
    print proposal_key
    value = client.hgetall(proposal_key)
    print value 
    client.select(4)
    key = "reconsider" + str(proposal_id)
    client.hset(key, 'title', value['title'])
    client.hset(key, 'state', value['state'])
    client.hset(key, 'content', value['content'])
    client.hset(key, 'type', 1)
    client.hset(key, 'time', value['time'])
    client.hset(key, 'agree_count', 0)
    client.hset(key, 'disagree', 0)
    reconsiderTitle = ReconsiderTitle(value['title'], value['state'], proposal_id, value['content'], 0, 0)
    client.lpush("list", proposal_id)
    #create reconsider

    #delete proposal
    client.select(2)
    client.delete(proposal_key)
    client.lrem("list", proposal_id, 1)
    return reply(True, command, reconsiderTitle)