Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(idempotency): adding redis as idempotency backend #2567

Merged
merged 123 commits into from
Jan 10, 2024
Merged
Show file tree
Hide file tree
Changes from 121 commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
3d5062c
(redis): initial commit
leandrodamascena Jan 29, 2023
aed821a
feat(redis/idempotency): creating redis connections
leandrodamascena Feb 6, 2023
ffcf16d
feat(redis/idempotency): creating redis connections
leandrodamascena Feb 6, 2023
b5c5791
feat(redis/idempotency): fixing import
leandrodamascena Feb 6, 2023
6902e73
feat(redis/idempotency): adding base class
leandrodamascena Feb 7, 2023
504d258
feat(redis/idempotency): adding logic to get record
leandrodamascena Feb 7, 2023
0d1e3e9
feat(redis/idempotency): adding expiry timeout
leandrodamascena Feb 7, 2023
fce91e5
feat(redis) - merging from develop
leandrodamascena Feb 9, 2023
3126885
feat(redis) - refactoring connection and fixing mypy errors
leandrodamascena Feb 17, 2023
f9c1875
feat(redis) - merging from develop
leandrodamascena Feb 17, 2023
81c141e
feat(redis) - removing wrong print
leandrodamascena Feb 17, 2023
5d6b0d0
feat(redis) - removing fields and adding additional logic to validate…
leandrodamascena Feb 17, 2023
656096f
Merge branch 'develop' into redis/newbackend
leandrodamascena Feb 17, 2023
038926c
feat(redis) - adding redis as dev dependency
leandrodamascena Feb 17, 2023
ca9b16d
Update idempotency.md
Vandita2020 Mar 23, 2023
b8bcfe4
Update idempotency.md
Vandita2020 Mar 27, 2023
cbdf968
merge updates
roger-zhangg Jun 23, 2023
cbfd890
resolve regarding to ruben's comment
roger-zhangg Jun 23, 2023
ecabaff
resolve regarding to ruben's comment
roger-zhangg Jun 23, 2023
2352161
local test, minor fixes
roger-zhangg Jun 27, 2023
b813836
add redis to extra dep
roger-zhangg Jun 29, 2023
1a9d8d9
fix git issue
roger-zhangg Jul 7, 2023
9859896
fix docstring
roger-zhangg Jul 10, 2023
6bfac34
Merge remote-tracking branch 'pt/develop' into redis/newbackend
roger-zhangg Aug 15, 2023
8c38af1
fix poetry, address some Leandro's suggestion
roger-zhangg Aug 15, 2023
cceba13
change redis connection
roger-zhangg Aug 17, 2023
ad26e31
add mock redis, redis validation, sentinel support
roger-zhangg Aug 24, 2023
9c36fc8
fix test
roger-zhangg Aug 24, 2023
7f3aba0
Merge branch 'develop' of https://github.com/aws-powertools/powertool…
roger-zhangg Sep 25, 2023
46fb65e
add redis
roger-zhangg Sep 25, 2023
ba6532a
merging from develop
leandrodamascena Sep 26, 2023
0861f2a
add doc, few todos still need to address
roger-zhangg Sep 27, 2023
a405652
Merge branch 'redis/newbackend' of github.com:roger-zhangg/aws-lambda…
roger-zhangg Sep 27, 2023
9775eaa
add docs, test. Removed Connection
roger-zhangg Sep 27, 2023
e6300a8
fix test on delete
roger-zhangg Sep 27, 2023
01ea6a4
Merge branch 'develop' of https://github.com/aws-powertools/powertool…
roger-zhangg Sep 27, 2023
fcd2009
add types-redis to pyproj
roger-zhangg Sep 28, 2023
5414d5e
fix Literal for 3.7
roger-zhangg Sep 28, 2023
a741622
Merge branch 'develop' of https://github.com/aws-powertools/powertool…
roger-zhangg Sep 28, 2023
9cb5f3f
add comment for delete
roger-zhangg Sep 28, 2023
12b76c4
add redis as dev dep
roger-zhangg Sep 29, 2023
65ce480
Merge branch 'develop' of https://github.com/aws-powertools/powertool…
roger-zhangg Sep 29, 2023
2a40609
fix poetry
roger-zhangg Sep 29, 2023
21c77ea
merging from develop
leandrodamascena Oct 13, 2023
8851d2e
Merge branch 'develop' into redis/newbackend
leandrodamascena Oct 16, 2023
205c201
Simplifying DX
leandrodamascena Oct 16, 2023
9ff5e48
remove redis-config in doc,test
roger-zhangg Oct 16, 2023
25bb868
merging from develop
leandrodamascena Oct 17, 2023
7ceb45e
handle race condition
roger-zhangg Oct 18, 2023
181538c
Merge branch 'redis/newbackend' of github.com:roger-zhangg/aws-lambda…
roger-zhangg Oct 18, 2023
602c393
remove todo
roger-zhangg Oct 18, 2023
28af439
change to use redis.set
roger-zhangg Oct 18, 2023
6644217
support decode_response=False
roger-zhangg Oct 20, 2023
ab12c29
fix mock redis
roger-zhangg Oct 20, 2023
a7b136a
Merge branch 'develop' of https://github.com/aws-powertools/powertool…
roger-zhangg Oct 20, 2023
1ea6a21
add test for no decode
roger-zhangg Oct 20, 2023
adee7af
fix docstring
roger-zhangg Oct 23, 2023
50f4dfa
Merge branch 'develop' of https://github.com/aws-powertools/powertool…
roger-zhangg Oct 23, 2023
b732dc6
Merge branch 'develop' into redis/newbackend
leandrodamascena Oct 26, 2023
05b7ff0
fix coverage
roger-zhangg Oct 27, 2023
75758de
Merge branch 'develop' of https://github.com/aws-powertools/powertool…
roger-zhangg Oct 27, 2023
c93026c
Merge branch 'develop' into redis/newbackend
leandrodamascena Oct 30, 2023
0addabb
Merge branch 'develop' into redis/newbackend
leandrodamascena Oct 31, 2023
b8f938c
add a test case to demostrate race condition
roger-zhangg Nov 8, 2023
2b1db18
Merge branch 'redis/newbackend' of github.com:roger-zhangg/aws-lambda…
roger-zhangg Nov 8, 2023
23de153
add a race condition test for empty record
roger-zhangg Nov 10, 2023
a64ba69
Merge branch 'develop' of https://github.com/aws-powertools/powertool…
roger-zhangg Nov 10, 2023
2b27099
Merge branch 'develop' into redis/newbackend
leandrodamascena Dec 7, 2023
7cb4e1f
add abs_lambda_path, protocol for redis client
roger-zhangg Dec 8, 2023
5c639da
Merge branch 'redis/newbackend' of github.com:roger-zhangg/aws-lambda…
roger-zhangg Dec 8, 2023
514ed7d
fix typing
roger-zhangg Dec 8, 2023
bebd9c6
remove awaitable
roger-zhangg Dec 8, 2023
f00cd3c
optimize protocol
roger-zhangg Dec 9, 2023
b23bc5c
Fix Bandit issue
leandrodamascena Dec 11, 2023
5ae98ce
Refactoring integration tests to use testcontainers
leandrodamascena Dec 11, 2023
2e5067b
Merging from develop
leandrodamascena Dec 11, 2023
f8490d1
Removing code smell
leandrodamascena Dec 11, 2023
8d6aec5
fix makefile, remove sentinel setup
roger-zhangg Dec 20, 2023
2d13a3c
Adding e2e tests
leandrodamascena Dec 28, 2023
15de5db
Merging from develop
leandrodamascena Dec 28, 2023
9e4f929
Merge branch 'develop' into redis/newbackend
leandrodamascena Dec 28, 2023
5a07420
Merge branch 'develop' into redis/newbackend
leandrodamascena Dec 28, 2023
c95e65c
Merge branch 'develop' into redis/newbackend
leandrodamascena Dec 29, 2023
0779aad
Merge branch 'develop' into redis/newbackend
leandrodamascena Dec 30, 2023
d30a0bf
Merging from develop
leandrodamascena Jan 2, 2024
ab22176
merging develop
Jan 3, 2024
693d731
Testing pipeline
leandrodamascena Jan 3, 2024
12af90e
Removing things
leandrodamascena Jan 3, 2024
0899f68
Removing things
leandrodamascena Jan 3, 2024
c3674c0
Fixing docstring and removing old code
leandrodamascena Jan 3, 2024
68fa0c4
Improving the documentation
leandrodamascena Jan 3, 2024
09544c1
Highlights + code removal
leandrodamascena Jan 3, 2024
791315d
Merging from develop
leandrodamascena Jan 3, 2024
2bc7987
Removing unnecessary tests
leandrodamascena Jan 3, 2024
41f353e
Removing unnecessary tests
leandrodamascena Jan 3, 2024
9418aaa
Documentation
leandrodamascena Jan 3, 2024
064ffac
Merge branch 'develop' into redis/newbackend
leandrodamascena Jan 5, 2024
9387d29
Merging from develop
leandrodamascena Jan 8, 2024
2ae69f8
Addressing initial Ruben's feedback
leandrodamascena Jan 8, 2024
d87c869
Addressing Ruben's feedback - documentation
leandrodamascena Jan 8, 2024
2d19e24
Addressing Ruben's feedback - docstring
leandrodamascena Jan 8, 2024
a031ced
Addressing Ruben's feedback - SSL
leandrodamascena Jan 8, 2024
3174800
Addressing Ruben's feedback - db_index
leandrodamascena Jan 8, 2024
8d31fa5
Addressing Ruben's feedback - db_index
leandrodamascena Jan 8, 2024
33025d4
Addressing Ruben's feedback - db_index
leandrodamascena Jan 8, 2024
122947a
redis comment improvements, minor refactor.
roger-zhangg Jan 9, 2024
1369cc1
fix example and docstring import
roger-zhangg Jan 9, 2024
aa63492
fix import in inegration test
roger-zhangg Jan 9, 2024
ea48dfd
Addressing Ruben's feedback - Redis name
leandrodamascena Jan 9, 2024
0a15505
Merge branch 'develop' into redis/newbackend
leandrodamascena Jan 9, 2024
442f36f
Addressing Ruben's feedback - Comments
leandrodamascena Jan 9, 2024
b09db82
Merge branch 'develop' into redis/newbackend
leandrodamascena Jan 9, 2024
30ec360
Minor changes in the documentation
leandrodamascena Jan 10, 2024
5f836b9
Minor changes in the documentation
leandrodamascena Jan 10, 2024
2826845
Merge branch 'develop' into redis/newbackend
leandrodamascena Jan 10, 2024
dc07eaf
Removing Redis as builti-in dependency in our layer
leandrodamascena Jan 10, 2024
1e9337c
Adding Redis to install when creating a new env
leandrodamascena Jan 10, 2024
f570723
Adressing Ruben's feedback
leandrodamascena Jan 10, 2024
255a720
Making sonar happy
leandrodamascena Jan 10, 2024
be03cc0
Merge branch 'develop' into redis/newbackend
leandrodamascena Jan 10, 2024
371bed1
Merge branch 'develop' into redis/newbackend
leandrodamascena Jan 10, 2024
698d147
e2e failing due to wrong import
Jan 10, 2024
de7b77f
Merge branch 'develop' into redis/newbackend
leandrodamascena Jan 10, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/quality_check_pydanticv2.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,9 @@ jobs:
python-version: ${{ matrix.python-version }}
cache: "poetry"
- name: Replacing Pydantic v1 with v2 > 2.0.3
run: poetry add "pydantic=^2.0.3"
run: |
rm -rf poetry.lock
poetry add "pydantic=^2.0.3"
rubenfonseca marked this conversation as resolved.
Show resolved Hide resolved
- name: Install dependencies
run: make dev
- name: Test with pytest
Expand Down
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ dev:
pip install --upgrade pip pre-commit poetry
poetry config --local virtualenvs.in-project true
@$(MAKE) dev-version-plugin
poetry install --extras "all datamasking-aws-sdk"
poetry install --extras "all datamasking-aws-sdk redis"
pre-commit install

