예제 #1
0
    def test_numeric_types(self):
        val = decimal.Decimal("3.14")
        rv = Assembly.dumps(val)
        self.assertEqual("3.14", rv)
        self.assertEqual(val, Assembly.loads(rv))

        val = complex("3+14j")
        rv = Assembly.dumps(val)
        self.assertEqual('"(3+14j)"', rv)
        self.assertEqual(val, complex(Assembly.loads(rv).replace('"', "")))
예제 #2
0
 def test_nested_object_roundtrip(self):
     obj = Assembly.loads(AssemblyTester.data)
     text = textwrap.dedent(Assembly.dumps(obj))
     rv = Assembly.loads(text)
     self.assertEqual(obj.bucket, rv.bucket)
     self.assertEqual(obj.wheel, rv.wheel)
     self.assertEqual(obj.handles, rv.handles)
예제 #3
0
 def test_nested_object_roundtrip(self):
     obj = Assembly.loads(AssemblyTester.data)
     text = textwrap.dedent(Assembly.dumps(obj))
     rv = Assembly.loads(text)
     self.assertEqual(obj.bucket, rv.bucket)
     self.assertEqual(obj.wheel, rv.wheel)
     self.assertEqual(obj.handles, rv.handles)
예제 #4
0
 def test_wampum_roundtrip(self):
     inventory = Counter(
         itertools.chain((String(1), Glyph("snake")),
         itertools.repeat(Shell("white"), 64))
     )
     obj = Wampum.build(inventory)
     text = Assembly.dumps(obj)
예제 #5
0
 def test_nested_object_dumps(self):
     obj = Assembly.loads(AssemblyTester.data)
     text = Assembly.dumps(obj, indent=4)
     self.assertEqual(
         len(AssemblyTester.data.strip()),
         len(text.strip())
     )
예제 #6
0
    def __call__(self, token=None):
        token = token or self.token
        while True:
            try:
                job = yield from self.down.get()

                poa, msg = self.hop(token, job, policy="udp")
                if job.header.via is not None:
                    # User-defined route
                    hop = next(
                        Flow.find(token,
                                  application=job.header.via.application,
                                  policy="udp"), None)
                    poa = Flow.inspect(hop)

                if poa is None:
                    warnings.warn("Message expired.")
                    continue

                if msg is not None:
                    remote_addr = (poa.addr, poa.port)
                    data = Assembly.dumps(msg)
                    packet = dumpb(data)
                    self.transport.sendto(packet, remote_addr)
                else:
                    warnings.warn("No message from hop.")

            except concurrent.futures.CancelledError:
                break
            except Exception as e:
                warnings.warn(repr(getattr(e, "args", e) or e))
                continue
예제 #7
0
 def test_volume_roundtrip(self):
     # https://bugs.python.org/issue23572
     # requires Python 3.5.1
     vol = Volume.bundle
     text = Assembly.dumps(vol)
     rv = Assembly.loads(text)
     self.assertEqual(vol, rv)
예제 #8
0
    def __call__(self, token=None):
        token = token or self.token
        while True:
            try:
                job = yield from self.down.get()

                poa, msg = self.hop(token, job, policy="udp")
                if job.header.via is not None:
                    # User-defined route
                    hop = next(Flow.find(
                        token,
                        application=job.header.via.application,
                        policy="udp"),
                    None)
                    poa = Flow.inspect(hop)

                if poa is None:
                    warnings.warn("Message expired.")
                    continue

                if msg is not None:
                    remote_addr = (poa.addr, poa.port)
                    data = Assembly.dumps(msg)
                    packet = dumpb(data)
                    self.transport.sendto(packet, remote_addr)
                else:
                    warnings.warn("No message from hop.")

            except concurrent.futures.CancelledError:
                break
            except Exception as e:
                warnings.warn(repr(getattr(e, "args", e) or e))
                continue
