Example #1
0
    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
Example #2
0
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)
Example #3
0
 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)
Example #4
0
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