def respondWithHeaders(self, LastSyncTimestamp, Languages):
        if LastSyncTimestamp != 'null':
            LastSyncTimestamp = datetime.utcfromtimestamp(
                float(LastSyncTimestamp))  # + timedelta(minutes = 1)
        else:
            LastSyncTimestamp = 'NO-TIMESTAMP'
        cprint('FROM REMOTE: OLD LOCAL TIMESTAMP: %s' %
               (LastSyncTimestamp
                if LastSyncTimestamp != 'NO-TIMESTAMP' else LastSyncTimestamp),
               'white',
               'on_yellow',
               attrs=['bold'])
        print('\n')
        d = Mercury.getHeaders(LastSyncTimestamp, Languages)

        currentPacketNumber = 1
        totalPacketNumber = 1  # start from one.

        def calculatePacketCounts(dbReply, bucketSize):
            global totalPacketNumber
            totalPacketNumber = len(dbReply) / bucketSize

            if len(dbReply) % bucketSize > 0:
                totalPacketNumber += 1
            if len(dbReply) == 0:
                totalPacketNumber = 1
            print('the reply includes %s headers' % len(dbReply))
            print('total packet numbers: %s' % totalPacketNumber)
            return dbReply

        d.addCallback(calculatePacketCounts, globals.headerPacketCount)

        def bucketise(dbReply, bucketSize, CPNo):
            def process(slicedDbReply, currentPacketNumber):
                # here I need to fire the bucket given.

                def construct(bucket):
                    positiveHeadersArray = []
                    neutralHeadersArray = []
                    negativeHeadersArray = []
                    topicHeadersArray = []
                    for h in bucket:
                        if h['DIRECTION'] == 'POSITIVE':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            positiveHeadersArray.append(hJson)
                        elif h['DIRECTION'] == 'NEUTRAL':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            neutralHeadersArray.append(hJson)
                        elif h['DIRECTION'] == 'NEGATIVE':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            negativeHeadersArray.append(hJson)
                        elif h['DIRECTION'] == 'TOPIC':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            topicHeadersArray.append(hJson)
                    return {
                        'PositiveHeaders': positiveHeadersArray,
                        'NeutralHeaders': neutralHeadersArray,
                        'NegativeHeaders': negativeHeadersArray,
                        'TopicHeaders': topicHeadersArray
                    }
                    # Here i need to get the bucket, produce a valid amp packet with the data given and return that.
                    # I ALSO CONVERT TO JSON HERE.

                def send(reply):  # here I send the amp packet produced.
                    global totalPacketNumber
                    cprint('THIS IS PACKAGE NUMBERED: %d' % CPNo, 'white',
                           'on_red')
                    reply['TotalNumberOfPackets'] = totalPacketNumber
                    reply['CurrentPacketNo'] = currentPacketNumber
                    print('reply: ', reply)
                    # here I need to fire receiveheaders methods onto the remote for each of the packets.
                    self.callRemote(
                        networkAPI.ReceiveHeaders,
                        PositiveHeaders=reply['PositiveHeaders'],
                        NeutralHeaders=reply['NeutralHeaders'],
                        NegativeHeaders=reply['NegativeHeaders'],
                        TopicHeaders=reply['TopicHeaders'],
                        TotalNumberOfPackets=reply['TotalNumberOfPackets'],
                        CurrentPacketNo=reply['CurrentPacketNo'])
                    return {}

                return send(construct(slicedDbReply))

            if len(dbReply) > bucketSize:
                bucketise(dbReply[bucketSize:], bucketSize,
                          CPNo + 1)  # next batch.
                return process(dbReply[0:bucketSize], CPNo)  # current batch.
            else:
                return process(dbReply[0:bucketSize], CPNo)  # current batch.

        d.addCallback(bucketise, globals.headerPacketCount,
                      currentPacketNumber)

        d.addErrback(self.closeConnection, 'INBOUND',
                     Mercury.getHeaders.__name__)
        return d
    def respondWithHeaders(self, LastSyncTimestamp, Languages):
        if LastSyncTimestamp != 'null':
            LastSyncTimestamp = datetime.utcfromtimestamp(float(LastSyncTimestamp))# + timedelta(minutes = 1)
        else:
            LastSyncTimestamp = 'NO-TIMESTAMP'
        cprint('FROM REMOTE: OLD LOCAL TIMESTAMP: %s' %(LastSyncTimestamp
               if LastSyncTimestamp != 'NO-TIMESTAMP' else LastSyncTimestamp), 'white', 'on_yellow', attrs=['bold'])
        print('\n')
        d = Mercury.getHeaders(LastSyncTimestamp, Languages)



        currentPacketNumber = 1
        totalPacketNumber = 1 # start from one.

        def calculatePacketCounts(dbReply, bucketSize):
            global totalPacketNumber
            totalPacketNumber = len(dbReply)/bucketSize

            if len(dbReply)%bucketSize > 0:
                totalPacketNumber+= 1
            if len(dbReply) == 0:
                totalPacketNumber = 1
            print('the reply includes %s headers' %len(dbReply))
            print('total packet numbers: %s' %totalPacketNumber)
            return dbReply

        d.addCallback(calculatePacketCounts, globals.headerPacketCount)

        def bucketise(dbReply, bucketSize, CPNo):

            def process(slicedDbReply, currentPacketNumber):
                # here I need to fire the bucket given.

                def construct(bucket):
                    positiveHeadersArray = []
                    neutralHeadersArray = []
                    negativeHeadersArray = []
                    topicHeadersArray = []
                    for h in bucket:
                        if h['DIRECTION'] == 'POSITIVE':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            positiveHeadersArray.append(hJson)
                        elif h['DIRECTION'] == 'NEUTRAL':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            neutralHeadersArray.append(hJson)
                        elif h['DIRECTION'] == 'NEGATIVE':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            negativeHeadersArray.append(hJson)
                        elif h['DIRECTION'] == 'TOPIC':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            topicHeadersArray.append(hJson)
                    return {
                            'PositiveHeaders': positiveHeadersArray,
                            'NeutralHeaders': neutralHeadersArray,
                            'NegativeHeaders': negativeHeadersArray,
                            'TopicHeaders': topicHeadersArray
                    }
                    # Here i need to get the bucket, produce a valid amp packet with the data given and return that.
                    # I ALSO CONVERT TO JSON HERE.

                def send(reply): # here I send the amp packet produced.
                    global totalPacketNumber
                    cprint('THIS IS PACKAGE NUMBERED: %d' %CPNo, 'white', 'on_red')
                    reply['TotalNumberOfPackets'] = totalPacketNumber
                    reply['CurrentPacketNo'] = currentPacketNumber
                    print('reply: ',reply)
                    # here I need to fire receiveheaders methods onto the remote for each of the packets.
                    self.callRemote(networkAPI.ReceiveHeaders,
                                    PositiveHeaders = reply['PositiveHeaders'],
                                    NeutralHeaders = reply['NeutralHeaders'],
                                    NegativeHeaders = reply['NegativeHeaders'],
                                    TopicHeaders = reply['TopicHeaders'],
                                    TotalNumberOfPackets = reply['TotalNumberOfPackets'],
                                    CurrentPacketNo = reply['CurrentPacketNo']
                                    )
                    return {}
                return send(construct(slicedDbReply))


            if len(dbReply) > bucketSize:
                bucketise(dbReply[bucketSize:], bucketSize, CPNo + 1) # next batch.
                return process(dbReply[0:bucketSize], CPNo) # current batch.
            else:
                return process(dbReply[0:bucketSize], CPNo) # current batch.

        d.addCallback(bucketise, globals.headerPacketCount, currentPacketNumber)

        d.addErrback(self.closeConnection, 'INBOUND', Mercury.getHeaders.__name__)
        return d
