Skip to content

Commit eff7beb

Browse files
committed
Add dependency support for delegating providers.
1 parent 8e9f26e commit eff7beb

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

sdks/python/apache_beam/yaml/yaml_provider.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,15 @@ def _affinity(self, other: "Provider"):
138138

139139
@functools.cache
140140
def with_extra_dependencies(self, dependencies: Iterable[str]):
141-
return self._with_extra_dependencies(dependencies)
141+
result = self._with_extra_dependencies(dependencies)
142+
if not hasattr(result, 'to_json'):
143+
result.to_json = lambda: {'type': type(result).__name__}
144+
return result
142145

143146
def _with_extra_dependencies(self, dependencies: Iterable[str]):
144-
raise ValueError('This provider does not support additional dependencies.')
147+
raise ValueError(
148+
'This provider of type %s does not support additional dependencies.' %
149+
type(self).__name__)
145150

146151

147152
def as_provider(name, provider_or_constructor):
@@ -376,6 +381,8 @@ def is_path_or_urn(package):
376381
if is_path_or_urn(package) else package for package in packages
377382
]))
378383

384+
self._packages = packages
385+
379386
def available(self):
380387
return True # If we're running this script, we have Python installed.
381388

@@ -402,6 +409,10 @@ def _affinity(self, other: "Provider"):
402409
else:
403410
return super()._affinity(other)
404411

412+
def _with_extra_dependencies(self, dependencies: Iterable[str]):
413+
return ExternalPythonProvider(
414+
self._urns, None, set(self._packages) + set(dependencies))
415+
405416

406417
@ExternalProvider.register_provider_type('yaml')
407418
class YamlProvider(Provider):
@@ -1013,6 +1024,11 @@ def create_transform(
10131024
yaml_create_transform: Any) -> beam.PTransform:
10141025
return self._transforms[typ](self._underlying_provider, **config)
10151026

1027+
def _with_extra_dependencies(self, dependencies: Iterable[str]):
1028+
return TranslatingProvider(
1029+
self._transforms,
1030+
self._underlying_provider._with_extra_dependencies(dependencies))
1031+
10161032

10171033
def create_java_builtin_provider():
10181034
"""Exposes built-in transforms from Java as well as Python to maximize
@@ -1292,6 +1308,14 @@ def underlying_provider(self):
12921308
def cache_artifacts(self):
12931309
self._underlying_provider.cache_artifacts()
12941310

1311+
def _with_extra_dependencies(self, dependencies: Iterable[str]):
1312+
return RenamingProvider(
1313+
self._transforms,
1314+
None,
1315+
self._mappings,
1316+
self._underlying_provider._with_extra_dependencies(dependencies),
1317+
self._defaults)
1318+
12951319

12961320
def _as_list(func):
12971321
@functools.wraps(func)

0 commit comments

Comments
 (0)