Skip to content

Repository files navigation

AWS Lambda Environment Variables Modeler (Python)

licensePythonSupportPyPI versionPyPi monthly downloadsPyPI DownloadscodecovversionOpenSSF Scorecardissues

alt text

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

It leverages the power of Pydantic models to define the expected structure and types of the environment variables.

This library is especially handy for serverless applications where managing configuration via environment variables is a common practice.

📜Documentation | Blogs website

Contact details | ran.isenberg@ranthebuilder.cloud

The Problem

Environment variables are often viewed as an essential utility. They serve as static AWS Lambda function configuration.

Their values are set during the Lambda deployment, and the only way to change them is to redeploy the Lambda function with updated values.

However, many engineers use them unsafely despite being such an integral and fundamental part of any AWS Lambda function deployment.

This usage may cause nasty bugs or even crashes in production.

This library allows you to correctly parse, validate, and use your environment variables in your Python AWS Lambda code.

Read more about it here

Features

  • Validates the environment variables against a Pydantic model: define both semantic and syntactic validation.
  • Serializes the string environment variables into complex classes and types.
  • Provides means to access the environment variables safely with a global getter function in every part of the function.
  • Provides a decorator to initialize the environment variables before executing a function.
  • Caches the parsed model for performance improvement for multiple 'get' calls.

Installation

You can install it using pip:

pip install aws-lambda-env-modeler

Getting started

Head over to the complete project documentation pages at GitHub pages at https://ran-isenberg.github.io/aws-lambda-env-modeler

Usage

First, define a Pydantic model for your environment variables:

frompydanticimportBaseModel, HttpUrlclassMyEnvVariables(BaseModel):
DB_HOST: strDB_PORT: intDB_USER: strDB_PASS: strFLAG_X: boolAPI_URL: HttpUrl

Before executing a function, you must use the @init_environment_variables decorator to validate and initialize the environment variables automatically.

The decorator guarantees that the function will run with the correct variable configuration.

Then, you can fetch the environment variables using the global getter function, 'get_environment_variables,' and use them just like a data class. At this point, they are parsed and validated.

fromaws_lambda_env_modelerimportinit_environment_variables@init_environment_variables(MyEnvVariables)defmy_handler_entry_function(event, context):
# At this point, environment variables are already validated and initializedpass

Then, you can fetch and validate the environment variables with your model:

fromaws_lambda_env_modelerimportget_environment_variablesenv_vars=get_environment_variables(MyEnvVariables)
print(env_vars.DB_HOST)

Disabling Cache for Testing

By default, the modeler uses cache - the parsed model is cached for performance improvement for multiple 'get' calls.

In some cases, such as during testing, you may want to turn off the cache. You can do this by setting the LAMBDA_ENV_MODELER_DISABLE_CACHE environment variable to 'True.'

This is especially useful in tests where you want to run multiple tests concurrently, each with a different set of environment variables.

Here's an example of how you can use this in a pytest test:

importjsonfromhttpimportHTTPStatusfromtypingimportAny, Dictfromunittest.mockimportpatchfrompydanticimportBaseModelfromtyping_extensionsimportLiteralfromaws_lambda_env_modelerimportLAMBDA_ENV_MODELER_DISABLE_CACHE, get_environment_variables, init_environment_variablesclassMyHandlerEnvVars(BaseModel):
LOG_LEVEL: Literal['DEBUG', 'INFO', 'ERROR', 'CRITICAL', 'WARNING', 'EXCEPTION']
@init_environment_variables(model=MyHandlerEnvVars)defmy_handler(event: Dict[str, Any], context) ->Dict[str, Any]:
env_vars=get_environment_variables(model=MyHandlerEnvVars) # noqa: F841# can access directly env_vars.LOG_LEVEL as dataclassreturn {
'statusCode': HTTPStatus.OK,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps({'message': 'success'}),
}
@patch.dict('os.environ', {LAMBDA_ENV_MODELER_DISABLE_CACHE: 'true', 'LOG_LEVEL': 'DEBUG'})deftest_my_handler():
response=my_handler({}, None)
assertresponse['statusCode'] ==HTTPStatus.OKassertresponse['headers'] == {'Content-Type': 'application/json'}
assertjson.loads(response['body']) == {'message': 'success'}

Code Contributions

Code contributions are welcomed. Read this guide.

Code of Conduct

Read our code of conduct here.

Connect

License

This library is licensed under the MIT License. See the LICENSE file.

About

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - Subtrack-Inc/aws-lambda-env-modeler: AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions. · GitHub
Skip to content