Exemple #3
0
    def respondWithHeaders(self, LastSyncTimestamp, Languages):
        #Check if handshake actually occurred. If not, abort.
        if not self.connectedNode:
            self.abortConnection(
                Exception('AetherError: Illegal request from remote.'), 'L<-R',
                'respondWithHeaders')
            return {}
        if LastSyncTimestamp != 'null':
            LastSyncTimestamp = datetime.utcfromtimestamp(
                float(LastSyncTimestamp))
        else:
            LastSyncTimestamp = 'NO-TIMESTAMP'
        print(
            'L<-R: Headers request, Timestamp: ', LastSyncTimestamp
            if LastSyncTimestamp != 'NO-TIMESTAMP' else 'Initial Connection',
            ' N:', self.connectedNode['NodeId'])
        d = Mercury.getHeaders(LastSyncTimestamp, Languages)
        currentPacketNumber = 1
        totalPacketNumber = 1  # start from one.

        def calculatePacketCounts(dbReply, bucketSize):
            global totalPacketNumber
            totalPacketNumber = len(dbReply) / bucketSize
            if len(dbReply) % bucketSize > 0:
                totalPacketNumber += 1
            if len(dbReply) == 0:
                totalPacketNumber = 1
            return dbReply

        d.addCallback(calculatePacketCounts, HEADER_PACKET_COUNT)

        def bucketise(dbReply, bucketSize, CPNo):
            def process(slicedDbReply, currentPacketNumber):
                # Here I need to fire the bucket given.

                def construct(bucket):
                    positiveHeadersArray = []
                    neutralHeadersArray = []
                    negativeHeadersArray = []
                    topicHeadersArray = []
                    for h in bucket:
                        if h['DIRECTION'] == 'POSITIVE':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            positiveHeadersArray.append(hJson)
                        elif h['DIRECTION'] == 'NEUTRAL':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            neutralHeadersArray.append(hJson)
                        elif h['DIRECTION'] == 'NEGATIVE':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            negativeHeadersArray.append(hJson)
                        elif h['DIRECTION'] == 'TOPIC':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            topicHeadersArray.append(hJson)
                    return {
                        'PositiveHeaders': positiveHeadersArray,
                        'NeutralHeaders': neutralHeadersArray,
                        'NegativeHeaders': negativeHeadersArray,
                        'TopicHeaders': topicHeadersArray
                    }
                    # Here i need to get the bucket, produce a valid amp packet with the data given and return that.
                    # I also convert to JSON here.

                def send(reply):  # Here I send the amp packet produced.
                    global totalPacketNumber
                    print('L->R: Header reply, Package number: ', CPNo, ' N:',
                          self.connectedNode['NodeId'])
                    reply['TotalNumberOfPackets'] = totalPacketNumber
                    reply['CurrentPacketNo'] = currentPacketNumber
                    self.callRemote(
                        networkAPI.ReceiveHeaders,
                        PositiveHeaders=reply['PositiveHeaders'],
                        NeutralHeaders=reply['NeutralHeaders'],
                        NegativeHeaders=reply['NegativeHeaders'],
                        TopicHeaders=reply['TopicHeaders'],
                        TotalNumberOfPackets=reply['TotalNumberOfPackets'],
                        CurrentPacketNo=reply['CurrentPacketNo'])
                    return {}

                return send(construct(slicedDbReply))

            if len(dbReply) > bucketSize:
                bucketise(dbReply[bucketSize:], bucketSize,
                          CPNo + 1)  # next batch.
                return process(dbReply[0:bucketSize], CPNo)  # current batch.
            else:
                return process(dbReply[0:bucketSize], CPNo)  # current batch.

        d.addCallback(bucketise, HEADER_PACKET_COUNT, currentPacketNumber)
        d.addErrback(self.abortConnection, 'L<-R', Mercury.getHeaders.__name__)
        #return d # bad local return?
        return {}
    def respondWithHeaders(self, LastSyncTimestamp, Languages):
        #Check if handshake actually occurred. If not, abort.
        if not self.connectedNode:
            self.abortConnection(Exception('AetherError: Illegal request from remote.'), 'L<-R', 'respondWithHeaders')
            return {}
        if LastSyncTimestamp != 'null':
            LastSyncTimestamp = datetime.utcfromtimestamp(float(LastSyncTimestamp))
        else:
            LastSyncTimestamp = 'NO-TIMESTAMP'
        print('L<-R: Headers request, Timestamp: ', LastSyncTimestamp if LastSyncTimestamp != 'NO-TIMESTAMP' else 'Initial Connection', ' N:', self.connectedNode['NodeId'])
        d = Mercury.getHeaders(LastSyncTimestamp, Languages)
        currentPacketNumber = 1
        totalPacketNumber = 1 # start from one.

        def calculatePacketCounts(dbReply, bucketSize):
            global totalPacketNumber
            totalPacketNumber = len(dbReply)/bucketSize
            if len(dbReply)%bucketSize > 0:
                totalPacketNumber+= 1
            if len(dbReply) == 0:
                totalPacketNumber = 1
            return dbReply

        d.addCallback(calculatePacketCounts, globals.headerPacketCount)

        def bucketise(dbReply, bucketSize, CPNo):

            def process(slicedDbReply, currentPacketNumber):
                # Here I need to fire the bucket given.

                def construct(bucket):
                    positiveHeadersArray = []
                    neutralHeadersArray = []
                    negativeHeadersArray = []
                    topicHeadersArray = []
                    for h in bucket:
                        if h['DIRECTION'] == 'POSITIVE':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            positiveHeadersArray.append(hJson)
                        elif h['DIRECTION'] == 'NEUTRAL':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            neutralHeadersArray.append(hJson)
                        elif h['DIRECTION'] == 'NEGATIVE':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            negativeHeadersArray.append(hJson)
                        elif h['DIRECTION'] == 'TOPIC':
                            del h['DIRECTION']
                            hJson = ujson.dumps(h)
                            topicHeadersArray.append(hJson)
                    return {
                            'PositiveHeaders': positiveHeadersArray,
                            'NeutralHeaders': neutralHeadersArray,
                            'NegativeHeaders': negativeHeadersArray,
                            'TopicHeaders': topicHeadersArray
                    }
                    # Here i need to get the bucket, produce a valid amp packet with the data given and return that.
                    # I also convert to JSON here.

                def send(reply): # Here I send the amp packet produced.
                    global totalPacketNumber
                    print('L->R: Header reply, Package number: ', CPNo, ' N:', self.connectedNode['NodeId'])
                    reply['TotalNumberOfPackets'] = totalPacketNumber
                    reply['CurrentPacketNo'] = currentPacketNumber
                    self.callRemote(networkAPI.ReceiveHeaders,
                                    PositiveHeaders = reply['PositiveHeaders'],
                                    NeutralHeaders = reply['NeutralHeaders'],
                                    NegativeHeaders = reply['NegativeHeaders'],
                                    TopicHeaders = reply['TopicHeaders'],
                                    TotalNumberOfPackets = reply['TotalNumberOfPackets'],
                                    CurrentPacketNo = reply['CurrentPacketNo']
                                    )
                    return {}
                return send(construct(slicedDbReply))

            if len(dbReply) > bucketSize:
                bucketise(dbReply[bucketSize:], bucketSize, CPNo + 1) # next batch.
                return process(dbReply[0:bucketSize], CPNo) # current batch.
            else:
                return process(dbReply[0:bucketSize], CPNo) # current batch.

        d.addCallback(bucketise, globals.headerPacketCount, currentPacketNumber)
        d.addErrback(self.abortConnection, 'L<-R', Mercury.getHeaders.__name__)
        #return d # bad local return?
        return {}
    def respondWithHeaders(self, LastSyncTimestamp, Languages):
        # Check if handshake actually occurred. If not, abort.
        if not self.connectedNode:
            self.abortConnection(Exception("AetherError: Illegal request from remote."), "L<-R", "respondWithHeaders")
            return {}
        if LastSyncTimestamp != "null":
            LastSyncTimestamp = datetime.utcfromtimestamp(float(LastSyncTimestamp))
        else:
            LastSyncTimestamp = "NO-TIMESTAMP"
        print(
            "L<-R: Headers request, Timestamp: ",
            LastSyncTimestamp if LastSyncTimestamp != "NO-TIMESTAMP" else "Initial Connection",
            " N:",
            self.connectedNode["NodeId"],
        )
        d = Mercury.getHeaders(LastSyncTimestamp, Languages)
        currentPacketNumber = 1
        totalPacketNumber = 1  # start from one.

        def calculatePacketCounts(dbReply, bucketSize):
            global totalPacketNumber
            totalPacketNumber = len(dbReply) / bucketSize
            if len(dbReply) % bucketSize > 0:
                totalPacketNumber += 1
            if len(dbReply) == 0:
                totalPacketNumber = 1
            return dbReply

        d.addCallback(calculatePacketCounts, HEADER_PACKET_COUNT)

        def bucketise(dbReply, bucketSize, CPNo):
            def process(slicedDbReply, currentPacketNumber):
                # Here I need to fire the bucket given.

                def construct(bucket):
                    positiveHeadersArray = []
                    neutralHeadersArray = []
                    negativeHeadersArray = []
                    topicHeadersArray = []
                    for h in bucket:
                        if h["DIRECTION"] == "POSITIVE":
                            del h["DIRECTION"]
                            hJson = ujson.dumps(h)
                            positiveHeadersArray.append(hJson)
                        elif h["DIRECTION"] == "NEUTRAL":
                            del h["DIRECTION"]
                            hJson = ujson.dumps(h)
                            neutralHeadersArray.append(hJson)
                        elif h["DIRECTION"] == "NEGATIVE":
                            del h["DIRECTION"]
                            hJson = ujson.dumps(h)
                            negativeHeadersArray.append(hJson)
                        elif h["DIRECTION"] == "TOPIC":
                            del h["DIRECTION"]
                            hJson = ujson.dumps(h)
                            topicHeadersArray.append(hJson)
                    return {
                        "PositiveHeaders": positiveHeadersArray,
                        "NeutralHeaders": neutralHeadersArray,
                        "NegativeHeaders": negativeHeadersArray,
                        "TopicHeaders": topicHeadersArray,
                    }
                    # Here i need to get the bucket, produce a valid amp packet with the data given and return that.
                    # I also convert to JSON here.

                def send(reply):  # Here I send the amp packet produced.
                    global totalPacketNumber
                    print("L->R: Header reply, Package number: ", CPNo, " N:", self.connectedNode["NodeId"])
                    reply["TotalNumberOfPackets"] = totalPacketNumber
                    reply["CurrentPacketNo"] = currentPacketNumber
                    self.callRemote(
                        networkAPI.ReceiveHeaders,
                        PositiveHeaders=reply["PositiveHeaders"],
                        NeutralHeaders=reply["NeutralHeaders"],
                        NegativeHeaders=reply["NegativeHeaders"],
                        TopicHeaders=reply["TopicHeaders"],
                        TotalNumberOfPackets=reply["TotalNumberOfPackets"],
                        CurrentPacketNo=reply["CurrentPacketNo"],
                    )
                    return {}

                return send(construct(slicedDbReply))

            if len(dbReply) > bucketSize:
                bucketise(dbReply[bucketSize:], bucketSize, CPNo + 1)  # next batch.
                return process(dbReply[0:bucketSize], CPNo)  # current batch.
            else:
                return process(dbReply[0:bucketSize], CPNo)  # current batch.

        d.addCallback(bucketise, HEADER_PACKET_COUNT, currentPacketNumber)
        d.addErrback(self.abortConnection, "L<-R", Mercury.getHeaders.__name__)
        # return d # bad local return?
        return {}