:py:mod:`tests.system.providers.amazon.aws.utils`
=================================================

.. py:module:: tests.system.providers.amazon.aws.utils


Package Contents
----------------


Functions
~~~~~~~~~

.. autoapisummary::

   tests.system.providers.amazon.aws.utils.fetch_variable
   tests.system.providers.amazon.aws.utils.set_env_id



Attributes
~~~~~~~~~~

.. autoapisummary::

   tests.system.providers.amazon.aws.utils.ENV_ID_ENVIRON_KEY
   tests.system.providers.amazon.aws.utils.DEFAULT_ENV_ID_PREFIX
   tests.system.providers.amazon.aws.utils.DEFAULT_ENV_ID_LEN
   tests.system.providers.amazon.aws.utils.DEFAULT_ENV_ID
   tests.system.providers.amazon.aws.utils.TEST_FILE_IDENTIFIER
   tests.system.providers.amazon.aws.utils.INVALID_ENV_ID_MSG
   tests.system.providers.amazon.aws.utils.LOWERCASE_ENV_ID_MSG
   tests.system.providers.amazon.aws.utils.NO_VALUE_MSG


.. py:data:: ENV_ID_ENVIRON_KEY
   :annotation: :str = SYSTEM_TESTS_ENV_ID

   

.. py:data:: DEFAULT_ENV_ID_PREFIX
   :annotation: :str = env

   

.. py:data:: DEFAULT_ENV_ID_LEN
   :annotation: :int = 8

   

.. py:data:: DEFAULT_ENV_ID
   :annotation: :str

   

.. py:data:: TEST_FILE_IDENTIFIER
   :annotation: :str = example

   

.. py:data:: INVALID_ENV_ID_MSG
   :annotation: :str = In order to maximize compatibility, the SYSTEM_TESTS_ENV_ID must be an alphanumeric string which...

   

.. py:data:: LOWERCASE_ENV_ID_MSG
   :annotation: :str = The provided Environment ID contains uppercase letters and will be converted to lowercase for...

   

.. py:data:: NO_VALUE_MSG
   :annotation: :str = No Value Found: Variable {key} could not be found and no default value was provided.

   

.. py:function:: fetch_variable(key, default_value = None)

   Given a Parameter name: first check for an existing Environment Variable,
   then check SSM for a value. If neither are available, fall back on the
   optional default value.

   :param key: The name of the Parameter to fetch a value for.
   :param default_value: The default value to use if no value can be found.
   :return: The value of the parameter.


.. py:function:: set_env_id()

   Retrieves or generates an Environment ID, validate that it is suitable,
   export it as an Environment Variable, and return it.

   If an Environment ID has already been generated, use that.
   Otherwise, try to fetch it and export it as an Environment Variable.
   If there is not one available to fetch then generate one and export it as an Environment Variable.

   :return: A valid System Test Environment ID.