Repository files navigation

AWS Lambda Environment Variables Modeler (Python)

licensePythonSupportPyPI versionPyPi monthly downloadsPyPI DownloadscodecovversionOpenSSF Scorecardissues

alt text

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

It leverages the power of Pydantic models to define the expected structure and types of the environment variables.

This library is especially handy for serverless applications where managing configuration via environment variables is a common practice.

📜Documentation | Blogs website

Contact details | ran.isenberg@ranthebuilder.cloud

The Problem

Environment variables are often viewed as an essential utility. They serve as static AWS Lambda function configuration.

Their values are set during the Lambda deployment, and the only way to change them is to redeploy the Lambda function with updated values.

However, many engineers use them unsafely despite being such an integral and fundamental part of any AWS Lambda function deployment.

This usage may cause nasty bugs or even crashes in production.

This library allows you to correctly parse, validate, and use your environment variables in your Python AWS Lambda code.

Read more about it here

Features

  • Validates the environment variables against a Pydantic model: define both semantic and syntactic validation.
  • Serializes the string environment variables into complex classes and types.
  • Provides means to access the environment variables safely with a global getter function in every part of the function.
  • Provides a decorator to initialize the environment variables before executing a function.
  • Caches the parsed model for performance improvement for multiple 'get' calls.

Installation

You can install it using pip:

pip install aws-lambda-env-modeler

Getting started

Head over to the complete project documentation pages at GitHub pages at https://ran-isenberg.github.io/aws-lambda-env-modeler

Usage

First, define a Pydantic model for your environment variables:

frompydanticimportBaseModel, HttpUrlclassMyEnvVariables(BaseModel):
DB_HOST: strDB_PORT: intDB_USER: strDB_PASS: strFLAG_X: boolAPI_URL: HttpUrl

Before executing a function, you must use the @init_environment_variables decorator to validate and initialize the environment variables automatically.

The decorator guarantees that the function will run with the correct variable configuration.

Then, you can fetch the environment variables using the global getter function, 'get_environment_variables,' and use them just like a data class. At this point, they are parsed and validated.

fromaws_lambda_env_modelerimportinit_environment_variables@init_environment_variables(MyEnvVariables)defmy_handler_entry_function(event, context):
# At this point, environment variables are already validated and initializedpass

Then, you can fetch and validate the environment variables with your model:

fromaws_lambda_env_modelerimportget_environment_variablesenv_vars=get_environment_variables(MyEnvVariables)
print(env_vars.DB_HOST)

Disabling Cache for Testing

By default, the modeler uses cache - the parsed model is cached for performance improvement for multiple 'get' calls.

In some cases, such as during testing, you may want to turn off the cache. You can do this by setting the LAMBDA_ENV_MODELER_DISABLE_CACHE environment variable to 'True.'

This is especially useful in tests where you want to run multiple tests concurrently, each with a different set of environment variables.

Here's an example of how you can use this in a pytest test:

importjsonfromhttpimportHTTPStatusfromtypingimportAny, Dictfromunittest.mockimportpatchfrompydanticimportBaseModelfromtyping_extensionsimportLiteralfromaws_lambda_env_modelerimportLAMBDA_ENV_MODELER_DISABLE_CACHE, get_environment_variables, init_environment_variablesclassMyHandlerEnvVars(BaseModel):
LOG_LEVEL: Literal['DEBUG', 'INFO', 'ERROR', 'CRITICAL', 'WARNING', 'EXCEPTION']
@init_environment_variables(model=MyHandlerEnvVars)defmy_handler(event: Dict[str, Any], context) ->Dict[str, Any]:
env_vars=get_environment_variables(model=MyHandlerEnvVars) # noqa: F841# can access directly env_vars.LOG_LEVEL as dataclassreturn {
'statusCode': HTTPStatus.OK,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps({'message': 'success'}),
}
@patch.dict('os.environ', {LAMBDA_ENV_MODELER_DISABLE_CACHE: 'true', 'LOG_LEVEL': 'DEBUG'})deftest_my_handler():
response=my_handler({}, None)
assertresponse['statusCode'] ==HTTPStatus.OKassertresponse['headers'] == {'Content-Type': 'application/json'}
assertjson.loads(response['body']) == {'message': 'success'}

Code Contributions

Code contributions are welcomed. Read this guide.

Code of Conduct

Read our code of conduct here.

Connect

License

This library is licensed under the MIT License. See the LICENSE file.

About

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Subtrack-Inc/aws-lambda-env-modeler: AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions. · GitHub
Skip to content

