コード例 #1
0
ファイル: snep-test-client.py プロジェクト: otyamura/nfc_dev
    def test_05(self, llc):
        """Undeliverable resource"""

        payload = bytearray(range(122 - 29))
        records = [ndef.Record("application/octet-stream", "1", payload)]
        ndef_message_sent = b''.join(ndef.message_encoder(records))

        max_ndef_msg_recv_size = len(ndef_message_sent) - 1
        snep = nfc.snep.SnepClient(llc, max_ndef_msg_recv_size)
        try:
            info("connect to {0}".format(validation_server))
            snep.connect(validation_server)
        except nfc.llcp.ConnectRefused:
            raise cli.TestFail("could not connect to validation server")

        try:
            info("put {0} octets ndef message".format(len(ndef_message_sent)))
            snep.put_octets(ndef_message_sent)

            info(
                "request ndef message with max acceptable lenght of {} octets".
                format(max_ndef_msg_recv_size))
            identifier = ndef.Record("application/octet-stream", "1")
            identifier = b''.join(ndef.message_encoder([identifier]))
            try:
                snep.get_octets(identifier)
            except nfc.snep.SnepError as e:
                if e.errno != nfc.snep.ExcessData:
                    raise cli.TestFail("received unexpected response code")
                info("received 'excess data' response as expected")
            else:
                raise cli.TestFail("received unexpected message from server")
        finally:
            info("disconnect from {0}".format(validation_server))
            snep.close()
コード例 #2
0
ファイル: snep-test-client.py プロジェクト: otyamura/nfc_dev
    def test_07(self, llc):
        """Default server limits"""

        payload = bytearray(x % 256 for x in range(1024 - 32))
        records = [ndef.Record("application/octet-stream", "1", payload)]
        ndef_message = b''.join(ndef.message_encoder(records))

        snep = nfc.snep.SnepClient(llc)
        try:
            info("connect to {0}".format("urn:nfc:sn:snep"))
            snep.connect("urn:nfc:sn:snep")
        except nfc.llcp.ConnectRefused:
            raise cli.TestFail("could not connect to default server")

        try:
            info("put {0} octets ndef message".format(len(ndef_message)))
            snep.put_octets(ndef_message)

            identifier = ndef.Record("application/octet-stream", "1")
            info("request ndef message {}".format(identifier))
            identifier = b''.join(ndef.message_encoder([identifier]))
            try:
                ndef_message = snep.get_octets(identifier)
            except nfc.snep.SnepError as e:
                if e.errno != nfc.snep.NotImplemented:
                    raise cli.TestFail("received unexpected response code")
                info("received 'not implemented' response as expected")
            else:
                raise cli.TestFail("received unexpected message from server")
        finally:
            info("disconnect from server")
            snep.close()
コード例 #3
0
ファイル: snep-test-client.py プロジェクト: otyamura/nfc_dev
    def test_04(self, llc):
        """Multiple ndef messages"""

        ndef_message_sent = list()
        ndef_message_rcvd = list()

        payload = bytearray(range(50))
        records = [ndef.Record("application/octet-stream", "1", payload)]
        ndef_message_sent.append(b''.join(ndef.message_encoder(records)))
        records = [ndef.Record("application/octet-stream", "2", payload)]
        ndef_message_sent.append(b''.join(ndef.message_encoder(records)))

        snep = nfc.snep.SnepClient(llc, max_ndef_msg_recv_size=10000)
        try:
            info("connect to {0}".format(validation_server))
            snep.connect(validation_server)
        except nfc.llcp.ConnectRefused:
            raise cli.TestFail("could not connect to validation server")

        try:
            info("put 1st ndef message")
            snep.put_octets(ndef_message_sent[0])

            info("put 2nd ndef message")
            snep.put_octets(ndef_message_sent[1])

            info("get 1st ndef message")
            identifier = ndef.Record("application/octet-stream", "1")
            identifier = b''.join(ndef.message_encoder([identifier]))
            ndef_message = snep.get_octets(identifier)
            ndef_message_rcvd.append(ndef_message)

            info("get 2nd ndef message")
            identifier = ndef.Record("application/octet-stream", "2")
            identifier = b''.join(ndef.message_encoder([identifier]))
            ndef_message = snep.get_octets(identifier)
            ndef_message_rcvd.append(ndef_message)

            for i in range(len(ndef_message_sent)):
                if not ndef_message_rcvd == ndef_message_sent:
                    info("rcvd ndef message {0} differs".format(i))
                    raise cli.TestFail("rcvd message {0} differs".format(i))
                else:
                    info("rcvd message {0} is correct".format(i))
        except Exception as e:
            raise cli.TestFail("exception " + str(e))
        finally:
            info("disconnect from {0}".format(validation_server))
            snep.close()
