def setdefault(self, key, default=None) -> 'RDict': key = RukoClient.parse_key(key) new_key = self.concat(self.key, key) cur_val = self.rk.get(new_key) if cur_val is Empty: self.rk.set(new_key, default) return self.child(new_key)
def create_mapping(self, key, filters) -> 'RDict': key = RukoClient.parse_key(key) new_key = self.sub_key(key) if isinstance(filters, list): if filters and isinstance(filters[0], (str, int)): if any(isinstance(i, str) and '.' in i for i in filters): filters = [i.split('.') for i in filters] else: filters = [filters] else: pass # Already in right format else: if isinstance(filters, str) and '.' in filters: filters = [filters.split('.')] else: filters = [RukoClient.parse_key(filters)] for filt in filters: self.rk.create_mapping(new_key, filt) return self.child(new_key)
def get(self, item=None, default=None, fields=None, exclude=None): item = RukoClient.parse_key(item) val = self.rk.get(self.sub_key(item), fields, exclude) if val is Empty: return default return val
def __init__(self, db_key, context: RContext, key_error=KeyError): """Typically, you want to use RDict.client() instead""" self.key = RukoClient.parse_key(db_key) self.context = context self.key_error = key_error
def __setitem__(self, key, value): key = RukoClient.parse_key(key) self.rk.set(self.sub_key(key), value)
def __delitem__(self, key): key = RukoClient.parse_key(key) return self.rk.delete(self.sub_key(key))
def __getitem__( self, item: Index) -> Union['RDict', str, int, list, dict, bool, None]: item = RukoClient.parse_key(item) return self.child(self.sub_key(item))
def delete_mapping(self, key): key = RukoClient.parse_key(key) self.rk.delete_mapping(self.sub_key(key))