# Snapshot Restore for Python
### Description
This is the Snapshot Restore for Python library which can be used for registering [runtime hooks](https://docs.aws.amazon.com/lambda/latest/dg/snapstart-runtime-hooks-python.html) in Snapstart enabled Python Lambda functions
This library provides two decorators that you can use to define your runtime hooks:
* `@register_before_snapshot` - For code you want to run before a snapshot is taken
* `@register_after_restore` - For code you want to run after a snapshot is restored
Alternatively, you can use the following methods to register callables for runtime hooks:
* `register_before_snapshot(func, *args, **kwargs)`
* `register_after_restore(func, *args, **kwargs)`
## Code sample
### Register hooks using decoratores
```
from snapshot_restore_py import register_before_snapshot, register_after_restore
def lambda_handler(event, context):
# your logic here
...
@register_before_snapshot
def fn_before_snapshot():
# your logic here
...
@register_after_restore
def fn_after_restore():
# your logic here
...
```
### Register hooks using functions
```
from snapshot_restore_py import register_before_snapshot, register_after_restore
def lambda_handler(event, context):
// Lambda handler code
def fn_before_snapshot():
# your logic here
...
def fn_after_restore():
# your logic here
...
register_before_snapshot(fn_before_snapshot)
register_after_restore(fn_after_restore)
```
Please refer to the [examples provided](examples) for more details.
## Important points to note
### Execution order
- BeforeSnapshot hooks will run in the **reverse** order** as they were registered
- AfterRestore hooks will run in the **same order** as they were registered.
### Best Practices
- While decorators are convenient, using functions for hook registration can offer more explicit control over the order of execution and improve code readability.
### Registering functions with arguments
- To register a function with specific arguments, just use the `register_...(func, *args, **kwargs)` method.
### Importing Modules
- If you register a hook in a file that isn’t imported in your main handler, it will be ignored.
- If you import hooks within the `lambda_handler`, they won’t be executed. Instead, make sure all essential imports are at the **top level** of your code. This way, your hooks will be recognized and executed as intended!
### Duplicate registrations
- If you register a function more than once (like decorating it and registering it again), it’ll run multiple times.
### Local environment
- **Pre-installed in Lambda Runtime**: When deploying to AWS Lambda, you do not need to include this library in your deployment package, as it is already pre-installed in the Lambda runtime environment.
- **Local Testing Consideration**: For local testing, ensure that you include the library in your development dependencies to avoid any import issues during testing.
Raw data
{
"_id": null,
"home_page": "https://github.com/aws/snapshot-restore-py",
"name": "snapshot-restore-py",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "serverless aws lambda python snapstart runtime hooks",
"author": "Amazon Web Services",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/27/19/2d7584749a7f6d1b4b3a129995b1bc31e70ed9c5ecc323f1ee748b767268/snapshot-restore-py-1.0.0.tar.gz",
"platform": null,
"description": "# Snapshot Restore for Python\n\n### Description\n\nThis is the Snapshot Restore for Python library which can be used for registering [runtime hooks](https://docs.aws.amazon.com/lambda/latest/dg/snapstart-runtime-hooks-python.html) in Snapstart enabled Python Lambda functions\n\nThis library provides two decorators that you can use to define your runtime hooks:\n\n* `@register_before_snapshot` - For code you want to run before a snapshot is taken\n* `@register_after_restore` - For code you want to run after a snapshot is restored\n\nAlternatively, you can use the following methods to register callables for runtime hooks:\n\n* `register_before_snapshot(func, *args, **kwargs)`\n* `register_after_restore(func, *args, **kwargs)`\n\n## Code sample\n\n### Register hooks using decoratores\n```\nfrom snapshot_restore_py import register_before_snapshot, register_after_restore\n\ndef lambda_handler(event, context):\n # your logic here\n ...\n\n@register_before_snapshot\ndef fn_before_snapshot():\n # your logic here\n ...\n\n@register_after_restore\ndef fn_after_restore():\n # your logic here\n ...\n```\n\n### Register hooks using functions\n```\nfrom snapshot_restore_py import register_before_snapshot, register_after_restore\n\ndef lambda_handler(event, context):\n // Lambda handler code\n\ndef fn_before_snapshot():\n # your logic here\n ...\n\ndef fn_after_restore():\n # your logic here\n ...\n\nregister_before_snapshot(fn_before_snapshot)\nregister_after_restore(fn_after_restore)\n\n```\n\nPlease refer to the [examples provided](examples) for more details.\n\n## Important points to note\n\n### Execution order\n\n - BeforeSnapshot hooks will run in the **reverse** order** as they were registered\n - AfterRestore hooks will run in the **same order** as they were registered.\n\n### Best Practices\n\n - While decorators are convenient, using functions for hook registration can offer more explicit control over the order of execution and improve code readability.\n\n### Registering functions with arguments\n\n - To register a function with specific arguments, just use the `register_...(func, *args, **kwargs)` method.\n\n### Importing Modules\n\n - If you register a hook in a file that isn\u2019t imported in your main handler, it will be ignored.\n - If you import hooks within the `lambda_handler`, they won\u2019t be executed. Instead, make sure all essential imports are at the **top level** of your code. This way, your hooks will be recognized and executed as intended!\n\n### Duplicate registrations\n\n - If you register a function more than once (like decorating it and registering it again), it\u2019ll run multiple times.\n\n### Local environment\n\n- **Pre-installed in Lambda Runtime**: When deploying to AWS Lambda, you do not need to include this library in your deployment package, as it is already pre-installed in the Lambda runtime environment.\n\n- **Local Testing Consideration**: For local testing, ensure that you include the library in your development dependencies to avoid any import issues during testing.\n\n\n",
"bugtrack_url": null,
"license": "Apache License 2.0",
"summary": "Runtime Hooks for AWS Lambda SnapStart - Python",
"version": "1.0.0",
"project_urls": {
"Homepage": "https://github.com/aws/snapshot-restore-py"
},
"split_keywords": [
"serverless",
"aws",
"lambda",
"python",
"snapstart",
"runtime",
"hooks"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "10b8f9da2457e9dfb5872042202d69b329940527672e20cbfdb26610c09e1d8e",
"md5": "65a4167b68085c83e138ea78822d064c",
"sha256": "38f99e696793790f54658e71c68c7a8a40cea877c81232b5052383b1301aceba"
},
"downloads": -1,
"filename": "snapshot_restore_py-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "65a4167b68085c83e138ea78822d064c",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 3782,
"upload_time": "2024-11-13T14:40:21",
"upload_time_iso_8601": "2024-11-13T14:40:21.330562Z",
"url": "https://files.pythonhosted.org/packages/10/b8/f9da2457e9dfb5872042202d69b329940527672e20cbfdb26610c09e1d8e/snapshot_restore_py-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "27192d7584749a7f6d1b4b3a129995b1bc31e70ed9c5ecc323f1ee748b767268",
"md5": "9c451c427df0c42741bd50a127022b33",
"sha256": "4d27f82fb6f09968f422501e9c3c2dea48a46cd19dc798eb7d6cbc57523c8004"
},
"downloads": -1,
"filename": "snapshot-restore-py-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "9c451c427df0c42741bd50a127022b33",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 3379,
"upload_time": "2024-11-13T14:40:22",
"upload_time_iso_8601": "2024-11-13T14:40:22.477532Z",
"url": "https://files.pythonhosted.org/packages/27/19/2d7584749a7f6d1b4b3a129995b1bc31e70ed9c5ecc323f1ee748b767268/snapshot-restore-py-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-13 14:40:22",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "aws",
"github_project": "snapshot-restore-py",
"github_not_found": true,
"lcname": "snapshot-restore-py"
}