howler-api 4.0.0.dev846__tar.gz → 4.0.0.dev850__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.0.0.dev846 → howler_api-4.0.0.dev850}/PKG-INFO +1 -1
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v2/ingest.py +17 -2
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/base.py +21 -10
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/utils/compat.py +6 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/pyproject.toml +1 -1
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/README.md +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/actions/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/actions/add_label.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/actions/add_to_bundle.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/actions/add_to_case.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/actions/change_field.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/actions/demote.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/actions/example_plugin.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/actions/prioritization.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/actions/promote.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/actions/remove_from_bundle.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/actions/remove_label.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/actions/transition.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/base.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/socket.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/action.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/analytic.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/auth.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/clue.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/configs.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/dossier.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/help.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/hit.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/notebook.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/overview.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/search.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/template.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/tool.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/user.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v1/view.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v2/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v2/case.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/api/v2/search.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/app.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/common/README.md +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/common/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/common/classification.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/common/classification.yml +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/common/exceptions.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/common/loader.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/common/logging/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/common/logging/audit.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/common/logging/format.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/common/net.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/common/net_static.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/common/random_user.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/common/swagger.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/config.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/cronjobs/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/cronjobs/correlation.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/cronjobs/retention.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/cronjobs/view_cleanup.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/README.md +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/bulk.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/collection.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/constants.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/exceptions.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/howler_store.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/migrations/fix_process.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/operations.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/schemas.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/store.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/support/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/support/build.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/support/schemas.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/types.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/error.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/external/README.md +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/external/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/external/generate_mitre.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/external/generate_tlds.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/external/reindex_data.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/external/wipe_databases.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/gunicorn_config.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/healthz.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/helper/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/helper/azure.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/helper/discover.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/helper/hit.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/helper/oauth.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/helper/search.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/helper/workflow.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/helper/ws.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/README.md +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/charter.txt +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/constants.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/helper.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/howler_enum.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/mixins.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/action.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/analytic.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/aws.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/azure.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/case.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/cbs.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/clue.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/config.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/dossier.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/host.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/related.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/gcp.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/hit.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/howler_data.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/lead.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/localized_label.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/observable.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/overview.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/pivot.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/record.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/template.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/user.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/view.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/random_data.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/randomizer.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/patched.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/plugins/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/plugins/config.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/README.md +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/events.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/set.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/security/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/security/socket.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/security/utils.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/action_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/analytic_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/auth_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/bundle_compat_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/case_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/config_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/correlation_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/docs_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/dossier_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/event_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/hit_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/jwt_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/lucene_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/notebook_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/observable_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/overview_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/search_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/template_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/user_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/viewer_service.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/telemetry.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/utils/__init__.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/utils/annotations.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/utils/chunk.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/utils/constants.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/utils/dict_utils.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/utils/isotime.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/utils/list_utils.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/utils/lucene.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/utils/path.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/utils/socket_utils.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/utils/str_utils.py +0 -0
- {howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/utils/uid.py +0 -0
|
@@ -162,8 +162,23 @@ def delete(indexes: str, user: User, **kwargs):
|
|
|
162
162
|
if non_existing_hit_ids := [id for id in ids if all(not ds[index].exists(id) for index in index_list)]:
|
|
163
163
|
return not_found(err=f"Record ids [{','.join(non_existing_hit_ids)}] do not exist.")
|
|
164
164
|
|
|
165
|
-
|
|
166
|
-
|
|
165
|
+
try:
|
|
166
|
+
remaining = set(ids)
|
|
167
|
+
for index in index_list:
|
|
168
|
+
if not remaining:
|
|
169
|
+
break
|
|
170
|
+
|
|
171
|
+
existing = [record_id for record_id in remaining if ds[index].exists(record_id)]
|
|
172
|
+
if not existing:
|
|
173
|
+
continue
|
|
174
|
+
|
|
175
|
+
for record_id in existing:
|
|
176
|
+
ds[index].delete(record_id)
|
|
177
|
+
|
|
178
|
+
remaining -= set(existing)
|
|
179
|
+
ds[index].commit()
|
|
180
|
+
except DataStoreException as e:
|
|
181
|
+
return internal_error(err=str(e))
|
|
167
182
|
|
|
168
183
|
return no_content()
|
|
169
184
|
|
|
@@ -1081,10 +1081,10 @@ class Model:
|
|
|
1081
1081
|
Args:
|
|
1082
1082
|
skip_mappings (bool): Skip over mappings where the real subfield names are unknown.
|
|
1083
1083
|
"""
|
|
1084
|
-
if skip_mappings and
|
|
1084
|
+
if not no_cache and skip_mappings and "_odm_field_cache_skip" in cls.__dict__:
|
|
1085
1085
|
return cls._odm_field_cache_skip
|
|
1086
1086
|
|
|
1087
|
-
if not skip_mappings and
|
|
1087
|
+
if not no_cache and not skip_mappings and "_odm_field_cache" in cls.__dict__:
|
|
1088
1088
|
return cls._odm_field_cache
|
|
1089
1089
|
|
|
1090
1090
|
out = dict()
|
|
@@ -1113,10 +1113,10 @@ class Model:
|
|
|
1113
1113
|
def add_namespace(cls, namespace: str, field: _Field, index=None, store=None, description=None):
|
|
1114
1114
|
recursive_set_name(field, namespace)
|
|
1115
1115
|
|
|
1116
|
-
if
|
|
1116
|
+
if "_odm_field_cache_skip" in cls.__dict__:
|
|
1117
1117
|
cls._odm_field_cache_skip[namespace.rstrip("_")] = field
|
|
1118
1118
|
|
|
1119
|
-
if
|
|
1119
|
+
if "_odm_field_cache" in cls.__dict__:
|
|
1120
1120
|
cls._odm_field_cache[namespace.rstrip("_")] = field
|
|
1121
1121
|
|
|
1122
1122
|
setattr(cls, namespace, field)
|
|
@@ -1131,10 +1131,10 @@ class Model:
|
|
|
1131
1131
|
|
|
1132
1132
|
@classmethod
|
|
1133
1133
|
def remove_namespace(cls, namespace: str):
|
|
1134
|
-
if
|
|
1134
|
+
if "_odm_field_cache_skip" in cls.__dict__:
|
|
1135
1135
|
del cls._odm_field_cache_skip[namespace.rstrip("_")]
|
|
1136
1136
|
|
|
1137
|
-
if
|
|
1137
|
+
if "_odm_field_cache" in cls.__dict__:
|
|
1138
1138
|
del cls._odm_field_cache[namespace.rstrip("_")]
|
|
1139
1139
|
|
|
1140
1140
|
delattr(cls, namespace)
|
|
@@ -1212,7 +1212,7 @@ class Model:
|
|
|
1212
1212
|
include_autogen_note=True,
|
|
1213
1213
|
defaults=None,
|
|
1214
1214
|
url_prefix="/howler/odm/class/",
|
|
1215
|
-
) ->
|
|
1215
|
+
) -> str:
|
|
1216
1216
|
markdown_content = (
|
|
1217
1217
|
(
|
|
1218
1218
|
'??? success "Auto-Generated Documentation"\n '
|
|
@@ -1524,12 +1524,23 @@ def model(index=None, store=None, description=None, id_field=None):
|
|
|
1524
1524
|
|
|
1525
1525
|
def _finish_model(cls):
|
|
1526
1526
|
cls._Model__description = description
|
|
1527
|
-
|
|
1527
|
+
fields = cls.fields()
|
|
1528
1528
|
|
|
1529
|
-
if
|
|
1529
|
+
if id_field is None:
|
|
1530
1530
|
cls._Model__id_field = f"{cls.__name__.lower()}_id"
|
|
1531
|
+
else:
|
|
1532
|
+
if not isinstance(id_field, str):
|
|
1533
|
+
raise HowlerTypeError(f"id_field must be a str, got {type(id_field).__name__}")
|
|
1534
|
+
|
|
1535
|
+
if not FLATTENED_OBJECT_SANITIZER.match(id_field) or id_field in BANNED_FIELDS:
|
|
1536
|
+
raise HowlerValueError(f"Illegal id_field name: {id_field}")
|
|
1537
|
+
|
|
1538
|
+
if id_field not in fields and id_field not in cls.flat_fields():
|
|
1539
|
+
raise HowlerValueError(f"id_field must reference a declared field: {id_field}")
|
|
1540
|
+
|
|
1541
|
+
cls._Model__id_field = id_field
|
|
1531
1542
|
|
|
1532
|
-
for name, field_data in
|
|
1543
|
+
for name, field_data in fields.items():
|
|
1533
1544
|
if not FIELD_SANITIZER.match(name) or name in BANNED_FIELDS:
|
|
1534
1545
|
raise HowlerValueError(f"Illegal variable name: {name}")
|
|
1535
1546
|
|
|
@@ -14,6 +14,12 @@ else:
|
|
|
14
14
|
class StrEnum(str, _Enum): # type: ignore[no-redef]
|
|
15
15
|
"""str + Enum backport for Python < 3.11."""
|
|
16
16
|
|
|
17
|
+
def __str__(self) -> str:
|
|
18
|
+
return str.__str__(self)
|
|
19
|
+
|
|
20
|
+
def __format__(self, format_spec: str) -> str:
|
|
21
|
+
return str.__format__(self, format_spec)
|
|
22
|
+
|
|
17
23
|
# typing_extensions.TypedDict supports Generic[T] mixing on Python < 3.11;
|
|
18
24
|
# the stdlib version does not gain that until 3.11.
|
|
19
25
|
from typing_extensions import NotRequired, TypedDict # noqa: F401
|
|
@@ -152,7 +152,7 @@ suppress-none-returning = true
|
|
|
152
152
|
[tool.poetry]
|
|
153
153
|
package-mode = true
|
|
154
154
|
name = "howler-api"
|
|
155
|
-
version = "4.0.0.
|
|
155
|
+
version = "4.0.0.dev850"
|
|
156
156
|
description = "Howler - API server"
|
|
157
157
|
authors = [
|
|
158
158
|
"Canadian Centre for Cyber Security <howler@cyber.gc.ca>",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/datastore/migrations/fix_process.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/odm/models/ecs/autonomous_system.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/queues/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/queues/priority.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/remote/datatypes/user_quota_tracker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev846 → howler_api-4.0.0.dev850}/howler/services/bundle_compat_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|