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('"', "")))
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)
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)
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()) )
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
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)
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
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))
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)
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)
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)
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)")
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)
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
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")
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)
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
def test_shell_roundtrip(self): obj = Shell("pink") text = Assembly.dumps(obj) rv = Assembly.loads(text) self.assertEqual(obj, rv)
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()))
def test_glyph_roundtrip(self): obj = Glyph("eagle") text = Assembly.dumps(obj) rv = Assembly.loads(text) self.assertEqual(obj, rv)
def test_length_roundtrip(self): obj = Length.metre text = Assembly.dumps(obj) rv = Assembly.loads(text) self.assertEqual(obj, rv)
def test_pellets_roundtrip(self): obj = Pellets.bag text = Assembly.dumps(obj) rv = Assembly.loads(text) self.assertEqual(obj, rv)
def test_string_roundtrip(self): obj = String(3) text = Assembly.dumps(obj) rv = Assembly.loads(text) self.assertEqual(obj, rv)
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)