コード例 #4
0
ファイル: test_handover.py プロジェクト: ozliver/ndeflib
def test_handover_initiate_record_attributes():
    record = HandoverInitiateRecord()
    record.add_alternative_carrier('active', 'wifi', 'a1', 'a2')
    record.add_alternative_carrier('inactive', 'bt31', 'a3')
    record.unknown_records.append(Record('text/plain', 'txt', 'Hello'))
    octets = b''.join(message_encoder([record]))
    record = list(message_decoder(octets))[0]
    assert isinstance(record, HandoverInitiateRecord)
    assert record.type == 'urn:nfc:wkt:Hi'
    assert record.name == ''
    assert record.hexversion == 0x13
    assert record.version_info == (1, 3)
    assert record.version_string == "1.3"
    assert len(record.alternative_carriers) == 2
    assert len(record.alternative_carriers[0].auxiliary_data_reference) == 2
    assert len(record.alternative_carriers[1].auxiliary_data_reference) == 1
    assert record.alternative_carriers[0].carrier_power_state == 'active'
    assert record.alternative_carriers[0].carrier_data_reference == 'wifi'
    assert record.alternative_carriers[0].auxiliary_data_reference[0] == 'a1'
    assert record.alternative_carriers[0].auxiliary_data_reference[1] == 'a2'
    assert record.alternative_carriers[1].carrier_power_state == 'inactive'
    assert record.alternative_carriers[1].carrier_data_reference == 'bt31'
    assert record.alternative_carriers[1].auxiliary_data_reference[0] == 'a3'
    assert len(record.unknown_records) == 1
    assert record.unknown_records[0].type == 'text/plain'
    assert record.unknown_records[0].name == 'txt'
    assert record.unknown_records[0].data == b'Hello'
コード例 #5
0
ファイル: class_nfc_old.py プロジェクト: jjcc/Py-Library-NFC
def encode_message(data):
    """creates an ndef encoding to write to the card, needs a data of a certain type to encode it to ndef format"""

    print(f"trying to encode {data}")
    # encode characters to bytes
    databin = data.encode('utf-8')
    # print(databin)
    # ndeflib example

    ## check when encoding for data type
    # if isinstance(data, str):
    # record = ndef.new_message(data)
    # elif isinstance:

    record = ndef.new_message(data)

    # no clue yet why below works as it does. the last line actually returns / yields the record from the previous line
    encoder = ndef.message_encoder()
    encoder.send(None)
    encoder.send(record)
    payload = encoder.send(None)
    # payload = ndef.message_encoder(record)
    # print(f"encoded paylorecord = ndef.new_message(data)ad = {payload}")

    return payload
コード例 #6
0
ファイル: snep-test-client.py プロジェクト: otyamura/nfc_dev
    def test_06(self, llc):
        """Unavailable resource"""

        snep = nfc.snep.SnepClient(llc)
        try:
            info("connect to {0}".format(validation_server))
            snep.connect(validation_server)
        except nfc.llcp.ConnectRefused:
            raise cli.TestFail("could not connect to validation server")

        try:
            identifier = ndef.Record("application/octet-stream", "na")
            info("request ndef message {}".format(identifier))
            identifier = b''.join(ndef.message_encoder([identifier]))
            try:
                snep.get_octets(identifier)
            except nfc.snep.SnepError as e:
                if e.errno != nfc.snep.NotFound:
                    raise cli.TestFail("received unexpected response code")
                info("received 'not found' response as expected")
            else:
                raise cli.TestFail("received unexpected message from server")
        finally:
            info("disconnect from {0}".format(validation_server))
            snep.close()
コード例 #7
0
ファイル: test_message.py プロジェクト: ozliver/ndeflib
def test_message_encoder_with_record_send(encoded, message):
    stream = BytesIO()
    octets = bytes(bytearray.fromhex(encoded))
    encoder = ndef.message_encoder(stream=stream)
    encoder.send(None)
    for record in message:
        encoder.send(record)
    encoder.send(None)
    assert stream.getvalue() == octets