dev-gitpod:
pip install --upgrade pip poetry
@$(MAKE) dev-version-plugin
poetry install --extras "all datamasking-aws-sdk"
poetry install --extras "all datamasking-aws-sdk redis"
pre-commit install

format:
Expand Down
30 changes: 30 additions & 0 deletions aws_lambda_powertools/shared/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import os
import warnings
from binascii import Error as BinAsciiError
from pathlib import Path
from typing import Any, Dict, Generator, Optional, Union, overload

from aws_lambda_powertools.shared import constants
Expand Down Expand Up @@ -250,3 +251,32 @@ def dataclass_to_dict(data) -> dict:
import dataclasses

return dataclasses.asdict(data)


def abs_lambda_path(relative_path: str = "") -> str:
"""Return the absolute path from the given relative path to lambda handler.

Parameters
----------
relative_path : str, optional
The relative path to the lambda handler, by default an empty string.

Returns
-------
str
The absolute path generated from the given relative path.
If the environment variable LAMBDA_TASK_ROOT is set, it will use that value.
Otherwise, it will use the current working directory.
If the path is empty, it will return the current working directory.
"""
# Retrieve the LAMBDA_TASK_ROOT environment variable or default to an empty string
current_working_directory = os.environ.get("LAMBDA_TASK_ROOT", "")

