def rpc_queryObject(self, doId): """ Summary: Responds with the values of all database fields associated with the provided [doId]. Parameters: [int doId] = The ID of the object to query database fields on. Example response: On success: ['DistributedObject', {'fieldName': ('arg1', ...), ...}] On failure: [None, None] """ result = [] unblocked = threading2.Event() def callback(dclass, fields): if dclass is not None: dclass = dclass.getName() result.extend([dclass, fields]) unblocked.set() self.air.dbInterface.queryObject(self.air.dbId, doId, callback) # Block until the callback is executed: unblocked.wait() return result
def close(self): terminate = threading2.Event() self.writeQueue.append({'terminate': terminate}) self.writeSemaphore.release() terminate.wait() try: self.socket.shutdown(socket.SHUT_RDWR) except socket.error: pass self.socket.close()
def rpc_queryObject(self, doId): result = [] unblocked = threading2.Event() def callback(dclass, fields): if dclass is not None: dclass = dclass.getName() result.extend([dclass, fields]) unblocked.set() self.air.dbInterface.queryObject(self.air.dbId, doId, callback) unblocked.wait() return result
def rpc_updateObject(self, doId, dclassName, newFields, oldFields=None): """ Summary: Update the field(s) of the object associated with the provided [doId]. If <oldFields> is provided, then this method will fail if the object's current fields don't match. Parameters: [int doId] = The ID of the object whose fields are to be updated. [str dclassName] = The name of the object's DClass. [dict newFields] = The new field values. <dict oldFields> = The old field values to assert. Example response: On success: True On failure: False """ # Ensure that the provided DClass exists: if dclassName not in self.air.dclassesByName: dclassName += 'UD' if dclassName not in self.air.dclassesByName: return False dclass = self.air.dclassesByName[dclassName] if oldFields is None: self.air.dbInterface.updateObject(self.air.dbId, doId, dclass, newFields) return True result = [True] unblocked = threading2.Event() def callback(fields): if fields is not None: result[0] = False unblocked.set() self.air.dbInterface.updateObject(self.air.dbId, doId, dclass, newFields, oldFields=oldFields, callback=callback) # Block until the callback is executed: unblocked.wait() return result[0]
def close(self): """ Wait until the write queue is empty, then shutdown and close our socket. """ terminate = threading2.Event() self.writeQueue.append({'terminate': terminate}) self.writeSemaphore.release() terminate.wait() try: self.socket.shutdown(socket.SHUT_RDWR) except socket.error: pass self.socket.close()
def rpc_updateObject(self, doId, dclassName, newFields, oldFields = None): if dclassName not in self.air.dclassesByName: dclassName += 'UD' if dclassName not in self.air.dclassesByName: return False dclass = self.air.dclassesByName[dclassName] if oldFields is None: self.air.dbInterface.updateObject(self.air.dbId, doId, dclass, newFields) return True result = [True] unblocked = threading2.Event() def callback(fields): if fields is not None: result[0] = False unblocked.set() self.air.dbInterface.updateObject(self.air.dbId, doId, dclass, newFields, oldFields=oldFields, callback=callback) unblocked.wait() return result[0]