PynamoDB
PynamoDB copied to clipboard
why can't we catch/suppress ConditionalCheckFailedException?
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
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.
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?
I've submitted this PR - https://github.com/pynamodb/PynamoDB/pull/1202 Would you like to consider it? is there something I should do in order to contribute code properly?