Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 4
0
    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]
Ejemplo n.º 5
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]