29 lines
1.0 KiB
Python
29 lines
1.0 KiB
Python
#
|
|
# Copyright (c) 2022 Airbyte, Inc., all rights reserved.
|
|
#
|
|
|
|
from typing import Any, Mapping
|
|
|
|
from airbyte_cdk.sources.declarative.interpolation.interpolation import Interpolation
|
|
from airbyte_cdk.sources.declarative.interpolation.jinja import JinjaInterpolation
|
|
|
|
|
|
class InterpolatedMapping:
|
|
def __init__(self, mapping: Mapping[str, Any], interpolation: Interpolation = JinjaInterpolation()):
|
|
self._mapping = mapping
|
|
self._interpolation = interpolation
|
|
|
|
def eval(self, config, **kwargs):
|
|
interpolated_values = {
|
|
self._interpolation.eval(name, config, **kwargs): self._eval(value, config, **kwargs) for name, value in self._mapping.items()
|
|
}
|
|
return interpolated_values
|
|
|
|
def _eval(self, value, config, **kwargs):
|
|
# The values in self._mapping can be of Any type
|
|
# We only want to interpolate them if they are strings
|
|
if type(value) == str:
|
|
return self._interpolation.eval(value, config, **kwargs)
|
|
else:
|
|
return value
|