class_docstr: Creates new connection to Salesforce and allows you to pull data out of SFDC and save it to a file.
  
  You can then use that file with other Airflow operators to move the data into another data source.
  
  :param conn_id: The name of the connection that has the parameters needed to connect to Salesforce.
      The connection should be of type `Salesforce`.
  :param session_id: The access token for a given HTTP request session.
  :param session: A custom HTTP request session. This enables the use of requests Session features not
      otherwise exposed by `simple_salesforce`.
  
  .. note::
      A connection to Salesforce can be created via several authentication options:
  
      * Password: Provide Username, Password, and Security Token
      * Direct Session: Provide a `session_id` and either Instance or Instance URL
      * OAuth 2.0 JWT: Provide a Consumer Key and either a Private Key or Private Key File Path
      * IP Filtering: Provide Username, Password, and an Organization ID
  
      If in sandbox, enter a Domain value of 'test'.
docstr: Get all instances of the `object` from Salesforce.
  
  For each model, only get the fields specified in fields.
  
  All we really do underneath the hood is run:
      SELECT <fields> FROM <obj>;
  
  :param obj: The object name to get from Salesforce.
  :param fields: The fields to get from the object.
  :return: all instances of the object from Salesforce.
docstr_tok: ["Get","all","instances","of","the","`","object","`","from","Salesforce",".","For","each","model",",","only","get","the","fields","specified","in","fields",".","All","we","really","do","underneath","the","hood","is","run",":","SELECT","<","fields",">","FROM","<","obj",">",";",":","param","obj",":","The","object","name","to","get","from","Salesforce",".",":","param","fields",":","The","fields","to","get","from","the","object",".",":","return",":","all","instances","of","the","object","from","Salesforce","."]
code: def get_object_from_salesforce(
      self, obj: str, fields: Iterable[str]
  ) -> dict:
      """
      Get all instances of the `object` from Salesforce.
  
      For each model, only get the fields specified in fields.
  
      All we really do underneath the hood is run:
          SELECT <fields> FROM <obj>;
  
      :param obj: The object name to get from Salesforce.
      :param fields: The fields to get from the object.
      :return: all instances of the object from Salesforce.
      """
      query = f"SELECT {','.join(fields)} FROM {obj}"
  
      self.log.info(
          "Making query to Salesforce: %s",
          query
          if len(query) < 30
          else " ... ".join([query[:15], query[-15:]]),
      )
  
      return self.make_query(query)
  
imports: from __future__ import annotations
  import logging
  import time
  from functools import cached_property
  from typing import TYPE_CHECKING, Any, Iterable
  from simple_salesforce import Salesforce, api
  from airflow.hooks.base import BaseHook
label_desc: Use image node_id 10 for calling the SalesforceHook obj's underlying member method code with example usage: obj.get_object_from_salesforce(obj, fields) and returns: self