Adds fix for composed schema model vars - #8816

Closed
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars
Closed

Adds fix for composed schema model vars#8816
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars

Conversation

@spacether

@spacetherspacether commented Feb 24, 2021

Copy link
Copy Markdown
Contributor

Adds fix for composed schema model vars
Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties
object payloads are validated to the properties or additionalProerties definition at the composed schema level, independent of properties in composed oneOf/anyOf/allOf definition

So that means that CodegenModel.vars must store only the properties present in the composed schema, if they are present.
This has implications to how we validate composed schemas across generators, and that all generators should eventually support supportsAdditionalPropertiesWithComposedSchema = True.
For now only python and java support it.

This is a fix for: #8813

Blocker

Landing this PR is blocked by: #8802
because we need additionalProperties to be set at the model level before we can use it to allow any value in in all key value pairs.

@sebastien-rosset should the go generator set supportsAdditionalPropertiesWithComposedSchema to True?

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@spacetherspacether linked an issue Feb 24, 2021 that may be closed by this pull request
6 tasks
@spacether
spacether marked this pull request as draft February 24, 2021 02:09
@wing328

Copy link
Copy Markdown
Member

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

@spacether

Copy link
Copy Markdown
ContributorAuthor

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

Sure, here it is: OAI/OpenAPI-Specification#2478

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@spacether the declawed property has been removed as part of the change, which doesn't seem to be correct according to the definition of Cat:

 Cat:
allOf:
- $ref: '#/components/schemas/Animal'
- $ref: '#/components/schemas/Address'
- type: object
properties:
declawed:
type: boolean

ref: https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/resources/3_0/java/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml#L1411-L1418

@spacetherspacetherMar 10, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct. declawed definition only exists in that allOf third schema. It does not have an explicit definition inside Cat because cat has by default:

Cat:
properties: {} # no declawed property here
additionalProperties: true # this allows ingestion of any type of value

Cat containing allOf properties in generated code is an implementation decision.
Per our chat, an allOf schema could be composed also, which means that the variables that it includes in a composed schema like Cat can change from one payload to another or could event be different types like null or object.
This is why I think putting this behind a CLI option may be the best path forward.
Fixing Java looks non-trivial to me but maybe I am missing something.

Do you have a straightforward way to fix Java in this PR?
How do you think I should proceed here?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct

Can you share the link(s) to discussion supporting this claim so that everyone is on the same page?

@spacetherspacetherMar 11, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The point of this PR is that vars should only contain the properties defined in properties of the current scheme. It should not include composed schema properties. This is consistent with how the openapi folks told me to interpret schemas.

Yup it is in the link I pasted above OAI/OpenAPI-Specification#2478

And here is the slack discussion https://json-schema.slack.com/archives/C5CF75URH/p1613937923034800

CodegenModel is one of our classes which implemente Schema and includes some extra info.

Fixes typo
Adds fix for codegenProperty and a test of it
Removes comment
Clarifies comment
Clarifies what setVars is setting in IJsonSchemaValidationProperties
Adds testQueryParameterVarsCorrect testBodyParamAndResponseVarsCorrect
Removes unused imports
Samples updated
Moves fix for vars into python generator only
Samples and docs regen
@spacether

spacether commented Jun 3, 2021

Copy link
Copy Markdown
ContributorAuthor

So this change works to remove the vars that were hoisted into composed schemas from those composed schemas. They still exist in the source schemas and can be assigned as additional properties in the composed schemas.
One would still need to add the composed schema propertyName property back in to schemas that use it.

I am concerned about merging this because it will remove the variables from the properties and signatures of the composed schemas. While not a breaking change, I suspect that many users will not want that.
It may make sense for me to segregate this feature into my future python-experimental generator.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] ComposedSchema vars incorrectly includes extra properties

2 participants

@spacether@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Adds fix for composed schema model vars - #8816

Closed
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars
Closed

Adds fix for composed schema model vars#8816
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars

Conversation

@spacether

@spacetherspacether commented Feb 24, 2021

Copy link
Copy Markdown
Contributor

Adds fix for composed schema model vars
Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties
object payloads are validated to the properties or additionalProerties definition at the composed schema level, independent of properties in composed oneOf/anyOf/allOf definition

So that means that CodegenModel.vars must store only the properties present in the composed schema, if they are present.
This has implications to how we validate composed schemas across generators, and that all generators should eventually support supportsAdditionalPropertiesWithComposedSchema = True.
For now only python and java support it.