Repository files navigation

AWS Lambda Environment Variables Modeler (Python)

licensePythonSupportPyPI versionPyPi monthly downloadsPyPI DownloadscodecovversionOpenSSF Scorecardissues

alt text

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

It leverages the power of Pydantic models to define the expected structure and types of the environment variables.

This library is especially handy for serverless applications where managing configuration via environment variables is a common practice.

📜Documentation | Blogs website

Contact details | ran.isenberg@ranthebuilder.cloud

The Problem

Environment variables are often viewed as an essential utility. They serve as static AWS Lambda function configuration.

Their values are set during the Lambda deployment, and the only way to change them is to redeploy the Lambda function with updated values.

However, many engineers use them unsafely despite being such an integral and fundamental part of any AWS Lambda function deployment.

This usage may cause nasty bugs or even crashes in production.

This library allows you to correctly parse, validate, and use your environment variables in your Python AWS Lambda code.

Read more about it here

Features

  • Validates the environment variables against a Pydantic model: define both semantic and syntactic validation.
  • Serializes the string environment variables into complex classes and types.
  • Provides means to access the environment variables safely with a global getter function in every part of the function.
  • Provides a decorator to initialize the environment variables before executing a function.
  • Caches the parsed model for performance improvement for multiple 'get' calls.

Installation

You can install it using pip:

pip install aws-lambda-env-modeler

Getting started

Head over to the complete project documentation pages at GitHub pages at https://ran-isenberg.github.io/aws-lambda-env-modeler

Usage

First, define a Pydantic model for your environment variables:

frompydanticimportBaseModel, HttpUrlclassMyEnvVariables(BaseModel):
DB_HOST: strDB_PORT: intDB_USER: strDB_PASS: strFLAG_X: boolAPI_URL: HttpUrl

Before executing a function, you must use the @init_environment_variables decorator to validate and initialize the environment variables automatically.

The decorator guarantees that the function will run with the correct variable configuration.

Then, you can fetch the environment variables using the global getter function, 'get_environment_variables,' and use them just like a data class. At this point, they are parsed and validated.

fromaws_lambda_env_modelerimportinit_environment_variables@init_environment_variables(MyEnvVariables)defmy_handler_entry_function(event, context):
# At this point, environment variables are already validated and initializedpass

Then, you can fetch and validate the environment variables with your model:

fromaws_lambda_env_modelerimportget_environment_variablesenv_vars=get_environment_variables(MyEnvVariables)
print(env_vars.DB_HOST)

Disabling Cache for Testing

By default, the modeler uses cache - the parsed model is cached for performance improvement for multiple 'get' calls.

In some cases, such as during testing, you may want to turn off the cache. You can do this by setting the LAMBDA_ENV_MODELER_DISABLE_CACHE environment variable to 'True.'

This is especially useful in tests where you want to run multiple tests concurrently, each with a different set of environment variables.

Here's an example of how you can use this in a pytest test:

importjsonfromhttpimportHTTPStatusfromtypingimportAny, Dictfromunittest.mockimportpatchfrompydanticimportBaseModelfromtyping_extensionsimportLiteralfromaws_lambda_env_modelerimportLAMBDA_ENV_MODELER_DISABLE_CACHE, get_environment_variables, init_environment_variablesclassMyHandlerEnvVars(BaseModel):
LOG_LEVEL: Literal['DEBUG', 'INFO', 'ERROR', 'CRITICAL', 'WARNING', 'EXCEPTION']
@init_environment_variables(model=MyHandlerEnvVars)defmy_handler(event: Dict[str, Any], context) ->Dict[str, Any]:
env_vars=get_environment_variables(model=MyHandlerEnvVars) # noqa: F841# can access directly env_vars.LOG_LEVEL as dataclassreturn {
'statusCode': HTTPStatus.OK,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps({'message': 'success'}),
}
@patch.dict('os.environ', {LAMBDA_ENV_MODELER_DISABLE_CACHE: 'true', 'LOG_LEVEL': 'DEBUG'})deftest_my_handler():
response=my_handler({}, None)
assertresponse['statusCode'] ==HTTPStatus.OKassertresponse['headers'] == {'Content-Type': 'application/json'}
assertjson.loads(response['body']) == {'message': 'success'}

Code Contributions

Code contributions are welcomed. Read this guide.

Code of Conduct

Read our code of conduct here.

Connect

License

This library is licensed under the MIT License. See the LICENSE file.

About

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Subtrack-Inc/aws-lambda-env-modeler: AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions. · GitHub
Skip to content