コード例 #8
0
ファイル: client.py プロジェクト: otyamura/nfc_dev
 def send_records(self, records):
     """Send handover request message records to the remote server."""
     log.debug("sending '{0}' message".format(records[0].type))
     try:
         octets = b''.join(ndef.message_encoder(records))
     except ndef.EncodeError as error:
         log.error(repr(error))
     else:
         return self.send_octets(octets)
コード例 #9
0
def create_ndef(message,encoding):
    record = ndef.Record('urn:nfc:ext:ln','invoice', bytes(message,encoding))
    print("Record: {}".format(record))
    encoder = ndef.message_encoder()
    encoder.send(None)
    encoder.send(record)
    # A none message must be sent for the last
    message = encoder.send(None)
    return message
コード例 #10
0
ファイル: beam.py プロジェクト: otyamura/nfc_dev
def send_message(args, llc, message):
    t0 = time.time() if args.timeit else None
    if not nfc.snep.SnepClient(llc).put_records(message):
        log.error("failed to send message")
    if t0 is not None:
        transfer_time = time.time() - t0
        message_size = len(b''.join(ndef.message_encoder(message)))
        print("message sent in {0:.3f} seconds ({1} byte @ {2:.0f} byte/sec)".
              format(transfer_time, message_size,
                     message_size / transfer_time))
コード例 #11
0
    def put_records(self, records, timeout=1.0):
        """Send NDEF message records to a SNEP Server.

        .. versionadded:: 0.13

        The :class:`ndef.Record` list given by *records* is encoded
        and then send via :meth:`put_octets`. Same as::

            import ndef
            octets = ndef.message_encoder(records)
            snep_client.put_octets(octets, timeout)

        """
        octets = b''.join(ndef.message_encoder(records))
        return self.put_octets(octets, timeout)
コード例 #12
0
    def _process_request_data(self, octets):
        log.debug("<<< %s", binascii.hexlify(octets).decode())
        try:
            records = list(ndef.message_decoder(octets, 'relax'))
        except ndef.DecodeError as error:
            log.error(repr(error))
            return b''

        if records[0].type == 'urn:nfc:wkt:Hr':
            records = self.process_handover_request_message(records)
        else:
            log.error("received unknown request message")
            records = []

        octets = b''.join(ndef.message_encoder(records))
        log.debug(">>> %s", binascii.hexlify(octets).decode())
        return octets
コード例 #13
0
    def get_records(self, records=None, timeout=1.0):
        """Get NDEF message records from a SNEP Server.

        .. versionadded:: 0.13

        The :class:`ndef.Record` list given by *records* is encoded as
        the request message octets input to :meth:`get_octets`. The
        return value is an :class:`ndef.Record` list decoded from the
        response message octets returned by :meth:`get_octets`. Same
        as::

            import ndef
            send_octets = ndef.message_encoder(records)
            rcvd_octets = snep_client.get_octets(send_octets, timeout)
            records = list(ndef.message_decoder(rcvd_octets))

        """
        octets = b''.join(ndef.message_encoder(records)) if records else None
        octets = self.get_octets(octets, timeout)
        if octets and len(octets) >= 3:
            return list(ndef.message_decoder(octets))
コード例 #14
0
ファイル: class_nfc.py プロジェクト: jjcc/Py-Library-NFC
def encode_message_text(array_of_strings):
    """
    Receives an array of strings and returns a message that contains these in a bytearray that can be transferred to a NFC tag.
    """

    print(f"Array of strings send: {array_of_strings}")

    # create list of ndef records
    message = []
    for string in array_of_strings:
        message += [ndef.TextRecord(string)]
    print(f"NDEF Records created: {message}")

    # create ndef encoder generator
    encoder = ndef.message_encoder(message)

    # convert ndef encoder to payload octets
    payload = b''.join(encoder)
    print(f"NDEF payload created: {payload}")

    return payload
