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

"""Enumeration of URNs specific to the Python SDK.

For internal use only; no backwards-compatibility guarantees."""

PICKLED_CODER = "beam:coder:pickled_python:v1"
PICKLED_COMBINE_FN = "beam:combinefn:pickled_python:v1"
PICKLED_DOFN = "beam:dofn:pickled_python:v1"
PICKLED_DOFN_INFO = "beam:dofn:pickled_python_info:v1"
PICKLED_SOURCE = "beam:source:pickled_python:v1"
PICKLED_TRANSFORM = "beam:transform:pickled_python:v1"
PICKLED_WINDOW_MAPPING_FN = "beam:window_mapping_fn:pickled_python:v1"
PICKLED_WINDOWFN = "beam:window_fn:pickled_python:v1"
PICKLED_VIEWFN = "beam:view_fn:pickled_python_data:v1"

IMPULSE_READ_TRANSFORM = "beam:transform:read_from_impulse_python:v1"

GENERIC_COMPOSITE_TRANSFORM = "beam:transform:generic_composite:v1"

KEY_WITH_NONE_DOFN = "beam:dofn:python_key_with_none:v1"
PACKED_COMBINE_FN = "beam:combinefn:packed_python:v1"

# A coder for a tuple.
# Components: The coders for the tuple elements, in order.
TUPLE_CODER = "beam:coder:tuple:v1"

# This allows us to decode TimestampedPrefixed(LengthPrefixed(AnyWindowCoder)).
TIMESTAMP_PREFIXED_OPAQUE_WINDOW_CODER = (
    "beam:timestamp_prefixed_opaque_window_coder:v1")

# Invoke UserFns in process, via direct function calls.
# Payload: None.
EMBEDDED_PYTHON = "beam:env:embedded_python:v1"

# Invoke UserFns in process, but over GRPC channels.
# Payload: (optional) Number of worker threads, followed by ',' and the size of
# the state cache, as a decimal string, e.g. '2,1000'.
EMBEDDED_PYTHON_GRPC = "beam:env:embedded_python_grpc:v1"

# Invoke UserFns via a yet-to-be-started loopback external worker.
# Payload: None.
EMBEDDED_PYTHON_LOOPBACK = "beam:env:embedded_python_loopback:v1"

# Instantiate SDK harness via a command line provided in the payload.
# This is different than the standard process environment in that it
# starts up the SDK harness directly, rather than the bootstrapping
# and artifact fetching code.
# (Used for testing.)
SUBPROCESS_SDK = "beam:env:harness_subprocess_python:v1"

# An annotation that indicates combiner packing is OK in all sub-transforms
# of this transform.  This optimization may result in renamed counters and
# PCollection element counts.
APPLY_COMBINER_PACKING = "beam:annotation:apply_combiner_packing:v1"
