示例#1
0
    def test_add_query(self):
        query = 'field1=value1&field1=value2&field2=hello,%20world%26python'
        url = URL('http://www.example.com/form?' + query)

        ## if initial query is null, it should include the added query
        ext_url = url.with_query('').add_query({
            'field3': 'value3',
            'field4': [1, 2, 3]
        })
        self.assertSetEqual(set(ext_url.form), {'field3', 'field4'})
        self.assertTupleEqual(ext_url.form.get('field3'), ('value3', ))
        self.assertTupleEqual(ext_url.form.get('field4'), ('1', '2', '3'))
        self.assertNotIn('field1', ext_url.form)
        self.assertNotIn('field2', ext_url.form)
        self.assertIn('field3', ext_url.form)
        self.assertIn('field4', ext_url.form)

        ## if initial query exists, it should include the both fields
        ext_query = {'field3': 'value3', 'field4': [1, 2, 3]}
        ext_url = url.add_query({'field3': 'value3', 'field4': [1, 2, 3]})
        self.assertEqual(
            ext_url.query,
            '%s&%s' % (query, 'field3=value3&field4=1&field4=2&field4=3'))
        self.assertSetEqual(set(ext_url.form),
                            {'field1', 'field2', 'field3', 'field4'})
        self.assertIn('field1', ext_url.form)
        self.assertIn('field2', ext_url.form)
        self.assertIn('field3', ext_url.form)
        self.assertIn('field4', ext_url.form)
        self.assertTupleEqual(ext_url.form.get('field1'), ('value1', 'value2'))
        self.assertTupleEqual(ext_url.form.get('field2'),
                              ('hello, world&python', ))
        self.assertTupleEqual(ext_url.form.get('field3'), ('value3', ))
        self.assertTupleEqual(ext_url.form.get('field4'), ('1', '2', '3'))

        ## if added query is null, it should include original query
        self.assertEqual(url.add_query({}).query, query)
    async def _get_info(self, path, children=False, limit=None, **kwargs):
        """
        Request file or directory metadata to the API

        :param path: (str)
        :param children: (bool) if True, return metadata of the children paths
            as well
        :param limit: (int) if provided and children is True, set limit to the
            number of children returned
        :param kwargs: (dict) optional arguments passed on to requests
        :return (dict) path metadata
        """
        url = URL(self.api_url) / 'namespace' / _encode(path)
        url = url.with_query(children=children)
        if limit is not None and children:
            url = url.add_query(limit=f'{limit}')
        url = url.as_uri()
        kw = self.kwargs.copy()
        kw.update(kwargs)
        async with self.session.get(url, **kw) as r:
            if r.status == 404:
                raise FileNotFoundError(url)
            r.raise_for_status()
            return await r.json()