Best Python code snippet using localstack_python
thundra.py
Source:thundra.py  
...194        LAMBDA_RUNTIME_NODEJS10X,195        LAMBDA_RUNTIME_NODEJS12X,196        LAMBDA_RUNTIME_NODEJS14X,197    ]198def _prepare_invocation_for_node_lambda(context: InvocationContext) -> AdditionalInvocationOptions:199    # Download and initialize Node agent200    _ensure_node_agent_initialized()201    # If agent could not be initialized, skip here202    if not THUNDRA_NODE_AGENT_INITIALIZED:203        return None204    result = AdditionalInvocationOptions()205    # Make sure API key is contained in environment206    result.env_updates[THUNDRA_APIKEY_ENV_VAR_NAME] = _get_apikey(context.environment)207    # Switch handler to Thundra and pass original handler to Thundra through environment variable208    result.env_updates[THUNDRA_AGENT_LAMBDA_HANDLER_ENV_VAR_NAME] = context.handler209    result.updated_handler = "/opt/nodejs/node_modules/@thundra/core/dist/handler.wrapper"210    # If log disable is not configured explicitly, set it to false to enable log capturing by default211    log_disabled = context.environment.get(THUNDRA_AGENT_LOG_DISABLE_ENV_VAR_NAME)212    if not log_disabled:213        result.env_updates[THUNDRA_AGENT_LOG_DISABLE_ENV_VAR_NAME] = "false"214    # Map Thundra agent path into container so it will be accessible by Lambda function Node environment215    agent_path_mapping = (216        "-v %s/node_modules/:/opt/nodejs/node_modules/" % THUNDRA_NODE_AGENT_LOCAL_PATH_ON_HOST217    )218    if context.docker_flags:219        context.docker_flags = f"{context.docker_flags} {agent_path_mapping}"220    else:221        context.docker_flags = agent_path_mapping222    return result223################224# PYTHON AGENT225################226def _ensure_python_agent_initialized():227    global THUNDRA_PYTHON_AGENT_INITIALIZED228    if not THUNDRA_PYTHON_AGENT_INITIALIZED:229        if _init_python_agent_configs() and _install_python_agent():230            THUNDRA_PYTHON_AGENT_INITIALIZED = True231def _get_latest_python_agent_version():232    try:233        from distutils.version import StrictVersion234        import requests235        response = requests.get("https://pypi.org/pypi/thundra/json")236        data = json.loads(response.content.decode())237        versions = sorted(list(data["releases"].keys()), key=StrictVersion, reverse=True)238        return versions[0]239    except Exception as e:240        print("Unable to get latest version of Thundra Python agent: %s" % e)241        return None242def _init_python_agent_configs() -> bool:243    global THUNDRA_PYTHON_AGENT_VERSION244    global THUNDRA_PYTHON_AGENT_LOCAL_PATH245    global THUNDRA_PYTHON_AGENT_LOCAL_PATH_ON_HOST246    latest_version = _get_latest_python_agent_version()247    version = os.getenv("THUNDRA_AGENT_PYTHON_VERSION", latest_version)248    if not version:249        return False250    THUNDRA_PYTHON_AGENT_VERSION = version.strip()251    THUNDRA_PYTHON_AGENT_LOCAL_PATH = "%s/thundra/python/%s/" % (252        config.TMP_FOLDER,253        THUNDRA_PYTHON_AGENT_VERSION,254    )255    THUNDRA_PYTHON_AGENT_LOCAL_PATH_ON_HOST = "%s/thundra/python/%s/" % (256        config.HOST_TMP_FOLDER,257        THUNDRA_PYTHON_AGENT_VERSION,258    )259    return True260def _install_python_agent() -> bool:261    # Install Thundra Python agent PIP package262    if not os.path.exists(THUNDRA_PYTHON_AGENT_LOCAL_PATH):263        install.log_install_msg("Thundra Python agent", verbatim=True)264        try:265            install_thundra_cmd = "pip install --target=%s thundra==%s --no-warn-conflicts" % (266                THUNDRA_PYTHON_AGENT_LOCAL_PATH,267                THUNDRA_PYTHON_AGENT_VERSION,268            )269            common.run(install_thundra_cmd.split())270        except Exception as e:271            print("Unable to install Thundra Python agent: %s" % e)272            return False273    return True274def _is_python_lambda_with_support_version(func_details):275    runtime = getattr(func_details, "runtime", func_details)276    return runtime in [277        LAMBDA_RUNTIME_PYTHON36,278        LAMBDA_RUNTIME_PYTHON37,279        LAMBDA_RUNTIME_PYTHON38,280    ]281def _prepare_invocation_for_python_lambda(282    context: InvocationContext,283) -> AdditionalInvocationOptions:284    # Download and initialize Python agent285    _ensure_python_agent_initialized()286    # If agent could not be initialized, skip here287    if not THUNDRA_PYTHON_AGENT_INITIALIZED:288        return None289    result = AdditionalInvocationOptions()290    # Make sure API key is contained in environment291    result.env_updates[THUNDRA_APIKEY_ENV_VAR_NAME] = _get_apikey(context.environment)292    # Switch handler to Thundra and pass original handler to Thundra through environment variable293    result.env_updates[THUNDRA_AGENT_LAMBDA_HANDLER_ENV_VAR_NAME] = context.handler294    result.updated_handler = "thundra.handler.wrapper"295    # If log disable is not configured explicitly, set it to false to enable log capturing by default296    log_disabled = context.environment.get(THUNDRA_AGENT_LOG_DISABLE_ENV_VAR_NAME)297    if not log_disabled:298        result.env_updates[THUNDRA_AGENT_LOG_DISABLE_ENV_VAR_NAME] = "false"299    # Map Thundra agent path into container so it will be accessible by Lambda function Python environment300    agent_path_mapping = "-v %s/:/opt/python/" % THUNDRA_PYTHON_AGENT_LOCAL_PATH_ON_HOST301    if context.docker_flags:302        context.docker_flags = f"{context.docker_flags} {agent_path_mapping}"303    else:304        context.docker_flags = agent_path_mapping305    return result306################307# THUNDRA PLUGIN308################309class LambdaExecutorPluginThundra(LambdaExecutorPlugin):310    def should_apply(self, context: InvocationContext) -> bool:311        # Local executor is not supported yet312        if "local" in config.LAMBDA_EXECUTOR:313            return False314        # Plugin can only applied if LAMBDA_REMOTE_DOCKER=0315        if "docker" in config.LAMBDA_EXECUTOR and config.LAMBDA_REMOTE_DOCKER:316            return False317        # Plugin can only applied if API key is configured318        thundra_apikey = _get_apikey(context.environment)319        if not thundra_apikey:320            return False321        # Plugin can be applied for Java Lambdas with supported versions322        if _is_java_lambda_with_support_version(context.lambda_function.runtime):323            return True324        # Plugin can be applied for Node Lambdas with supported versions325        if _is_node_lambda_with_support_version(context.lambda_function.runtime):326            return True327        # Plugin can be applied for Python Lambdas with supported versions328        if _is_python_lambda_with_support_version(context.lambda_function.runtime):329            return True330        # Not applicable for Thundra plugin331        return False332    def prepare_invocation(333        self, context: InvocationContext334    ) -> Optional[Union[AdditionalInvocationOptions, InvocationResult]]:335        if is_java_lambda(context.lambda_function):336            return _prepare_invocation_for_java_lambda(context)337        elif is_nodejs_runtime(context.lambda_function):338            return _prepare_invocation_for_node_lambda(context)339        elif is_python_runtime(context.lambda_function):340            return _prepare_invocation_for_python_lambda(context)...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
