from aws_lambda_fsm.fsm import Context
from aws_lambda_fsm.fsm import FSM  # noqa
from aws_lambda_fsm.aws import retriable_entities
from aws_lambda_fsm.aws import get_primary_retry_source
from aws_lambda_fsm.aws import validate_config
from aws_lambda_fsm.constants import OBJ
from aws_lambda_fsm.constants import STATE
from aws_lambda_fsm.constants import AWS_LAMBDA
from aws_lambda_fsm.constants import SYSTEM_CONTEXT
from aws_lambda_fsm.constants import RETRY_DATA
from aws_lambda_fsm.constants import AWS
from aws_lambda_fsm.constants import STREAM_DATA
from aws_lambda_fsm.constants import AWS_DYNAMODB
from aws_lambda_fsm.config import get_settings

settings = get_settings()
logger = logging.getLogger(__name__)

validate_config()


def _process_payload(payload_str, obj):
    """
    Internal function to turn a json fsm payload (from an AWS Lambda event),
    into an fsm Context, and then dispatch the event and execute user code.

    :param payload_str: a json string like '{"serialized": "data"}'
    :param obj: a dict to pass to fsm Context.dispatch(...)
    """
    payload = json.loads(payload_str)
    obj[OBJ.PAYLOAD] = payload_str
 def test_get_settings_imports_if_missing(self):
     set_settings(None)
     get_settings()
 def test_set_settings(self):
     set_settings('foo')
     s = get_settings()
     self.assertEqual('foo', s)
 def test_get_settings(self):
     s = get_settings()
     self.assertEqual(TestSettings, s)