This is a fix for: #8813

Blocker

Landing this PR is blocked by: #8802
because we need additionalProperties to be set at the model level before we can use it to allow any value in in all key value pairs.

@sebastien-rosset should the go generator set supportsAdditionalPropertiesWithComposedSchema to True?

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@spacetherspacether linked an issue Feb 24, 2021 that may be closed by this pull request
6 tasks
@spacether
spacether marked this pull request as draft February 24, 2021 02:09
@wing328

Copy link
Copy Markdown
Member

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

@spacether

Copy link
Copy Markdown
ContributorAuthor

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

Sure, here it is: OAI/OpenAPI-Specification#2478

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@spacether the declawed property has been removed as part of the change, which doesn't seem to be correct according to the definition of Cat:

 Cat:
allOf:
- $ref: '#/components/schemas/Animal'
- $ref: '#/components/schemas/Address'
- type: object
properties:
declawed:
type: boolean

ref: https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/resources/3_0/java/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml#L1411-L1418

@spacetherspacetherMar 10, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct. declawed definition only exists in that allOf third schema. It does not have an explicit definition inside Cat because cat has by default:

Cat:
properties: {} # no declawed property here
additionalProperties: true # this allows ingestion of any type of value

Cat containing allOf properties in generated code is an implementation decision.
Per our chat, an allOf schema could be composed also, which means that the variables that it includes in a composed schema like Cat can change from one payload to another or could event be different types like null or object.
This is why I think putting this behind a CLI option may be the best path forward.
Fixing Java looks non-trivial to me but maybe I am missing something.

Do you have a straightforward way to fix Java in this PR?
How do you think I should proceed here?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct

Can you share the link(s) to discussion supporting this claim so that everyone is on the same page?

@spacetherspacetherMar 11, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The point of this PR is that vars should only contain the properties defined in properties of the current scheme. It should not include composed schema properties. This is consistent with how the openapi folks told me to interpret schemas.

Yup it is in the link I pasted above OAI/OpenAPI-Specification#2478

And here is the slack discussion https://json-schema.slack.com/archives/C5CF75URH/p1613937923034800

CodegenModel is one of our classes which implemente Schema and includes some extra info.

Fixes typo
Adds fix for codegenProperty and a test of it
Removes comment
Clarifies comment
Clarifies what setVars is setting in IJsonSchemaValidationProperties
Adds testQueryParameterVarsCorrect testBodyParamAndResponseVarsCorrect
Removes unused imports
Samples updated
Moves fix for vars into python generator only
Samples and docs regen
@spacether

spacether commented Jun 3, 2021

Copy link
Copy Markdown
ContributorAuthor

So this change works to remove the vars that were hoisted into composed schemas from those composed schemas. They still exist in the source schemas and can be assigned as additional properties in the composed schemas.
One would still need to add the composed schema propertyName property back in to schemas that use it.

I am concerned about merging this because it will remove the variables from the properties and signatures of the composed schemas. While not a breaking change, I suspect that many users will not want that.
It may make sense for me to segregate this feature into my future python-experimental generator.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] ComposedSchema vars incorrectly includes extra properties

2 participants

@spacether@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Adds fix for composed schema model vars - #8816

Closed
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars
Closed

Adds fix for composed schema model vars#8816
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars

Conversation

@spacether

@spacetherspacether commented Feb 24, 2021

Copy link
Copy Markdown
Contributor

Adds fix for composed schema model vars
Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties
object payloads are validated to the properties or additionalProerties definition at the composed schema level, independent of properties in composed oneOf/anyOf/allOf definition

So that means that CodegenModel.vars must store only the properties present in the composed schema, if they are present.
This has implications to how we validate composed schemas across generators, and that all generators should eventually support supportsAdditionalPropertiesWithComposedSchema = True.
For now only python and java support it.

This is a fix for: #8813

Blocker

Landing this PR is blocked by: #8802
because we need additionalProperties to be set at the model level before we can use it to allow any value in in all key value pairs.

@sebastien-rosset should the go generator set supportsAdditionalPropertiesWithComposedSchema to True?

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@spacetherspacether linked an issue Feb 24, 2021 that may be closed by this pull request
6 tasks
@spacether
spacether marked this pull request as draft February 24, 2021 02:09
@wing328

Copy link
Copy Markdown
Member

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

