def RPUSH(self): key = self.arguments[0] value = self.arguments[1] array = getattr(self.datastore, key, list()) array.append(value) setattr(self.datastore, key, array) return (0, serialize_integer('{}'.format(len(array))))
def SADD(self): key = self.arguments[0] member = self.arguments[1] array = getattr(self.datastore, key, set()) array.add(member) setattr(self.datastore, key, array) return (0, serialize_integer('1'))
def HSET(self): key = self.arguments[0] k = self.arguments[1] value = self.arguments[2] data = getattr(self.datastore, key, dict()) data.update(k=value) setattr(self.datastore, key, data) return (0, serialize_integer('1'))
def DEL(self, key=None): if key is None: for index, key in enumerate(self.arguments): try: delattr(self.datastore, key) except: pass return (0, serialize_integer('{}'.format(index + 1))) else: delattr(self.datastore, key)
def INCR(self): key = self.arguments[0] value, expire = getattr(self.datastore, key, (0, None)) try: value = int(value) + 1 except: return ( 0, serialize_error('ERR value is not an integer or out of range')) setattr(self.datastore, key, (value, expire)) return (0, serialize_integer('{}'.format(value)))
def ZADD(self): def byScore(item): return item[0] key = self.arguments[0] score = self.arguments[1] member = self.arguments[2] array = getattr(self.datastore, key, list()) if [value for value in array if value[1] == member]: array.remove(value) array.append((score, member)) array = sorted(array, key=byScore) setattr(self.datastore, key, array) return (0, serialize_integer('1'))
def ZRANK(self): key = self.arguments[0] member = self.arguments[1] array = getattr(self.datastore, key, list()) if not [ position for position, value in enumerate(array) if value[1] == member ]: return (0, serialize_bulk_string(None)) else: return (0, serialize_integer('{}'.format([ position for position, value in enumerate(array) if value[1] == member ][0])))
def ZCARD(self): key = self.arguments[0] array = getattr(self.datastore, key, list()) return (0, serialize_integer('{}'.format(len(array))))
def DBSIZE(self): return (0, serialize_integer('{}'.format(len(vars(self.datastore)))))