-
Notifications
You must be signed in to change notification settings - Fork 1
VerseNode
Instances of VerseNode class are used for creating new nodes at Verse server. When other Verse client creates new node at Verse server and corresponding command is received, then VerseNode object is automatically created and stored in dictionary of session: session.nodes.
Client can create new VerseNode and new node at Verse server with following code:
import vrsent
session = vrsent.VerseSession(hostname='localhost', service='12345', \
callback_thread=True, username='joe', password='pass')
node = vrsent.VerseNode(session, custom_type=100)
print(node)Note: When you create new
nodewithVerseNode(), then node create command is sent to Verse server and many things are undefined in the instance:node.id,node.parentetc. until node create command is received from the server. The new instance is also stored in queue of node in session object until node create command is received from server, but it is safe to work with this node as it would be already shared at Verse server. You can create new tag groups and layers of this node, change parent node, etc. These changes will be sent to the Verse server, when the node create command will be received.
Owner of VerseNode can be destroyed this node using node.destroy(). The reference at this node is removed from the dictionary of nodes, when node destroy command is received from Verse server.
A parent node can be changed with property parent: node.parent = other_node
Each node has dictionary of all child nodes:
for child_node in node.child_nodes.values():
print(child_node)A node has property owner. It could be used to get current owner: node_owner = node.owner . It returns reference at VerseUser node. This owner property could be also used for setting new owner of the node. Only current owner of node can change owner of the node.
Access permission are stored in dictionary node.perms.
Note: Setting permission has not been implemented yet.
Node priority can be changed with property prio.
User with write permission to the node can lock this node using node.lock(). A locker of node can unlock node with node.unlock(). Each node has also property node.locked that returns True, when node is locked, otherwise it return False. Property node.locker returns reference at current locker (avatar) of node, when node is locked, otherwise it returns None.
As node can be used for sharing tag groups and layers, the instance of VerseNode contains dictionary of VerseTagGroups and VerseLayers instances. VerseTagGroups are stored in node.tag_groups and VerseLayers in node.layers.
The big advantage of VerseNode is support of subclassing of VerseNode. Subclass of VerseNode could be created with following code:
import vrsent
session = vrsent.VerseSession(hostname='localhost', service='12345', \
callback_thread=True, username='joe', password='pass')
TEST_NODE_CUSTOM_TYPE = 219
class TestNode(vrsent.VerseNode):
"""
Subclass of VerseNode
"""
custom_type = TEST_NODE_CUSTOM_TYPE
@classmethod
def _receive_node_create(cls, session, node_id, parent_id, \
user_id, custom_type):
"""
Custom callback method called, when this custom_type of
VerseNode is created by verse server and appropriate
command is received.
"""
print("Custom method of VerseNode subclass TestNode.")
return super(TestNode, cls)._receive_node_create(session, \
node_id, parent_id, user_id, custom_type)Very important part of VerseNode subclassing is class attribute custom_type. When this attribute is not set in class, then subclass of VerseNode will not work correctly.
New custom subclass of VerseNode can be created with following code:
# First method of creating instance of TestNode
node01 = VerseNode(session=session, custom_type=TEST_NODE_CUSTOM_TYPE)
# More straightforward method of creating TestNode instance
node02 = TestNode(session=session)It is possible to create custom methods for all callback methods of VerseNode, but it is important to call method of parent class VerseNode using super() at the end of custom method and this method should return result of parent method.
Following methods could be customized in subclasses of VerseNode:
def __str__(self):
pass@classmethod
def _receive_node_create(cls, session, node_id, parent_id, \
user_id, custom_type):
pass@classmethod
def _receive_node_destroy(cls, session, node_id):
pass@classmethod
def _receive_node_link(cls, session, parent_node_id, child_node_id):
pass@classmethod
def _receive_node_lock(cls, session, node_id, avatar_id):
pass@classmethod
def _receive_node_unlock(cls, session, node_id, avatar_id):
pass@classmethod
def _receive_node_owner(cls, session, node_id, user_id):
pass@classmethod
def _receive_node_perm(cls, session, node_id, user_id, perm):
passIt is possible to create other custom methods in subclass, but it is not recommended.