@spacether

Copy link
Copy Markdown
ContributorAuthor

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

Sure, here it is: OAI/OpenAPI-Specification#2478

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@spacether the declawed property has been removed as part of the change, which doesn't seem to be correct according to the definition of Cat:

 Cat:
allOf:
- $ref: '#/components/schemas/Animal'
- $ref: '#/components/schemas/Address'
- type: object
properties:
declawed:
type: boolean

ref: https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/resources/3_0/java/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml#L1411-L1418

@spacetherspacetherMar 10, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct. declawed definition only exists in that allOf third schema. It does not have an explicit definition inside Cat because cat has by default:

Cat:
properties: {} # no declawed property here
additionalProperties: true # this allows ingestion of any type of value

Cat containing allOf properties in generated code is an implementation decision.
Per our chat, an allOf schema could be composed also, which means that the variables that it includes in a composed schema like Cat can change from one payload to another or could event be different types like null or object.
This is why I think putting this behind a CLI option may be the best path forward.
Fixing Java looks non-trivial to me but maybe I am missing something.

Do you have a straightforward way to fix Java in this PR?
How do you think I should proceed here?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct

Can you share the link(s) to discussion supporting this claim so that everyone is on the same page?

@spacetherspacetherMar 11, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The point of this PR is that vars should only contain the properties defined in properties of the current scheme. It should not include composed schema properties. This is consistent with how the openapi folks told me to interpret schemas.

Yup it is in the link I pasted above OAI/OpenAPI-Specification#2478

And here is the slack discussion https://json-schema.slack.com/archives/C5CF75URH/p1613937923034800

CodegenModel is one of our classes which implemente Schema and includes some extra info.

Fixes typo
Adds fix for codegenProperty and a test of it
Removes comment
Clarifies comment
Clarifies what setVars is setting in IJsonSchemaValidationProperties
Adds testQueryParameterVarsCorrect testBodyParamAndResponseVarsCorrect
Removes unused imports
Samples updated
Moves fix for vars into python generator only
Samples and docs regen
@spacether

spacether commented Jun 3, 2021

Copy link
Copy Markdown
ContributorAuthor

So this change works to remove the vars that were hoisted into composed schemas from those composed schemas. They still exist in the source schemas and can be assigned as additional properties in the composed schemas.
One would still need to add the composed schema propertyName property back in to schemas that use it.

I am concerned about merging this because it will remove the variables from the properties and signatures of the composed schemas. While not a breaking change, I suspect that many users will not want that.
It may make sense for me to segregate this feature into my future python-experimental generator.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] ComposedSchema vars incorrectly includes extra properties

2 participants

@spacether@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Adds fix for composed schema model vars - #8816

Closed
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars
Closed

Adds fix for composed schema model vars#8816
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars

Conversation

@spacether

@spacetherspacether commented Feb 24, 2021

Copy link
Copy Markdown
Contributor

Adds fix for composed schema model vars
Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties
object payloads are validated to the properties or additionalProerties definition at the composed schema level, independent of properties in composed oneOf/anyOf/allOf definition

So that means that CodegenModel.vars must store only the properties present in the composed schema, if they are present.
This has implications to how we validate composed schemas across generators, and that all generators should eventually support supportsAdditionalPropertiesWithComposedSchema = True.
For now only python and java support it.

This is a fix for: #8813

Blocker

Landing this PR is blocked by: #8802
because we need additionalProperties to be set at the model level before we can use it to allow any value in in all key value pairs.

@sebastien-rosset should the go generator set supportsAdditionalPropertiesWithComposedSchema to True?

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@spacetherspacether linked an issue Feb 24, 2021 that may be closed by this pull request
6 tasks
@spacether
spacether marked this pull request as draft February 24, 2021 02:09
@wing328

Copy link
Copy Markdown
Member

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

@spacether

Copy link
Copy Markdown
ContributorAuthor

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

Sure, here it is: OAI/OpenAPI-Specification#2478

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@spacether the declawed property has been removed as part of the change, which doesn't seem to be correct according to the definition of Cat:

 Cat:
allOf:
- $ref: '#/components/schemas/Animal'
- $ref: '#/components/schemas/Address'
- type: object
properties:
declawed:
type: boolean

ref: https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/resources/3_0/java/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml#L1411-L1418

@spacetherspacetherMar 10, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct. declawed definition only exists in that allOf third schema. It does not have an explicit definition inside Cat because cat has by default:

