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

stdin_port = 48691
stdin_port = ${?STDIN_PORT}

shell_port = 40544
shell_port = ${?SHELL_PORT}

iopub_port = 43462
iopub_port = ${?IOPUB_PORT}

control_port = 44808
control_port = ${?CONTROL_PORT}

hb_port = 49691
hb_port = ${?HB_PORT}

ip = "127.0.0.1"
ip = ${?IP}

transport = "tcp"
signature_scheme = "hmac-sha256"
key = ""
spark.master = "local[*]"

deps_dir = ${?DEPS_DIR}

interpreter_args = []

magic_urls = []
magic_urls = [${?MAGIC_URLS}]

max_interpreter_threads = 4
max_interpreter_threads = ${?MAX_INTERPRETER_THREADS}

send_empty_output = false
send_empty_output = ${?SEND_EMPTY_OUTPUT}

default_interpreter = "Scala"
default_interpreter = ${?DEFAULT_INTERPRETER}

default_interpreter_plugin = [
  "Scala:org.apache.toree.kernel.interpreter.scala.ScalaInterpreter",
  "PySpark:org.apache.toree.kernel.interpreter.pyspark.PySparkInterpreter",
  "SparkR:org.apache.toree.kernel.interpreter.sparkr.SparkRInterpreter",
  "SQL:org.apache.toree.kernel.interpreter.sql.SqlInterpreter"
]

default_repositories = []
default_repositories = [${?DEFAULT_REPOSITORIES}]

default_repository_credentials = []
default_repository_credentials = [${?DEFAULT_REPOSITORY_CREDENTIALS}]
