From 6dd068e3517095c482d52d2971c5415b102c1685 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 1 Aug 2024 14:26:09 +0300 Subject: [PATCH 1/5] Add erros improvments. --- engineapi/engineapi/actions.py | 44 ++++++++++++++++++----- engineapi/engineapi/routes/leaderboard.py | 12 ++++--- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/engineapi/engineapi/actions.py b/engineapi/engineapi/actions.py index bc0c6d74..90fb7665 100644 --- a/engineapi/engineapi/actions.py +++ b/engineapi/engineapi/actions.py @@ -73,6 +73,17 @@ class DuplicateLeaderboardAddressError(Exception): self.duplicates = duplicates +class LeaderboardNormalizeScoresError(Exception): + def __init__(self, message, normilize_errors): + super(LeaderboardNormalizeScoresError, self).__init__(message) + self.message = message + self.normilize_errors = errors + + +class LeaderboardPushScoreError(Exception): + pass + + class LeaderboardIsEmpty(Exception): pass @@ -1687,15 +1698,28 @@ def add_scores( raise DuplicateLeaderboardAddressError("Dublicated addresses", duplicates) + # Process each score and append to leaderboard_scores list + non_normalized_addresses = [] for score in scores: - leaderboard_scores.append( - { - "leaderboard_id": leaderboard_id, - "address": normalizer_fn(score.address), - "score": score.score, - "points_data": score.points_data, - "leaderboard_version_number": version_number, - } + try: + normalized_address = normalizer_fn(score.address) + leaderboard_scores.append( + { + "leaderboard_id": leaderboard_id, + "address": normalized_address, + "score": score.score, + "points_data": score.points_data, + "leaderboard_version_number": version_number, + } + ) + except Exception as e: + non_normalized_addresses.append((index, score.address)) + logger.error(f"Error normalizing address {score.address}: {e}") + + if non_normalized_addresses: + raise LeaderboardNormalizeScoresError( + f"Error adding scores to leaderboard. Non-normalized addresses", + non_normalized_addresses, ) insert_statement = insert(LeaderboardScores).values(leaderboard_scores) @@ -1715,8 +1739,10 @@ def add_scores( try: db_session.execute(result_stmt) db_session.commit() - except: + except Exception as e: + logger.error(f"Error adding scores to leaderboard: {e}") db_session.rollback() + raise LeaderboardPushScoreError("Error committing scores") return leaderboard_scores diff --git a/engineapi/engineapi/routes/leaderboard.py b/engineapi/engineapi/routes/leaderboard.py index ce798cb2..9635bedd 100644 --- a/engineapi/engineapi/routes/leaderboard.py +++ b/engineapi/engineapi/routes/leaderboard.py @@ -773,11 +773,10 @@ async def leaderboard_push_scores( status_code=409, detail=f"Duplicates in push to database is disallowed.\n List of duplicates:{e.duplicates}.\n Please handle duplicates manualy.", ) - except actions.LeaderboardDeleteScoresError as e: - logger.error(f"Delete scores failed with error: {e}") + except actions.LeaderboardNormalizeScoresError as e: raise EngineHTTPException( - status_code=500, - detail=f"Delete scores failed.", + status_code=409, + detail=f"Normalize scores failed for addresses: {e.normilize_errors}.", ) except Exception as e: logger.error(f"Score update failed with error: {e}") @@ -1431,6 +1430,11 @@ async def leaderboard_version_push_scores_handler( status_code=409, detail=f"Duplicates in push to database is disallowed.\n List of duplicates:{e.duplicates}.\n Please handle duplicates manualy.", ) + except actions.LeaderboardNormalizeScoresError as e: + raise EngineHTTPException( + status_code=409, + detail=f"Normalize scores failed for addresses: {e.normilize_errors}.", + ) except Exception as e: logger.error(f"Score update failed with error: {e}") raise EngineHTTPException(status_code=500, detail="Score update failed.") From 6db5836cf617972033ff0691a82cd761506cdbc3 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 1 Aug 2024 15:22:33 +0300 Subject: [PATCH 2/5] Add changes. --- engineapi/engineapi/routes/leaderboard.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/engineapi/engineapi/routes/leaderboard.py b/engineapi/engineapi/routes/leaderboard.py index 9635bedd..aa70e08b 100644 --- a/engineapi/engineapi/routes/leaderboard.py +++ b/engineapi/engineapi/routes/leaderboard.py @@ -770,12 +770,12 @@ async def leaderboard_push_scores( ) except actions.DuplicateLeaderboardAddressError as e: raise EngineHTTPException( - status_code=409, + status_code=400, detail=f"Duplicates in push to database is disallowed.\n List of duplicates:{e.duplicates}.\n Please handle duplicates manualy.", ) except actions.LeaderboardNormalizeScoresError as e: raise EngineHTTPException( - status_code=409, + status_code=400, detail=f"Normalize scores failed for addresses: {e.normilize_errors}.", ) except Exception as e: @@ -1427,12 +1427,12 @@ async def leaderboard_version_push_scores_handler( ) except actions.DuplicateLeaderboardAddressError as e: raise EngineHTTPException( - status_code=409, + status_code=400, detail=f"Duplicates in push to database is disallowed.\n List of duplicates:{e.duplicates}.\n Please handle duplicates manualy.", ) except actions.LeaderboardNormalizeScoresError as e: raise EngineHTTPException( - status_code=409, + status_code=400, detail=f"Normalize scores failed for addresses: {e.normilize_errors}.", ) except Exception as e: From c57381a8cae08b3e46cfc9e5654143712c18f5de Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 1 Aug 2024 17:04:18 +0300 Subject: [PATCH 3/5] Add improvments. --- engineapi/engineapi/actions.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/engineapi/engineapi/actions.py b/engineapi/engineapi/actions.py index 90fb7665..b27f85fd 100644 --- a/engineapi/engineapi/actions.py +++ b/engineapi/engineapi/actions.py @@ -77,7 +77,7 @@ class LeaderboardNormalizeScoresError(Exception): def __init__(self, message, normilize_errors): super(LeaderboardNormalizeScoresError, self).__init__(message) self.message = message - self.normilize_errors = errors + self.normilize_errors = normilize_errors class LeaderboardPushScoreError(Exception): @@ -1700,7 +1700,7 @@ def add_scores( # Process each score and append to leaderboard_scores list non_normalized_addresses = [] - for score in scores: + for index, score in enumerate(scores): try: normalized_address = normalizer_fn(score.address) leaderboard_scores.append( @@ -1713,10 +1713,10 @@ def add_scores( } ) except Exception as e: - non_normalized_addresses.append((index, score.address)) - logger.error(f"Error normalizing address {score.address}: {e}") + non_normalized_addresses.append((index + 1, score.address)) if non_normalized_addresses: + logger.error(f"Error adding scores to leaderboard failed in normalizing") raise LeaderboardNormalizeScoresError( f"Error adding scores to leaderboard. Non-normalized addresses", non_normalized_addresses, From 799e2e409894a8d9471af95a1f2dc83f58fbf28d Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 1 Aug 2024 17:04:49 +0300 Subject: [PATCH 4/5] Add changes. --- engineapi/engineapi/version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engineapi/engineapi/version.txt b/engineapi/engineapi/version.txt index 2cfabea2..8cbf02c3 100644 --- a/engineapi/engineapi/version.txt +++ b/engineapi/engineapi/version.txt @@ -1 +1 @@ -0.0.11 +0.0.12 From fd932620c0a4b9b910f8aeb27ef7cb1b5f247d47 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 1 Aug 2024 17:21:04 +0300 Subject: [PATCH 5/5] Add specific error on commit. --- engineapi/engineapi/actions.py | 2 +- engineapi/engineapi/routes/leaderboard.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/engineapi/engineapi/actions.py b/engineapi/engineapi/actions.py index b27f85fd..f298ce99 100644 --- a/engineapi/engineapi/actions.py +++ b/engineapi/engineapi/actions.py @@ -1740,7 +1740,7 @@ def add_scores( db_session.execute(result_stmt) db_session.commit() except Exception as e: - logger.error(f"Error adding scores to leaderboard: {e}") + logger.error(f"Error adding scores to leaderboard failed on commit: {e}") db_session.rollback() raise LeaderboardPushScoreError("Error committing scores") diff --git a/engineapi/engineapi/routes/leaderboard.py b/engineapi/engineapi/routes/leaderboard.py index aa70e08b..0e05a751 100644 --- a/engineapi/engineapi/routes/leaderboard.py +++ b/engineapi/engineapi/routes/leaderboard.py @@ -778,6 +778,11 @@ async def leaderboard_push_scores( status_code=400, detail=f"Normalize scores failed for addresses: {e.normilize_errors}.", ) + except actions.LeaderboardPushScoreError as e: + raise EngineHTTPException( + status_code=500, + detail=f"Write scores to database failed", + ) except Exception as e: logger.error(f"Score update failed with error: {e}") raise EngineHTTPException(status_code=500, detail="Score update failed.") @@ -1435,6 +1440,11 @@ async def leaderboard_version_push_scores_handler( status_code=400, detail=f"Normalize scores failed for addresses: {e.normilize_errors}.", ) + except actions.LeaderboardPushScoreError as e: + raise EngineHTTPException( + status_code=500, + detail=f"Write scores to database failed", + ) except Exception as e: logger.error(f"Score update failed with error: {e}") raise EngineHTTPException(status_code=500, detail="Score update failed.")