Cat:
properties: {} # no declawed property here
additionalProperties: true # this allows ingestion of any type of value

Cat containing allOf properties in generated code is an implementation decision.
Per our chat, an allOf schema could be composed also, which means that the variables that it includes in a composed schema like Cat can change from one payload to another or could event be different types like null or object.
This is why I think putting this behind a CLI option may be the best path forward.
Fixing Java looks non-trivial to me but maybe I am missing something.

Do you have a straightforward way to fix Java in this PR?
How do you think I should proceed here?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct

Can you share the link(s) to discussion supporting this claim so that everyone is on the same page?

@spacetherspacetherMar 11, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The point of this PR is that vars should only contain the properties defined in properties of the current scheme. It should not include composed schema properties. This is consistent with how the openapi folks told me to interpret schemas.

Yup it is in the link I pasted above OAI/OpenAPI-Specification#2478

And here is the slack discussion https://json-schema.slack.com/archives/C5CF75URH/p1613937923034800

CodegenModel is one of our classes which implemente Schema and includes some extra info.

Fixes typo
Adds fix for codegenProperty and a test of it
Removes comment
Clarifies comment
Clarifies what setVars is setting in IJsonSchemaValidationProperties
Adds testQueryParameterVarsCorrect testBodyParamAndResponseVarsCorrect
Removes unused imports
Samples updated
Moves fix for vars into python generator only
Samples and docs regen
@spacether

spacether commented Jun 3, 2021

Copy link
Copy Markdown
ContributorAuthor

So this change works to remove the vars that were hoisted into composed schemas from those composed schemas. They still exist in the source schemas and can be assigned as additional properties in the composed schemas.
One would still need to add the composed schema propertyName property back in to schemas that use it.

I am concerned about merging this because it will remove the variables from the properties and signatures of the composed schemas. While not a breaking change, I suspect that many users will not want that.
It may make sense for me to segregate this feature into my future python-experimental generator.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] ComposedSchema vars incorrectly includes extra properties

2 participants

@spacether@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Adds fix for composed schema model vars - #8816

Closed
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars
Closed

Adds fix for composed schema model vars#8816
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars

Conversation

@spacether

@spacetherspacether commented Feb 24, 2021

Copy link
Copy Markdown
Contributor

Adds fix for composed schema model vars
Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties
object payloads are validated to the properties or additionalProerties definition at the composed schema level, independent of properties in composed oneOf/anyOf/allOf definition

So that means that CodegenModel.vars must store only the properties present in the composed schema, if they are present.
This has implications to how we validate composed schemas across generators, and that all generators should eventually support supportsAdditionalPropertiesWithComposedSchema = True.
For now only python and java support it.

This is a fix for: #8813

Blocker

Landing this PR is blocked by: #8802
because we need additionalProperties to be set at the model level before we can use it to allow any value in in all key value pairs.

@sebastien-rosset should the go generator set supportsAdditionalPropertiesWithComposedSchema to True?

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@spacetherspacether linked an issue Feb 24, 2021 that may be closed by this pull request
6 tasks
@spacether
spacether marked this pull request as draft February 24, 2021 02:09
@wing328

Copy link
Copy Markdown
Member

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

@spacether

Copy link
Copy Markdown
ContributorAuthor

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

Sure, here it is: OAI/OpenAPI-Specification#2478

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@spacether the declawed property has been removed as part of the change, which doesn't seem to be correct according to the definition of Cat:

 Cat:
allOf:
- $ref: '#/components/schemas/Animal'
- $ref: '#/components/schemas/Address'
- type: object
properties:
declawed:
type: boolean

ref: https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/resources/3_0/java/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml#L1411-L1418

@spacetherspacetherMar 10, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct. declawed definition only exists in that allOf third schema. It does not have an explicit definition inside Cat because cat has by default:

Cat:
properties: {} # no declawed property here
additionalProperties: true # this allows ingestion of any type of value

Cat containing allOf properties in generated code is an implementation decision.
Per our chat, an allOf schema could be composed also, which means that the variables that it includes in a composed schema like Cat can change from one payload to another or could event be different types like null or object.
This is why I think putting this behind a CLI option may be the best path forward.
Fixing Java looks non-trivial to me but maybe I am missing something.

Do you have a straightforward way to fix Java in this PR?
How do you think I should proceed here?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct

Can you share the link(s) to discussion supporting this claim so that everyone is on the same page?

@spacetherspacetherMar 11, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The point of this PR is that vars should only contain the properties defined in properties of the current scheme. It should not include composed schema properties. This is consistent with how the openapi folks told me to interpret schemas.

Yup it is in the link I pasted above OAI/OpenAPI-Specification#2478

And here is the slack discussion https://json-schema.slack.com/archives/C5CF75URH/p1613937923034800

CodegenModel is one of our classes which implemente Schema and includes some extra info.

Fixes typo
Adds fix for codegenProperty and a test of it
Removes comment
Clarifies comment
Clarifies what setVars is setting in IJsonSchemaValidationProperties
Adds testQueryParameterVarsCorrect testBodyParamAndResponseVarsCorrect
Removes unused imports
Samples updated
Moves fix for vars into python generator only
Samples and docs regen
@spacether

spacether commented Jun 3, 2021

Copy link
Copy Markdown
ContributorAuthor

So this change works to remove the vars that were hoisted into composed schemas from those composed schemas. They still exist in the source schemas and can be assigned as additional properties in the composed schemas.
One would still need to add the composed schema propertyName property back in to schemas that use it.

I am concerned about merging this because it will remove the variables from the properties and signatures of the composed schemas. While not a breaking change, I suspect that many users will not want that.
It may make sense for me to segregate this feature into my future python-experimental generator.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] ComposedSchema vars incorrectly includes extra properties

2 participants

@spacether@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Adds fix for composed schema model vars - #8816

Closed
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars
Closed

Adds fix for composed schema model vars#8816
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars

Conversation

@spacether

@spacetherspacether commented Feb 24, 2021

Copy link
Copy Markdown
Contributor

Adds fix for composed schema model vars
Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties
object payloads are validated to the properties or additionalProerties definition at the composed schema level, independent of properties in composed oneOf/anyOf/allOf definition

So that means that CodegenModel.vars must store only the properties present in the composed schema, if they are present.
This has implications to how we validate composed schemas across generators, and that all generators should eventually support supportsAdditionalPropertiesWithComposedSchema = True.
For now only python and java support it.

This is a fix for: #8813

Blocker

Landing this PR is blocked by: #8802
because we need additionalProperties to be set at the model level before we can use it to allow any value in in all key value pairs.

@sebastien-rosset should the go generator set supportsAdditionalPropertiesWithComposedSchema to True?

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@spacetherspacether linked an issue Feb 24, 2021 that may be closed by this pull request
6 tasks
@spacether
spacether marked this pull request as draft February 24, 2021 02:09
@wing328

Copy link
Copy Markdown
Member

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

@spacether

Copy link
Copy Markdown
ContributorAuthor

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

Sure, here it is: OAI/OpenAPI-Specification#2478

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@spacether the declawed property has been removed as part of the change, which doesn't seem to be correct according to the definition of Cat:

 Cat:
allOf:
- $ref: '#/components/schemas/Animal'
- $ref: '#/components/schemas/Address'
- type: object
properties:
declawed:
type: boolean

ref: https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/resources/3_0/java/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml#L1411-L1418

@spacetherspacetherMar 10, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct. declawed definition only exists in that allOf third schema. It does not have an explicit definition inside Cat because cat has by default:

Cat:
properties: {} # no declawed property here
additionalProperties: true # this allows ingestion of any type of value

Cat containing allOf properties in generated code is an implementation decision.
Per our chat, an allOf schema could be composed also, which means that the variables that it includes in a composed schema like Cat can change from one payload to another or could event be different types like null or object.
This is why I think putting this behind a CLI option may be the best path forward.
Fixing Java looks non-trivial to me but maybe I am missing something.

Do you have a straightforward way to fix Java in this PR?
How do you think I should proceed here?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct

Can you share the link(s) to discussion supporting this claim so that everyone is on the same page?

@spacetherspacetherMar 11, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The point of this PR is that vars should only contain the properties defined in properties of the current scheme. It should not include composed schema properties. This is consistent with how the openapi folks told me to interpret schemas.

Yup it is in the link I pasted above OAI/OpenAPI-Specification#2478

And here is the slack discussion https://json-schema.slack.com/archives/C5CF75URH/p1613937923034800

CodegenModel is one of our classes which implemente Schema and includes some extra info.

Fixes typo
Adds fix for codegenProperty and a test of it
Removes comment
Clarifies comment
Clarifies what setVars is setting in IJsonSchemaValidationProperties
Adds testQueryParameterVarsCorrect testBodyParamAndResponseVarsCorrect
Removes unused imports
Samples updated
Moves fix for vars into python generator only
Samples and docs regen
@spacether

spacether commented Jun 3, 2021

Copy link
Copy Markdown
ContributorAuthor

So this change works to remove the vars that were hoisted into composed schemas from those composed schemas. They still exist in the source schemas and can be assigned as additional properties in the composed schemas.
One would still need to add the composed schema propertyName property back in to schemas that use it.

I am concerned about merging this because it will remove the variables from the properties and signatures of the composed schemas. While not a breaking change, I suspect that many users will not want that.
It may make sense for me to segregate this feature into my future python-experimental generator.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] ComposedSchema vars incorrectly includes extra properties

2 participants

@spacether@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Adds fix for composed schema model vars - #8816

Closed
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars
Closed

Adds fix for composed schema model vars#8816
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars

Conversation

@spacether

@spacetherspacether commented Feb 24, 2021

Copy link
Copy Markdown
Contributor

Adds fix for composed schema model vars
Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties
object payloads are validated to the properties or additionalProerties definition at the composed schema level, independent of properties in composed oneOf/anyOf/allOf definition

So that means that CodegenModel.vars must store only the properties present in the composed schema, if they are present.
This has implications to how we validate composed schemas across generators, and that all generators should eventually support supportsAdditionalPropertiesWithComposedSchema = True.
For now only python and java support it.

This is a fix for: #8813

Blocker

Landing this PR is blocked by: #8802
because we need additionalProperties to be set at the model level before we can use it to allow any value in in all key value pairs.

@sebastien-rosset should the go generator set supportsAdditionalPropertiesWithComposedSchema to True?

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@spacetherspacether linked an issue Feb 24, 2021 that may be closed by this pull request
6 tasks
@spacether
spacether marked this pull request as draft February 24, 2021 02:09
@wing328

Copy link
Copy Markdown
Member

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

@spacether

Copy link
Copy Markdown
ContributorAuthor

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

Sure, here it is: OAI/OpenAPI-Specification#2478

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@spacether the declawed property has been removed as part of the change, which doesn't seem to be correct according to the definition of Cat:

 Cat:
allOf:
- $ref: '#/components/schemas/Animal'
- $ref: '#/components/schemas/Address'
- type: object
properties:
declawed:
type: boolean

ref: https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/resources/3_0/java/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml#L1411-L1418

@spacetherspacetherMar 10, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct. declawed definition only exists in that allOf third schema. It does not have an explicit definition inside Cat because cat has by default:

Cat:
properties: {} # no declawed property here
additionalProperties: true # this allows ingestion of any type of value

Cat containing allOf properties in generated code is an implementation decision.
Per our chat, an allOf schema could be composed also, which means that the variables that it includes in a composed schema like Cat can change from one payload to another or could event be different types like null or object.
This is why I think putting this behind a CLI option may be the best path forward.
Fixing Java looks non-trivial to me but maybe I am missing something.

Do you have a straightforward way to fix Java in this PR?
How do you think I should proceed here?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct

Can you share the link(s) to discussion supporting this claim so that everyone is on the same page?

@spacetherspacetherMar 11, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The point of this PR is that vars should only contain the properties defined in properties of the current scheme. It should not include composed schema properties. This is consistent with how the openapi folks told me to interpret schemas.

Yup it is in the link I pasted above OAI/OpenAPI-Specification#2478

And here is the slack discussion https://json-schema.slack.com/archives/C5CF75URH/p1613937923034800

CodegenModel is one of our classes which implemente Schema and includes some extra info.

Fixes typo
Adds fix for codegenProperty and a test of it
Removes comment
Clarifies comment
Clarifies what setVars is setting in IJsonSchemaValidationProperties
Adds testQueryParameterVarsCorrect testBodyParamAndResponseVarsCorrect
Removes unused imports
Samples updated
Moves fix for vars into python generator only
Samples and docs regen
@spacether

spacether commented Jun 3, 2021

Copy link
Copy Markdown
ContributorAuthor

So this change works to remove the vars that were hoisted into composed schemas from those composed schemas. They still exist in the source schemas and can be assigned as additional properties in the composed schemas.
One would still need to add the composed schema propertyName property back in to schemas that use it.

