nci-cidc-api-modules 1.2.34__py3-none-any.whl → 1.2.45__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. cidc_api/__init__.py +1 -0
  2. cidc_api/config/db.py +21 -1
  3. cidc_api/config/settings.py +1 -0
  4. cidc_api/models/__init__.py +0 -2
  5. cidc_api/models/data.py +15 -6
  6. cidc_api/models/db/stage1/__init__.py +56 -0
  7. cidc_api/models/db/stage1/additional_treatment_orm.py +22 -0
  8. cidc_api/models/db/stage1/adverse_event_orm.py +46 -0
  9. cidc_api/models/db/stage1/base_orm.py +7 -0
  10. cidc_api/models/db/stage1/baseline_clinical_assessment_orm.py +22 -0
  11. cidc_api/models/db/stage1/comorbidity_orm.py +23 -0
  12. cidc_api/models/db/stage1/consent_group_orm.py +32 -0
  13. cidc_api/models/db/stage1/demographic_orm.py +47 -0
  14. cidc_api/models/db/stage1/disease_orm.py +52 -0
  15. cidc_api/models/db/stage1/exposure_orm.py +22 -0
  16. cidc_api/models/db/stage1/gvhd_diagnosis_acute_orm.py +34 -0
  17. cidc_api/models/db/stage1/gvhd_diagnosis_chronic_orm.py +36 -0
  18. cidc_api/models/db/stage1/gvhd_organ_acute_orm.py +21 -0
  19. cidc_api/models/db/stage1/gvhd_organ_chronic_orm.py +21 -0
  20. cidc_api/models/db/stage1/medical_history_orm.py +30 -0
  21. cidc_api/models/db/stage1/other_malignancy_orm.py +29 -0
  22. cidc_api/models/db/stage1/participant_orm.py +77 -0
  23. cidc_api/models/db/stage1/prior_treatment_orm.py +29 -0
  24. cidc_api/models/db/stage1/radiotherapy_dose_orm.py +39 -0
  25. cidc_api/models/db/stage1/response_by_system_orm.py +30 -0
  26. cidc_api/models/db/stage1/response_orm.py +28 -0
  27. cidc_api/models/db/stage1/specimen_orm.py +46 -0
  28. cidc_api/models/db/stage1/stem_cell_transplant_orm.py +25 -0
  29. cidc_api/models/db/stage1/surgery_orm.py +27 -0
  30. cidc_api/models/db/stage1/therapy_agent_dose_orm.py +31 -0
  31. cidc_api/models/db/stage1/treatment_orm.py +38 -0
  32. cidc_api/models/db/stage1/trial_orm.py +35 -0
  33. cidc_api/models/db/stage2/additional_treatment_orm.py +6 -7
  34. cidc_api/models/db/stage2/administrative_person_orm.py +4 -4
  35. cidc_api/models/db/stage2/administrative_role_assignment_orm.py +4 -4
  36. cidc_api/models/db/stage2/adverse_event_orm.py +11 -13
  37. cidc_api/models/db/stage2/arm_orm.py +3 -3
  38. cidc_api/models/db/stage2/base_orm.py +7 -0
  39. cidc_api/models/db/stage2/baseline_clinical_assessment_orm.py +5 -7
  40. cidc_api/models/db/stage2/cohort_orm.py +3 -3
  41. cidc_api/models/db/stage2/comorbidity_orm.py +6 -8
  42. cidc_api/models/db/stage2/consent_group_orm.py +4 -4
  43. cidc_api/models/db/stage2/contact_orm.py +16 -20
  44. cidc_api/models/db/stage2/demographic_orm.py +3 -3
  45. cidc_api/models/db/stage2/disease_orm.py +4 -4
  46. cidc_api/models/db/stage2/exposure_orm.py +3 -3
  47. cidc_api/models/db/stage2/file_orm.py +6 -9
  48. cidc_api/models/db/stage2/gvhd_diagnosis_acute_orm.py +4 -4
  49. cidc_api/models/db/stage2/gvhd_diagnosis_chronic_orm.py +4 -6
  50. cidc_api/models/db/stage2/gvhd_organ_acute_orm.py +3 -3
  51. cidc_api/models/db/stage2/gvhd_organ_chronic_orm.py +3 -3
  52. cidc_api/models/db/stage2/institution_orm.py +7 -7
  53. cidc_api/models/db/stage2/medical_history_orm.py +9 -9
  54. cidc_api/models/db/stage2/other_clinical_endpoint_orm.py +8 -12
  55. cidc_api/models/db/stage2/other_malignancy_orm.py +8 -10
  56. cidc_api/models/db/stage2/participant_orm.py +23 -24
  57. cidc_api/models/db/stage2/prior_treatment_orm.py +12 -13
  58. cidc_api/models/db/stage2/publication_orm.py +9 -11
  59. cidc_api/models/db/stage2/radiotherapy_dose_orm.py +8 -9
  60. cidc_api/models/db/stage2/response_by_system_orm.py +3 -3
  61. cidc_api/models/db/stage2/response_orm.py +3 -3
  62. cidc_api/models/db/stage2/shipment_orm.py +17 -17
  63. cidc_api/models/db/stage2/shipment_specimen_orm.py +4 -4
  64. cidc_api/models/db/stage2/specimen_orm.py +7 -6
  65. cidc_api/models/db/stage2/stem_cell_transplant_orm.py +6 -7
  66. cidc_api/models/db/stage2/surgery_orm.py +6 -7
  67. cidc_api/models/db/stage2/therapy_agent_dose_orm.py +7 -8
  68. cidc_api/models/db/stage2/treatment_orm.py +15 -15
  69. cidc_api/models/db/stage2/trial_orm.py +15 -17
  70. cidc_api/models/files/facets.py +4 -0
  71. cidc_api/models/models.py +153 -9
  72. cidc_api/models/pydantic/{stage2/base.py → base.py} +1 -1
  73. cidc_api/models/pydantic/stage1/__init__.py +56 -0
  74. cidc_api/models/pydantic/stage1/additional_treatment.py +23 -0
  75. cidc_api/models/pydantic/stage1/adverse_event.py +100 -0
  76. cidc_api/models/pydantic/stage1/baseline_clinical_assessment.py +23 -0
  77. cidc_api/models/pydantic/stage1/comorbidity.py +36 -0
  78. cidc_api/models/pydantic/stage1/consent_group.py +30 -0
  79. cidc_api/models/pydantic/stage1/demographic.py +123 -0
  80. cidc_api/models/pydantic/stage1/disease.py +158 -0
  81. cidc_api/models/pydantic/stage1/exposure.py +32 -0
  82. cidc_api/models/pydantic/stage1/gvhd_diagnosis_acute.py +33 -0
  83. cidc_api/models/pydantic/stage1/gvhd_diagnosis_chronic.py +32 -0
  84. cidc_api/models/pydantic/stage1/gvhd_organ_acute.py +22 -0
  85. cidc_api/models/pydantic/stage1/gvhd_organ_chronic.py +23 -0
  86. cidc_api/models/pydantic/stage1/medical_history.py +36 -0
  87. cidc_api/models/pydantic/stage1/other_malignancy.py +49 -0
  88. cidc_api/models/pydantic/stage1/participant.py +51 -0
  89. cidc_api/models/pydantic/stage1/prior_treatment.py +45 -0
  90. cidc_api/models/pydantic/stage1/radiotherapy_dose.py +79 -0
  91. cidc_api/models/pydantic/stage1/response.py +65 -0
  92. cidc_api/models/pydantic/stage1/response_by_system.py +112 -0
  93. cidc_api/models/pydantic/stage1/specimen.py +31 -0
  94. cidc_api/models/pydantic/stage1/stem_cell_transplant.py +35 -0
  95. cidc_api/models/pydantic/stage1/surgery.py +49 -0
  96. cidc_api/models/pydantic/stage1/therapy_agent_dose.py +67 -0
  97. cidc_api/models/pydantic/stage1/treatment.py +50 -0
  98. cidc_api/models/pydantic/stage1/trial.py +45 -0
  99. cidc_api/models/pydantic/stage2/additional_treatment.py +2 -4
  100. cidc_api/models/pydantic/stage2/administrative_person.py +1 -1
  101. cidc_api/models/pydantic/stage2/administrative_role_assignment.py +2 -2
  102. cidc_api/models/pydantic/stage2/adverse_event.py +1 -1
  103. cidc_api/models/pydantic/stage2/arm.py +2 -2
  104. cidc_api/models/pydantic/stage2/baseline_clinical_assessment.py +1 -1
  105. cidc_api/models/pydantic/stage2/cohort.py +1 -1
  106. cidc_api/models/pydantic/stage2/comorbidity.py +1 -1
  107. cidc_api/models/pydantic/stage2/consent_group.py +2 -2
  108. cidc_api/models/pydantic/stage2/contact.py +1 -1
  109. cidc_api/models/pydantic/stage2/demographic.py +1 -1
  110. cidc_api/models/pydantic/stage2/disease.py +1 -1
  111. cidc_api/models/pydantic/stage2/exposure.py +1 -1
  112. cidc_api/models/pydantic/stage2/file.py +2 -2
  113. cidc_api/models/pydantic/stage2/gvhd_diagnosis_acute.py +1 -1
  114. cidc_api/models/pydantic/stage2/gvhd_diagnosis_chronic.py +1 -1
  115. cidc_api/models/pydantic/stage2/gvhd_organ_acute.py +1 -1
  116. cidc_api/models/pydantic/stage2/gvhd_organ_chronic.py +1 -1
  117. cidc_api/models/pydantic/stage2/institution.py +1 -1
  118. cidc_api/models/pydantic/stage2/medical_history.py +1 -1
  119. cidc_api/models/pydantic/stage2/other_clinical_endpoint.py +1 -1
  120. cidc_api/models/pydantic/stage2/other_malignancy.py +1 -1
  121. cidc_api/models/pydantic/stage2/participant.py +6 -3
  122. cidc_api/models/pydantic/stage2/prior_treatment.py +6 -15
  123. cidc_api/models/pydantic/stage2/publication.py +2 -2
  124. cidc_api/models/pydantic/stage2/radiotherapy_dose.py +1 -1
  125. cidc_api/models/pydantic/stage2/response.py +2 -2
  126. cidc_api/models/pydantic/stage2/response_by_system.py +1 -1
  127. cidc_api/models/pydantic/stage2/shipment.py +2 -2
  128. cidc_api/models/pydantic/stage2/shipment_specimen.py +1 -1
  129. cidc_api/models/pydantic/stage2/specimen.py +6 -3
  130. cidc_api/models/pydantic/stage2/stem_cell_transplant.py +2 -2
  131. cidc_api/models/pydantic/stage2/surgery.py +1 -1
  132. cidc_api/models/pydantic/stage2/therapy_agent_dose.py +1 -1
  133. cidc_api/models/pydantic/stage2/treatment.py +1 -1
  134. cidc_api/models/pydantic/stage2/trial.py +8 -10
  135. cidc_api/models/types.py +30 -16
  136. cidc_api/shared/assay_handling.py +68 -0
  137. cidc_api/shared/auth.py +5 -5
  138. cidc_api/shared/file_handling.py +16 -4
  139. cidc_api/shared/gcloud_client.py +78 -16
  140. cidc_api/shared/utils.py +18 -9
  141. cidc_api/telemetry.py +101 -0
  142. {nci_cidc_api_modules-1.2.34.dist-info → nci_cidc_api_modules-1.2.45.dist-info}/METADATA +21 -12
  143. nci_cidc_api_modules-1.2.45.dist-info/RECORD +165 -0
  144. cidc_api/models/db/base_orm.py +0 -25
  145. nci_cidc_api_modules-1.2.34.dist-info/RECORD +0 -109
  146. {nci_cidc_api_modules-1.2.34.dist-info → nci_cidc_api_modules-1.2.45.dist-info}/WHEEL +0 -0
  147. {nci_cidc_api_modules-1.2.34.dist-info → nci_cidc_api_modules-1.2.45.dist-info}/licenses/LICENSE +0 -0
  148. {nci_cidc_api_modules-1.2.34.dist-info → nci_cidc_api_modules-1.2.45.dist-info}/top_level.txt +0 -0
