示例#1
0
 def test_parse_bool(self):
     in_data = tags.bool_tag('bola', True) + \
               tags.bool_tag('bolb', False)
     parsed = dmap.parse(in_data, lookup_tag)
     self.assertEqual(2, len(parsed))
     self.assertTrue(dmap.first(parsed, 'bola'))
     self.assertFalse(dmap.first(parsed, 'bolb'))
示例#2
0
 def test_parse_strings(self):
     in_data = tags.string_tag('stra', '') + \
               tags.string_tag('strb', 'test string')
     parsed = dmap.parse(in_data, lookup_tag)
     self.assertEqual(2, len(parsed))
     self.assertEqual('', dmap.first(parsed, 'stra'))
     self.assertEqual('test string', dmap.first(parsed, 'strb'))
示例#3
0
 def handle_remote_button(self, request):
     """Handler for remote control buttons."""
     self._verify_auth_parameters(request)
     content = yield from request.content.read()
     parsed = dmap.parse(content, tag_definitions.lookup_tag)
     self.last_button_pressed = dmap.first(parsed, 'cmbe')
     return web.Response(status=200)
示例#4
0
 def test_extract_multiple_with_same_name(self):
     in_data = tags.uint8_tag('uuu8', 1) + \
               tags.uint8_tag('uuu8', 2) + \
               tags.uint8_tag('uuu8', 3)
     parsed = dmap.parse(in_data, lookup_tag)
     iter = dmap.matches(parsed, 'uuu8')
     self.assertEqual(1, next(iter))
     self.assertEqual(2, next(iter))
     self.assertEqual(3, next(iter))
示例#5
0
 def test_parse_uint_of_various_lengths(self):
     in_data = tags.uint8_tag('uuu8', 12) + \
               tags.uint16_tag('uu16', 37888) + \
               tags.uint32_tag('uu32', 305419896)
     parsed = dmap.parse(in_data, lookup_tag)
     self.assertEqual(3, len(parsed))
     self.assertEqual(12, dmap.first(parsed, 'uuu8'))
     self.assertEqual(37888, dmap.first(parsed, 'uu16'))
     self.assertEqual(305419896, dmap.first(parsed, 'uu32'))
示例#6
0
 def test_simple_pprint(self):
     elem = tags.uint8_tag('uuu8', 12)
     inner = tags.container_tag('conb', elem)
     in_data = tags.container_tag('cona', inner)
     parsed = dmap.parse(in_data, lookup_tag)
     self.assertEqual(dmap.pprint(parsed, lookup_tag),
                      'cona: [container, container]\n' +
                      '  conb: [container, container 2]\n' +
                      '    uuu8: 12 [uint, uint8]\n')
示例#7
0
文件: daap.py 项目: robbiet480/pyatv
 def _extract_data(data, should_parse):
     if _LOGGER.isEnabledFor(logging.DEBUG):
         output = data[0:128]
         _LOGGER.debug('Data[%d]: %s%s', len(data),
                       binascii.hexlify(output),
                       '...' if len(output) != len(data) else '')
     if should_parse:
         return dmap.parse(data, lookup_tag)
     else:
         return data
示例#8
0
 def test_parse_value_in_container(self):
     in_data = tags.container_tag('cona',
                                  tags.uint8_tag('uuu8', 36) +
                                  tags.uint16_tag('uu16', 13000))
     parsed = dmap.parse(in_data, lookup_tag)
     self.assertEqual(1, len(parsed))
     inner = dmap.first(parsed, 'cona')
     self.assertEqual(2, len(inner))
     self.assertEqual(36, dmap.first(inner, 'uuu8'))
     self.assertEqual(13000, dmap.first(inner, 'uu16'))
示例#9
0
    def test_succesful_pairing(self):
        yield from self.pairing.start(self.zeroconf)

        url = self._pairing_url(PAIRING_CODE)
        data, _ = yield from utils.simple_get(url, self.loop)

        # Verify content returned in pairingresponse
        parsed = dmap.parse(data, tag_definitions.lookup_tag)
        self.assertEqual(dmap.first(parsed, 'cmpa', 'cmpg'), 1)
        self.assertEqual(dmap.first(parsed, 'cmpa', 'cmnm'), REMOTE_NAME)
        self.assertEqual(dmap.first(parsed, 'cmpa', 'cmty'), 'ipod')
