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.
- gen_epix-0.0.1/Gen_EpiX.egg-info/PKG-INFO +214 -0
- gen_epix-0.0.1/Gen_EpiX.egg-info/SOURCES.txt +349 -0
- gen_epix-0.0.1/Gen_EpiX.egg-info/dependency_links.txt +1 -0
- gen_epix-0.0.1/Gen_EpiX.egg-info/requires.txt +35 -0
- gen_epix-0.0.1/Gen_EpiX.egg-info/top_level.txt +1 -0
- gen_epix-0.0.1/LICENSE +287 -0
- gen_epix-0.0.1/PKG-INFO +214 -0
- gen_epix-0.0.1/README.md +160 -0
- gen_epix-0.0.1/gen_epix/__init__.py +1 -0
- gen_epix-0.0.1/gen_epix/casedb/__init__.py +0 -0
- gen_epix-0.0.1/gen_epix/casedb/api/abac.py +30 -0
- gen_epix-0.0.1/gen_epix/casedb/api/auth.py +93 -0
- gen_epix-0.0.1/gen_epix/casedb/api/base.py +19 -0
- gen_epix-0.0.1/gen_epix/casedb/api/case.py +402 -0
- gen_epix-0.0.1/gen_epix/casedb/api/geo.py +30 -0
- gen_epix-0.0.1/gen_epix/casedb/api/model.py +109 -0
- gen_epix-0.0.1/gen_epix/casedb/api/ontology.py +85 -0
- gen_epix-0.0.1/gen_epix/casedb/api/organization.py +166 -0
- gen_epix-0.0.1/gen_epix/casedb/api/rbac.py +32 -0
- gen_epix-0.0.1/gen_epix/casedb/api/router.py +75 -0
- gen_epix-0.0.1/gen_epix/casedb/api/system.py +110 -0
- gen_epix-0.0.1/gen_epix/casedb/app.py +50 -0
- gen_epix-0.0.1/gen_epix/casedb/app_setup.py +129 -0
- gen_epix-0.0.1/gen_epix/casedb/config/.secret/automaticnewuser +9 -0
- gen_epix-0.0.1/gen_epix/casedb/config/.secret/db +3 -0
- gen_epix-0.0.1/gen_epix/casedb/config/.secret/log +3 -0
- gen_epix-0.0.1/gen_epix/casedb/config/.secret/repository-sasql-defaults +8 -0
- gen_epix-0.0.1/gen_epix/casedb/config/.secret/root-organization +5 -0
- gen_epix-0.0.1/gen_epix/casedb/config/.secret/root-user +7 -0
- gen_epix-0.0.1/gen_epix/casedb/config/__init__.py +1 -0
- gen_epix-0.0.1/gen_epix/casedb/config/idp/identity_providers.json +29 -0
- gen_epix-0.0.1/gen_epix/casedb/config/idp/mock_identity_provider.json +11 -0
- gen_epix-0.0.1/gen_epix/casedb/config/idp/no_identity_providers.json +2 -0
- gen_epix-0.0.1/gen_epix/casedb/config/logging.debug.yaml +44 -0
- gen_epix-0.0.1/gen_epix/casedb/config/logging.yaml +35 -0
- gen_epix-0.0.1/gen_epix/casedb/config/secrets.default.toml +102 -0
- gen_epix-0.0.1/gen_epix/casedb/config/settings.toml +50 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/__init__.py +3 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/command/__init__.py +3 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/command/base.py +44 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/command/crud.py +221 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/command/non_crud.py +323 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/command/role.py +197 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/enum.py +314 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/exc.py +5 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/model/__init__.py +14 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/model/abac/__init__.py +0 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/model/abac/abac.py +323 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/model/abac/case_abac.py +689 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/model/base.py +12 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/model/case/__init__.py +0 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/model/case/case.py +894 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/model/case/complete_case_type.py +67 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/model/geo.py +121 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/model/ontology.py +177 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/model/organization.py +418 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/model/seqdb.py +94 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/model/subject.py +75 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/model/system.py +57 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/policy/__init__.py +3 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/policy/abac.py +49 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/policy/rbac.py +18 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/policy/system.py +22 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/repository/__init__.py +20 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/repository/abac.py +10 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/repository/case.py +10 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/repository/geo.py +10 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/repository/ontology.py +10 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/repository/organization.py +22 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/repository/subject.py +10 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/repository/system.py +10 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/service/__init__.py +47 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/service/abac.py +128 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/service/case.py +141 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/service/geo.py +29 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/service/ontology.py +24 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/service/organization.py +68 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/service/rbac.py +25 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/service/seqdb.py +42 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/service/subject.py +19 -0
- gen_epix-0.0.1/gen_epix/casedb/domain/service/system.py +33 -0
- gen_epix-0.0.1/gen_epix/casedb/env.py +309 -0
- gen_epix-0.0.1/gen_epix/casedb/policies/case_abac_policy.py +13 -0
- gen_epix-0.0.1/gen_epix/casedb/policies/has_system_outage_policy.py +53 -0
- gen_epix-0.0.1/gen_epix/casedb/policies/is_organization_admin_policy.py +70 -0
- gen_epix-0.0.1/gen_epix/casedb/policies/read_organization_results_only_policy.py +86 -0
- gen_epix-0.0.1/gen_epix/casedb/policies/read_self_results_only_policy.py +49 -0
- gen_epix-0.0.1/gen_epix/casedb/policies/update_user_policy.py +71 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/__init__.py +35 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/abac_dict.py +6 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/abac_sa.py +22 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/case_dict.py +6 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/case_sa.py +22 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/geo_dict.py +6 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/geo_sa.py +22 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/ontology_dict.py +6 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/ontology_sa.py +22 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/organization_dict.py +25 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/organization_sa.py +51 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/__init__.py +12 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/abac.py +173 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/base.py +46 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/case.py +352 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/geo.py +77 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/ontology.py +86 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/organization.py +184 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/subject.py +43 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/system.py +34 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/sa_model/util.py +88 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/subject_dict.py +6 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/subject_sa.py +22 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/system_dict.py +6 -0
- gen_epix-0.0.1/gen_epix/casedb/repositories/system_sa.py +22 -0
- gen_epix-0.0.1/gen_epix/casedb/services/__init__.py +13 -0
- gen_epix-0.0.1/gen_epix/casedb/services/abac.py +701 -0
- gen_epix-0.0.1/gen_epix/casedb/services/case.py +2497 -0
- gen_epix-0.0.1/gen_epix/casedb/services/geo.py +9 -0
- gen_epix-0.0.1/gen_epix/casedb/services/ontology.py +5 -0
- gen_epix-0.0.1/gen_epix/casedb/services/organization.py +371 -0
- gen_epix-0.0.1/gen_epix/casedb/services/rbac.py +68 -0
- gen_epix-0.0.1/gen_epix/casedb/services/seqdb.py +72 -0
- gen_epix-0.0.1/gen_epix/casedb/services/subject.py +5 -0
- gen_epix-0.0.1/gen_epix/casedb/services/system.py +29 -0
- gen_epix-0.0.1/gen_epix/casedb/services/user_manager.py +321 -0
- gen_epix-0.0.1/gen_epix/common/api/exc.py +131 -0
- gen_epix-0.0.1/gen_epix/fastapp/__init__.py +34 -0
- gen_epix-0.0.1/gen_epix/fastapp/api/__init__.py +5 -0
- gen_epix-0.0.1/gen_epix/fastapp/api/crud_endpoint_generator.py +968 -0
- gen_epix-0.0.1/gen_epix/fastapp/api/crud_endpoint_set.py +41 -0
- gen_epix-0.0.1/gen_epix/fastapp/api/exc.py +148 -0
- gen_epix-0.0.1/gen_epix/fastapp/api/openapi.py +115 -0
- gen_epix-0.0.1/gen_epix/fastapp/app.py +458 -0
- gen_epix-0.0.1/gen_epix/fastapp/domain/__init__.py +7 -0
- gen_epix-0.0.1/gen_epix/fastapp/domain/domain.py +810 -0
- gen_epix-0.0.1/gen_epix/fastapp/domain/entity.py +680 -0
- gen_epix-0.0.1/gen_epix/fastapp/domain/key.py +47 -0
- gen_epix-0.0.1/gen_epix/fastapp/domain/link.py +41 -0
- gen_epix-0.0.1/gen_epix/fastapp/domain/util.py +30 -0
- gen_epix-0.0.1/gen_epix/fastapp/enum.py +356 -0
- gen_epix-0.0.1/gen_epix/fastapp/exc.py +185 -0
- gen_epix-0.0.1/gen_epix/fastapp/log.py +50 -0
- gen_epix-0.0.1/gen_epix/fastapp/middleware/__init__.py +11 -0
- gen_epix-0.0.1/gen_epix/fastapp/middleware/handle_auth_exception.py +43 -0
- gen_epix-0.0.1/gen_epix/fastapp/middleware/handle_no_response.py +39 -0
- gen_epix-0.0.1/gen_epix/fastapp/middleware/limiter.py +15 -0
- gen_epix-0.0.1/gen_epix/fastapp/middleware/update_response_header.py +38 -0
- gen_epix-0.0.1/gen_epix/fastapp/model.py +310 -0
- gen_epix-0.0.1/gen_epix/fastapp/pdp.py +112 -0
- gen_epix-0.0.1/gen_epix/fastapp/repositories/__init__.py +13 -0
- gen_epix-0.0.1/gen_epix/fastapp/repositories/dict/__init__.py +7 -0
- gen_epix-0.0.1/gen_epix/fastapp/repositories/dict/repository.py +703 -0
- gen_epix-0.0.1/gen_epix/fastapp/repositories/dict/unit_of_work.py +9 -0
- gen_epix-0.0.1/gen_epix/fastapp/repositories/sa/__init__.py +13 -0
- gen_epix-0.0.1/gen_epix/fastapp/repositories/sa/engine_factory.py +55 -0
- gen_epix-0.0.1/gen_epix/fastapp/repositories/sa/mapper.py +387 -0
- gen_epix-0.0.1/gen_epix/fastapp/repositories/sa/repository.py +1048 -0
- gen_epix-0.0.1/gen_epix/fastapp/repositories/sa/unit_of_work.py +119 -0
- gen_epix-0.0.1/gen_epix/fastapp/repositories/sa/util.py +79 -0
- gen_epix-0.0.1/gen_epix/fastapp/repository.py +363 -0
- gen_epix-0.0.1/gen_epix/fastapp/service.py +537 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/__init__.py +0 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/auth/__init__.py +19 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/auth/base.py +19 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/auth/command.py +5 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/auth/idp_client.py +32 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/auth/literal.py +5 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/auth/mock_idp_client.py +81 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/auth/model.py +57 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/auth/oidc_client.py +363 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/auth/service.py +537 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/auth/util.py +96 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/rbac/__init__.py +2 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/rbac/policy.py +66 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/rbac/service.py +426 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/remote/__init__.py +3 -0
- gen_epix-0.0.1/gen_epix/fastapp/services/remote/service.py +33 -0
- gen_epix-0.0.1/gen_epix/fastapp/unit_of_work.py +40 -0
- gen_epix-0.0.1/gen_epix/fastapp/user_manager.py +80 -0
- gen_epix-0.0.1/gen_epix/fastapp/util.py +5 -0
- gen_epix-0.0.1/gen_epix/filter/__init__.py +60 -0
- gen_epix-0.0.1/gen_epix/filter/base.py +270 -0
- gen_epix-0.0.1/gen_epix/filter/composite.py +400 -0
- gen_epix-0.0.1/gen_epix/filter/date_range.py +20 -0
- gen_epix-0.0.1/gen_epix/filter/datetime_range.py +20 -0
- gen_epix-0.0.1/gen_epix/filter/enum.py +43 -0
- gen_epix-0.0.1/gen_epix/filter/equals.py +16 -0
- gen_epix-0.0.1/gen_epix/filter/equals_boolean.py +14 -0
- gen_epix-0.0.1/gen_epix/filter/equals_number.py +17 -0
- gen_epix-0.0.1/gen_epix/filter/equals_string.py +14 -0
- gen_epix-0.0.1/gen_epix/filter/equals_uuid.py +15 -0
- gen_epix-0.0.1/gen_epix/filter/exists.py +68 -0
- gen_epix-0.0.1/gen_epix/filter/hashable_set.py +19 -0
- gen_epix-0.0.1/gen_epix/filter/no_filter.py +67 -0
- gen_epix-0.0.1/gen_epix/filter/number_range.py +22 -0
- gen_epix-0.0.1/gen_epix/filter/number_set.py +17 -0
- gen_epix-0.0.1/gen_epix/filter/partial_date_range.py +173 -0
- gen_epix-0.0.1/gen_epix/filter/range.py +113 -0
- gen_epix-0.0.1/gen_epix/filter/regex.py +26 -0
- gen_epix-0.0.1/gen_epix/filter/string_set.py +38 -0
- gen_epix-0.0.1/gen_epix/filter/uuid_set.py +26 -0
- gen_epix-0.0.1/gen_epix/omopdb/__init__.py +0 -0
- gen_epix-0.0.1/gen_epix/omopdb/api/auth.py +93 -0
- gen_epix-0.0.1/gen_epix/omopdb/api/base.py +7 -0
- gen_epix-0.0.1/gen_epix/omopdb/api/omop.py +32 -0
- gen_epix-0.0.1/gen_epix/omopdb/api/organization.py +80 -0
- gen_epix-0.0.1/gen_epix/omopdb/api/rbac.py +32 -0
- gen_epix-0.0.1/gen_epix/omopdb/api/router.py +58 -0
- gen_epix-0.0.1/gen_epix/omopdb/api/system.py +110 -0
- gen_epix-0.0.1/gen_epix/omopdb/app.py +50 -0
- gen_epix-0.0.1/gen_epix/omopdb/app_setup.py +129 -0
- gen_epix-0.0.1/gen_epix/omopdb/config/.secret/automaticnewuser +8 -0
- gen_epix-0.0.1/gen_epix/omopdb/config/.secret/db +3 -0
- gen_epix-0.0.1/gen_epix/omopdb/config/.secret/log +3 -0
- gen_epix-0.0.1/gen_epix/omopdb/config/.secret/repository-sasql-defaults +8 -0
- gen_epix-0.0.1/gen_epix/omopdb/config/.secret/root-user +10 -0
- gen_epix-0.0.1/gen_epix/omopdb/config/__init__.py +1 -0
- gen_epix-0.0.1/gen_epix/omopdb/config/idp/identity_providers.json +29 -0
- gen_epix-0.0.1/gen_epix/omopdb/config/idp/mock_identity_provider.json +11 -0
- gen_epix-0.0.1/gen_epix/omopdb/config/idp/no_identity_providers.json +2 -0
- gen_epix-0.0.1/gen_epix/omopdb/config/logging.debug.yaml +44 -0
- gen_epix-0.0.1/gen_epix/omopdb/config/logging.yaml +35 -0
- gen_epix-0.0.1/gen_epix/omopdb/config/secrets.default.toml +66 -0
- gen_epix-0.0.1/gen_epix/omopdb/config/settings.toml +50 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/__init__.py +3 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/command/__init__.py +3 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/command/base.py +38 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/command/crud.py +217 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/command/non_crud.py +50 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/command/role.py +52 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/enum.py +66 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/exc.py +5 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/model/__init__.py +8 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/model/base.py +12 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/model/omop.py +2449 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/model/organization.py +228 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/model/system.py +58 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/policy/__init__.py +1 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/policy/organization.py +15 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/policy/system.py +21 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/repository/__init__.py +10 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/repository/omop.py +10 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/repository/organization.py +17 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/repository/system.py +10 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/service/__init__.py +28 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/service/omop.py +19 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/service/organization.py +69 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/service/rbac.py +24 -0
- gen_epix-0.0.1/gen_epix/omopdb/domain/service/system.py +33 -0
- gen_epix-0.0.1/gen_epix/omopdb/enum.py +18 -0
- gen_epix-0.0.1/gen_epix/omopdb/env.py +254 -0
- gen_epix-0.0.1/gen_epix/omopdb/policies/has_system_outage_policy.py +55 -0
- gen_epix-0.0.1/gen_epix/omopdb/policies/update_user_policy.py +52 -0
- gen_epix-0.0.1/gen_epix/omopdb/repositories/__init__.py +16 -0
- gen_epix-0.0.1/gen_epix/omopdb/repositories/omop_dict.py +6 -0
- gen_epix-0.0.1/gen_epix/omopdb/repositories/omop_sa.py +22 -0
- gen_epix-0.0.1/gen_epix/omopdb/repositories/organization_dict.py +25 -0
- gen_epix-0.0.1/gen_epix/omopdb/repositories/organization_sa.py +51 -0
- gen_epix-0.0.1/gen_epix/omopdb/repositories/sa_model/__init__.py +14 -0
- gen_epix-0.0.1/gen_epix/omopdb/repositories/sa_model/base.py +46 -0
- gen_epix-0.0.1/gen_epix/omopdb/repositories/sa_model/omop.py +1556 -0
- gen_epix-0.0.1/gen_epix/omopdb/repositories/sa_model/organization.py +83 -0
- gen_epix-0.0.1/gen_epix/omopdb/repositories/sa_model/system.py +34 -0
- gen_epix-0.0.1/gen_epix/omopdb/repositories/sa_model/util.py +113 -0
- gen_epix-0.0.1/gen_epix/omopdb/repositories/system_dict.py +6 -0
- gen_epix-0.0.1/gen_epix/omopdb/repositories/system_sa.py +22 -0
- gen_epix-0.0.1/gen_epix/omopdb/services/__init__.py +7 -0
- gen_epix-0.0.1/gen_epix/omopdb/services/model_anonymizer.py +541 -0
- gen_epix-0.0.1/gen_epix/omopdb/services/omop.py +5 -0
- gen_epix-0.0.1/gen_epix/omopdb/services/organization.py +228 -0
- gen_epix-0.0.1/gen_epix/omopdb/services/rbac.py +51 -0
- gen_epix-0.0.1/gen_epix/omopdb/services/system.py +29 -0
- gen_epix-0.0.1/gen_epix/omopdb/services/user_manager.py +245 -0
- gen_epix-0.0.1/gen_epix/omopdb/test/unit/anonymizer/test_anonymizer.py +38 -0
- gen_epix-0.0.1/gen_epix/seqdb/__init__.py +0 -0
- gen_epix-0.0.1/gen_epix/seqdb/api/__init__.py +0 -0
- gen_epix-0.0.1/gen_epix/seqdb/api/auth.py +93 -0
- gen_epix-0.0.1/gen_epix/seqdb/api/base.py +7 -0
- gen_epix-0.0.1/gen_epix/seqdb/api/organization.py +80 -0
- gen_epix-0.0.1/gen_epix/seqdb/api/rbac.py +32 -0
- gen_epix-0.0.1/gen_epix/seqdb/api/router.py +58 -0
- gen_epix-0.0.1/gen_epix/seqdb/api/seq.py +100 -0
- gen_epix-0.0.1/gen_epix/seqdb/api/system.py +110 -0
- gen_epix-0.0.1/gen_epix/seqdb/app.py +50 -0
- gen_epix-0.0.1/gen_epix/seqdb/app_setup.py +128 -0
- gen_epix-0.0.1/gen_epix/seqdb/config/.secret/automaticnewuser +8 -0
- gen_epix-0.0.1/gen_epix/seqdb/config/.secret/db +3 -0
- gen_epix-0.0.1/gen_epix/seqdb/config/.secret/log +3 -0
- gen_epix-0.0.1/gen_epix/seqdb/config/.secret/repository-sasql-defaults +8 -0
- gen_epix-0.0.1/gen_epix/seqdb/config/.secret/root-user +10 -0
- gen_epix-0.0.1/gen_epix/seqdb/config/__init__.py +1 -0
- gen_epix-0.0.1/gen_epix/seqdb/config/idp/identity_providers.json +29 -0
- gen_epix-0.0.1/gen_epix/seqdb/config/idp/mock_identity_provider.json +11 -0
- gen_epix-0.0.1/gen_epix/seqdb/config/idp/no_identity_providers.json +2 -0
- gen_epix-0.0.1/gen_epix/seqdb/config/logging.debug.yaml +44 -0
- gen_epix-0.0.1/gen_epix/seqdb/config/logging.yaml +35 -0
- gen_epix-0.0.1/gen_epix/seqdb/config/secrets.default.toml +69 -0
- gen_epix-0.0.1/gen_epix/seqdb/config/settings.toml +50 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/__init__.py +3 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/command/__init__.py +3 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/command/base.py +37 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/command/crud.py +223 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/command/non_crud.py +95 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/command/role.py +150 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/enum.py +260 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/exc.py +5 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/model/__init__.py +8 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/model/base.py +115 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/model/organization.py +226 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/model/seq/__init__.py +92 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/model/seq/metadata.py +564 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/model/seq/non_persistable.py +159 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/model/seq/persistable.py +774 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/model/system.py +58 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/policy/__init__.py +1 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/policy/organization.py +15 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/policy/system.py +21 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/repository/__init__.py +8 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/repository/organization.py +23 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/repository/seq.py +25 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/repository/system.py +10 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/service/__init__.py +31 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/service/abac.py +19 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/service/organization.py +69 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/service/rbac.py +24 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/service/seq.py +72 -0
- gen_epix-0.0.1/gen_epix/seqdb/domain/service/system.py +27 -0
- gen_epix-0.0.1/gen_epix/seqdb/env.py +257 -0
- gen_epix-0.0.1/gen_epix/seqdb/policies/has_system_outage_policy.py +55 -0
- gen_epix-0.0.1/gen_epix/seqdb/policies/update_user_policy.py +52 -0
- gen_epix-0.0.1/gen_epix/seqdb/repositories/__init__.py +15 -0
- gen_epix-0.0.1/gen_epix/seqdb/repositories/organization_dict.py +25 -0
- gen_epix-0.0.1/gen_epix/seqdb/repositories/organization_sa.py +51 -0
- gen_epix-0.0.1/gen_epix/seqdb/repositories/sa_model/__init__.py +12 -0
- gen_epix-0.0.1/gen_epix/seqdb/repositories/sa_model/base.py +80 -0
- gen_epix-0.0.1/gen_epix/seqdb/repositories/sa_model/organization.py +83 -0
- gen_epix-0.0.1/gen_epix/seqdb/repositories/sa_model/seq.py +506 -0
- gen_epix-0.0.1/gen_epix/seqdb/repositories/sa_model/system.py +34 -0
- gen_epix-0.0.1/gen_epix/seqdb/repositories/sa_model/util.py +88 -0
- gen_epix-0.0.1/gen_epix/seqdb/repositories/seq_dict.py +31 -0
- gen_epix-0.0.1/gen_epix/seqdb/repositories/seq_sa.py +55 -0
- gen_epix-0.0.1/gen_epix/seqdb/repositories/system_dict.py +6 -0
- gen_epix-0.0.1/gen_epix/seqdb/repositories/system_sa.py +22 -0
- gen_epix-0.0.1/gen_epix/seqdb/services/__init__.py +9 -0
- gen_epix-0.0.1/gen_epix/seqdb/services/abac.py +12 -0
- gen_epix-0.0.1/gen_epix/seqdb/services/organization.py +226 -0
- gen_epix-0.0.1/gen_epix/seqdb/services/rbac.py +51 -0
- gen_epix-0.0.1/gen_epix/seqdb/services/seq.py +501 -0
- gen_epix-0.0.1/gen_epix/seqdb/services/system.py +29 -0
- gen_epix-0.0.1/gen_epix/seqdb/services/user_manager.py +244 -0
- gen_epix-0.0.1/pyproject.toml +136 -0
- 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 @@
|
|
|
1
|
+
|
|
@@ -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
|