|
| 1 | +from logging import Logger |
| 2 | +from typing import Awaitable, Callable |
| 3 | + |
| 4 | +from estuary_cdk.flow import ( |
| 5 | + ConnectorSpec, |
| 6 | +) |
| 7 | +from estuary_cdk.capture import ( |
| 8 | + BaseCaptureConnector, |
| 9 | + Request, |
| 10 | + Task, |
| 11 | + common, |
| 12 | + request, |
| 13 | + response, |
| 14 | +) |
| 15 | + |
| 16 | +from .resources import all_resources, validate_credentials |
| 17 | +from .models import ( |
| 18 | + ConnectorState, |
| 19 | + EndpointConfig, |
| 20 | + ResourceConfig, |
| 21 | +) |
| 22 | + |
| 23 | + |
| 24 | +class Connector( |
| 25 | + BaseCaptureConnector[EndpointConfig, ResourceConfig, ConnectorState], |
| 26 | +): |
| 27 | + def request_class(self): |
| 28 | + return Request[EndpointConfig, ResourceConfig, ConnectorState] |
| 29 | + |
| 30 | + async def spec(self, log: Logger, _: request.Spec) -> ConnectorSpec: |
| 31 | + return ConnectorSpec( |
| 32 | + configSchema=EndpointConfig.model_json_schema(), |
| 33 | + oauth2=None, |
| 34 | + documentationUrl="https://go.estuary.dev/source-google-play", |
| 35 | + resourceConfigSchema=ResourceConfig.model_json_schema(), |
| 36 | + resourcePathPointers=ResourceConfig.PATH_POINTERS, |
| 37 | + ) |
| 38 | + |
| 39 | + async def discover( |
| 40 | + self, log: Logger, discover: request.Discover[EndpointConfig] |
| 41 | + ) -> response.Discovered[ResourceConfig]: |
| 42 | + resources = await all_resources(log, self, discover.config) |
| 43 | + return common.discovered(resources) |
| 44 | + |
| 45 | + async def validate( |
| 46 | + self, |
| 47 | + log: Logger, |
| 48 | + validate: request.Validate[EndpointConfig, ResourceConfig], |
| 49 | + ) -> response.Validated: |
| 50 | + await validate_credentials(log, self, validate.config) |
| 51 | + resources = await all_resources(log, self, validate.config) |
| 52 | + resolved = common.resolve_bindings(validate.bindings, resources) |
| 53 | + return common.validated(resolved) |
| 54 | + |
| 55 | + async def open( |
| 56 | + self, |
| 57 | + log: Logger, |
| 58 | + open: request.Open[EndpointConfig, ResourceConfig, ConnectorState], |
| 59 | + ) -> tuple[response.Opened, Callable[[Task], Awaitable[None]]]: |
| 60 | + resources = await all_resources(log, self, open.capture.config) |
| 61 | + resolved = common.resolve_bindings(open.capture.bindings, resources) |
| 62 | + return common.open(open, resolved) |
0 commit comments