コード例 #15
0
ファイル: server.py プロジェクト: otyamura/nfc_dev
    def process_snep_request(self, request_data):
        assert isinstance(request_data, bytearray)
        log.debug("<<< %s", binascii.hexlify(request_data).decode())
        try:
            if request_data[1] == 1 and len(request_data) >= 10:
                acceptable_length = struct.unpack(">L", request_data[6:10])[0]
                octets = request_data[10:]
                records = list(ndef.message_decoder(octets, known_types={}))
                response = self.process_get_request(records)
                if isinstance(response, int):
                    response_code = response
                    response_data = b''
                else:
                    response_code = 0x81  # nfc.snep.Success
                    response_data = b''.join(ndef.message_encoder(response))
                if len(response_data) > acceptable_length:
                    response_code = 0xC1  # nfc.snep.ExcessData
                    response_data = b''
            elif request_data[1] == 2:
                octets = request_data[6:]
                records = list(ndef.message_decoder(octets, known_types={}))
                response_code = self.process_put_request(records)
                response_data = b''
            else:
                log.debug("bad request (0x{:02x})".format(request_data[1]))
                response_code = 0xC2  # nfc.snep.BadRequest
                response_data = b''
        except ndef.DecodeError as error:
            log.error(repr(error))
            response_code = 0xC2  # nfc.snep.BadRequest
            response_data = b''
        except ndef.EncodeError as error:
            log.error(repr(error))
            response_code = 0xC0  # nfc.snep.NotFound
            response_data = b''

        header = struct.pack(">BBL", 0x10, response_code, len(response_data))
        response_data = header + response_data
        log.debug(">>> %s", binascii.hexlify(response_data).decode())
        return response_data
コード例 #16
0
def cmd(ctx, message, **kwargs):
    """The *payload* command either changes the current last record's
    data (NDEF Record PAYLOAD) or, if the current message does
    not have any records, creates a record with the given record
    data. The changed record is verified to successfully encode and
    decode unless disabled with -x.

    The data string may contain hexadecimal bytes using '\\xNN'
    notation where each N is a nibble from [0-F].

    \b
    Examples:
      ndeftool payload 'Hello World' typename 'text/plain' print
      ndeftool payload '\\x02enHello World' typename 'urn:nfc:wkt:T' print -l

    """
    dmsg(__name__ + ' ' + str(kwargs))
    dmsg(repr(kwargs['data']))

    if not message:
        message = [ndef.Record('unknown')]

    record_type = message[-1].type
    record_name = message[-1].name
    record_data = eval(repr(kwargs['data'].encode()).replace('\\\\', '\\'))

    record = ndef.Record(record_type, record_name, record_data)

    if not kwargs['no_check']:
        octets = b''.join(ndef.message_encoder([record]))
        errors = ctx.meta['decode-errors']
        try:
            record = next(ndef.message_decoder(octets, errors))
        except ndef.DecodeError as error:
            raise click.ClickException(str(error))

    message[-1] = record
    return message
コード例 #17
0
ファイル: TypeName.py プロジェクト: vamsirajendra/ndeftool
def cmd(ctx, message, **kwargs):
    """The *typename* command either changes the current last record's
    type (NDEF Record TNF and TYPE) or, if the current message does
    not have any records, creates a record with the given record
    type. The changed record is verified to successfully encode and
    decode unless disabled with -x.

    \b
    Examples:
      ndeftool typename 'text/plain' print
      ndeftool typename 'text/plain' payload 'Hello World' print

    """
    dmsg(__name__ + ' ' + str(kwargs))

    if not message:
        message = [ndef.Record()]

    record_type = kwargs['type'].encode('latin', 'replace')
    record_name = message[-1].name
    record_data = message[-1].data

    try:
        record = ndef.Record(record_type, record_name, record_data)
    except ValueError as error:
        raise click.ClickException(str(error))

    if not kwargs['no_check']:
        octets = b''.join(ndef.message_encoder([record]))
        errors = ctx.meta['decode-errors']
        try:
            record = next(ndef.message_decoder(octets, errors))
        except ndef.DecodeError as error:
            raise click.ClickException(str(error))

    message[-1] = record
    return message
コード例 #18
0
ファイル: beam.py プロジェクト: otyamura/nfc_dev
def run_recv_save_action(args, llc, message):
    log.info('save ndef message {}'.format(message[0].type))
    args.file.write(b''.join(ndef.message_encoder(message)))
コード例 #19
0
ファイル: test_message.py プロジェクト: ozliver/ndeflib
def test_message_encoder_stop_iteration():
    encoder = ndef.message_encoder()
    encoder.send(None)
    encoder.send(None)
    with pytest.raises(StopIteration):
        encoder.send(None)
