Skip to content

Commit 351ecd3

Browse files
author
Dhanush Varma
committed
fix: guard .first() queries against None to prevent AttributeError
Three queries called .first().value or .first().commit without checking for None. On a fresh install or empty database, these crash with AttributeError. Fixed in mod_ci/controllers.py, mod_home/controllers.py, and mod_sample/controllers.py.
1 parent b304ba3 commit 351ecd3

File tree

3 files changed

+15
-7
lines changed

3 files changed

+15
-7
lines changed

mod_ci/controllers.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -993,8 +993,13 @@ def start_test(compute, app, db, repository: Repository.Repository, test, bot_to
993993

994994
categories = Category.query.order_by(Category.id.desc()).all()
995995
commit_name = 'fetch_commit_' + test.platform.value
996-
commit_hash = GeneralData.query.filter(GeneralData.key == commit_name).first().value
997-
last_commit = Test.query.filter(and_(Test.commit == commit_hash, Test.platform == test.platform)).first()
996+
commit_entry = GeneralData.query.filter(GeneralData.key == commit_name).first()
997+
if commit_entry is None:
998+
log.warning(f'No commit hash found for {commit_name}, skipping comparison')
999+
commit_hash = None
1000+
else:
1001+
commit_hash = commit_entry.value
1002+
last_commit = Test.query.filter(and_(Test.commit == commit_hash, Test.platform == test.platform)).first() if commit_hash else None
9981003

9991004
if last_commit is not None:
10001005
log.debug(f"[{gcp_instance_name}] We will compare against the results of test {last_commit.id}")

mod_home/controllers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ def before_app_request() -> None:
2222
@template_renderer()
2323
def index():
2424
"""Render index home page."""
25-
last_commit = GeneralData.query.filter(GeneralData.key == 'last_commit').first().value
25+
last_commit_entry = GeneralData.query.filter(GeneralData.key == 'last_commit').first()
26+
last_commit = last_commit_entry.value if last_commit_entry is not None else None
2627
last_release = CCExtractorVersion.query.order_by(CCExtractorVersion.released.desc()).first()
2728
test_access = False
2829
if g.user is not None and g.user.role in [Role.tester, Role.contributor, Role.admin]:

mod_sample/controllers.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,13 @@ def display_sample_info(sample) -> Dict[str, Any]:
5656
# in case no media info present in the sample
5757
media_info = None
5858

59-
latest_commit = GeneralData.query.filter(GeneralData.key == 'last_commit').first().value
60-
last_release = CCExtractorVersion.query.order_by(CCExtractorVersion.released.desc()).first().commit
59+
latest_commit_entry = GeneralData.query.filter(GeneralData.key == 'last_commit').first()
60+
latest_commit = latest_commit_entry.value if latest_commit_entry is not None else None
61+
last_release_entry = CCExtractorVersion.query.order_by(CCExtractorVersion.released.desc()).first()
62+
last_release = last_release_entry.commit if last_release_entry is not None else None
6163

62-
test_commit = Test.query.filter(Test.commit == latest_commit).first()
63-
test_release = Test.query.filter(Test.commit == last_release).first()
64+
test_commit = Test.query.filter(Test.commit == latest_commit).first() if latest_commit else None
65+
test_release = Test.query.filter(Test.commit == last_release).first() if last_release else None
6466
regression_tests = RegressionTest.query.filter(RegressionTest.sample_id == sample.id).all()
6567
status = 'Unknown'
6668
status_release = 'Unknown'

0 commit comments

Comments
 (0)