omop-constructs 0.2.16__tar.gz → 0.3.0__tar.gz

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 (49) hide show
  1. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/PKG-INFO +1 -1
  2. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/pyproject.toml +1 -1
  3. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/modifiers/__init__.py +4 -2
  4. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/modifiers/condition_modifier_join.py +45 -2
  5. omop_constructs-0.3.0/src/omop_constructs/alchemy/modifiers/condition_modifier_mv.py +102 -0
  6. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/modifiers/modifier_joins.py +10 -0
  7. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/modifiers/modifier_mappers.py +11 -1
  8. omop_constructs-0.2.16/src/omop_constructs/alchemy/modifiers/condition_modifier_mv.py +0 -56
  9. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/README.md +0 -0
  10. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/__init__.py +0 -0
  11. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/__init__.py +0 -0
  12. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/adapters.py +0 -0
  13. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/concepts/__init__.py +0 -0
  14. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/concepts/concept_mappers.py +0 -0
  15. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/concepts/concept_standardisation.py +0 -0
  16. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/conditions/__init__.py +0 -0
  17. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/conditions/condition_joins.py +0 -0
  18. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/conditions/condition_mappers.py +0 -0
  19. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/demography/__init__.py +0 -0
  20. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/demography/demography_matview.py +0 -0
  21. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/demography/demography_queries.py +0 -0
  22. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/episodes/__init__.py +0 -0
  23. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/episodes/condition_episode_mv.py +0 -0
  24. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/episodes/condition_episode_objects.py +0 -0
  25. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/episodes/episode_factories.py +0 -0
  26. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/episodes/episode_joins.py +0 -0
  27. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/events/__init__.py +0 -0
  28. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/events/dx_linked_event_mv.py +0 -0
  29. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/events/event_factories.py +0 -0
  30. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/events/event_queries.py +0 -0
  31. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/modifiers/modifier_factories.py +0 -0
  32. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/alchemy/source_factories.py +0 -0
  33. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/core/__init__.py +0 -0
  34. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/core/base.py +0 -0
  35. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/core/constructs.py +0 -0
  36. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/core/ddl.py +0 -0
  37. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/core/errors.py +0 -0
  38. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/core/materialized.py +0 -0
  39. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/core/plan.py +0 -0
  40. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/core/registry.py +0 -0
  41. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/py.typed +0 -0
  42. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/semantics/__init__.py +0 -0
  43. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/semantics/adapters.py +0 -0
  44. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/semantics/lookups.py +0 -0
  45. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/semantics/runtime_lookups.py +0 -0
  46. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/services/__init__.py +0 -0
  47. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/services/concept.py +0 -0
  48. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/services/person.py +0 -0
  49. {omop_constructs-0.2.16 → omop_constructs-0.3.0}/src/omop_constructs/typing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: omop-constructs
3
- Version: 0.2.16
3
+ Version: 0.3.0
4
4
  Summary: For building complex constructs on top of the omop-alchemy library.
5
5
  Author: Georgie Kennedy
6
6
  Author-email: Georgie Kennedy <georgina.kennedy@unsw.edu.au>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "omop-constructs"
3
- version = "0.2.16"
3
+ version = "0.3.0"
4
4
  description = "For building complex constructs on top of the omop-alchemy library."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -6,7 +6,8 @@ from .modifier_mappers import (
6
6
  GradeModifierMV,
7
7
  LateralityModifierMV,
8
8
  SizeModifierMV,
9
- MetastaticDiseaseModifierMV
9
+ MetastaticDiseaseModifierMV,
10
+ AllStageModifierMV
10
11
  )
11
12
  from .condition_modifier_mv import ModifiedCondition
12
13
 
@@ -19,5 +20,6 @@ __all__ = [
19
20
  "LateralityModifierMV",
20
21
  "SizeModifierMV",
21
22
  "ModifiedCondition",
22
- "MetastaticDiseaseModifierMV"
23
+ "MetastaticDiseaseModifierMV",
24
+ "AllStageModifierMV"
23
25
  ]
