    

 ## On this page

  

 

 # ensight\_grpc

 Last update: 16.07.2025 

<a id="l00001" name="l00001"></a> 1 import grpc

<a id="l00002" name="l00002"></a> 2 import os, os.path

<a id="l00003" name="l00003"></a> 3 import platform

<a id="l00004" name="l00004"></a> 4 import random

<a id="l00005" name="l00005"></a> 5 import subprocess

<a id="l00006" name="l00006"></a> 6 import threading

<a id="l00007" name="l00007"></a> 7 import uuid

<a id="l00008" name="l00008"></a> 8 from concurrent import futures

<a id="l00009" name="l00009"></a> 9 

<a id="l00010" name="l00010"></a> 10 \# these modules are the result of running protoc on the .proto file

<a id="l00011" name="l00011"></a> 11 import ensight_pb2

<a id="l00012" name="l00012"></a> 12 import ensight_pb2_grpc

<a id="l00013" name="l00013"></a> 13 import dynamic_scene_graph_pb2

<a id="l00014" name="l00014"></a> 14 import dynamic_scene_graph_pb2_grpc

<a id="l00015" name="l00015"></a> 15 

<a id="l00016" name="l00016"></a> 16 \# Shared memory interface

<a id="l00017" name="l00017"></a> 17 import ensight_grpc_shmem

<a id="l00018" name="l00018"></a> 18 

<a id="l00019" name="l00019"></a> 19 

<a id="l00020" name="l00020"></a> 20 

<a id="l00028" name="l00028"></a> 28 

<a id="l00029" name="l00029"></a> 29 

<a id="l00035" name="l00035"></a>[ 35](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml) class [EnSightGRPC](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml)(object):

<a id="l00036" name="l00036"></a> 36 

<a id="l00045" name="l00045"></a>[ 45](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8ee6669d7985844654e2bbf9424f8f78) def [\_\_init\_\_](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8ee6669d7985844654e2bbf9424f8f78)(self, port=12345, host='127.0.0.1', version=''):

<a id="l00046" name="l00046"></a> 46 self.[\_host](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#acfa730cfcb568cc26f079996804ebb97)_host = host

<a id="l00047" name="l00047"></a> 47 self.[\_port](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a3288be89c9ab636283cb59df9fe0dc17)_port = port

<a id="l00048" name="l00048"></a> 48 self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abba6d94b9acc418d610e900aecbfd23c)_pid = None

<a id="l00049" name="l00049"></a> 49 self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abb7212c7e4ad9e7ef398bf5e13f15fb8)_channel = None

<a id="l00050" name="l00050"></a> 50 self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub = None

<a id="l00051" name="l00051"></a> 51 self.[\_dsg\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a44561d8bec5adfc5fe51978b5f4dd6fb)_dsg_stub = None

<a id="l00052" name="l00052"></a> 52 self.[\_version](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a4ed120bd2b7a2a477bf0c19dc1765fce)_version = version

<a id="l00053" name="l00053"></a> 53 self.[\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aec4f4d61de4dfe799e620a005945a016)_security_token = str(random.randint(0, 1000000))

<a id="l00054" name="l00054"></a> 54 \# Streaming APIs

<a id="l00055" name="l00055"></a> 55 \# Images

<a id="l00056" name="l00056"></a> 56 self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aefa2e7fffb9d88723e08ca8a17b56b62)_image_stream = None

<a id="l00057" name="l00057"></a> 57 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a371afc6dc33f0d9fab188aa758c3cafb)_image_thread = None

<a id="l00058" name="l00058"></a> 58 self.[\_image](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a6e8208612ce6492e8702f0fcdfe32901)_image = None

<a id="l00059" name="l00059"></a> 59 self.[\_image\_number](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ab320bc03c41789180117beac3b94154f)_image_number = 0

<a id="l00060" name="l00060"></a> 60 self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7cc44f4eb01c9bfe14a17d01dc8d8d36)_shmem_client = None

<a id="l00061" name="l00061"></a> 61 self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#afb65fb2ac55da0dfc23022eb188656fc)_shmem_filename = None

<a id="l00062" name="l00062"></a> 62 \# Event (strings)

<a id="l00063" name="l00063"></a> 63 self.[\_event\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ade63e1260b8690a73b72f2d65b561096)_event_stream = None

<a id="l00064" name="l00064"></a> 64 self.[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a98f82222b0e4dcbf23f28ed20168a94e)_event_thread = None

<a id="l00065" name="l00065"></a> 65 self.[\_events](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ac385f5b18232bcec204b028221602427)_events = list()

<a id="l00066" name="l00066"></a> 66 self.[\_prefix](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ab95ca5fcf1061b71a5d16f562995c7d0)_prefix = None

<a id="l00067" name="l00067"></a> 67 self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa94401a916262c38e1173cca04c9390c)_sub_service = None

<a id="l00068" name="l00068"></a> 68 

<a id="l00069" name="l00069"></a> 69 

<a id="l00072" name="l00072"></a>[ 72](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8636a0a4c5cd251a170e5a74062a85ad) def [host](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8636a0a4c5cd251a170e5a74062a85ad)(self):

<a id="l00073" name="l00073"></a> 73 return self.[\_host](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#acfa730cfcb568cc26f079996804ebb97)_host

<a id="l00074" name="l00074"></a> 74 

<a id="l00075" name="l00075"></a> 75 

<a id="l00078" name="l00078"></a>[ 78](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aba8a316de83d60d8e336d5aa0c6b81b9) def [port](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aba8a316de83d60d8e336d5aa0c6b81b9)(self):

<a id="l00079" name="l00079"></a> 79 return self.[\_port](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a3288be89c9ab636283cb59df9fe0dc17)_port

<a id="l00080" name="l00080"></a> 80 

<a id="l00081" name="l00081"></a> 81 

<a id="l00090" name="l00090"></a>[ 90](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a486d4c52d83f0e87bc3597eb9c9e5be8) def [set\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a486d4c52d83f0e87bc3597eb9c9e5be8)(self, n):

<a id="l00091" name="l00091"></a> 91 self.[\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aec4f4d61de4dfe799e620a005945a016)_security_token = n

<a id="l00092" name="l00092"></a> 92 

<a id="l00093" name="l00093"></a> 93 

<a id="l00096" name="l00096"></a>[ 96](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a77a79eaefba2c31fe9c0fb79cfce33ec) def [security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a77a79eaefba2c31fe9c0fb79cfce33ec)(self):

<a id="l00097" name="l00097"></a> 97 return self.[\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aec4f4d61de4dfe799e620a005945a016)_security_token

<a id="l00098" name="l00098"></a> 98 

<a id="l00099" name="l00099"></a> 99 

<a id="l00103" name="l00103"></a>[ 103](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a5ddd86d9e961a5877d2bd7bbf5dc00be) def [shutdown](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a5ddd86d9e961a5877d2bd7bbf5dc00be)(self):

<a id="l00104" name="l00104"></a> 104 \# remove any subscription services we may have started

<a id="l00105" name="l00105"></a> 105 self.[unsubscribe](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7987c8afd724e4474091050ff177dcde)unsubscribe()

<a id="l00106" name="l00106"></a> 106 \# if we launched EnSight, shut it down.

<a id="l00107" name="l00107"></a> 107 if self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abba6d94b9acc418d610e900aecbfd23c)_pid is not None:

<a id="l00108" name="l00108"></a> 108 _ = self.[stop\_server](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa4eebb244cc65980a49641277f44e335)stop_server()

<a id="l00109" name="l00109"></a> 109 \# shutdown any shared memory client

<a id="l00110" name="l00110"></a> 110 if self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7cc44f4eb01c9bfe14a17d01dc8d8d36)_shmem_client is not None:

<a id="l00111" name="l00111"></a> 111 ensight_grpc_shmem.stream_destroy(self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7cc44f4eb01c9bfe14a17d01dc8d8d36)_shmem_client)

<a id="l00112" name="l00112"></a> 112 self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7cc44f4eb01c9bfe14a17d01dc8d8d36)_shmem_client = None

<a id="l00113" name="l00113"></a> 113 \# destroy any shared memory file we generated

<a id="l00114" name="l00114"></a> 114 if self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#afb65fb2ac55da0dfc23022eb188656fc)_shmem_filename is not None:

<a id="l00115" name="l00115"></a> 115 try:

<a id="l00116" name="l00116"></a> 116 os.remove(self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#afb65fb2ac55da0dfc23022eb188656fc)_shmem_filename)

<a id="l00117" name="l00117"></a> 117 except Exception as e:

<a id="l00118" name="l00118"></a> 118 print("Unable to delete shared memory file: {}".format(str(e)))

<a id="l00119" name="l00119"></a> 119 self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#afb65fb2ac55da0dfc23022eb188656fc)_shmem_filename = None

<a id="l00120" name="l00120"></a> 120 

<a id="l00121" name="l00121"></a> 121 

<a id="l00126" name="l00126"></a>[ 126](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a67ce94a9e4e719738045e46995a7d2bc) def [start\_server](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a67ce94a9e4e719738045e46995a7d2bc)(self):

<a id="l00127" name="l00127"></a> 127 if self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abba6d94b9acc418d610e900aecbfd23c)_pid is not None:

<a id="l00128" name="l00128"></a> 128 return self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abba6d94b9acc418d610e900aecbfd23c)_pid

<a id="l00129" name="l00129"></a> 129 

<a id="l00130" name="l00130"></a> 130 my_env = os.environ.copy()

<a id="l00131" name="l00131"></a> 131 exe = f'ensight{self.\_version}'

<a id="l00132" name="l00132"></a> 132 cmd = [exe, '-batch', '-grpc\_server', str(self.[\_port](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a3288be89c9ab636283cb59df9fe0dc17)_port)]

<a id="l00133" name="l00133"></a> 133 if self.[\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aec4f4d61de4dfe799e620a005945a016)_security_token:

<a id="l00134" name="l00134"></a> 134 cmd.append("-security")

<a id="l00135" name="l00135"></a> 135 cmd.append(self.[\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aec4f4d61de4dfe799e620a005945a016)_security_token)

<a id="l00136" name="l00136"></a> 136 if platform.system() == 'Windows':

<a id="l00137" name="l00137"></a> 137 DETACHED_PROCESS = 0x00000008

<a id="l00138" name="l00138"></a> 138 cmd[0] += ".bat"

<a id="l00139" name="l00139"></a> 139 cmd.append('-minimize\_console')

<a id="l00140" name="l00140"></a> 140 self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abba6d94b9acc418d610e900aecbfd23c)_pid = subprocess.Popen(cmd, creationflags=DETACHED_PROCESS, close_fds=True, env=my_env).pid

<a id="l00141" name="l00141"></a> 141 else:

<a id="l00142" name="l00142"></a> 142 self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abba6d94b9acc418d610e900aecbfd23c)_pid = subprocess.Popen(exe, close_fds=True, env=my_env).pid

<a id="l00143" name="l00143"></a> 143 return self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abba6d94b9acc418d610e900aecbfd23c)_pid

<a id="l00144" name="l00144"></a> 144 

<a id="l00145" name="l00145"></a> 145 

<a id="l00150" name="l00150"></a>[ 150](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa4eebb244cc65980a49641277f44e335) def [stop\_server](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa4eebb244cc65980a49641277f44e335)(self):

<a id="l00151" name="l00151"></a> 151 response = None

<a id="l00152" name="l00152"></a> 152 \# if we are connected and we started the server, we will emit the 'exit' message

<a id="l00153" name="l00153"></a> 153 if (self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abba6d94b9acc418d610e900aecbfd23c)_pid is not None) and self.[is\_connected](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8fc7d16e77608ebf9fac994cfe6c6962)is_connected():

<a id="l00154" name="l00154"></a> 154 response = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub.[Exit](group___en_sight_service.xhtml#gaa5a89ed87c59689f8be8dbfa474323d4)(ensight_pb2.ExitRequest(), metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aea40e1b9afe15e81b3bb0f2c56b711fe)metadata())

<a id="l00155" name="l00155"></a> 155 self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub = None

<a id="l00156" name="l00156"></a> 156 self.[\_dsg\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a44561d8bec5adfc5fe51978b5f4dd6fb)_dsg_stub = None

<a id="l00157" name="l00157"></a> 157 self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abb7212c7e4ad9e7ef398bf5e13f15fb8)_channel.close()

<a id="l00158" name="l00158"></a> 158 self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abb7212c7e4ad9e7ef398bf5e13f15fb8)_channel = None

<a id="l00159" name="l00159"></a> 159 self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abba6d94b9acc418d610e900aecbfd23c)_pid = None

<a id="l00160" name="l00160"></a> 160 return response

<a id="l00161" name="l00161"></a> 161 

<a id="l00162" name="l00162"></a> 162 

<a id="l00165" name="l00165"></a>[ 165](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8fc7d16e77608ebf9fac994cfe6c6962) def [is\_connected](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8fc7d16e77608ebf9fac994cfe6c6962)(self):

<a id="l00166" name="l00166"></a> 166 return self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abb7212c7e4ad9e7ef398bf5e13f15fb8)_channel is not None

<a id="l00167" name="l00167"></a> 167 

<a id="l00168" name="l00168"></a> 168 

<a id="l00174" name="l00174"></a>[ 174](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a159a6958683fa9a20a2ec0dc6b042d64) def [connect](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a159a6958683fa9a20a2ec0dc6b042d64)(self, timeout=15.0):

<a id="l00175" name="l00175"></a> 175 if self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abb7212c7e4ad9e7ef398bf5e13f15fb8)_channel is not None:

<a id="l00176" name="l00176"></a> 176 return

<a id="l00177" name="l00177"></a> 177 self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abb7212c7e4ad9e7ef398bf5e13f15fb8)_channel = grpc.insecure_channel("{}:{}".format(self.[\_host](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#acfa730cfcb568cc26f079996804ebb97)_host, self.[\_port](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a3288be89c9ab636283cb59df9fe0dc17)_port),

<a id="l00178" name="l00178"></a> 178 options=[('grpc.max\_receive\_message\_length', -1)])

<a id="l00179" name="l00179"></a> 179 try:

<a id="l00180" name="l00180"></a> 180 grpc.channel_ready_future(self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abb7212c7e4ad9e7ef398bf5e13f15fb8)_channel).result(timeout=timeout)

<a id="l00181" name="l00181"></a> 181 except grpc.FutureTimeoutError:

<a id="l00182" name="l00182"></a> 182 self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abb7212c7e4ad9e7ef398bf5e13f15fb8)_channel = None

<a id="l00183" name="l00183"></a> 183 return

<a id="l00184" name="l00184"></a> 184 self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub = ensight_pb2_grpc.EnSightServiceStub(self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abb7212c7e4ad9e7ef398bf5e13f15fb8)_channel)

<a id="l00185" name="l00185"></a> 185 self.[\_dsg\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a44561d8bec5adfc5fe51978b5f4dd6fb)_dsg_stub = dynamic_scene_graph_pb2_grpc.DynamicSceneGraphServiceStub(self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abb7212c7e4ad9e7ef398bf5e13f15fb8)_channel)

<a id="l00186" name="l00186"></a> 186 

<a id="l00187" name="l00187"></a> 187 

<a id="l00190" name="l00190"></a> 190 def metadata(self):

<a id="l00191" name="l00191"></a> 191 ret = list()

<a id="l00192" name="l00192"></a> 192 if self.[\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aec4f4d61de4dfe799e620a005945a016)_security_token is not None:

<a id="l00193" name="l00193"></a> 193 s = self.[\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aec4f4d61de4dfe799e620a005945a016)_security_token

<a id="l00194" name="l00194"></a> 194 if type(s) == str:

<a id="l00195" name="l00195"></a> 195 s = s.encode("utf-8")

<a id="l00196" name="l00196"></a> 196 ret.append( (b'shared\_secret', s) )

<a id="l00197" name="l00197"></a> 197 return ret

<a id="l00198" name="l00198"></a> 198 

<a id="l00199" name="l00199"></a> 199 

<a id="l00208" name="l00208"></a>[ 208](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a84d1219b2212bd20046fbbad4e8d3a16) def [render](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a84d1219b2212bd20046fbbad4e8d3a16)(self, width=640, height=480, aa=1, raw=False, highlighting=False):

<a id="l00209" name="l00209"></a> 209 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a159a6958683fa9a20a2ec0dc6b042d64)connect()

<a id="l00210" name="l00210"></a> 210 ret_type = ensight_pb2.RenderRequest.IMAGE_PNG

<a id="l00211" name="l00211"></a> 211 if raw:

<a id="l00212" name="l00212"></a> 212 ret_type = ensight_pb2.RenderRequest.IMAGE_RAW

<a id="l00213" name="l00213"></a> 213 try:

<a id="l00214" name="l00214"></a> 214 response = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub.[RenderImage](group___en_sight_service.xhtml#gadf6500961c95cd701020e5c8d2005138)(ensight_pb2.RenderRequest(type=ret_type, image_width=width,

<a id="l00215" name="l00215"></a> 215 image_height=height, image_aa_passes=aa,

<a id="l00216" name="l00216"></a> 216 include_highlighting=highlighting),

<a id="l00217" name="l00217"></a> 217 metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aea40e1b9afe15e81b3bb0f2c56b711fe)metadata())

<a id="l00218" name="l00218"></a> 218 except:

<a id="l00219" name="l00219"></a> 219 raise IOError("gRPC connection dropped")

<a id="l00220" name="l00220"></a> 220 return response.value

<a id="l00221" name="l00221"></a> 221 

<a id="l00222" name="l00222"></a> 222 

<a id="l00227" name="l00227"></a>[ 227](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aceff36a440081a2bd9883e06c8aad3e9) def [geometry](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aceff36a440081a2bd9883e06c8aad3e9)(self):

<a id="l00228" name="l00228"></a> 228 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a159a6958683fa9a20a2ec0dc6b042d64)connect()

<a id="l00229" name="l00229"></a> 229 try:

<a id="l00230" name="l00230"></a> 230 response = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub.[GetGeometry](group___en_sight_service.xhtml#gafa5fd7a25231c0b93591f681c3679d3b)(

<a id="l00231" name="l00231"></a> 231 ensight_pb2.GeometryRequest(type=ensight_pb2.GeometryRequest.GEOMETRY_GLB), metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aea40e1b9afe15e81b3bb0f2c56b711fe)metadata())

<a id="l00232" name="l00232"></a> 232 except:

<a id="l00233" name="l00233"></a> 233 raise IOError("gRPC connection dropped")

<a id="l00234" name="l00234"></a> 234 return response.value

<a id="l00235" name="l00235"></a> 235 

<a id="l00236" name="l00236"></a> 236 

<a id="l00245" name="l00245"></a>[ 245](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a39f58e6eb36ca8f1da5a68340e4f7cfb) def [command](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a39f58e6eb36ca8f1da5a68340e4f7cfb)(self, command_string, do_eval=True, json=False):

<a id="l00246" name="l00246"></a> 246 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a159a6958683fa9a20a2ec0dc6b042d64)connect()

<a id="l00247" name="l00247"></a> 247 flags = ensight_pb2.PythonRequest.EXEC_RETURN_PYTHON

<a id="l00248" name="l00248"></a> 248 if json:

<a id="l00249" name="l00249"></a> 249 flags = ensight_pb2.PythonRequest.EXEC_RETURN_JSON

<a id="l00250" name="l00250"></a> 250 if not do_eval:

<a id="l00251" name="l00251"></a> 251 flags = ensight_pb2.PythonRequest.EXEC_NO_RESULT

<a id="l00252" name="l00252"></a> 252 try:

<a id="l00253" name="l00253"></a> 253 response = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub.[RunPython](group___en_sight_service.xhtml#ga73690c0e3495951863406e26dd7f906b)(ensight_pb2.PythonRequest(type=flags, command=command_string),

<a id="l00254" name="l00254"></a> 254 metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aea40e1b9afe15e81b3bb0f2c56b711fe)metadata())

<a id="l00255" name="l00255"></a> 255 except:

<a id="l00256" name="l00256"></a> 256 raise IOError("gRPC connection dropped")

<a id="l00257" name="l00257"></a> 257 if response.error &lt; 0:

<a id="l00258" name="l00258"></a> 258 raise RuntimeError("Remote execution error")

<a id="l00259" name="l00259"></a> 259 if flags == ensight_pb2.PythonRequest.EXEC_NO_RESULT:

<a id="l00260" name="l00260"></a> 260 return None

<a id="l00261" name="l00261"></a> 261 elif flags == ensight_pb2.PythonRequest.EXEC_RETURN_PYTHON:

<a id="l00262" name="l00262"></a> 262 return eval(response.value)

<a id="l00263" name="l00263"></a> 263 return response.value

<a id="l00264" name="l00264"></a> 264 

<a id="l00265" name="l00265"></a> 265 

<a id="l00273" name="l00273"></a>[ 273](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a1b458ced85e5762a65f6350bb44d4663) def [image\_stream\_enable](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a1b458ced85e5762a65f6350bb44d4663)(self, flip_vertical=False):

<a id="l00274" name="l00274"></a> 274 if self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aefa2e7fffb9d88723e08ca8a17b56b62)_image_stream is not None:

<a id="l00275" name="l00275"></a> 275 return

<a id="l00276" name="l00276"></a> 276 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a159a6958683fa9a20a2ec0dc6b042d64)connect()

<a id="l00277" name="l00277"></a> 277 self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aefa2e7fffb9d88723e08ca8a17b56b62)_image_stream = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub.[GetImageStream](group___en_sight_service.xhtml#gaec3249209f41b4042cd2c24ba7f11024)(

<a id="l00278" name="l00278"></a> 278 ensight_pb2.ImageStreamRequest(flip_vertical=flip_vertical, chunk=True), metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aea40e1b9afe15e81b3bb0f2c56b711fe)metadata())

<a id="l00279" name="l00279"></a> 279 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a371afc6dc33f0d9fab188aa758c3cafb)_image_thread = threading.Thread(target=self.[poll\_images](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a9b8da1e52c89ea7002e761cd8b79a8e9)poll_images)

<a id="l00280" name="l00280"></a> 280 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a371afc6dc33f0d9fab188aa758c3cafb)_image_thread.daemon = True

<a id="l00281" name="l00281"></a> 281 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a371afc6dc33f0d9fab188aa758c3cafb)_image_thread.start()

<a id="l00282" name="l00282"></a> 282 

<a id="l00283" name="l00283"></a> 283 

<a id="l00290" name="l00290"></a>[ 290](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7c97a3695f88cca927e038db0a89166b) def [get\_image](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7c97a3695f88cca927e038db0a89166b)(self):

<a id="l00291" name="l00291"></a> 291 return self.[\_image](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a6e8208612ce6492e8702f0fcdfe32901)_image, self.[\_image\_number](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ab320bc03c41789180117beac3b94154f)_image_number

<a id="l00292" name="l00292"></a> 292 

<a id="l00293" name="l00293"></a> 293 

<a id="l00299" name="l00299"></a> 299 def put_image(self, the_image):