@@ -1,16 +1,14 @@
1
- from typing import Optional
2
-
1
+ from __future__ import annotations
3
2
  from sqlalchemy import ForeignKey
4
3
  from sqlalchemy.orm import Mapped, mapped_column, relationship
5
4
 
6
- from cidc_api.models.db.base_orm import BaseORM
5
+ from cidc_api.models.db.stage2.base_orm import BaseORM
7
6
  from cidc_api.models.types import ICD10CMCode, ICD10CMTerm
8
7
 
9
8
 
10
9
  class ComorbidityORM(BaseORM):
11
10
  __tablename__ = "comorbidity"
12
11
  __repr_attrs__ = ["comorbidity_id", "comorbidity_term"]
13
- __table_args__ = {"schema": "stage2"}
14
12
  __data_category__ = "comorbidity"
15
13
 
16
14
  comorbidity_id: Mapped[int] = mapped_column(primary_key=True)
@@ -18,8 +16,8 @@ class ComorbidityORM(BaseORM):
18
16
  ForeignKey("stage2.medical_history.medical_history_id", ondelete="CASCADE")
19
17
  )
20
18
 
21
- comorbidity_code: Mapped[Optional[ICD10CMCode]]
22
- comorbidity_term: Mapped[Optional[ICD10CMTerm]]
23
- comorbidity_other: Mapped[Optional[str]]
19
+ comorbidity_code: Mapped[ICD10CMCode | None]
20
+ comorbidity_term: Mapped[ICD10CMTerm | None]
21
+ comorbidity_other: Mapped[str | None]
24
22
 
25
- medical_history: Mapped["MedicalHistoryORM"] = relationship(back_populates="comorbidities", cascade="all, delete")
23
+ medical_history: Mapped[MedicalHistoryORM] = relationship(back_populates="comorbidities", cascade="all, delete")
@@ -1,10 +1,11 @@
1
+ from __future__ import annotations
1
2
  from typing import List
2
3
 
3
4
  from pydantic import NonNegativeInt
4
5
  from sqlalchemy import ForeignKeyConstraint
5
6
  from sqlalchemy.orm import Mapped, mapped_column, relationship
6
7
 
7
- from cidc_api.models.db.base_orm import BaseORM
8
+ from cidc_api.models.db.stage2.base_orm import BaseORM
8
9
 
9
10
 
10
11
  class ConsentGroupORM(BaseORM):
@@ -14,7 +15,6 @@ class ConsentGroupORM(BaseORM):
14
15
  ForeignKeyConstraint(
15
16
  ["trial_id", "version"], ["stage2.trial.trial_id", "stage2.trial.version"], ondelete="CASCADE"
16
17
  ),
17
- {"schema": "stage2"},
18
18
  )
19
19
  __data_category__ = "consent_group"
20
20
 
@@ -26,7 +26,7 @@ class ConsentGroupORM(BaseORM):
26
26
  consent_group_name: Mapped[str]
27
27
  consent_group_number: Mapped[NonNegativeInt]
28
28
 
29
- trial: Mapped["TrialORM"] = relationship(back_populates="consent_groups", cascade="all, delete")
30
- participants: Mapped[List["ParticipantORM"]] = relationship(
29
+ trial: Mapped[TrialORM] = relationship(back_populates="consent_groups", cascade="all, delete")
30
+ participants: Mapped[List[ParticipantORM]] = relationship(
31
31
  back_populates="consent_group", cascade="all, delete", passive_deletes=True
32
32
  )
@@ -1,32 +1,28 @@
1
- from typing import Optional
2
-
1
+ from __future__ import annotations
3
2
  from sqlalchemy import ForeignKey
4
3
  from sqlalchemy.orm import Mapped, mapped_column, relationship
5
4
 
6
- from cidc_api.models.db.base_orm import BaseORM
5
+ from cidc_api.models.db.stage2.base_orm import BaseORM
7
6
 
8
7
 
9
8
  class ContactORM(BaseORM):
10
9
  __tablename__ = "contact"
11
- __table_args__ = {"schema": "stage2"}
12
10
 
13
11
  contact_id: Mapped[int] = mapped_column(primary_key=True)
14
12
  institution_id: Mapped[int] = mapped_column(ForeignKey("stage2.institution.institution_id", ondelete="CASCADE"))
15
- shipment_from_id: Mapped[Optional[int]] = mapped_column(
16
- ForeignKey("stage2.shipment.shipment_id", ondelete="CASCADE")
17
- )
18
- shipment_to_id: Mapped[Optional[int]] = mapped_column(ForeignKey("stage2.shipment.shipment_id", ondelete="CASCADE"))
13
+ shipment_from_id: Mapped[int | None] = mapped_column(ForeignKey("stage2.shipment.shipment_id", ondelete="CASCADE"))
14
+ shipment_to_id: Mapped[int | None] = mapped_column(ForeignKey("stage2.shipment.shipment_id", ondelete="CASCADE"))
19
15
 
20
- name: Mapped[Optional[str]]
21
- email: Mapped[Optional[str]]
22
- phone: Mapped[Optional[str]]
23
- street1: Mapped[Optional[str]]
24
- street2: Mapped[Optional[str]]
25
- city: Mapped[Optional[str]]
26
- state: Mapped[Optional[str]]
27
- zip: Mapped[Optional[str]]
28
- country: Mapped[Optional[str]]
16
+ name: Mapped[str | None]
17
+ email: Mapped[str | None]
18
+ phone: Mapped[str | None]
19
+ street1: Mapped[str | None]
20
+ street2: Mapped[str | None]
21
+ city: Mapped[str | None]
22
+ state: Mapped[str | None]
23
+ zip: Mapped[str | None]
24
+ country: Mapped[str | None]
29
25
 
30
- institution: Mapped[Optional["InstitutionORM"]] = relationship(back_populates="contacts", cascade="all, delete")
31
- shipment_from: Mapped["ShipmentORM"] = relationship(cascade="all, delete", foreign_keys=[shipment_from_id])
32
- shipment_to: Mapped["ShipmentORM"] = relationship(cascade="all, delete", foreign_keys=[shipment_to_id])
26
+ institution: Mapped[InstitutionORM | None] = relationship(back_populates="contacts", cascade="all, delete")
27
+ shipment_from: Mapped[ShipmentORM] = relationship(cascade="all, delete", foreign_keys=[shipment_from_id])
28
+ shipment_to: Mapped[ShipmentORM] = relationship(cascade="all, delete", foreign_keys=[shipment_to_id])
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from pydantic import NonNegativeFloat, PositiveFloat, PositiveInt
2
3
  from typing import List
3
4
 
@@ -5,7 +6,7 @@ from sqlalchemy import ForeignKey
5
6
  from sqlalchemy.orm import Mapped, mapped_column, relationship
6
7
  from sqlalchemy.types import JSON
7
8
 
8
- from cidc_api.models.db.base_orm import BaseORM
9
+ from cidc_api.models.db.stage2.base_orm import BaseORM
9
10
  from cidc_api.models.types import (
10
11
  Sex,
11
12
  Race,
@@ -22,7 +23,6 @@ from cidc_api.models.types import (
22
23
  class DemographicORM(BaseORM):
23
24
  __tablename__ = "demographic"
24
25
  __repr_attrs__ = ["demographic_id", "participant_id", "age_at_enrollment", "sex"]
25
- __table_args__ = {"schema": "stage2"}
26
26
  __data_category__ = "demographic"
27
27
 
28
28
  demographic_id: Mapped[int] = mapped_column(primary_key=True)
@@ -44,4 +44,4 @@ class DemographicORM(BaseORM):
44
44
  income: Mapped[NonNegativeFloat | None]
45
45
  highest_level_of_education: Mapped[Education | None]
46
46
 
47
- participant: Mapped["ParticipantORM"] = relationship(back_populates="demographic", cascade="all, delete")
47
+ participant: Mapped[ParticipantORM] = relationship(back_populates="demographic", cascade="all, delete")
@@ -1,11 +1,12 @@
1
- from typing import List, Optional
1
+ from __future__ import annotations
2
+ from typing import List
2
3
 
3
4
  from pydantic import NonPositiveInt
4
5
  from sqlalchemy import ForeignKey
5
6
  from sqlalchemy.orm import Mapped, mapped_column, relationship
6
7
  from sqlalchemy.types import JSON
7
8
 
8
- from cidc_api.models.db.base_orm import BaseORM
9
+ from cidc_api.models.db.stage2.base_orm import BaseORM
9
10
  from cidc_api.models.types import (
10
11
  TumorGrade,
11
12
  CancerStageSystem,
@@ -28,7 +29,6 @@ class DiseaseORM(BaseORM):
28
29
  "disease_id",
29
30
  "participant_id",
30
31
  ]
31
- __table_args__ = {"schema": "stage2"}
32
32
  __data_category__ = "disease"
33
33
 
34
34
  disease_id: Mapped[int] = mapped_column(primary_key=True)
@@ -49,4 +49,4 @@ class DiseaseORM(BaseORM):
49
49
  solely_extramedullary_disease: Mapped[YNU]
50
50
  extramedullary_organ: Mapped[List[UberonAnatomicalTerm]] = mapped_column(JSON, nullable=True)
51
51
 
52
- participant: Mapped["ParticipantORM"] = relationship(back_populates="diseases", cascade="all, delete")
52
+ participant: Mapped[ParticipantORM] = relationship(back_populates="diseases", cascade="all, delete")
@@ -1,16 +1,16 @@
1
+ from __future__ import annotations
1
2
  from typing import List
2
3
 
3
4
  from sqlalchemy import ForeignKey
4
5
  from sqlalchemy.orm import Mapped, mapped_column, relationship
5
6
 
6
- from cidc_api.models.db.base_orm import BaseORM
7
+ from cidc_api.models.db.stage2.base_orm import BaseORM
7
8
  from cidc_api.models.types import YNU, ExposureType
8
9
 
9
10
 
10
11
  class ExposureORM(BaseORM):
11
12
  __tablename__ = "exposure"
12
13
  __repr_attrs__ = ["exposure_id", "exposure_type", "carcinogen_exposure"]
13
- __table_args__ = {"schema": "stage2"}
14
14
  __data_category__ = "exposure"
15
15
 
16
16
  exposure_id: Mapped[int] = mapped_column(primary_key=True)
@@ -19,4 +19,4 @@ class ExposureORM(BaseORM):
19
19
  carcinogen_exposure: Mapped[YNU]
20
20
  exposure_type: Mapped[ExposureType | None]
21
21
 
22
- participant: Mapped["ParticipantORM"] = relationship(back_populates="exposures", cascade="all, delete")
22
+ participant: Mapped[ParticipantORM] = relationship(back_populates="exposures", cascade="all, delete")
@@ -1,10 +1,10 @@
1
+ from __future__ import annotations
1
2
  from datetime import datetime
2
- from typing import Optional
3
3
 
4
4
  from sqlalchemy import ForeignKeyConstraint, ForeignKey
5
5
  from sqlalchemy.orm import Mapped, mapped_column, relationship
6
6
 
7
- from cidc_api.models.db.base_orm import BaseORM
7
+ from cidc_api.models.db.stage2.base_orm import BaseORM
8
8
  from cidc_api.models.types import ChecksumType, FileFormat
9
9
 
10
10
 
@@ -14,17 +14,14 @@ class FileORM(BaseORM):
14
14
  ForeignKeyConstraint(
15
15
  ["trial_id", "version"], ["stage2.trial.trial_id", "stage2.trial.version"], ondelete="CASCADE"
16
16
  ),
17
- {"schema": "stage2"},
18
17
  )
19
18
 
20
19
  file_id: Mapped[int] = mapped_column(primary_key=True)
21
20
  trial_id: Mapped[str]
22
21
  version: Mapped[str]
23
22
 
24
- creator_id: Mapped[Optional[int]] = mapped_column(
25
- ForeignKey("stage2.institution.institution_id", ondelete="CASCADE")
26
- )
27
- description: Mapped[Optional[str]]
23
+ creator_id: Mapped[int | None] = mapped_column(ForeignKey("stage2.institution.institution_id", ondelete="CASCADE"))
24
+ description: Mapped[str | None]
28
25
  uuid: Mapped[str]
29
26
  file_name: Mapped[str]
30
27
  object_url: Mapped[str]
@@ -34,5 +31,5 @@ class FileORM(BaseORM):
34
31
  checksum_type: Mapped[ChecksumType]
35
32
  file_format: Mapped[FileFormat]
36
33
 
37
- trial: Mapped["TrialORM"] = relationship(back_populates="files", cascade="all, delete")
38
- creator: Mapped[Optional["InstitutionORM"]] = relationship(back_populates="files", cascade="all, delete")
34
+ trial: Mapped[TrialORM] = relationship(back_populates="files", cascade="all, delete")
35
+ creator: Mapped[InstitutionORM | None] = relationship(back_populates="files", cascade="all, delete")
@@ -1,9 +1,10 @@
1
+ from __future__ import annotations
1
2
  from typing import List
2
3
 
3
4
  from sqlalchemy import ForeignKey, UniqueConstraint
4
5
  from sqlalchemy.orm import Mapped, mapped_column, relationship
5
6
 
6
- from cidc_api.models.db.base_orm import BaseORM
7
+ from cidc_api.models.db.stage2.base_orm import BaseORM
7
8
  from cidc_api.models.types import (
8
9
  GVHDDiagnosisAcuteAssessmentSystem,
9
10
  GVHDDiagnosisAcuteAssessmentSystemVersion,
@@ -16,7 +17,6 @@ class GVHDDiagnosisAcuteORM(BaseORM):
16
17
  __tablename__ = "gvhd_diagnosis_acute"
17
18
  __table_args__ = (
18
19
  UniqueConstraint("participant_id", "pre_or_post_enrollment", name="unique_ix_gvhd_diagnosis_acute_pre_or_post"),
19
- {"schema": "stage2"},
20
20
  )
21
21
  __repr_attrs__ = ["gvhd_diagnosis_acute_id", "pre_or_post_enrollment"]
22
22
  __data_category__ = "gvhd_diagnosis_acute"
@@ -28,7 +28,7 @@ class GVHDDiagnosisAcuteORM(BaseORM):
28
28
  acute_grade: Mapped[GVHDDiagnosisAcuteGrade]
29
29
  pre_or_post_enrollment: Mapped[PreOrPostEnrollment]
30
30
 
31
- participant: Mapped["ParticipantORM"] = relationship(back_populates="gvhd_diagnosis_acutes", cascade="all, delete")
32
- organs: Mapped[List["GVHDOrganAcuteORM"]] = relationship(
31
+ participant: Mapped[ParticipantORM] = relationship(back_populates="gvhd_diagnosis_acutes", cascade="all, delete")
32
+ organs: Mapped[List[GVHDOrganAcuteORM]] = relationship(
33
33
  back_populates="diagnosis", cascade="all, delete", passive_deletes=True
34
34
  )
@@ -1,9 +1,10 @@
1
+ from __future__ import annotations
1
2
  from typing import List
2
3
 
3
4
  from sqlalchemy import ForeignKey, UniqueConstraint
4
5
  from sqlalchemy.orm import Mapped, mapped_column, relationship
5
6
 
6
- from cidc_api.models.db.base_orm import BaseORM
7
+ from cidc_api.models.db.stage2.base_orm import BaseORM
7
8
  from cidc_api.models.types import (
8
9
  GVHDDiagnosisChronicAssessmentSystem,
9
10
  GVHDDiagnosisChronicAssessmentSystemVersion,
@@ -18,7 +19,6 @@ class GVHDDiagnosisChronicORM(BaseORM):
18
19
  UniqueConstraint(
19
20
  "participant_id", "pre_or_post_enrollment", name="unique_ix_gvhd_diagnosis_chronic_pre_or_post"
20
21
  ),
21
- {"schema": "stage2"},
22
22
  )
23
23
  __repr_attrs__ = ["gvhd_diagnosis_chronic_id", "pre_or_post_enrollment"]
24
24
  __data_category__ = "gvhd_diagnosis_chronic"
@@ -30,9 +30,7 @@ class GVHDDiagnosisChronicORM(BaseORM):
30
30
  chronic_global_severity: Mapped[GVHDDiagnosisChronicGlobalSeverity]
31
31
  pre_or_post_enrollment: Mapped[PreOrPostEnrollment]
32
32
 
33
- participant: Mapped["ParticipantORM"] = relationship(
34
- back_populates="gvhd_diagnosis_chronics", cascade="all, delete"
35
- )
36
- organs: Mapped[List["GVHDOrganChronicORM"]] = relationship(
33
+ participant: Mapped[ParticipantORM] = relationship(back_populates="gvhd_diagnosis_chronics", cascade="all, delete")
34
+ organs: Mapped[List[GVHDOrganChronicORM]] = relationship(
37
35
  back_populates="diagnosis", cascade="all, delete", passive_deletes=True
38
36
  )
@@ -1,14 +1,14 @@
1
+ from __future__ import annotations
1
2
  from sqlalchemy import ForeignKey
2
3
  from sqlalchemy.orm import Mapped, mapped_column, relationship
3
4
 
4
- from cidc_api.models.db.base_orm import BaseORM
5
+ from cidc_api.models.db.stage2.base_orm import BaseORM
5
6
  from cidc_api.models.types import GVHDOrgan, GVHDOrganAcuteStage
6
7
 
7
8
 
8
9
  class GVHDOrganAcuteORM(BaseORM):
9
10
  __tablename__ = "gvhd_organ_acute"
10
11
  __repr_attrs__ = ["gvhd_organ_acute_id", "organ"]
11
- __table_args__ = {"schema": "stage2"}
12
12
  __data_category__ = "gvhd_organ_acute"
13
13
 
14
14
  gvhd_organ_acute_id: Mapped[int] = mapped_column(primary_key=True)
@@ -18,4 +18,4 @@ class GVHDOrganAcuteORM(BaseORM):
18
18
  organ: Mapped[GVHDOrgan]
19
19
  acute_stage: Mapped[GVHDOrganAcuteStage]
20
20
 
21
- diagnosis: Mapped["GVHDDiagnosisAcuteORM"] = relationship(back_populates="organs", cascade="all, delete")
21
+ diagnosis: Mapped[GVHDDiagnosisAcuteORM] = relationship(back_populates="organs", cascade="all, delete")
@@ -1,14 +1,14 @@
1
+ from __future__ import annotations
1
2
  from sqlalchemy import ForeignKey
2
3
  from sqlalchemy.orm import Mapped, mapped_column, relationship
3
4
 
4
- from cidc_api.models.db.base_orm import BaseORM
5
+ from cidc_api.models.db.stage2.base_orm import BaseORM
5
6
  from cidc_api.models.types import GVHDOrgan, GVHDOrganChronicScore
6
7
 
7
8
 
8
9
  class GVHDOrganChronicORM(BaseORM):
9
10
  __tablename__ = "gvhd_organ_chronic"
10
11
  __repr_attrs__ = ["gvhd_organ_chronic_id", "organ"]
11
- __table_args__ = {"schema": "stage2"}
12
12
  __data_category__ = "gvhd_organ_chronic"
13
13
 
14
14
  gvhd_organ_chronic_id: Mapped[int] = mapped_column(primary_key=True)
@@ -18,4 +18,4 @@ class GVHDOrganChronicORM(BaseORM):
18
18
  organ: Mapped[GVHDOrgan]
19
19
  chronic_score: Mapped[GVHDOrganChronicScore]
20
20
 
21
- diagnosis: Mapped["GVHDDiagnosisChronicORM"] = relationship(back_populates="organs", cascade="all, delete")
21
+ diagnosis: Mapped[GVHDDiagnosisChronicORM] = relationship(back_populates="organs", cascade="all, delete")
@@ -1,9 +1,10 @@
1
+ from __future__ import annotations
1
2
  from typing import List
2
3
 
3
4
  from sqlalchemy import ForeignKeyConstraint
4
5
  from sqlalchemy.orm import Mapped, mapped_column, relationship
5
6
 
6
- from cidc_api.models.db.base_orm import BaseORM
7
+ from cidc_api.models.db.stage2.base_orm import BaseORM
7
8
 
8
9
 
9
10
  class InstitutionORM(BaseORM):
@@ -13,7 +14,6 @@ class InstitutionORM(BaseORM):
13
14
  ForeignKeyConstraint(
14
15
  ["trial_id", "version"], ["stage2.trial.trial_id", "stage2.trial.version"], ondelete="CASCADE"
15
16
  ),
16
- {"schema": "stage2"},
17
17
  )
18
18
 
19
19
  institution_id: Mapped[int] = mapped_column(primary_key=True)
@@ -22,12 +22,12 @@ class InstitutionORM(BaseORM):
22
22
 
23
23
  name: Mapped[str]
24
24
 
25
- trial: Mapped["TrialORM"] = relationship(back_populates="biobank", cascade="all, delete")
26
- administrative_people: Mapped[List["AdministrativePersonORM"]] = relationship(
25
+ trial: Mapped[TrialORM] = relationship(back_populates="biobank", cascade="all, delete")
26
+ administrative_people: Mapped[List[AdministrativePersonORM]] = relationship(
27
27
  back_populates="institution", cascade="all, delete", passive_deletes=True
28
28
  )
29
- shipments: Mapped[List["ShipmentORM"]] = relationship(
29
+ shipments: Mapped[List[ShipmentORM]] = relationship(
30
30
  back_populates="institution", cascade="all, delete", passive_deletes=True
31
31
  )
32
- files: Mapped[List["FileORM"]] = relationship(back_populates="creator", cascade="all, delete", passive_deletes=True)
33
- contacts: Mapped[List["ContactORM"]] = relationship(back_populates="institution")
32
+ files: Mapped[List[FileORM]] = relationship(back_populates="creator", cascade="all, delete", passive_deletes=True)
33
+ contacts: Mapped[List[ContactORM]] = relationship(back_populates="institution")
@@ -1,30 +1,30 @@
1
- from typing import Optional, List
1
+ from __future__ import annotations
2
+ from typing import List
2
3
 
3
4
  from pydantic import NonNegativeInt, PositiveFloat
4
5
  from sqlalchemy import ForeignKey
5
6
  from sqlalchemy.orm import Mapped, mapped_column, relationship
6
7
 
7
- from cidc_api.models.db.base_orm import BaseORM
8
+ from cidc_api.models.db.stage2.base_orm import BaseORM
8
9
  from cidc_api.models.types import TobaccoSmokingStatus
9
10
 
10
11
 
11
12
  class MedicalHistoryORM(BaseORM):
12
13
  __tablename__ = "medical_history"
13
14
  __repr_attrs__ = ["medical_history_id"]
14
- __table_args__ = {"schema": "stage2"}
15
15
  __data_category__ = "medical_history"
16
16
 
17
17
  medical_history_id: Mapped[int] = mapped_column(primary_key=True)
18
18
  participant_id: Mapped[int] = mapped_column(ForeignKey("stage2.participant.participant_id", ondelete="CASCADE"))
19
19
 
20
- tobacco_smoking_status: Mapped[Optional[TobaccoSmokingStatus]]
21
- pack_years_smoked: Mapped[Optional[PositiveFloat]]
22
- num_prior_systemic_therapies: Mapped[Optional[NonNegativeInt]]
20
+ tobacco_smoking_status: Mapped[TobaccoSmokingStatus | None]
21
+ pack_years_smoked: Mapped[PositiveFloat | None]
22
+ num_prior_systemic_therapies: Mapped[NonNegativeInt | None]
23
23
 
24
- participant: Mapped["ParticipantORM"] = relationship(back_populates="medical_history", cascade="all, delete")
25
- other_malignancies: Mapped[List["OtherMalignancyORM"]] = relationship(
24
+ participant: Mapped[ParticipantORM] = relationship(back_populates="medical_history", cascade="all, delete")
25
+ other_malignancies: Mapped[List[OtherMalignancyORM]] = relationship(
26
26
  back_populates="medical_history", cascade="all, delete", passive_deletes=True
27
27
  )
28
- comorbidities: Mapped[List["ComorbidityORM"]] = relationship(
28
+ comorbidities: Mapped[List[ComorbidityORM]] = relationship(
29
29
  back_populates="medical_history", cascade="all, delete", passive_deletes=True
30
30
  )
@@ -1,28 +1,24 @@
1
- from typing import Optional
2
-
1
+ from __future__ import annotations
3
2
  from sqlalchemy import ForeignKey, String
4
3
  from sqlalchemy.orm import Mapped, mapped_column, relationship
5
4
 
6
- from cidc_api.models.db.base_orm import BaseORM
5
+ from cidc_api.models.db.stage2.base_orm import BaseORM
7
6
  from cidc_api.models.types import YNU, ResponseSystem, ResponseSystemVersion
8
7
 
9
8
 
10
9
  class OtherClinicalEndpointORM(BaseORM):
11
10
  __tablename__ = "other_clinical_endpoint"
12
11
  __repr_attrs__ = ["other_clinical_endpoint_id", "name", "event"]
13
- __table_args__ = {"schema": "stage2"}
14
12
 
15
13
  other_clinical_endpoint_id: Mapped[int] = mapped_column(primary_key=True)
16
14
  participant_id: Mapped[int] = mapped_column(ForeignKey("stage2.participant.participant_id", ondelete="CASCADE"))
17
15
 
18
16
  name: Mapped[str]
19
17
  event: Mapped[YNU]
20
- days: Mapped[Optional[int]]
21
- description: Mapped[Optional[str]]
22
- calculation: Mapped[Optional[str]]
23
- response_system: Mapped[Optional[ResponseSystem]] = mapped_column(String, nullable=True)
24
- response_system_version: Mapped[Optional[ResponseSystemVersion]] = mapped_column(String, nullable=True)
18
+ days: Mapped[int | None]
19
+ description: Mapped[str | None]
20
+ calculation: Mapped[str | None]
21
+ response_system: Mapped[ResponseSystem | None] = mapped_column(String, nullable=True)
22
+ response_system_version: Mapped[ResponseSystemVersion | None] = mapped_column(String, nullable=True)
25
23
 
26
- participant: Mapped["ParticipantORM"] = relationship(
27
- back_populates="other_clinical_endpoints", cascade="all, delete"
28
- )
24
+ participant: Mapped[ParticipantORM] = relationship(back_populates="other_clinical_endpoints", cascade="all, delete")
@@ -1,17 +1,15 @@
1
- from typing import Optional
2
-
1
+ from __future__ import annotations
3
2
  from pydantic import NonPositiveInt
4
3
  from sqlalchemy import ForeignKey
5
4
  from sqlalchemy.orm import Mapped, mapped_column, relationship
6
5
 
7
- from cidc_api.models.db.base_orm import BaseORM
6
+ from cidc_api.models.db.stage2.base_orm import BaseORM
8
7
  from cidc_api.models.types import UberonAnatomicalTerm, ICDO3MorphologicalCode, ICDO3MorphologicalTerm, MalignancyStatus
9
8
 
10
9
 
11
10
  class OtherMalignancyORM(BaseORM):
12
11
  __tablename__ = "other_malignancy"
13
12
  __repr_attrs__ = ["other_malignancy_id", "primary_disease_site"]
14
- __table_args__ = {"schema": "stage2"}
15
13
  __data_category__ = "other_malignancy"
16
14
 
17
15
  other_malignancy_id: Mapped[int] = mapped_column(primary_key=True)
@@ -20,12 +18,12 @@ class OtherMalignancyORM(BaseORM):
20
18
  )
21
19
 
22
20
  other_malignancy_primary_disease_site: Mapped[UberonAnatomicalTerm]
23
- other_malignancy_morphological_code: Mapped[Optional[ICDO3MorphologicalCode]]
24
- other_malignancy_morphological_term: Mapped[Optional[ICDO3MorphologicalTerm]]
25
- other_malignancy_description: Mapped[Optional[str]]
26
- other_malignancy_days_since_diagnosis: Mapped[Optional[NonPositiveInt]]
27
- other_malignancy_status: Mapped[Optional[MalignancyStatus]]
21
+ other_malignancy_morphological_code: Mapped[ICDO3MorphologicalCode | None]
22
+ other_malignancy_morphological_term: Mapped[ICDO3MorphologicalTerm | None]
23
+ other_malignancy_description: Mapped[str | None]
24
+ other_malignancy_days_since_diagnosis: Mapped[NonPositiveInt | None]
25
+ other_malignancy_status: Mapped[MalignancyStatus | None]
28
26
 
29
- medical_history: Mapped["MedicalHistoryORM"] = relationship(
27
+ medical_history: Mapped[MedicalHistoryORM] = relationship(
30
28
  back_populates="other_malignancies", cascade="all, delete"
31
29
  )
@@ -1,9 +1,9 @@
1
- from typing import List, Optional
2
-
1
+ from __future__ import annotations
2
+ from typing import List
3
3
  from sqlalchemy import ForeignKey, ForeignKeyConstraint
4
4
  from sqlalchemy.orm import Mapped, mapped_column, relationship
5
5
 
6
- from cidc_api.models.db.base_orm import BaseORM
6
+ from cidc_api.models.db.stage2.base_orm import BaseORM
7
7
  from cidc_api.models.types import OffStudyReason, YNU
8
8
 
9
9
 
@@ -14,7 +14,6 @@ class ParticipantORM(BaseORM):
14
14
  ForeignKeyConstraint(
15
15
  ["trial_id", "version"], ["stage2.trial.trial_id", "stage2.trial.version"], ondelete="CASCADE"
16
16
  ),
17
- {"schema": "stage2"},
18
17
  )
19
18
  __data_category__ = "participant"
20
19
 
@@ -24,57 +23,57 @@ class ParticipantORM(BaseORM):
24
23
 
25
24
  native_participant_id: Mapped[str | None]
26
25
  cimac_participant_id: Mapped[str | None]
27
- consent_group_id: Mapped[Optional[int]] = mapped_column(
26
+ consent_group_id: Mapped[int | None] = mapped_column(
28
27
  ForeignKey("stage2.consent_group.consent_group_id", ondelete="CASCADE")
29
28
  )
30
29
  off_study: Mapped[YNU]
31
- off_study_reason: Mapped[Optional[OffStudyReason]]
32
- off_study_reason_other: Mapped[Optional[str]]
30
+ off_study_reason: Mapped[OffStudyReason | None]
31
+ off_study_reason_other: Mapped[str | None]
33
32
 
34
- trial: Mapped["TrialORM"] = relationship(back_populates="participants", cascade="all, delete")
35
- demographic: Mapped["DemographicORM"] = relationship(
33
+ trial: Mapped[TrialORM] = relationship(back_populates="participants", cascade="all, delete")
34
+ demographic: Mapped[DemographicORM] = relationship(
36
35
  back_populates="participant", cascade="all, delete", passive_deletes=True
37
36
  )
38
- prior_treatments: Mapped[List["PriorTreatmentORM"]] = relationship(
37
+ prior_treatments: Mapped[List[PriorTreatmentORM]] = relationship(
39
38
  back_populates="participant", cascade="all, delete", passive_deletes=True
40
39
  )
41
- treatments: Mapped[List["TreatmentORM"]] = relationship(
40
+ treatments: Mapped[List[TreatmentORM]] = relationship(
42
41
  back_populates="participant", cascade="all, delete", passive_deletes=True
43
42
  )
44
- diseases: Mapped[List["DiseaseORM"]] = relationship(
43
+ diseases: Mapped[List[DiseaseORM]] = relationship(
45
44
  back_populates="participant", cascade="all, delete", passive_deletes=True
46
45
  )
47
- response_by_systems: Mapped[List["ResponseBySystemORM"]] = relationship(
46
+ response_by_systems: Mapped[List[ResponseBySystemORM]] = relationship(
48
47
  back_populates="participant", cascade="all, delete", passive_deletes=True
49
48
  )
50
- response: Mapped[Optional["ResponseORM"]] = relationship(
49
+ response: Mapped[ResponseORM | None] = relationship(
51
50
  back_populates="participant", cascade="all, delete", passive_deletes=True
52
51
  )
53
- adverse_events: Mapped[List["AdverseEventORM"]] = relationship(
52
+ adverse_events: Mapped[List[AdverseEventORM]] = relationship(
54
53
  back_populates="participant", cascade="all, delete", passive_deletes=True
55
54
  )
56
- baseline_clinical_assessment: Mapped[Optional["BaselineClinicalAssessmentORM"]] = relationship(
55
+ baseline_clinical_assessment: Mapped[BaselineClinicalAssessmentORM | None] = relationship(
57
56
  back_populates="participant", cascade="all, delete", passive_deletes=True
58
57
  )
59
- medical_history: Mapped[Optional["MedicalHistoryORM"]] = relationship(
58
+ medical_history: Mapped[MedicalHistoryORM | None] = relationship(
60
59
  back_populates="participant", cascade="all, delete", passive_deletes=True
61
60
  )
62
- exposures: Mapped[List["ExposureORM"]] = relationship(
61
+ exposures: Mapped[List[ExposureORM]] = relationship(
63
62
  back_populates="participant", cascade="all, delete", passive_deletes=True
64
63
  )
65
- gvhd_diagnosis_acutes: Mapped[List["GVHDDiagnosisAcuteORM"]] = relationship(
64
+ gvhd_diagnosis_acutes: Mapped[List[GVHDDiagnosisAcuteORM]] = relationship(
66
65
  back_populates="participant", cascade="all, delete", passive_deletes=True
67
66
  )
68
- gvhd_diagnosis_chronics: Mapped[List["GVHDDiagnosisChronicORM"]] = relationship(
67
+ gvhd_diagnosis_chronics: Mapped[List[GVHDDiagnosisChronicORM]] = relationship(
69
68
  back_populates="participant", cascade="all, delete", passive_deletes=True
70
69
  )
71
- specimens: Mapped[List["SpecimenORM"]] = relationship(
70
+ specimens: Mapped[List[SpecimenORM]] = relationship(
72
71
  back_populates="participant", cascade="all, delete", passive_deletes=True
73
72
  )
74
- other_clinical_endpoints: Mapped[List["OtherClinicalEndpointORM"]] = relationship(
73
+ other_clinical_endpoints: Mapped[List[OtherClinicalEndpointORM]] = relationship(
75
74
  back_populates="participant", cascade="all, delete", passive_deletes=True
76
75
  )
77
- additional_treatments: Mapped[List["AdditionalTreatmentORM"]] = relationship(
76
+ additional_treatments: Mapped[List[AdditionalTreatmentORM]] = relationship(
78
77
  back_populates="participant", cascade="all, delete", passive_deletes=True
79
78
  )
80
- consent_group: Mapped["ConsentGroupORM"] = relationship(back_populates="participants", cascade="all, delete")
79
+ consent_group: Mapped[ConsentGroupORM] = relationship(back_populates="participants", cascade="all, delete")
@@ -1,30 +1,29 @@
1
- from typing import Optional, List
1
+ from __future__ import annotations
2
+ from typing import List
2
3
 
3
4
  from pydantic import NonPositiveInt, NegativeInt
4
5
  from sqlalchemy import ForeignKey
5
6
  from sqlalchemy.orm import Mapped, mapped_column, relationship
6
7
  from sqlalchemy.types import JSON
7
8
 
8
- from cidc_api.models.db.base_orm import BaseORM
9
- from cidc_api.models.types import PriorTreatmentType, ConditioningRegimenType, StemCellDonorType
9
+ from cidc_api.models.db.stage2.base_orm import BaseORM
10
+ from cidc_api.models.types import ConditioningRegimenType, StemCellDonorType
10
11
 
11
12
 
12
13
  class PriorTreatmentORM(BaseORM):
13
14
  __tablename__ = "prior_treatment"
14
15
  __repr_attrs__ = ["prior_treatment_id", "type"]
15
- __table_args__ = {"schema": "stage2"}
16
16
  __data_category__ = "prior_treatment"
17
17
 
18
18
  prior_treatment_id: Mapped[int] = mapped_column(primary_key=True)
19
19
  participant_id: Mapped[int] = mapped_column(ForeignKey("stage2.participant.participant_id", ondelete="CASCADE"))
20
20
 
21
- prior_treatment_days_to_start: Mapped[Optional[NonPositiveInt]]
22
- prior_treatment_days_to_end: Mapped[Optional[NonPositiveInt]]
23
- prior_treatment_type: Mapped[List[PriorTreatmentType]] = mapped_column(JSON, nullable=False)
24
- prior_treatment_description: Mapped[Optional[str]]
25
- prior_treatment_best_response: Mapped[Optional[str]]
26
- prior_treatment_conditioning_regimen_type: Mapped[Optional[ConditioningRegimenType]]
27
- prior_treatment_stem_cell_donor_type: Mapped[Optional[StemCellDonorType]]
28
- prior_treatment_days_to_prior_transplant: Mapped[Optional[NegativeInt]]
21
+ prior_treatment_days_to_start: Mapped[NonPositiveInt | None]
22
+ prior_treatment_days_to_end: Mapped[NonPositiveInt | None]
23
+ prior_treatment_description: Mapped[str]
24
+ prior_treatment_best_response: Mapped[str | None]
25
+ prior_treatment_conditioning_regimen_type: Mapped[ConditioningRegimenType | None]
26
+ prior_treatment_stem_cell_donor_type: Mapped[StemCellDonorType | None]
27
+ prior_treatment_days_to_prior_transplant: Mapped[NegativeInt | None]
29
28
 
30
- participant: Mapped["ParticipantORM"] = relationship(back_populates="prior_treatments", cascade="all, delete")
29
+ participant: Mapped[ParticipantORM] = relationship(back_populates="prior_treatments", cascade="all, delete")