def get_client(task: BaseTask) -> ZGWClient: # find the configured service task_variables = task.get_variables() app_id = task_variables.get(PROCESS_VAR_NAME) topic_name = task.topic_name default_services = DefaultService.objects.filter( task_mapping__topic_name=topic_name, service__api_type=APITypes.orc, alias=ALIAS).select_related("service") if not default_services: raise NoService( f"Topic '{topic_name}' is missing service with alias '{ALIAS}'.") service = default_services[0].service client = service.build_client() client._log.task = task client.operation_suffix_mapping = { **client.operation_suffix_mapping, "retrieve": "_retrieve", } # set the auth if we have the bptlAppId set if app_id: auth_headers = get_credentials(app_id, service)[service] if auth_headers: client.set_auth_value(auth_headers) return client
def get_client_for(self, document_url: str) -> ZGWClient: for client in self._clients: if document_url.startswith(client.base_url): return client else: service = Service.get_service(document_url) auth_headers = get_credentials(self.app_id, service).get(service) client = service.build_client() if auth_headers: client.set_auth_value(auth_headers) return client
def get_client(self, service_type: str): """ create ZGW client with requested parameters """ task_variables = self.task.get_variables() topic_name = self.task.topic_name default_services = DefaultService.objects.filter( task_mapping__topic_name=topic_name, service__api_type=service_type).select_related("service") if not default_services: raise NoService( f"No {service_type} service is configured for topic '{topic_name}'" ) if len(default_services) > 1: raise MultipleServices( f"Multiple '{service_type}' services configured for topic '{topic_name}'" ) service = default_services[0].service client = service.build_client() client._log.task = self.task if PROCESS_VAR_NAME not in task_variables and "services" not in task_variables: raise NoService("Could not determine service credentials.") if PROCESS_VAR_NAME in task_variables: app_id = task_variables[PROCESS_VAR_NAME] auth_headers = get_credentials(app_id, service)[service] if auth_headers: client.set_auth_value(auth_headers) # fall back on the old behaviour else: warnings.warn( "The 'services' credentials variable is deprecated. Please migrate " f"as soon as possible to the new {PROCESS_VAR_NAME} application identifier " "variable", DeprecationWarning, ) services_vars = task_variables["services"] alias = default_services[0].alias jwt = services_vars.get(alias, {}).get("jwt") if not jwt: raise NoAuth( f"Expected 'jwt' key for service with alias '{alias}'") client.set_auth_value({"Authorization": jwt}) return client
def get_client(task: BaseTask) -> ZGWClient: service = get_alias_service(task, ALIAS) client = service.build_client() client._log.task = task # set the auth if we have the bptlAppId set app_id = task.get_variables().get(APP_ID_PROCESS_VAR_NAME) if app_id: auth_headers = get_credentials(app_id, service)[service] if auth_headers: client.set_auth_value(auth_headers) # export the client return client
def get_client(task: BaseTask, service: Service, cls=None) -> "JSONClient": """ Get a client instance for the given task and service. :param task: An instance of the work unit task being executed :param service: The service to build an authenticated client for :param cls: The particular (sub)class to use for the client instance. Defaults to :class:`JSONClient`. """ cls = cls or JSONClient app_id = task.get_variables().get(APP_ID_PROCESS_VAR_NAME) auth_header = get_credentials(app_id, service)[service] # export the client client = cls(service, auth_header) client.task = task return client
def populate_clients(self, task, document_urls: List[str]) -> None: # fetch all the DRC services, single query drcs = Service.objects.filter(api_type=APITypes.drc) # only keep the DRCs that we actually need _relevant_drcs = [] for drc in drcs: if any(doc.startswith(drc.api_root) for doc in document_urls): _relevant_drcs.append(drc) continue # support for old services-style credentials, remove in 1.1 if self._services: default_services = DefaultService.objects.filter( task_mapping__topic_name=task.topic_name, service__in=_relevant_drcs, ).select_related("service") default_service_aliases = { default_service.service: default_service.alias for default_service in default_services } # build the clients service_credentials = get_credentials(self.app_id, *_relevant_drcs) for drc in sorted(_relevant_drcs, key=lambda svc: len(svc.api_root), reverse=True): client = drc.build_client() auth_headers = service_credentials.get(drc) if self.app_id and auth_headers: client.set_auth_value(auth_headers) elif self._services: warnings.warn( "Support for credentials in services variable will be removed in 1.1", DeprecationWarning, ) alias = default_service_aliases[drc] jwt = self._services.get(alias, {}).get("jwt") if jwt: client.set_auth_value(jwt) client._log.task = task self._clients.append(client)