<a id="l00300" name="l00300"></a> 300 self.[\_image](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a6e8208612ce6492e8702f0fcdfe32901)_image = the_image

<a id="l00301" name="l00301"></a> 301 self.[\_image\_number](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ab320bc03c41789180117beac3b94154f)_image_number += 1

<a id="l00302" name="l00302"></a> 302 

<a id="l00303" name="l00303"></a> 303 

<a id="l00309" name="l00309"></a> 309 def poll_images(self):

<a id="l00310" name="l00310"></a> 310 try:

<a id="l00311" name="l00311"></a> 311 while self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub is not None:

<a id="l00312" name="l00312"></a> 312 if self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7cc44f4eb01c9bfe14a17d01dc8d8d36)_shmem_client is not None:

<a id="l00313" name="l00313"></a> 313 img = ensight_grpc_shmem.stream_lock(self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7cc44f4eb01c9bfe14a17d01dc8d8d36)_shmem_client)

<a id="l00314" name="l00314"></a> 314 if type(img) is dict:

<a id="l00315" name="l00315"></a> 315 the_image = dict(pixels=img['pixeldata'], width=img['width'], height=img['height'])

<a id="l00316" name="l00316"></a> 316 self.[put\_image](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a2dc7fd7752a1761e6d6570b331e8d6f6)put_image(the_image)

<a id="l00317" name="l00317"></a> 317 ensight_grpc_shmem.stream_unlock(self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7cc44f4eb01c9bfe14a17d01dc8d8d36)_shmem_client)

<a id="l00318" name="l00318"></a> 318 

<a id="l00319" name="l00319"></a> 319 if self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aefa2e7fffb9d88723e08ca8a17b56b62)_image_stream is not None:

<a id="l00320" name="l00320"></a> 320 img = self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aefa2e7fffb9d88723e08ca8a17b56b62)_image_stream.next()

<a id="l00321" name="l00321"></a> 321 buffer = img.pixels

<a id="l00322" name="l00322"></a> 322 

<a id="l00323" name="l00323"></a> 323 while not img.final:

<a id="l00324" name="l00324"></a> 324 img = self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aefa2e7fffb9d88723e08ca8a17b56b62)_image_stream.next()

<a id="l00325" name="l00325"></a> 325 buffer += img.pixels

<a id="l00326" name="l00326"></a> 326 

<a id="l00327" name="l00327"></a> 327 the_image = dict(pixels=buffer, width=img.width, height=img.height)

<a id="l00328" name="l00328"></a> 328 self.[put\_image](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a2dc7fd7752a1761e6d6570b331e8d6f6)put_image(the_image)

<a id="l00329" name="l00329"></a> 329 except:

<a id="l00330" name="l00330"></a> 330 \# signal that the gRPC connection has broken

<a id="l00331" name="l00331"></a> 331 self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aefa2e7fffb9d88723e08ca8a17b56b62)_image_stream = None

<a id="l00332" name="l00332"></a> 332 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a371afc6dc33f0d9fab188aa758c3cafb)_image_thread = None

<a id="l00333" name="l00333"></a> 333 self.[\_image](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a6e8208612ce6492e8702f0fcdfe32901)_image = None

<a id="l00334" name="l00334"></a> 334 

<a id="l00335" name="l00335"></a> 335 

<a id="l00340" name="l00340"></a>[ 340](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a4c9628794a89801fb2755e8b83275409) def [image\_stream\_is\_enabled](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a4c9628794a89801fb2755e8b83275409)(self):

<a id="l00341" name="l00341"></a> 341 return self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aefa2e7fffb9d88723e08ca8a17b56b62)_image_stream is not None

<a id="l00342" name="l00342"></a> 342 

<a id="l00343" name="l00343"></a> 343 

<a id="l00349" name="l00349"></a>[ 349](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a07c8395c90161e48c4c87fa44fa75dd5) def [prefix](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a07c8395c90161e48c4c87fa44fa75dd5)(self):

<a id="l00350" name="l00350"></a> 350 \# prefix URIs will have the format: "grpc://{uuid}/{callbackname}?enum={}&amp;uid={}"

<a id="l00351" name="l00351"></a> 351 if self.[\_prefix](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ab95ca5fcf1061b71a5d16f562995c7d0)_prefix is None:

<a id="l00352" name="l00352"></a> 352 self.[\_prefix](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ab95ca5fcf1061b71a5d16f562995c7d0)_prefix = "grpc://" + str(uuid.uuid1()) + "/"

<a id="l00353" name="l00353"></a> 353 return self.[\_prefix](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ab95ca5fcf1061b71a5d16f562995c7d0)_prefix

<a id="l00354" name="l00354"></a> 354 

<a id="l00355" name="l00355"></a> 355 

<a id="l00361" name="l00361"></a>[ 361](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a96ae8db8010e96b3a132aab095054bcd) def [event\_stream\_enable](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a96ae8db8010e96b3a132aab095054bcd)(self):

<a id="l00362" name="l00362"></a> 362 if self.[\_event\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ade63e1260b8690a73b72f2d65b561096)_event_stream is not None:

<a id="l00363" name="l00363"></a> 363 return

<a id="l00364" name="l00364"></a> 364 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a159a6958683fa9a20a2ec0dc6b042d64)connect()

<a id="l00365" name="l00365"></a> 365 self.[\_event\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ade63e1260b8690a73b72f2d65b561096)_event_stream = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub.[GetEventStream](group___en_sight_service.xhtml#gab64a0bc516588def314e022736cc1dcc)(ensight_pb2.EventStreamRequest(prefix=self.[prefix](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a07c8395c90161e48c4c87fa44fa75dd5)prefix()),

<a id="l00366" name="l00366"></a> 366 metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aea40e1b9afe15e81b3bb0f2c56b711fe)metadata())

<a id="l00367" name="l00367"></a> 367 self.[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a98f82222b0e4dcbf23f28ed20168a94e)_event_thread = threading.Thread(target=self.[poll\_events](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abf9de5a7f74dcf6f1b7412d42abb8ef9)poll_events)

<a id="l00368" name="l00368"></a> 368 self.[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a98f82222b0e4dcbf23f28ed20168a94e)_event_thread.daemon = True

<a id="l00369" name="l00369"></a> 369 self.[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a98f82222b0e4dcbf23f28ed20168a94e)_event_thread.start()

<a id="l00370" name="l00370"></a> 370 

<a id="l00371" name="l00371"></a> 371 

<a id="l00377" name="l00377"></a>[ 377](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#af0b01c8104a2c8424352c03156295446) def [dynamic\_scene\_graph\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#af0b01c8104a2c8424352c03156295446)(self, client_cmds):

<a id="l00378" name="l00378"></a> 378 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a159a6958683fa9a20a2ec0dc6b042d64)connect()

