Source code for salespyforce.utils.helper
# -*- coding: utf-8 -*-
"""
:Module: salespyforce.utils.helper
:Synopsis: Module that allows the salespyforce library to leverage a helper configuration file
:Usage: ``from salespyforce.utils import helper``
:Example: ``helper_settings = helper.get_settings('/tmp/helper.yml', 'yaml')``
:Created By: Jeff Shurtliff
:Last Modified: Jeff Shurtliff
:Modified Date: 03 Feb 2026
"""
import json
import yaml
from .. import errors
from . import log_utils
from .core_utils import get_file_type
# Initialize logging within the module
logger = log_utils.initialize_logging(__name__)
[docs]
def import_helper_file(file_path, file_type):
"""This function imports a YAML (.yml) or JSON (.json) helper config file.
:param file_path: The file path to the YAML file
:type file_path: str
:param file_type: Defines the file type as either ``yaml`` or ``json``
:type file_type: str
:returns: The parsed configuration data
:raises: :py:exc:`FileNotFoundError`,
:py:exc:`salespyforce.errors.exceptions.InvalidHelperFileTypeError`
"""
with open(file_path, 'r') as cfg_file:
if file_type == 'yaml':
helper_cfg = yaml.safe_load(cfg_file)
elif file_type == 'json':
helper_cfg = json.load(cfg_file)
else:
raise errors.exceptions.InvalidHelperFileTypeError()
logger.info(f'The helper file {file_path} was imported successfully.')
return helper_cfg
def _convert_yaml_to_bool(_yaml_bool_value):
"""This function converts the 'yes' and 'no' YAML values to traditional Boolean values."""
_true_values = ['yes', 'true']
if _yaml_bool_value.lower() in _true_values:
_bool_value = True
else:
_bool_value = False
return _bool_value
def _get_connection_info(_helper_cfg):
"""This function parses any connection information found in the helper file."""
_connection_info = {}
_connection_keys = ['username', 'password', 'base_url', 'endpoint_url',
'client_key', 'client_secret', 'org_id', 'security_token']
for _key in _connection_keys:
if _key in _helper_cfg['connection']:
_connection_info[_key] = _helper_cfg['connection'][_key]
return _connection_info
def _collect_values(_top_level_keys, _helper_cfg, _helper_dict=None, _ignore_missing=False):
"""This function loops through a list of top-level keys to collect their corresponding values.
:param _top_level_keys: One or more top-level keys that might be found in the helper config file
:type _top_level_keys: list, tuple, set, str
:param _helper_cfg: The configuration parsed from the helper configuration file
:type _helper_cfg: dict
:param _helper_dict: A predefined dictionary to which the key value pairs should be added
:type _helper_dict: dict, None
:param _ignore_missing: Indicates whether fields with null values should be ignored (``False`` by default)
:type _ignore_missing: bool
:returns: A dictionary with the identified key value pairs
"""
_helper_dict = {} if not _helper_dict else _helper_dict
_top_level_keys = (_top_level_keys, ) if isinstance(_top_level_keys, str) else _top_level_keys
for _key in _top_level_keys:
if _key in _helper_cfg:
_key_val = _helper_cfg[_key]
if _key_val in HelperParsing.yaml_boolean_values:
_key_val = HelperParsing.yaml_boolean_values.get(_key_val)
_helper_dict[_key] = _key_val
elif _key == "ssl_verify":
# Verify SSL certificates by default unless explicitly set to false
_helper_dict[_key] = True
else:
if not _ignore_missing:
_helper_dict[_key] = None
return _helper_dict
[docs]
def get_helper_settings(file_path, file_type='yaml', defined_settings=None):
"""This function returns a dictionary of the defined helper settings.
:param file_path: The file path to the helper configuration file
:type file_path: str
:param file_type: Defines the helper configuration file as a ``yaml`` file (default) or a ``json`` file
:type file_type: str
:param defined_settings: Core object settings (if any) defined via the ``defined_settings`` parameter
:type defined_settings: dict, None
:returns: Dictionary of helper variables
:raises: :py:exc:`salespyforce.errors.exceptions.InvalidHelperFileTypeError`
"""
# Initialize the helper_settings dictionary
helper_settings = {}
# Convert the defined_settings parameter to an empty dictionary if null
defined_settings = {} if not defined_settings else defined_settings
if file_type != 'yaml' and file_type != 'json':
file_type = get_file_type(file_path)
# Import the helper configuration file
helper_cfg = import_helper_file(file_path, file_type)
# Populate the connection information in the helper dictionary
if 'connection' in helper_cfg and 'connection' not in defined_settings:
helper_settings['connection'] = _get_connection_info(helper_cfg)
# Populate the SSL certificate verification setting in the helper dictionary
if 'ssl_verify' not in defined_settings:
helper_settings.update(_collect_values('ssl_verify', helper_cfg))
# Return the helper_settings dictionary
return helper_settings
[docs]
class HelperParsing:
"""This class is used to help parse values imported from a YAML configuration file."""
# Define dictionary to map YAML Boolean to Python Boolean
yaml_boolean_values = {
True: True,
False: False,
'yes': True,
'no': False
}