Repository files navigation

AWS Lambda Environment Variables Modeler (Python)

licensePythonSupportPyPI versionPyPi monthly downloadsPyPI DownloadscodecovversionOpenSSF Scorecardissues

alt text

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

It leverages the power of Pydantic models to define the expected structure and types of the environment variables.

This library is especially handy for serverless applications where managing configuration via environment variables is a common practice.

📜Documentation | Blogs website

Contact details | ran.isenberg@ranthebuilder.cloud

The Problem

Environment variables are often viewed as an essential utility. They serve as static AWS Lambda function configuration.

Their values are set during the Lambda deployment, and the only way to change them is to redeploy the Lambda function with updated values.

However, many engineers use them unsafely despite being such an integral and fundamental part of any AWS Lambda function deployment.

This usage may cause nasty bugs or even crashes in production.

This library allows you to correctly parse, validate, and use your environment variables in your Python AWS Lambda code.

Read more about it here

Features

  • Validates the environment variables against a Pydantic model: define both semantic and syntactic validation.
  • Serializes the string environment variables into complex classes and types.
  • Provides means to access the environment variables safely with a global getter function in every part of the function.
  • Provides a decorator to initialize the environment variables before executing a function.
  • Caches the parsed model for performance improvement for multiple 'get' calls.

Installation

You can install it using pip:

pip install aws-lambda-env-modeler

Getting started

Head over to the complete project documentation pages at GitHub pages at https://ran-isenberg.github.io/aws-lambda-env-modeler

Usage

First, define a Pydantic model for your environment variables:

frompydanticimportBaseModel, HttpUrlclassMyEnvVariables(BaseModel):
DB_HOST: strDB_PORT: intDB_USER: strDB_PASS: strFLAG_X: boolAPI_URL: HttpUrl

Before executing a function, you must use the @init_environment_variables decorator to validate and initialize the environment variables automatically.

The decorator guarantees that the function will run with the correct variable configuration.

Then, you can fetch the environment variables using the global getter function, 'get_environment_variables,' and use them just like a data class. At this point, they are parsed and validated.

fromaws_lambda_env_modelerimportinit_environment_variables@init_environment_variables(MyEnvVariables)defmy_handler_entry_function(event, context):
# At this point, environment variables are already validated and initializedpass

Then, you can fetch and validate the environment variables with your model:

fromaws_lambda_env_modelerimportget_environment_variablesenv_vars=get_environment_variables(MyEnvVariables)
print(env_vars.DB_HOST)

Disabling Cache for Testing

By default, the modeler uses cache - the parsed model is cached for performance improvement for multiple 'get' calls.

In some cases, such as during testing, you may want to turn off the cache. You can do this by setting the LAMBDA_ENV_MODELER_DISABLE_CACHE environment variable to 'True.'

This is especially useful in tests where you want to run multiple tests concurrently, each with a different set of environment variables.

Here's an example of how you can use this in a pytest test:

importjsonfromhttpimportHTTPStatusfromtypingimportAny, Dictfromunittest.mockimportpatchfrompydanticimportBaseModelfromtyping_extensionsimportLiteralfromaws_lambda_env_modelerimportLAMBDA_ENV_MODELER_DISABLE_CACHE, get_environment_variables, init_environment_variablesclassMyHandlerEnvVars(BaseModel):
LOG_LEVEL: Literal['DEBUG', 'INFO', 'ERROR', 'CRITICAL', 'WARNING', 'EXCEPTION']
@init_environment_variables(model=MyHandlerEnvVars)defmy_handler(event: Dict[str, Any], context) ->Dict[str, Any]:
env_vars=get_environment_variables(model=MyHandlerEnvVars) # noqa: F841# can access directly env_vars.LOG_LEVEL as dataclassreturn {
'statusCode': HTTPStatus.OK,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps({'message': 'success'}),
}
@patch.dict('os.environ', {LAMBDA_ENV_MODELER_DISABLE_CACHE: 'true', 'LOG_LEVEL': 'DEBUG'})deftest_my_handler():
response=my_handler({}, None)
assertresponse['statusCode'] ==HTTPStatus.OKassertresponse['headers'] == {'Content-Type': 'application/json'}
assertjson.loads(response['body']) == {'message': 'success'}

Code Contributions

Code contributions are welcomed. Read this guide.

Code of Conduct

Read our code of conduct here.

Connect

License

This library is licensed under the MIT License. See the LICENSE file.

About

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - Subtrack-Inc/aws-lambda-env-modeler: AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions. · GitHub
Skip to content

