Skip to content

Schemas defined by allOf are not treated as Objects #147

Description

@phrfpeixoto

I've noticed that if you define a Schema using allOf, that particular schema will note marked as an object itself, even though it's based in other objects.

OAS3 States:

Composition and Inheritance (Polymorphism)

The OpenAPI Specification allows combining and extending model definitions using the allOf property of JSON Schema, in effect offering model composition. allOf takes an array of object definitions that are validated independently but together compose a single object.

It's clear that the result of a usage of an allOf statement should produce an object.

Tried with:

components:
  schemas:
    Error:
      type: object,
      properties:
        message:
          type: string
    TS:
      type: object
      properties:
        moment:
          type: string,
          format: datetime
    ExtendedError:
      type: object
      properties:
        message:
          type: string
        suberror:
          allOf:
            - $ref: '#/components/schemas/Error'
            - $ref: '#/components/schemas/TS'

In this case the Schema for suberror have it's type property set to SchemaType.Any because of they way how the type is defined without checking on inheritance:

self.type = SchemaType(schema_type)
# ... REDACTED CODE ...
self.all_of = all_of and list(all_of) or []

Activity

  1. phrfpeixoto commented on Jul 7, 2019

    @phrfpeixoto
    ContributorAuthor

    As a work around, you may add a type declaration alongside that allOf

    components:
      schemas:
        Error:
          type: object,
          properties:
            message:
              type: string
        TS:
          type: object
          properties:
            moment:
              type: string,
              format: datetime
        ExtendedError:
          type: object
          properties:
            message:
              type: string
            suberror:
              type: object
              allOf:
                - $ref: '#/components/schemas/Error'
                - $ref: '#/components/schemas/TS'
  2. phrfpeixoto commented on Jul 14, 2019

    @phrfpeixoto
    ContributorAuthor

    @p1c2u Would you mind reviewing this?

  3. p1c2u commented on Sep 7, 2019

    @p1c2u
    Collaborator

    It's clear that the result of a usage of an allOf statement should produce an object.

    It's said they both compose a single object. Object here is meant by object definition and not object type

    Take a look at the following example:

    allOf:
      - type: string
      - type: string
    
  4. phrfpeixoto commented on Sep 8, 2019

    @phrfpeixoto
    ContributorAuthor

    That's exactly what I'm reporting. The code only treats the resulting object as such if you specify the type

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/schemaIndicates an issue on schema area

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions