graphql-python / gql

A GraphQL client in Python
https://gql.readthedocs.io
MIT License
1.56k stars 180 forks source link

3.5.0: pytest fails because missing tests/test_pylama_linter.py and PytestDeprecationWarning warnings #499

Open kloczek opened 1 month ago

kloczek commented 1 month ago

I'm packaging your module as an rpm package so I'm using the typical PEP517 based build, install and test cycle used on building packages from non-root account.

List of installed modules in build env: ```console Package Version ----------------------------- ----------- aiohappyeyeballs 2.4.3 aiohttp 3.10.10 aiosignal 1.3.1 alabaster 0.7.16 anyio 4.4.0 async-timeout 4.0.3 attrs 24.2.0 babel 2.16.0 backoff 2.2.1 build 1.2.2.post1 certifi 2024.8.30 charset-normalizer 3.4.0 defusedxml 0.7.1 distro 1.9.0 docutils 0.21.2 exceptiongroup 1.1.3 frozenlist 1.4.1 graphql-core 3.2.5 h11 0.14.0 httpcore 1.0.6 httpx 0.27.2 imagesize 1.4.1 importlib_metadata 8.5.0 iniconfig 2.0.0 installer 0.7.0 Jinja2 3.1.4 MarkupSafe 3.0.2 multidict 6.1.0 packaging 24.0 parse 1.20.2 pluggy 1.5.0 Pygments 2.18.0 pyproject_hooks 1.2.0 pytest 8.2.2 pytest-asyncio 0.23.8 python-dateutil 2.9.0.post0 requests 2.32.3 requests-toolbelt 1.0.0 setuptools 75.1.0 sniffio 1.3.0 snowballstemmer 2.2.0 Sphinx 8.1.3 sphinx-argparse 0.4.0 sphinx_rtd_theme 2.0.0 sphinxcontrib-applehelp 2.0.0 sphinxcontrib-devhelp 1.0.6 sphinxcontrib-htmlhelp 2.1.0 sphinxcontrib-jquery 4.1 sphinxcontrib-jsmath 1.0.1 sphinxcontrib-qthelp 2.0.0 sphinxcontrib-serializinghtml 2.0.0 tokenize_rt 6.1.0 tomli 2.0.1 typing_extensions 4.12.2 urllib3 2.2.2 websockets 13.1 wheel 0.44.0 yarl 1.12.1 zipp 3.20.2 ```

Please let me know if you need more details or want me to perform some diagnostics.