示例#10
0
    def test_pair_custom_pairing_guid(self):
        self.pairing.pin_code = PIN_CODE2
        self.pairing.pairing_guid = PAIRING_GUID2
        yield from self.pairing.start(self.zeroconf)

        url = self._pairing_url(PAIRING_CODE2)
        data, _ = yield from utils.simple_get(url, self.loop)

        # Verify content returned in pairingresponse
        parsed = dmap.parse(data, tag_definitions.lookup_tag)
        self.assertEqual(dmap.first(parsed, 'cmpa', 'cmpg'),
                         int(PAIRING_GUID2, 16))
示例#11
0
    def perform_pairing(self, pairing_response, port):
        """Pair with a remote client.

        This will perform a GET-request to the specified port and hand over
        information to the client (pyatv) so that the pairing process can be
        completed.
        """
        server = 'http://127.0.0.1:{}'.format(port)
        url = '{}/pairing?pairingcode={}&servicename=test'.format(
            server, pairing_response.pairing_code)
        data, _ = yield from utils.simple_get(url, self.loop)

        # Verify content returned in pairingresponse
        parsed = dmap.parse(data, tag_definitions.lookup_tag)
        self.tc.assertEqual(dmap.first(parsed, 'cmpa', 'cmpg'), 1)
        self.tc.assertEqual(dmap.first(parsed, 'cmpa', 'cmnm'),
                            pairing_response.remote_name)
        self.tc.assertEqual(dmap.first(parsed, 'cmpa', 'cmty'), 'ipod')
示例#12
0
    def _do(self, action, retry=True, is_login=False, is_daap=True):
        resp, status = yield from action()
        if is_daap:
            resp = dmap.parse(resp, lookup_tag)

        self._log_response(str(action.__name__) + ': %s', resp, is_daap)
        if status >= 200 and status < 300:
            return resp
        elif not is_login:
            # If a request fails, try to login again before retrying
            _LOGGER.info('implicitly logged out, logging in again')
            yield from self.login()

        # Retry once if we got a bad response, otherwise bail out
        if retry:
            return (yield from self._do(action,
                                        False,
                                        is_login=is_login,
                                        is_daap=is_daap))
        else:
            raise exceptions.AuthenticationError('failed to login: ' +
                                                 str(status))
示例#13
0
文件: daap.py 项目: AlexxIT/pyatv
    def _do(self, action, retry=True, is_login=False, is_daap=True):
        resp, status = yield from action()
        if is_daap:
            resp = dmap.parse(resp, lookup_tag)

        self._log_response(str(action.__name__) + ': %s', resp, is_daap)
        if status >= 200 and status < 300:
            return resp

        # When a 403 is received we are likely logged out, so a new
        # login must be performed to get a new session id
        if status == 403:
            _LOGGER.info('implicitly logged out, logging in again')
            yield from self.login()

        # Retry once if we got a bad response, otherwise bail out
        if retry:
            return (yield from self._do(
                action, False, is_login=is_login, is_daap=is_daap))
        else:
            raise exceptions.AuthenticationError(
                'failed to login: ' + str(status))
示例#14
0
 def test_parse_raw_data(self):
     in_data = tags.raw_tag('rawa', b'\x01\x02\x03')
     parsed = dmap.parse(in_data, lookup_tag)
     self.assertEqual(1, len(parsed))
     self.assertEqual(b'\x01\x02\x03', dmap.first(parsed, 'rawa'))
示例#15
0
 def _extract_data(data, should_parse):
     if should_parse:
         return dmap.parse(data, lookup_tag)
     return data
示例#16
0
 def test_ignore_value(self):
     elem = tags.uint8_tag('igno', 44)
     parsed = dmap.parse(elem, lookup_tag)
     self.assertEqual(dmap.first(parsed, 'igno'), None)
示例#17
0
 def test_extract_simplified_container(self):
     elem = tags.uint8_tag('uuu8', 12)
     inner = tags.container_tag('conb', elem)
     in_data = tags.container_tag('cona', inner)
     parsed = dmap.parse(in_data, lookup_tag)
     self.assertEqual(12, dmap.first(parsed, 'cona', 'conb', 'uuu8'))