class_docstr: Injects secrets from environmental variables into the execution
  context.
class_docstr_tok: ["Injects","secrets","from","environmental","variables","into","the","execution","context","."]
docstr: Get the value of a secret.
  
  Args:
      key (str): unique secret identifier
      kwargs: additional keyword arguments to pass to the secrets
      client for authentication if required
docstr_tok: ["Get","the","value","of","a","secret",".","Args",":","key","(","str",")",":","unique","secret","identifier","kwargs",":","additional","keyword","arguments","to","pass","to","the","secrets","client","for","authentication","if","required"]
code: def get_secret_sync(
      self, key: str, operator_uri: str, **kwargs
  ) -> Optional[fois.ISecret]:
      """
      Get the value of a secret.
  
      Args:
          key (str): unique secret identifier
          kwargs: additional keyword arguments to pass to the secrets
          client for authentication if required
      """
      # pylint: disable=no-member
  
      secret_requirements = self._registered_secrets.get(
          operator_uri, None
      )
      if not secret_requirements:
          logging.error(
              f"Cannot resolve secrets for unregistered "
              f"operator`{operator_uri}` "
          )
          return None
      if key not in secret_requirements:
          logging.error(
              f"Cannot resolve secret {key} because it is not "
              f"included in the plugins definition "
          )
          return None
      return self.client.get_sync(key, **kwargs)
  
imports: import logging
  import traceback
  import typing
  from typing import Optional
  from ..internal import secrets
label_desc: Use image node_id 4 for calling the PluginSecretsResolver obj's underlying member method code with example usage: obj.get_secret_sync(key, operator_uri) and returns: self, None, None