@@ -13,7 +13,8 @@ from .modifier_mappers import (
13
13
  GradeModifierMV,
14
14
  SizeModifierMV,
15
15
  LateralityModifierMV,
16
- MetastaticDiseaseModifierMV
16
+ MetastaticDiseaseModifierMV,
17
+ AllStageModifierMV
17
18
  )
18
19
 
19
20
  condition_concept = so.aliased(Concept, name='condition_concept')
@@ -125,5 +126,47 @@ modified_conditions_join = (
125
126
  ),
126
127
  isouter=True
127
128
  )
129
+ .join(
130
+ MetastaticDiseaseModifierMV,
131
+ sa.and_(
132
+ MetastaticDiseaseModifierMV.meas_event_field_concept_id==runtime.modifiers.modifier_fields.condition_occurrence_id,
133
+ Condition_Occurrence.condition_occurrence_id==MetastaticDiseaseModifierMV.measurement_event_id
134
+ ),
135
+ isouter=True
136
+ )
137
+ .join(condition_concept, condition_concept.concept_id==Condition_Occurrence.condition_concept_id)
138
+ )
139
+
140
+ all_stage_join = (
141
+ sa.select(
142
+ sa.func.row_number().over().label('mv_id'),
143
+ Condition_Occurrence.person_id,
144
+ Condition_Occurrence.condition_start_date,
145
+ Condition_Occurrence.condition_occurrence_id,
146
+ Condition_Occurrence.condition_source_value,
147
+ Condition_Occurrence.condition_concept_id,
148
+ condition_concept.concept_name.label('condition_concept'),
149
+ Episode_Event.episode_id.label('condition_episode'),
150
+ AllStageModifierMV.stage_id.label('stage_id'),
151
+ AllStageModifierMV.stage_date.label('stage_date'),
152
+ AllStageModifierMV.stage_concept_id.label('stage_concept_id'),
153
+ AllStageModifierMV.stage_label.label('stage_label'),
154
+ )
155
+ .join(
156
+ Episode_Event,
157
+ sa.and_(
158
+ Episode_Event.event_id==Condition_Occurrence.condition_occurrence_id,
159
+ Episode_Event.episode_event_field_concept_id==runtime.modifiers.modifier_fields.condition_occurrence_id
160
+ ),
161
+ isouter=True
162
+ )
163
+ .join(
164
+ AllStageModifierMV,
165
+ sa.and_(
166
+ AllStageModifierMV.meas_event_field_concept_id==runtime.modifiers.modifier_fields.condition_occurrence_id,
167
+ Condition_Occurrence.condition_occurrence_id==AllStageModifierMV.measurement_event_id
168
+ ),
169
+ isouter=True
170
+ )
128
171
  .join(condition_concept, condition_concept.concept_id==Condition_Occurrence.condition_concept_id)
129
- )
172
+ )
@@ -0,0 +1,102 @@
1
+ import sqlalchemy as sa
2
+ from orm_loader.helpers import Base
3
+ from .condition_modifier_join import modified_conditions_join, all_stage_join
4
+ from ...core.materialized import MaterializedViewMixin
5
+ from ...core.constructs import register_construct
6
+ from .modifier_mappers import (
7
+ TStageMV,
8
+ NStageMV,
9
+ MStageMV,
10
+ GroupStageMV,
11
+ GradeModifierMV,
12
+ SizeModifierMV,
13
+ LateralityModifierMV,
14
+ MetastaticDiseaseModifierMV,
15
+ AllStageModifierMV
16
+ )
17
+
18
+ @register_construct
19
+ class StageModifier(MaterializedViewMixin, Base):
20
+ """
21
+ this class contains all stage modifier records no matter the sub-type, nor does it preference
22
+ clin / path stage etc - just a dump of all, along with the identifier to link to condition ep
23
+ """
24
+ __mv_name__ = 'stage_modifier_mv'
25
+ __mv_select__ = all_stage_join.select()
26
+ __mv_pk__ = ["stage_id"]
27
+ __table_args__ = {"extend_existing": True}
28
+ __tablename__ = __mv_name__
29
+ __deps__ = (
30
+ AllStageModifierMV.__mv_name__,
31
+ )
32
+ mv_id = sa.Column(primary_key=True)
33
+ person_id = sa.Column(sa.Integer)
34
+ condition_start_date = sa.Column(sa.Date)
35
+ condition_occurrence_id = sa.Column(sa.Integer)
36
+ condition_source_value = sa.Column(sa.String)
37
+ condition_concept_id = sa.Column(sa.Integer)
38
+ condition_concept = sa.Column(sa.String)
39
+ condition_episode = sa.Column(sa.Integer)
40
+ stage_id = sa.Column(sa.Integer)
41
+ stage_date = sa.Column(sa.Date)
42
+ stage_concept_id = sa.Column(sa.Integer)
43
+ stage_label = sa.Column(sa.String)
44
+
45
+ @register_construct
46
+ class ModifiedCondition(MaterializedViewMixin, Base):
47
+ __mv_name__ = 'modified_conditions_mv'
48
+ __mv_select__ = modified_conditions_join.select()
49
+ __mv_pk__ = ["mv_id"]
50
+ __table_args__ = {"extend_existing": True}
51
+ __tablename__ = __mv_name__
52
+ __deps__ = (
53
+ TStageMV.__mv_name__,
54
+ NStageMV.__mv_name__,
55
+ MStageMV.__mv_name__,
56
+ GroupStageMV.__mv_name__,
57
+ GradeModifierMV.__mv_name__,
58
+ SizeModifierMV.__mv_name__,
59
+ LateralityModifierMV.__mv_name__,
60
+ MetastaticDiseaseModifierMV.__mv_name__
61
+ )
62
+
63
+ mv_id = sa.Column(primary_key=True)
64
+ person_id = sa.Column(sa.Integer)
65
+ condition_start_date = sa.Column(sa.Date)
66
+ condition_occurrence_id = sa.Column(sa.Integer)
67
+ condition_source_value = sa.Column(sa.String)
68
+ condition_concept_id = sa.Column(sa.Integer)
69
+ condition_concept = sa.Column(sa.String)
70
+ condition_episode = sa.Column(sa.Integer)
71
+ t_stage_id = sa.Column(sa.Integer)
72
+ t_stage_date = sa.Column(sa.Date)
73
+ t_stage_concept_id = sa.Column(sa.Integer)
74
+ t_stage_label = sa.Column(sa.String)
75
+ n_stage_id = sa.Column(sa.Integer)
76
+ n_stage_date = sa.Column(sa.Date)
77
+ n_stage_concept_id = sa.Column(sa.Integer)
78
+ n_stage_label = sa.Column(sa.String)
79
+ m_stage_id = sa.Column(sa.Integer)
80
+ m_stage_date = sa.Column(sa.Date)
81
+ m_stage_concept_id = sa.Column(sa.Integer)
82
+ m_stage_label = sa.Column(sa.String)
83
+ group_stage_id = sa.Column(sa.Integer)
84
+ group_stage_date = sa.Column(sa.Date)
85
+ group_stage_concept_id = sa.Column(sa.Integer)
86
+ group_stage_label = sa.Column(sa.String)
87
+ grade_id = sa.Column(sa.Integer)
88
+ grade_date = sa.Column(sa.Date)
89
+ grade_concept_id = sa.Column(sa.Integer)
90
+ grade_label = sa.Column(sa.String)
91
+ size_id = sa.Column(sa.Integer)
92
+ size_date = sa.Column(sa.Date)
93
+ size_concept_id = sa.Column(sa.Integer)
94
+ size_label = sa.Column(sa.String)
95
+ laterality_id = sa.Column(sa.Integer)
96
+ laterality_date = sa.Column(sa.Date)
97
+ laterality_concept_id = sa.Column(sa.Integer)
98
+ laterality_label = sa.Column(sa.String)
99
+ metastatic_disease_id = sa.Column(sa.Integer)
100
+ metastatic_disease_date = sa.Column(sa.Date)
101
+ metastatic_disease_concept_id = sa.Column(sa.Integer)
102
+ metastatic_disease_label = sa.Column(sa.String)
@@ -40,4 +40,14 @@ grade_select = earliest_modifier(
40
40
  mets_select = earliest_modifier(
41
41
  get_direct_modifier_query(list(registry['metastatic_disease'].all_concepts), name="metastatic_disease"),
42
42
  name="metastatic_disease_earliest"
43
+ )
44
+
45
+ all_stage_select = get_direct_modifier_query(
46
+ (
47
+ list(
48
+ registry['tnm_t_stage'].all_concepts | registry['tnm_n_stage'].all_concepts |
49
+ registry['tnm_m_stage'].all_concepts | registry['tnm_group_stage'].all_concepts
50
+ )
51
+ ),
52
+ name="all_stage_modifiers"
43
53
  )
@@ -8,7 +8,8 @@ from .modifier_joins import (
8
8
  laterality_select,
9
9
  size_select,
10
10
  grade_select,
11
- mets_select
11
+ mets_select,
12
+ all_stage_select
12
13
  )
13
14
  from ...core.materialized import MaterializedViewMixin
14
15
  from ...core.constructs import register_construct
@@ -113,3 +114,12 @@ class MetastaticDiseaseModifierMV(MeasModCols, MaterializedViewMixin, Base):
113
114
  __tablename__ = __mv_name__
114
115
  value_as_concept_id = sa.Column(sa.Integer)
115
116
  measurement_concept_id = sa.Column(sa.Integer)
117
+
118
+ @register_construct
119
+ class AllStageModifierMV(StageColumns, MaterializedViewMixin, Base):
120
+ __mv_name__ = "all_stage_modifier_mv"
121
+ __mv_select__ = all_stage_select.select()
122
+ __mv_index__ = "measurement_event_id"
123
+ __deps__ = ()
124
+ __tablename__ = __mv_name__
125
+ measurement_concept_id = sa.Column(sa.Integer)
@@ -1,56 +0,0 @@
1
- import sqlalchemy as sa
2
- from orm_loader.helpers import Base
3
- from .condition_modifier_join import modified_conditions_join
4
- from ...core.materialized import MaterializedViewMixin
5
- from ...core.constructs import register_construct
6
- from .modifier_mappers import (
7
- TStageMV,
8
- NStageMV,
9
- MStageMV,
10
- GroupStageMV,
11
- GradeModifierMV,
12
- SizeModifierMV,
13
- LateralityModifierMV
14
- )
15
-
16
- @register_construct
17
- class ModifiedCondition(MaterializedViewMixin, Base):
18
- __mv_name__ = 'modified_conditions_mv'
19
- __mv_select__ = modified_conditions_join.select()
20
- __mv_pk__ = ["mv_id"]
21
- __table_args__ = {"extend_existing": True}
22
- __tablename__ = __mv_name__
23
- __deps__ = (
24
- TStageMV.__mv_name__,
25
- NStageMV.__mv_name__,
26
- MStageMV.__mv_name__,
27
- GroupStageMV.__mv_name__,
28
- GradeModifierMV.__mv_name__,
29
- SizeModifierMV.__mv_name__,
30
- LateralityModifierMV.__mv_name__,
31
- )
32
-
33
- mv_id = sa.Column(primary_key=True)
34
- person_id = sa.Column(sa.Integer)
35
- condition_start_date = sa.Column(sa.Date)
36
- condition_occurrence_id = sa.Column(sa.Integer)
37
- condition_source_value = sa.Column(sa.String)
38
- condition_concept_id = sa.Column(sa.Integer)
39
- condition_concept = sa.Column(sa.String)
40
- condition_episode = sa.Column(sa.Integer)
41
- stage_id = sa.Column(sa.Integer)
42
- stage_date = sa.Column(sa.Date)
43
- stage_concept_id = sa.Column(sa.Integer)
44
- stage_label = sa.Column(sa.String)
45
- grade_id = sa.Column(sa.Integer)
46
- grade_date = sa.Column(sa.Date)
47
- grade_concept_id = sa.Column(sa.Integer)
48
- grade_label = sa.Column(sa.String)
49
- size_id = sa.Column(sa.Integer)
50
- size_date = sa.Column(sa.Date)
51
- size_concept_id = sa.Column(sa.Integer)
52
- size_label = sa.Column(sa.String)
53
- laterality_id = sa.Column(sa.Integer)
54
- laterality_date = sa.Column(sa.Date)
55
- laterality_concept_id = sa.Column(sa.Integer)
56
- laterality_label = sa.Column(sa.String)