models.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. @dataclass
  22. class AtlasClaimObject:
  23. kind: str
  24. value: str
  25. id_type: str | None = None
  26. @dataclass
  27. class AtlasClaim:
  28. claim_id: str
  29. subject: str
  30. predicate: str
  31. object: AtlasClaimObject
  32. layer: str
  33. status: str = "active"
  34. provenance: AtlasProvenance | None = None
  35. created_at: str | None = None
  36. @dataclass
  37. class AtlasEntity:
  38. atlas_id: str
  39. canonical_label: str
  40. canonical_description: str | None = None
  41. entity_type: str = "unknown"
  42. aliases: List[AtlasAlias] = field(default_factory=list)
  43. claims: List[AtlasClaim] = field(default_factory=list)
  44. raw_payload: Dict[str, Any] = field(default_factory=dict)
  45. needs_curation: bool = False
  46. def active_identifier(self, identifier_type: str) -> str | None:
  47. for claim in self.claims:
  48. if (
  49. claim.status == "active"
  50. and claim.predicate == "atlas:hasIdentifier"
  51. and claim.object.kind == "identifier"
  52. and claim.object.id_type == identifier_type
  53. ):
  54. return claim.object.value
  55. return None
  56. @dataclass
  57. class AtlasEnrichmentDataset:
  58. seed_entity: AtlasEntity
  59. related_entities: List[AtlasEntity] = field(default_factory=list)
  60. query_context: Dict[str, Any] = field(default_factory=dict)
  61. depth: int = 1