kloczek commented 1 month ago
Here is pytest output: ```console + PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-gql-3.5.0-2.fc37.x86_64/usr/lib64/python3.10/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-gql-3.5.0-2.fc37.x86_64/usr/lib/python3.10/site-packages + /usr/bin/pytest -ra -m 'not network' ============================= test session starts ============================== platform linux -- Python 3.10.14, pytest-8.2.2, pluggy-1.5.0 rootdir: /home/tkloczko/rpmbuild/BUILD/gql-3.5.0 configfile: setup.cfg plugins: anyio-4.4.0, asyncio-0.23.8 asyncio: mode=strict collected 567 items / 2 errors ==================================== ERRORS ==================================== ___________ ERROR collecting gql-checker/tests/test_flake8_linter.py ___________ ImportError while importing test module '/home/tkloczko/rpmbuild/BUILD/gql-3.5.0/gql-checker/tests/test_flake8_linter.py'. Hint: make sure your test modules/packages have valid Python names. Traceback: /usr/lib64/python3.10/importlib/__init__.py:126: in import_module return _bootstrap._gcd_import(name[level:], package, level) E ModuleNotFoundError: No module named 'tests.test_flake8_linter' ___________ ERROR collecting gql-checker/tests/test_pylama_linter.py ___________ ImportError while importing test module '/home/tkloczko/rpmbuild/BUILD/gql-3.5.0/gql-checker/tests/test_pylama_linter.py'. Hint: make sure your test modules/packages have valid Python names. Traceback: /usr/lib64/python3.10/importlib/__init__.py:126: in import_module return _bootstrap._gcd_import(name[level:], package, level) E ModuleNotFoundError: No module named 'tests.test_pylama_linter' =============================== warnings summary =============================== tests/custom_scalars/test_money.py:493 tests/custom_scalars/test_money.py:493: PytestDeprecationWarning: test_custom_scalar_in_output_with_transport is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/custom_scalars/test_money.py:511 tests/custom_scalars/test_money.py:511: PytestDeprecationWarning: test_custom_scalar_in_input_query_with_transport is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/custom_scalars/test_money.py:533 tests/custom_scalars/test_money.py:533: PytestDeprecationWarning: test_custom_scalar_in_input_variable_values_with_transport is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/custom_scalars/test_money.py:557 tests/custom_scalars/test_money.py:557: PytestDeprecationWarning: test_custom_scalar_in_input_variable_values_split_with_transport is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/custom_scalars/test_money.py:583 tests/custom_scalars/test_money.py:583: PytestDeprecationWarning: test_custom_scalar_serialize_variables is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/custom_scalars/test_money.py:605 tests/custom_scalars/test_money.py:605: PytestDeprecationWarning: test_custom_scalar_serialize_variables_no_schema is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/custom_scalars/test_money.py:624 tests/custom_scalars/test_money.py:624: PytestDeprecationWarning: test_custom_scalar_serialize_variables_schema_from_introspection is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/custom_scalars/test_money.py:658 tests/custom_scalars/test_money.py:658: PytestDeprecationWarning: test_update_schema_scalars is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/custom_scalars/test_money.py:735 tests/custom_scalars/test_money.py:735: PytestDeprecationWarning: test_custom_scalar_serialize_variables_sync_transport is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/custom_scalars/test_money.py:760 tests/custom_scalars/test_money.py:760: PytestDeprecationWarning: test_custom_scalar_serialize_variables_sync_transport_2 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/custom_scalars/test_money.py:820 tests/custom_scalars/test_money.py:820: PytestDeprecationWarning: test_gql_cli_print_schema is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/starwars/test_introspection.py:12 tests/starwars/test_introspection.py:12: PytestDeprecationWarning: test_starwars_introspection_args is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1145 /home/tkloczko/rpmbuild/BUILD/gql-3.5.0/tests/test_aiohttp.py:1145: PytestUnknownMarkWarning: Unknown pytest.mark.script_launch_mode - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.script_launch_mode("subprocess") tests/test_aiohttp.py:43 tests/test_aiohttp.py:43: PytestDeprecationWarning: test_aiohttp_query is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:82 tests/test_aiohttp.py:82: PytestDeprecationWarning: test_aiohttp_ignore_backend_content_type is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:111 tests/test_aiohttp.py:111: PytestDeprecationWarning: test_aiohttp_cookies is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:144 tests/test_aiohttp.py:144: PytestDeprecationWarning: test_aiohttp_error_code_401 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:175 tests/test_aiohttp.py:175: PytestDeprecationWarning: test_aiohttp_error_code_429 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:222 tests/test_aiohttp.py:222: PytestDeprecationWarning: test_aiohttp_error_code_500 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:256 tests/test_aiohttp.py:256: PytestDeprecationWarning: test_aiohttp_error_code[{"errors": ["Error 1", "Error 2"]}] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:256 tests/test_aiohttp.py:256: PytestDeprecationWarning: test_aiohttp_error_code[{"errors": {"error_1": "Something"}}] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:256 tests/test_aiohttp.py:256: PytestDeprecationWarning: test_aiohttp_error_code[{"errors": 5}] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:311 tests/test_aiohttp.py:311: PytestDeprecationWarning: test_aiohttp_invalid_protocol[param0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:311 tests/test_aiohttp.py:311: PytestDeprecationWarning: test_aiohttp_invalid_protocol[param1] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:311 tests/test_aiohttp.py:311: PytestDeprecationWarning: test_aiohttp_invalid_protocol[param2] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:311 tests/test_aiohttp.py:311: PytestDeprecationWarning: test_aiohttp_invalid_protocol[param3] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:340 tests/test_aiohttp.py:340: PytestDeprecationWarning: test_aiohttp_subscribe_not_supported is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:365 tests/test_aiohttp.py:365: PytestDeprecationWarning: test_aiohttp_cannot_connect_twice is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:387 tests/test_aiohttp.py:387: PytestDeprecationWarning: test_aiohttp_cannot_execute_if_not_connected is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:409 tests/test_aiohttp.py:409: PytestDeprecationWarning: test_aiohttp_extra_args is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:456 tests/test_aiohttp.py:456: PytestDeprecationWarning: test_aiohttp_query_variable_values is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:488 tests/test_aiohttp.py:488: PytestDeprecationWarning: test_aiohttp_query_variable_values_fix_issue_292 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:522 tests/test_aiohttp.py:522: PytestDeprecationWarning: test_aiohttp_execute_running_in_thread is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:550 tests/test_aiohttp.py:550: PytestDeprecationWarning: test_aiohttp_subscribe_running_in_thread is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:638 tests/test_aiohttp.py:638: PytestDeprecationWarning: test_aiohttp_file_upload is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:703 tests/test_aiohttp.py:703: PytestDeprecationWarning: test_aiohttp_file_upload_with_content_type is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:741 tests/test_aiohttp.py:741: PytestDeprecationWarning: test_aiohttp_file_upload_without_session is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:811 tests/test_aiohttp.py:811: PytestDeprecationWarning: test_aiohttp_binary_file_upload is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:846 tests/test_aiohttp.py:846: PytestDeprecationWarning: test_aiohttp_stream_reader_upload is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:883 tests/test_aiohttp.py:883: PytestDeprecationWarning: test_aiohttp_async_generator_upload is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:946 tests/test_aiohttp.py:946: PytestDeprecationWarning: test_aiohttp_file_upload_two_files is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1037 tests/test_aiohttp.py:1037: PytestDeprecationWarning: test_aiohttp_file_upload_list_of_two_files is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1109 tests/test_aiohttp.py:1109: PytestDeprecationWarning: test_aiohttp_using_cli is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1144 tests/test_aiohttp.py:1144: PytestDeprecationWarning: test_aiohttp_using_cli_ep is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1182 tests/test_aiohttp.py:1182: PytestDeprecationWarning: test_aiohttp_using_cli_invalid_param is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1218 tests/test_aiohttp.py:1218: PytestDeprecationWarning: test_aiohttp_using_cli_invalid_query is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1258 tests/test_aiohttp.py:1258: PytestDeprecationWarning: test_aiohttp_query_with_extensions is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1285 tests/test_aiohttp.py:1285: PytestDeprecationWarning: test_aiohttp_query_https[0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1285 tests/test_aiohttp.py:1285: PytestDeprecationWarning: test_aiohttp_query_https[10] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1320 tests/test_aiohttp.py:1320: PytestDeprecationWarning: test_aiohttp_error_fetching_schema is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1363 tests/test_aiohttp.py:1363: PytestDeprecationWarning: test_aiohttp_reconnecting_session is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1400 tests/test_aiohttp.py:1400: PytestDeprecationWarning: test_aiohttp_reconnecting_session_retries[False] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1400 tests/test_aiohttp.py:1400: PytestDeprecationWarning: test_aiohttp_reconnecting_session_retries[] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1434 tests/test_aiohttp.py:1434: PytestDeprecationWarning: test_aiohttp_reconnecting_session_start_connecting_task_twice is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1469 tests/test_aiohttp.py:1469: PytestDeprecationWarning: test_aiohttp_json_serializer is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp.py:1514 tests/test_aiohttp.py:1514: PytestDeprecationWarning: test_aiohttp_connector_owner_false is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_aiohttp_online.py:11 tests/test_aiohttp_online.py:11: PytestDeprecationWarning: test_aiohttp_simple_query is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_aiohttp_online.py:56 tests/test_aiohttp_online.py:56: PytestDeprecationWarning: test_aiohttp_invalid_query is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_aiohttp_online.py:84 tests/test_aiohttp_online.py:84: PytestDeprecationWarning: test_aiohttp_two_queries_in_parallel_using_two_tasks is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_appsync_http.py:8 tests/test_appsync_http.py:8: PytestDeprecationWarning: test_appsync_iam_mutation is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_appsync_websockets.py:403 tests/test_appsync_websockets.py:403: PytestDeprecationWarning: test_appsync_subscription_api_key[realtime_appsync_server_keepalive] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_appsync_websockets.py:422 tests/test_appsync_websockets.py:422: PytestDeprecationWarning: test_appsync_subscription_iam_with_token[realtime_appsync_server] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_appsync_websockets.py:449 tests/test_appsync_websockets.py:449: PytestDeprecationWarning: test_appsync_subscription_iam_without_token[realtime_appsync_server] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_appsync_websockets.py:475 tests/test_appsync_websockets.py:475: PytestDeprecationWarning: test_appsync_execute_method_not_allowed[realtime_appsync_server] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_appsync_websockets.py:523 tests/test_appsync_websockets.py:523: PytestDeprecationWarning: test_appsync_fetch_schema_from_transport_not_allowed is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_appsync_websockets.py:551 tests/test_appsync_websockets.py:551: PytestDeprecationWarning: test_appsync_subscription_api_key_unauthorized[realtime_appsync_server] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_appsync_websockets.py:575 tests/test_appsync_websockets.py:575: PytestDeprecationWarning: test_appsync_subscription_iam_not_allowed[realtime_appsync_server] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_appsync_websockets.py:613 tests/test_appsync_websockets.py:613: PytestDeprecationWarning: test_appsync_subscription_server_sending_a_not_json_answer[realtime_appsync_server_not_json_answer] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_appsync_websockets.py:641 tests/test_appsync_websockets.py:641: PytestDeprecationWarning: test_appsync_subscription_server_sending_an_error_without_an_id[realtime_appsync_server_error_without_id] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_appsync_websockets.py:669 tests/test_appsync_websockets.py:669: PytestDeprecationWarning: test_appsync_subscription_variable_values_and_operation_name[realtime_appsync_server_keepalive] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_async_client_validation.py:76 tests/test_async_client_validation.py:76: PytestDeprecationWarning: test_async_client_validation[client_params0-\n subscription ListenEpisodeReviews($ep: Episode!) {\n reviewAdded(episode: $ep) {\n stars,\n commentary,\n episode\n }\n }\n-server_starwars] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.websockets tests/test_async_client_validation.py:76 tests/test_async_client_validation.py:76: PytestDeprecationWarning: test_async_client_validation[client_params1-\n subscription ListenEpisodeReviews($ep: Episode!) {\n reviewAdded(episode: $ep) {\n stars,\n commentary,\n episode\n }\n }\n-server_starwars] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.websockets tests/test_async_client_validation.py:76 tests/test_async_client_validation.py:76: PytestDeprecationWarning: test_async_client_validation[client_params2-\n subscription ListenEpisodeReviews($ep: Episode!) {\n reviewAdded(episode: $ep) {\n stars,\n commentary,\n episode\n }\n }\n-server_starwars] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.websockets tests/test_async_client_validation.py:123 tests/test_async_client_validation.py:123: PytestDeprecationWarning: test_async_client_validation_invalid_query[client_params0-\n subscription ListenEpisodeReviews($ep: Episode!) {\n reviewAdded(episode: $ep) {\n not_valid_field,\n stars,\n commentary,\n episode\n }\n }\n-server_starwars] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.websockets tests/test_async_client_validation.py:123 tests/test_async_client_validation.py:123: PytestDeprecationWarning: test_async_client_validation_invalid_query[client_params1-\n subscription ListenEpisodeReviews($ep: Episode!) {\n reviewAdded(episode: $ep) {\n not_valid_field,\n stars,\n commentary,\n episode\n }\n }\n-server_starwars] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.websockets tests/test_async_client_validation.py:123 tests/test_async_client_validation.py:123: PytestDeprecationWarning: test_async_client_validation_invalid_query[client_params2-\n subscription ListenEpisodeReviews($ep: Episode!) {\n reviewAdded(episode: $ep) {\n not_valid_field,\n stars,\n commentary,\n episode\n }\n }\n-server_starwars] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.websockets tests/test_async_client_validation.py:160 tests/test_async_client_validation.py:160: PytestDeprecationWarning: test_async_client_validation_different_schemas_parameters_forbidden[client_params0-\n subscription ListenEpisodeReviews($ep: Episode!) {\n reviewAdded(episode: $ep) {\n not_valid_field,\n stars,\n commentary,\n episode\n }\n }\n-server_starwars] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.websockets tests/test_async_client_validation.py:191 tests/test_async_client_validation.py:191: PytestDeprecationWarning: test_async_client_validation_fetch_schema_from_server_valid_query[server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.websockets tests/test_async_client_validation.py:229 tests/test_async_client_validation.py:229: PytestDeprecationWarning: test_async_client_validation_fetch_schema_from_server_invalid_query[server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.websockets tests/test_async_client_validation.py:255 tests/test_async_client_validation.py:255: PytestDeprecationWarning: test_async_client_validation_fetch_schema_from_server_with_client_argument[server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.websockets tests/test_graphqlws_exceptions.py:38 tests/test_graphqlws_exceptions.py:38: PytestDeprecationWarning: test_graphqlws_invalid_query[\n query getContinents {\n continents {\n code\n bloh\n }\n }\n-graphqlws_server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:79 tests/test_graphqlws_exceptions.py:79: PytestDeprecationWarning: test_graphqlws_invalid_subscription[\n subscription getContinents {\n continents {\n code\n bloh\n }\n }\n-server_invalid_subscription] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:109 tests/test_graphqlws_exceptions.py:109: PytestDeprecationWarning: test_graphqlws_server_does_not_send_ack[\n query getContinents {\n continents {\n code\n bloh\n }\n }\n-server_no_ack] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:142 tests/test_graphqlws_exceptions.py:142: PytestDeprecationWarning: test_graphqlws_sending_invalid_query[server_invalid_query] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:178 tests/test_graphqlws_exceptions.py:178: PytestDeprecationWarning: test_graphqlws_transport_protocol_errors[graphqlws_server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:178 tests/test_graphqlws_exceptions.py:178: PytestDeprecationWarning: test_graphqlws_transport_protocol_errors[graphqlws_server1] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:178 tests/test_graphqlws_exceptions.py:178: PytestDeprecationWarning: test_graphqlws_transport_protocol_errors[graphqlws_server2] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:178 tests/test_graphqlws_exceptions.py:178: PytestDeprecationWarning: test_graphqlws_transport_protocol_errors[graphqlws_server3] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:178 tests/test_graphqlws_exceptions.py:178: PytestDeprecationWarning: test_graphqlws_transport_protocol_errors[graphqlws_server4] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:178 tests/test_graphqlws_exceptions.py:178: PytestDeprecationWarning: test_graphqlws_transport_protocol_errors[graphqlws_server5] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:178 tests/test_graphqlws_exceptions.py:178: PytestDeprecationWarning: test_graphqlws_transport_protocol_errors[graphqlws_server6] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:178 tests/test_graphqlws_exceptions.py:178: PytestDeprecationWarning: test_graphqlws_transport_protocol_errors[graphqlws_server7] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:178 tests/test_graphqlws_exceptions.py:178: PytestDeprecationWarning: test_graphqlws_transport_protocol_errors[graphqlws_server8] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:178 tests/test_graphqlws_exceptions.py:178: PytestDeprecationWarning: test_graphqlws_transport_protocol_errors[graphqlws_server9] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:178 tests/test_graphqlws_exceptions.py:178: PytestDeprecationWarning: test_graphqlws_transport_protocol_errors[graphqlws_server10] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:214 tests/test_graphqlws_exceptions.py:214: PytestDeprecationWarning: test_graphqlws_server_does_not_ack[server_without_ack] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:233 tests/test_graphqlws_exceptions.py:233: PytestDeprecationWarning: test_graphqlws_server_closing_directly[server_closing_directly] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_exceptions.py:254 tests/test_graphqlws_exceptions.py:254: PytestDeprecationWarning: test_graphqlws_server_closing_after_ack[server_closing_after_ack] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:228 tests/test_graphqlws_subscription.py:228: PytestDeprecationWarning: test_graphqlws_subscription[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:251 tests/test_graphqlws_subscription.py:251: PytestDeprecationWarning: test_graphqlws_subscription_break[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:281 tests/test_graphqlws_subscription.py:281: PytestDeprecationWarning: test_graphqlws_subscription_task_cancel[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:320 tests/test_graphqlws_subscription.py:320: PytestDeprecationWarning: test_graphqlws_subscription_close_transport[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:383 tests/test_graphqlws_subscription.py:383: PytestDeprecationWarning: test_graphqlws_subscription_server_connection_closed[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown_close_connection_in_middle] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:410 tests/test_graphqlws_subscription.py:410: PytestDeprecationWarning: test_graphqlws_subscription_with_operation_name[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:438 tests/test_graphqlws_subscription.py:438: PytestDeprecationWarning: test_graphqlws_subscription_with_keepalive[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown_keepalive] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:468 tests/test_graphqlws_subscription.py:468: PytestDeprecationWarning: test_graphqlws_subscription_with_keepalive_with_timeout_ok[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown_keepalive] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:500 tests/test_graphqlws_subscription.py:500: PytestDeprecationWarning: test_graphqlws_subscription_with_keepalive_with_timeout_nok[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown_keepalive] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:533 tests/test_graphqlws_subscription.py:533: PytestDeprecationWarning: test_graphqlws_subscription_with_ping_interval_ok[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown_keepalive] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:569 tests/test_graphqlws_subscription.py:569: PytestDeprecationWarning: test_graphqlws_subscription_with_ping_interval_nok[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown_dont_answer_pings] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:602 tests/test_graphqlws_subscription.py:602: PytestDeprecationWarning: test_graphqlws_subscription_manual_pings_with_payload[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown_keepalive] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:644 tests/test_graphqlws_subscription.py:644: PytestDeprecationWarning: test_graphqlws_subscription_manual_pong_answers_with_payload[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown_keepalive] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:775 tests/test_graphqlws_subscription.py:775: PytestDeprecationWarning: test_graphqlws_subscription_running_in_thread[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown_keepalive] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:808 tests/test_graphqlws_subscription.py:808: PytestDeprecationWarning: test_graphqlws_subscription_reconnecting_session[False-\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown_disconnect] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_graphqlws_subscription.py:808 tests/test_graphqlws_subscription.py:808: PytestDeprecationWarning: test_graphqlws_subscription_reconnecting_session[True-\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown_disconnect] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_http_async_sync.py:6 tests/test_http_async_sync.py:6: PytestDeprecationWarning: test_async_client_async_transport[True] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_http_async_sync.py:6 tests/test_http_async_sync.py:6: PytestDeprecationWarning: test_async_client_async_transport[False] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_http_async_sync.py:50 tests/test_http_async_sync.py:50: PytestDeprecationWarning: test_async_client_sync_transport[True] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.requests tests/test_http_async_sync.py:50 tests/test_http_async_sync.py:50: PytestDeprecationWarning: test_async_client_sync_transport[False] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.requests tests/test_httpx.py:37 tests/test_httpx.py:37: PytestDeprecationWarning: test_httpx_query is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:80 tests/test_httpx.py:80: PytestDeprecationWarning: test_httpx_cookies is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:117 tests/test_httpx.py:117: PytestDeprecationWarning: test_httpx_error_code_401 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:152 tests/test_httpx.py:152: PytestDeprecationWarning: test_httpx_error_code_429 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:201 tests/test_httpx.py:201: PytestDeprecationWarning: test_httpx_error_code_500 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:233 tests/test_httpx.py:233: PytestDeprecationWarning: test_httpx_error_code is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:270 tests/test_httpx.py:270: PytestDeprecationWarning: test_httpx_invalid_protocol[{}] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:270 tests/test_httpx.py:270: PytestDeprecationWarning: test_httpx_invalid_protocol[qlsjfqsdlkj] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:270 tests/test_httpx.py:270: PytestDeprecationWarning: test_httpx_invalid_protocol[{"not_data_or_errors": 35}] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:301 tests/test_httpx.py:301: PytestDeprecationWarning: test_httpx_cannot_connect_twice is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:327 tests/test_httpx.py:327: PytestDeprecationWarning: test_httpx_cannot_execute_if_not_connected is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:366 tests/test_httpx.py:366: PytestDeprecationWarning: test_httpx_query_with_extensions is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:421 tests/test_httpx.py:421: PytestDeprecationWarning: test_httpx_file_upload is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:481 tests/test_httpx.py:481: PytestDeprecationWarning: test_httpx_file_upload_with_content_type is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:549 tests/test_httpx.py:549: PytestDeprecationWarning: test_httpx_file_upload_additional_headers is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:613 tests/test_httpx.py:613: PytestDeprecationWarning: test_httpx_binary_file_upload is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:686 tests/test_httpx.py:686: PytestDeprecationWarning: test_httpx_file_upload_two_files is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:784 tests/test_httpx.py:784: PytestDeprecationWarning: test_httpx_file_upload_list_of_two_files is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx.py:875 tests/test_httpx.py:875: PytestDeprecationWarning: test_httpx_error_fetching_schema is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:1019 /home/tkloczko/rpmbuild/BUILD/gql-3.5.0/tests/test_httpx_async.py:1019: PytestUnknownMarkWarning: Unknown pytest.mark.script_launch_mode - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html @pytest.mark.script_launch_mode("subprocess") tests/test_httpx_async.py:43 tests/test_httpx_async.py:43: PytestDeprecationWarning: test_httpx_query is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:83 tests/test_httpx_async.py:83: PytestDeprecationWarning: test_httpx_ignore_backend_content_type is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:113 tests/test_httpx_async.py:113: PytestDeprecationWarning: test_httpx_cookies is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:147 tests/test_httpx_async.py:147: PytestDeprecationWarning: test_httpx_error_code_401 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:179 tests/test_httpx_async.py:179: PytestDeprecationWarning: test_httpx_error_code_429 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:227 tests/test_httpx_async.py:227: PytestDeprecationWarning: test_httpx_error_code_500 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:262 tests/test_httpx_async.py:262: PytestDeprecationWarning: test_httpx_error_code[{"errors": ["Error 1", "Error 2"]}] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:262 tests/test_httpx_async.py:262: PytestDeprecationWarning: test_httpx_error_code[{"errors": {"error_1": "Something"}}] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:262 tests/test_httpx_async.py:262: PytestDeprecationWarning: test_httpx_error_code[{"errors": 5}] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:318 tests/test_httpx_async.py:318: PytestDeprecationWarning: test_httpx_invalid_protocol[param0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:318 tests/test_httpx_async.py:318: PytestDeprecationWarning: test_httpx_invalid_protocol[param1] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:318 tests/test_httpx_async.py:318: PytestDeprecationWarning: test_httpx_invalid_protocol[param2] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:318 tests/test_httpx_async.py:318: PytestDeprecationWarning: test_httpx_invalid_protocol[param3] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:348 tests/test_httpx_async.py:348: PytestDeprecationWarning: test_httpx_subscribe_not_supported is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:374 tests/test_httpx_async.py:374: PytestDeprecationWarning: test_httpx_cannot_connect_twice is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:397 tests/test_httpx_async.py:397: PytestDeprecationWarning: test_httpx_cannot_execute_if_not_connected is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:420 tests/test_httpx_async.py:420: PytestDeprecationWarning: test_httpx_extra_args is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:465 tests/test_httpx_async.py:465: PytestDeprecationWarning: test_httpx_query_variable_values is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:498 tests/test_httpx_async.py:498: PytestDeprecationWarning: test_httpx_query_variable_values_fix_issue_292 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:533 tests/test_httpx_async.py:533: PytestDeprecationWarning: test_httpx_execute_running_in_thread is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:562 tests/test_httpx_async.py:562: PytestDeprecationWarning: test_httpx_subscribe_running_in_thread is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:651 tests/test_httpx_async.py:651: PytestDeprecationWarning: test_httpx_file_upload is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:687 tests/test_httpx_async.py:687: PytestDeprecationWarning: test_httpx_file_upload_without_session is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:758 tests/test_httpx_async.py:758: PytestDeprecationWarning: test_httpx_binary_file_upload is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:816 tests/test_httpx_async.py:816: PytestDeprecationWarning: test_httpx_file_upload_two_files is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:908 tests/test_httpx_async.py:908: PytestDeprecationWarning: test_httpx_file_upload_list_of_two_files is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:981 tests/test_httpx_async.py:981: PytestDeprecationWarning: test_httpx_using_cli is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:1017 tests/test_httpx_async.py:1017: PytestDeprecationWarning: test_httpx_using_cli_ep is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:1056 tests/test_httpx_async.py:1056: PytestDeprecationWarning: test_httpx_using_cli_invalid_param is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:1093 tests/test_httpx_async.py:1093: PytestDeprecationWarning: test_httpx_using_cli_invalid_query is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:1134 tests/test_httpx_async.py:1134: PytestDeprecationWarning: test_httpx_query_with_extensions is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:1162 tests/test_httpx_async.py:1162: PytestDeprecationWarning: test_httpx_query_https is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:1197 tests/test_httpx_async.py:1197: PytestDeprecationWarning: test_httpx_error_fetching_schema is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:1241 tests/test_httpx_async.py:1241: PytestDeprecationWarning: test_httpx_reconnecting_session is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:1279 tests/test_httpx_async.py:1279: PytestDeprecationWarning: test_httpx_reconnecting_session_retries[False] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:1279 tests/test_httpx_async.py:1279: PytestDeprecationWarning: test_httpx_reconnecting_session_retries[] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:1312 tests/test_httpx_async.py:1312: PytestDeprecationWarning: test_httpx_reconnecting_session_start_connecting_task_twice is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_async.py:1348 tests/test_httpx_async.py:1348: PytestDeprecationWarning: test_httpx_json_serializer is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_httpx_online.py:11 tests/test_httpx_online.py:11: PytestDeprecationWarning: test_httpx_simple_query is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.httpx tests/test_httpx_online.py:56 tests/test_httpx_online.py:56: PytestDeprecationWarning: test_httpx_invalid_query is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.httpx tests/test_httpx_online.py:84 tests/test_httpx_online.py:84: PytestDeprecationWarning: test_httpx_two_queries_in_parallel_using_two_tasks is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.httpx tests/test_phoenix_channel_exceptions.py:149 tests/test_phoenix_channel_exceptions.py:149: PytestDeprecationWarning: test_phoenix_channel_query_protocol_error[\n query getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:149 tests/test_phoenix_channel_exceptions.py:149: PytestDeprecationWarning: test_phoenix_channel_query_protocol_error[\n query getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server1] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:149 tests/test_phoenix_channel_exceptions.py:149: PytestDeprecationWarning: test_phoenix_channel_query_protocol_error[\n query getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server2] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:149 tests/test_phoenix_channel_exceptions.py:149: PytestDeprecationWarning: test_phoenix_channel_query_protocol_error[\n query getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server3] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:149 tests/test_phoenix_channel_exceptions.py:149: PytestDeprecationWarning: test_phoenix_channel_query_protocol_error[\n query getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server4] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:149 tests/test_phoenix_channel_exceptions.py:149: PytestDeprecationWarning: test_phoenix_channel_query_protocol_error[\n query getContinents {\n continents {\n code\n name\n }\n }\n-no_connection_ack_phoenix_server] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:149 tests/test_phoenix_channel_exceptions.py:149: PytestDeprecationWarning: test_phoenix_channel_query_protocol_error[\n query getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server5] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:182 tests/test_phoenix_channel_exceptions.py:182: PytestDeprecationWarning: test_phoenix_channel_query_error[\n query getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:182 tests/test_phoenix_channel_exceptions.py:182: PytestDeprecationWarning: test_phoenix_channel_query_error[\n query getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server1] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:182 tests/test_phoenix_channel_exceptions.py:182: PytestDeprecationWarning: test_phoenix_channel_query_error[\n query getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server2] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:182 tests/test_phoenix_channel_exceptions.py:182: PytestDeprecationWarning: test_phoenix_channel_query_error[\n query getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server3] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:388 tests/test_phoenix_channel_exceptions.py:388: PytestDeprecationWarning: test_phoenix_channel_subscription_protocol_error[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:388 tests/test_phoenix_channel_exceptions.py:388: PytestDeprecationWarning: test_phoenix_channel_subscription_protocol_error[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server1] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:388 tests/test_phoenix_channel_exceptions.py:388: PytestDeprecationWarning: test_phoenix_channel_subscription_protocol_error[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server2] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:388 tests/test_phoenix_channel_exceptions.py:388: PytestDeprecationWarning: test_phoenix_channel_subscription_protocol_error[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server3] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:388 tests/test_phoenix_channel_exceptions.py:388: PytestDeprecationWarning: test_phoenix_channel_subscription_protocol_error[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server4] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:388 tests/test_phoenix_channel_exceptions.py:388: PytestDeprecationWarning: test_phoenix_channel_subscription_protocol_error[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server5] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:388 tests/test_phoenix_channel_exceptions.py:388: PytestDeprecationWarning: test_phoenix_channel_subscription_protocol_error[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server6] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:388 tests/test_phoenix_channel_exceptions.py:388: PytestDeprecationWarning: test_phoenix_channel_subscription_protocol_error[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server7] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:388 tests/test_phoenix_channel_exceptions.py:388: PytestDeprecationWarning: test_phoenix_channel_subscription_protocol_error[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server8] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:388 tests/test_phoenix_channel_exceptions.py:388: PytestDeprecationWarning: test_phoenix_channel_subscription_protocol_error[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server9] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:388 tests/test_phoenix_channel_exceptions.py:388: PytestDeprecationWarning: test_phoenix_channel_subscription_protocol_error[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server10] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:388 tests/test_phoenix_channel_exceptions.py:388: PytestDeprecationWarning: test_phoenix_channel_subscription_protocol_error[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server11] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:435 tests/test_phoenix_channel_exceptions.py:435: PytestDeprecationWarning: test_phoenix_channel_server_error[\n query getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:461 tests/test_phoenix_channel_exceptions.py:461: PytestDeprecationWarning: test_phoenix_channel_unsubscribe_error[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:461 tests/test_phoenix_channel_exceptions.py:461: PytestDeprecationWarning: test_phoenix_channel_unsubscribe_error[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server1] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_exceptions.py:494 tests/test_phoenix_channel_exceptions.py:494: PytestDeprecationWarning: test_phoenix_channel_unsubscribe_error_forcing[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-phoenix_server] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_query.py:49 tests/test_phoenix_channel_query.py:49: PytestDeprecationWarning: test_phoenix_channel_query[\n query getContinents {\n continents {\n code\n name\n }\n }\n-query_server] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_query.py:126 tests/test_phoenix_channel_query.py:126: PytestDeprecationWarning: test_phoenix_channel_subscription[\n subscription getContinents {\n continents {\n code\n name\n }\n }\n-subscription_server] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_subscription.py:173 tests/test_phoenix_channel_subscription.py:173: PytestDeprecationWarning: test_phoenix_channel_subscription[0-\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_subscription.py:173 tests/test_phoenix_channel_subscription.py:173: PytestDeprecationWarning: test_phoenix_channel_subscription[5-\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_subscription.py:224 tests/test_phoenix_channel_subscription.py:224: PytestDeprecationWarning: test_phoenix_channel_subscription_no_break[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_phoenix_channel_subscription.py:370 tests/test_phoenix_channel_subscription.py:370: PytestDeprecationWarning: test_phoenix_channel_heartbeat[\n subscription {\n heartbeat {\n heartbeat_count\n }\n }\n-phoenix_heartbeat_server] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_requests.py:37 tests/test_requests.py:37: PytestDeprecationWarning: test_requests_query is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:80 tests/test_requests.py:80: PytestDeprecationWarning: test_requests_cookies is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:117 tests/test_requests.py:117: PytestDeprecationWarning: test_requests_error_code_401 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:152 tests/test_requests.py:152: PytestDeprecationWarning: test_requests_error_code_429 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:201 tests/test_requests.py:201: PytestDeprecationWarning: test_requests_error_code_500 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:233 tests/test_requests.py:233: PytestDeprecationWarning: test_requests_error_code is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:270 tests/test_requests.py:270: PytestDeprecationWarning: test_requests_invalid_protocol[{}] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:270 tests/test_requests.py:270: PytestDeprecationWarning: test_requests_invalid_protocol[qlsjfqsdlkj] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:270 tests/test_requests.py:270: PytestDeprecationWarning: test_requests_invalid_protocol[{"not_data_or_errors": 35}] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:301 tests/test_requests.py:301: PytestDeprecationWarning: test_requests_cannot_connect_twice is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:327 tests/test_requests.py:327: PytestDeprecationWarning: test_requests_cannot_execute_if_not_connected is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:366 tests/test_requests.py:366: PytestDeprecationWarning: test_requests_query_with_extensions is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:423 tests/test_requests.py:423: PytestDeprecationWarning: test_requests_file_upload is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:483 tests/test_requests.py:483: PytestDeprecationWarning: test_requests_file_upload_with_content_type is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:551 tests/test_requests.py:551: PytestDeprecationWarning: test_requests_file_upload_additional_headers is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:615 tests/test_requests.py:615: PytestDeprecationWarning: test_requests_binary_file_upload is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:688 tests/test_requests.py:688: PytestDeprecationWarning: test_requests_file_upload_two_files is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:788 tests/test_requests.py:788: PytestDeprecationWarning: test_requests_file_upload_list_of_two_files is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests.py:879 tests/test_requests.py:879: PytestDeprecationWarning: test_requests_error_fetching_schema is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:49 tests/test_requests_batch.py:49: PytestDeprecationWarning: test_requests_query is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:92 tests/test_requests_batch.py:92: PytestDeprecationWarning: test_requests_query_auto_batch_enabled is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:140 tests/test_requests_batch.py:140: PytestDeprecationWarning: test_requests_query_auto_batch_enabled_two_requests is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:200 tests/test_requests_batch.py:200: PytestDeprecationWarning: test_requests_cookies is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:239 tests/test_requests_batch.py:239: PytestDeprecationWarning: test_requests_error_code_401 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:274 tests/test_requests_batch.py:274: PytestDeprecationWarning: test_requests_error_code_401_auto_batch_enabled is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:314 tests/test_requests_batch.py:314: PytestDeprecationWarning: test_requests_error_code_429 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:363 tests/test_requests_batch.py:363: PytestDeprecationWarning: test_requests_error_code_500 is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:395 tests/test_requests_batch.py:395: PytestDeprecationWarning: test_requests_error_code is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:437 tests/test_requests_batch.py:437: PytestDeprecationWarning: test_requests_invalid_protocol[{}] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:437 tests/test_requests_batch.py:437: PytestDeprecationWarning: test_requests_invalid_protocol[qlsjfqsdlkj] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:437 tests/test_requests_batch.py:437: PytestDeprecationWarning: test_requests_invalid_protocol[{"not_data_or_errors": 35}] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:437 tests/test_requests_batch.py:437: PytestDeprecationWarning: test_requests_invalid_protocol[[{}]] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:437 tests/test_requests_batch.py:437: PytestDeprecationWarning: test_requests_invalid_protocol[[qlsjfqsdlkj]] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:437 tests/test_requests_batch.py:437: PytestDeprecationWarning: test_requests_invalid_protocol[[{"not_data_or_errors": 35}]] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:437 tests/test_requests_batch.py:437: PytestDeprecationWarning: test_requests_invalid_protocol[[]] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:437 tests/test_requests_batch.py:437: PytestDeprecationWarning: test_requests_invalid_protocol[[1]] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:468 tests/test_requests_batch.py:468: PytestDeprecationWarning: test_requests_cannot_execute_if_not_connected is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_requests_batch.py:509 tests/test_requests_batch.py:509: PytestDeprecationWarning: test_requests_query_with_extensions is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.aiohttp tests/test_websocket_exceptions.py:41 tests/test_websocket_exceptions.py:41: PytestDeprecationWarning: test_websocket_invalid_query[\n query getContinents {\n continents {\n code\n bloh\n }\n }\n-server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:80 tests/test_websocket_exceptions.py:80: PytestDeprecationWarning: test_websocket_invalid_subscription[\n subscription getContinents {\n continents {\n code\n bloh\n }\n }\n-server_invalid_subscription] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:112 tests/test_websocket_exceptions.py:112: PytestDeprecationWarning: test_websocket_server_does_not_send_ack[\n query getContinents {\n continents {\n code\n bloh\n }\n }\n-server_no_ack] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:135 tests/test_websocket_exceptions.py:135: PytestDeprecationWarning: test_websocket_sending_invalid_data[\n query getContinents {\n continents {\n code\n bloh\n }\n }\n-server_connection_error] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:163 tests/test_websocket_exceptions.py:163: PytestDeprecationWarning: test_websocket_sending_invalid_payload[\n query getContinents {\n continents {\n code\n bloh\n }\n }\n-server_invalid_payload] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:220 tests/test_websocket_exceptions.py:220: PytestDeprecationWarning: test_websocket_transport_protocol_errors[server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:220 tests/test_websocket_exceptions.py:220: PytestDeprecationWarning: test_websocket_transport_protocol_errors[server1] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:220 tests/test_websocket_exceptions.py:220: PytestDeprecationWarning: test_websocket_transport_protocol_errors[server2] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:220 tests/test_websocket_exceptions.py:220: PytestDeprecationWarning: test_websocket_transport_protocol_errors[server3] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:220 tests/test_websocket_exceptions.py:220: PytestDeprecationWarning: test_websocket_transport_protocol_errors[server4] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:220 tests/test_websocket_exceptions.py:220: PytestDeprecationWarning: test_websocket_transport_protocol_errors[server5] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:220 tests/test_websocket_exceptions.py:220: PytestDeprecationWarning: test_websocket_transport_protocol_errors[server6] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:220 tests/test_websocket_exceptions.py:220: PytestDeprecationWarning: test_websocket_transport_protocol_errors[server7] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:220 tests/test_websocket_exceptions.py:220: PytestDeprecationWarning: test_websocket_transport_protocol_errors[server8] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:220 tests/test_websocket_exceptions.py:220: PytestDeprecationWarning: test_websocket_transport_protocol_errors[server9] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:253 tests/test_websocket_exceptions.py:253: PytestDeprecationWarning: test_websocket_server_does_not_ack[server_without_ack] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:272 tests/test_websocket_exceptions.py:272: PytestDeprecationWarning: test_websocket_server_closing_directly[server_closing_directly] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:293 tests/test_websocket_exceptions.py:293: PytestDeprecationWarning: test_websocket_server_closing_after_ack[server_closing_after_ack] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:322 tests/test_websocket_exceptions.py:322: PytestDeprecationWarning: test_websocket_server_sending_invalid_query_errors[server_sending_invalid_query_errors] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:337 tests/test_websocket_exceptions.py:337: PytestDeprecationWarning: test_websocket_non_regression_bug_105[server_sending_invalid_query_errors] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_exceptions.py:366 tests/test_websocket_exceptions.py:366: PytestDeprecationWarning: test_websocket_using_cli_invalid_query[server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:52 tests/test_websocket_query.py:52: PytestDeprecationWarning: test_websocket_starting_client_in_context_manager[server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:92 tests/test_websocket_query.py:92: PytestDeprecationWarning: test_websocket_using_ssl_connection[ws_ssl_server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:132 tests/test_websocket_query.py:132: PytestDeprecationWarning: test_websocket_simple_query[\n query getContinents {\n continents {\n code\n name\n }\n }\n-server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:152 tests/test_websocket_query.py:152: PytestDeprecationWarning: test_websocket_two_queries_in_series[\n query getContinents {\n continents {\n code\n name\n }\n }\n-server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:188 tests/test_websocket_query.py:188: PytestDeprecationWarning: test_websocket_two_queries_in_parallel[\n query getContinents {\n continents {\n code\n name\n }\n }\n-server1_two_queries_in_parallel] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:233 tests/test_websocket_query.py:233: PytestDeprecationWarning: test_websocket_server_closing_after_first_query[\n query getContinents {\n continents {\n code\n name\n }\n }\n-server_closing_while_we_are_doing_something_else] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:265 tests/test_websocket_query.py:265: PytestDeprecationWarning: test_websocket_ignore_invalid_id[\n query getContinents {\n continents {\n code\n name\n }\n }\n-server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:301 tests/test_websocket_query.py:301: PytestDeprecationWarning: test_websocket_multiple_connections_in_series[server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:324 tests/test_websocket_query.py:324: PytestDeprecationWarning: test_websocket_multiple_connections_in_parallel[server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:343 tests/test_websocket_query.py:343: PytestDeprecationWarning: test_websocket_trying_to_connect_to_already_connected_transport[server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:388 tests/test_websocket_query.py:388: PytestDeprecationWarning: test_websocket_connect_success_with_authentication_in_connection_init[\n query getContinents {\n continents {\n code\n name\n }\n }\n-server_with_authentication_in_connection_init_payload] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:422 tests/test_websocket_query.py:422: PytestDeprecationWarning: test_websocket_connect_failed_with_authentication_in_connection_init[init_payload0-\n query getContinents {\n continents {\n code\n name\n }\n }\n-server_with_authentication_in_connection_init_payload] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:422 tests/test_websocket_query.py:422: PytestDeprecationWarning: test_websocket_connect_failed_with_authentication_in_connection_init[init_payload1-\n query getContinents {\n continents {\n code\n name\n }\n }\n-server_with_authentication_in_connection_init_payload] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:487 tests/test_websocket_query.py:487: PytestDeprecationWarning: test_websocket_add_extra_parameters_to_connect[server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:516 tests/test_websocket_query.py:516: PytestDeprecationWarning: test_websocket_non_regression_bug_108[\n query getContinents {\n continents {\n code\n name\n }\n }\n-server_sending_keep_alive_before_connection_ack] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:543 tests/test_websocket_query.py:543: PytestDeprecationWarning: test_websocket_using_cli[server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_query.py:593 tests/test_websocket_query.py:593: PytestDeprecationWarning: test_websocket_simple_query_with_extensions[\n query getContinents {\n continents {\n code\n name\n }\n }\n-server0] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_subscription.py:126 tests/test_websocket_subscription.py:126: PytestDeprecationWarning: test_websocket_subscription[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_subscription.py:147 tests/test_websocket_subscription.py:147: PytestDeprecationWarning: test_websocket_subscription_get_execution_result[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_subscription.py:172 tests/test_websocket_subscription.py:172: PytestDeprecationWarning: test_websocket_subscription_break[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_subscription.py:202 tests/test_websocket_subscription.py:202: PytestDeprecationWarning: test_websocket_subscription_task_cancel[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_subscription.py:241 tests/test_websocket_subscription.py:241: PytestDeprecationWarning: test_websocket_subscription_close_transport[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_subscription.py:304 tests/test_websocket_subscription.py:304: PytestDeprecationWarning: test_websocket_subscription_server_connection_closed[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown_close_connection_in_middle] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_subscription.py:331 tests/test_websocket_subscription.py:331: PytestDeprecationWarning: test_websocket_subscription_slow_consumer[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_subscription.py:356 tests/test_websocket_subscription.py:356: PytestDeprecationWarning: test_websocket_subscription_with_operation_name[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_subscription.py:387 tests/test_websocket_subscription.py:387: PytestDeprecationWarning: test_websocket_subscription_with_keepalive[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_subscription.py:410 tests/test_websocket_subscription.py:410: PytestDeprecationWarning: test_websocket_subscription_with_keepalive_with_timeout_ok[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_subscription.py:440 tests/test_websocket_subscription.py:440: PytestDeprecationWarning: test_websocket_subscription_with_keepalive_with_timeout_nok[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio tests/test_websocket_subscription.py:616 tests/test_websocket_subscription.py:616: PytestDeprecationWarning: test_websocket_subscription_running_in_thread[\n subscription {{\n countdown (count: {count}) {{\n number\n }}\n }}\n-server_countdown] is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead. @pytest.mark.asyncio -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ ERROR gql-checker/tests/test_flake8_linter.py ERROR gql-checker/tests/test_pylama_linter.py !!!!!!!!!!!!!!!!!!! Interrupted: 2 errors during collection !!!!!!!!!!!!!!!!!!!! ======================= 300 warnings, 2 errors in 1.41s ======================== ```
leszekhanusz commented 1 month ago

