* handwritten low code manifest example components * add MinMaxDatetime to jsonschema * add a basic gradle command to generate manifest components * Add auth components to handwritten component schema - ApiKeyAuthenticator - BasicHttpAuthenticator - BearerAuthenticator - DeclarativeOauth2Authenticator - NoAuth * Respect optional properties in DeclarativeOauth2Authenticator * Fix `Dict[str, Any]` mapping in auth components * add default error handler composite error handler and http response filter components * [low code component schema] adding backoff strategies to schema * [low code component schema] fix float types * [low code component schema] add RecordFilter * Remove `config` from auth components * [low code component schema] add Interpolation (with pending question on 'type' not being defined) * Add CartesianProductStreamSlicer & DatetimeStreamSlicer * Add ListStreamSlicer, and fix nesting of DatetimeStreamSlicer * [low code component schema] add InterpolatedRequestOptionsProvider * Add slicer components, and fix a couple of components after reviewing output * [low code component schema] adding transformations and adding type to interpolators * adding spec and a few small tweaks * Add DefaultSchemaLoader * [low code component schema] attempt on custom class * Add descriptions for auth components * add RequestOption * remove interpolated objects from the schema in favor of strings only * a few schema fixes and adding some custom pagination and stream slicer * [low code component schema] fix CustomBackoffStrategy * Add CustomRecordExtractor * add some description and add additional properties * insert a transformer to hydrate default manifest components and perform validation against the handwritten schema * [low code component schema] validating existing schemas * [low code component schema] clean validation script * add manifest transformer tests and a few tweaks to the schema * Revert "[low code component schema] clean validation script" This reverts commit2408f41cf6. * Revert "[low code component schema] validating existing schemas" This reverts commit9d39977815. * [low code component schema] integrate validation script to gradle * [low code component schema] updating validation script permissions * remove a few model gen spike files and clean up comments * default types should take parent type into account and a few schema changes * add inline schema components and fix validation bugs * add types to every component's literal enum and more little schema fixes * missing component prefix * pr feedback, renaming the schema and updating various docs * fixing schema bugs from testing and new components * last few small tweaks and fixes and fix the script * bump the version before publsih * include the declarative_component_schema.yaml as package data so its included when package is published * roll the version to publish Co-authored-by: Catherine Noll <noll.catherine@gmail.com> Co-authored-by: maxi297 <maxime@airbyte.io>
48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
#
|
|
# Copyright (c) 2022 Airbyte, Inc., all rights reserved.
|
|
#
|
|
|
|
from dataclasses import InitVar, dataclass
|
|
from typing import Any, Final, List, Mapping
|
|
|
|
from airbyte_cdk.sources.declarative.interpolation.jinja import JinjaInterpolation
|
|
from airbyte_cdk.sources.declarative.types import Config
|
|
from dataclasses_jsonschema import JsonSchemaMixin
|
|
|
|
FALSE_VALUES: Final[List[Any]] = ["False", "false", "{}", "[]", "()", "", "0", "0.0", {}, False, [], (), set()]
|
|
|
|
|
|
@dataclass
|
|
class InterpolatedBoolean(JsonSchemaMixin):
|
|
f"""
|
|
Wrapper around a string to be evaluated to a boolean value.
|
|
The string will be evaluated as False if it interpolates to a value in {FALSE_VALUES}
|
|
|
|
Attributes:
|
|
condition (str): The string representing the condition to evaluate to a boolean
|
|
"""
|
|
condition: str
|
|
options: InitVar[Mapping[str, Any]]
|
|
|
|
def __post_init__(self, options: Mapping[str, Any]):
|
|
self._default = "False"
|
|
self._interpolation = JinjaInterpolation()
|
|
self._options = options
|
|
|
|
def eval(self, config: Config, **additional_options):
|
|
"""
|
|
Interpolates the predicate condition string using the config and other optional arguments passed as parameter.
|
|
|
|
:param config: The user-provided configuration as specified by the source's spec
|
|
:param additional_options: Optional parameters used for interpolation
|
|
:return: The interpolated string
|
|
"""
|
|
if isinstance(self.condition, bool):
|
|
return self.condition
|
|
else:
|
|
evaluated = self._interpolation.eval(self.condition, config, self._default, options=self._options, **additional_options)
|
|
if evaluated in FALSE_VALUES:
|
|
return False
|
|
# The presence of a value is generally regarded as truthy, so we treat it as such
|
|
return True
|