Skip to content

Instantly share code, notes, and snippets.

@jirihnidek
Last active August 29, 2015 14:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jirihnidek/fb3bbb23fbeae3ffbdb5 to your computer and use it in GitHub Desktop.
Save jirihnidek/fb3bbb23fbeae3ffbdb5 to your computer and use it in GitHub Desktop.
Examples of Python scripts for adding and changing values in Verse layers

Examples of VerseLayer

This gist contains several Python scripts using class VerseLayer from module Verse Entities: https://github.com/verse/verse-entities

Create Verse Layer

The script that is used for creating new layer is called verse_layer_create.py. This script creates new Node, then this node is moved to the parent of scene nodes. Thus this node will not be destroyed after client logout. New layer is created in the node and layer is filled with values. Custom types of node and layer are passed to the script as command line arguments. New values are passed to script as arguments too as Python dictionary.

Example:

python3 ./verse_layer_create.py --username joe --password mysecret \
    --node_ct 4444 --layer_ct 5555 --values '{0: (0.0, ), 1: (1.0,)}'

Change Verse Layer #1

When we want to change layer with specific ID in node with specific ID, then the script verse_layer_inc_01.py is example, how to do it. This script includes subclass of VerseSession that includes custom callback method _receive_layer_set_value. Values of layer are incremented in this method.

Change Verse Layer #2

This variant of script includes subclass of VerseLayer with custom callback class method _receive_layer_set_value. This variant does not change values in specifica node and layer, but it changes values in all nodes and layer with specific combination of custom types.