<a id="l00379" name="l00379"></a> 379 return self.[\_dsg\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a44561d8bec5adfc5fe51978b5f4dd6fb)_dsg_stub.[GetSceneStream](group___d_s_g.xhtml#ga013fc67ee73abc7c3d7ce82115972b67)(client_cmds, metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aea40e1b9afe15e81b3bb0f2c56b711fe)metadata())

<a id="l00380" name="l00380"></a> 380 

<a id="l00381" name="l00381"></a> 381 

<a id="l00386" name="l00386"></a>[ 386](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a257fac6f7ebc52f5590052ce5e26bf1a) def [event\_stream\_is\_enabled](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a257fac6f7ebc52f5590052ce5e26bf1a)(self):

<a id="l00387" name="l00387"></a> 387 return self.[\_event\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ade63e1260b8690a73b72f2d65b561096)_event_stream is not None

<a id="l00388" name="l00388"></a> 388 

<a id="l00389" name="l00389"></a> 389 

<a id="l00396" name="l00396"></a>[ 396](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ae9476edbbeb3f2c866b406d6f49a878d) def [get\_event](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ae9476edbbeb3f2c866b406d6f49a878d)(self):

<a id="l00397" name="l00397"></a> 397 try:

<a id="l00398" name="l00398"></a> 398 return self.[\_events](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ac385f5b18232bcec204b028221602427)_events.pop(0)

<a id="l00399" name="l00399"></a> 399 except IndexError:

<a id="l00400" name="l00400"></a> 400 return None

<a id="l00401" name="l00401"></a> 401 

<a id="l00402" name="l00402"></a> 402 

<a id="l00408" name="l00408"></a> 408 def put_event(self, evt):

<a id="l00409" name="l00409"></a> 409 self.[\_events](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ac385f5b18232bcec204b028221602427)_events.append(evt)

<a id="l00410" name="l00410"></a> 410 

<a id="l00411" name="l00411"></a> 411 

<a id="l00417" name="l00417"></a> 417 def poll_events(self):

<a id="l00418" name="l00418"></a> 418 try:

<a id="l00419" name="l00419"></a> 419 while self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub is not None:

<a id="l00420" name="l00420"></a> 420 evt = self.[\_event\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ade63e1260b8690a73b72f2d65b561096)_event_stream.next()

<a id="l00421" name="l00421"></a> 421 self.[put\_event](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aad022507502b10a7010b4eb697006216)put_event(evt)

<a id="l00422" name="l00422"></a> 422 except:

<a id="l00423" name="l00423"></a> 423 \# signal that the gRPC connection has broken

<a id="l00424" name="l00424"></a> 424 self.[\_event\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ade63e1260b8690a73b72f2d65b561096)_event_stream = None

<a id="l00425" name="l00425"></a> 425 self.[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a98f82222b0e4dcbf23f28ed20168a94e)_event_thread = None

<a id="l00426" name="l00426"></a> 426 

<a id="l00427" name="l00427"></a> 427 

<a id="l00435" name="l00435"></a> 435 def start_sub_service(self):

<a id="l00436" name="l00436"></a> 436 try:

<a id="l00437" name="l00437"></a> 437 if self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa94401a916262c38e1173cca04c9390c)_sub_service is not None:

<a id="l00438" name="l00438"></a> 438 return

<a id="l00439" name="l00439"></a> 439 self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa94401a916262c38e1173cca04c9390c)_sub_service = EnSightSubServicer(parent=self)

<a id="l00440" name="l00440"></a> 440 self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa94401a916262c38e1173cca04c9390c)_sub_service.start()

<a id="l00441" name="l00441"></a> 441 except:

<a id="l00442" name="l00442"></a> 442 self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa94401a916262c38e1173cca04c9390c)_sub_service = None

<a id="l00443" name="l00443"></a> 443 

<a id="l00444" name="l00444"></a> 444 

<a id="l00449" name="l00449"></a>[ 449](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a5c37ea23b40c16cea4dcce1fa4168ff9) def [subscribe\_events](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a5c37ea23b40c16cea4dcce1fa4168ff9)(self):

<a id="l00450" name="l00450"></a> 450 self.[start\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa9a514c98af165cc77681448df89e5a7)start_sub_service()

<a id="l00451" name="l00451"></a> 451 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a159a6958683fa9a20a2ec0dc6b042d64)connect()

<a id="l00452" name="l00452"></a> 452 conn_type = ensight_pb2.SubscribeEventOptions.GRPC

<a id="l00453" name="l00453"></a> 453 options = dict(uri=self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa94401a916262c38e1173cca04c9390c)_sub_service._uri)

<a id="l00454" name="l00454"></a> 454 event_options = ensight_pb2.SubscribeEventOptions(prefix=self.[prefix](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a07c8395c90161e48c4c87fa44fa75dd5)prefix(), type=conn_type, options=options)

<a id="l00455" name="l00455"></a> 455 _ = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub.[SubscribeEvents](group___en_sight_service.xhtml#gab466da93dfd6027a2a6dbe5df6902189)(event_options, metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aea40e1b9afe15e81b3bb0f2c56b711fe)metadata())

<a id="l00456" name="l00456"></a> 456 

<a id="l00457" name="l00457"></a> 457 

<a id="l00465" name="l00465"></a>[ 465](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa302bfab5b17ea395432a153c264e823) def [subscribe\_images](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa302bfab5b17ea395432a153c264e823)(self, flip_vertical=False, use_shmem=True):

<a id="l00466" name="l00466"></a> 466 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a159a6958683fa9a20a2ec0dc6b042d64)connect()

<a id="l00467" name="l00467"></a> 467 if use_shmem:

<a id="l00468" name="l00468"></a> 468 try:

<a id="l00469" name="l00469"></a> 469 \# we need a shared memory file

<a id="l00470" name="l00470"></a> 470 self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#afb65fb2ac55da0dfc23022eb188656fc)_shmem_filename = self.[find\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a5e661f720595a2edc1f22b43ab475655)find_filename()

<a id="l00471" name="l00471"></a> 471 if self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#afb65fb2ac55da0dfc23022eb188656fc)_shmem_filename is not None:

<a id="l00472" name="l00472"></a> 472 conn_type = ensight_pb2.SubscribeImageOptions.SHARED_MEM

<a id="l00473" name="l00473"></a> 473 options = dict(filename=self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#afb65fb2ac55da0dfc23022eb188656fc)_shmem_filename)

<a id="l00474" name="l00474"></a> 474 image_options = ensight_pb2.SubscribeImageOptions(prefix=self.[prefix](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a07c8395c90161e48c4c87fa44fa75dd5)prefix(), type=conn_type,

<a id="l00475" name="l00475"></a> 475 options=options, flip_vertical=flip_vertical,

<a id="l00476" name="l00476"></a> 476 chunk=False)

<a id="l00477" name="l00477"></a> 477 test = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub.[SubscribeImages](group___en_sight_service.xhtml#ga6295c516b8a271034e9ee785991c2e7b)(image_options, metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aea40e1b9afe15e81b3bb0f2c56b711fe)metadata())

<a id="l00478" name="l00478"></a> 478 \# start the local server

<a id="l00479" name="l00479"></a> 479 self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7cc44f4eb01c9bfe14a17d01dc8d8d36)_shmem_client = ensight_grpc_shmem.stream_create(self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#afb65fb2ac55da0dfc23022eb188656fc)_shmem_filename)

<a id="l00480" name="l00480"></a> 480 \# turn on the polling thread

<a id="l00481" name="l00481"></a> 481 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a371afc6dc33f0d9fab188aa758c3cafb)_image_thread = threading.Thread(target=self.[poll\_images](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a9b8da1e52c89ea7002e761cd8b79a8e9)poll_images)

<a id="l00482" name="l00482"></a> 482 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a371afc6dc33f0d9fab188aa758c3cafb)_image_thread.daemon = True

<a id="l00483" name="l00483"></a> 483 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a371afc6dc33f0d9fab188aa758c3cafb)_image_thread.start()

<a id="l00484" name="l00484"></a> 484 return

<a id="l00485" name="l00485"></a> 485 except Exception as e:

<a id="l00486" name="l00486"></a> 486 print("Unable to subscribe to an image stream via shared memory: {}".format(str(e)))

<a id="l00487" name="l00487"></a> 487 

<a id="l00488" name="l00488"></a> 488 self.[start\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa9a514c98af165cc77681448df89e5a7)start_sub_service()

<a id="l00489" name="l00489"></a> 489 conn_type = ensight_pb2.SubscribeImageOptions.GRPC

<a id="l00490" name="l00490"></a> 490 options = dict(uri=self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa94401a916262c38e1173cca04c9390c)_sub_service._uri)

<a id="l00491" name="l00491"></a> 491 image_options = ensight_pb2.SubscribeImageOptions(prefix=self.[prefix](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a07c8395c90161e48c4c87fa44fa75dd5)prefix(), type=conn_type, options=options,

<a id="l00492" name="l00492"></a> 492 flip_vertical=flip_vertical, chunk=True)