# If LAMBDA_TASK_ROOT is not set, use the current working directory
if not current_working_directory:
current_working_directory = str(Path.cwd())

# Combine the current working directory and the relative path to get the absolute path
absolute_path = str(Path(current_working_directory, relative_path))

return absolute_path
8 changes: 7 additions & 1 deletion aws_lambda_powertools/utilities/idempotency/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,10 @@

from .idempotency import IdempotencyConfig, idempotent, idempotent_function

__all__ = ("DynamoDBPersistenceLayer", "BasePersistenceLayer", "idempotent", "idempotent_function", "IdempotencyConfig")
__all__ = (
"DynamoDBPersistenceLayer",
"BasePersistenceLayer",
"idempotent",
"idempotent_function",
"IdempotencyConfig",
)
18 changes: 18 additions & 0 deletions aws_lambda_powertools/utilities/idempotency/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,21 @@ class IdempotencyNoSerializationModelError(BaseError):
"""
No model was supplied to the serializer
"""


class IdempotencyPersistenceConfigError(BaseError):
"""
The idempotency persistency configuration was unsupported
"""


class IdempotencyPersistenceConnectionError(BaseError):
"""
Idempotency persistence connection error
"""


class IdempotencyPersistenceConsistencyError(BaseError):
"""
Idempotency persistency consistency error, needs to be removed
"""
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,6 @@ def save_inprogress(self, data: Dict[str, Any], remaining_time_in_millis: Option
now = datetime.datetime.now()
period = datetime.timedelta(milliseconds=remaining_time_in_millis)
timestamp = (now + period).timestamp()

data_record.in_progress_expiry_timestamp = int(timestamp * 1000)
else:
warnings.warn(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ def __init__(
DynamoDB attribute name for status, by default "status"
data_attr: str, optional
DynamoDB attribute name for response data, by default "data"
validation_key_attr: str, optional
DynamoDB attribute name for hashed representation of the parts of the event used for validation
leandrodamascena marked this conversation as resolved.
Show resolved Hide resolved
boto_config: botocore.config.Config, optional
Botocore configuration to pass during client initialization
boto3_session : boto3.Session, optional
Expand Down
Loading