Repository files navigation

AWS Lambda Environment Variables Modeler (Python)

licensePythonSupportPyPI versionPyPi monthly downloadsPyPI DownloadscodecovversionOpenSSF Scorecardissues

alt text

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

It leverages the power of Pydantic models to define the expected structure and types of the environment variables.

This library is especially handy for serverless applications where managing configuration via environment variables is a common practice.

📜Documentation | Blogs website

Contact details | ran.isenberg@ranthebuilder.cloud

The Problem

Environment variables are often viewed as an essential utility. They serve as static AWS Lambda function configuration.

Their values are set during the Lambda deployment, and the only way to change them is to redeploy the Lambda function with updated values.

However, many engineers use them unsafely despite being such an integral and fundamental part of any AWS Lambda function deployment.

This usage may cause nasty bugs or even crashes in production.

This library allows you to correctly parse, validate, and use your environment variables in your Python AWS Lambda code.

Read more about it here

Features

  • Validates the environment variables against a Pydantic model: define both semantic and syntactic validation.
  • Serializes the string environment variables into complex classes and types.
  • Provides means to access the environment variables safely with a global getter function in every part of the function.
  • Provides a decorator to initialize the environment variables before executing a function.
  • Caches the parsed model for performance improvement for multiple 'get' calls.

Installation

You can install it using pip:

pip install aws-lambda-env-modeler

Getting started

Head over to the complete project documentation pages at GitHub pages at https://ran-isenberg.github.io/aws-lambda-env-modeler

Usage

First, define a Pydantic model for your environment variables:

frompydanticimportBaseModel, HttpUrlclassMyEnvVariables(BaseModel):
DB_HOST: strDB_PORT: intDB_USER: strDB_PASS: strFLAG_X: boolAPI_URL: HttpUrl

Before executing a function, you must use the @init_environment_variables decorator to validate and initialize the environment variables automatically.

The decorator guarantees that the function will run with the correct variable configuration.

Then, you can fetch the environment variables using the global getter function, 'get_environment_variables,' and use them just like a data class. At this point, they are parsed and validated.

fromaws_lambda_env_modelerimportinit_environment_variables@init_environment_variables(MyEnvVariables)defmy_handler_entry_function(event, context):
# At this point, environment variables are already validated and initializedpass

Then, you can fetch and validate the environment variables with your model:

fromaws_lambda_env_modelerimportget_environment_variablesenv_vars=get_environment_variables(MyEnvVariables)
print(env_vars.DB_HOST)

Disabling Cache for Testing

By default, the modeler uses cache - the parsed model is cached for performance improvement for multiple 'get' calls.

In some cases, such as during testing, you may want to turn off the cache. You can do this by setting the LAMBDA_ENV_MODELER_DISABLE_CACHE environment variable to 'True.'

This is especially useful in tests where you want to run multiple tests concurrently, each with a different set of environment variables.

Here's an example of how you can use this in a pytest test:

importjsonfromhttpimportHTTPStatusfromtypingimportAny, Dictfromunittest.mockimportpatchfrompydanticimportBaseModelfromtyping_extensionsimportLiteralfromaws_lambda_env_modelerimportLAMBDA_ENV_MODELER_DISABLE_CACHE, get_environment_variables, init_environment_variablesclassMyHandlerEnvVars(BaseModel):
LOG_LEVEL: Literal['DEBUG', 'INFO', 'ERROR', 'CRITICAL', 'WARNING', 'EXCEPTION']
@init_environment_variables(model=MyHandlerEnvVars)defmy_handler(event: Dict[str, Any], context) ->Dict[str, Any]:
env_vars=get_environment_variables(model=MyHandlerEnvVars) # noqa: F841# can access directly env_vars.LOG_LEVEL as dataclassreturn {
'statusCode': HTTPStatus.OK,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps({'message': 'success'}),
}
@patch.dict('os.environ', {LAMBDA_ENV_MODELER_DISABLE_CACHE: 'true', 'LOG_LEVEL': 'DEBUG'})deftest_my_handler():
response=my_handler({}, None)
assertresponse['statusCode'] ==HTTPStatus.OKassertresponse['headers'] == {'Content-Type': 'application/json'}
assertjson.loads(response['body']) == {'message': 'success'}

Code Contributions

Code contributions are welcomed. Read this guide.

Code of Conduct

Read our code of conduct here.

Connect

License

This library is licensed under the MIT License. See the LICENSE file.

About

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Subtrack-Inc/aws-lambda-env-modeler: AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions. · GitHub
Skip to content

Repository files navigation

