code: def get_by_func_name_and_user_email(
      self,
      context: AuthedServiceContext,
      service_func_name: str,
      user_email: str,
      user_id: UID,
  ) -> Union[SyftSuccess, SyftError]:
      user_service = context.node.get_service("userservice")
      user_verify_key = user_service.user_verify_key(user_email)
  
      if isinstance(user_verify_key, SyftError):
          return user_verify_key
  
      kwargs = {
          "id": user_id,
          "email": user_email,
          "verify_key": user_verify_key,
          "service_func_name": service_func_name,
      }
  
      result = self.stash.find_all(
          credentials=context.credentials, **kwargs
      )
      if result.is_err():  # or len(result) > 1
          return result
  
imports: from typing import List
  from typing import Optional
  from typing import Union
  from ...serde.serializable import serializable
  from ...store.document_store import DocumentStore
  from ...types.uid import UID
  from ...util.telemetry import instrument
  from ..code.user_code import SubmitUserCode
  from ..code.user_code import UserCode
  from ..context import AuthedServiceContext
  from ..response import SyftError
  from ..response import SyftSuccess
  from ..service import AbstractService
  from ..service import service_method
  from ..user.user_roles import DATA_OWNER_ROLE_LEVEL
  from ..user.user_roles import DATA_SCIENTIST_ROLE_LEVEL
  from .code_history import CodeHistoriesDict
  from .code_history import CodeHistory
  from .code_history import CodeHistoryView
  from .code_history import UsersCodeHistoriesDict
  from .code_history_stash import CodeHistoryStash
label_desc: Use image node_id 10 for calling the CodeHistoryService obj's underlying member method code with example usage: obj.get_by_func_name_and_user_email(context, service_func_name, user_email, user_id) and returns: user_verify_key, result