#!/usr/bin/env python
'''
This Python script createS node and layer with specific custom types
and it adds specified number of int values.
'''
import verse as vrs
import vrsent
import time
def main(username, password, node_ct, layer_ct, number):
'''
Main function
'''
vrs.set_debug_level(vrs.PRINT_DEBUG_MSG)
session = vrsent.VerseSession(hostname='localhost', service='12345', \
callback_thread=False, username=username, password=password)
session.debug_print = True
scene_parent_node = vrsent.VerseNode(session=session, \
node_id=vrs.SCENE_PARENT_NODE_ID, custom_type=vrs.SCENE_PARENT_NODE_CT)
node = vrsent.VerseNode(session=session, parent=scene_parent_node, \
custom_type=int(node_ct))
layer = vrsent.VerseLayer(node=node, parent_layer=None, layer_id=None, \
data_type=vrs.VALUE_TYPE_UINT32, count=1, custom_type=int(layer_ct))
key = 0
total = int(number)
while(session.state != 'DISCONNECTED'):
session.callback_update()
if key < total:
max_key = key + 300
while key < total and key < max_key:
value = key
layer.items[key] = (value,)
key += 1
time.sleep(1.0/session.fps)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--username', nargs='?', default=None, help='Username')
parser.add_argument('--password', nargs='?', default=None, help='Password')
parser.add_argument('--node_ct', nargs='?', default=2000, \
help='Custom type of node containing layer')
parser.add_argument('--layer_ct', nargs='?', default=1, \
help='Custom type of layer to be altered')
parser.add_argument('--number', nargs='?', default=1000, \
help='Number of items to be created')
args = parser.parse_args()
main(args.username, args.password, args.node_ct, args.layer_ct, args.number)
#!/usr/bin/env python
'''
This Python script createS node and layer with specific custom types
and it adds values to created layer.
'''
import verse as vrs
import vrsent
import time
def main(username, password, node_ct, layer_ct, values):
'''
Main function
'''
vrs.set_debug_level(vrs.PRINT_DEBUG_MSG)
session = vrsent.VerseSession(hostname='localhost', service='12345', \
callback_thread=False, username=username, password=password)
session.debug_print = True
print(values)
try:
values = eval(values[0])
except SyntaxError:
print('Bad syntax of values')
return
l_count = len(values[0])
if type(values[0][0]) == int:
l_data_type = vrs.VALUE_TYPE_UINT64
elif type(values[0][0]) == float:
l_data_type = vrs.VALUE_TYPE_REAL64
else:
print('Unsupported type: ' + type(values[0][0]))
return
scene_parent_node = vrsent.VerseNode(session=session, \
node_id=vrs.SCENE_PARENT_NODE_ID, custom_type=vrs.SCENE_PARENT_NODE_CT)
node = vrsent.VerseNode(session=session, parent=scene_parent_node, \
custom_type=int(node_ct))
layer = vrsent.VerseLayer(node=node, parent_layer=None, layer_id=None, \
data_type=l_data_type, count=l_count, custom_type=int(layer_ct))
for key,value in values.items():
layer.items[key] = value
while(session.state != 'DISCONNECTED'):
session.callback_update()
time.sleep(1.0/session.fps)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--username', nargs='?', default=None, help='Username')
parser.add_argument('--password', nargs='?', default=None, help='Password')
parser.add_argument('--node_ct', nargs='?', default=2000, \
help='Custom type of node containing layer')
parser.add_argument('--layer_ct', nargs='?', default=1, \
help='Custom type of layer to be altered')
parser.add_argument('--values', nargs=1, help='Values of layer')
args = parser.parse_args()
main(args.username, args.password, args.node_ct, args.layer_ct, args.values)
#!/usr/bin/env python
'''
This Python script tries to alter specific layer at Verse server
'''
import verse as vrs
import vrsent
import time
class MySession(vrsent.VerseSession):
"""
Class with session used in this client
"""
def __init__(self, *args, **kwargs):
"""
Constructor of MySession
"""
super(MySession, self).__init__(*args, **kwargs)
self.my_node_id = None
self.my_layer_id = None
self.layer_values = {}
# Layer value set
def _receive_layer_set_value(self, node_id, layer_id, item_id, values):
"""
Custom callback method that is called, when client receive command layer set value of item
"""
layer = super(MySession, self)._receive_layer_set_value(node_id, layer_id, item_id, values)
if node_id == self.my_node_id and layer_id == self.my_layer_id and item_id not in self.layer_values:
# Increment values in item
self.layer_values[item_id] = layer.items[item_id] = tuple( [value + 1 for value in values] )
return layer
def main(username, password, node_id, layer_id):
'''
Main function
'''
vrs.set_debug_level(vrs.PRINT_DEBUG_MSG)
session = MySession(hostname='localhost', service='12345', \
callback_thread=False, username=username, password=password)
session.debug_print = True
session.my_node_id = int(node_id)
session.my_layer_id = int(layer_id)
while(session.state != 'DISCONNECTED'):
session.callback_update()
time.sleep(1.0/session.fps)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--username', nargs='?', default=None, help='Username')
parser.add_argument('--password', nargs='?', default=None, help='Password')
parser.add_argument('--node_id', nargs='?', default=65539, help='ID of node containing layer')
parser.add_argument('--layer_id', nargs='?', default=1, help='ID of layer to be altered')
args = parser.parse_args()
main(args.username, args.password, args.node_id, args.layer_id)
#!/usr/bin/env python
'''
This Python script tries to alter nodes and layers with specific custom types
at Verse server
'''
import verse as vrs
import vrsent
import time
class MyLayer(vrsent.VerseLayer):
"""
Class with session used in this client
"""
def __init__(self, node, parent_layer=None, layer_id=None, data_type=None, \
count=1, custom_type=None):
"""
Custom constructor
"""
super(MyLayer, self).__init__(node, parent_layer, layer_id, data_type, \
count, custom_type)
self._items = {}
# Layer value set
@classmethod
def _receive_layer_set_value(cls, session, node_id, layer_id, \
item_id, values):
"""
Custom callback method that is called, when client received command
'layer set value' of item
"""
layer = super(MyLayer, cls)._receive_layer_set_value(session, node_id, \
layer_id, item_id, values)
if item_id not in layer._items:
# Increment values in item
layer._items[item_id] = layer.items[item_id] = tuple( [value + 1 for value in values] )
return layer
def main(username, password, node_ct, layer_ct):
'''
Main function
'''
vrs.set_debug_level(vrs.PRINT_DEBUG_MSG)
MyLayer.node_custom_type = int(node_ct)
MyLayer.custom_type = int(layer_ct)
session = vrsent.VerseSession(hostname='localhost', service='12345', \
callback_thread=False, username=username, password=password)
session.debug_print = True
while(session.state != 'DISCONNECTED'):
session.callback_update()
time.sleep(1.0/session.fps)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--username', nargs='?', default=None, help='Username')
parser.add_argument('--password', nargs='?', default=None, help='Password')
parser.add_argument('--node_ct', nargs='?', default=2000, help='Custom type of node containing layer')
parser.add_argument('--layer_ct', nargs='?', default=1, help='Custom type of layer to be altered')
args = parser.parse_args()
main(args.username, args.password, args.node_ct, args.layer_ct)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment