def test_slotid_binary_parsing(): """Make sure we can generate and parse binary descriptors.""" slot_id = SlotIdentifier.FromString('slot 1') assert SlotIdentifier.FromEncoded(slot_id.encode()) == slot_id con = SlotIdentifier.FromString('controller') assert SlotIdentifier.FromEncoded(con.encode()) == con
def start_config_var_entry(self, var_id, encoded_selector): """Start a new config variable entry.""" selector = SlotIdentifier.FromEncoded(encoded_selector) err = self.config_database.start_entry(selector, var_id) return [err]
def FromBinary(cls, record_data, record_count=1): """Create an UpdateRecord subclass from binary record data. This is a multi-action record that matches a pattern of error checking RPC calls: begin config push config data <possibly multiple> end config Args: record_data (bytearray): The raw record data that we wish to parse. record_count (int): The number of records included in record_data. Raises: ArgumentError: If the record_data is malformed and cannot be parsed. Returns: SetConfigRecord: The decoded tile records. """ rpcs = SendErrorCheckingRPCRecord.parse_multiple_rpcs(record_data) start_rpc = rpcs[0] push_rpcs = rpcs[1:-1] try: config_id, raw_target = struct.unpack("<H8s", start_rpc.payload) target = SlotIdentifier.FromEncoded(raw_target) except ValueError: raise ArgumentError("Could not parse payload on begin config rpc", payload=start_rpc.payload) payload = bytearray() for rpc in push_rpcs: payload += rpc.payload return SetConfigRecord(target, config_id, payload)