Nexmo / oas_parser

An open source Open API Spec 3 Definition Parser
MIT License
51 stars 16 forks source link

problem parsing azure netapp swagger circular reference #74

Open MarioRuiz opened 1 year ago

MarioRuiz commented 1 year ago

When parsing https://github.com/Azure/azure-rest-api-specs/blob/main/specification/netapp/resource-manager/Microsoft.NetApp/stable/2022-11-01/netapp.json I get Error: key not found: "ErrorDetail" backtrace:

/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/pointer.rb:11:in `fetch'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/pointer.rb:11:in `block in resolve'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/pointer.rb:10:in `each'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/pointer.rb:10:in `reduce'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/pointer.rb:10:in `resolve'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:68:in `expand_pointer'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:41:in `expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:20:in `deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:24:in `block in deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `each'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `reduce'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:24:in `block in deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `each'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `reduce'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:24:in `block in deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `each'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `reduce'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:24:in `block in deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `each'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `reduce'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:24:in `block in deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `each'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `reduce'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:24:in `block in deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `each'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `reduce'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:24:in `block in deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `each'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `reduce'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:24:in `block in deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `each'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `reduce'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:24:in `block in deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `each'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `reduce'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:24:in `block in deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `each'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `reduce'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:24:in `block in deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `each'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `reduce'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:23:in `deeply_expand_refs'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:14:in `resolve'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/parser.rb:5:in `resolve'
/Users/marioruizsanchez/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/oas_parser-0.25.4/lib/oas_parser/definition.rb:12:in `resolve'
MarioRuiz commented 1 year ago

I think this is because of circular references:

"default": {
            "description": "Error response describing why the operation failed.",
            "schema": {
              "$ref": "../../../../../common-types/resource-management/v4/types.json#/definitions/ErrorResponse"
            }
          }

might be the common type ErrorDetails does reference itself "$ref": "#/definitions/ErrorDetail"