howler-api 3.3.0.dev644__tar.gz → 3.3.0.dev649__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-3.3.0.dev644 → howler_api-3.3.0.dev649}/PKG-INFO +1 -1
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/view.py +1 -1
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/collection.py +33 -22
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/store.py +0 -4
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/__init__.py +2 -2
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/pyproject.toml +1 -1
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/README.md +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/actions/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/actions/add_label.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/actions/add_to_bundle.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/actions/change_field.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/actions/demote.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/actions/example_plugin.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/actions/prioritization.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/actions/promote.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/actions/remove_from_bundle.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/actions/remove_label.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/actions/transition.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/base.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/socket.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/action.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/analytic.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/auth.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/clue.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/configs.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/dossier.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/help.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/hit.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/notebook.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/overview.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/search.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/template.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/tool.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/user.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/app.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/common/README.md +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/common/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/common/classification.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/common/classification.yml +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/common/exceptions.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/common/loader.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/common/logging/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/common/logging/audit.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/common/logging/format.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/common/net.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/common/net_static.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/common/random_user.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/common/swagger.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/config.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/cronjobs/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/cronjobs/retention.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/cronjobs/rules.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/cronjobs/view_cleanup.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/README.md +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/bulk.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/constants.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/exceptions.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/howler_store.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/migrations/fix_process.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/operations.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/schemas.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/support/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/support/build.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/support/schemas.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/datastore/types.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/error.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/external/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/external/generate_mitre.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/external/generate_tlds.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/external/reindex_data.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/external/wipe_databases.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/gunicorn_config.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/healthz.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/helper/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/helper/azure.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/helper/discover.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/helper/hit.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/helper/oauth.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/helper/search.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/helper/workflow.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/helper/ws.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/README.md +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/base.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/charter.txt +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/helper.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/howler_enum.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/action.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/analytic.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/aws.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/azure.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/cbs.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/clue.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/config.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/dossier.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/host.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/related.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/gcp.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/hit.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/howler_data.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/lead.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/localized_label.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/overview.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/pivot.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/template.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/user.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/models/view.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/random_data.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/odm/randomizer.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/patched.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/plugins/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/plugins/config.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/README.md +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/events.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/set.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/security/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/security/socket.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/security/utils.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/services/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/services/action_service.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/services/analytic_service.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/services/auth_service.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/services/config_service.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/services/dossier_service.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/services/event_service.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/services/hit_service.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/services/jwt_service.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/services/lucene_service.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/services/notebook_service.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/services/overview_service.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/services/template_service.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/services/user_service.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/utils/__init__.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/utils/annotations.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/utils/chunk.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/utils/dict_utils.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/utils/isotime.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/utils/list_utils.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/utils/lucene.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/utils/path.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/utils/socket_utils.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/utils/str_utils.py +0 -0
- {howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/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
|
|
|
@@ -1658,19 +1665,23 @@ class ESCollection(Generic[ModelType]):
|
|
|
1658
1665
|
|
|
1659
1666
|
# Check if the scroll is finished and close it
|
|
1660
1667
|
if deep_paging_id is not None and new_deep_paging_id is None:
|
|
1661
|
-
|
|
1662
|
-
self.
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1668
|
+
try:
|
|
1669
|
+
self.with_retries(
|
|
1670
|
+
self.datastore.client.clear_scroll,
|
|
1671
|
+
scroll_id=[deep_paging_id],
|
|
1672
|
+
)
|
|
1673
|
+
except elasticsearch.exceptions.NotFoundError:
|
|
1674
|
+
pass
|
|
1666
1675
|
|
|
1667
1676
|
# Check if we can tell from inspection that we have finished the scroll
|
|
1668
1677
|
if new_deep_paging_id is not None and len(ret_data["items"]) < ret_data["rows"]:
|
|
1669
|
-
|
|
1670
|
-
self.
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1678
|
+
try:
|
|
1679
|
+
self.with_retries(
|
|
1680
|
+
self.datastore.client.clear_scroll,
|
|
1681
|
+
scroll_id=[new_deep_paging_id],
|
|
1682
|
+
)
|
|
1683
|
+
except elasticsearch.exceptions.NotFoundError:
|
|
1684
|
+
pass
|
|
1674
1685
|
new_deep_paging_id = None
|
|
1675
1686
|
|
|
1676
1687
|
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
|
|
|
@@ -215,14 +213,12 @@ class ESStore(object):
|
|
|
215
213
|
max_retries=0,
|
|
216
214
|
request_timeout=TRANSPORT_TIMEOUT,
|
|
217
215
|
)
|
|
218
|
-
self.eql = elasticsearch.client.EqlClient(self.client)
|
|
219
216
|
|
|
220
217
|
def close(self):
|
|
221
218
|
self._closed = True
|
|
222
219
|
# Flatten the client object so that attempts to access without reconnecting errors hard
|
|
223
220
|
# But 'cast' it so that mypy and other linters don't think that its normal for client to be None
|
|
224
221
|
self.client = cast(elasticsearch.Elasticsearch, None)
|
|
225
|
-
self.eql = cast(elasticsearch.client.EqlClient, None)
|
|
226
222
|
|
|
227
223
|
def get_hosts(self, safe=False):
|
|
228
224
|
if not safe:
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import json
|
|
4
4
|
import logging
|
|
5
5
|
import time
|
|
6
|
-
from datetime import datetime
|
|
6
|
+
from datetime import datetime, timezone
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
|
|
9
9
|
import redis
|
|
@@ -29,7 +29,7 @@ pool: dict[tuple[str, str, bool], redis.BlockingConnectionPool] = {}
|
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
def now_as_iso():
|
|
32
|
-
s = datetime.
|
|
32
|
+
s = datetime.now(timezone.utc).replace(tzinfo=None).isoformat()
|
|
33
33
|
return f"{s}Z"
|
|
34
34
|
|
|
35
35
|
|
|
@@ -152,7 +152,7 @@ suppress-none-returning = true
|
|
|
152
152
|
[tool.poetry]
|
|
153
153
|
package-mode = true
|
|
154
154
|
name = "howler-api"
|
|
155
|
-
version = "3.3.0.
|
|
155
|
+
version = "3.3.0.dev649"
|
|
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
|
{howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/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
|
{howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/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
|
{howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/queues/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/howler/remote/datatypes/queues/priority.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-3.3.0.dev644 → howler_api-3.3.0.dev649}/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
|