AWS Lambda Environment Variables Modeler (Python)

licensePythonSupportPyPI versionPyPi monthly downloadsPyPI DownloadscodecovversionOpenSSF Scorecardissues

alt text

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

It leverages the power of Pydantic models to define the expected structure and types of the environment variables.

This library is especially handy for serverless applications where managing configuration via environment variables is a common practice.

📜Documentation | Blogs website

Contact details | ran.isenberg@ranthebuilder.cloud

The Problem

Environment variables are often viewed as an essential utility. They serve as static AWS Lambda function configuration.

Their values are set during the Lambda deployment, and the only way to change them is to redeploy the Lambda function with updated values.

However, many engineers use them unsafely despite being such an integral and fundamental part of any AWS Lambda function deployment.

This usage may cause nasty bugs or even crashes in production.

This library allows you to correctly parse, validate, and use your environment variables in your Python AWS Lambda code.

Read more about it here

Features

  • Validates the environment variables against a Pydantic model: define both semantic and syntactic validation.
  • Serializes the string environment variables into complex classes and types.
  • Provides means to access the environment variables safely with a global getter function in every part of the function.
  • Provides a decorator to initialize the environment variables before executing a function.
  • Caches the parsed model for performance improvement for multiple 'get' calls.

Installation

You can install it using pip:

pip install aws-lambda-env-modeler

Getting started

Head over to the complete project documentation pages at GitHub pages at https://ran-isenberg.github.io/aws-lambda-env-modeler

Usage

First, define a Pydantic model for your environment variables:

frompydanticimportBaseModel, HttpUrlclassMyEnvVariables(BaseModel):
DB_HOST: strDB_PORT: intDB_USER: strDB_PASS: strFLAG_X: boolAPI_URL: HttpUrl

Before executing a function, you must use the @init_environment_variables decorator to validate and initialize the environment variables automatically.

The decorator guarantees that the function will run with the correct variable configuration.

Then, you can fetch the environment variables using the global getter function, 'get_environment_variables,' and use them just like a data class. At this point, they are parsed and validated.

fromaws_lambda_env_modelerimportinit_environment_variables@init_environment_variables(MyEnvVariables)defmy_handler_entry_function(event, context):
# At this point, environment variables are already validated and initializedpass

Then, you can fetch and validate the environment variables with your model:

fromaws_lambda_env_modelerimportget_environment_variablesenv_vars=get_environment_variables(MyEnvVariables)
print(env_vars.DB_HOST)

Disabling Cache for Testing

By default, the modeler uses cache - the parsed model is cached for performance improvement for multiple 'get' calls.

In some cases, such as during testing, you may want to turn off the cache. You can do this by setting the LAMBDA_ENV_MODELER_DISABLE_CACHE environment variable to 'True.'

This is especially useful in tests where you want to run multiple tests concurrently, each with a different set of environment variables.

Here's an example of how you can use this in a pytest test:

importjsonfromhttpimportHTTPStatusfromtypingimportAny, Dictfromunittest.mockimportpatchfrompydanticimportBaseModelfromtyping_extensionsimportLiteralfromaws_lambda_env_modelerimportLAMBDA_ENV_MODELER_DISABLE_CACHE, get_environment_variables, init_environment_variablesclassMyHandlerEnvVars(BaseModel):
LOG_LEVEL: Literal['DEBUG', 'INFO', 'ERROR', 'CRITICAL', 'WARNING', 'EXCEPTION']
@init_environment_variables(model=MyHandlerEnvVars)defmy_handler(event: Dict[str, Any], context) ->Dict[str, Any]:
env_vars=get_environment_variables(model=MyHandlerEnvVars) # noqa: F841# can access directly env_vars.LOG_LEVEL as dataclassreturn {
'statusCode': HTTPStatus.OK,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps({'message': 'success'}),
}
@patch.dict('os.environ', {LAMBDA_ENV_MODELER_DISABLE_CACHE: 'true', 'LOG_LEVEL': 'DEBUG'})deftest_my_handler():
response=my_handler({}, None)
assertresponse['statusCode'] ==HTTPStatus.OKassertresponse['headers'] == {'Content-Type': 'application/json'}
assertjson.loads(response['body']) == {'message': 'success'}

Code Contributions

Code contributions are welcomed. Read this guide.

Code of Conduct

Read our code of conduct here.

Connect

License

This library is licensed under the MIT License. See the LICENSE file.

About

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Subtrack-Inc/aws-lambda-env-modeler: AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions. · GitHub
Skip to content

Repository files navigation

