Gen-EpiX 0.0.1__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 (351) hide show
  1. gen_epix-0.0.1/Gen_EpiX.egg-info/PKG-INFO +214 -0
  2. gen_epix-0.0.1/Gen_EpiX.egg-info/SOURCES.txt +349 -0
  3. gen_epix-0.0.1/Gen_EpiX.egg-info/dependency_links.txt +1 -0
  4. gen_epix-0.0.1/Gen_EpiX.egg-info/requires.txt +35 -0
  5. gen_epix-0.0.1/Gen_EpiX.egg-info/top_level.txt +1 -0
  6. gen_epix-0.0.1/LICENSE +287 -0
  7. gen_epix-0.0.1/PKG-INFO +214 -0
  8. gen_epix-0.0.1/README.md +160 -0
  9. gen_epix-0.0.1/gen_epix/__init__.py +1 -0
  10. gen_epix-0.0.1/gen_epix/casedb/__init__.py +0 -0
  11. gen_epix-0.0.1/gen_epix/casedb/api/abac.py +30 -0
  12. gen_epix-0.0.1/gen_epix/casedb/api/auth.py +93 -0
  13. gen_epix-0.0.1/gen_epix/casedb/api/base.py +19 -0
  14. gen_epix-0.0.1/gen_epix/casedb/api/case.py +402 -0
  15. gen_epix-0.0.1/gen_epix/casedb/api/geo.py +30 -0
  16. gen_epix-0.0.1/gen_epix/casedb/api/model.py +109 -0
  17. gen_epix-0.0.1/gen_epix/casedb/api/ontology.py +85 -0
  18. gen_epix-0.0.1/gen_epix/casedb/api/organization.py +166 -0
  19. gen_epix-0.0.1/gen_epix/casedb/api/rbac.py +32 -0
  20. gen_epix-0.0.1/gen_epix/casedb/api/router.py +75 -0
  21. gen_epix-0.0.1/gen_epix/casedb/api/system.py +110 -0
  22. gen_epix-0.0.1/gen_epix/casedb/app.py +50 -0
  23. gen_epix-0.0.1/gen_epix/casedb/app_setup.py +129 -0
  24. gen_epix-0.0.1/gen_epix/casedb/config/.secret/automaticnewuser +9 -0
  25. gen_epix-0.0.1/gen_epix/casedb/config/.secret/db +3 -0
  26. gen_epix-0.0.1/gen_epix/casedb/config/.secret/log +3 -0
  27. gen_epix-0.0.1/gen_epix/casedb/config/.secret/repository-sasql-defaults +8 -0
  28. gen_epix-0.0.1/gen_epix/casedb/config/.secret/root-organization +5 -0
  29. gen_epix-0.0.1/gen_epix/casedb/config/.secret/root-user +7 -0
  30. gen_epix-0.0.1/gen_epix/casedb/config/__init__.py +1 -0
  31. gen_epix-0.0.1/gen_epix/casedb/config/idp/identity_providers.json +29 -0
  32. gen_epix-0.0.1/gen_epix/casedb/config/idp/mock_identity_provider.json +11 -0
  33. gen_epix-0.0.1/gen_epix/casedb/config/idp/no_identity_providers.json +2 -0
  34. gen_epix-0.0.1/gen_epix/casedb/config/logging.debug.yaml +44 -0
  35. gen_epix-0.0.1/gen_epix/casedb/config/logging.yaml +35 -0
  36. gen_epix-0.0.1/gen_epix/casedb/config/secrets.default.toml +102 -0
  37. gen_epix-0.0.1/gen_epix/casedb/config/settings.toml +50 -0
  38. gen_epix-0.0.1/gen_epix/casedb/domain/__init__.py +3 -0
  39. gen_epix-0.0.1/gen_epix/casedb/domain/command/__init__.py +3 -0
  40. gen_epix-0.0.1/gen_epix/casedb/domain/command/base.py +44 -0
  41. gen_epix-0.0.1/gen_epix/casedb/domain/command/crud.py +221 -0
  42. gen_epix-0.0.1/gen_epix/casedb/domain/command/non_crud.py +323 -0
  43. gen_epix-0.0.1/gen_epix/casedb/domain/command/role.py +197 -0
  44. gen_epix-0.0.1/gen_epix/casedb/domain/enum.py +314 -0
  45. gen_epix-0.0.1/gen_epix/casedb/domain/exc.py +5 -0
  46. gen_epix-0.0.1/gen_epix/casedb/domain/model/__init__.py +14 -0
  47. gen_epix-0.0.1/gen_epix/casedb/domain/model/abac/__init__.py +0 -0
  48. gen_epix-0.0.1/gen_epix/casedb/domain/model/abac/abac.py +323 -0
  49. gen_epix-0.0.1/gen_epix/casedb/domain/model/abac/case_abac.py +689 -0
  50. gen_epix-0.0.1/gen_epix/casedb/domain/model/base.py +12 -0
  51. gen_epix-0.0.1/gen_epix/casedb/domain/model/case/__init__.py +0 -0
  52. gen_epix-0.0.1/gen_epix/casedb/domain/model/case/case.py +894 -0
  53. gen_epix-0.0.1/gen_epix/casedb/domain/model/case/complete_case_type.py +67 -0
  54. gen_epix-0.0.1/gen_epix/casedb/domain/model/geo.py +121 -0
  55. gen_epix-0.0.1/gen_epix/casedb/domain/model/ontology.py +177 -0
  56. gen_epix-0.0.1/gen_epix/casedb/domain/model/organization.py +418 -0
  57. gen_epix-0.0.1/gen_epix/casedb/domain/model/seqdb.py +94 -0
  58. gen_epix-0.0.1/gen_epix/casedb/domain/model/subject.py +75 -0
  59. gen_epix-0.0.1/gen_epix/casedb/domain/model/system.py +57 -0
  60. gen_epix-0.0.1/gen_epix/casedb/domain/policy/__init__.py +3 -0
  61. gen_epix-0.0.1/gen_epix/casedb/domain/policy/abac.py +49 -0
  62. gen_epix-0.0.1/gen_epix/casedb/domain/policy/rbac.py +18 -0
  63. gen_epix-0.0.1/gen_epix/casedb/domain/policy/system.py +22 -0
  64. gen_epix-0.0.1/gen_epix/casedb/domain/repository/__init__.py +20 -0
  65. gen_epix-0.0.1/gen_epix/casedb/domain/repository/abac.py +10 -0
  66. gen_epix-0.0.1/gen_epix/casedb/domain/repository/case.py +10 -0
  67. gen_epix-0.0.1/gen_epix/casedb/domain/repository/geo.py +10 -0
  68. gen_epix-0.0.1/gen_epix/casedb/domain/repository/ontology.py +10 -0
  69. gen_epix-0.0.1/gen_epix/casedb/domain/repository/organization.py +22 -0
  70. gen_epix-0.0.1/gen_epix/casedb/domain/repository/subject.py +10 -0
  71. gen_epix-0.0.1/gen_epix/casedb/domain/repository/system.py +10 -0
  72. gen_epix-0.0.1/gen_epix/casedb/domain/service/__init__.py +47 -0
  73. gen_epix-0.0.1/gen_epix/casedb/domain/service/abac.py +128 -0
  74. gen_epix-0.0.1/gen_epix/casedb/domain/service/case.py +141 -0
  75. gen_epix-0.0.1/gen_epix/casedb/domain/service/geo.py +29 -0
  76. gen_epix-0.0.1/gen_epix/casedb/domain/service/ontology.py +24 -0
  77. gen_epix-0.0.1/gen_epix/casedb/domain/service/organization.py +68 -0
  78. gen_epix-0.0.1/gen_epix/casedb/domain/service/rbac.py +25 -0
  79. gen_epix-0.0.1/gen_epix/casedb/domain/service/seqdb.py +42 -0
  80. gen_epix-0.0.1/gen_epix/casedb/domain/service/subject.py +19 -0
  81. gen_epix-0.0.1/gen_epix/casedb/domain/service/system.py +33 -0
  82. gen_epix-0.0.1/gen_epix/casedb/env.py +309 -0
  83. gen_epix-0.0.1/gen_epix/casedb/policies/case_abac_policy.py +13 -0
  84. gen_epix-0.0.1/gen_epix/casedb/policies/has_system_outage_policy.py +53 -0
  85. gen_epix-0.0.1/gen_epix/casedb/policies/is_organization_admin_policy.py +70 -0
  86. gen_epix-0.0.1/gen_epix/casedb/policies/read_organization_results_only_policy.py +86 -0
  87. gen_epix-0.0.1/gen_epix/casedb/policies/read_self_results_only_policy.py +49 -0
  88. gen_epix-0.0.1/gen_epix/casedb/policies/update_user_policy.py +71 -0
  89. gen_epix-0.0.1/gen_epix/casedb/repositories/__init__.py +35 -0
  90. gen_epix-0.0.1/gen_epix/casedb/repositories/abac_dict.py +6 -0
  91. gen_epix-0.0.1/gen_epix/casedb/repositories/abac_sa.py +22 -0
  92. gen_epix-0.0.1/gen_epix/casedb/repositories/case_dict.py +6 -0
  93. gen_epix-0.0.1/gen_epix/casedb/repositories/case_sa.py +22 -0
  94. gen_epix-0.0.1/gen_epix/casedb/repositories/geo_dict.py +6 -0
  95. gen_epix-0.0.1/gen_epix/casedb/repositories/geo_sa.py +22 -0
  96. gen_epix-0.0.1/gen_epix/casedb/repositories/ontology_dict.py +6 -0
  97. gen_epix-0.0.1/gen_epix/casedb/repositories/ontology_sa.py +22 -0
  98. gen_epix-0.0.1/gen_epix/casedb/repositories/organization_dict.py +25 -0
  99. gen_epix-0.0.1/gen_epix/casedb/repositories/organization_sa.py +51 -0
  100. gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/__init__.py +12 -0
  101. gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/abac.py +173 -0
  102. gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/base.py +46 -0
  103. gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/case.py +352 -0
  104. gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/geo.py +77 -0
  105. gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/ontology.py +86 -0
  106. gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/organization.py +184 -0
  107. gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/subject.py +43 -0
  108. gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/system.py +34 -0
  109. gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/util.py +88 -0
  110. gen_epix-0.0.1/gen_epix/casedb/repositories/subject_dict.py +6 -0
  111. gen_epix-0.0.1/gen_epix/casedb/repositories/subject_sa.py +22 -0
  112. gen_epix-0.0.1/gen_epix/casedb/repositories/system_dict.py +6 -0
  113. gen_epix-0.0.1/gen_epix/casedb/repositories/system_sa.py +22 -0
  114. gen_epix-0.0.1/gen_epix/casedb/services/__init__.py +13 -0
  115. gen_epix-0.0.1/gen_epix/casedb/services/abac.py +701 -0
  116. gen_epix-0.0.1/gen_epix/casedb/services/case.py +2497 -0
  117. gen_epix-0.0.1/gen_epix/casedb/services/geo.py +9 -0
  118. gen_epix-0.0.1/gen_epix/casedb/services/ontology.py +5 -0
  119. gen_epix-0.0.1/gen_epix/casedb/services/organization.py +371 -0
  120. gen_epix-0.0.1/gen_epix/casedb/services/rbac.py +68 -0
  121. gen_epix-0.0.1/gen_epix/casedb/services/seqdb.py +72 -0
  122. gen_epix-0.0.1/gen_epix/casedb/services/subject.py +5 -0
  123. gen_epix-0.0.1/gen_epix/casedb/services/system.py +29 -0
  124. gen_epix-0.0.1/gen_epix/casedb/services/user_manager.py +321 -0
  125. gen_epix-0.0.1/gen_epix/common/api/exc.py +131 -0
  126. gen_epix-0.0.1/gen_epix/fastapp/__init__.py +34 -0
  127. gen_epix-0.0.1/gen_epix/fastapp/api/__init__.py +5 -0
  128. gen_epix-0.0.1/gen_epix/fastapp/api/crud_endpoint_generator.py +968 -0
  129. gen_epix-0.0.1/gen_epix/fastapp/api/crud_endpoint_set.py +41 -0
  130. gen_epix-0.0.1/gen_epix/fastapp/api/exc.py +148 -0
  131. gen_epix-0.0.1/gen_epix/fastapp/api/openapi.py +115 -0
  132. gen_epix-0.0.1/gen_epix/fastapp/app.py +458 -0
  133. gen_epix-0.0.1/gen_epix/fastapp/domain/__init__.py +7 -0
  134. gen_epix-0.0.1/gen_epix/fastapp/domain/domain.py +810 -0
  135. gen_epix-0.0.1/gen_epix/fastapp/domain/entity.py +680 -0
  136. gen_epix-0.0.1/gen_epix/fastapp/domain/key.py +47 -0
  137. gen_epix-0.0.1/gen_epix/fastapp/domain/link.py +41 -0
  138. gen_epix-0.0.1/gen_epix/fastapp/domain/util.py +30 -0
  139. gen_epix-0.0.1/gen_epix/fastapp/enum.py +356 -0
  140. gen_epix-0.0.1/gen_epix/fastapp/exc.py +185 -0
  141. gen_epix-0.0.1/gen_epix/fastapp/log.py +50 -0
  142. gen_epix-0.0.1/gen_epix/fastapp/middleware/__init__.py +11 -0
  143. gen_epix-0.0.1/gen_epix/fastapp/middleware/handle_auth_exception.py +43 -0
  144. gen_epix-0.0.1/gen_epix/fastapp/middleware/handle_no_response.py +39 -0
  145. gen_epix-0.0.1/gen_epix/fastapp/middleware/limiter.py +15 -0
  146. gen_epix-0.0.1/gen_epix/fastapp/middleware/update_response_header.py +38 -0
  147. gen_epix-0.0.1/gen_epix/fastapp/model.py +310 -0
  148. gen_epix-0.0.1/gen_epix/fastapp/pdp.py +112 -0
  149. gen_epix-0.0.1/gen_epix/fastapp/repositories/__init__.py +13 -0
  150. gen_epix-0.0.1/gen_epix/fastapp/repositories/dict/__init__.py +7 -0
  151. gen_epix-0.0.1/gen_epix/fastapp/repositories/dict/repository.py +703 -0
  152. gen_epix-0.0.1/gen_epix/fastapp/repositories/dict/unit_of_work.py +9 -0
  153. gen_epix-0.0.1/gen_epix/fastapp/repositories/sa/__init__.py +13 -0
  154. gen_epix-0.0.1/gen_epix/fastapp/repositories/sa/engine_factory.py +55 -0
  155. gen_epix-0.0.1/gen_epix/fastapp/repositories/sa/mapper.py +387 -0
  156. gen_epix-0.0.1/gen_epix/fastapp/repositories/sa/repository.py +1048 -0
  157. gen_epix-0.0.1/gen_epix/fastapp/repositories/sa/unit_of_work.py +119 -0
  158. gen_epix-0.0.1/gen_epix/fastapp/repositories/sa/util.py +79 -0
  159. gen_epix-0.0.1/gen_epix/fastapp/repository.py +363 -0
  160. gen_epix-0.0.1/gen_epix/fastapp/service.py +537 -0
  161. gen_epix-0.0.1/gen_epix/fastapp/services/__init__.py +0 -0
  162. gen_epix-0.0.1/gen_epix/fastapp/services/auth/__init__.py +19 -0
  163. gen_epix-0.0.1/gen_epix/fastapp/services/auth/base.py +19 -0
  164. gen_epix-0.0.1/gen_epix/fastapp/services/auth/command.py +5 -0
  165. gen_epix-0.0.1/gen_epix/fastapp/services/auth/idp_client.py +32 -0
  166. gen_epix-0.0.1/gen_epix/fastapp/services/auth/literal.py +5 -0
  167. gen_epix-0.0.1/gen_epix/fastapp/services/auth/mock_idp_client.py +81 -0
  168. gen_epix-0.0.1/gen_epix/fastapp/services/auth/model.py +57 -0
  169. gen_epix-0.0.1/gen_epix/fastapp/services/auth/oidc_client.py +363 -0
  170. gen_epix-0.0.1/gen_epix/fastapp/services/auth/service.py +537 -0
  171. gen_epix-0.0.1/gen_epix/fastapp/services/auth/util.py +96 -0
  172. gen_epix-0.0.1/gen_epix/fastapp/services/rbac/__init__.py +2 -0
  173. gen_epix-0.0.1/gen_epix/fastapp/services/rbac/policy.py +66 -0
  174. gen_epix-0.0.1/gen_epix/fastapp/services/rbac/service.py +426 -0
  175. gen_epix-0.0.1/gen_epix/fastapp/services/remote/__init__.py +3 -0
  176. gen_epix-0.0.1/gen_epix/fastapp/services/remote/service.py +33 -0
  177. gen_epix-0.0.1/gen_epix/fastapp/unit_of_work.py +40 -0
  178. gen_epix-0.0.1/gen_epix/fastapp/user_manager.py +80 -0
  179. gen_epix-0.0.1/gen_epix/fastapp/util.py +5 -0
  180. gen_epix-0.0.1/gen_epix/filter/__init__.py +60 -0
  181. gen_epix-0.0.1/gen_epix/filter/base.py +270 -0
  182. gen_epix-0.0.1/gen_epix/filter/composite.py +400 -0
  183. gen_epix-0.0.1/gen_epix/filter/date_range.py +20 -0
  184. gen_epix-0.0.1/gen_epix/filter/datetime_range.py +20 -0
  185. gen_epix-0.0.1/gen_epix/filter/enum.py +43 -0
  186. gen_epix-0.0.1/gen_epix/filter/equals.py +16 -0
  187. gen_epix-0.0.1/gen_epix/filter/equals_boolean.py +14 -0
  188. gen_epix-0.0.1/gen_epix/filter/equals_number.py +17 -0
  189. gen_epix-0.0.1/gen_epix/filter/equals_string.py +14 -0
  190. gen_epix-0.0.1/gen_epix/filter/equals_uuid.py +15 -0
  191. gen_epix-0.0.1/gen_epix/filter/exists.py +68 -0
  192. gen_epix-0.0.1/gen_epix/filter/hashable_set.py +19 -0
  193. gen_epix-0.0.1/gen_epix/filter/no_filter.py +67 -0
  194. gen_epix-0.0.1/gen_epix/filter/number_range.py +22 -0
  195. gen_epix-0.0.1/gen_epix/filter/number_set.py +17 -0
  196. gen_epix-0.0.1/gen_epix/filter/partial_date_range.py +173 -0
  197. gen_epix-0.0.1/gen_epix/filter/range.py +113 -0
  198. gen_epix-0.0.1/gen_epix/filter/regex.py +26 -0
  199. gen_epix-0.0.1/gen_epix/filter/string_set.py +38 -0
  200. gen_epix-0.0.1/gen_epix/filter/uuid_set.py +26 -0
  201. gen_epix-0.0.1/gen_epix/omopdb/__init__.py +0 -0
  202. gen_epix-0.0.1/gen_epix/omopdb/api/auth.py +93 -0
  203. gen_epix-0.0.1/gen_epix/omopdb/api/base.py +7 -0
  204. gen_epix-0.0.1/gen_epix/omopdb/api/omop.py +32 -0
  205. gen_epix-0.0.1/gen_epix/omopdb/api/organization.py +80 -0
  206. gen_epix-0.0.1/gen_epix/omopdb/api/rbac.py +32 -0
  207. gen_epix-0.0.1/gen_epix/omopdb/api/router.py +58 -0
  208. gen_epix-0.0.1/gen_epix/omopdb/api/system.py +110 -0
  209. gen_epix-0.0.1/gen_epix/omopdb/app.py +50 -0
  210. gen_epix-0.0.1/gen_epix/omopdb/app_setup.py +129 -0
  211. gen_epix-0.0.1/gen_epix/omopdb/config/.secret/automaticnewuser +8 -0
  212. gen_epix-0.0.1/gen_epix/omopdb/config/.secret/db +3 -0
  213. gen_epix-0.0.1/gen_epix/omopdb/config/.secret/log +3 -0
  214. gen_epix-0.0.1/gen_epix/omopdb/config/.secret/repository-sasql-defaults +8 -0
  215. gen_epix-0.0.1/gen_epix/omopdb/config/.secret/root-user +10 -0
  216. gen_epix-0.0.1/gen_epix/omopdb/config/__init__.py +1 -0
  217. gen_epix-0.0.1/gen_epix/omopdb/config/idp/identity_providers.json +29 -0
  218. gen_epix-0.0.1/gen_epix/omopdb/config/idp/mock_identity_provider.json +11 -0
  219. gen_epix-0.0.1/gen_epix/omopdb/config/idp/no_identity_providers.json +2 -0
  220. gen_epix-0.0.1/gen_epix/omopdb/config/logging.debug.yaml +44 -0
  221. gen_epix-0.0.1/gen_epix/omopdb/config/logging.yaml +35 -0
  222. gen_epix-0.0.1/gen_epix/omopdb/config/secrets.default.toml +66 -0
  223. gen_epix-0.0.1/gen_epix/omopdb/config/settings.toml +50 -0
  224. gen_epix-0.0.1/gen_epix/omopdb/domain/__init__.py +3 -0
  225. gen_epix-0.0.1/gen_epix/omopdb/domain/command/__init__.py +3 -0
  226. gen_epix-0.0.1/gen_epix/omopdb/domain/command/base.py +38 -0
  227. gen_epix-0.0.1/gen_epix/omopdb/domain/command/crud.py +217 -0
  228. gen_epix-0.0.1/gen_epix/omopdb/domain/command/non_crud.py +50 -0
  229. gen_epix-0.0.1/gen_epix/omopdb/domain/command/role.py +52 -0
  230. gen_epix-0.0.1/gen_epix/omopdb/domain/enum.py +66 -0
  231. gen_epix-0.0.1/gen_epix/omopdb/domain/exc.py +5 -0
  232. gen_epix-0.0.1/gen_epix/omopdb/domain/model/__init__.py +8 -0
  233. gen_epix-0.0.1/gen_epix/omopdb/domain/model/base.py +12 -0
  234. gen_epix-0.0.1/gen_epix/omopdb/domain/model/omop.py +2449 -0
  235. gen_epix-0.0.1/gen_epix/omopdb/domain/model/organization.py +228 -0
  236. gen_epix-0.0.1/gen_epix/omopdb/domain/model/system.py +58 -0
  237. gen_epix-0.0.1/gen_epix/omopdb/domain/policy/__init__.py +1 -0
  238. gen_epix-0.0.1/gen_epix/omopdb/domain/policy/organization.py +15 -0
  239. gen_epix-0.0.1/gen_epix/omopdb/domain/policy/system.py +21 -0
  240. gen_epix-0.0.1/gen_epix/omopdb/domain/repository/__init__.py +10 -0
  241. gen_epix-0.0.1/gen_epix/omopdb/domain/repository/omop.py +10 -0
  242. gen_epix-0.0.1/gen_epix/omopdb/domain/repository/organization.py +17 -0
  243. gen_epix-0.0.1/gen_epix/omopdb/domain/repository/system.py +10 -0
  244. gen_epix-0.0.1/gen_epix/omopdb/domain/service/__init__.py +28 -0
  245. gen_epix-0.0.1/gen_epix/omopdb/domain/service/omop.py +19 -0
  246. gen_epix-0.0.1/gen_epix/omopdb/domain/service/organization.py +69 -0
  247. gen_epix-0.0.1/gen_epix/omopdb/domain/service/rbac.py +24 -0
  248. gen_epix-0.0.1/gen_epix/omopdb/domain/service/system.py +33 -0
  249. gen_epix-0.0.1/gen_epix/omopdb/enum.py +18 -0
  250. gen_epix-0.0.1/gen_epix/omopdb/env.py +254 -0
  251. gen_epix-0.0.1/gen_epix/omopdb/policies/has_system_outage_policy.py +55 -0
  252. gen_epix-0.0.1/gen_epix/omopdb/policies/update_user_policy.py +52 -0
  253. gen_epix-0.0.1/gen_epix/omopdb/repositories/__init__.py +16 -0
  254. gen_epix-0.0.1/gen_epix/omopdb/repositories/omop_dict.py +6 -0
  255. gen_epix-0.0.1/gen_epix/omopdb/repositories/omop_sa.py +22 -0
  256. gen_epix-0.0.1/gen_epix/omopdb/repositories/organization_dict.py +25 -0
  257. gen_epix-0.0.1/gen_epix/omopdb/repositories/organization_sa.py +51 -0
  258. gen_epix-0.0.1/gen_epix/omopdb/repositories/sa_model/__init__.py +14 -0
  259. gen_epix-0.0.1/gen_epix/omopdb/repositories/sa_model/base.py +46 -0
  260. gen_epix-0.0.1/gen_epix/omopdb/repositories/sa_model/omop.py +1556 -0
  261. gen_epix-0.0.1/gen_epix/omopdb/repositories/sa_model/organization.py +83 -0
  262. gen_epix-0.0.1/gen_epix/omopdb/repositories/sa_model/system.py +34 -0
  263. gen_epix-0.0.1/gen_epix/omopdb/repositories/sa_model/util.py +113 -0
  264. gen_epix-0.0.1/gen_epix/omopdb/repositories/system_dict.py +6 -0
  265. gen_epix-0.0.1/gen_epix/omopdb/repositories/system_sa.py +22 -0
  266. gen_epix-0.0.1/gen_epix/omopdb/services/__init__.py +7 -0
  267. gen_epix-0.0.1/gen_epix/omopdb/services/model_anonymizer.py +541 -0
  268. gen_epix-0.0.1/gen_epix/omopdb/services/omop.py +5 -0
  269. gen_epix-0.0.1/gen_epix/omopdb/services/organization.py +228 -0
  270. gen_epix-0.0.1/gen_epix/omopdb/services/rbac.py +51 -0
  271. gen_epix-0.0.1/gen_epix/omopdb/services/system.py +29 -0
  272. gen_epix-0.0.1/gen_epix/omopdb/services/user_manager.py +245 -0
  273. gen_epix-0.0.1/gen_epix/omopdb/test/unit/anonymizer/test_anonymizer.py +38 -0
  274. gen_epix-0.0.1/gen_epix/seqdb/__init__.py +0 -0
  275. gen_epix-0.0.1/gen_epix/seqdb/api/__init__.py +0 -0
  276. gen_epix-0.0.1/gen_epix/seqdb/api/auth.py +93 -0
  277. gen_epix-0.0.1/gen_epix/seqdb/api/base.py +7 -0
  278. gen_epix-0.0.1/gen_epix/seqdb/api/organization.py +80 -0
  279. gen_epix-0.0.1/gen_epix/seqdb/api/rbac.py +32 -0
  280. gen_epix-0.0.1/gen_epix/seqdb/api/router.py +58 -0
  281. gen_epix-0.0.1/gen_epix/seqdb/api/seq.py +100 -0
  282. gen_epix-0.0.1/gen_epix/seqdb/api/system.py +110 -0
  283. gen_epix-0.0.1/gen_epix/seqdb/app.py +50 -0
  284. gen_epix-0.0.1/gen_epix/seqdb/app_setup.py +128 -0
  285. gen_epix-0.0.1/gen_epix/seqdb/config/.secret/automaticnewuser +8 -0
  286. gen_epix-0.0.1/gen_epix/seqdb/config/.secret/db +3 -0
  287. gen_epix-0.0.1/gen_epix/seqdb/config/.secret/log +3 -0
  288. gen_epix-0.0.1/gen_epix/seqdb/config/.secret/repository-sasql-defaults +8 -0
  289. gen_epix-0.0.1/gen_epix/seqdb/config/.secret/root-user +10 -0
  290. gen_epix-0.0.1/gen_epix/seqdb/config/__init__.py +1 -0
  291. gen_epix-0.0.1/gen_epix/seqdb/config/idp/identity_providers.json +29 -0
  292. gen_epix-0.0.1/gen_epix/seqdb/config/idp/mock_identity_provider.json +11 -0
  293. gen_epix-0.0.1/gen_epix/seqdb/config/idp/no_identity_providers.json +2 -0
  294. gen_epix-0.0.1/gen_epix/seqdb/config/logging.debug.yaml +44 -0
  295. gen_epix-0.0.1/gen_epix/seqdb/config/logging.yaml +35 -0
  296. gen_epix-0.0.1/gen_epix/seqdb/config/secrets.default.toml +69 -0
  297. gen_epix-0.0.1/gen_epix/seqdb/config/settings.toml +50 -0
  298. gen_epix-0.0.1/gen_epix/seqdb/domain/__init__.py +3 -0
  299. gen_epix-0.0.1/gen_epix/seqdb/domain/command/__init__.py +3 -0
  300. gen_epix-0.0.1/gen_epix/seqdb/domain/command/base.py +37 -0
  301. gen_epix-0.0.1/gen_epix/seqdb/domain/command/crud.py +223 -0
  302. gen_epix-0.0.1/gen_epix/seqdb/domain/command/non_crud.py +95 -0
  303. gen_epix-0.0.1/gen_epix/seqdb/domain/command/role.py +150 -0
  304. gen_epix-0.0.1/gen_epix/seqdb/domain/enum.py +260 -0
  305. gen_epix-0.0.1/gen_epix/seqdb/domain/exc.py +5 -0
  306. gen_epix-0.0.1/gen_epix/seqdb/domain/model/__init__.py +8 -0
  307. gen_epix-0.0.1/gen_epix/seqdb/domain/model/base.py +115 -0
  308. gen_epix-0.0.1/gen_epix/seqdb/domain/model/organization.py +226 -0
  309. gen_epix-0.0.1/gen_epix/seqdb/domain/model/seq/__init__.py +92 -0
  310. gen_epix-0.0.1/gen_epix/seqdb/domain/model/seq/metadata.py +564 -0
  311. gen_epix-0.0.1/gen_epix/seqdb/domain/model/seq/non_persistable.py +159 -0
  312. gen_epix-0.0.1/gen_epix/seqdb/domain/model/seq/persistable.py +774 -0
  313. gen_epix-0.0.1/gen_epix/seqdb/domain/model/system.py +58 -0
  314. gen_epix-0.0.1/gen_epix/seqdb/domain/policy/__init__.py +1 -0
  315. gen_epix-0.0.1/gen_epix/seqdb/domain/policy/organization.py +15 -0
  316. gen_epix-0.0.1/gen_epix/seqdb/domain/policy/system.py +21 -0
  317. gen_epix-0.0.1/gen_epix/seqdb/domain/repository/__init__.py +8 -0
  318. gen_epix-0.0.1/gen_epix/seqdb/domain/repository/organization.py +23 -0
  319. gen_epix-0.0.1/gen_epix/seqdb/domain/repository/seq.py +25 -0
  320. gen_epix-0.0.1/gen_epix/seqdb/domain/repository/system.py +10 -0
  321. gen_epix-0.0.1/gen_epix/seqdb/domain/service/__init__.py +31 -0
  322. gen_epix-0.0.1/gen_epix/seqdb/domain/service/abac.py +19 -0
  323. gen_epix-0.0.1/gen_epix/seqdb/domain/service/organization.py +69 -0
  324. gen_epix-0.0.1/gen_epix/seqdb/domain/service/rbac.py +24 -0
  325. gen_epix-0.0.1/gen_epix/seqdb/domain/service/seq.py +72 -0
  326. gen_epix-0.0.1/gen_epix/seqdb/domain/service/system.py +27 -0
  327. gen_epix-0.0.1/gen_epix/seqdb/env.py +257 -0
  328. gen_epix-0.0.1/gen_epix/seqdb/policies/has_system_outage_policy.py +55 -0
  329. gen_epix-0.0.1/gen_epix/seqdb/policies/update_user_policy.py +52 -0
  330. gen_epix-0.0.1/gen_epix/seqdb/repositories/__init__.py +15 -0
  331. gen_epix-0.0.1/gen_epix/seqdb/repositories/organization_dict.py +25 -0
  332. gen_epix-0.0.1/gen_epix/seqdb/repositories/organization_sa.py +51 -0
  333. gen_epix-0.0.1/gen_epix/seqdb/repositories/sa_model/__init__.py +12 -0
  334. gen_epix-0.0.1/gen_epix/seqdb/repositories/sa_model/base.py +80 -0
  335. gen_epix-0.0.1/gen_epix/seqdb/repositories/sa_model/organization.py +83 -0
  336. gen_epix-0.0.1/gen_epix/seqdb/repositories/sa_model/seq.py +506 -0
  337. gen_epix-0.0.1/gen_epix/seqdb/repositories/sa_model/system.py +34 -0
  338. gen_epix-0.0.1/gen_epix/seqdb/repositories/sa_model/util.py +88 -0
  339. gen_epix-0.0.1/gen_epix/seqdb/repositories/seq_dict.py +31 -0
  340. gen_epix-0.0.1/gen_epix/seqdb/repositories/seq_sa.py +55 -0
  341. gen_epix-0.0.1/gen_epix/seqdb/repositories/system_dict.py +6 -0
  342. gen_epix-0.0.1/gen_epix/seqdb/repositories/system_sa.py +22 -0
  343. gen_epix-0.0.1/gen_epix/seqdb/services/__init__.py +9 -0
  344. gen_epix-0.0.1/gen_epix/seqdb/services/abac.py +12 -0
  345. gen_epix-0.0.1/gen_epix/seqdb/services/organization.py +226 -0
  346. gen_epix-0.0.1/gen_epix/seqdb/services/rbac.py +51 -0
  347. gen_epix-0.0.1/gen_epix/seqdb/services/seq.py +501 -0
  348. gen_epix-0.0.1/gen_epix/seqdb/services/system.py +29 -0
  349. gen_epix-0.0.1/gen_epix/seqdb/services/user_manager.py +244 -0
  350. gen_epix-0.0.1/pyproject.toml +136 -0
  351. gen_epix-0.0.1/setup.cfg +4 -0
