| # | |
| # 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 |