AWS Lambda Environment Variables Modeler (Python)

licensePythonSupportPyPI versionPyPi monthly downloadsPyPI DownloadscodecovversionOpenSSF Scorecardissues

alt text

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

It leverages the power of Pydantic models to define the expected structure and types of the environment variables.

This library is especially handy for serverless applications where managing configuration via environment variables is a common practice.

📜Documentation | Blogs website

Contact details | ran.isenberg@ranthebuilder.cloud

The Problem

Environment variables are often viewed as an essential utility. They serve as static AWS Lambda function configuration.

Their values are set during the Lambda deployment, and the only way to change them is to redeploy the Lambda function with updated values.

However, many engineers use them unsafely despite being such an integral and fundamental part of any AWS Lambda function deployment.

This usage may cause nasty bugs or even crashes in production.

This library allows you to correctly parse, validate, and use your environment variables in your Python AWS Lambda code.

Read more about it here

Features

  • Validates the environment variables against a Pydantic model: define both semantic and syntactic validation.
  • Serializes the string environment variables into complex classes and types.
  • Provides means to access the environment variables safely with a global getter function in every part of the function.
  • Provides a decorator to initialize the environment variables before executing a function.
  • Caches the parsed model for performance improvement for multiple 'get' calls.

Installation

You can install it using pip:

pip install aws-lambda-env-modeler

Getting started

Head over to the complete project documentation pages at GitHub pages at https://ran-isenberg.github.io/aws-lambda-env-modeler

Usage

First, define a Pydantic model for your environment variables:

frompydanticimportBaseModel, HttpUrlclassMyEnvVariables(BaseModel):
DB_HOST: strDB_PORT: intDB_USER: strDB_PASS: strFLAG_X: boolAPI_URL: HttpUrl

Before executing a function, you must use the @init_environment_variables decorator to validate and initialize the environment variables automatically.

The decorator guarantees that the function will run with the correct variable configuration.

Then, you can fetch the environment variables using the global getter function, 'get_environment_variables,' and use them just like a data class. At this point, they are parsed and validated.

fromaws_lambda_env_modelerimportinit_environment_variables@init_environment_variables(MyEnvVariables)defmy_handler_entry_function(event, context):
# At this point, environment variables are already validated and initializedpass

Then, you can fetch and validate the environment variables with your model:

fromaws_lambda_env_modelerimportget_environment_variablesenv_vars=get_environment_variables(MyEnvVariables)
print(env_vars.DB_HOST)

Disabling Cache for Testing

By default, the modeler uses cache - the parsed model is cached for performance improvement for multiple 'get' calls.

In some cases, such as during testing, you may want to turn off the cache. You can do this by setting the LAMBDA_ENV_MODELER_DISABLE_CACHE environment variable to 'True.'

This is especially useful in tests where you want to run multiple tests concurrently, each with a different set of environment variables.

Here's an example of how you can use this in a pytest test:

importjsonfromhttpimportHTTPStatusfromtypingimportAny, Dictfromunittest.mockimportpatchfrompydanticimportBaseModelfromtyping_extensionsimportLiteralfromaws_lambda_env_modelerimportLAMBDA_ENV_MODELER_DISABLE_CACHE, get_environment_variables, init_environment_variablesclassMyHandlerEnvVars(BaseModel):
LOG_LEVEL: Literal['DEBUG', 'INFO', 'ERROR', 'CRITICAL', 'WARNING', 'EXCEPTION']
@init_environment_variables(model=MyHandlerEnvVars)defmy_handler(event: Dict[str, Any], context) ->Dict[str, Any]:
env_vars=get_environment_variables(model=MyHandlerEnvVars) # noqa: F841# can access directly env_vars.LOG_LEVEL as dataclassreturn {
'statusCode': HTTPStatus.OK,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps({'message': 'success'}),
}
@patch.dict('os.environ', {LAMBDA_ENV_MODELER_DISABLE_CACHE: 'true', 'LOG_LEVEL': 'DEBUG'})deftest_my_handler():
response=my_handler({}, None)
assertresponse['statusCode'] ==HTTPStatus.OKassertresponse['headers'] == {'Content-Type': 'application/json'}
assertjson.loads(response['body']) == {'message': 'success'}

Code Contributions

Code contributions are welcomed. Read this guide.

Code of Conduct

Read our code of conduct here.

Connect

License

This library is licensed under the MIT License. See the LICENSE file.

About

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - Subtrack-Inc/aws-lambda-env-modeler: AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions. · GitHub
Skip to content

Repository files navigation