I am concerned about merging this because it will remove the variables from the properties and signatures of the composed schemas. While not a breaking change, I suspect that many users will not want that.
It may make sense for me to segregate this feature into my future python-experimental generator.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] ComposedSchema vars incorrectly includes extra properties

2 participants

@spacether@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Adds fix for composed schema model vars - #8816

Closed
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars
Closed

Adds fix for composed schema model vars#8816
spacether wants to merge 4 commits into
OpenAPITools:masterfrom
spacether:fixes_vars

Conversation

@spacether

@spacetherspacether commented Feb 24, 2021

Copy link
Copy Markdown
Contributor

Adds fix for composed schema model vars
Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties
object payloads are validated to the properties or additionalProerties definition at the composed schema level, independent of properties in composed oneOf/anyOf/allOf definition

So that means that CodegenModel.vars must store only the properties present in the composed schema, if they are present.
This has implications to how we validate composed schemas across generators, and that all generators should eventually support supportsAdditionalPropertiesWithComposedSchema = True.
For now only python and java support it.

This is a fix for: #8813

Blocker

Landing this PR is blocked by: #8802
because we need additionalProperties to be set at the model level before we can use it to allow any value in in all key value pairs.

@sebastien-rosset should the go generator set supportsAdditionalPropertiesWithComposedSchema to True?

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@spacetherspacether linked an issue Feb 24, 2021 that may be closed by this pull request
6 tasks
@spacether
spacether marked this pull request as draft February 24, 2021 02:09
@wing328

Copy link
Copy Markdown
Member

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

@spacether

Copy link
Copy Markdown
ContributorAuthor

Per guidance from json schema and openapi people, when a composed schema has properties or additionalProperties

Can you please share the links to the discussions?

Sure, here it is: OAI/OpenAPI-Specification#2478

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@spacether the declawed property has been removed as part of the change, which doesn't seem to be correct according to the definition of Cat:

 Cat:
allOf:
- $ref: '#/components/schemas/Animal'
- $ref: '#/components/schemas/Address'
- type: object
properties:
declawed:
type: boolean

ref: https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/test/resources/3_0/java/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml#L1411-L1418

@spacetherspacetherMar 10, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct. declawed definition only exists in that allOf third schema. It does not have an explicit definition inside Cat because cat has by default:

Cat:
properties: {} # no declawed property here
additionalProperties: true # this allows ingestion of any type of value

Cat containing allOf properties in generated code is an implementation decision.
Per our chat, an allOf schema could be composed also, which means that the variables that it includes in a composed schema like Cat can change from one payload to another or could event be different types like null or object.
This is why I think putting this behind a CLI option may be the best path forward.
Fixing Java looks non-trivial to me but maybe I am missing something.

Do you have a straightforward way to fix Java in this PR?
How do you think I should proceed here?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CodegenModel Cat not containing declawed when vars only contains properties in the current schema is correct

Can you share the link(s) to discussion supporting this claim so that everyone is on the same page?

@spacetherspacetherMar 11, 2021

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The point of this PR is that vars should only contain the properties defined in properties of the current scheme. It should not include composed schema properties. This is consistent with how the openapi folks told me to interpret schemas.

Yup it is in the link I pasted above OAI/OpenAPI-Specification#2478

And here is the slack discussion https://json-schema.slack.com/archives/C5CF75URH/p1613937923034800

CodegenModel is one of our classes which implemente Schema and includes some extra info.

Fixes typo
Adds fix for codegenProperty and a test of it
Removes comment
Clarifies comment
Clarifies what setVars is setting in IJsonSchemaValidationProperties
Adds testQueryParameterVarsCorrect testBodyParamAndResponseVarsCorrect
Removes unused imports
Samples updated
Moves fix for vars into python generator only
Samples and docs regen
@spacether

spacether commented Jun 3, 2021

Copy link
Copy Markdown
ContributorAuthor

So this change works to remove the vars that were hoisted into composed schemas from those composed schemas. They still exist in the source schemas and can be assigned as additional properties in the composed schemas.
One would still need to add the composed schema propertyName property back in to schemas that use it.

I am concerned about merging this because it will remove the variables from the properties and signatures of the composed schemas. While not a breaking change, I suspect that many users will not want that.
It may make sense for me to segregate this feature into my future python-experimental generator.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] ComposedSchema vars incorrectly includes extra properties

2 participants

@spacether@wing328