コード例 #20
0
ファイル: test_message.py プロジェクト: ozliver/ndeflib
def test_message_encoder_with_bytes_output(encoded, message):
    octets = bytes(bytearray.fromhex(encoded))
    assert b''.join(list(ndef.message_encoder(message))) == octets
コード例 #21
0
def test_message_encode(encoded, message):
    octets = bytes(bytearray.fromhex(encoded))
    print(list(ndef.message_encoder(message)))
    assert b''.join(list(ndef.message_encoder(message))) == octets
コード例 #22
0
ファイル: api.py プロジェクト: zloyplohoy/nfc-vcard
    def post(self):
        parser = reqparse.RequestParser()
        parser.add_argument('first_name')
        parser.add_argument('last_name')
        parser.add_argument('phone_number')
        parser.add_argument('phone_personal')
        parser.add_argument('email_address')
        parser.add_argument('email_personal')
        parser.add_argument('organization')
        parser.add_argument('position')
        parser.add_argument('policy')
        args = parser.parse_args()

        print(str(args))

        vcard = vobject.vCard()

        if args['first_name'] and args['last_name']:
            vcard.add('n')
            vcard.add('fn')
            vcard.n.value = vobject.vcard.Name(family=args['last_name'],
                                               given=args['first_name'])
            vcard.fn.value = ' '.join([args['first_name'], args['last_name']])
        elif args['first_name']:
            vcard.add('n')
            vcard.add('fn')
            vcard.n.value = vobject.vcard.Name(given=args['first_name'])
            vcard.fn.value = args['first_name']
        elif args['last_name']:
            vcard.add('n')
            vcard.add('fn')
            vcard.n.value = vobject.vcard.Name(family=args['last_name'])
            vcard.fn.value = args['last_name']

        if args['phone_number']:
            vcard.add('tel')
            #vcard.tel.value = ''.join(['+7', args['phone_number']])
            vcard.tel.value = args['phone_number']
            if args['phone_personal']:
                vcard.tel.type_param = 'CELL'
            else:
                vcard.tel.type_param = 'WORK'

        if args['email_address']:
            vcard.add('email')
            vcard.email.value = args['email_address']
            if args['email_personal']:
                vcard.email.type_param = 'HOME'
            else:
                vcard.email.type_param = 'WORK'

        if args['organization']:
            vcard.add('org')
            vcard.org.value[0] = args['organization']

        if args['position']:
            vcard.add('title')
            vcard.title.value = args['position']

        vcard_newlines = '\n'.join(vcard.serialize().splitlines())

        if args['policy']:
            with open('/usr/src/app/vcards/' + str(uuid.uuid4()) + '.vcf',
                      'w') as f:
                f.write(vcard_newlines)

        vcard_bytes = bytes(vcard_newlines, 'utf-8')
        ndf_record = ndef.Record(type='text/vcard', name='', data=vcard_bytes)
        ndef_data = b''.join(ndef.message_encoder([ndf_record]))

        device = NTAGWriter()

        try:
            device.write_ndef_message(ndef_data)
        except NTAGWriterError as e:
            return e, 500
        return 'Written', 201
コード例 #23
0
ファイル: test_text.py プロジェクト: nfcpy/ndeflib
def test_message_encode(encoded, message):
    octets = bytes(bytearray.fromhex(encoded))
    print(list(ndef.message_encoder(message)))
    assert b''.join(list(ndef.message_encoder(message))) == octets
コード例 #24
0
ファイル: test_message.py プロジェクト: ozliver/ndeflib
def test_message_encoder_with_stream_output(encoded, message):
    stream = BytesIO()
    octets = bytes(bytearray.fromhex(encoded))
    assert sum(ndef.message_encoder(message, stream)) == len(octets)
    assert stream.getvalue() == octets
コード例 #25
0
def cmd(ctx, message, **kwargs):
    """The *save* command writes the current records to disk. The records
    to write can be restricted to the subset selected with '--skip',
    '--count', '--head' and '--tail' applied in that order. The
    default mode is to save all selected records as one NDEF message
    into a single file given by PATH. In '--burst' mode each record is
    written as one NDEF message into a separate file under the
    directory given by PATH. The file names are three digit numbers
    created from the record index. In '--unpack' mode the payload of
    each record is written to a separate file under directory PATH
    with the file name set to the record name (NDEF Record ID).
    Records without name are not written unless '--unpack' and
    '--burst' are both set.

    The *save* command does not replace existing files or directories
    unless this is requested with '--force'.

    The *save* command consumes records from the internal message
    pipe. This can be prevented with '--keep', all records are then
    forwarded to the next command or written to standard output. When
    *save* is the first command it creates the pipe by reading from
    standard input.

    \b
    Examples:
      ndeftool text 'Hello World' save text.ndef
      ndeftool text 'Hello World' | ndeftool save text.ndef
      ndeftool text 'One' save one.ndef text 'Two' save two.ndef

    """
    dmsg(__name__ + ' ' + str(kwargs))

    path = kwargs['path']

    if os.path.exists(path) and not kwargs['force']:
        errmsg = "path '%s' exists. Use '--force' to replace."
        raise click.ClickException(errmsg % path)

    if message is None:
        info("Reading data from standard input")
        octets = click.get_binary_stream('stdin').read()
        errors = ctx.meta['decode-errors']
        try:
            message = list(ndef.message_decoder(octets, errors))
        except ndef.DecodeError as error:
            raise click.ClickException(str(error))

    first = min(kwargs['skip'], len(message))
    count = min(kwargs['count'] or len(message), len(message))
    head = min(kwargs['head'] or count, count)
    tail = min(kwargs['tail'] or count, count)
    dmsg("first=%d count=%d head=%d tail=%d" % (first, count, head, tail))
    count = min(head, tail, len(message) - first)
    first = first + head - min(head, tail)
    dmsg("first=%d count=%d head=%d tail=%d" % (first, count, head, tail))

    if kwargs['burst'] or kwargs['unpack']:
        path = os.path.normpath(path)
        try:
            if os.path.isdir(path):
                shutil.rmtree(path)
            os.mkdir(path)
        except (OSError, IOError) as error:
            raise click.ClickException(str(error))

        for index, record in enumerate(message[first:first + count]):
            name = None
            if kwargs['unpack'] and record.name:
                name = record.name
            if kwargs['burst'] and not name:
                name = '%03d.ndef' % index
            if name:
                with click.open_file('%s/%s' % (path, name), 'wb') as f:
                    info("Saving 1 record to {}.".format(f.name))
                    if kwargs['unpack']:
                        f.write(record.data)
                    else:
                        f.write(b''.join(ndef.message_encoder([record])))
            else:
                warn("Skipping 1 record without name")
    else:
        with click.open_file(path, 'wb') as f:
            filename = f.name if f.name != '-' else '<stdout>'

            info("Saving {num} record{s} to {path}.".format(
                num=count, path=filename, s=('', 's')[count > 1]))

            f.write(b''.join(ndef.message_encoder(message[first:first +
                                                          count])))

    if not kwargs['keep']:
        del message[first:first + count]

    return message
コード例 #26
0
ファイル: test_tag_tt1.py プロジェクト: vamsirajendra/nfcpy
 def ndef_octets(self):
     uri = 'http://www.abcdefghijklmnopqrstuvwxyzabcdefg.com'
     return b''.join(ndef.message_encoder([ndef.UriRecord(uri)]))
コード例 #27
0
ファイル: test_tag_tt1.py プロジェクト: vamsirajendra/nfcpy
 def ndef_octets(self):
     uri = "http://www." + 17 * "abcdefghijklmnopqrstuvwxyz" + "abcdefg.com"
     return b''.join(ndef.message_encoder([ndef.UriRecord(uri)]))
コード例 #28
0
ファイル: test_message.py プロジェクト: ozliver/ndeflib
def test_fail_message_encoder_invalid_types(argument, errmsg):
    with pytest.raises(TypeError) as excinfo:
        list(ndef.message_encoder(argument))
    assert errmsg == str(excinfo.value)
コード例 #29
0
ファイル: __init__.py プロジェクト: nfcpy/nfcpy
 def records(self, value):
     self.octets = b''.join(message_encoder(value))
コード例 #30
0
 def records(self, value):
     self.octets = b''.join(message_encoder(value))
コード例 #31
0
ファイル: cli.py プロジェクト: vamsirajendra/ndeftool
def process_commands(processors, **kwargs):
    message = None
    for processor in processors:
        message = processor(message)
        dmsg('records = ' + str(message))
    echo(b''.join(ndef.message_encoder(message)), nl=False)