nci-cidc-api-modules 1.2.55__py3-none-any.whl → 1.2.56__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.
cidc_api/__init__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "1.2.55"
1
+ __version__ = "1.2.56"
cidc_api/config/db.py CHANGED
@@ -35,6 +35,8 @@ def init_db(app: Flask):
35
35
  """Connect `app` to the database and run migrations"""
36
36
  db.init_app(app)
37
37
  Migrate(app, db, app.config["MIGRATIONS_PATH"])
38
+ with app.app_context():
39
+ upgrade(app.config["MIGRATIONS_PATH"])
38
40
 
39
41
 
40
42
  def get_sqlalchemy_database_uri(testing: bool = False) -> str:
@@ -176,6 +176,19 @@ class ResponseBySystem(Base):
176
176
  loc="days_to_best_response",
177
177
  )
178
178
 
179
+ @forced_validator
180
+ @classmethod
181
+ def validate_progression_free_survival_disease_progression_chronology(cls, data, info) -> None:
182
+ progression = data.get("progression", None)
183
+ days_to_disease_progression = data.get("days_to_disease_progression", None)
184
+ progression_free_survival = data.get("progression_free_survival", None)
185
+
186
+ if progression == "Yes" and progression_free_survival != days_to_disease_progression:
187
+ raise ValueLocError(
188
+ 'Violate "progression_free_survival" = "days_to_disease_progression" when progression is PFS event',
189
+ loc="progression_free_survival",
190
+ )
191
+
179
192
  @model_validator(mode="after")
180
193
  def validate_days_to_last_vital_status_chronology(self) -> Self:
181
194
  if not self.response:
@@ -218,3 +231,52 @@ class ResponseBySystem(Base):
218
231
  loc="days_to_death,days_to_first_response,days_to_best_response,days_to_disease_progression",
219
232
  )
220
233
  return self
234
+
235
+ @model_validator(mode="after")
236
+ def validate_progression_free_survival_death_chronology(self) -> Self:
237
+ if not self.response:
238
+ return self
239
+
240
+ if (
241
+ self.progression_free_survival_event == "Yes"
242
+ and self.progression == "No"
243
+ and self.progression_free_survival != self.response.days_to_death
244
+ ):
245
+ raise ValueLocError(
246
+ 'Violate "progression_free_survival" = "days_to_death" when death is PFS event',
247
+ loc="progression_free_survival",
248
+ )
249
+ return self
250
+
251
+ @model_validator(mode="after")
252
+ def validate_progression_free_survival_event_no_or_unknown(self) -> Self:
253
+ if not self.response:
254
+ return self
255
+
256
+ pfs_event = self.progression_free_survival_event
257
+ if pfs_event in ["No", "Unknown"] and (self.days_to_disease_progression or self.response.days_to_death):
258
+ raise ValueLocError(
259
+ 'Violate "days_to_death" and "days_to_disease_progression" should be blank when PFS event is "No" or "Unknown"',
260
+ loc="progression_free_survival_event",
261
+ )
262
+ return self
263
+
264
+ @model_validator(mode="after")
265
+ def validate_progression_free_survival_event_consistent(self) -> Self:
266
+ if not self.response:
267
+ return self
268
+
269
+ progressed_or_dead = self.progression == "Yes" or self.response.survival_status == "Dead"
270
+ no_progression_and_alive = self.progression == "No" and self.response.survival_status == "Alive"
271
+ pfs_event = self.progression_free_survival_event
272
+ if (
273
+ (pfs_event == "Yes" and not progressed_or_dead)
274
+ or (progressed_or_dead and pfs_event != "Yes")
275
+ or (pfs_event == "No" and not no_progression_and_alive)
276
+ or (no_progression_and_alive and pfs_event != "No")
277
+ ):
278
+ raise ValueLocError(
279
+ 'Inconsistent flags for "progression_free_survival_event","progression" and "survival_status"',
280
+ loc="progression_free_survival_event",
281
+ )
282
+ return self
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nci_cidc_api_modules
3
- Version: 1.2.55
3
+ Version: 1.2.56
4
4
  Summary: SQLAlchemy data models and configuration tools used in the NCI CIDC API
5
5
  Home-page: https://github.com/NCI-CIDC/cidc-api-gae
6
6
  License: MIT license
@@ -1,8 +1,8 @@
1
1
  boot.py,sha256=a5zD_ORheoOy3CuEIwjM9jcR4_Phngz6nc-E6RYIEj8,585
2
- cidc_api/__init__.py,sha256=w_Cy0hYe3h0VvVjywA1usJthx3ML2-hIuBZUa0GHWxg,23
2
+ cidc_api/__init__.py,sha256=vHvjSAme38UPREXXcNqyijbgVzmFAnAOgLeqHeHpZAM,23
3
3
  cidc_api/telemetry.py,sha256=SRPXhN1O4P2jYaRN_K4hAhFURygrzzRrkQsGZmghUUQ,3355
