Skip to content

Commit 461a93c

Browse files
ebios-starclaudeanderdc
authored
refactor: dedupe RepoEvaluation get-or-create with a MinerEvaluation helper (#1541)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Ander <61125407+anderdc@users.noreply.github.com>
1 parent 868dc48 commit 461a93c

2 files changed

Lines changed: 21 additions & 21 deletions

File tree

gittensor/classes.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,21 @@ class MinerEvaluation:
291291
# The top-level scalars above are round-level rollups of this map.
292292
repo_evaluations: Dict[str, RepoEvaluation] = field(default_factory=dict)
293293

294+
def get_or_create_repo_evaluation(
295+
self, repo_name: str, repository_full_name: Optional[str] = None
296+
) -> RepoEvaluation:
297+
"""Return the repo evaluation stored under ``repo_name``, creating one if absent.
298+
299+
``repo_name`` is the map key (a lowercased repository_full_name). When a
300+
new entry is created, ``repository_full_name`` seeds it, defaulting to
301+
``repo_name`` when not supplied.
302+
"""
303+
repo_eval = self.repo_evaluations.get(repo_name)
304+
if repo_eval is None:
305+
repo_eval = RepoEvaluation(repository_full_name=repository_full_name or repo_name)
306+
self.repo_evaluations[repo_name] = repo_eval
307+
return repo_eval
308+
294309
@property
295310
def total_prs(self) -> int:
296311
return self.total_merged_prs + self.total_closed_prs + self.total_open_prs
@@ -578,10 +593,7 @@ def store(self, evaluation: 'MinerEvaluation') -> None:
578593
value = getattr(existing.evaluation, name)
579594
setattr(cached_eval, name, _copy_issue_discovery_value(name, value))
580595
for repo_name, prior_repo in existing.evaluation.repo_evaluations.items():
581-
target = cached_eval.repo_evaluations.get(repo_name)
582-
if target is None:
583-
target = RepoEvaluation(repository_full_name=prior_repo.repository_full_name)
584-
cached_eval.repo_evaluations[repo_name] = target
596+
target = cached_eval.get_or_create_repo_evaluation(repo_name, prior_repo.repository_full_name)
585597
target.copy_issue_discovery_from(prior_repo)
586598

587599
self._cache[evaluation.uid] = CachedEvaluation(
@@ -621,10 +633,7 @@ def update_issue_discovery(self, evaluation: 'MinerEvaluation') -> None:
621633
setattr(existing.evaluation, name, _copy_issue_discovery_value(name, value))
622634

623635
for repo_name, repo_eval in evaluation.repo_evaluations.items():
624-
target = existing.evaluation.repo_evaluations.get(repo_name)
625-
if target is None:
626-
target = RepoEvaluation(repository_full_name=repo_eval.repository_full_name)
627-
existing.evaluation.repo_evaluations[repo_name] = target
636+
target = existing.evaluation.get_or_create_repo_evaluation(repo_name, repo_eval.repository_full_name)
628637
target.copy_issue_discovery_from(repo_eval)
629638

630639
bt.logging.debug(f'Refreshed cached issue discovery for UID {evaluation.uid}')

gittensor/validator/issue_discovery/scan.py

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040

4141
import bittensor as bt
4242

43-
from gittensor.classes import Issue, MinerEvaluation, MinerEvaluationCache, RepoEvaluation
43+
from gittensor.classes import Issue, MinerEvaluation, MinerEvaluationCache
4444
from gittensor.constants import (
4545
MAINTAINER_ASSOCIATIONS,
4646
)
@@ -278,10 +278,7 @@ def _apply_open_issue_counts(evaluation: MinerEvaluation, open_counts: Dict[str,
278278
"""Record per-repo open-issue counts (and the round-level total) for a miner
279279
with no in-window issues to score."""
280280
for repo_name, count in open_counts.items():
281-
repo_eval = evaluation.repo_evaluations.get(repo_name)
282-
if repo_eval is None:
283-
repo_eval = RepoEvaluation(repository_full_name=repo_name)
284-
evaluation.repo_evaluations[repo_name] = repo_eval
281+
repo_eval = evaluation.get_or_create_repo_evaluation(repo_name)
285282
repo_eval.total_open_issues = count
286283
evaluation.total_open_issues = sum(open_counts.values())
287284

@@ -297,10 +294,7 @@ def _copy_issue_discovery_fields(target: MinerEvaluation, source: MinerEvaluatio
297294
target.total_open_issues = source.total_open_issues
298295
target.issue_discovery_issues = list(source.issue_discovery_issues)
299296
for repo_name, source_repo in source.repo_evaluations.items():
300-
target_repo = target.repo_evaluations.get(repo_name)
301-
if target_repo is None:
302-
target_repo = RepoEvaluation(repository_full_name=source_repo.repository_full_name)
303-
target.repo_evaluations[repo_name] = target_repo
297+
target_repo = target.get_or_create_repo_evaluation(repo_name, source_repo.repository_full_name)
304298
target_repo.copy_issue_discovery_from(source_repo)
305299

306300

@@ -560,10 +554,7 @@ def _finalize_repo_issue_scores(
560554
acc = repo_acc.get(repo_name) or _RepoIssueAcc()
561555
open_count = open_counts.get(repo_name, 0)
562556

563-
repo_eval = evaluation.repo_evaluations.get(repo_name)
564-
if repo_eval is None:
565-
repo_eval = RepoEvaluation(repository_full_name=repo_name)
566-
evaluation.repo_evaluations[repo_name] = repo_eval
557+
repo_eval = evaluation.get_or_create_repo_evaluation(repo_name)
567558

568559
repo_eval.total_solved_issues = acc.solved
569560
repo_eval.total_valid_solved_issues = acc.valid_solved

0 commit comments

Comments
 (0)