AWS Lambda Environment Variables Modeler (Python)

licensePythonSupportPyPI versionPyPi monthly downloadsPyPI DownloadscodecovversionOpenSSF Scorecardissues

alt text

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

It leverages the power of Pydantic models to define the expected structure and types of the environment variables.

This library is especially handy for serverless applications where managing configuration via environment variables is a common practice.

📜Documentation | Blogs website

Contact details | ran.isenberg@ranthebuilder.cloud

The Problem

Environment variables are often viewed as an essential utility. They serve as static AWS Lambda function configuration.

Their values are set during the Lambda deployment, and the only way to change them is to redeploy the Lambda function with updated values.

However, many engineers use them unsafely despite being such an integral and fundamental part of any AWS Lambda function deployment.

This usage may cause nasty bugs or even crashes in production.

This library allows you to correctly parse, validate, and use your environment variables in your Python AWS Lambda code.

Read more about it here

Features

  • Validates the environment variables against a Pydantic model: define both semantic and syntactic validation.
  • Serializes the string environment variables into complex classes and types.
  • Provides means to access the environment variables safely with a global getter function in every part of the function.
  • Provides a decorator to initialize the environment variables before executing a function.
  • Caches the parsed model for performance improvement for multiple 'get' calls.

Installation

You can install it using pip:

pip install aws-lambda-env-modeler

Getting started

Head over to the complete project documentation pages at GitHub pages at https://ran-isenberg.github.io/aws-lambda-env-modeler

Usage

First, define a Pydantic model for your environment variables:

frompydanticimportBaseModel, HttpUrlclassMyEnvVariables(BaseModel):
DB_HOST: strDB_PORT: intDB_USER: strDB_PASS: strFLAG_X: boolAPI_URL: HttpUrl

Before executing a function, you must use the @init_environment_variables decorator to validate and initialize the environment variables automatically.

The decorator guarantees that the function will run with the correct variable configuration.

Then, you can fetch the environment variables using the global getter function, 'get_environment_variables,' and use them just like a data class. At this point, they are parsed and validated.

fromaws_lambda_env_modelerimportinit_environment_variables@init_environment_variables(MyEnvVariables)defmy_handler_entry_function(event, context):
# At this point, environment variables are already validated and initializedpass

Then, you can fetch and validate the environment variables with your model:

fromaws_lambda_env_modelerimportget_environment_variablesenv_vars=get_environment_variables(MyEnvVariables)
print(env_vars.DB_HOST)

Disabling Cache for Testing

By default, the modeler uses cache - the parsed model is cached for performance improvement for multiple 'get' calls.

In some cases, such as during testing, you may want to turn off the cache. You can do this by setting the LAMBDA_ENV_MODELER_DISABLE_CACHE environment variable to 'True.'

This is especially useful in tests where you want to run multiple tests concurrently, each with a different set of environment variables.

Here's an example of how you can use this in a pytest test:

importjsonfromhttpimportHTTPStatusfromtypingimportAny, Dictfromunittest.mockimportpatchfrompydanticimportBaseModelfromtyping_extensionsimportLiteralfromaws_lambda_env_modelerimportLAMBDA_ENV_MODELER_DISABLE_CACHE, get_environment_variables, init_environment_variablesclassMyHandlerEnvVars(BaseModel):
LOG_LEVEL: Literal['DEBUG', 'INFO', 'ERROR', 'CRITICAL', 'WARNING', 'EXCEPTION']
@init_environment_variables(model=MyHandlerEnvVars)defmy_handler(event: Dict[str, Any], context) ->Dict[str, Any]:
env_vars=get_environment_variables(model=MyHandlerEnvVars) # noqa: F841# can access directly env_vars.LOG_LEVEL as dataclassreturn {
'statusCode': HTTPStatus.OK,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps({'message': 'success'}),
}
@patch.dict('os.environ', {LAMBDA_ENV_MODELER_DISABLE_CACHE: 'true', 'LOG_LEVEL': 'DEBUG'})deftest_my_handler():
response=my_handler({}, None)
assertresponse['statusCode'] ==HTTPStatus.OKassertresponse['headers'] == {'Content-Type': 'application/json'}
assertjson.loads(response['body']) == {'message': 'success'}

Code Contributions

Code contributions are welcomed. Read this guide.

Code of Conduct

Read our code of conduct here.

Connect

License

This library is licensed under the MIT License. See the LICENSE file.

About

AWS-Lambda-Env-Modeler is a Python library designed to simplify the process of managing and validating environment variables in your AWS Lambda functions.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages