Spaces:
Sleeping
Sleeping
File size: 1,573 Bytes
5a0e691 57fa457 5a0e691 57fa457 5a0e691 | 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 39 40 41 42 43 44 | from Bio import SeqIO
from io import StringIO
from dataclasses import dataclass, field
from typing import List
@dataclass
class ValidationResult:
valid: bool = True
error: str = ""
sequences: List = field(default_factory=list)
def validate_fasta(text: str, tool: str = "blast") -> ValidationResult:
if not text or not text.strip():
return ValidationResult(valid=False, error="Empty sequence")
# Try parsing as FASTA
try:
records = list(SeqIO.parse(StringIO(text), "fasta"))
except Exception:
records = []
if records:
for rec in records:
seq_str = str(rec.seq)
if len(seq_str) < 6:
return ValidationResult(valid=False, error=f"Sequence too short: {len(seq_str)} residues")
if not set(seq_str.upper()).issubset(set("ACDEFGHIKLMNPQRSTVWYUBZXOJ")):
return ValidationResult(valid=False, error="Invalid amino acid characters found")
return ValidationResult(sequences=records)
# Plain sequence (no FASTA header)
clean = "".join(c for c in text if c.isalpha()).upper()
if len(clean) < 6:
return ValidationResult(valid=False, error=f"Sequence too short: {len(clean)} residues")
if not set(clean).issubset(set("ACDEFGHIKLMNPQRSTVWYUBZXOJ")):
return ValidationResult(valid=False, error="Invalid amino acid characters found")
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
record = SeqRecord(Seq(clean), id="query", description="")
return ValidationResult(sequences=[record])
|