File size: 1,272 Bytes
16e4ad5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | """Application state for the Pigeon Pea Pangenome Atlas."""
from dataclasses import dataclass, field
@dataclass
class AppState:
selected_line: str | None = None
selected_party: list[str] = field(default_factory=list)
selected_gene: str | None = None
backpack_genes: list[str] = field(default_factory=list)
core_threshold: float = 95.0
cloud_threshold: float = 15.0
selected_contig: str | None = None
achievements: set[str] = field(default_factory=set)
def add_to_backpack(self, gene_id: str) -> bool:
"""Add gene to backpack. Returns True if added, False if already present or full."""
if gene_id in self.backpack_genes:
return False
if len(self.backpack_genes) >= 50:
return False
self.backpack_genes.append(gene_id)
if len(self.backpack_genes) >= 5:
self.achievements.add("Collector")
return True
def remove_from_backpack(self, gene_id: str) -> bool:
"""Remove gene from backpack."""
if gene_id in self.backpack_genes:
self.backpack_genes.remove(gene_id)
return True
return False
def award(self, badge: str):
"""Award an achievement badge."""
self.achievements.add(badge)
|