def __init__(self, node_type, name, parent=None, connection=None, create=False, **keys): if connection is None: connection = client.get_cache(db=1) db_name = '%s:%s' % (parent.db_name, name) if parent else name self._data = Struct(db_name, connection=connection) info_hash_name = '%s_info' % db_name self._info = HashObjSetting(info_hash_name, connection=connection) self.db_connection = connection if create: self._data.name = name self._data.db_name = db_name self._data.node_type = node_type if parent: self._data.parent = parent.db_name parent.add_children(self) self._ttl_setter = _TTL_setter(self.db_name) else: self._ttl_setter = None
def get_node(db_name, connection=None): if connection is None: connection = client.get_cache(db=1) data = Struct(db_name, connection=connection) name = data.name if name is None: # node has been deleted return None node_type = data.node_type return _get_node_object(node_type, db_name, None, connection)
def __init__(self,node_type,name,parent = None, connection = None, create=False): if connection is None: connection = client.get_cache(db=1) db_name = '%s:%s' % (parent.db_name(),name) if parent else name self._data = Struct(db_name, connection=connection) children_queue_name = '%s_children_list' % db_name self._children = QueueSetting(children_queue_name, connection=connection) info_hash_name = '%s_info' % db_name self._info = HashObjSetting(info_hash_name, connection=connection) self.db_connection = connection if create: self._data.name = name self._data.db_name = db_name self._data.node_type = node_type if parent: self._data.parent = parent.db_name() parent.add_children(self)
class DataNode(object): default_time_to_live = 24*3600 # 1 day @staticmethod def exists(name,parent = None, connection = None): if connection is None: connection = client.get_cache(db=1) db_name = '%s:%s' % (parent.db_name(),name) if parent else name return db_name if connection.exists(db_name) else None def __init__(self,node_type,name,parent = None, connection = None, create=False): if connection is None: connection = client.get_cache(db=1) db_name = '%s:%s' % (parent.db_name(),name) if parent else name self._data = Struct(db_name, connection=connection) children_queue_name = '%s_children_list' % db_name self._children = QueueSetting(children_queue_name, connection=connection) info_hash_name = '%s_info' % db_name self._info = HashObjSetting(info_hash_name, connection=connection) self.db_connection = connection if create: self._data.name = name self._data.db_name = db_name self._data.node_type = node_type if parent: self._data.parent = parent.db_name() parent.add_children(self) def db_name(self): return self._data.db_name def name(self): return self._data.name def type(self): return self._data.node_type def iterator(self): return DataNodeIterator(self) def add_children(self,*child): if len(child) > 1: children_no = self._children.extend([c.db_name() for c in child]) else: children_no = self._children.append(child[0].db_name()) def connect(self, signal, callback): dispatcher.connect(callback, signal, self) def parent(self): parent_name = self._data.parent if parent_name: parent = get_node(parent_name) if parent is None: # clean del self._data.parent return parent #@brief iter over children #@return an iterator #@param from_id start child index #@param to_id last child index def children(self,from_id = 0,to_id = -1): for child_name in self._children.get(from_id,to_id): new_child = get_node(child_name) if new_child is not None: yield new_child else: self._children.remove(child_name) # clean def last_child(self): return get_node(self._children.get(-1)) def set_info(self,key,values): self._info[keys] = values if self._ttl > 0: self._info.ttl(self._ttl) def info_iteritems(self): return self._info.iteritems() def info_get(self,name): return self._info.get(name) def data_update(self,keys): self._data.update(keys) def set_ttl(self): redis_conn = client.get_cache(db=1) redis_conn.expire(self.db_name(), DataNode.default_time_to_live) self._children.ttl(DataNode.default_time_to_live) self._info.ttl(DataNode.default_time_to_live) parent = self.parent() if parent: parent.set_ttl() def store(self, signal, event_dict): pass