| # |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| $schema: 'http://json-schema.org/draft-07/schema#' |
| $id: https://github.com/apache/beam/tree/master/sdks/python/apache_beam/yaml/pipeline.schema.yaml |
| |
| $defs: |
| |
| transformBase: |
| type: object |
| properties: |
| type: { type: string } |
| name: { type: string } |
| windowing: |
| $ref: '#/$defs/windowing' |
| resource_hints: |
| $ref: '#/$defs/resource_hints' |
| input: |
| oneOf: |
| - type: string |
| - type: array |
| items: { type: string } |
| - type: object |
| properties: { __line__: {}} |
| additionalProperties: |
| type: string |
| output: |
| oneOf: |
| - type: string |
| - type: object |
| properties: { __line__: {}} |
| additionalProperties: |
| type: string |
| output_schema: |
| type: object |
| additionalProperties: true |
| required: |
| - type |
| |
| nestedTransform: |
| allOf: |
| - type: object |
| properties: |
| type: {} |
| name: {} |
| input: {} |
| output: {} |
| windowing: {} |
| resource_hints: {} |
| transforms: |
| type: array |
| items: |
| $ref: '#/$defs/transform' |
| extra_transforms: |
| type: array |
| items: |
| $ref: '#/$defs/transform' |
| source: |
| $ref: '#/$defs/transform' |
| sink: |
| $ref: '#/$defs/transform' |
| __line__: {} |
| __uuid__: {} |
| additionalProperties: false |
| - anyOf: |
| - required: |
| - transforms |
| - required: |
| - source |
| - sink |
| |
| implicitInputOutputs: |
| properties: |
| transforms: |
| type: array |
| items: |
| properties: |
| # Must be implicit. |
| input: { not: {} } |
| output: { not: {} } |
| source: |
| properties: |
| # Must be implicit. |
| input: { not: {} } |
| output: { not: {} } |
| sink: |
| properties: |
| # Must be implicit. |
| input: { not: {} } |
| output: { not: {} } |
| |
| transform: |
| allOf: |
| - $ref: '#/$defs/transformBase' |
| - if: |
| properties: { type: { const: composite }} |
| then: |
| allOf: |
| - $ref: '#/$defs/nestedTransform' |
| - properties: |
| extra_transforms: { not: {} } |
| - if: |
| properties: { type: { const: chain }} |
| then: |
| allOf: |
| - $ref: '#/$defs/nestedTransform' |
| - $ref: '#/$defs/implicitInputOutputs' |
| |
| - if: |
| not: |
| anyOf: |
| - properties: { type: { const: composite }} |
| - properties: { type: { const: chain }} |
| then: |
| properties: |
| type: {} |
| name: {} |
| input: {} |
| output: {} |
| output_schema: { type: object } |
| windowing: {} |
| resource_hints: {} |
| config: { type: object } |
| __line__: {} |
| __uuid__: {} |
| additionalProperties: false |
| |
| windowing: {} # TODO |
| |
| resource_hints: |
| type: object |
| |
| provider: |
| # TODO(robertwb): Consider enumerating the provider types along with |
| # the arguments they accept/expect (possibly in a separate schema file). |
| type: object |
| properties: |
| type: { type: string } |
| transforms: |
| type: object |
| properties: { __line__: {}} |
| additionalProperties: |
| type: string |
| config: { type: object } |
| __line__: {} |
| __uuid__: {} |
| additionalProperties: false |
| required: |
| - type |
| - transforms |
| - config |
| |
| providerInclude: |
| # TODO(robertwb): Consider enumerating the provider types along with |
| # the arguments they accept/expect (possibly in a separate schema file). |
| type: object |
| properties: |
| include: { type: string } |
| __line__: {} |
| __uuid__: {} |
| additionalProperties: false |
| required: |
| - include |
| |
| providerOrProviderInclude: |
| if: |
| allOf: [ |
| { properties: { include: { type: string }}}, |
| { required: [ "include" ] } |
| ] |
| then: |
| $ref: '#/$defs/providerInclude' |
| else: |
| $ref: '#/$defs/provider' |
| |
| testElementsSpec: |
| type: object |
| properties: |
| name: { type: string } |
| elements: |
| type: array |
| item: |
| type: object |
| __line__: {} |
| __uuid__: {} |
| additionalProperties: false |
| |
| testSpec: |
| type: object |
| properties: |
| name: { type: string } |
| mock_inputs: |
| type: array |
| items: |
| $ref: '#/$defs/testElementsSpec' |
| mock_outputs: |
| type: array |
| items: |
| $ref: '#/$defs/testElementsSpec' |
| expected_inputs: |
| type: array |
| items: |
| $ref: '#/$defs/testElementsSpec' |
| expected_outputs: |
| type: array |
| items: |
| $ref: '#/$defs/testElementsSpec' |
| allowed_sources: |
| type: array |
| items: |
| { type: string } |
| __line__: {} |
| __uuid__: {} |
| additionalProperties: false |
| |
| |
| type: object |
| properties: |
| pipeline: |
| allOf: |
| # These are the only top-level properties defined in pipeline. |
| - type: object |
| properties: |
| type: |
| oneOf: |
| - { const: composite } |
| - { const: chain } |
| windowing: |
| $ref: '#/$defs/windowing' |
| resource_hints: |
| $ref: '#/$defs/resource_hints' |
| transforms: {} |
| extra_transforms: {} |
| sink: {} |
| source: {} |
| __line__: {} |
| __uuid__: {} |
| additionalProperties: false |
| # This defines the allowable contents of the attributes above. |
| - $ref: '#/$defs/nestedTransform' |
| # A chain-type transform, like a chain composite, must have implicit io. |
| - if: |
| properties: { type: { const: chain }} |
| required: [type] |
| then: |
| $ref: '#/$defs/implicitInputOutputs' |
| providers: |
| type: array |
| items: |
| $ref: '#/$defs/providerOrProviderInclude' |
| options: |
| type: object |
| tests: |
| type: array |
| items: |
| $ref: '#/$defs/testSpec' |
| required: |
| - pipeline |