howler-api 4.0.0.dev669__tar.gz → 4.0.0.dev676__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.dev669 → howler_api-4.0.0.dev676}/PKG-INFO +1 -1
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/view.py +1 -1
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/collection.py +33 -22
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/store.py +0 -4
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/__init__.py +2 -2
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/pyproject.toml +1 -1
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/README.md +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/actions/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/actions/add_label.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/actions/change_field.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/actions/demote.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/actions/example_plugin.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/actions/prioritization.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/actions/promote.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/actions/remove_label.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/actions/transition.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/base.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/socket.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/action.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/analytic.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/auth.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/clue.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/configs.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/dossier.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/help.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/hit.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/notebook.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/overview.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/search.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/template.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/tool.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/user.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v2/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v2/case.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v2/ingest.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/api/v2/search.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/app.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/common/README.md +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/common/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/common/classification.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/common/classification.yml +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/common/exceptions.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/common/loader.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/common/logging/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/common/logging/audit.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/common/logging/format.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/common/net.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/common/net_static.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/common/random_user.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/common/swagger.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/config.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/cronjobs/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/cronjobs/retention.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/cronjobs/view_cleanup.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/README.md +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/bulk.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/constants.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/exceptions.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/howler_store.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/migrations/fix_process.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/operations.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/schemas.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/support/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/support/build.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/support/schemas.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/datastore/types.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/error.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/external/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/external/generate_mitre.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/external/generate_tlds.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/external/reindex_data.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/external/wipe_databases.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/gunicorn_config.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/healthz.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/helper/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/helper/azure.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/helper/discover.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/helper/hit.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/helper/oauth.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/helper/search.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/helper/workflow.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/helper/ws.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/README.md +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/base.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/charter.txt +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/constants.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/helper.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/howler_enum.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/action.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/analytic.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/aws.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/azure.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/case.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/cbs.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/clue.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/config.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/dossier.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/host.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/related.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/gcp.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/hit.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/howler_data.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/lead.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/localized_label.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/observable.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/overview.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/pivot.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/record.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/template.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/user.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/models/view.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/random_data.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/odm/randomizer.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/patched.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/plugins/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/plugins/config.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/README.md +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/events.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/set.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/security/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/security/socket.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/security/utils.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/action_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/analytic_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/auth_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/case_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/config_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/docs_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/dossier_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/event_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/hit_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/jwt_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/lucene_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/notebook_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/observable_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/overview_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/search_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/template_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/services/user_service.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/utils/__init__.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/utils/annotations.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/utils/chunk.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/utils/compat.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/utils/dict_utils.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/utils/isotime.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/utils/list_utils.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/utils/lucene.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/utils/path.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/utils/socket_utils.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/utils/str_utils.py +0 -0
- {howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/utils/uid.py +0 -0
|
@@ -261,7 +261,7 @@ def remove_as_favourite(view_id: str, **kwargs):
|
|
|
261
261
|
"""Remove a view from a list of the user's favourites
|
|
262
262
|
|
|
263
263
|
Variables:
|
|
264
|
-
|
|
264
|
+
view_id => The id of the view to remove as a favourite
|
|
265
265
|
|
|
266
266
|
Optional Arguments:
|
|
267
267
|
None
|
|
@@ -270,14 +270,17 @@ class ESCollection(Generic[ModelType]):
|
|
|
270
270
|
if index is None:
|
|
271
271
|
index = self.index_name
|
|
272
272
|
|
|
273
|
+
client = self.datastore.client
|
|
274
|
+
if request_timeout is not None:
|
|
275
|
+
client = client.options(request_timeout=request_timeout)
|
|
276
|
+
|
|
273
277
|
# initial search
|
|
274
278
|
resp = self.with_retries(
|
|
275
|
-
|
|
279
|
+
client.search,
|
|
276
280
|
index=index,
|
|
277
281
|
query=query,
|
|
278
282
|
scroll=scroll,
|
|
279
283
|
size=size,
|
|
280
|
-
request_timeout=request_timeout,
|
|
281
284
|
sort=sort,
|
|
282
285
|
_source=source,
|
|
283
286
|
)
|
|
@@ -305,16 +308,18 @@ class ESCollection(Generic[ModelType]):
|
|
|
305
308
|
|
|
306
309
|
finally:
|
|
307
310
|
if scroll_id:
|
|
308
|
-
|
|
309
|
-
self.
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
)
|
|
313
|
-
if not resp.get("succeeded", False):
|
|
314
|
-
logger.warning(
|
|
315
|
-
f"Could not clear scroll ID {scroll_id}, there is potential "
|
|
316
|
-
"memory leak in you Elastic cluster..."
|
|
311
|
+
try:
|
|
312
|
+
resp = self.with_retries(
|
|
313
|
+
self.datastore.client.clear_scroll,
|
|
314
|
+
scroll_id=[scroll_id],
|
|
317
315
|
)
|
|
316
|
+
if not resp.get("succeeded", False):
|
|
317
|
+
logger.warning(
|
|
318
|
+
f"Could not clear scroll ID {scroll_id}, there is potential "
|
|
319
|
+
"memory leak in your Elastic cluster..."
|
|
320
|
+
)
|
|
321
|
+
except elasticsearch.exceptions.NotFoundError:
|
|
322
|
+
pass
|
|
318
323
|
|
|
319
324
|
def with_retries(self, func, *args, raise_conflicts=False, **kwargs):
|
|
320
325
|
"""This function performs the passed function with the given args and kwargs and reconnect if it fails
|
|
@@ -470,7 +475,9 @@ class ESCollection(Generic[ModelType]):
|
|
|
470
475
|
raise
|
|
471
476
|
|
|
472
477
|
def _safe_index_copy(self, copy_function, src, target, settings=None, min_status="yellow"):
|
|
473
|
-
|
|
478
|
+
options_client = self.datastore.client.options(request_timeout=60)
|
|
479
|
+
timed_function = getattr(options_client.indices, copy_function.__name__)
|
|
480
|
+
ret = timed_function(index=src, target=target, settings=settings)
|
|
474
481
|
if not ret["acknowledged"]:
|
|
475
482
|
raise DataStoreException(f"Failed to create index {target} from {src}.")
|
|
476
483
|
|
|
@@ -1657,19 +1664,23 @@ class ESCollection(Generic[ModelType]):
|
|
|
1657
1664
|
|
|
1658
1665
|
# Check if the scroll is finished and close it
|
|
1659
1666
|
if deep_paging_id is not None and new_deep_paging_id is None:
|
|
1660
|
-
|
|
1661
|
-
self.
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1667
|
+
try:
|
|
1668
|
+
self.with_retries(
|
|
1669
|
+
self.datastore.client.clear_scroll,
|
|
1670
|
+
scroll_id=[deep_paging_id],
|
|
1671
|
+
)
|
|
1672
|
+
except elasticsearch.exceptions.NotFoundError:
|
|
1673
|
+
pass
|
|
1665
1674
|
|
|
1666
1675
|
# Check if we can tell from inspection that we have finished the scroll
|
|
1667
1676
|
if new_deep_paging_id is not None and len(ret_data["items"]) < ret_data["rows"]:
|
|
1668
|
-
|
|
1669
|
-
self.
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1677
|
+
try:
|
|
1678
|
+
self.with_retries(
|
|
1679
|
+
self.datastore.client.clear_scroll,
|
|
1680
|
+
scroll_id=[new_deep_paging_id],
|
|
1681
|
+
)
|
|
1682
|
+
except elasticsearch.exceptions.NotFoundError:
|
|
1683
|
+
pass
|
|
1673
1684
|
new_deep_paging_id = None
|
|
1674
1685
|
|
|
1675
1686
|
if new_deep_paging_id is not None:
|
|
@@ -9,7 +9,6 @@ from typing import Any, Optional, cast
|
|
|
9
9
|
from urllib.parse import urlparse
|
|
10
10
|
|
|
11
11
|
import elasticsearch
|
|
12
|
-
import elasticsearch.client
|
|
13
12
|
|
|
14
13
|
from howler.common.logging.format import HWL_DATE_FORMAT, HWL_LOG_FORMAT
|
|
15
14
|
from howler.datastore.collection import ESCollection
|
|
@@ -138,7 +137,6 @@ class ESStore(object):
|
|
|
138
137
|
max_retries=0,
|
|
139
138
|
request_timeout=TRANSPORT_TIMEOUT,
|
|
140
139
|
)
|
|
141
|
-
self.eql = elasticsearch.client.EqlClient(self.client)
|
|
142
140
|
self.archive_access = archive_access
|
|
143
141
|
self.url_path = "elastic"
|
|
144
142
|
|
|
@@ -218,14 +216,12 @@ class ESStore(object):
|
|
|
218
216
|
max_retries=0,
|
|
219
217
|
request_timeout=TRANSPORT_TIMEOUT,
|
|
220
218
|
)
|
|
221
|
-
self.eql = elasticsearch.client.EqlClient(self.client)
|
|
222
219
|
|
|
223
220
|
def close(self):
|
|
224
221
|
self._closed = True
|
|
225
222
|
# Flatten the client object so that attempts to access without reconnecting errors hard
|
|
226
223
|
# But 'cast' it so that mypy and other linters don't think that its normal for client to be None
|
|
227
224
|
self.client = cast(elasticsearch.Elasticsearch, None)
|
|
228
|
-
self.eql = cast(elasticsearch.client.EqlClient, None)
|
|
229
225
|
|
|
230
226
|
def get_hosts(self, safe=False):
|
|
231
227
|
if not safe:
|
|
@@ -4,7 +4,7 @@ import json
|
|
|
4
4
|
import logging
|
|
5
5
|
import os
|
|
6
6
|
import time
|
|
7
|
-
from datetime import datetime
|
|
7
|
+
from datetime import datetime, timezone
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
|
|
10
10
|
import redis
|
|
@@ -30,7 +30,7 @@ pool: dict[tuple[str, str, bool], redis.BlockingConnectionPool] = {}
|
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
def now_as_iso():
|
|
33
|
-
s = datetime.
|
|
33
|
+
s = datetime.now(timezone.utc).replace(tzinfo=None).isoformat()
|
|
34
34
|
return f"{s}Z"
|
|
35
35
|
|
|
36
36
|
|
|
@@ -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.dev676"
|
|
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
|
{howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/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
|
{howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/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
|
{howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/queues/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/howler/remote/datatypes/queues/priority.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev669 → howler_api-4.0.0.dev676}/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
|
|
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
|