4
4
  cidc_api/config/__init__.py,sha256=5mX8GAPxUKV84iS-aGOoE-4m68LsOCGCDptXNdlgvj0,148
5
- cidc_api/config/db.py,sha256=MHBQH2Ccf2J5cDpMwHJ704_ovl6i38DSF4Mktdfbr0g,2353
5
+ cidc_api/config/db.py,sha256=mEz8ugjvRNGylCqDYHaaMqaZfDh7sbd76BowmfBvq5c,2428
6
6
  cidc_api/config/logging.py,sha256=abhVYtn8lfhIt0tyV2WHFgSmp_s2eeJh7kodB6LH4J0,1149
7
7
  cidc_api/config/secrets.py,sha256=jRFj7W43pWuPf9DZQLCKF7WPXf5cUv-BAaS3ASqhV_Q,1481
8
8
  cidc_api/config/settings.py,sha256=IlOSJhSyYYK4XQQ4uBdD58kXO-a2AHPWTSN1AT95b9Y,4545
@@ -102,7 +102,7 @@ cidc_api/models/pydantic/stage1/participant.py,sha256=QfRkK2okY7nM84y9QMK12kZLUR
102
102
  cidc_api/models/pydantic/stage1/prior_treatment.py,sha256=axhyPHwYCoIvcIonjyPJ95HUyaAXqIuOd6hhoDM3LJU,2101
103
103
  cidc_api/models/pydantic/stage1/radiotherapy_dose.py,sha256=8TbBqx_BYzwygQE-LxlSEK2ntIAFlTpAq_GS479TabI,3839
104
104
  cidc_api/models/pydantic/stage1/response.py,sha256=hq5_eJ2BEaVH8pdU444p3AKHuZMdLsoDZcMA3XQa8Rw,3491
105
- cidc_api/models/pydantic/stage1/response_by_system.py,sha256=vW0Xj_hYRa3W-JbqJgvty559_B9x5UIySaAOhIDVMOs,9853
105
+ cidc_api/models/pydantic/stage1/response_by_system.py,sha256=0QbGX-ZTiAbLTXtcu8irukC4E72rS1ARrCCnTyboTno,12622
106
106
  cidc_api/models/pydantic/stage1/specimen.py,sha256=scDekZ-RtXOQTTLburhqT3RF4KM34iY9NAV1wYi_HSg,1281
107
107
  cidc_api/models/pydantic/stage1/stem_cell_transplant.py,sha256=XsDVUksqbIprPxHwLlwHGyji4jsIFNMcIk-S0H4rDnQ,1228
108
108
  cidc_api/models/pydantic/stage1/surgery.py,sha256=sHPzYMNusYIQrC6gjWopwxo0j9BNOq_Tcl6HKAMvuAQ,2421
@@ -156,8 +156,8 @@ cidc_api/shared/gcloud_client.py,sha256=EJ2ZzZ0gwDOZx18PEzXil4F-jpruacShkVIoecw8
156
156
  cidc_api/shared/jose.py,sha256=-qzGzEDAlokEp9E7WtBtQkXyyfPWTYXlwYpCqVJWmqM,1830
157
157
  cidc_api/shared/rest_utils.py,sha256=RwR30WOUAYCxL7V-i2totEyeriG30GbBDvBcpLXhM9w,6594
158
158
  cidc_api/shared/utils.py,sha256=-gLnzxCR9E6h0plt2xrNisUG5_Y6GhhVwz3DgDIzpvs,367
159
- nci_cidc_api_modules-1.2.55.dist-info/licenses/LICENSE,sha256=pNYWVTHaYonnmJyplmeAp7tQAjosmDpAWjb34jjv7Xs,1102
160
- nci_cidc_api_modules-1.2.55.dist-info/METADATA,sha256=YILYITn86Z9qxxYBWpgS7WujFQ1fbIiQ4VrOUoevit0,40301
161
- nci_cidc_api_modules-1.2.55.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
162
- nci_cidc_api_modules-1.2.55.dist-info/top_level.txt,sha256=BSJqF6ura8-bWCKZvarvQEKvidMM05lH0bLQsNOrI0o,14
163
- nci_cidc_api_modules-1.2.55.dist-info/RECORD,,
159
+ nci_cidc_api_modules-1.2.56.dist-info/licenses/LICENSE,sha256=pNYWVTHaYonnmJyplmeAp7tQAjosmDpAWjb34jjv7Xs,1102
160
+ nci_cidc_api_modules-1.2.56.dist-info/METADATA,sha256=NS_GSV4rLWWKJ7vN5bxj3fISWowaOS8feJS-SHaXci4,40301
161
+ nci_cidc_api_modules-1.2.56.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
162
+ nci_cidc_api_modules-1.2.56.dist-info/top_level.txt,sha256=BSJqF6ura8-bWCKZvarvQEKvidMM05lH0bLQsNOrI0o,14
163
+ nci_cidc_api_modules-1.2.56.dist-info/RECORD,,