예제 #1
0
    def Process(self, fr):
        if self.infoemitted:
            if fr.type == G3FrameType.PipelineInfo and \
              self.originalpi is not None and \
              self.originalpi == list(fr.keys()):
                # Deduplicate PipelineInfo frames identical to one that we
                # added to earlier, which avoids false semi-duplicates down
                # the line when processing multiple files.
                return False
            return fr

        # Allow limited reordering of metadata
        if fr.type in [
                G3FrameType.Observation, G3FrameType.Wiring,
                G3FrameType.Calibration
        ]:
            self.buffer.append(fr)
            return []

        self.infoemitted = True
        if fr.type == G3FrameType.PipelineInfo:
            self.originalpi = list(fr.keys())
            fr[str(G3Time.Now())] = self.pipelineinfo
            self.buffer.append(fr)
        else:
            self.originalpi = None
            f = G3Frame(G3FrameType.PipelineInfo)
            f[str(G3Time.Now())] = self.pipelineinfo
            self.buffer += [f, fr]
        rv = self.buffer
        del self.buffer
        return rv
예제 #2
0
 def test_put_get_delete(self):
     frame = G3Frame()
     self.assertEqual(frame.keys(), [])
     frame["key1"] = "val1"
     self.assertEqual(frame["key1"], "val1")
     del frame["key1"]
     with self.assertRaises(KeyError):
         frame["key1"]
예제 #3
0
 def test_len(self):
     frame = G3Frame()
     self.assertEqual(len(frame), 0)
     frame["key1"] = "val1"
     frame["key2"] = "val2"
     self.assertEqual(len(frame), 2)
     del frame["key1"]
     del frame["key2"]
     self.assertEqual(len(frame), 0)
예제 #4
0
 def test_values(self):
     frame = G3Frame()
     self.assertEqual(frame.keys(), [])
     frame["key1"] = "val1"
     frame["key2"] = "val2"
     keys = []
     vals = []
     self.assertTrue("val1" in frame.values())
     self.assertTrue("val2" in frame.values())
     del frame["key1"]
     del frame["key2"]
     self.assertTrue("val1" not in frame.values())
예제 #5
0
    def test_iter(self):
        frame = G3Frame()
        self.assertEqual(frame.keys(), [])
        frame["key1"] = "val1"
        frame["key2"] = "val2"

        keys = []
        for key in frame:
            keys.append(key)
        self.assertEqual(len(keys), 2)
        self.assertTrue("key1" in keys)
        self.assertTrue("key2" in keys)
예제 #6
0
    def test_iteritems(self):
        frame = G3Frame()
        self.assertEqual(frame.keys(), [])
        frame["key1"] = "val1"
        frame["key2"] = "val2"

        keys = []
        vals = []
        for k, v in frame.iteritems():
            keys.append(k)
            vals.append(v)
        self.assertEqual(len(keys), 2)
        self.assertEqual(len(vals), 2)
        self.assertTrue("key1" in keys)
        self.assertTrue("key2" in keys)
        self.assertTrue("val1" in vals)
        self.assertTrue("val2" in vals)
예제 #7
0
    def run(self):
        # Processing flow in worker process:
        # - Receive data from the remote end (blocking)
        # - Process data
        # - Return results, packaged as a list of frames
        #
        # Note that this must return *something* in response to every
        # frame to keep the outstanding frame accounting in the master
        # process working (an empty list is fine).

        while True:
            framelen = struct.unpack('i', self.queue[1].recv(4))[0]
            framebuf = b''
            while len(framebuf) < framelen:
                framebuf += self.queue[1].recv(framelen - len(framebuf))
            frame = G3Frame()
            frame.__setstate__(({}, framebuf))

            outframes = self.targetmod(frame)

            if outframes is None:
                out = [frame]
            elif isinstance(outframes, G3Frame):
                out = [outframes]
            elif hasattr(outframes, '__iter__'):
                out = list(outframes)
            elif outframes:
                out = [frame]
            else:
                out = []

            outbuf = pickle.dumps(out)
            outbuf = struct.pack('i', len(outbuf)) + outbuf
            self.queue[1].send(outbuf)

            if frame.type == G3FrameType.EndProcessing:
                return