Source code for ayx_python_sdk.providers.file_provider.file_provider_input_connection
# Copyright (C) 2022 Alteryx, Inc. All rights reserved.
#
# Licensed under the ALTERYX SDK AND API LICENSE AGREEMENT;
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.alteryx.com/alteryx-sdk-and-api-license-agreement
#
# 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.
"""File Provider Input Connection class."""
from typing import Optional, TYPE_CHECKING
from ayx_python_sdk.core.doc_utilities import inherit_docs
from ayx_python_sdk.core.input_connection_base import InputConnectionBase
from ayx_python_sdk.core.metadata import Metadata
from ayx_python_sdk.core.record_packet import RecordPacket
import pandas as pd
if TYPE_CHECKING:
from ayx_python_sdk.providers.file_provider.file_provider_input_anchor import (
FileProviderInputAnchor,
)
[docs]@inherit_docs
class FileProviderInputConnection(InputConnectionBase):
"""An input connection contains incoming record and metadata information."""
def __init__(
self,
name: str,
metadata: Metadata,
packet: Optional[RecordPacket] = None,
anchor: Optional["FileProviderInputAnchor"] = None,
) -> None:
"""
Instantiate a file provider input connection.
Parameters
----------
name
Name of the input connection.
metadata
Metadata for the input connections.
packet
Record information for the input connection.
anchor
Input anchor associated with this connection.
"""
if packet and packet.metadata != metadata:
raise ValueError(
"Record packet metadata must be the same as anchor metadata."
)
self.__packet = packet
self.__name = name
self.__metadata = metadata
self.__anchor = anchor
self.max_packet_size = None
self.progress = 0
@property
def name(self) -> str: # noqa: D102
return self.__name
@property
def metadata(self) -> Optional[Metadata]: # noqa: D102
return self.__metadata
@property
def anchor(self) -> "FileProviderInputAnchor": # noqa: D102
if self.__anchor:
return self.__anchor
raise RuntimeError("This input connection is not associated with an anchor.")
[docs] def read(self) -> RecordPacket: # noqa: D102
if self.metadata is None:
raise ValueError("Metadata must be set.")
return self.__packet or RecordPacket(
self.metadata, pd.DataFrame(columns=[field.name for field in self.metadata])
)
def _get_max_packet_size(self) -> Optional[int]:
return self.__max_packet_size
def _set_max_packet_size(self, value: Optional[int]) -> None:
"""
File provider doesn't use max_packet size - automatically set to None.
Otherwise, a user could try and set max packet size for the file provider and would not know why it was not affecting their tool.
"""
if value is not None:
return # TODO: warn user that the file provider does not currently support setting max_packet_size
self.__max_packet_size = value
@property
def progress(self) -> float: # noqa: D102
return self.__progress
@progress.setter
def progress(self, value: float) -> None: # noqa: D102
if value < 0:
raise ValueError("Progress percentage must be greater than 0.")
self.__progress = value