@@ -0,0 +1,214 @@
1
+ Metadata-Version: 2.4
2
+ Name: Gen-EpiX
3
+ Version: 0.0.1
4
+ Summary: Genomic Epidemiology platform for disease X
5
+ Author-email: RIVM-bioinformatics <ids-bioinformatics@rivm.nl>
6
+ License-Expression: EUPL-1.2
7
+ Project-URL: Homepage, https://github.com/RIVM-bioinformatics/Gen-EpiX
8
+ Project-URL: Documentation, https://rivm-bioinformatics.github.io/Gen-EpiX/
9
+ Keywords: Genomic Epidemiology,Disease X,Bioinformatics
10
+ Classifier: Programming Language :: Python :: 3.12
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
16
+ Requires-Python: >=3.12
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ Requires-Dist: fastapi[standard]==0.115.5
20
+ Requires-Dist: uvicorn==0.32.1
21
+ Requires-Dist: gunicorn==21.2.*
22
+ Requires-Dist: starlette==0.41.3
23
+ Requires-Dist: httpx==0.27.2
24
+ Requires-Dist: python-jose==3.3.0
25
+ Requires-Dist: sqlalchemy==2.0.36
26
+ Requires-Dist: sqlalchemy_utils==0.41.2
27
+ Requires-Dist: sqlmodel==0.0.22
28
+ Requires-Dist: pydantic==2.7.*
29
+ Requires-Dist: pandas==2.2.3
30
+ Requires-Dist: ulid-py==1.1.0
31
+ Requires-Dist: fire==0.7.0
32
+ Requires-Dist: dynaconf==3.2.6
33
+ Requires-Dist: scipy==1.14.1
34
+ Requires-Dist: numpy==2.1.3
35
+ Requires-Dist: biopython==1.84
36
+ Requires-Dist: cachetools==5.5.0
37
+ Requires-Dist: slowapi==0.1.9
38
+ Provides-Extra: dependencies
39
+ Requires-Dist: pytest; extra == "dependencies"
40
+ Requires-Dist: pytest-cov; extra == "dependencies"
41
+ Requires-Dist: pytest-mock; extra == "dependencies"
42
+ Requires-Dist: pytest-dependency; extra == "dependencies"
43
+ Requires-Dist: pyinstrument; extra == "dependencies"
44
+ Requires-Dist: isort; extra == "dependencies"
45
+ Requires-Dist: black; extra == "dependencies"
46
+ Requires-Dist: pylint; extra == "dependencies"
47
+ Requires-Dist: mypy; extra == "dependencies"
48
+ Requires-Dist: cryptography; extra == "dependencies"
49
+ Requires-Dist: pandas-stubs; extra == "dependencies"
50
+ Requires-Dist: types-openpyxl; extra == "dependencies"
51
+ Requires-Dist: types-cachetools; extra == "dependencies"
52
+ Requires-Dist: types-python-jose; extra == "dependencies"
53
+ Dynamic: license-file
54
+
55
+ <p align="center">
56
+ <img src="docs/assets/Gen-epix-logo.svg" alt="lsp-api-logo">
57
+ </p>
58
+ <p align="center">
59
+ <em>Genomic Epidemiology platform for disease X</em>
60
+ </p>
61
+ <p align="center">
62
+ <a href="https://github.com/RIVM-bioinformatics/lsp-api/actions/workflows/main.yml/badge.svg" target="_blank">
63
+ <img src="https://github.com/RIVM-bioinformatics/lsp-api/actions/workflows/main.yml/badge.svg" alt="tests">
64
+ </a>
65
+ <a href="https://sonarcloud.io/api/project_badges/measure?project=RIVM-bioinformatics_lsp-api&metric=alert_status&token=51a6c8d13bac07e815053949f389fe38db584061" target="_blank">
66
+ <img src="https://sonarcloud.io/api/project_badges/measure?project=RIVM-bioinformatics_lsp-api&metric=alert_status&token=51a6c8d13bac07e815053949f389fe38db584061" alt="sonarqube">
67
+ </a>
68
+ <a href="https://sonarcloud.io/api/project_badges/measure?project=RIVM-bioinformatics_lsp-api&metric=coverage&token=51a6c8d13bac07e815053949f389fe38db584061" target="_blank">
69
+ <img src="https://sonarcloud.io/api/project_badges/measure?project=RIVM-bioinformatics_lsp-api&metric=coverage&token=51a6c8d13bac07e815053949f389fe38db584061" alt="coverage">
70
+ </a>
71
+ </p>
72
+
73
+
74
+
75
+ ---
76
+
77
+ **Source Code**: <a href="https://github.com/RIVM-bioinformatics/lsp-api" target="_blank">https://github.com/RIVM-bioinformatics/lsp-api</a>
78
+
79
+ ---
80
+ # Gen-EpiX: Genomic Epidemiology platform for disease X (beta version)
81
+
82
+ Gen-EpiX is platform for visualizing and analyzing genomic epidemiology data. It has fine-grained access controls for collaboration between multiple organizations.
83
+
84
+ ## Key Features
85
+
86
+ - **Visualisation**: Visualize cases by time, place, person and also by genome through a phylogenetic tree coupled to the cases.
87
+ - **Fine-grained access**: Give different organizations different access rights per disease, down to individual variables. Organizations can manage access of their own users by themselves.
88
+ - **Search**: Search and filter cases, including on genetic similarity.
89
+ - **Signal detection**: Detect, define and share sets of cases, signals and outbreaks.
90
+ - **Disease X**: Any disease and corresponding analysis variables can be added.
91
+ - **Data**: Adheres to the Medallion data architecture design pattern. The silver layer consists of normalized and standardized patient or subject data compliant with <a href="https://www.ohdsi.org/data-standardization" target="_blank">OMOP Common Data Model</a>, and a dedicated database for genetic sequence data and computation of phylogenetic trees. The gold layer consists of case data ready for analysis in the form of a single row of data per case.
92
+ - **Tech**: OpenAPI compliant API, deployable on cloud or on-premise, support for multiple authentication providers. Python/FastAPI backend and default TypeScript/React frontend available from gen-epix-web.
93
+
94
+ ## Deliberately not in scope
95
+
96
+ - **Disease-specific knowledge**: Every organization has their own variables that are important for analysis, as well as their own bioinformatics to process genetic sequence data. We therefore avoided any disease-specific code both for the generation of these data and for the analysis variables that can be defined. Only the results are stored.
97
+ - **Collaboration-specific knowledge**: Every collaboration or country (e.g. for public health surveillance of diseases) has their own specifics in terms of access rights and any relevant geographic regions. We therefore avoided any country-specific code, both for the type of organizations that have access, and for any geographic data.
98
+
99
+ ---
100
+
101
+ # Installation
102
+
103
+ Below is a streamlined installation guide for various platforms:
104
+
105
+ 1. Install ODBC development headers:
106
+ ```console
107
+ sudo apt-get update
108
+ sudo apt-get install -y unixodbc-dev
109
+ ```
110
+
111
+ 2. Create and activate a conda environment:
112
+ ```console
113
+ conda create --name gen-epix python=3.12
114
+ conda activate gen-epix
115
+ ```
116
+
117
+ 3. Install dependencies*:
118
+ ```console
119
+ pip install -r requirements.txt
120
+ pip install --no-binary :all: pyodbc==5.2.*
121
+ ```
122
+ **Some hardware architectures (especially Apple M1/M2/M3 chips) require pyodbc to be compiled from source for compatibility*
123
+ <br>
124
+
125
+ 4. For development, add testing tools:
126
+ ```console
127
+ pip install -r dev-requirements.txt
128
+ ```
129
+
130
+
131
+ **SSL Certificate Setup**
132
+
133
+ 1. Install mkcert:
134
+ ```console
135
+ # Linux
136
+ sudo apt install mkcert
137
+
138
+ # macOS
139
+ brew install mkcert
140
+ ```
141
+
142
+ 2. Generate certificates:
143
+ ```console
144
+ mkcert -install
145
+ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1
146
+ ```
147
+
148
+ 3. Copy the generated files:
149
+ ```console
150
+ cp key.pem cert.pem /path/to/project/cert/
151
+ ```
152
+
153
+ 4. For WSL users: Run the commands in Windows PowerShell and copy files to both the project cert directory and your WSL home directory.
154
+
155
+ ---
156
+
157
+ ## Usage
158
+
159
+ ### Starting the API
160
+
161
+ 1. Activate the conda environment:
162
+ ```console
163
+ conda activate gen-epix
164
+ ```
165
+ 2. Run the application:
166
+ ```console
167
+ python run.py [service] [app_type] [env_name] [idp_config]
168
+ ```
169
+ - `service`: The service to run (api, etl)
170
+ - `app_type`: Specific configuration for an app type (casedb, seqdb, omopbd)
171
+ - `env_name`: Name of the environment.
172
+ - `idp_config`: Which authentication setting to use (idps, mock_idps, no_auth, debug, no_ssl)
173
+
174
+ ---
175
+
176
+ ### Example
177
+
178
+ ```console
179
+ conda activate gen-epix
180
+ python run.py api casedb local idps
181
+ ```
182
+
183
+ <img src="docs/assets/example_docs.png" alt="example-docs">
184
+
185
+ ---
186
+
187
+ ## Dependencies
188
+
189
+ Gen-EpiX relies on several Python packages to provide its functionality:
190
+
191
+ **Core Dependencies**
192
+ * <a href="https://fastapi.tiangolo.com" target="_blank"><code>fastapi</code></a> - Modern, high-performance web framework
193
+ * <a href="https://www.sqlalchemy.org" target="_blank"><code>sqlalchemy</code></a> - SQL toolkit and Object-Relational Mapping (ORM) library
194
+ * <a href="https://docs.pydantic.dev" target="_blank"><code>pydantic</code></a> - Data validation and settings management
195
+ * <a href="https://biopython.org" target="_blank"><code>biopython</code></a> - Tools for computational molecular biology
196
+
197
+ **Database Connectors**
198
+ * <a href="https://github.com/mkleehammer/pyodbc" target="_blank"><code>pyodbc</code></a> - ODBC database adapter
199
+
200
+ **API Server**
201
+ * <a href="https://www.uvicorn.org" target="_blank"><code>uvicorn</code></a> - ASGI web server
202
+
203
+ **Development Tools**
204
+ * <a href="https://docs.pytest.org" target="_blank"><code>pytest</code></a> - Testing framework
205
+ * <a href="https://black.readthedocs.io" target="_blank"><code>black</code></a> - Code formatter
206
+ * <a href="https://pylint.org" target="_blank"><code>pylint</code></a> - Static code analyzer
207
+ * <a href="https://mypy.readthedocs.io" target="_blank"><code>mypy</code></a> - Static type checker
208
+
209
+ For a complete list of dependencies, refer to:
210
+ - [requirements.txt](requirements.txt) - Production dependencies
211
+ - [dev-requirements.txt](dev-requirements.txt) - Development dependencies
212
+
213
+ **Python Version**
214
+ Gen-EpiX requires Python 3.12 or higher.
@@ -0,0 +1,349 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ Gen_EpiX.egg-info/PKG-INFO
5
+ Gen_EpiX.egg-info/SOURCES.txt
6
+ Gen_EpiX.egg-info/dependency_links.txt
7
+ Gen_EpiX.egg-info/requires.txt
8
+ Gen_EpiX.egg-info/top_level.txt
9
+ gen_epix/__init__.py
10
+ gen_epix/casedb/__init__.py
11
+ gen_epix/casedb/app.py
12
+ gen_epix/casedb/app_setup.py
13
+ gen_epix/casedb/env.py
14
+ gen_epix/casedb/api/abac.py
15
+ gen_epix/casedb/api/auth.py
16
+ gen_epix/casedb/api/base.py
17
+ gen_epix/casedb/api/case.py
18
+ gen_epix/casedb/api/geo.py
19
+ gen_epix/casedb/api/model.py
20
+ gen_epix/casedb/api/ontology.py
21
+ gen_epix/casedb/api/organization.py
22
+ gen_epix/casedb/api/rbac.py
23
+ gen_epix/casedb/api/router.py
24
+ gen_epix/casedb/api/system.py
25
+ gen_epix/casedb/config/__init__.py
26
+ gen_epix/casedb/config/logging.debug.yaml
27
+ gen_epix/casedb/config/logging.yaml
28
+ gen_epix/casedb/config/secrets.default.toml
29
+ gen_epix/casedb/config/settings.toml
30
+ gen_epix/casedb/config/.secret/automaticnewuser
31
+ gen_epix/casedb/config/.secret/db
32
+ gen_epix/casedb/config/.secret/log
33
+ gen_epix/casedb/config/.secret/repository-sasql-defaults
34
+ gen_epix/casedb/config/.secret/root-organization
35
+ gen_epix/casedb/config/.secret/root-user
36
+ gen_epix/casedb/config/idp/identity_providers.json
37
+ gen_epix/casedb/config/idp/mock_identity_provider.json
38
+ gen_epix/casedb/config/idp/no_identity_providers.json
39
+ gen_epix/casedb/domain/__init__.py
40
+ gen_epix/casedb/domain/enum.py
41
+ gen_epix/casedb/domain/exc.py
42
+ gen_epix/casedb/domain/command/__init__.py
43
+ gen_epix/casedb/domain/command/base.py
44
+ gen_epix/casedb/domain/command/crud.py
45
+ gen_epix/casedb/domain/command/non_crud.py
46
+ gen_epix/casedb/domain/command/role.py
47
+ gen_epix/casedb/domain/model/__init__.py
48
+ gen_epix/casedb/domain/model/base.py
49
+ gen_epix/casedb/domain/model/geo.py
50
+ gen_epix/casedb/domain/model/ontology.py
51
+ gen_epix/casedb/domain/model/organization.py
52
+ gen_epix/casedb/domain/model/seqdb.py
53
+ gen_epix/casedb/domain/model/subject.py
54
+ gen_epix/casedb/domain/model/system.py
55
+ gen_epix/casedb/domain/model/abac/__init__.py
56
+ gen_epix/casedb/domain/model/abac/abac.py
57
+ gen_epix/casedb/domain/model/abac/case_abac.py
58
+ gen_epix/casedb/domain/model/case/__init__.py
59
+ gen_epix/casedb/domain/model/case/case.py
60
+ gen_epix/casedb/domain/model/case/complete_case_type.py
61
+ gen_epix/casedb/domain/policy/__init__.py
62
+ gen_epix/casedb/domain/policy/abac.py
63
+ gen_epix/casedb/domain/policy/rbac.py
64
+ gen_epix/casedb/domain/policy/system.py
65
+ gen_epix/casedb/domain/repository/__init__.py
66
+ gen_epix/casedb/domain/repository/abac.py
67
+ gen_epix/casedb/domain/repository/case.py
68
+ gen_epix/casedb/domain/repository/geo.py
69
+ gen_epix/casedb/domain/repository/ontology.py
70
+ gen_epix/casedb/domain/repository/organization.py
71
+ gen_epix/casedb/domain/repository/subject.py
72
+ gen_epix/casedb/domain/repository/system.py
73
+ gen_epix/casedb/domain/service/__init__.py
74
+ gen_epix/casedb/domain/service/abac.py
75
+ gen_epix/casedb/domain/service/case.py
76
+ gen_epix/casedb/domain/service/geo.py
77
+ gen_epix/casedb/domain/service/ontology.py
78
+ gen_epix/casedb/domain/service/organization.py
79
+ gen_epix/casedb/domain/service/rbac.py
80
+ gen_epix/casedb/domain/service/seqdb.py
81
+ gen_epix/casedb/domain/service/subject.py
82
+ gen_epix/casedb/domain/service/system.py
83
+ gen_epix/casedb/policies/case_abac_policy.py
84
+ gen_epix/casedb/policies/has_system_outage_policy.py
85
+ gen_epix/casedb/policies/is_organization_admin_policy.py
86
+ gen_epix/casedb/policies/read_organization_results_only_policy.py
87
+ gen_epix/casedb/policies/read_self_results_only_policy.py
88
+ gen_epix/casedb/policies/update_user_policy.py
89
+ gen_epix/casedb/repositories/__init__.py
90
+ gen_epix/casedb/repositories/abac_dict.py
91
+ gen_epix/casedb/repositories/abac_sa.py
92
+ gen_epix/casedb/repositories/case_dict.py
93
+ gen_epix/casedb/repositories/case_sa.py
94
+ gen_epix/casedb/repositories/geo_dict.py
95
+ gen_epix/casedb/repositories/geo_sa.py
96
+ gen_epix/casedb/repositories/ontology_dict.py
97
+ gen_epix/casedb/repositories/ontology_sa.py
98
+ gen_epix/casedb/repositories/organization_dict.py
99
+ gen_epix/casedb/repositories/organization_sa.py
100
+ gen_epix/casedb/repositories/subject_dict.py
101
+ gen_epix/casedb/repositories/subject_sa.py
102
+ gen_epix/casedb/repositories/system_dict.py
103
+ gen_epix/casedb/repositories/system_sa.py
104
+ gen_epix/casedb/repositories/sa_model/__init__.py
105
+ gen_epix/casedb/repositories/sa_model/abac.py
106
+ gen_epix/casedb/repositories/sa_model/base.py
107
+ gen_epix/casedb/repositories/sa_model/case.py
108
+ gen_epix/casedb/repositories/sa_model/geo.py
109
+ gen_epix/casedb/repositories/sa_model/ontology.py
110
+ gen_epix/casedb/repositories/sa_model/organization.py
111
+ gen_epix/casedb/repositories/sa_model/subject.py
112
+ gen_epix/casedb/repositories/sa_model/system.py
113
+ gen_epix/casedb/repositories/sa_model/util.py
114
+ gen_epix/casedb/services/__init__.py
115
+ gen_epix/casedb/services/abac.py
116
+ gen_epix/casedb/services/case.py
117
+ gen_epix/casedb/services/geo.py
118
+ gen_epix/casedb/services/ontology.py
119
+ gen_epix/casedb/services/organization.py
120
+ gen_epix/casedb/services/rbac.py
121
+ gen_epix/casedb/services/seqdb.py
122
+ gen_epix/casedb/services/subject.py
123
+ gen_epix/casedb/services/system.py
124
+ gen_epix/casedb/services/user_manager.py
125
+ gen_epix/common/api/exc.py
126
+ gen_epix/fastapp/__init__.py
127
+ gen_epix/fastapp/app.py
128
+ gen_epix/fastapp/enum.py
129
+ gen_epix/fastapp/exc.py
130
+ gen_epix/fastapp/log.py
131
+ gen_epix/fastapp/model.py
132
+ gen_epix/fastapp/pdp.py
133
+ gen_epix/fastapp/repository.py
134
+ gen_epix/fastapp/service.py
135
+ gen_epix/fastapp/unit_of_work.py
136
+ gen_epix/fastapp/user_manager.py
137
+ gen_epix/fastapp/util.py
138
+ gen_epix/fastapp/api/__init__.py
139
+ gen_epix/fastapp/api/crud_endpoint_generator.py
140
+ gen_epix/fastapp/api/crud_endpoint_set.py
141
+ gen_epix/fastapp/api/exc.py
142
+ gen_epix/fastapp/api/openapi.py
143
+ gen_epix/fastapp/domain/__init__.py
144
+ gen_epix/fastapp/domain/domain.py
145
+ gen_epix/fastapp/domain/entity.py
146
+ gen_epix/fastapp/domain/key.py
147
+ gen_epix/fastapp/domain/link.py
148
+ gen_epix/fastapp/domain/util.py
149
+ gen_epix/fastapp/middleware/__init__.py
150
+ gen_epix/fastapp/middleware/handle_auth_exception.py
151
+ gen_epix/fastapp/middleware/handle_no_response.py
152
+ gen_epix/fastapp/middleware/limiter.py
153
+ gen_epix/fastapp/middleware/update_response_header.py
154
+ gen_epix/fastapp/repositories/__init__.py
155
+ gen_epix/fastapp/repositories/dict/__init__.py
156
+ gen_epix/fastapp/repositories/dict/repository.py
157
+ gen_epix/fastapp/repositories/dict/unit_of_work.py
158
+ gen_epix/fastapp/repositories/sa/__init__.py
159
+ gen_epix/fastapp/repositories/sa/engine_factory.py
160
+ gen_epix/fastapp/repositories/sa/mapper.py
161
+ gen_epix/fastapp/repositories/sa/repository.py
162
+ gen_epix/fastapp/repositories/sa/unit_of_work.py
163
+ gen_epix/fastapp/repositories/sa/util.py
164
+ gen_epix/fastapp/services/__init__.py
165
+ gen_epix/fastapp/services/auth/__init__.py
166
+ gen_epix/fastapp/services/auth/base.py
167
+ gen_epix/fastapp/services/auth/command.py
168
+ gen_epix/fastapp/services/auth/idp_client.py
169
+ gen_epix/fastapp/services/auth/literal.py
170
+ gen_epix/fastapp/services/auth/mock_idp_client.py
171
+ gen_epix/fastapp/services/auth/model.py
172
+ gen_epix/fastapp/services/auth/oidc_client.py
173
+ gen_epix/fastapp/services/auth/service.py
174
+ gen_epix/fastapp/services/auth/util.py
175
+ gen_epix/fastapp/services/rbac/__init__.py
176
+ gen_epix/fastapp/services/rbac/policy.py
177
+ gen_epix/fastapp/services/rbac/service.py
178
+ gen_epix/fastapp/services/remote/__init__.py
179
+ gen_epix/fastapp/services/remote/service.py
180
+ gen_epix/filter/__init__.py
181
+ gen_epix/filter/base.py
182
+ gen_epix/filter/composite.py
183
+ gen_epix/filter/date_range.py
184
+ gen_epix/filter/datetime_range.py
185
+ gen_epix/filter/enum.py
186
+ gen_epix/filter/equals.py
187
+ gen_epix/filter/equals_boolean.py
188
+ gen_epix/filter/equals_number.py
189
+ gen_epix/filter/equals_string.py
190
+ gen_epix/filter/equals_uuid.py
191
+ gen_epix/filter/exists.py
192
+ gen_epix/filter/hashable_set.py
193
+ gen_epix/filter/no_filter.py
194
+ gen_epix/filter/number_range.py
195
+ gen_epix/filter/number_set.py
196
+ gen_epix/filter/partial_date_range.py
197
+ gen_epix/filter/range.py
198
+ gen_epix/filter/regex.py
199
+ gen_epix/filter/string_set.py
200
+ gen_epix/filter/uuid_set.py
201
+ gen_epix/omopdb/__init__.py
202
+ gen_epix/omopdb/app.py
203
+ gen_epix/omopdb/app_setup.py
204
+ gen_epix/omopdb/enum.py
205
+ gen_epix/omopdb/env.py
206
+ gen_epix/omopdb/api/auth.py
207
+ gen_epix/omopdb/api/base.py
208
+ gen_epix/omopdb/api/omop.py
209
+ gen_epix/omopdb/api/organization.py
210
+ gen_epix/omopdb/api/rbac.py
211
+ gen_epix/omopdb/api/router.py
212
+ gen_epix/omopdb/api/system.py
213
+ gen_epix/omopdb/config/__init__.py
214
+ gen_epix/omopdb/config/logging.debug.yaml
215
+ gen_epix/omopdb/config/logging.yaml
216
+ gen_epix/omopdb/config/secrets.default.toml
217
+ gen_epix/omopdb/config/settings.toml
218
+ gen_epix/omopdb/config/.secret/automaticnewuser
219
+ gen_epix/omopdb/config/.secret/db
220
+ gen_epix/omopdb/config/.secret/log
221
+ gen_epix/omopdb/config/.secret/repository-sasql-defaults
222
+ gen_epix/omopdb/config/.secret/root-user
223
+ gen_epix/omopdb/config/idp/identity_providers.json
224
+ gen_epix/omopdb/config/idp/mock_identity_provider.json
225
+ gen_epix/omopdb/config/idp/no_identity_providers.json
226
+ gen_epix/omopdb/domain/__init__.py
227
+ gen_epix/omopdb/domain/enum.py
228
+ gen_epix/omopdb/domain/exc.py
229
+ gen_epix/omopdb/domain/command/__init__.py
230
+ gen_epix/omopdb/domain/command/base.py
231
+ gen_epix/omopdb/domain/command/crud.py
232
+ gen_epix/omopdb/domain/command/non_crud.py
233
+ gen_epix/omopdb/domain/command/role.py
234
+ gen_epix/omopdb/domain/model/__init__.py
235
+ gen_epix/omopdb/domain/model/base.py
236
+ gen_epix/omopdb/domain/model/omop.py
237
+ gen_epix/omopdb/domain/model/organization.py
238
+ gen_epix/omopdb/domain/model/system.py
239
+ gen_epix/omopdb/domain/policy/__init__.py
240
+ gen_epix/omopdb/domain/policy/organization.py
241
+ gen_epix/omopdb/domain/policy/system.py
242
+ gen_epix/omopdb/domain/repository/__init__.py
243
+ gen_epix/omopdb/domain/repository/omop.py
244
+ gen_epix/omopdb/domain/repository/organization.py
245
+ gen_epix/omopdb/domain/repository/system.py
246
+ gen_epix/omopdb/domain/service/__init__.py
247
+ gen_epix/omopdb/domain/service/omop.py
248
+ gen_epix/omopdb/domain/service/organization.py
249
+ gen_epix/omopdb/domain/service/rbac.py
250
+ gen_epix/omopdb/domain/service/system.py
251
+ gen_epix/omopdb/policies/has_system_outage_policy.py
252
+ gen_epix/omopdb/policies/update_user_policy.py
253
+ gen_epix/omopdb/repositories/__init__.py
254
+ gen_epix/omopdb/repositories/omop_dict.py
255
+ gen_epix/omopdb/repositories/omop_sa.py
256
+ gen_epix/omopdb/repositories/organization_dict.py
257
+ gen_epix/omopdb/repositories/organization_sa.py
258
+ gen_epix/omopdb/repositories/system_dict.py
259
+ gen_epix/omopdb/repositories/system_sa.py
260
+ gen_epix/omopdb/repositories/sa_model/__init__.py
261
+ gen_epix/omopdb/repositories/sa_model/base.py
262
+ gen_epix/omopdb/repositories/sa_model/omop.py
263
+ gen_epix/omopdb/repositories/sa_model/organization.py
264
+ gen_epix/omopdb/repositories/sa_model/system.py
265
+ gen_epix/omopdb/repositories/sa_model/util.py
266
+ gen_epix/omopdb/services/__init__.py
267
+ gen_epix/omopdb/services/model_anonymizer.py
268
+ gen_epix/omopdb/services/omop.py
269
+ gen_epix/omopdb/services/organization.py
270
+ gen_epix/omopdb/services/rbac.py
271
+ gen_epix/omopdb/services/system.py
272
+ gen_epix/omopdb/services/user_manager.py
273
+ gen_epix/omopdb/test/unit/anonymizer/test_anonymizer.py
274
+ gen_epix/seqdb/__init__.py
275
+ gen_epix/seqdb/app.py
276
+ gen_epix/seqdb/app_setup.py
277
+ gen_epix/seqdb/env.py
278
+ gen_epix/seqdb/api/__init__.py
279
+ gen_epix/seqdb/api/auth.py
280
+ gen_epix/seqdb/api/base.py
281
+ gen_epix/seqdb/api/organization.py
282
+ gen_epix/seqdb/api/rbac.py
283
+ gen_epix/seqdb/api/router.py
284
+ gen_epix/seqdb/api/seq.py
285
+ gen_epix/seqdb/api/system.py
286
+ gen_epix/seqdb/config/__init__.py
287
+ gen_epix/seqdb/config/logging.debug.yaml
288
+ gen_epix/seqdb/config/logging.yaml
289
+ gen_epix/seqdb/config/secrets.default.toml
290
+ gen_epix/seqdb/config/settings.toml
291
+ gen_epix/seqdb/config/.secret/automaticnewuser
292
+ gen_epix/seqdb/config/.secret/db
293
+ gen_epix/seqdb/config/.secret/log
294
+ gen_epix/seqdb/config/.secret/repository-sasql-defaults
295
+ gen_epix/seqdb/config/.secret/root-user
296
+ gen_epix/seqdb/config/idp/identity_providers.json
297
+ gen_epix/seqdb/config/idp/mock_identity_provider.json
298
+ gen_epix/seqdb/config/idp/no_identity_providers.json
299
+ gen_epix/seqdb/domain/__init__.py
300
+ gen_epix/seqdb/domain/enum.py
301
+ gen_epix/seqdb/domain/exc.py
302
+ gen_epix/seqdb/domain/command/__init__.py
303
+ gen_epix/seqdb/domain/command/base.py
304
+ gen_epix/seqdb/domain/command/crud.py
305
+ gen_epix/seqdb/domain/command/non_crud.py
306
+ gen_epix/seqdb/domain/command/role.py
307
+ gen_epix/seqdb/domain/model/__init__.py
308
+ gen_epix/seqdb/domain/model/base.py
309
+ gen_epix/seqdb/domain/model/organization.py
310
+ gen_epix/seqdb/domain/model/system.py
311
+ gen_epix/seqdb/domain/model/seq/__init__.py
312
+ gen_epix/seqdb/domain/model/seq/metadata.py
313
+ gen_epix/seqdb/domain/model/seq/non_persistable.py
314
+ gen_epix/seqdb/domain/model/seq/persistable.py
315
+ gen_epix/seqdb/domain/policy/__init__.py
316
+ gen_epix/seqdb/domain/policy/organization.py
317
+ gen_epix/seqdb/domain/policy/system.py
318
+ gen_epix/seqdb/domain/repository/__init__.py
319
+ gen_epix/seqdb/domain/repository/organization.py
320
+ gen_epix/seqdb/domain/repository/seq.py
321
+ gen_epix/seqdb/domain/repository/system.py
322
+ gen_epix/seqdb/domain/service/__init__.py
323
+ gen_epix/seqdb/domain/service/abac.py
324
+ gen_epix/seqdb/domain/service/organization.py
325
+ gen_epix/seqdb/domain/service/rbac.py
326
+ gen_epix/seqdb/domain/service/seq.py
327
+ gen_epix/seqdb/domain/service/system.py
328
+ gen_epix/seqdb/policies/has_system_outage_policy.py
329
+ gen_epix/seqdb/policies/update_user_policy.py
330
+ gen_epix/seqdb/repositories/__init__.py
331
+ gen_epix/seqdb/repositories/organization_dict.py
332
+ gen_epix/seqdb/repositories/organization_sa.py
333
+ gen_epix/seqdb/repositories/seq_dict.py
334
+ gen_epix/seqdb/repositories/seq_sa.py
335
+ gen_epix/seqdb/repositories/system_dict.py
336
+ gen_epix/seqdb/repositories/system_sa.py
337
+ gen_epix/seqdb/repositories/sa_model/__init__.py
338
+ gen_epix/seqdb/repositories/sa_model/base.py
339
+ gen_epix/seqdb/repositories/sa_model/organization.py
340
+ gen_epix/seqdb/repositories/sa_model/seq.py
341
+ gen_epix/seqdb/repositories/sa_model/system.py
342
+ gen_epix/seqdb/repositories/sa_model/util.py
343
+ gen_epix/seqdb/services/__init__.py
344
+ gen_epix/seqdb/services/abac.py
345
+ gen_epix/seqdb/services/organization.py
346
+ gen_epix/seqdb/services/rbac.py
347
+ gen_epix/seqdb/services/seq.py
348
+ gen_epix/seqdb/services/system.py
349
+ gen_epix/seqdb/services/user_manager.py
@@ -0,0 +1,35 @@
1
+ fastapi[standard]==0.115.5
2
+ uvicorn==0.32.1
3
+ gunicorn==21.2.*
4
+ starlette==0.41.3
5
+ httpx==0.27.2
6
+ python-jose==3.3.0
7
+ sqlalchemy==2.0.36
8
+ sqlalchemy_utils==0.41.2
9
+ sqlmodel==0.0.22
10
+ pydantic==2.7.*
11
+ pandas==2.2.3
12
+ ulid-py==1.1.0
13
+ fire==0.7.0
14
+ dynaconf==3.2.6
15
+ scipy==1.14.1
16
+ numpy==2.1.3
17
+ biopython==1.84
18
+ cachetools==5.5.0
19
+ slowapi==0.1.9
20
+
21
+ [dependencies]
22
+ pytest
23
+ pytest-cov
24
+ pytest-mock
25
+ pytest-dependency
26
+ pyinstrument
27
+ isort
28
+ black
29
+ pylint
30
+ mypy
31
+ cryptography
32
+ pandas-stubs
33
+ types-openpyxl
34
+ types-cachetools
35
+ types-python-jose
@@ -0,0 +1 @@
1
+ gen_epix