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()