Used commandline to start a server in the same directory where openapi.json is saved:
$ python -m http.server 8123
$ datamodel-codegen --url http://127.0.0.1:8123/openapi.json
Looking at the logs, it seems that datamodel-codegen makes a first successful request to the endpoint, then it tries to make a new request to the wrong port 80, failing at:
The input file type was determined to be: openapi
This can be specified explicitly with the `--input-file-type` option.
Traceback (most recent call last):
File ".venv/lib/python3.11/site-packages/httpx/_transports/default.py", line 101, in map_httpcore_exceptions
yield
File ".venv/lib/python3.11/site-packages/httpx/_transports/default.py", line 250, in handle_request
resp = self._pool.handle_request(req)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/httpcore/_sync/connection_pool.py", line 256, in handle_request
raise exc from None
File ".venv/lib/python3.11/site-packages/httpcore/_sync/connection_pool.py", line 236, in handle_request
response = connection.handle_request(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/httpcore/_sync/connection.py", line 101, in handle_request
raise exc
File ".venv/lib/python3.11/site-packages/httpcore/_sync/connection.py", line 78, in handle_request
stream = self._connect(request)
^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/httpcore/_sync/connection.py", line 124, in _connect
stream = self._network_backend.connect_tcp(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/httpcore/_backends/sync.py", line 207, in connect_tcp
with map_exceptions(exc_map):
File "/Users/me/.local/share/uv/python/cpython-3.11.11-macos-aarch64-none/lib/python3.11/contextlib.py", line 158, in __exit__
self.gen.throw(typ, value, traceback)
File ".venv/lib/python3.11/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
raise to_exc(exc) from exc
httpcore.ConnectError: [Errno 61] Connection refused
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/__main__.py", line 1363, in main
run_generate_from_config(
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/__main__.py", line 938, in run_generate_from_config
result = generate(
^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/__init__.py", line 764, in generate
results = parser.parse(
^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/base.py", line 3107, in parse
self.parse_raw()
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/openapi.py", line 753, in parse_raw
self.parse_raw_obj(
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/jsonschema.py", line 3580, in parse_raw_obj
self.parse_obj(name, obj, path)
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/jsonschema.py", line 3622, in parse_obj
self.parse_object(name, obj, path)
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/jsonschema.py", line 2481, in parse_object
fields = self.parse_object_fields(
^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/openapi.py", line 304, in parse_object_fields
fields = super().parse_object_fields(obj, path, module_name, class_name=class_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/jsonschema.py", line 2421, in parse_object_fields
field_type = self.parse_item(modular_name, field, [*path, field_name])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/jsonschema.py", line 2767, in parse_item
return self.get_ref_data_type(item.ref)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/openapi.py", line 294, in get_ref_data_type
return super().get_ref_data_type(ref)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/jsonschema.py", line 1124, in get_ref_data_type
ref_schema = self._load_ref_schema_object(ref)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/jsonschema.py", line 1379, in _load_ref_schema_object
raw_doc = self._get_ref_body(file_part) if file_part else self.raw_obj
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/jsonschema.py", line 3387, in _get_ref_body
return self._get_ref_body_from_url(resolved_ref)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/jsonschema.py", line 3406, in _get_ref_body_from_url
return self.remote_object_cache.get_or_put(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/__init__.py", line 44, in get_or_put
value = self[key] = default_factory(key)
^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/jsonschema.py", line 3407, in <lambda>
ref, default_factory=lambda key: load_data(self._get_text_from_url(key))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/base.py", line 1046, in _get_text_from_url
return self.remote_text_cache.get_or_put(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/__init__.py", line 44, in get_or_put
value = self[key] = default_factory(key)
^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/parser/base.py", line 1048, in <lambda>
default_factory=lambda _url: get_body(
^^^^^^^^^
File ".venv/lib/python3.11/site-packages/datamodel_code_generator/http.py", line 38, in get_body
return httpx.get(
^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/httpx/_api.py", line 195, in get
return request(
^^^^^^^^
File ".venv/lib/python3.11/site-packages/httpx/_api.py", line 109, in request
return client.request(
^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/httpx/_client.py", line 825, in request
return self.send(request, auth=auth, follow_redirects=follow_redirects)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/httpx/_client.py", line 914, in send
response = self._send_handling_auth(
^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/httpx/_client.py", line 942, in _send_handling_auth
response = self._send_handling_redirects(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/httpx/_client.py", line 979, in _send_handling_redirects
response = self._send_single_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/httpx/_client.py", line 1014, in _send_single_request
response = transport.handle_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".venv/lib/python3.11/site-packages/httpx/_transports/default.py", line 249, in handle_request
with map_httpcore_exceptions():
File "/Users/me/.local/share/uv/python/cpython-3.11.11-macos-aarch64-none/lib/python3.11/contextlib.py", line 158, in __exit__
self.gen.throw(typ, value, traceback)
File ".venv/lib/python3.11/site-packages/httpx/_transports/default.py", line 118, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.ConnectError: [Errno 61] Connection refused
Describe the bug
datamodel-code-generator > 0.40.0 fails when using --url with a custom port and retrieving a schema with $ref.
To Reproduce
Example schema:
{ "openapi": "3.0.0", "info": { "title": "Minimal API", "version": "1.0.0" }, "paths": {}, "components": { "schemas": { "Item": { "type": "object", "properties": { "id": { "type": "string" }, "owner": { "$ref": "#/components/schemas/User" } } }, "User": { "type": "object", "properties": { "name": { "type": "string" } } } } } }Used commandline to start a server in the same directory where openapi.json is saved:
Used commandline:
Expected behavior
The output should show the generated code as in version 0.40.0.
Version:
Additional context
The error is httpx.ConnectError: [Errno 61] Connection refused
Looking at the logs, it seems that datamodel-codegen makes a first successful request to the endpoint, then it tries to make a new request to the wrong port 80, failing at:
datamodel-code-generator/src/datamodel_code_generator/parser/jsonschema.py
Line 3406 in 54c3ed9
Full traceback: