models.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. """Atlas internal data models."""
  2. from dataclasses import dataclass, field
  3. from typing import Any, Dict, List, Optional
  4. @dataclass
  5. class AtlasIdentifier:
  6. value: str
  7. source: str
  8. identifier_type: str
  9. @dataclass
  10. class AtlasAlias:
  11. label: str
  12. language: str = "und"
  13. source: str = "query"
  14. @dataclass
  15. class AtlasProvenance:
  16. source: str
  17. retrieval_method: str
  18. confidence: float = 0.0
  19. retrieved_at: Optional[str] = None
  20. evidence_property: str | None = None
  21. provider: str | None = None
  22. model: str | None = None
  23. @dataclass
  24. class AtlasClaimObject:
  25. kind: str
  26. value: str
  27. id_type: str | None = None
  28. @dataclass
  29. class AtlasClaim:
  30. claim_id: str
  31. subject: str
  32. predicate: str
  33. object: AtlasClaimObject
  34. layer: str
  35. status: str = "active"
  36. provenance: AtlasProvenance | None = None
  37. created_at: str | None = None
  38. @dataclass
  39. class AtlasEntity:
  40. atlas_id: str
  41. canonical_label: str
  42. canonical_description: str | None = None
  43. entity_type: str = "unknown"
  44. aliases: List[AtlasAlias] = field(default_factory=list)
  45. claims: List[AtlasClaim] = field(default_factory=list)
  46. raw_payload: Dict[str, Any] = field(default_factory=dict)
  47. needs_curation: bool = False
  48. def active_identifier(self, identifier_type: str) -> str | None:
  49. for claim in self.claims:
  50. if (
  51. claim.status == "active"
  52. and claim.predicate == "atlas:hasIdentifier"
  53. and claim.object.kind == "identifier"
  54. and claim.object.id_type == identifier_type
  55. ):
  56. return claim.object.value
  57. return None
  58. @dataclass
  59. class AtlasEnrichmentDataset:
  60. seed_entity: AtlasEntity
  61. related_entities: List[AtlasEntity] = field(default_factory=list)
  62. query_context: Dict[str, Any] = field(default_factory=dict)
  63. depth: int = 1