def startServer(logLevel=0, router=None, inMaya=None): """ Starts the NimbleServer properly given the current environmental conditions. The server runs in a separate thread and remains active until the stopServer() method. @@@param logLevel:int The integer logLevel to use when starting the server. The allowed values are: [#list] [#item]0 (default): Only log critical actions.[/#item] [#item]1: Additionally log warnings as well as succinct activity.[/#item] [#item]2: Full verbose logging of all activity.[/#item] [/#list] @@@param router:NimbleRouter The router to use for the server. The default value of None will use the default router for the given environment. The router is responsible for handling the communication traffic received by the server and correctly responding as a result. @@@param inMaya:boolean Whether or not the server is being run in Maya. By default this is determined automatically by the Nimble environment settings. However, in some cases the determination can be incorrect if your external or Maya Python interpreters have been modified to fool the environment test. In such cases this may need to be explicitly set. """ NimbleEnvironment.inMaya(override=inMaya) NimbleEnvironment.setServerLogLevel(logLevel) NimbleServerThread(router=router).start()
def startServer(logLevel =0, router =None, inMaya =None): """ Starts the NimbleServer properly given the current environmental conditions. The server runs in a separate thread and remains active until the stopServer() method. @@@param logLevel:int The integer logLevel to use when starting the server. The allowed values are: [#list] [#item]0 (default): Only log critical actions.[/#item] [#item]1: Additionally log warnings as well as succinct activity.[/#item] [#item]2: Full verbose logging of all activity.[/#item] [/#list] @@@param router:NimbleRouter The router to use for the server. The default value of None will use the default router for the given environment. The router is responsible for handling the communication traffic received by the server and correctly responding as a result. @@@param inMaya:boolean Whether or not the server is being run in Maya. By default this is determined automatically by the Nimble environment settings. However, in some cases the determination can be incorrect if your external or Maya Python interpreters have been modified to fool the environment test. In such cases this may need to be explicitly set. """ NimbleEnvironment.inMaya(override=inMaya) NimbleEnvironment.setServerLogLevel(logLevel) NimbleServerThread(router=router).start()
def __init__(self, connection): self._connection = connection self._commands = None if NimbleEnvironment.inMaya(): import maya.cmds as mc self._commands = mc
def _send(self, nimbleData): """Doc...""" if NimbleEnvironment.inMaya(): return MayaRouter.processRequest(nimbleData) result = self._sendRemote(nimbleData) time.sleep(0.0001) return result
def __init__(self, **kwargs): """ Creates a new instance of NimbleConnection and opens the communication socket to the corresponding NimbleServer instance. NimbleEnvironment is used to determine whether the connection should be to a Maya or external application NimbleServer instance. """ self._active = False self._socket = None if not NimbleEnvironment.inMaya(): self.open() self._mayaCommandLink = None
def getConnection(inMaya =None, forceCreate =False): """ Retrieves a communication connection object from the connection pool, which is used for sending commands to the remote nimble server. :param inMaya | boolean Whether or not the server is being run in Maya. By default this is determined automatically by the Nimble environment settings. However, in some cases the determination can be incorrect if your external or Maya Python interpreters have been modified to fool the environment test. In such cases this may need to be explicitly set. :param forceCreate | boolean If True a new connection will be created even if one already exists and is available. This should rarely be used but can be useful in multi-threaded situations where sharing a single connection could be harmful. :return NimbleConnection A NimbleConnection instance opened and ready for issuing commands to the remote server. """ NimbleEnvironment.inMaya(override=inMaya) return NimbleConnection.getConnection(forceCreate=forceCreate)
def getConnection(inMaya=None, forceCreate=False): """ Retrieves a communication connection object from the connection pool, which is used for sending commands to the remote nimble server. :param inMaya | boolean Whether or not the server is being run in Maya. By default this is determined automatically by the Nimble environment settings. However, in some cases the determination can be incorrect if your external or Maya Python interpreters have been modified to fool the environment test. In such cases this may need to be explicitly set. :param forceCreate | boolean If True a new connection will be created even if one already exists and is available. This should rarely be used but can be useful in multi-threaded situations where sharing a single connection could be harmful. :return NimbleConnection A NimbleConnection instance opened and ready for issuing commands to the remote server. """ NimbleEnvironment.inMaya(override=inMaya) return NimbleConnection.getConnection(forceCreate=forceCreate)
def runPythonImport(self, modulePackage, methodName=None, className=None, runInMaya=None, **kwargs): """ Executes the specified import through Nimble in the specified run mode. modulePackage: (String) An absolute (dot-syntax) formatted import to the module you wish to be executed. This module will be imported by Maya and must be on its sys.path. [methodName]: (String) An optional function name to be executed within the module. If a class name is specified this method will be called on an instance of the specified class. If no class name is specified the method will be called directly on the module. [className]: (String) An optional class name of a class to import within the specified module. The class will be imported from the module and instantiated. [runInMaya]: If True the import will be executed within Maya. If False the import will be executed outside of Maya on the remote end of the Nimble connection. The default value of None will use the current global setting, which can be set by the nimble.enablePythonTestMode() top-level function and defaults to runInMaya = True, i.e. test mode is disabled. Returns a NimbleResponseData object with the results of the script execution. """ payload = { 'module': modulePackage, 'method': methodName, 'class': className, 'kwargs': kwargs } if NimbleEnvironment.inMaya(): return MayaRouter.runPythonImport(payload) if (not NimbleEnvironment.TEST_REMOTE_MODE ) if runInMaya is None else runInMaya: return self._send( NimbleData(kind=DataKindEnum.PYTHON_IMPORT, payload=payload)) else: return MayaRouter.runPythonImport(payload)
def __init__(self, router =None): asyncore.dispatcher.__init__(self) try: self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.set_reuse_addr() self.bind(('localhost', NimbleEnvironment.getServerPort())) self.listen(5) except Exception as err: NimbleEnvironment.logError( '[ERROR | NIMBLE SERVER] Failed to establish server connection', err) raise if router is None: if NimbleEnvironment.inMaya(): from nimble.connection.router.MayaRouter import MayaRouter self._router = MayaRouter else: self._router = NimbleRouter else: self._router = router
def runPythonImport(self, modulePackage, methodName =None, className=None, runInMaya =None, **kwargs): """ Executes the specified import through Nimble in the specified run mode. modulePackage: (String) An absolute (dot-syntax) formatted import to the module you wish to be executed. This module will be imported by Maya and must be on its sys.path. [methodName]: (String) An optional function name to be executed within the module. If a class name is specified this method will be called on an instance of the specified class. If no class name is specified the method will be called directly on the module. [className]: (String) An optional class name of a class to import within the specified module. The class will be imported from the module and instantiated. [runInMaya]: If True the import will be executed within Maya. If False the import will be executed outside of Maya on the remote end of the Nimble connection. The default value of None will use the current global setting, which can be set by the nimble.enablePythonTestMode() top-level function and defaults to runInMaya = True, i.e. test mode is disabled. Returns a NimbleResponseData object with the results of the script execution. """ payload = { 'module':modulePackage, 'method':methodName, 'class':className, 'kwargs':kwargs} if NimbleEnvironment.inMaya(): return MayaRouter.runPythonImport(payload) if (not NimbleEnvironment.TEST_REMOTE_MODE) if runInMaya is None else runInMaya: return self._send(NimbleData(kind=DataKindEnum.PYTHON_IMPORT, payload=payload)) else: return MayaRouter.runPythonImport(payload)
def __init__(self, router=None): asyncore.dispatcher.__init__(self) try: self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.set_reuse_addr() self.bind((NimbleEnvironment.getServerHost(), NimbleEnvironment.getServerPort())) self.listen(5) except Exception as err: NimbleEnvironment.logError( '[ERROR | NIMBLE SERVER] Failed to establish server connection', err) raise if router is None: if NimbleEnvironment.inMaya(): from nimble.connection.router.MayaRouter import MayaRouter self._router = MayaRouter else: self._router = NimbleRouter else: self._router = router
# test_externalServer.py # (C)2012 http://www.ThreeAddOne.com # Scott Ernst from __future__ import print_function, absolute_import, unicode_literals, division import time import nimble nimble.startServer() nimble.echoServerStatus() from nimble.NimbleEnvironment import NimbleEnvironment print('IN MAYA:', NimbleEnvironment.inMaya()) time.sleep(5) nimble.stopServer() print('Test complete')
def getIsRunningInMaya(): return NimbleEnvironment.inMaya()
def getNimbleConnection(cls, inMaya =None, forceCreate =None): NimbleEnvironment.inMaya(override=inMaya) try: return NimbleConnection.getConnection(forceCreate=forceCreate) except Exception: raise