Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Composed +discriminator models, use dynamic base classes #1

Closed
wants to merge 22 commits into from

Conversation

spacether
Copy link
Owner

@spacether spacether commented Jul 9, 2020

OpenAPITools/openapi-generator#6797
This above different PR allows composed schemas to return instances of self composed schema None, or int. We enable mixed type returns in composed schemas in python. But it's painful because our endpoint input arguments for ComposedSchema can be None, int, or ComposedSchema. That requires us to traverse ComposedSchema on the client side when we send a ComposedSchema with None or int input, which takes O(n). An easier implementation which would eliminate that O(n) traversal would be to have all instances of ComposedSchema be type ComposedSchema. That requires wrapping all possible results in that type including None, int, Cat etc. in ComposedSchema.

Use Cases That this will address

Dynamic class inheritance it will allow us to generally solve these use cases:

  • Discriminator inheritance (2 classes, Animal + chosen class)
  • OneOf (2 classes, outer and oneof)
  • AnyOf (n classes)
  • AllOf + OneOf (2 classes)
  • AllOf + AnyOf (n classes)
  • AllOf (outer + n allof classes)
  • composed in composed in.. (n classes)

@sebastien-rosset do you know of any other use cases that should be covered here?

This could be a useful pattern in dynamic languages like python, Ruby etc.
With this pattern, when creating an Animal, the returned instance (Cat or Dog) will always be an instance of and a subclass of Animal.

Examples in our file

Discriminator

  • Animal Cat + Dog mock discriminator

OneOf Example

  • Panther

ModelSImple example (inherit from Class that is primitive type with validations)

  • IntModel

Inherit from primitive types

  • None, True, False (classes that can't be used as base classes in python)
    • We can get those working by returning them as Enum class instances
  • float, see 3.14 input to ComposedSchema
  • string enum, see 'red' input to ComposedSchema
  • list, see [] input to ComposedSchema
  • array model, see [0] input to ComposedSchema

@spacether spacether changed the title Composed schema dynamic base classes Composed +discriminator models, use dynamic base classes Jul 9, 2020
@spacether
Copy link
Owner Author

Closing this because incorporating this concept is moving forward in OpenAPITools/openapi-generator#8325

@spacether spacether closed this Jan 15, 2021
Sign up for free to 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.

None yet

1 participant