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

# Setting about Java gateway server
java_gateway:
  # Authentication token for connection from python api to python gateway server. Should be changed the default value
  # when you deploy in public network.
  auth_token: jwUDzpLsNKEFER4*a8gruBH_GsAurNxU7A@Xc

  # The address of Python gateway server start. Set its value to `0.0.0.0` if your Python API run in different
  # between Python gateway server. It could be be specific to other address like `127.0.0.1` or `localhost`
  address: 127.0.0.1

  # The port of Python gateway server start. Define which port you could connect to Python gateway server from
  # Python API models.
  port: 25333

  # Whether automatically convert Python objects to Java Objects. Default value is ``True``. There is some
  # performance lost when set to ``True`` but for now pydolphinscheduler do not handle the convert issue between
  # java and Python, mark it as TODO item in the future.
  auto_convert: true

# Setting about dolphinscheduler default value, will use the value set below if property do not set, which
# including ``user``, ``workflow`` 
default:
  # Default value for dolphinscheduler's user object
  user:
    name: userPythonGateway
    password: userPythonGateway
    email: userPythonGateway@dolphinscheduler.com
    tenant: tenant_pydolphin
    phone: 11111111111
    state: 1
  # Default value for dolphinscheduler's workflow object
  workflow:
    project: project-pydolphin
    user: userPythonGateway
    queue: queuePythonGateway
    worker_group: default
    # Release state of workflow, default value is ``online`` which mean setting workflow online when it submits
    # to Java gateway, if you want to set workflow offline set its value to ``offline``
    release_state: online
    time_zone: Asia/Shanghai
    # Warning type of the workflow, default value is ``NONE`` mean do not warn user in any cases of workflow state,
    # change to ``FAILURE`` if you want to warn users when workflow failed. All available enum value are
    # ``NONE``, ``SUCCESS``, ``FAILURE``, ``ALL`` 
    warning_type: NONE
    # Default execution type about how to run multiple workflow instances, default value is ``parallel`` which
    # mean run all workflow instances parallel and the other value is ``SERIAL_WAIT``, ``SERIAL_DISCARD``, ``SERIAL_PRIORITY``
    execution_type: parallel