Did you try to install the dev dependencies with python -m pip install -e.[dev] ?

leszekhanusz commented 1 month ago

Hmm, with a second look it seems that the problem is because you are running pytest on the main folder which seems to find tests which are obsolete since a long time ago. If you run pytest tests it should work.

I should delete that old folder.

kloczek commented 1 month ago

Did you try to install the dev dependencies with python -m pip install -e.[dev] ?

After add to --ignore list those two files I've been able to add more modules in build env but none of those dependencies but none of the missing modules been able to fix issue with missing file.

kloczek commented 1 month ago

Hmm, with a second look it seems that the problem is because you are running pytest on the main folder which seems to find tests which are obsolete since a long time ago. If you run pytest tests it should work.

it shuld be working that way.

I should delete that old folder.

Alternatively it is possible to add tests/ to pytest setting testpaths but if it is older version of the test suite probably better would be remove that.

kloczek commented 1 month ago

After add more modules to build env

```console Package Version ----------------------------- ----------- aiofiles 24.1.0 aiohappyeyeballs 2.4.3 aiohttp 3.10.10 aiosignal 1.3.1 alabaster 0.7.16 anyio 4.4.0 async-timeout 4.0.3 attrs 24.2.0 babel 2.16.0 backoff 2.2.1 botocore 1.35.49 build 1.2.2.post1 certifi 2024.8.30 charset-normalizer 3.4.0 defusedxml 0.7.1 distro 1.9.0 docutils 0.21.2 exceptiongroup 1.1.3 frozenlist 1.4.1 graphql-core 3.2.5 h11 0.14.0 httpcore 1.0.6 httpx 0.27.2 imagesize 1.4.1 importlib_metadata 8.5.0 iniconfig 2.0.0 installer 0.7.0 Jinja2 3.1.4 jmespath 1.0.1 MarkupSafe 3.0.2 multidict 6.1.0 packaging 24.0 parse 1.20.2 pluggy 1.5.0 Pygments 2.18.0 pyproject_hooks 1.2.0 pytest 8.2.2 pytest-asyncio 0.23.8 pytest-console-scripts 1.4.1 python-dateutil 2.9.0.post0 PyYAML 6.0.2 requests 2.32.3 requests-toolbelt 1.0.0 setuptools 75.1.0 sniffio 1.3.0 snowballstemmer 2.2.0 Sphinx 8.1.3 sphinx-argparse 0.4.0 sphinx_rtd_theme 2.0.0 sphinxcontrib-applehelp 2.0.0 sphinxcontrib-devhelp 1.0.6 sphinxcontrib-htmlhelp 2.1.0 sphinxcontrib-jquery 4.1 sphinxcontrib-jsmath 1.0.1 sphinxcontrib-qthelp 2.0.0 sphinxcontrib-serializinghtml 2.0.0 tokenize_rt 6.1.0 tomli 2.0.1 typing_extensions 4.12.2 urllib3 2.2.2 vcrpy 6.0.2 websockets 13.1 wheel 0.44.0 wrapt 1.16.0 yarl 1.12.1 zipp 3.20.2 ```