<a id="l00493" name="l00493"></a> 493 _ = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub.[SubscribeImages](group___en_sight_service.xhtml#ga6295c516b8a271034e9ee785991c2e7b)(image_options, metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aea40e1b9afe15e81b3bb0f2c56b711fe)metadata())

<a id="l00494" name="l00494"></a> 494 

<a id="l00495" name="l00495"></a> 495 

<a id="l00499" name="l00499"></a>[ 499](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7987c8afd724e4474091050ff177dcde) def [unsubscribe](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7987c8afd724e4474091050ff177dcde)(self):

<a id="l00500" name="l00500"></a> 500 if self.[is\_connected](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8fc7d16e77608ebf9fac994cfe6c6962)is_connected():

<a id="l00501" name="l00501"></a> 501 if self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa94401a916262c38e1173cca04c9390c)_sub_service is not None:

<a id="l00502" name="l00502"></a> 502 prefix = ensight_pb2.Prefix(prefix=self.[prefix](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a07c8395c90161e48c4c87fa44fa75dd5)prefix())

<a id="l00503" name="l00503"></a> 503 self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)_stub.[Unsubscribe](group___en_sight_service.xhtml#ga9161e678fe3d7608820907269d55bf8c)(prefix, metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aea40e1b9afe15e81b3bb0f2c56b711fe)metadata())

<a id="l00504" name="l00504"></a> 504 self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa94401a916262c38e1173cca04c9390c)_sub_service = None

<a id="l00505" name="l00505"></a> 505 

<a id="l00506" name="l00506"></a> 506 

<a id="l00512" name="l00512"></a> 512 @classmethod

<a id="l00513" name="l00513"></a> 513 def find_filename(cls, size=1024*1024*25):

<a id="l00514" name="l00514"></a> 514 for i in range(100):

<a id="l00515" name="l00515"></a> 515 filename = os.path.join(os.getcwd(), "shmem\_{}.bin".format(os.getpid()+i))

<a id="l00516" name="l00516"></a> 516 if not os.path.exists(filename):

<a id="l00517" name="l00517"></a> 517 try:

<a id="l00518" name="l00518"></a> 518 tmp = open(filename, "wb")

<a id="l00519" name="l00519"></a> 519 tmp.write(b'\\0'*size) \# 25MB

<a id="l00520" name="l00520"></a> 520 tmp.close()

<a id="l00521" name="l00521"></a> 521 return filename

<a id="l00522" name="l00522"></a> 522 except:

<a id="l00523" name="l00523"></a> 523 pass

<a id="l00524" name="l00524"></a> 524 return None

<a id="l00525" name="l00525"></a> 525 

<a id="l00526" name="l00526"></a> 526 

<a id="l00527" name="l00527"></a> 527 

<a id="l00540" name="l00540"></a> 540 class EnSightSubServicer(ensight_pb2_grpc.EnSightSubscriptionServicer):

<a id="l00541" name="l00541"></a> 541 

<a id="l00542" name="l00542"></a> 542 def [\_\_init\_\_](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8ee6669d7985844654e2bbf9424f8f78)(self, parent=None):

<a id="l00543" name="l00543"></a> 543 self._server = None

<a id="l00544" name="l00544"></a> 544 self._uri = ""

<a id="l00545" name="l00545"></a> 545 self._parent = parent

<a id="l00546" name="l00546"></a> 546 

