-
Notifications
You must be signed in to change notification settings - Fork 433
Open
Description
It seems quite unpythonic to force users to write such constructs when dealing with the oh-so-useful conditional operations in DynamoDM:
try:
thread_item.save(Thread.forum_name.exists())
except PutError as e:
if isinstance(e.cause, ClientError):
code = e.cause.response['Error'].get('Code')
print(code == "ConditionalCheckFailedException")
PynamoDB already issues it own exceptions - why not perform this if
and raise a ConditionalCheckFailed
? why perpetuate the bad API for boto3 (in this regard) into this otherwise very pythonic library?
Make this work:
try:
thread_item.save(Thread.forum_name.exists())
except ConditionalCheckFailed:
pass
ikonst and having-fun-serverless
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
ikonst commentedon Sep 26, 2022
The only counter-point I can offer is that, unless we break backward compatibility, we'd need to have:
UpdateConditionalCheckFailedError
extendingUpdateError
PutConditionalCheckFailedError
extendingPutError
DeleteConditionalCheckFailedError
extendingDeleteError
BTW, to make it a bit shorter right now, you can opt to use the
PynamoDBException.cause_response_code
property.koreno commentedon Oct 25, 2023
What do you say? can this be implemented?
I'm still suprised that this is the way to handle something that is so common...
Isn't this supposed to be the value of a pythonic, OO wrapper code to DynamoDB?
Raise appropriate exceptions for condition failures (pynamodb#1076)
koreno commentedon Dec 5, 2023
I've submitted this PR - #1202
Would you like to consider it? is there something I should do in order to contribute code properly?