예제 #9
0
    def test_ready_narrator_01(self):
        Assembly.register(AssemblyTests.ForeignState)
        narrator = bluemonday78.story.build_narrator().set_state(
            AssemblyTests.ForeignState.hostile)
        self.assertTrue(hasattr(narrator, "memories"))
        self.assertIsInstance(narrator.memories, collections.deque)
        narrator.memories.extend(range(4))
        self.assertEqual(197801160800, narrator.state)
        self.assertEqual(4, len(narrator.memories))
        self.assertEqual(3, len(narrator._states))

        text = Assembly.dumps(narrator)
        clone = Assembly.loads(text)
        self.assertEqual(narrator.id, clone.id)
        self.assertTrue(hasattr(clone, "memories"))
        self.assertIsInstance(clone.memories, list)
        self.assertEqual(4, len(clone.memories))
        self.assertEqual(3, len(narrator._states))

        # Check state transfer
        self.assertEqual(197801160800, clone.state)
        clone.state = 0

        result = bluemonday78.story.build_narrator(id=None,
                                                   memories=clone.memories,
                                                   _states=clone._states)
        self.assertNotEqual(clone.id, result.id)
        self.assertTrue(hasattr(result, "memories"))
        self.assertIsInstance(result.memories, collections.deque)
        self.assertEqual(4, len(result.memories))
        self.assertEqual(0, result.state)
        self.assertEqual(3, len(result._states))
        self.assertEqual(AssemblyTests.ForeignState.hostile,
                         result.get_state(AssemblyTests.ForeignState))
예제 #10
0
 def test_assemble_spot(self):
     obj = list(Spot)[0]
     data = Assembly.dumps(obj)
     self.assertTrue(data)
     rv = Assembly.loads(data)
     self.assertIsInstance(rv, Spot)
     self.assertEqual(obj.value, rv.value)
예제 #11
0
 def test_round_trip_assembly(self):
     Assembly.register(Player)
     player = Player(name="Mr Dick Turpin").set_state(12)
     text = Assembly.dumps(player)
     clone = Assembly.loads(text)
     self.assertEqual(player.id, clone.id)
     self.assertEqual(player.name, clone.name)
     self.assertEqual(player.state, clone.state)
예제 #12
0
 def test_uuid(self):
     # From Python 3.8 a UUID object has no __dict__
     self.assertNotIn(uuid.UUID, Assembly.encoding)
     self.assertNotIn(uuid.UUID, Assembly.decoding)
     Assembly.register(uuid.UUID)
     obj = uuid.uuid4()
     rv = Assembly.dumps(obj)
     self.assertIn(uuid.UUID, Assembly.encoding)
     self.assertIn("uuid.UUID", Assembly.decoding)
예제 #13
0
    def test_assembly(self):
        narrator = bluemonday78.story.build_narrator()
        ensemble = bluemonday78.story.ensemble(narrator)
        text = Assembly.dumps(ensemble)
        clone = Assembly.loads(text)

        self.assertEqual(
            set(group_by_type(ensemble).keys()),
            set(group_by_type(clone).keys()),
            "Check all ensemble classes permit re-assembly (DataObject)")
예제 #14
0
 def test_belt_roundtrip(self):
     inventory = Counter(
         itertools.chain((String(1), Glyph("snake")),
         itertools.repeat(Shell("white"), 64))
     )
     inventory[Wampum.build(inventory)] += 1
     belt = Belt.build(inventory, maxlen=3)
     text = Assembly.dumps(belt)
     obj = Assembly.loads(text)
     self.assertEqual(
         66, sum(dict(obj.requirements()).values())
     )
     self.assertEqual(belt.memory, obj.memory)
예제 #15
0
    def handle_line(self, obj):
        if obj.persona is None:
            return obj

        print("event: line",
              "data: {0}\n".format(Assembly.dumps(obj)),
              sep="\n",
              end="\n",
              file=self.terminal.stream)
        self.terminal.stream.flush()
        interval = self.pause + self.dwell * obj.text.count(" ")
        time.sleep(interval)
        return obj
예제 #16
0
async def get_assembly(request):
    config = next(iter(request.app["config"]), None)
    if not (config
            and config.getboolean("assembly", "enable_dump", fallback=False)):
        raise web.HTTPUnauthorized(reason="Operation not enabled.")

    uid = uuid.UUID(hex=request.match_info["session"])
    try:
        presenter = request.app["sessions"][uid]
    except KeyError:
        raise web.HTTPUnauthorized(
            reason="Session {0!s} not found.".format(uid))
    else:
        return web.Response(text=Assembly.dumps(presenter.assembly),
                            content_type="application/json")
예제 #17
0
    def datagram_received(self, data, addr):
        """
        Routing only. Provides no upward service.

        """
        packet = self.decoder.send(data)
        if packet is None:
            return (None, None)

        msg = Assembly.loads(packet)
        poa, msg = self.hop(self.token, msg, policy="udp")
        if poa is not None:
            remote_addr = (poa.addr, poa.port)
            data = Assembly.dumps(msg)
            packet = dumpb(data)
            self.transport.sendto(packet, remote_addr)
        return (poa, msg)
예제 #18
0
    def datagram_received(self, data, addr):
        """
        Routing only. Provides no upward service.

        """
        packet = self.decoder.send(data)
        if packet is None:
            return (None, None)

        msg = Assembly.loads(packet)
        poa, msg = self.hop(self.token, msg, policy="udp")
        if poa is not None:
            remote_addr = (poa.addr, poa.port)
            data = Assembly.dumps(msg)
            packet = dumpb(data)
            self.transport.sendto(packet, remote_addr)
        return (poa, msg)
예제 #19
0
    def handle_property(self, obj):
        self.log_manager = LogManager()
        self.log = self.log_manager.get_logger("turberfield")
        self.log.info(obj)
        if obj.object is not None:
            try:
                setattr(obj.object, obj.attr, obj.val)
            except AttributeError as e:
                self.log.error(". ".join(getattr(e, "args", e) or e))

            print("event: property",
                  "data: {0}\n".format(Assembly.dumps(obj)),
                  sep="\n",
                  end="\n",
                  file=self.terminal.stream)
            self.terminal.stream.flush()
        time.sleep(self.pause)
        return obj
예제 #20
0
 def test_shell_roundtrip(self):
     obj = Shell("pink")
     text = Assembly.dumps(obj)
     rv = Assembly.loads(text)
     self.assertEqual(obj, rv)
예제 #21
0
 def test_nested_object_dumps(self):
     obj = Assembly.loads(AssemblyTester.data)
     text = Assembly.dumps(obj, indent=4)
     self.assertEqual(len(AssemblyTester.data.strip()), len(text.strip()))
예제 #22
0
 def test_glyph_roundtrip(self):
     obj = Glyph("eagle")
     text = Assembly.dumps(obj)
     rv = Assembly.loads(text)
     self.assertEqual(obj, rv)
예제 #23
0
 def test_length_roundtrip(self):
     obj = Length.metre
     text = Assembly.dumps(obj)
     rv = Assembly.loads(text)
     self.assertEqual(obj, rv)
예제 #24
0
 def test_pellets_roundtrip(self):
     obj = Pellets.bag
     text = Assembly.dumps(obj)
     rv = Assembly.loads(text)
     self.assertEqual(obj, rv)
예제 #25
0
 def test_string_roundtrip(self):
     obj = String(3)
     text = Assembly.dumps(obj)
     rv = Assembly.loads(text)
     self.assertEqual(obj, rv)
예제 #26
0
 def test_enums_can_be_assembled(self):
     self.assertTrue(Assembly.register(Map.Arriving))
     rv = Assembly.dumps(Map.Arriving.car_park)
     self.assertEqual(Map.Arriving.car_park, Assembly.loads(rv), rv)