Best Python code snippet using localstack_python
thundra.py
Source:thundra.py
...187 except Exception as e:188 print("Unable to install Thundra Node agent: %s" % e)189 return False190 return True191def _is_node_lambda_with_support_version(func_details):192 runtime = getattr(func_details, "runtime", func_details)193 return runtime in [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):...
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!!