I still have some filing units

Here is pytest output: ```console + PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-gql-3.5.0-2.fc37.x86_64/usr/lib64/python3.10/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-gql-3.5.0-2.fc37.x86_64/usr/lib/python3.10/site-packages + /usr/bin/pytest -ra -m 'not network' --ignore gql-checker/tests/test_flake8_linter.py --ignore gql-checker/tests/test_pylama_linter.py ==================================================================================== test session starts ==================================================================================== platform linux -- Python 3.10.14, pytest-8.2.2, pluggy-1.5.0 rootdir: /home/tkloczko/rpmbuild/BUILD/gql-3.5.0 configfile: setup.cfg plugins: anyio-4.4.0, asyncio-0.23.8, console-scripts-1.4.1 asyncio: mode=strict collected 567 items tests/custom_scalars/test_datetime.py ...... [ 1%] tests/custom_scalars/test_enum_colors.py ............ [ 3%] tests/custom_scalars/test_json.py ...... [ 4%] tests/custom_scalars/test_money.py ............................ [ 9%] tests/custom_scalars/test_parse_results.py . [ 9%] tests/nested_input/test_nested_input.py ... [ 9%] tests/regressions/issue_447_dsl_missing_directives/test_dsl_directives.py . [ 10%] tests/starwars/test_dsl.py ........................................................FF... [ 20%] tests/starwars/test_introspection.py . [ 20%] tests/starwars/test_parse_results.py ......... [ 22%] tests/starwars/test_query.py ................. [ 25%] tests/starwars/test_subscription.py ... [ 26%] tests/starwars/test_validation.py ................................................... [ 35%] tests/test_aiohttp.py ........................................... [ 42%] tests/test_aiohttp_online.py sss [ 43%] tests/test_appsync_auth.py ......... [ 44%] tests/test_appsync_http.py . [ 44%] tests/test_appsync_websockets.py .......... [ 46%] tests/test_async_client_validation.py .......F.. [ 48%] tests/test_cli.py .................................. [ 54%] tests/test_client.py ....sss... [ 56%] tests/test_graphql_request.py . [ 56%] tests/test_graphqlws_exceptions.py .................. [ 59%] tests/test_graphqlws_subscription.py .................. [ 62%] tests/test_http_async_sync.py ssssssss [ 64%] tests/test_httpx.py ................... [ 67%] tests/test_httpx_async.py ...................................... [ 74%] tests/test_httpx_online.py sss [ 74%] tests/test_phoenix_channel_exceptions.py ........................... [ 79%] tests/test_phoenix_channel_query.py .. [ 79%] tests/test_phoenix_channel_subscription.py .... [ 80%] tests/test_requests.py ................... [ 83%] tests/test_requests_batch.py ...................sss [ 87%] tests/test_transport.py FFFF [ 88%] tests/test_transport_batch.py FFFF [ 89%] tests/test_websocket_exceptions.py ..................... [ 92%] tests/test_websocket_online.py ssssss [ 94%] tests/test_websocket_query.py .................. [ 97%] tests/test_websocket_subscription.py ................ [100%] ========================================================================================= FAILURES ========================================================================================== __________________________________________________________________________ test_get_introspection_query_ast[True] ___________________________________________________________________________ option = True @pytest.mark.parametrize("option", [True, False]) def test_get_introspection_query_ast(option): introspection_query = get_introspection_query( descriptions=option, specified_by_url=option, directive_is_repeatable=option, schema_description=option, ) dsl_introspection_query = get_introspection_query_ast( descriptions=option, specified_by_url=option, directive_is_repeatable=option, schema_description=option, ) > assert print_ast(gql(introspection_query)) == print_ast(dsl_introspection_query) E AssertionError: assert 'query Intros... }\n }\n}' == 'query Intros... }\n }\n}' E E Skipping 1289 identical leading characters in diff, use -v to show E + ofType { E + kind E + name E + ofType { E + kind... E E ...Full output truncated (13 lines hidden), use '-vv' to show tests/starwars/test_dsl.py:995: AssertionError ----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------ Creating Creating >) Creating Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (,) in Added fields: (, , ) in Creating >) Creating Added fields: (,) in Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (,) in Added fields: (, ) in Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (, ) in Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Creating >) Creating Added arguments {'includeDeprecated': True} in field ) Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (, , , ) in Creating >) Creating Added arguments {'includeDeprecated': True} in field ) Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (, ) in Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Added fields: (, , , , ) in Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (, ) in Creating >) Creating Creating >) Creating Added fields: (, ) in Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (, ) in Added fields: (,) in Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (, ) in Added fields: (,) in Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (, ) in Added fields: (,) in Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (, ) in Added fields: (,) in Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (, ) in Added fields: (,) in Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (, ) in Added fields: (,) in Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (, ) in Added fields: (,) in Added fields: (,) in ------------------------------------------------------------------------------------- Captured log call ------------------------------------------------------------------------------------- DEBUG gql.dsl:dsl.py:1016 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:1016 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:1016 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:376 Added fields: (, , ) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:869 Added arguments {'includeDeprecated': True} in field ) DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, , , ) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:869 Added arguments {'includeDeprecated': True} in field ) DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:376 Added fields: (, , , , ) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in __________________________________________________________________________ test_get_introspection_query_ast[False] __________________________________________________________________________ option = False @pytest.mark.parametrize("option", [True, False]) def test_get_introspection_query_ast(option): introspection_query = get_introspection_query( descriptions=option, specified_by_url=option, directive_is_repeatable=option, schema_description=option, ) dsl_introspection_query = get_introspection_query_ast( descriptions=option, specified_by_url=option, directive_is_repeatable=option, schema_description=option, ) > assert print_ast(gql(introspection_query)) == print_ast(dsl_introspection_query) E AssertionError: assert 'query Intros... }\n }\n}' == 'query Intros... }\n }\n}' E E Skipping 1159 identical leading characters in diff, use -v to show E + ofType { E + kind E + name E + ofType { E + kind... E E ...Full output truncated (13 lines hidden), use '-vv' to show tests/starwars/test_dsl.py:995: AssertionError ----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------ Creating Creating >) Creating Creating >) Creating Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (,) in Added fields: (, , ) in Creating >) Creating Added fields: (,) in Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (,) in Added fields: (, ) in Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (, ) in Creating >) Creating Added arguments {'includeDeprecated': True} in field ) Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (, , , ) in Creating >) Creating Added arguments {'includeDeprecated': True} in field ) Creating >) Creating Added fields: (,) in Creating >) Creating Creating >) Creating Added fields: (, ) in Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Added fields: (, , , , ) in Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (,) in Creating >) Creating Added fields: (, ) in Creating >) Creating Creating >) Creating Added fields: (, ) in Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (, ) in Added fields: (,) in Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (, ) in Added fields: (,) in Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (, ) in Added fields: (,) in Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (, ) in Added fields: (,) in Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (, ) in Added fields: (,) in Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (, ) in Added fields: (,) in Creating >) Creating Creating >) Creating Creating >) Creating Added fields: (, ) in Added fields: (,) in Added fields: (,) in ------------------------------------------------------------------------------------- Captured log call ------------------------------------------------------------------------------------- DEBUG gql.dsl:dsl.py:1016 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:1016 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:1016 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:376 Added fields: (, , ) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:869 Added arguments {'includeDeprecated': True} in field ) DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, , , ) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:869 Added arguments {'includeDeprecated': True} in field ) DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:376 Added fields: (, , , , ) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:639 Creating >) DEBUG gql.dsl:dsl.py:830 Creating DEBUG gql.dsl:dsl.py:376 Added fields: (, ) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in DEBUG gql.dsl:dsl.py:376 Added fields: (,) in ________________________________________________________ test_async_client_validation_fetch_schema_from_server_valid_query[server0] _________________________________________________________ event_loop = <_UnixSelectorEventLoop running=False closed=False debug=False> client_and_server = (, ) @pytest.mark.websockets @pytest.mark.asyncio @pytest.mark.parametrize("server", [hero_server_answers], indirect=True) async def test_async_client_validation_fetch_schema_from_server_valid_query( event_loop, client_and_server ): session, server = client_and_server client = session.client # No schema in the client at the beginning assert client.introspection is None assert client.schema is None # Fetch schema from server await session.fetch_schema() # Check that the async client correctly recreated the schema > assert client.introspection == StarWarsIntrospection E AssertionError: assert {'__schema': ...ption'}, ...}} == {'__schema': ...ption'}, ...}} E E Differing items: E {'__schema': {'directives': [{'args': [{'defaultValue': None, 'description': 'Included when true.', 'name': 'if', 'typ...utationType E E ...Full output truncated (2 lines hidden), use '-vv' to show tests/test_async_client_validation.py:208: AssertionError ----------------------------------------------------------------------------------- Captured stdout setup ----------------------------------------------------------------------------------- Starting server Server started on port 42051 ----------------------------------------------------------------------------------- Captured stderr setup ----------------------------------------------------------------------------------- connect: starting backend subprotocol returned: 'graphql-ws' >>> {"type": "connection_init", "payload": {}} <<< {"type":"connection_ack"} connect: done ------------------------------------------------------------------------------------ Captured log setup ------------------------------------------------------------------------------------- DEBUG gql.transport.websockets:websockets_base.py:460 connect: starting DEBUG gql.transport.websockets:websockets.py:495 backend subprotocol returned: 'graphql-ws' INFO gql.transport.websockets:websockets_base.py:218 >>> {"type": "connection_init", "payload": {}} INFO gql.transport.websockets:websockets_base.py:240 <<< {"type":"connection_ack"} DEBUG gql.transport.websockets:websockets_base.py:535 connect: done ----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------ >>> {"id": "1", "type": "start", "payload": {"query": "query IntrospectionQuery {\n __schema {\n queryType {\n name\n }\n mutationType {\n name\n }\n subscriptionType {\n name\n }\n types {\n ...FullType\n }\n directives {\n name\n description\n locations\n args {\n ...InputValue\n }\n }\n }\n}\n\nfragment FullType on __Type {\n kind\n name\n description\n fields(includeDeprecated: true) {\n name\n description\n args {\n ...InputValue\n }\n type {\n ...TypeRef\n }\n isDeprecated\n deprecationReason\n }\n inputFields {\n ...InputValue\n }\n interfaces {\n ...TypeRef\n }\n enumValues(includeDeprecated: true) {\n name\n description\n isDeprecated\n deprecationReason\n }\n possibleTypes {\n ...TypeRef\n }\n}\n\nfragment InputValue on __InputValue {\n name\n description\n type {\n ...TypeRef\n }\n defaultValue\n}\n\nfragment TypeRef on __Type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }\n }\n }\n}"}} Server received: {"id": "1", "type": "start", "payload": {"query": "query IntrospectionQuery {\n __schema {\n queryType {\n name\n }\n mutationType {\n name\n }\n subscriptionType {\n name\n }\n types {\n ...FullType\n }\n directives {\n name\n description\n locations\n args {\n ...InputValue\n }\n }\n }\n}\n\nfragment FullType on __Type {\n kind\n name\n description\n fields(includeDeprecated: true) {\n name\n description\n args {\n ...InputValue\n }\n type {\n ...TypeRef\n }\n isDeprecated\n deprecationReason\n }\n inputFields {\n ...InputValue\n }\n interfaces {\n ...TypeRef\n }\n enumValues(includeDeprecated: true) {\n name\n description\n isDeprecated\n deprecationReason\n }\n possibleTypes {\n ...TypeRef\n }\n}\n\nfragment InputValue on __InputValue {\n name\n description\n type {\n ...TypeRef\n }\n defaultValue\n}\n\nfragment TypeRef on __Type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }\n }\n }\n}"}} <<< {"type":"data","id":"1","payload":{"data":{"__schema": {"queryType": {"name": "Query"}, "mutationType": {"name": "Mutation"}, "subscriptionType": {"name": "Subscription"}, "types": [{"kind": "OBJECT", "name": "Human", "description": "A humanoid creature in the Star Wars universe.", "fields": [{"name": "id", "description": "The id of the human.", "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "name", "description": "The name of the human.", "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "friends", "description": "The friends of the human, or an empty list if they have none.", "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "INTERFACE", "name": "Character", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "appearsIn", "description": "Which movies they appear in.", "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "ENUM", "name": "Episode", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "homePlanet", "description": "The home planet of the human, or null if unknown.", "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [{"kind": "INTERFACE", "name": "Character", "ofType": null}], "enumValues": null, "possibleTypes": null}, {"kind": "INTERFACE", "name": "Character", "description": "A character in the Star Wars Trilogy", "fields": [{"name": "id", "description": "The id of the character.", "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "name", "description": "The name of the character.", "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "friends", "description": "The friends of the character, or an empty list if they have none.", "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "INTERFACE", "name": "Character", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "appearsIn", "description": "Which movies they appear in.", "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "ENUM", "name": "Episode", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": [{"kind": "OBJECT", "name": "Human", "ofType": null}, {"kind": "OBJECT", "name": "Droid", "ofType": null}]}, {"kind": "SCALAR", "name": "String", "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null}, {"kind": "ENUM", "name": "Episode", "description": "One of the films in the Star Wars Trilogy", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [{"name": "NEWHOPE", "description": "Released in 1977.", "isDeprecated": false, "deprecationReason": null}, {"name": "EMPIRE", "description": "Released in 1980.", "isDeprecated": false, "deprecationReason": null}, {"name": "JEDI", "description": "Released in 1983.", "isDeprecated": false, "deprecationReason": null}], "possibleTypes": null}, {"kind": "OBJECT", "name": "Droid", "description": "A mechanical creature in the Star Wars universe.", "fields": [{"name": "id", "description": "The id of the droid.", "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "name", "description": "The name of the droid.", "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "friends", "description": "The friends of the droid, or an empty list if they have none.", "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "INTERFACE", "name": "Character", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "appearsIn", "description": "Which movies they appear in.", "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "ENUM", "name": "Episode", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "primaryFunction", "description": "The primary function of the droid.", "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [{"kind": "INTERFACE", "name": "Character", "ofType": null}], "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "Review", "description": "Represents a review for a movie", "fields": [{"name": "episode", "description": "The movie", "args": [], "type": {"kind": "ENUM", "name": "Episode", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "stars", "description": "The number of stars this review gave, 1-5", "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "Int", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "commentary", "description": "Comment about the movie", "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "SCALAR", "name": "Int", "description": "The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null}, {"kind": "INPUT_OBJECT", "name": "ReviewInput", "description": "The input object sent when someone is creating a new review", "fields": null, "inputFields": [{"name": "stars", "description": "0-5 stars", "type": {"kind": "SCALAR", "name": "Int", "ofType": null}, "defaultValue": null}, {"name": "commentary", "description": "Comment about the movie, optional", "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "defaultValue": null}], "interfaces": null, "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "Query", "description": null, "fields": [{"name": "hero", "description": null, "args": [{"name": "episode", "description": "If omitted, returns the hero of the whole saga. If provided, returns the hero of that particular episode.", "type": {"kind": "ENUM", "name": "Episode", "ofType": null}, "defaultValue": null}], "type": {"kind": "INTERFACE", "name": "Character", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "human", "description": null, "args": [{"name": "id", "description": "id of the human", "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "defaultValue": null}], "type": {"kind": "OBJECT", "name": "Human", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "droid", "description": null, "args": [{"name": "id", "description": "id of the droid", "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "defaultValue": null}], "type": {"kind": "OBJECT", "name": "Droid", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "characters", "description": null, "args": [{"name": "ids", "description": "list of character ids", "type": {"kind": "LIST", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "defaultValue": null}], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "INTERFACE", "name": "Character", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "Mutation", "description": "The mutation type, represents all updates we can make to our data", "fields": [{"name": "createReview", "description": null, "args": [{"name": "episode", "description": "Episode to create review", "type": {"kind": "ENUM", "name": "Episode", "ofType": null}, "defaultValue": null}, {"name": "review", "description": "set alive status", "type": {"kind": "INPUT_OBJECT", "name": "ReviewInput", "ofType": null}, "defaultValue": null}], "type": {"kind": "OBJECT", "name": "Review", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "Subscription", "description": null, "fields": [{"name": "reviewAdded", "description": null, "args": [{"name": "episode", "description": "Episode to review", "type": {"kind": "ENUM", "name": "Episode", "ofType": null}, "defaultValue": null}], "type": {"kind": "OBJECT", "name": "Review", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "SCALAR", "name": "Boolean", "description": "The `Boolean` scalar type represents `true` or `false`.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "__Schema", "description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.", "fields": [{"name": "description", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "types", "description": "A list of all types supported by this server.", "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Type", "ofType": null}}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "queryType", "description": "The type that query operations will be rooted at.", "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Type", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "mutationType", "description": "If this server supports mutation, the type that mutation operations will be rooted at.", "args": [], "type": {"kind": "OBJECT", "name": "__Type", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "subscriptionType", "description": "If this server support subscription, the type that subscription operations will be rooted at.", "args": [], "type": {"kind": "OBJECT", "name": "__Type", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "directives", "description": "A list of all directives supported by this server.", "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Directive", "ofType": null}}}}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "__Type", "description": "The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.", "fields": [{"name": "kind", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "ENUM", "name": "__TypeKind", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "name", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "description", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "specifiedByURL", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "fields", "description": null, "args": [{"name": "includeDeprecated", "description": null, "type": {"kind": "SCALAR", "name": "Boolean", "ofType": null}, "defaultValue": "false"}], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Field", "ofType": null}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "interfaces", "description": null, "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Type", "ofType": null}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "possibleTypes", "description": null, "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Type", "ofType": null}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "enumValues", "description": null, "args": [{"name": "includeDeprecated", "description": null, "type": {"kind": "SCALAR", "name": "Boolean", "ofType": null}, "defaultValue": "false"}], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__EnumValue", "ofType": null}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "inputFields", "description": null, "args": [{"name": "includeDeprecated", "description": null, "type": {"kind": "SCALAR", "name": "Boolean", "ofType": null}, "defaultValue": "false"}], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__InputValue", "ofType": null}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "ofType", "description": null, "args": [], "type": {"kind": "OBJECT", "name": "__Type", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "ENUM", "name": "__TypeKind", "description": "An enum describing what kind of type a given `__Type` is.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [{"name": "SCALAR", "description": "Indicates this type is a scalar.", "isDeprecated": false, "deprecationReason": null}, {"name": "OBJECT", "description": "Indicates this type is an object. `fields` and `interfaces` are valid fields.", "isDeprecated": false, "deprecationReason": null}, {"name": "INTERFACE", "description": "Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields.", "isDeprecated": false, "deprecationReason": null}, {"name": "UNION", "description": "Indicates this type is a union. `possibleTypes` is a valid field.", "isDeprecated": false, "deprecationReason": null}, {"name": "ENUM", "description": "Indicates this type is an enum. `enumValues` is a valid field.", "isDeprecated": false, "deprecationReason": null}, {"name": "INPUT_OBJECT", "description": "Indicates this type is an input object. `inputFields` is a valid field.", "isDeprecated": false, "deprecationReason": null}, {"name": "LIST", "description": "Indicates this type is a list. `ofType` is a valid field.", "isDeprecated": false, "deprecationReason": null}, {"name": "NON_NULL", "description": "Indicates this type is a non-null. `ofType` is a valid field.", "isDeprecated": false, "deprecationReason": null}], "possibleTypes": null}, {"kind": "OBJECT", "name": "__Field", "description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.", "fields": [{"name": "name", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "description", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "args", "description": null, "args": [{"name": "includeDeprecated", "description": null, "type": {"kind": "SCALAR", "name": "Boolean", "ofType": null}, "defaultValue": "false"}], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__InputValue", "ofType": null}}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "type", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Type", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "isDeprecated", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "Boolean", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "deprecationReason", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "__InputValue", "description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.", "fields": [{"name": "name", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "description", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "type", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Type", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "defaultValue", "description": "A GraphQL-formatted string representing the default value for this input value.", "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "isDeprecated", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "Boolean", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "deprecationReason", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "__EnumValue", "description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.", "fields": [{"name": "name", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "description", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "isDeprecated", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "Boolean", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "deprecationReason", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "__Directive", "description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.", "fields": [{"name": "name", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "description", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "isRepeatable", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "Boolean", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "locations", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "ENUM", "name": "__DirectiveLocation", "ofType": null}}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "args", "description": null, "args": [{"name": "includeDeprecated", "description": null, "type": {"kind": "SCALAR", "name": "Boolean", "ofType": null}, "defaultValue": "false"}], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__InputValue", "ofType": null}}}}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "ENUM", "name": "__DirectiveLocation", "description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [{"name": "QUERY", "description": "Location adjacent to a query operation.", "isDeprecated": false, "deprecationReason": null}, {"name": "MUTATION", "description": "Location adjacent to a mutation operation.", "isDeprecated": false, "deprecationReason": null}, {"name": "SUBSCRIPTION", "description": "Location adjacent to a subscription operation.", "isDeprecated": false, "deprecationReason": null}, {"name": "FIELD", "description": "Location adjacent to a field.", "isDeprecated": false, "deprecationReason": null}, {"name": "FRAGMENT_DEFINITION", "description": "Location adjacent to a fragment definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "FRAGMENT_SPREAD", "description": "Location adjacent to a fragment spread.", "isDeprecated": false, "deprecationReason": null}, {"name": "INLINE_FRAGMENT", "description": "Location adjacent to an inline fragment.", "isDeprecated": false, "deprecationReason": null}, {"name": "VARIABLE_DEFINITION", "description": "Location adjacent to a variable definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "SCHEMA", "description": "Location adjacent to a schema definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "SCALAR", "description": "Location adjacent to a scalar definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "OBJECT", "description": "Location adjacent to an object type definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "FIELD_DEFINITION", "description": "Location adjacent to a field definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "ARGUMENT_DEFINITION", "description": "Location adjacent to an argument definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "INTERFACE", "description": "Location adjacent to an interface definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "UNION", "description": "Location adjacent to a union definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "ENUM", "description": "Location adjacent to an enum definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "ENUM_VALUE", "description": "Location adjacent to an enum value definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "INPUT_OBJECT", "description": "Location adjacent to an input object type definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "INPUT_FIELD_DEFINITION", "description": "Location adjacent to an input object field definition.", "isDeprecated": false, "deprecationReason": null}], "possibleTypes": null}], "directives": [{"name": "include", "description": "Directs the executor to include this field or fragment only when the `if` argument is true.", "locations": ["FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT"], "args": [{"name": "if", "description": "Included when true.", "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "Boolean", "ofType": null}}, "defaultValue": null}]}, {"name": "skip", "description": "Directs the executor to skip this field or fragment when the `if` argument is true.", "locations": ["FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT"], "args": [{"name": "if", "description": "Skipped when true.", "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "Boolean", "ofType": null}}, "defaultValue": null}]}, {"name": "deprecated", "description": "Marks an element of a GraphQL schema as no longer supported.", "locations": ["FIELD_DEFINITION", "ARGUMENT_DEFINITION", "INPUT_FIELD_DEFINITION", "ENUM_VALUE"], "args": [{"name": "reason", "description": "Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).", "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "defaultValue": "\"No longer supported\""}]}, {"name": "specifiedBy", "description": "Exposes a URL that specifies the behavior of this scalar.", "locations": ["SCALAR"], "args": [{"name": "url", "description": "The URL that specifies the behavior of this scalar.", "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "defaultValue": null}]}]}}}} <<< {"type":"complete","id":"1","payload":null} Exception in subscribe: GeneratorExit() In subscribe finally for query_id 1 listener 1 deleted, 0 remaining ------------------------------------------------------------------------------------- Captured log call ------------------------------------------------------------------------------------- INFO gql.transport.websockets:websockets_base.py:218 >>> {"id": "1", "type": "start", "payload": {"query": "query IntrospectionQuery {\n __schema {\n queryType {\n name\n }\n mutationType {\n name\n }\n subscriptionType {\n name\n }\n types {\n ...FullType\n }\n directives {\n name\n description\n locations\n args {\n ...InputValue\n }\n }\n }\n}\n\nfragment FullType on __Type {\n kind\n name\n description\n fields(includeDeprecated: true) {\n name\n description\n args {\n ...InputValue\n }\n type {\n ...TypeRef\n }\n isDeprecated\n deprecationReason\n }\n inputFields {\n ...InputValue\n }\n interfaces {\n ...TypeRef\n }\n enumValues(includeDeprecated: true) {\n name\n description\n isDeprecated\n deprecationReason\n }\n possibleTypes {\n ...TypeRef\n }\n}\n\nfragment InputValue on __InputValue {\n name\n description\n type {\n ...TypeRef\n }\n defaultValue\n}\n\nfragment TypeRef on __Type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }\n }\n }\n}"}} INFO gql.transport.websockets:websockets_base.py:240 <<< {"type":"data","id":"1","payload":{"data":{"__schema": {"queryType": {"name": "Query"}, "mutationType": {"name": "Mutation"}, "subscriptionType": {"name": "Subscription"}, "types": [{"kind": "OBJECT", "name": "Human", "description": "A humanoid creature in the Star Wars universe.", "fields": [{"name": "id", "description": "The id of the human.", "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "name", "description": "The name of the human.", "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "friends", "description": "The friends of the human, or an empty list if they have none.", "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "INTERFACE", "name": "Character", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "appearsIn", "description": "Which movies they appear in.", "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "ENUM", "name": "Episode", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "homePlanet", "description": "The home planet of the human, or null if unknown.", "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [{"kind": "INTERFACE", "name": "Character", "ofType": null}], "enumValues": null, "possibleTypes": null}, {"kind": "INTERFACE", "name": "Character", "description": "A character in the Star Wars Trilogy", "fields": [{"name": "id", "description": "The id of the character.", "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "name", "description": "The name of the character.", "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "friends", "description": "The friends of the character, or an empty list if they have none.", "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "INTERFACE", "name": "Character", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "appearsIn", "description": "Which movies they appear in.", "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "ENUM", "name": "Episode", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": [{"kind": "OBJECT", "name": "Human", "ofType": null}, {"kind": "OBJECT", "name": "Droid", "ofType": null}]}, {"kind": "SCALAR", "name": "String", "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null}, {"kind": "ENUM", "name": "Episode", "description": "One of the films in the Star Wars Trilogy", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [{"name": "NEWHOPE", "description": "Released in 1977.", "isDeprecated": false, "deprecationReason": null}, {"name": "EMPIRE", "description": "Released in 1980.", "isDeprecated": false, "deprecationReason": null}, {"name": "JEDI", "description": "Released in 1983.", "isDeprecated": false, "deprecationReason": null}], "possibleTypes": null}, {"kind": "OBJECT", "name": "Droid", "description": "A mechanical creature in the Star Wars universe.", "fields": [{"name": "id", "description": "The id of the droid.", "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "name", "description": "The name of the droid.", "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "friends", "description": "The friends of the droid, or an empty list if they have none.", "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "INTERFACE", "name": "Character", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "appearsIn", "description": "Which movies they appear in.", "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "ENUM", "name": "Episode", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "primaryFunction", "description": "The primary function of the droid.", "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [{"kind": "INTERFACE", "name": "Character", "ofType": null}], "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "Review", "description": "Represents a review for a movie", "fields": [{"name": "episode", "description": "The movie", "args": [], "type": {"kind": "ENUM", "name": "Episode", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "stars", "description": "The number of stars this review gave, 1-5", "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "Int", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "commentary", "description": "Comment about the movie", "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "SCALAR", "name": "Int", "description": "The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null}, {"kind": "INPUT_OBJECT", "name": "ReviewInput", "description": "The input object sent when someone is creating a new review", "fields": null, "inputFields": [{"name": "stars", "description": "0-5 stars", "type": {"kind": "SCALAR", "name": "Int", "ofType": null}, "defaultValue": null}, {"name": "commentary", "description": "Comment about the movie, optional", "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "defaultValue": null}], "interfaces": null, "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "Query", "description": null, "fields": [{"name": "hero", "description": null, "args": [{"name": "episode", "description": "If omitted, returns the hero of the whole saga. If provided, returns the hero of that particular episode.", "type": {"kind": "ENUM", "name": "Episode", "ofType": null}, "defaultValue": null}], "type": {"kind": "INTERFACE", "name": "Character", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "human", "description": null, "args": [{"name": "id", "description": "id of the human", "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "defaultValue": null}], "type": {"kind": "OBJECT", "name": "Human", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "droid", "description": null, "args": [{"name": "id", "description": "id of the droid", "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "defaultValue": null}], "type": {"kind": "OBJECT", "name": "Droid", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "characters", "description": null, "args": [{"name": "ids", "description": "list of character ids", "type": {"kind": "LIST", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "defaultValue": null}], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "INTERFACE", "name": "Character", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "Mutation", "description": "The mutation type, represents all updates we can make to our data", "fields": [{"name": "createReview", "description": null, "args": [{"name": "episode", "description": "Episode to create review", "type": {"kind": "ENUM", "name": "Episode", "ofType": null}, "defaultValue": null}, {"name": "review", "description": "set alive status", "type": {"kind": "INPUT_OBJECT", "name": "ReviewInput", "ofType": null}, "defaultValue": null}], "type": {"kind": "OBJECT", "name": "Review", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "Subscription", "description": null, "fields": [{"name": "reviewAdded", "description": null, "args": [{"name": "episode", "description": "Episode to review", "type": {"kind": "ENUM", "name": "Episode", "ofType": null}, "defaultValue": null}], "type": {"kind": "OBJECT", "name": "Review", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "SCALAR", "name": "Boolean", "description": "The `Boolean` scalar type represents `true` or `false`.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "__Schema", "description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.", "fields": [{"name": "description", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "types", "description": "A list of all types supported by this server.", "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Type", "ofType": null}}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "queryType", "description": "The type that query operations will be rooted at.", "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Type", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "mutationType", "description": "If this server supports mutation, the type that mutation operations will be rooted at.", "args": [], "type": {"kind": "OBJECT", "name": "__Type", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "subscriptionType", "description": "If this server support subscription, the type that subscription operations will be rooted at.", "args": [], "type": {"kind": "OBJECT", "name": "__Type", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "directives", "description": "A list of all directives supported by this server.", "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Directive", "ofType": null}}}}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "__Type", "description": "The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.", "fields": [{"name": "kind", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "ENUM", "name": "__TypeKind", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "name", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "description", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "specifiedByURL", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "fields", "description": null, "args": [{"name": "includeDeprecated", "description": null, "type": {"kind": "SCALAR", "name": "Boolean", "ofType": null}, "defaultValue": "false"}], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Field", "ofType": null}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "interfaces", "description": null, "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Type", "ofType": null}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "possibleTypes", "description": null, "args": [], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Type", "ofType": null}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "enumValues", "description": null, "args": [{"name": "includeDeprecated", "description": null, "type": {"kind": "SCALAR", "name": "Boolean", "ofType": null}, "defaultValue": "false"}], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__EnumValue", "ofType": null}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "inputFields", "description": null, "args": [{"name": "includeDeprecated", "description": null, "type": {"kind": "SCALAR", "name": "Boolean", "ofType": null}, "defaultValue": "false"}], "type": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__InputValue", "ofType": null}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "ofType", "description": null, "args": [], "type": {"kind": "OBJECT", "name": "__Type", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "ENUM", "name": "__TypeKind", "description": "An enum describing what kind of type a given `__Type` is.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [{"name": "SCALAR", "description": "Indicates this type is a scalar.", "isDeprecated": false, "deprecationReason": null}, {"name": "OBJECT", "description": "Indicates this type is an object. `fields` and `interfaces` are valid fields.", "isDeprecated": false, "deprecationReason": null}, {"name": "INTERFACE", "description": "Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields.", "isDeprecated": false, "deprecationReason": null}, {"name": "UNION", "description": "Indicates this type is a union. `possibleTypes` is a valid field.", "isDeprecated": false, "deprecationReason": null}, {"name": "ENUM", "description": "Indicates this type is an enum. `enumValues` is a valid field.", "isDeprecated": false, "deprecationReason": null}, {"name": "INPUT_OBJECT", "description": "Indicates this type is an input object. `inputFields` is a valid field.", "isDeprecated": false, "deprecationReason": null}, {"name": "LIST", "description": "Indicates this type is a list. `ofType` is a valid field.", "isDeprecated": false, "deprecationReason": null}, {"name": "NON_NULL", "description": "Indicates this type is a non-null. `ofType` is a valid field.", "isDeprecated": false, "deprecationReason": null}], "possibleTypes": null}, {"kind": "OBJECT", "name": "__Field", "description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.", "fields": [{"name": "name", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "description", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "args", "description": null, "args": [{"name": "includeDeprecated", "description": null, "type": {"kind": "SCALAR", "name": "Boolean", "ofType": null}, "defaultValue": "false"}], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__InputValue", "ofType": null}}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "type", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Type", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "isDeprecated", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "Boolean", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "deprecationReason", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "__InputValue", "description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.", "fields": [{"name": "name", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "description", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "type", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__Type", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "defaultValue", "description": "A GraphQL-formatted string representing the default value for this input value.", "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "isDeprecated", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "Boolean", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "deprecationReason", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "__EnumValue", "description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.", "fields": [{"name": "name", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "description", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "isDeprecated", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "Boolean", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "deprecationReason", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "OBJECT", "name": "__Directive", "description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.", "fields": [{"name": "name", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "description", "description": null, "args": [], "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "isDeprecated": false, "deprecationReason": null}, {"name": "isRepeatable", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "Boolean", "ofType": null}}, "isDeprecated": false, "deprecationReason": null}, {"name": "locations", "description": null, "args": [], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "ENUM", "name": "__DirectiveLocation", "ofType": null}}}}, "isDeprecated": false, "deprecationReason": null}, {"name": "args", "description": null, "args": [{"name": "includeDeprecated", "description": null, "type": {"kind": "SCALAR", "name": "Boolean", "ofType": null}, "defaultValue": "false"}], "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "LIST", "name": null, "ofType": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "OBJECT", "name": "__InputValue", "ofType": null}}}}, "isDeprecated": false, "deprecationReason": null}], "inputFields": null, "interfaces": [], "enumValues": null, "possibleTypes": null}, {"kind": "ENUM", "name": "__DirectiveLocation", "description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [{"name": "QUERY", "description": "Location adjacent to a query operation.", "isDeprecated": false, "deprecationReason": null}, {"name": "MUTATION", "description": "Location adjacent to a mutation operation.", "isDeprecated": false, "deprecationReason": null}, {"name": "SUBSCRIPTION", "description": "Location adjacent to a subscription operation.", "isDeprecated": false, "deprecationReason": null}, {"name": "FIELD", "description": "Location adjacent to a field.", "isDeprecated": false, "deprecationReason": null}, {"name": "FRAGMENT_DEFINITION", "description": "Location adjacent to a fragment definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "FRAGMENT_SPREAD", "description": "Location adjacent to a fragment spread.", "isDeprecated": false, "deprecationReason": null}, {"name": "INLINE_FRAGMENT", "description": "Location adjacent to an inline fragment.", "isDeprecated": false, "deprecationReason": null}, {"name": "VARIABLE_DEFINITION", "description": "Location adjacent to a variable definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "SCHEMA", "description": "Location adjacent to a schema definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "SCALAR", "description": "Location adjacent to a scalar definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "OBJECT", "description": "Location adjacent to an object type definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "FIELD_DEFINITION", "description": "Location adjacent to a field definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "ARGUMENT_DEFINITION", "description": "Location adjacent to an argument definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "INTERFACE", "description": "Location adjacent to an interface definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "UNION", "description": "Location adjacent to a union definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "ENUM", "description": "Location adjacent to an enum definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "ENUM_VALUE", "description": "Location adjacent to an enum value definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "INPUT_OBJECT", "description": "Location adjacent to an input object type definition.", "isDeprecated": false, "deprecationReason": null}, {"name": "INPUT_FIELD_DEFINITION", "description": "Location adjacent to an input object field definition.", "isDeprecated": false, "deprecationReason": null}], "possibleTypes": null}], "directives": [{"name": "include", "description": "Directs the executor to include this field or fragment only when the `if` argument is true.", "locations": ["FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT"], "args": [{"name": "if", "description": "Included when true.", "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "Boolean", "ofType": null}}, "defaultValue": null}]}, {"name": "skip", "description": "Directs the executor to skip this field or fragment when the `if` argument is true.", "locations": ["FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT"], "args": [{"name": "if", "description": "Skipped when true.", "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "Boolean", "ofType": null}}, "defaultValue": null}]}, {"name": "deprecated", "description": "Marks an element of a GraphQL schema as no longer supported.", "locations": ["FIELD_DEFINITION", "ARGUMENT_DEFINITION", "INPUT_FIELD_DEFINITION", "ENUM_VALUE"], "args": [{"name": "reason", "description": "Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).", "type": {"kind": "SCALAR", "name": "String", "ofType": null}, "defaultValue": "\"No longer supported\""}]}, {"name": "specifiedBy", "description": "Exposes a URL that specifies the behavior of this scalar.", "locations": ["SCALAR"], "args": [{"name": "url", "description": "The URL that specifies the behavior of this scalar.", "type": {"kind": "NON_NULL", "name": null, "ofType": {"kind": "SCALAR", "name": "String", "ofType": null}}, "defaultValue": null}]}]}}}} INFO gql.transport.websockets:websockets_base.py:240 <<< {"type":"complete","id":"1","payload":null} DEBUG gql.transport.websockets:websockets_base.py:404 Exception in subscribe: GeneratorExit() DEBUG gql.transport.websockets:websockets_base.py:410 In subscribe finally for query_id 1 DEBUG gql.transport.websockets:websockets_base.py:545 listener 1 deleted, 0 remaining --------------------------------------------------------------------------------- Captured stdout teardown ---------------------------------------------------------------------------------- Stopping server Server stopped --------------------------------------------------------------------------------- Captured stderr teardown ---------------------------------------------------------------------------------- close: starting _fail: starting with exception: TransportClosed('Websocket GraphQL transport closed by user') wait_close: starting _close_coro: starting _close_coro: starting clean_close >>> {"type": "connection_terminate"} _close_coro: sending exception to listeners _close_coro: close websocket connection Server received: {"type": "connection_terminate"} _fail: starting with exception: ConnectionClosedOK(Close(code=1000, reason=''), Close(code=, reason=''), False) close_task is not None in _fail. Previous exception is: TransportClosed('Websocket GraphQL transport closed by user') New exception is: ConnectionClosedOK(Close(code=1000, reason=''), Close(code=, reason=''), False) Exiting _receive_data_loop() _close_coro: websocket connection closed _close_coro: start cleanup _close_coro: exiting wait_close: done close: done ----------------------------------------------------------------------------------- Captured log teardown ----------------------------------------------------------------------------------- DEBUG gql.transport.websockets:websockets_base.py:657 close: starting DEBUG gql.transport.websockets:websockets_base.py:638 _fail: starting with exception: TransportClosed('Websocket GraphQL transport closed by user') DEBUG gql.transport.websockets:websockets_base.py:665 wait_close: starting DEBUG gql.transport.websockets:websockets_base.py:583 _close_coro: starting DEBUG gql.transport.websockets:websockets_base.py:605 _close_coro: starting clean_close INFO gql.transport.websockets:websockets_base.py:218 >>> {"type": "connection_terminate"} DEBUG gql.transport.websockets:websockets_base.py:611 _close_coro: sending exception to listeners DEBUG gql.transport.websockets:websockets_base.py:617 _close_coro: close websocket connection DEBUG gql.transport.websockets:websockets_base.py:638 _fail: starting with exception: ConnectionClosedOK(Close(code=1000, reason=''), Close(code=, reason=''), False) DEBUG gql.transport.websockets:websockets_base.py:649 close_task is not None in _fail. Previous exception is: TransportClosed('Websocket GraphQL transport closed by user') New exception is: ConnectionClosedOK(Close(code=1000, reason=''), Close(code=, reason=''), False) DEBUG gql.transport.websockets:websockets_base.py:339 Exiting _receive_data_loop() DEBUG gql.transport.websockets:websockets_base.py:621 _close_coro: websocket connection closed DEBUG gql.transport.websockets:websockets_base.py:628 _close_coro: start cleanup DEBUG gql.transport.websockets:websockets_base.py:635 _close_coro: exiting DEBUG gql.transport.websockets:websockets_base.py:669 wait_close: done DEBUG gql.transport.websockets:websockets_base.py:662 close: done ___________________________________________________________________________________ test_hero_name_query ____________________________________________________________________________________ self = def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) /usr/lib/python3.10/site-packages/urllib3/connection.py:196: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/urllib3/util/connection.py:85: in create_connection raise err _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('127.0.0.1', 8000), timeout = None, source_address = None, socket_options = [(6, 1, 1)] def create_connection( address: tuple[str, int], timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, source_address: tuple[str, int] | None = None, socket_options: _TYPE_SOCKET_OPTIONS | None = None, ) -> socket.socket: """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: raise LocationParseError(f"'{host}', label empty or too long") from None for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not _DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused /usr/lib/python3.10/site-packages/urllib3/util/connection.py:73: ConnectionRefusedError The above exception was the direct cause of the following exception: self = , method = 'POST', url = '/graphql' body = b'{"query": "query IntrospectionQuery {\\n __schema {\\n queryType {\\n name\\n }\\n mutationType {\\n ... }\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n}"}' headers = {'User-Agent': 'python-requests/2.32.3', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-aliv...GXZfkKUtWtvUROaFfDe2GBiV7yIRsqs3r2j9aYchRDXTNo3lHp72h5k', 'Content-Length': '1609', 'Content-Type': 'application/json'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None) pool_timeout = None, release_conn = False, chunked = False, body_pos = None, preload_content = False, decode_content = False, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/graphql', query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) /usr/lib/python3.10/site-packages/urllib3/connectionpool.py:789: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/urllib3/connectionpool.py:536: in _make_request response = conn.getresponse() /usr/lib/python3.10/site-packages/vcr/stubs/__init__.py:277: in getresponse self.real_connection.request( /usr/lib/python3.10/site-packages/urllib3/connection.py:398: in request self.endheaders() /usr/lib64/python3.10/http/client.py:1278: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.10/http/client.py:1038: in _send_output self.send(msg) /usr/lib64/python3.10/http/client.py:976: in send self.connect() /usr/lib/python3.10/site-packages/urllib3/connection.py:236: in connect self.sock = self._new_conn() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) except socket.gaierror as e: raise NameResolutionError(self.host, self, e) from e except SocketTimeout as e: raise ConnectTimeoutError( self, f"Connection to {self.host} timed out. (connect timeout={self.timeout})", ) from e except OSError as e: > raise NewConnectionError( self, f"Failed to establish a new connection: {e}" ) from e E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 111] Connection refused /usr/lib/python3.10/site-packages/urllib3/connection.py:211: NewConnectionError The above exception was the direct cause of the following exception: self = , request = , stream = False, timeout = Timeout(connect=None, read=None, total=None), verify = True cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) /usr/lib/python3.10/site-packages/requests/adapters.py:667: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.10/site-packages/urllib3/connectionpool.py:843: in urlopen retries = retries.increment( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = 'POST', url = '/graphql', response = None error = NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused') _pool = , _stacktrace = def increment( self, method: str | None = None, url: str | None = None, response: BaseHTTPResponse | None = None, error: Exception | None = None, _pool: ConnectionPool | None = None, _stacktrace: TracebackType | None = None, ) -> Self: """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.BaseHTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or method is None or not self._is_method_retryable(method): raise reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" response_redirect_location = response.get_redirect_location() if response_redirect_location: redirect_location = response_redirect_location status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): reason = error or ResponseError(cause) > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=8000): Max retries exceeded with url: /graphql (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) /usr/lib/python3.10/site-packages/urllib3/util/retry.py:519: MaxRetryError During handling of the above exception, another exception occurred: client = def test_hero_name_query(client): query = gql( """ { myFavoriteFilm: film(id:"RmlsbToz") { id title episodeId characters(first:5) { edges { node { name } } } } } """ ) expected = { "myFavoriteFilm": { "id": "RmlsbToz", "title": "Return of the Jedi", "episodeId": 6, "characters": { "edges": [ {"node": {"name": "Luke Skywalker"}}, {"node": {"name": "C-3PO"}}, {"node": {"name": "R2-D2"}}, {"node": {"name": "Darth Vader"}}, {"node": {"name": "Leia Organa"}}, ] }, } } with use_cassette("queries"): > result = client.execute(query) tests/test_transport.py:84: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ gql/client.py:484: in execute return self.execute_sync( gql/client.py:247: in execute_sync with self as session: gql/client.py:860: in __enter__ return self.connect_sync() gql/client.py:841: in connect_sync self.session.fetch_schema() gql/client.py:1293: in fetch_schema execution_result = self.transport.execute(parse(introspection_query)) gql/transport/requests.py:237: in execute response = self.session.request( /usr/lib/python3.10/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) /usr/lib/python3.10/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , request = , stream = False, timeout = Timeout(connect=None, read=None, total=None), verify = True cert = None, proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) > raise ConnectionError(e, request=request) E requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=8000): Max retries exceeded with url: /graphql (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) /usr/lib/python3.10/site-packages/requests/adapters.py:700: ConnectionError ----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------ >>> {"query": "query IntrospectionQuery {\n __schema {\n queryType {\n name\n }\n mutationType {\n name\n }\n subscriptionType {\n name\n }\n types {\n ...FullType\n }\n directives {\n name\n description\n locations\n args {\n ...InputValue\n }\n }\n }\n}\n\nfragment FullType on __Type {\n kind\n name\n description\n fields(includeDeprecated: true) {\n name\n description\n args {\n ...InputValue\n }\n type {\n ...TypeRef\n }\n isDeprecated\n deprecationReason\n }\n inputFields {\n ...InputValue\n }\n interfaces {\n ...TypeRef\n }\n enumValues(includeDeprecated: true) {\n name\n description\n isDeprecated\n deprecationReason\n }\n possibleTypes {\n ...TypeRef\n }\n}\n\nfragment InputValue on __InputValue {\n name\n description\n type {\n ...TypeRef\n }\n defaultValue\n}\n\nfragment TypeRef on __Type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }\n }\n }\n}"} ------------------------------------------------------------------------------------- Captured log call ------------------------------------------------------------------------------------- INFO gql.transport.requests:requests.py:227 >>> {"query": "query IntrospectionQuery {\n __schema {\n queryType {\n name\n }\n mutationType {\n name\n }\n subscriptionType {\n name\n }\n types {\n ...FullType\n }\n directives {\n name\n description\n locations\n args {\n ...InputValue\n }\n }\n }\n}\n\nfragment FullType on __Type {\n kind\n name\n description\n fields(includeDeprecated: true) {\n name\n description\n args {\n ...InputValue\n }\n type {\n ...TypeRef\n }\n isDeprecated\n deprecationReason\n }\n inputFields {\n ...InputValue\n }\n interfaces {\n ...TypeRef\n }\n enumValues(includeDeprecated: true) {\n name\n description\n isDeprecated\n deprecationReason\n }\n possibleTypes {\n ...TypeRef\n }\n}\n\nfragment InputValue on __InputValue {\n name\n description\n type {\n ...TypeRef\n }\n defaultValue\n}\n\nfragment TypeRef on __Type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }\n }\n }\n}"} _________________________________________________________________________________ test_query_with_variable __________________________________________________________________________________ self = def _new_conn(self) -> socket.socket: """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ try: > sock = connection.create_connection( (self._dns_host, self.port), self.timeout, source_address=self.source_address, socket_options=self.socket_options, ) /usr/lib/python3.10/site-packages/urllib3/connection.py:196: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ [..] ----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------ [..] ================================================================================== short test summary info ================================================================================== SKIPPED [1] tests/test_aiohttp_online.py:11: need --run-online option to run SKIPPED [1] tests/test_aiohttp_online.py:56: need --run-online option to run SKIPPED [1] tests/test_aiohttp_online.py:84: need --run-online option to run SKIPPED [1] tests/test_client.py:121: need --run-online option to run SKIPPED [1] tests/test_client.py:156: need --run-online option to run SKIPPED [1] tests/test_client.py:188: need --run-online option to run SKIPPED [2] tests/test_http_async_sync.py:6: need --run-online option to run SKIPPED [2] tests/test_http_async_sync.py:50: need --run-online option to run SKIPPED [2] tests/test_http_async_sync.py:74: need --run-online option to run SKIPPED [2] tests/test_http_async_sync.py:117: need --run-online option to run SKIPPED [1] tests/test_httpx_online.py:11: need --run-online option to run SKIPPED [1] tests/test_httpx_online.py:56: need --run-online option to run SKIPPED [1] tests/test_httpx_online.py:84: need --run-online option to run SKIPPED [1] tests/test_requests_batch.py:548: backend does not support batching anymore... SKIPPED [1] tests/test_requests_batch.py:614: backend does not support batching anymore... SKIPPED [1] tests/test_requests_batch.py:652: backend does not support batching anymore... SKIPPED [1] tests/test_websocket_online.py:24: backend does not support websockets anymore: https://github.com/trevorblades/countries/issues/42 SKIPPED [1] tests/test_websocket_online.py:65: backend does not support websockets anymore: https://github.com/trevorblades/countries/issues/42 SKIPPED [1] tests/test_websocket_online.py:95: backend does not support websockets anymore: https://github.com/trevorblades/countries/issues/42 SKIPPED [1] tests/test_websocket_online.py:131: backend does not support websockets anymore: https://github.com/trevorblades/countries/issues/42 SKIPPED [1] tests/test_websocket_online.py:153: backend does not support websockets anymore: https://github.com/trevorblades/countries/issues/42 SKIPPED [1] tests/test_websocket_online.py:205: backend does not support websockets anymore: https://github.com/trevorblades/countries/issues/42 FAILED tests/starwars/test_dsl.py::test_get_introspection_query_ast[True] - AssertionError: assert 'query Intros... }\n }\n}' == 'query Intros... }\n }\n}' FAILED tests/starwars/test_dsl.py::test_get_introspection_query_ast[False] - AssertionError: assert 'query Intros... }\n }\n}' == 'query Intros... }\n }\n}' FAILED tests/test_async_client_validation.py::test_async_client_validation_fetch_schema_from_server_valid_query[server0] - AssertionError: assert {'__schema': ...ption'}, ...}} == {'__schema': ...ption'}, ...}} FAILED tests/test_transport.py::test_hero_name_query - requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=8000): Max retries exceeded with url: /graphql (Caused by NewConnectionError('

probably still something is missing in build env but cannot find what 🤔

leszekhanusz commented 1 month ago

You don't have the correct test/dev dependencies. You can install them in your env with python -m pip install -e.[dev]

The necessary dependencies are:

tests_requires = [                                                                                                      
    "parse==1.15.0",                                                                                                    
    "pytest==7.4.2",                                                                                                    
    "pytest-asyncio==0.21.1",                                                                                           
    "pytest-console-scripts==1.3.1",                                                                                    
    "pytest-cov==5.0.0",                                                                                                
    "mock==4.0.2",                                                                                                      
    "vcrpy==4.4.0",                                                                                                     
    "aiofiles",                                                                                                         
]                                                                                                                       

dev_requires = [                                                                                                        
    "black==22.3.0",                                                                                                    
    "check-manifest>=0.42,<1",                                                                                          
    "flake8==3.8.1",                                                                                                    
    "isort==4.3.21",                                                                                                    
    "mypy==1.10",                                                                                                       
    "sphinx>=5.3.0,<6",                                                                                                 
    "sphinx_rtd_theme>=0.4,<1",                                                                                         
    "sphinx-argparse==0.2.5",                                                                                           
    "types-aiofiles",                                                                                                   
    "types-mock",                                                                                                       
    "types-requests",                                                                                                   
] + tests_requires
kloczek commented 1 month ago

You don't have the correct test/dev dependencies. You can install them in your env with python -m pip install -e.[dev]

The necessary dependencies are:


tests_requires = [                                                                                                      
    "parse==1.15.0",                                                                                                    
    "pytest==7.4.2",                                                                                                    
    "pytest-asyncio==0.21.1",                                                                                           
    "pytest-console-scripts==1.3.1",                                                                                    
    "pytest-cov==5.0.0",                                                                                                
    "mock==4.0.2",                                                                                                      
    "vcrpy==4.4.0",                                                                                                     
    "aiofiles",                                                                                                         
]                                                                                                                       

I'm using latest version of above modules. Did you try to unstick versions of above list?

From above list mock can be removed (unittest.mock is used).

[tkloczko@pers-jacek gql-3.5.0]$ grep -r mock
gql-checker/gql_checker/stdlib_list.py:    "unittest.mock",
tests/test_appsync_auth.py:mock_transport_host = "appsyncapp.awsgateway.com.example.org"
tests/test_appsync_auth.py:mock_transport_url = f"https://{mock_transport_host}/graphql"
tests/test_appsync_auth.py:        url=mock_transport_url, session=fake_session_factory()
tests/test_appsync_auth.py:            url=mock_transport_url,
tests/test_appsync_auth.py:    auth = AppSyncJWTAuthentication(host=mock_transport_host, jwt="some-jwt")
tests/test_appsync_auth.py:    sample_transport = AppSyncWebsocketsTransport(url=mock_transport_url, auth=auth)
tests/test_appsync_auth.py:        "host": mock_transport_host,
tests/test_appsync_auth.py:    auth = AppSyncApiKeyAuthentication(host=mock_transport_host, api_key="some-api-key")
tests/test_appsync_auth.py:    sample_transport = AppSyncWebsocketsTransport(url=mock_transport_url, auth=auth)
tests/test_appsync_auth.py:        "host": mock_transport_host,
tests/test_appsync_auth.py:        host=mock_transport_host,
tests/test_appsync_auth.py:        AppSyncWebsocketsTransport(url=mock_transport_url, auth=auth)
tests/test_appsync_auth.py:        host=mock_transport_host,
tests/test_appsync_auth.py:    sample_transport = AppSyncWebsocketsTransport(url=mock_transport_url, auth=auth)
tests/test_appsync_auth.py:        transport = AppSyncWebsocketsTransport(url=mock_transport_url, session=session)
tests/test_client.py:from unittest import mock
tests/test_client.py:@mock.patch("urllib3.connection.HTTPConnection._new_conn")
tests/test_client.py:def test_retries_on_transport(execute_mock):
tests/test_client.py:    execute_mock.side_effect = NewConnectionError(
tests/test_client.py:    assert execute_mock.call_count == expected_retries + 1
tests/test_client.py:    execute_mock.reset_mock()
tests/test_client.py:    assert execute_mock.call_count == expected_retries + 1
setup.py:    "mock==4.0.2",
setup.py:    "types-mock",

coverity is optional. Everything else is installed.

dev_requires = [
"black==22.3.0",
"check-manifest>=0.42,<1",
"flake8==3.8.1",
"isort==4.3.21",
"mypy==1.10",
"sphinx>=5.3.0,<6",
"sphinx_rtd_theme>=0.4,<1",
"sphinx-argparse==0.2.5",
"types-aiofiles",
"types-mock",
"types-requests",
] + tests_requires

None of those modules are used on testing.

leszekhanusz commented 1 month ago

I'm using latest version of above modules.

That's the current problem. Of course we could and should also bump those dependencies and fix the problems but you should not always expect the code to work if you don't have the versions of the dependencies required.

From above list mock can be removed (unittest.mock is used).

Thanks for your issues and your recommendations. It's done in PR #504

kloczek commented 1 month ago

Another suggestion .. please filter all code over pyupgrade --py38-plus and than ruff. End of this month python 3.8 will b EOSed so it would be good as well filter all code over pyupgrade --py39-plus .

leszekhanusz commented 1 month ago

Another suggestion .. please filter all code over pyupgrade --py38-plus and than ruff.

I've modified the code with pyupgrade, but I don't see the point of ruff since we are already using black as a code formatter.

kloczek commented 1 month ago

Please try to check what can do ruff after black. ruff is not formater.