Skip to content

why can't we catch/suppress ConditionalCheckFailedException? #1076

@koreno

Description

@koreno

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

Activity

ikonst

ikonst commented on Sep 26, 2022

@ikonst
Contributor

The only counter-point I can offer is that, unless we break backward compatibility, we'd need to have:

  • UpdateConditionalCheckFailedError extending UpdateError
  • PutConditionalCheckFailedError extending PutError
  • DeleteConditionalCheckFailedError extending DeleteError

BTW, to make it a bit shorter right now, you can opt to use the PynamoDBException.cause_response_code property.

koreno

koreno commented on Oct 25, 2023

@koreno
Author

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?

koreno

koreno commented on Dec 5, 2023

@koreno
Author

I've submitted this PR - #1202
Would you like to consider it? is there something I should do in order to contribute code properly?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @koreno@ikonst

      Issue actions

        why can't we catch/suppress ConditionalCheckFailedException? · Issue #1076 · pynamodb/PynamoDB