Skip to content

Commit 4062b71

Browse files
authored
chore(langgraph-checkpoint-aws): Skip DynamoDB checkpointer tests if 403 (#748)
1 parent bd6a249 commit 4062b71

File tree

1 file changed

+48
-22
lines changed

1 file changed

+48
-22
lines changed

libs/langgraph-checkpoint-aws/tests/integration_tests/checkpoint/dynamodb/test_langgraph_dynamodb_integration.py

Lines changed: 48 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,21 @@
2323

2424
logger = logging.getLogger(__name__)
2525

26+
27+
def skip_on_aws_403(call_fn, action_description: str):
28+
try:
29+
return call_fn()
30+
except ClientError as e:
31+
code = e.response["Error"]["Code"]
32+
if code in ("AccessDenied", "AccessDeniedException", "403"):
33+
pytest.skip(
34+
f"Insufficient permissions to execute "
35+
f"{action_description}, skipping test."
36+
)
37+
else:
38+
raise
39+
40+
2641
# Configuration
2742
AWS_REGION = os.getenv("AWS_REGION", "eu-west-1")
2843
DYNAMODB_TABLE = os.getenv(
@@ -61,45 +76,56 @@ def aws_resources():
6176

6277
# Create DynamoDB table if not exists
6378
try:
64-
dynamodb.describe_table(TableName=DYNAMODB_TABLE)
79+
skip_on_aws_403(
80+
lambda: dynamodb.describe_table(TableName=DYNAMODB_TABLE),
81+
f"DynamoDB DescribeTable on {DYNAMODB_TABLE}",
82+
)
6583
logger.info(f"DynamoDB table '{DYNAMODB_TABLE}' already exists")
6684
except ClientError as e:
6785
if e.response["Error"]["Code"] == "ResourceNotFoundException":
6886
logger.info(f"Creating DynamoDB table '{DYNAMODB_TABLE}'...")
69-
dynamodb.create_table(
70-
TableName=DYNAMODB_TABLE,
71-
KeySchema=[
72-
{"AttributeName": "PK", "KeyType": "HASH"},
73-
{"AttributeName": "SK", "KeyType": "RANGE"},
74-
],
75-
AttributeDefinitions=[
76-
{"AttributeName": "PK", "AttributeType": "S"},
77-
{"AttributeName": "SK", "AttributeType": "S"},
78-
],
79-
BillingMode="PAY_PER_REQUEST",
87+
skip_on_aws_403(
88+
lambda: dynamodb.create_table(
89+
TableName=DYNAMODB_TABLE,
90+
KeySchema=[
91+
{"AttributeName": "PK", "KeyType": "HASH"},
92+
{"AttributeName": "SK", "KeyType": "RANGE"},
93+
],
94+
AttributeDefinitions=[
95+
{"AttributeName": "PK", "AttributeType": "S"},
96+
{"AttributeName": "SK", "AttributeType": "S"},
97+
],
98+
BillingMode="PAY_PER_REQUEST",
99+
),
100+
"DynamoDB CreateTable",
80101
)
81-
# Wait for table to be active
82102
waiter = dynamodb.get_waiter("table_exists")
83-
waiter.wait(TableName=DYNAMODB_TABLE)
103+
skip_on_aws_403(
104+
lambda: waiter.wait(TableName=DYNAMODB_TABLE), "DynamoDB GetWaiter"
105+
)
84106
logger.info(f"DynamoDB table '{DYNAMODB_TABLE}' created successfully")
85107
else:
86108
raise
87109

88110
# Create S3 bucket if not exists
89111
try:
90-
s3.head_bucket(Bucket=S3_BUCKET)
112+
skip_on_aws_403(lambda: s3.head_bucket(Bucket=S3_BUCKET), "S3 HeadBucket")
91113
logger.info(f"S3 bucket '{S3_BUCKET}' already exists")
92114
except ClientError as e:
93115
error_code = e.response["Error"]["Code"]
94116
if error_code == "404":
95117
logger.info(f"Creating S3 bucket '{S3_BUCKET}'...")
96-
if AWS_REGION == "us-east-1":
97-
s3.create_bucket(Bucket=S3_BUCKET)
98-
else:
99-
s3.create_bucket(
100-
Bucket=S3_BUCKET,
101-
CreateBucketConfiguration={"LocationConstraint": AWS_REGION},
102-
)
118+
119+
def create_bucket():
120+
if AWS_REGION == "us-east-1":
121+
s3.create_bucket(Bucket=S3_BUCKET)
122+
else:
123+
s3.create_bucket(
124+
Bucket=S3_BUCKET,
125+
CreateBucketConfiguration={"LocationConstraint": AWS_REGION},
126+
)
127+
128+
skip_on_aws_403(create_bucket, "S3 CreateBucket")
103129
logger.info(f"S3 bucket '{S3_BUCKET}' created successfully")
104130
else:
105131
raise

0 commit comments

Comments
 (0)