howler-api 4.1.0.dev1635__tar.gz → 4.1.0.dev1644__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.
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/PKG-INFO +1 -1
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/utils/permission_helper.py +16 -6
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/collection.py +47 -25
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/mixins.py +6 -2
- howler_api-4.1.0.dev1644/howler/odm/models/permission_request.py +12 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/action_service.py +13 -7
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/analytic_service.py +15 -7
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/case_service.py +18 -10
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/dossier_service.py +15 -7
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/event_service.py +11 -7
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/hit_service.py +15 -9
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/overview_service.py +4 -2
- howler_api-4.1.0.dev1644/howler/services/permission_service.py +152 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/template_service.py +2 -2
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/user_service.py +14 -6
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/chunk.py +3 -3
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/pyproject.toml +1 -1
- howler_api-4.1.0.dev1635/howler/odm/models/permission_request.py +0 -17
- howler_api-4.1.0.dev1635/howler/services/permission_service.py +0 -150
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/README.md +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/actions/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/actions/add_label.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/actions/add_to_bundle.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/actions/add_to_case.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/actions/change_field.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/actions/demote.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/actions/example_plugin.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/actions/prioritization.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/actions/promote.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/actions/remove_from_bundle.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/actions/remove_label.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/actions/transition.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/base.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/socket.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/action.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/analytic.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/auth.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/clue.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/configs.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/dossier.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/help.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/hit.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/notebook.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/overview.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/search.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/template.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/tool.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/user.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/utils/params.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/view.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v2/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v2/case.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v2/fuzzy.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v2/ingest.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v2/search.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/app.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/common/README.md +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/common/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/common/classification.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/common/classification.yml +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/common/exceptions.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/common/loader.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/common/logging/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/common/logging/audit.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/common/logging/format.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/common/net.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/common/net_static.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/common/random_user.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/common/swagger.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/config.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/cronjobs/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/cronjobs/action_queue_worker.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/cronjobs/correlation.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/cronjobs/retention.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/cronjobs/view_cleanup.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/README.md +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/bulk.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/constants.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/exceptions.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/howler_store.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/migrations/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/migrations/action_owner.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/migrations/base.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/migrations/fix_process.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/migrations/runner.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/operations.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/schemas.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/store.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/support/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/support/build.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/support/schemas.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/types.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/datastore/utils.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/error.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/external/README.md +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/external/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/external/check_duplicates.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/external/generate_mitre.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/external/generate_tlds.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/external/reindex_data.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/external/run_migrations.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/external/wipe_databases.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/gunicorn_config.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/healthz.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/helper/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/helper/azure.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/helper/discover.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/helper/hit.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/helper/oauth.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/helper/search.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/helper/workflow.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/helper/ws.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/README.md +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/base.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/charter.txt +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/constants.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/helper.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/howler_enum.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/action.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/analytic.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/aws.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/azure.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/case.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/cbs.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/clue.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/config.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/dossier.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/host.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/related.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/event.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/gcp.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/hit.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/howler_data.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/lead.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/localized_label.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/log.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/migration.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/overview.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/ownership.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/pivot.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/record.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/template.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/user.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/models/view.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/random_data.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/odm/randomizer.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/patched.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/plugins/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/plugins/config.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/remote/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/remote/datatypes/README.md +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/remote/datatypes/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/remote/datatypes/events.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/remote/datatypes/set.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/security/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/security/login.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/security/socket.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/security/utils.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/auth_service.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/bundle_compat_service.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/comms_service.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/config_service.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/correlation_service.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/docs_service.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/fuzzy_service.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/jwt_service.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/lucene_service.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/notebook_service.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/search_service.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/services/viewer_service.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/telemetry.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/__init__.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/annotations.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/compat.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/constants.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/dict_utils.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/indexes.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/isotime.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/list_utils.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/lucene.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/net_utils.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/path.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/socket_utils.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/str_utils.py +0 -0
- {howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/utils/uid.py +0 -0
{howler_api-4.1.0.dev1635 → howler_api-4.1.0.dev1644}/howler/api/v1/utils/permission_helper.py
RENAMED
|
@@ -31,10 +31,12 @@ def add_access_control_endpoints(api: Blueprint, odm: type[Ownership]):
|
|
|
31
31
|
refresh => ('true' | 'false' | 'wait_for') Whether to refresh the datastore before returning.
|
|
32
32
|
|
|
33
33
|
Data Block:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
[
|
|
35
|
+
{
|
|
36
|
+
"privilege": "members", # The permission level: 'owner', 'admins', or 'members'
|
|
37
|
+
"user_id": "username" # The user receiving the permission
|
|
38
|
+
}
|
|
39
|
+
]
|
|
38
40
|
|
|
39
41
|
Result Example:
|
|
40
42
|
{
|
|
@@ -42,7 +44,7 @@ def add_access_control_endpoints(api: Blueprint, odm: type[Ownership]):
|
|
|
42
44
|
}
|
|
43
45
|
"""
|
|
44
46
|
try:
|
|
45
|
-
result = permission_service.
|
|
47
|
+
result = permission_service.give_privileges(id, user, odm, refresh=kwargs.get("refresh"))
|
|
46
48
|
except VersionConflictException:
|
|
47
49
|
return conflict(err="Someone has updated this item. Please try again")
|
|
48
50
|
except ForbiddenException as e:
|
|
@@ -67,13 +69,21 @@ def add_access_control_endpoints(api: Blueprint, odm: type[Ownership]):
|
|
|
67
69
|
Optional Arguments:
|
|
68
70
|
refresh => ('true' | 'false' | 'wait_for') Whether to refresh the datastore before returning.
|
|
69
71
|
|
|
72
|
+
Data Block:
|
|
73
|
+
[
|
|
74
|
+
{
|
|
75
|
+
"privilege": "members", # The permission level: 'admins' or 'members'
|
|
76
|
+
"user_id": "username" # The user losing the permission
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
|
|
70
80
|
Result Example:
|
|
71
81
|
{
|
|
72
82
|
...object # The updated action, dossier, or view
|
|
73
83
|
}
|
|
74
84
|
"""
|
|
75
85
|
try:
|
|
76
|
-
result = permission_service.
|
|
86
|
+
result = permission_service.remove_privileges(id, user, odm, refresh=kwargs.get("refresh"))
|
|
77
87
|
except VersionConflictException:
|
|
78
88
|
return conflict(err="Someone has updated this item. Please try again")
|
|
79
89
|
except ForbiddenException as e:
|
|
@@ -1210,13 +1210,15 @@ class ESCollection(Generic[ModelType]):
|
|
|
1210
1210
|
return out
|
|
1211
1211
|
|
|
1212
1212
|
@overload
|
|
1213
|
-
def normalize(self: Self, data) -> ModelType | None: ...
|
|
1213
|
+
def normalize(self: Self, data) -> ModelType | None: ... # codeql[py/ineffectual-statement]
|
|
1214
1214
|
|
|
1215
1215
|
@overload
|
|
1216
|
-
def normalize(self: Self, data, as_obj: Literal[True]) -> ModelType | None: ...
|
|
1216
|
+
def normalize(self: Self, data, as_obj: Literal[True]) -> ModelType | None: ... # codeql[py/ineffectual-statement]
|
|
1217
1217
|
|
|
1218
1218
|
@overload
|
|
1219
|
-
def normalize(
|
|
1219
|
+
def normalize(
|
|
1220
|
+
self: Self, data, as_obj: Literal[False]
|
|
1221
|
+
) -> dict[str, Any] | None: ... # codeql[py/ineffectual-statement]
|
|
1220
1222
|
|
|
1221
1223
|
def normalize(self: Self, data, as_obj=True):
|
|
1222
1224
|
"""Normalize the data using the model class
|
|
@@ -1285,10 +1287,14 @@ class ESCollection(Generic[ModelType]):
|
|
|
1285
1287
|
raise elasticsearch.exceptions.NotFoundError(f"Document with id {key} not found", meta, result)
|
|
1286
1288
|
|
|
1287
1289
|
@overload
|
|
1288
|
-
def _get(
|
|
1290
|
+
def _get(
|
|
1291
|
+
self: Self, key, retries, version: Literal[False]
|
|
1292
|
+
) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
|
|
1289
1293
|
|
|
1290
1294
|
@overload
|
|
1291
|
-
def _get(
|
|
1295
|
+
def _get(
|
|
1296
|
+
self: Self, key, retries, version: Literal[True]
|
|
1297
|
+
) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
|
|
1292
1298
|
|
|
1293
1299
|
def _get(self: Self, key, retries, version=False):
|
|
1294
1300
|
"""Versioned get-save for atomic update has two paths:
|
|
@@ -1368,25 +1374,33 @@ class ESCollection(Generic[ModelType]):
|
|
|
1368
1374
|
raise DataStoreException(f"Invalid version token for {self.name}: {version!r}")
|
|
1369
1375
|
|
|
1370
1376
|
@overload
|
|
1371
|
-
def get(
|
|
1377
|
+
def get(
|
|
1378
|
+
self: Self, key, as_obj: Literal[True], version: Literal[True]
|
|
1379
|
+
) -> tuple[ModelType | None, str]: ... # codeql[py/ineffectual-statement]
|
|
1372
1380
|
|
|
1373
1381
|
@overload
|
|
1374
|
-
def get(
|
|
1382
|
+
def get(
|
|
1383
|
+
self: Self, key, as_obj: Literal[True], version: Literal[False]
|
|
1384
|
+
) -> ModelType | None: ... # codeql[py/ineffectual-statement]
|
|
1375
1385
|
|
|
1376
1386
|
@overload
|
|
1377
|
-
def get(self: Self, key, as_obj: Literal[True]) -> ModelType | None: ...
|
|
1387
|
+
def get(self: Self, key, as_obj: Literal[True]) -> ModelType | None: ... # codeql[py/ineffectual-statement]
|
|
1378
1388
|
|
|
1379
1389
|
@overload
|
|
1380
|
-
def get(self: Self, key) -> ModelType | None: ...
|
|
1390
|
+
def get(self: Self, key) -> ModelType | None: ... # codeql[py/ineffectual-statement]
|
|
1381
1391
|
|
|
1382
1392
|
@overload
|
|
1383
|
-
def get(
|
|
1393
|
+
def get(
|
|
1394
|
+
self: Self, key, as_obj: Literal[False], version: Literal[True]
|
|
1395
|
+
) -> tuple[dict[str, Any] | None, str]: ... # codeql[py/ineffectual-statement]
|
|
1384
1396
|
|
|
1385
1397
|
@overload
|
|
1386
|
-
def get(
|
|
1398
|
+
def get(
|
|
1399
|
+
self: Self, key, as_obj: Literal[False], version: Literal[False]
|
|
1400
|
+
) -> dict[str, Any] | None: ... # codeql[py/ineffectual-statement]
|
|
1387
1401
|
|
|
1388
1402
|
@overload
|
|
1389
|
-
def get(self: Self, key, as_obj: Literal[False]) -> dict[str, Any] | None: ...
|
|
1403
|
+
def get(self: Self, key, as_obj: Literal[False]) -> dict[str, Any] | None: ... # codeql[py/ineffectual-statement]
|
|
1390
1404
|
|
|
1391
1405
|
def get(self: Self, key, as_obj=True, version=False):
|
|
1392
1406
|
"""Get a document from the datastore, retry a few times if not found and normalize the
|
|
@@ -1407,27 +1421,35 @@ class ESCollection(Generic[ModelType]):
|
|
|
1407
1421
|
return self.normalize(data, as_obj=as_obj)
|
|
1408
1422
|
|
|
1409
1423
|
@overload
|
|
1410
|
-
def get_if_exists(
|
|
1424
|
+
def get_if_exists(
|
|
1425
|
+
self: Self, key: str, as_obj: Literal[True], version: Literal[True]
|
|
1426
|
+
) -> tuple[ModelType, str]: ... # codeql[py/ineffectual-statement]
|
|
1411
1427
|
|
|
1412
1428
|
@overload
|
|
1413
|
-
def get_if_exists(
|
|
1429
|
+
def get_if_exists(
|
|
1430
|
+
self: Self, key: str, as_obj: Literal[True], version: Literal[False]
|
|
1431
|
+
) -> ModelType: ... # codeql[py/ineffectual-statement]
|
|
1414
1432
|
|
|
1415
1433
|
@overload
|
|
1416
|
-
def get_if_exists(self: Self, key: str, as_obj: Literal[True]) -> ModelType: ...
|
|
1434
|
+
def get_if_exists(self: Self, key: str, as_obj: Literal[True]) -> ModelType: ... # codeql[py/ineffectual-statement]
|
|
1417
1435
|
|
|
1418
1436
|
@overload
|
|
1419
|
-
def get_if_exists(self: Self, key: str) -> ModelType: ...
|
|
1437
|
+
def get_if_exists(self: Self, key: str) -> ModelType: ... # codeql[py/ineffectual-statement]
|
|
1420
1438
|
|
|
1421
1439
|
@overload
|
|
1422
1440
|
def get_if_exists(
|
|
1423
1441
|
self: Self, key: str, as_obj: Literal[False], version: Literal[True]
|
|
1424
|
-
) -> tuple[dict[str, Any], str]: ...
|
|
1442
|
+
) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
|
|
1425
1443
|
|
|
1426
1444
|
@overload
|
|
1427
|
-
def get_if_exists(
|
|
1445
|
+
def get_if_exists(
|
|
1446
|
+
self: Self, key: str, as_obj: Literal[False], version: Literal[False]
|
|
1447
|
+
) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
|
|
1428
1448
|
|
|
1429
1449
|
@overload
|
|
1430
|
-
def get_if_exists(
|
|
1450
|
+
def get_if_exists(
|
|
1451
|
+
self: Self, key: str, as_obj: Literal[False]
|
|
1452
|
+
) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
|
|
1431
1453
|
|
|
1432
1454
|
def get_if_exists(self: Self, key: str, as_obj=True, version=False):
|
|
1433
1455
|
"""Get a document from the datastore but do not retry if not found.
|
|
@@ -2095,7 +2117,7 @@ class ESCollection(Generic[ModelType]):
|
|
|
2095
2117
|
script_fields: list[str] = [],
|
|
2096
2118
|
*,
|
|
2097
2119
|
aggregations: None = None,
|
|
2098
|
-
) -> SearchResult[ModelType]: ...
|
|
2120
|
+
) -> SearchResult[ModelType]: ... # codeql[py/ineffectual-statement]
|
|
2099
2121
|
|
|
2100
2122
|
@overload
|
|
2101
2123
|
def search(
|
|
@@ -2114,7 +2136,7 @@ class ESCollection(Generic[ModelType]):
|
|
|
2114
2136
|
script_fields: list[str] = [],
|
|
2115
2137
|
*,
|
|
2116
2138
|
aggregations: None = None,
|
|
2117
|
-
) -> SearchResult[dict[str, typing.Any]]: ...
|
|
2139
|
+
) -> SearchResult[dict[str, typing.Any]]: ... # codeql[py/ineffectual-statement]
|
|
2118
2140
|
|
|
2119
2141
|
@overload
|
|
2120
2142
|
def search(
|
|
@@ -2133,7 +2155,7 @@ class ESCollection(Generic[ModelType]):
|
|
|
2133
2155
|
script_fields: list[str] = [],
|
|
2134
2156
|
*,
|
|
2135
2157
|
aggregations: list[tuple[str, dict]],
|
|
2136
|
-
) -> AggSearchResult[ModelType]: ...
|
|
2158
|
+
) -> AggSearchResult[ModelType]: ... # codeql[py/ineffectual-statement]
|
|
2137
2159
|
|
|
2138
2160
|
@overload
|
|
2139
2161
|
def search(
|
|
@@ -2152,7 +2174,7 @@ class ESCollection(Generic[ModelType]):
|
|
|
2152
2174
|
script_fields: list[str] = [],
|
|
2153
2175
|
*,
|
|
2154
2176
|
aggregations: list[tuple[str, dict]],
|
|
2155
|
-
) -> AggSearchResult[dict[str, typing.Any]]: ...
|
|
2177
|
+
) -> AggSearchResult[dict[str, typing.Any]]: ... # codeql[py/ineffectual-statement]
|
|
2156
2178
|
|
|
2157
2179
|
def search(
|
|
2158
2180
|
self: Self,
|
|
@@ -2316,7 +2338,7 @@ class ESCollection(Generic[ModelType]):
|
|
|
2316
2338
|
item_buffer_size: int = 200,
|
|
2317
2339
|
*,
|
|
2318
2340
|
as_obj: Literal[True] = True,
|
|
2319
|
-
) -> typing.Generator[ModelType, None, None]: ...
|
|
2341
|
+
) -> typing.Generator[ModelType, None, None]: ... # codeql[py/ineffectual-statement]
|
|
2320
2342
|
|
|
2321
2343
|
@overload
|
|
2322
2344
|
def stream_search(
|
|
@@ -2328,7 +2350,7 @@ class ESCollection(Generic[ModelType]):
|
|
|
2328
2350
|
item_buffer_size: int = 200,
|
|
2329
2351
|
*,
|
|
2330
2352
|
as_obj: Literal[False],
|
|
2331
|
-
) -> typing.Generator[dict[str, typing.Any], None, None]: ...
|
|
2353
|
+
) -> typing.Generator[dict[str, typing.Any], None, None]: ... # codeql[py/ineffectual-statement]
|
|
2332
2354
|
|
|
2333
2355
|
def stream_search(
|
|
2334
2356
|
self: Self,
|
|
@@ -29,10 +29,14 @@ class _ObjectsDescriptor(Generic[ModelType]):
|
|
|
29
29
|
"""
|
|
30
30
|
|
|
31
31
|
@overload
|
|
32
|
-
def __get__(
|
|
32
|
+
def __get__(
|
|
33
|
+
self: Self, obj: None, objtype: type[ModelType]
|
|
34
|
+
) -> ESCollection[ModelType]: ... # codeql[py/ineffectual-statement]
|
|
33
35
|
|
|
34
36
|
@overload
|
|
35
|
-
def __get__(
|
|
37
|
+
def __get__(
|
|
38
|
+
self: Self, obj: ModelType, objtype: type[ModelType]
|
|
39
|
+
) -> ESCollection[ModelType]: ... # codeql[py/ineffectual-statement]
|
|
36
40
|
|
|
37
41
|
def __get__(self, obj: ModelType | None, objtype: type[ModelType] | None = None) -> ESCollection[ModelType]:
|
|
38
42
|
"""Return the ESCollection for the owner class.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from typing import Literal
|
|
2
|
+
|
|
3
|
+
from howler import odm
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@odm.model(index=False, store=False, description="A permission entry for ownership permission updates")
|
|
7
|
+
class PermissionRequest(odm.Model):
|
|
8
|
+
privilege: Literal["admins", "members", "owner"] = odm.Enum(
|
|
9
|
+
values=["admins", "members", "owner"],
|
|
10
|
+
description="The permission level to update",
|
|
11
|
+
)
|
|
12
|
+
user_id: str = odm.Keyword(description="The user ID to grant or revoke for the selected privilege.")
|
|
@@ -38,31 +38,37 @@ _action_queues: dict[str, NamedQueue[TriggeredAction]] = {}
|
|
|
38
38
|
@overload
|
|
39
39
|
def get_action(
|
|
40
40
|
id: str, as_odm: Literal[True], version: Literal[True], user: User | None = None
|
|
41
|
-
) -> tuple[Action, str]: ...
|
|
41
|
+
) -> tuple[Action, str]: ... # codeql[py/ineffectual-statement]
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
@overload
|
|
45
|
-
def get_action(
|
|
45
|
+
def get_action(
|
|
46
|
+
id: str, as_odm: Literal[True], version: Literal[False]
|
|
47
|
+
) -> Action: ... # codeql[py/ineffectual-statement]
|
|
46
48
|
|
|
47
49
|
|
|
48
50
|
@overload
|
|
49
|
-
def get_action(id: str, as_odm: Literal[True]) -> Action: ...
|
|
51
|
+
def get_action(id: str, as_odm: Literal[True]) -> Action: ... # codeql[py/ineffectual-statement]
|
|
50
52
|
|
|
51
53
|
|
|
52
54
|
@overload
|
|
53
|
-
def get_action(id: str) -> Action: ...
|
|
55
|
+
def get_action(id: str) -> Action: ... # codeql[py/ineffectual-statement]
|
|
54
56
|
|
|
55
57
|
|
|
56
58
|
@overload
|
|
57
|
-
def get_action(
|
|
59
|
+
def get_action(
|
|
60
|
+
id: str, as_odm: Literal[False], version: Literal[True]
|
|
61
|
+
) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
|
|
58
62
|
|
|
59
63
|
|
|
60
64
|
@overload
|
|
61
|
-
def get_action(
|
|
65
|
+
def get_action(
|
|
66
|
+
id: str, as_odm: Literal[False], version: Literal[False]
|
|
67
|
+
) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
|
|
62
68
|
|
|
63
69
|
|
|
64
70
|
@overload
|
|
65
|
-
def get_action(id: str, as_odm: Literal[False]) -> dict[str, Any]: ...
|
|
71
|
+
def get_action(id: str, as_odm: Literal[False]) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
|
|
66
72
|
|
|
67
73
|
|
|
68
74
|
def get_action(id: str, as_odm=False, version=False, user: User | None = None):
|
|
@@ -19,31 +19,39 @@ def does_analytic_exist(analytic_id: str) -> bool:
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@overload
|
|
22
|
-
def get_analytic(
|
|
22
|
+
def get_analytic(
|
|
23
|
+
id: str, as_odm: Literal[True], version: Literal[True]
|
|
24
|
+
) -> tuple[Analytic, str]: ... # codeql[py/ineffectual-statement]
|
|
23
25
|
|
|
24
26
|
|
|
25
27
|
@overload
|
|
26
|
-
def get_analytic(
|
|
28
|
+
def get_analytic(
|
|
29
|
+
id: str, as_odm: Literal[True], version: Literal[False]
|
|
30
|
+
) -> Analytic: ... # codeql[py/ineffectual-statement]
|
|
27
31
|
|
|
28
32
|
|
|
29
33
|
@overload
|
|
30
|
-
def get_analytic(id: str, as_odm: Literal[True]) -> Analytic: ...
|
|
34
|
+
def get_analytic(id: str, as_odm: Literal[True]) -> Analytic: ... # codeql[py/ineffectual-statement]
|
|
31
35
|
|
|
32
36
|
|
|
33
37
|
@overload
|
|
34
|
-
def get_analytic(id: str) -> Analytic: ...
|
|
38
|
+
def get_analytic(id: str) -> Analytic: ... # codeql[py/ineffectual-statement]
|
|
35
39
|
|
|
36
40
|
|
|
37
41
|
@overload
|
|
38
|
-
def get_analytic(
|
|
42
|
+
def get_analytic(
|
|
43
|
+
id: str, as_odm: Literal[False], version: Literal[True]
|
|
44
|
+
) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
|
|
39
45
|
|
|
40
46
|
|
|
41
47
|
@overload
|
|
42
|
-
def get_analytic(
|
|
48
|
+
def get_analytic(
|
|
49
|
+
id: str, as_odm: Literal[False], version: Literal[False]
|
|
50
|
+
) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
|
|
43
51
|
|
|
44
52
|
|
|
45
53
|
@overload
|
|
46
|
-
def get_analytic(id: str, as_odm: Literal[False]) -> dict[str, Any]: ...
|
|
54
|
+
def get_analytic(id: str, as_odm: Literal[False]) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
|
|
47
55
|
|
|
48
56
|
|
|
49
57
|
def get_analytic(
|
|
@@ -39,35 +39,43 @@ CREATED_CASES = Counter(f"{APP_NAME.replace('-', '_')}_created_cases_total", "Th
|
|
|
39
39
|
@overload
|
|
40
40
|
def get_case(
|
|
41
41
|
id: str, as_odm: Literal[True], version: Literal[True], user: User | None = None
|
|
42
|
-
) -> tuple[Case | None, str]: ...
|
|
42
|
+
) -> tuple[Case | None, str]: ... # codeql[py/ineffectual-statement]
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
@overload
|
|
46
|
-
def get_case(
|
|
46
|
+
def get_case(
|
|
47
|
+
id: str, as_odm: Literal[True], version: Literal[False]
|
|
48
|
+
) -> Case | None: ... # codeql[py/ineffectual-statement]
|
|
47
49
|
|
|
48
50
|
|
|
49
51
|
@overload
|
|
50
|
-
def get_case(
|
|
52
|
+
def get_case(
|
|
53
|
+
id: str, as_odm: Literal[True], version: Literal[False], user: User | None = None
|
|
54
|
+
) -> Case | None: ... # codeql[py/ineffectual-statement]
|
|
51
55
|
|
|
52
56
|
|
|
53
57
|
@overload
|
|
54
|
-
def get_case(id: str, as_odm: Literal[True]) -> Case | None: ...
|
|
58
|
+
def get_case(id: str, as_odm: Literal[True]) -> Case | None: ... # codeql[py/ineffectual-statement]
|
|
55
59
|
|
|
56
60
|
|
|
57
61
|
@overload
|
|
58
|
-
def get_case(id: str) -> Case | None: ...
|
|
62
|
+
def get_case(id: str) -> Case | None: ... # codeql[py/ineffectual-statement]
|
|
59
63
|
|
|
60
64
|
|
|
61
65
|
@overload
|
|
62
|
-
def get_case(
|
|
66
|
+
def get_case(
|
|
67
|
+
id: str, as_odm: Literal[False], version: Literal[True]
|
|
68
|
+
) -> tuple[dict[str, Any] | None, str]: ... # codeql[py/ineffectual-statement]
|
|
63
69
|
|
|
64
70
|
|
|
65
71
|
@overload
|
|
66
|
-
def get_case(
|
|
72
|
+
def get_case(
|
|
73
|
+
id: str, as_odm: Literal[False], version: Literal[False]
|
|
74
|
+
) -> dict[str, Any] | None: ... # codeql[py/ineffectual-statement]
|
|
67
75
|
|
|
68
76
|
|
|
69
77
|
@overload
|
|
70
|
-
def get_case(id: str, as_odm: Literal[False]) -> dict[str, Any] | None: ...
|
|
78
|
+
def get_case(id: str, as_odm: Literal[False]) -> dict[str, Any] | None: ... # codeql[py/ineffectual-statement]
|
|
71
79
|
|
|
72
80
|
|
|
73
81
|
def get_case(id: str, as_odm=False, version=False, user: User | None = None):
|
|
@@ -497,7 +505,7 @@ def append_case_item(
|
|
|
497
505
|
item_name: str | None = None,
|
|
498
506
|
*,
|
|
499
507
|
user: User | None = None,
|
|
500
|
-
) -> Case: ...
|
|
508
|
+
) -> Case: ... # codeql[py/ineffectual-statement]
|
|
501
509
|
|
|
502
510
|
|
|
503
511
|
@overload
|
|
@@ -510,7 +518,7 @@ def append_case_item(
|
|
|
510
518
|
item_name: str | None = ...,
|
|
511
519
|
*,
|
|
512
520
|
user: User | None = None,
|
|
513
|
-
) -> Case: ...
|
|
521
|
+
) -> Case: ... # codeql[py/ineffectual-statement]
|
|
514
522
|
|
|
515
523
|
|
|
516
524
|
def append_case_item( # noqa: C901
|
|
@@ -55,31 +55,39 @@ def exists(dossier_id: str) -> bool:
|
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
@overload
|
|
58
|
-
def get_dossier(
|
|
58
|
+
def get_dossier(
|
|
59
|
+
id: str, as_odm: Literal[True], version: Literal[True]
|
|
60
|
+
) -> tuple[Dossier, str]: ... # codeql[py/ineffectual-statement]
|
|
59
61
|
|
|
60
62
|
|
|
61
63
|
@overload
|
|
62
|
-
def get_dossier(
|
|
64
|
+
def get_dossier(
|
|
65
|
+
id: str, as_odm: Literal[True], version: Literal[False]
|
|
66
|
+
) -> Dossier: ... # codeql[py/ineffectual-statement]
|
|
63
67
|
|
|
64
68
|
|
|
65
69
|
@overload
|
|
66
|
-
def get_dossier(id: str, as_odm: Literal[True]) -> Dossier: ...
|
|
70
|
+
def get_dossier(id: str, as_odm: Literal[True]) -> Dossier: ... # codeql[py/ineffectual-statement]
|
|
67
71
|
|
|
68
72
|
|
|
69
73
|
@overload
|
|
70
|
-
def get_dossier(id: str) -> Dossier: ...
|
|
74
|
+
def get_dossier(id: str) -> Dossier: ... # codeql[py/ineffectual-statement]
|
|
71
75
|
|
|
72
76
|
|
|
73
77
|
@overload
|
|
74
|
-
def get_dossier(
|
|
78
|
+
def get_dossier(
|
|
79
|
+
id: str, as_odm: Literal[False], version: Literal[True]
|
|
80
|
+
) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
|
|
75
81
|
|
|
76
82
|
|
|
77
83
|
@overload
|
|
78
|
-
def get_dossier(
|
|
84
|
+
def get_dossier(
|
|
85
|
+
id: str, as_odm: Literal[False], version: Literal[False]
|
|
86
|
+
) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
|
|
79
87
|
|
|
80
88
|
|
|
81
89
|
@overload
|
|
82
|
-
def get_dossier(id: str, as_odm: Literal[False]) -> dict[str, Any]: ...
|
|
90
|
+
def get_dossier(id: str, as_odm: Literal[False]) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
|
|
83
91
|
|
|
84
92
|
|
|
85
93
|
def get_dossier(
|
|
@@ -37,31 +37,35 @@ def exists(id: str) -> bool:
|
|
|
37
37
|
@overload
|
|
38
38
|
def get_event(
|
|
39
39
|
id: str, as_odm: Literal[True], version: Literal[True], user: User | None = None
|
|
40
|
-
) -> tuple[Event, str]: ...
|
|
40
|
+
) -> tuple[Event, str]: ... # codeql[py/ineffectual-statement]
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
@overload
|
|
44
|
-
def get_event(id: str, as_odm: Literal[True], version: Literal[False]) -> Event: ...
|
|
44
|
+
def get_event(id: str, as_odm: Literal[True], version: Literal[False]) -> Event: ... # codeql[py/ineffectual-statement]
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
@overload
|
|
48
|
-
def get_event(id: str, as_odm: Literal[True]) -> Event: ...
|
|
48
|
+
def get_event(id: str, as_odm: Literal[True]) -> Event: ... # codeql[py/ineffectual-statement]
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
@overload
|
|
52
|
-
def get_event(id: str) -> Event: ...
|
|
52
|
+
def get_event(id: str) -> Event: ... # codeql[py/ineffectual-statement]
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
@overload
|
|
56
|
-
def get_event(
|
|
56
|
+
def get_event(
|
|
57
|
+
id: str, as_odm: Literal[False], version: Literal[True]
|
|
58
|
+
) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
|
|
57
59
|
|
|
58
60
|
|
|
59
61
|
@overload
|
|
60
|
-
def get_event(
|
|
62
|
+
def get_event(
|
|
63
|
+
id: str, as_odm: Literal[False], version: Literal[False]
|
|
64
|
+
) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
|
|
61
65
|
|
|
62
66
|
|
|
63
67
|
@overload
|
|
64
|
-
def get_event(id: str, as_odm: Literal[False]) -> dict[str, Any]: ...
|
|
68
|
+
def get_event(id: str, as_odm: Literal[False]) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
|
|
65
69
|
|
|
66
70
|
|
|
67
71
|
@tracer.start_as_current_span(f"{__name__}.get_event")
|
|
@@ -361,31 +361,37 @@ def exists(id: str) -> bool:
|
|
|
361
361
|
|
|
362
362
|
|
|
363
363
|
@overload
|
|
364
|
-
def get_hit(
|
|
364
|
+
def get_hit(
|
|
365
|
+
id: str, as_odm: Literal[True], version: Literal[True], user: User | None = None
|
|
366
|
+
) -> tuple[Hit, str]: ... # codeql[py/ineffectual-statement]
|
|
365
367
|
|
|
366
368
|
|
|
367
369
|
@overload
|
|
368
|
-
def get_hit(id: str, as_odm: Literal[True], version: Literal[False]) -> Hit: ...
|
|
370
|
+
def get_hit(id: str, as_odm: Literal[True], version: Literal[False]) -> Hit: ... # codeql[py/ineffectual-statement]
|
|
369
371
|
|
|
370
372
|
|
|
371
373
|
@overload
|
|
372
|
-
def get_hit(id: str, as_odm: Literal[True]) -> Hit: ...
|
|
374
|
+
def get_hit(id: str, as_odm: Literal[True]) -> Hit: ... # codeql[py/ineffectual-statement]
|
|
373
375
|
|
|
374
376
|
|
|
375
377
|
@overload
|
|
376
|
-
def get_hit(id: str) -> Hit: ...
|
|
378
|
+
def get_hit(id: str) -> Hit: ... # codeql[py/ineffectual-statement]
|
|
377
379
|
|
|
378
380
|
|
|
379
381
|
@overload
|
|
380
|
-
def get_hit(
|
|
382
|
+
def get_hit(
|
|
383
|
+
id: str, as_odm: Literal[False], version: Literal[True]
|
|
384
|
+
) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
|
|
381
385
|
|
|
382
386
|
|
|
383
387
|
@overload
|
|
384
|
-
def get_hit(
|
|
388
|
+
def get_hit(
|
|
389
|
+
id: str, as_odm: Literal[False], version: Literal[False]
|
|
390
|
+
) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
|
|
385
391
|
|
|
386
392
|
|
|
387
393
|
@overload
|
|
388
|
-
def get_hit(id: str, as_odm: Literal[False]) -> dict[str, Any]: ...
|
|
394
|
+
def get_hit(id: str, as_odm: Literal[False]) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
|
|
389
395
|
|
|
390
396
|
|
|
391
397
|
@tracer.start_as_current_span(f"{__name__}.get_hit")
|
|
@@ -812,7 +818,7 @@ def search(
|
|
|
812
818
|
deep_paging_id: str | None = None,
|
|
813
819
|
track_total_hits: bool = False,
|
|
814
820
|
filters: list[str] | None = None,
|
|
815
|
-
) -> SearchResult[Hit]: ...
|
|
821
|
+
) -> SearchResult[Hit]: ... # codeql[py/ineffectual-statement]
|
|
816
822
|
|
|
817
823
|
|
|
818
824
|
@overload
|
|
@@ -827,7 +833,7 @@ def search(
|
|
|
827
833
|
deep_paging_id: str | None = None,
|
|
828
834
|
track_total_hits: bool = False,
|
|
829
835
|
filters: list[str] | None = None,
|
|
830
|
-
) -> SearchResult[dict[str, Any]]: ...
|
|
836
|
+
) -> SearchResult[dict[str, Any]]: ... # codeql[py/ineffectual-statement]
|
|
831
837
|
|
|
832
838
|
|
|
833
839
|
@tracer.start_as_current_span(f"{__name__}.search")
|
|
@@ -13,11 +13,13 @@ logger = get_logger(__file__)
|
|
|
13
13
|
@overload
|
|
14
14
|
def get_matching_overviews(
|
|
15
15
|
hits: list[Hit] | list[dict[str, Any]], as_odm: Literal[False] = False
|
|
16
|
-
) -> list[dict[str, Any]]: ...
|
|
16
|
+
) -> list[dict[str, Any]]: ... # codeql[py/ineffectual-statement]
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
@overload
|
|
20
|
-
def get_matching_overviews(
|
|
20
|
+
def get_matching_overviews(
|
|
21
|
+
hits: list[Hit] | list[dict[str, Any]], as_odm: Literal[True]
|
|
22
|
+
) -> list[Overview]: ... # codeql[py/ineffectual-statement]
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
def get_matching_overviews(hits: list[Hit] | list[dict[str, Any]], as_odm=False):
|