<a id="l00547" name="l00547"></a> 547 def [PublishEvent](group___en_sight_subscription.xhtml#gaaded4bebe805118acaa44365183c2586)(self, request, context):

<a id="l00548" name="l00548"></a> 548 if self._parent is not None:

<a id="l00549" name="l00549"></a> 549 self._parent.put_event(request)

<a id="l00550" name="l00550"></a> 550 return ensight_pb2.GenericResponse(str='Event Published')

<a id="l00551" name="l00551"></a> 551 

<a id="l00552" name="l00552"></a> 552 def [PublishImage](group___en_sight_subscription.xhtml#ga052334cb4098295f08b649151eb24320)(self, request_iterator, context):

<a id="l00553" name="l00553"></a> 553 img = request_iterator.next()

<a id="l00554" name="l00554"></a> 554 buffer = img.pixels

<a id="l00555" name="l00555"></a> 555 while not img.final:

<a id="l00556" name="l00556"></a> 556 img = request_iterator.next()

<a id="l00557" name="l00557"></a> 557 buffer += img.pixels

<a id="l00558" name="l00558"></a> 558 the_image = dict(pixels=buffer, width=img.width, height=img.height)

<a id="l00559" name="l00559"></a> 559 if self._parent is not None:

<a id="l00560" name="l00560"></a> 560 self._parent.put_image(the_image)

<a id="l00561" name="l00561"></a> 561 return ensight_pb2.GenericResponse(str='Image Published')

<a id="l00562" name="l00562"></a> 562 

<a id="l00563" name="l00563"></a> 563 def start(self):

<a id="l00564" name="l00564"></a> 564 self._server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

<a id="l00565" name="l00565"></a> 565 ensight_pb2_grpc.add_EnSightSubscriptionServicer_to_server(

<a id="l00566" name="l00566"></a> 566 self, self._server)

<a id="l00567" name="l00567"></a> 567 \# Start the server on localhost with a random port

<a id="l00568" name="l00568"></a> 568 port = self._server.add_insecure_port('localhost:0')

<a id="l00569" name="l00569"></a> 569 self._uri = 'localhost:' + str(port)

<a id="l00570" name="l00570"></a> 570 self._server.start()

<a id="l00571" name="l00571"></a> 571 

<a id="l00572" name="l00572"></a> 572 

[ensight\_grpc.EnSightGRPC](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml)

Python binding for the EnSight client gRPC API.

**Definition:** [ensight\_grpc.py:35](ensight__grpc_8py_source.xhtml#l00035)



[ensight\_grpc.EnSightGRPC.prefix](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a07c8395c90161e48c4c87fa44fa75dd5)

def prefix(self)

return the unique prefix for this instance

**Definition:** [ensight\_grpc.py:349](ensight__grpc_8py_source.xhtml#l00349)



[ensight\_grpc.EnSightGRPC.connect](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a159a6958683fa9a20a2ec0dc6b042d64)

def connect(self, timeout=15.0)

establish a connection to an EnSight gRPC server

**Definition:** [ensight\_grpc.py:174](ensight__grpc_8py_source.xhtml#l00174)



[ensight\_grpc.EnSightGRPC.image\_stream\_enable](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a1b458ced85e5762a65f6350bb44d4663)

def image_stream_enable(self, flip_vertical=False)

enable a simple gRPC-based image stream from EnSight

**Definition:** [ensight\_grpc.py:273](ensight__grpc_8py_source.xhtml#l00273)



[ensight\_grpc.EnSightGRPC.event\_stream\_is\_enabled](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a257fac6f7ebc52f5590052ce5e26bf1a)

def event_stream_is_enabled(self)

check to see if the event stream is enabled

**Definition:** [ensight\_grpc.py:386](ensight__grpc_8py_source.xhtml#l00386)



[ensight\_grpc.EnSightGRPC.put\_image](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a2dc7fd7752a1761e6d6570b331e8d6f6)

def put_image(self, the_image)

**Definition:** [ensight\_grpc.py:299](ensight__grpc_8py_source.xhtml#l00299)



[ensight\_grpc.EnSightGRPC.\_port](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a3288be89c9ab636283cb59df9fe0dc17)

_port

**Definition:** [ensight\_grpc.py:47](ensight__grpc_8py_source.xhtml#l00047)



[ensight\_grpc.EnSightGRPC.\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a371afc6dc33f0d9fab188aa758c3cafb)

_image_thread

**Definition:** [ensight\_grpc.py:57](ensight__grpc_8py_source.xhtml#l00057)



[ensight\_grpc.EnSightGRPC.command](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a39f58e6eb36ca8f1da5a68340e4f7cfb)

def command(self, command_string, do_eval=True, json=False)

send a Python command string to be executed in EnSight

**Definition:** [ensight\_grpc.py:245](ensight__grpc_8py_source.xhtml#l00245)



[ensight\_grpc.EnSightGRPC.\_dsg\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a44561d8bec5adfc5fe51978b5f4dd6fb)

_dsg_stub

**Definition:** [ensight\_grpc.py:51](ensight__grpc_8py_source.xhtml#l00051)



[ensight\_grpc.EnSightGRPC.set\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a486d4c52d83f0e87bc3597eb9c9e5be8)

def set_security_token(self, n)

set the security token for the gRPC connection.

**Definition:** [ensight\_grpc.py:90](ensight__grpc_8py_source.xhtml#l00090)



[ensight\_grpc.EnSightGRPC.image\_stream\_is\_enabled](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a4c9628794a89801fb2755e8b83275409)

def image_stream_is_enabled(self)

check to see if the image stream is enabled

**Definition:** [ensight\_grpc.py:340](ensight__grpc_8py_source.xhtml#l00340)



[ensight\_grpc.EnSightGRPC.\_version](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a4ed120bd2b7a2a477bf0c19dc1765fce)

_version

**Definition:** [ensight\_grpc.py:52](ensight__grpc_8py_source.xhtml#l00052)



[ensight\_grpc.EnSightGRPC.subscribe\_events](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a5c37ea23b40c16cea4dcce1fa4168ff9)

def subscribe_events(self)

subscribe to an event stream using a locally launched gRPC server

**Definition:** [ensight\_grpc.py:449](ensight__grpc_8py_source.xhtml#l00449)



[ensight\_grpc.EnSightGRPC.shutdown](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a5ddd86d9e961a5877d2bd7bbf5dc00be)

def shutdown(self)

shut down all gRPC connections

**Definition:** [ensight\_grpc.py:103](ensight__grpc_8py_source.xhtml#l00103)



[ensight\_grpc.EnSightGRPC.find\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a5e661f720595a2edc1f22b43ab475655)

def find_filename(cls, size=1024 *1024 *25)

**Definition:** [ensight\_grpc.py:513](ensight__grpc_8py_source.xhtml#l00513)



[ensight\_grpc.EnSightGRPC.start\_server](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a67ce94a9e4e719738045e46995a7d2bc)

def start_server(self)

Start an EnSight gRPC server instance.

**Definition:** [ensight\_grpc.py:126](ensight__grpc_8py_source.xhtml#l00126)



[ensight\_grpc.EnSightGRPC.\_image](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a6e8208612ce6492e8702f0fcdfe32901)

_image

**Definition:** [ensight\_grpc.py:58](ensight__grpc_8py_source.xhtml#l00058)



[ensight\_grpc.EnSightGRPC.security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a77a79eaefba2c31fe9c0fb79cfce33ec)

def security_token(self)

return the security token for the gRPC connection.

**Definition:** [ensight\_grpc.py:96](ensight__grpc_8py_source.xhtml#l00096)



[ensight\_grpc.EnSightGRPC.unsubscribe](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7987c8afd724e4474091050ff177dcde)

def unsubscribe(self)

unsubscribe from any image or event streams that have been subscribed to

**Definition:** [ensight\_grpc.py:499](ensight__grpc_8py_source.xhtml#l00499)



[ensight\_grpc.EnSightGRPC.get\_image](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7c97a3695f88cca927e038db0a89166b)

def get_image(self)

retrieve the current EnSight image

**Definition:** [ensight\_grpc.py:290](ensight__grpc_8py_source.xhtml#l00290)



[ensight\_grpc.EnSightGRPC.\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a7cc44f4eb01c9bfe14a17d01dc8d8d36)

_shmem_client

**Definition:** [ensight\_grpc.py:60](ensight__grpc_8py_source.xhtml#l00060)



[ensight\_grpc.EnSightGRPC.render](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a84d1219b2212bd20046fbbad4e8d3a16)

def render(self, width=640, height=480, aa=1, raw=False, highlighting=False)

render the current EnSight screen and return the image

**Definition:** [ensight\_grpc.py:208](ensight__grpc_8py_source.xhtml#l00208)



[ensight\_grpc.EnSightGRPC.host](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8636a0a4c5cd251a170e5a74062a85ad)

def host(self)

get the hostname for this connection

**Definition:** [ensight\_grpc.py:72](ensight__grpc_8py_source.xhtml#l00072)



[ensight\_grpc.EnSightGRPC.\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8d6e08882d55ce3c7fbd837bedfc0d98)

_stub

**Definition:** [ensight\_grpc.py:50](ensight__grpc_8py_source.xhtml#l00050)



[ensight\_grpc.EnSightGRPC.\_\_init\_\_](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8ee6669d7985844654e2bbf9424f8f78)

def __init__(self, port=12345, host='127.0.0.1', version='')

create an instance of the EnSight gRPC interface wrapper

**Definition:** [ensight\_grpc.py:45](ensight__grpc_8py_source.xhtml#l00045)



[ensight\_grpc.EnSightGRPC.is\_connected](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a8fc7d16e77608ebf9fac994cfe6c6962)

def is_connected(self)

check if a gRPC connection has been established

**Definition:** [ensight\_grpc.py:165](ensight__grpc_8py_source.xhtml#l00165)



[ensight\_grpc.EnSightGRPC.event\_stream\_enable](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a96ae8db8010e96b3a132aab095054bcd)

def event_stream_enable(self)

enable a simple gRPC-based event stream from EnSight

**Definition:** [ensight\_grpc.py:361](ensight__grpc_8py_source.xhtml#l00361)



[ensight\_grpc.EnSightGRPC.\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a98f82222b0e4dcbf23f28ed20168a94e)

_event_thread

**Definition:** [ensight\_grpc.py:64](ensight__grpc_8py_source.xhtml#l00064)



[ensight\_grpc.EnSightGRPC.poll\_images](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#a9b8da1e52c89ea7002e761cd8b79a8e9)

def poll_images(self)

**Definition:** [ensight\_grpc.py:309](ensight__grpc_8py_source.xhtml#l00309)



[ensight\_grpc.EnSightGRPC.subscribe\_images](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa302bfab5b17ea395432a153c264e823)

def subscribe_images(self, flip_vertical=False, use_shmem=True)

subscribe to an image stream

**Definition:** [ensight\_grpc.py:465](ensight__grpc_8py_source.xhtml#l00465)



[ensight\_grpc.EnSightGRPC.stop\_server](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa4eebb244cc65980a49641277f44e335)

def stop_server(self)

shut down any gPRC connection made by this class

**Definition:** [ensight\_grpc.py:150](ensight__grpc_8py_source.xhtml#l00150)



[ensight\_grpc.EnSightGRPC.\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa94401a916262c38e1173cca04c9390c)

_sub_service

**Definition:** [ensight\_grpc.py:67](ensight__grpc_8py_source.xhtml#l00067)



[ensight\_grpc.EnSightGRPC.start\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aa9a514c98af165cc77681448df89e5a7)

def start_sub_service(self)

**Definition:** [ensight\_grpc.py:435](ensight__grpc_8py_source.xhtml#l00435)



[ensight\_grpc.EnSightGRPC.put\_event](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aad022507502b10a7010b4eb697006216)

def put_event(self, evt)

**Definition:** [ensight\_grpc.py:408](ensight__grpc_8py_source.xhtml#l00408)



[ensight\_grpc.EnSightGRPC.\_image\_number](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ab320bc03c41789180117beac3b94154f)

_image_number

**Definition:** [ensight\_grpc.py:59](ensight__grpc_8py_source.xhtml#l00059)



[ensight\_grpc.EnSightGRPC.\_prefix](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ab95ca5fcf1061b71a5d16f562995c7d0)

_prefix

**Definition:** [ensight\_grpc.py:66](ensight__grpc_8py_source.xhtml#l00066)



[ensight\_grpc.EnSightGRPC.port](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aba8a316de83d60d8e336d5aa0c6b81b9)

def port(self)

get the port number for this connection

**Definition:** [ensight\_grpc.py:78](ensight__grpc_8py_source.xhtml#l00078)



[ensight\_grpc.EnSightGRPC.\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abb7212c7e4ad9e7ef398bf5e13f15fb8)

_channel

**Definition:** [ensight\_grpc.py:49](ensight__grpc_8py_source.xhtml#l00049)



[ensight\_grpc.EnSightGRPC.\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abba6d94b9acc418d610e900aecbfd23c)

_pid

**Definition:** [ensight\_grpc.py:48](ensight__grpc_8py_source.xhtml#l00048)



[ensight\_grpc.EnSightGRPC.poll\_events](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#abf9de5a7f74dcf6f1b7412d42abb8ef9)

def poll_events(self)

**Definition:** [ensight\_grpc.py:417](ensight__grpc_8py_source.xhtml#l00417)



[ensight\_grpc.EnSightGRPC.\_events](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ac385f5b18232bcec204b028221602427)

_events

**Definition:** [ensight\_grpc.py:65](ensight__grpc_8py_source.xhtml#l00065)



[ensight\_grpc.EnSightGRPC.geometry](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aceff36a440081a2bd9883e06c8aad3e9)

def geometry(self)

return the current scene geometry in glTF format

**Definition:** [ensight\_grpc.py:227](ensight__grpc_8py_source.xhtml#l00227)



[ensight\_grpc.EnSightGRPC.\_host](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#acfa730cfcb568cc26f079996804ebb97)

_host

**Definition:** [ensight\_grpc.py:46](ensight__grpc_8py_source.xhtml#l00046)



[ensight\_grpc.EnSightGRPC.\_event\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ade63e1260b8690a73b72f2d65b561096)

_event_stream

**Definition:** [ensight\_grpc.py:63](ensight__grpc_8py_source.xhtml#l00063)



[ensight\_grpc.EnSightGRPC.get\_event](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#ae9476edbbeb3f2c866b406d6f49a878d)

def get_event(self)

retrieve and remove the oldest ensightservice::EventReply string

**Definition:** [ensight\_grpc.py:396](ensight__grpc_8py_source.xhtml#l00396)



[ensight\_grpc.EnSightGRPC.metadata](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aea40e1b9afe15e81b3bb0f2c56b711fe)

def metadata(self)

**Definition:** [ensight\_grpc.py:190](ensight__grpc_8py_source.xhtml#l00190)



[ensight\_grpc.EnSightGRPC.\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aec4f4d61de4dfe799e620a005945a016)

_security_token

**Definition:** [ensight\_grpc.py:53](ensight__grpc_8py_source.xhtml#l00053)



[ensight\_grpc.EnSightGRPC.\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#aefa2e7fffb9d88723e08ca8a17b56b62)

_image_stream

**Definition:** [ensight\_grpc.py:56](ensight__grpc_8py_source.xhtml#l00056)



[ensight\_grpc.EnSightGRPC.dynamic\_scene\_graph\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#af0b01c8104a2c8424352c03156295446)

def dynamic_scene_graph_stream(self, client_cmds)

open up a dynamic scene graph stream

**Definition:** [ensight\_grpc.py:377](ensight__grpc_8py_source.xhtml#l00377)



[ensight\_grpc.EnSightGRPC.\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.xhtml#afb65fb2ac55da0dfc23022eb188656fc)

_shmem_filename

**Definition:** [ensight\_grpc.py:61](ensight__grpc_8py_source.xhtml#l00061)



[ensightservice::DynamicSceneGraphService::GetSceneStream](group___d_s_g.xhtml#ga013fc67ee73abc7c3d7ce82115972b67)

rpc GetSceneStream(stream SceneClientCommand) returns(stream SceneUpdateCommand)

Start a new dynamic scene graph stream.

**Definition:** [dynamic\_scene\_graph.proto:135](dynamic__scene__graph_8proto_source.xhtml#l00135)



[ensightservice::EnSightService::SubscribeImages](group___en_sight_service.xhtml#ga6295c516b8a271034e9ee785991c2e7b)

rpc SubscribeImages(SubscribeImageOptions subscribeimageoptions) returns(GenericResponse)

**Definition:** [ensight.proto:93](ensight_8proto_source.xhtml#l00093)



[ensightservice::EnSightService::RunPython](group___en_sight_service.xhtml#ga73690c0e3495951863406e26dd7f906b)

rpc RunPython(PythonRequest pythonrequest) returns(PythonReply)

**Definition:** [ensight.proto:40](ensight_8proto_source.xhtml#l00040)



[ensightservice::EnSightService::Unsubscribe](group___en_sight_service.xhtml#ga9161e678fe3d7608820907269d55bf8c)

rpc Unsubscribe(Prefix prefix) returns(GenericResponse)

**Definition:** [ensight.proto:100](ensight_8proto_source.xhtml#l00100)



[ensightservice::EnSightService::Exit](group___en_sight_service.xhtml#gaa5a89ed87c59689f8be8dbfa474323d4)

rpc Exit(ExitRequest exitrequest) returns(ExitReply)

**Definition:** [ensight.proto:52](ensight_8proto_source.xhtml#l00052)



[ensightservice::EnSightService::SubscribeEvents](group___en_sight_service.xhtml#gab466da93dfd6027a2a6dbe5df6902189)

rpc SubscribeEvents(SubscribeEventOptions subscribeeventoptions) returns(GenericResponse)

**Definition:** [ensight.proto:81](ensight_8proto_source.xhtml#l00081)



[ensightservice::EnSightService::GetEventStream](group___en_sight_service.xhtml#gab64a0bc516588def314e022736cc1dcc)

rpc GetEventStream(EventStreamRequest eventstreamrequest) returns(stream EventReply)

**Definition:** [ensight.proto:70](ensight_8proto_source.xhtml#l00070)



[ensightservice::EnSightService::RenderImage](group___en_sight_service.xhtml#gadf6500961c95cd701020e5c8d2005138)

rpc RenderImage(RenderRequest renderrequest) returns(RenderReply)

**Definition:** [ensight.proto:44](ensight_8proto_source.xhtml#l00044)



[ensightservice::EnSightService::GetImageStream](group___en_sight_service.xhtml#gaec3249209f41b4042cd2c24ba7f11024)

rpc GetImageStream(ImageStreamRequest imagestreamrequest) returns(stream ImageReply)

**Definition:** [ensight.proto:106](ensight_8proto_source.xhtml#l00106)



[ensightservice::EnSightService::GetGeometry](group___en_sight_service.xhtml#gafa5fd7a25231c0b93591f681c3679d3b)

rpc GetGeometry(GeometryRequest geometryrequest) returns(GeometryReply)

**Definition:** [ensight.proto:48](ensight_8proto_source.xhtml#l00048)



[ensightservice::EnSightSubscription::PublishImage](group___en_sight_subscription.xhtml#ga052334cb4098295f08b649151eb24320)

rpc PublishImage(stream ImageReply) returns(GenericResponse)

**Definition:** [ensight.proto:136](ensight_8proto_source.xhtml#l00136)



[ensightservice::EnSightSubscription::PublishEvent](group___en_sight_subscription.xhtml#gaaded4bebe805118acaa44365183c2586)

rpc PublishEvent(EventReply eventreply) returns(GenericResponse)

**Definition:** [ensight.proto:140](ensight_8proto_source.xhtml#l00140)