howler-api 3.4.0.dev950__tar.gz → 3.4.0.dev962__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.4.0.dev950 → howler_api-3.4.0.dev962}/PKG-INFO +1 -1
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/collection.py +42 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/host.py +6 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/pyproject.toml +1 -1
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/README.md +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/actions/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/actions/add_label.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/actions/add_to_bundle.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/actions/change_field.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/actions/demote.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/actions/example_plugin.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/actions/prioritization.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/actions/promote.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/actions/remove_from_bundle.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/actions/remove_label.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/actions/transition.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/base.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/socket.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/action.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/analytic.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/auth.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/clue.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/configs.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/dossier.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/help.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/hit.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/notebook.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/overview.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/search.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/template.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/tool.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/user.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/api/v1/view.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/app.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/common/README.md +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/common/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/common/classification.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/common/classification.yml +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/common/exceptions.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/common/loader.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/common/logging/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/common/logging/audit.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/common/logging/format.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/common/net.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/common/net_static.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/common/random_user.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/common/swagger.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/config.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/cronjobs/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/cronjobs/action_queue_worker.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/cronjobs/retention.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/cronjobs/rules.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/cronjobs/view_cleanup.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/README.md +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/bulk.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/constants.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/exceptions.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/howler_store.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/migrations/fix_process.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/operations.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/schemas.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/store.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/support/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/support/build.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/support/schemas.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/datastore/types.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/error.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/external/README.md +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/external/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/external/generate_mitre.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/external/generate_tlds.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/external/reindex_data.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/external/wipe_databases.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/gunicorn_config.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/healthz.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/helper/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/helper/azure.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/helper/discover.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/helper/hit.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/helper/oauth.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/helper/search.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/helper/workflow.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/helper/ws.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/README.md +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/base.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/charter.txt +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/helper.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/howler_enum.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/action.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/analytic.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/aws.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/azure.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/cbs.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/clue.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/config.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/dossier.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/related.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/gcp.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/hit.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/howler_data.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/lead.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/localized_label.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/overview.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/pivot.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/template.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/user.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/models/view.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/random_data.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/odm/randomizer.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/patched.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/plugins/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/plugins/config.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/README.md +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/events.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/set.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/security/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/security/socket.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/security/utils.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/services/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/services/action_service.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/services/analytic_service.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/services/auth_service.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/services/config_service.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/services/dossier_service.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/services/event_service.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/services/hit_service.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/services/jwt_service.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/services/lucene_service.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/services/notebook_service.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/services/overview_service.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/services/template_service.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/services/user_service.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/telemetry.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/utils/__init__.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/utils/annotations.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/utils/chunk.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/utils/compat.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/utils/constants.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/utils/dict_utils.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/utils/isotime.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/utils/list_utils.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/utils/lucene.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/utils/path.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/utils/socket_utils.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/utils/str_utils.py +0 -0
- {howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/utils/uid.py +0 -0
|
@@ -1364,6 +1364,43 @@ class ESCollection(Generic[ModelType]):
|
|
|
1364
1364
|
|
|
1365
1365
|
return res["updated"]
|
|
1366
1366
|
|
|
1367
|
+
def _expand_fl(self, fl: str) -> str:
|
|
1368
|
+
"""Expand wildcard patterns in a field list string using the model's flat_fields.
|
|
1369
|
+
|
|
1370
|
+
For each comma-separated entry in `fl`, if the entry contains a `*`, it is treated
|
|
1371
|
+
as a glob-style wildcard pattern and matched against all fields returned by
|
|
1372
|
+
``flat_fields()``. Entries without wildcards are kept as-is.
|
|
1373
|
+
|
|
1374
|
+
Args:
|
|
1375
|
+
fl: Comma-separated list of field names, optionally containing ``*`` wildcards
|
|
1376
|
+
(e.g. ``"howler.*,event.start"``).
|
|
1377
|
+
|
|
1378
|
+
Returns:
|
|
1379
|
+
A comma-separated string of expanded field names. If no model class is
|
|
1380
|
+
associated with this collection the original ``fl`` string is returned
|
|
1381
|
+
unchanged.
|
|
1382
|
+
"""
|
|
1383
|
+
if not self.model_class or "*" not in fl:
|
|
1384
|
+
return fl
|
|
1385
|
+
|
|
1386
|
+
all_fields = list(self.model_class.flat_fields().keys())
|
|
1387
|
+
expanded: list[str] = []
|
|
1388
|
+
for pattern in fl.split(","):
|
|
1389
|
+
pattern = pattern.strip()
|
|
1390
|
+
if not pattern:
|
|
1391
|
+
# Skip empty entries (e.g. from trailing commas).
|
|
1392
|
+
continue
|
|
1393
|
+
if "*" not in pattern or pattern == "*":
|
|
1394
|
+
# Exact names and the bare '*' (meaning "all fields") are kept as-is.
|
|
1395
|
+
expanded.append(pattern)
|
|
1396
|
+
else:
|
|
1397
|
+
# Convert the glob-style wildcard to a full regex pattern.
|
|
1398
|
+
# Replace '*' with '.*' and escape all other regex special characters.
|
|
1399
|
+
regex = re.compile("^" + re.escape(pattern).replace(r"\*", ".*") + "$")
|
|
1400
|
+
matched = [f for f in all_fields if regex.match(f)]
|
|
1401
|
+
expanded.extend(matched if matched else [pattern])
|
|
1402
|
+
return ",".join(expanded)
|
|
1403
|
+
|
|
1367
1404
|
def _format_output(self, result, fields=None, as_obj=True):
|
|
1368
1405
|
# Getting search document data
|
|
1369
1406
|
extra_fields = result.get("fields", {})
|
|
@@ -1735,6 +1772,7 @@ class ESCollection(Generic[ModelType]):
|
|
|
1735
1772
|
]
|
|
1736
1773
|
|
|
1737
1774
|
if fl:
|
|
1775
|
+
fl = self._expand_fl(fl)
|
|
1738
1776
|
field_list = fl.split(",")
|
|
1739
1777
|
args.append(("field_list", field_list))
|
|
1740
1778
|
else:
|
|
@@ -1847,6 +1885,7 @@ class ESCollection(Generic[ModelType]):
|
|
|
1847
1885
|
filters.append(access_control)
|
|
1848
1886
|
|
|
1849
1887
|
if fl:
|
|
1888
|
+
fl = self._expand_fl(fl)
|
|
1850
1889
|
fl = fl.split(",")
|
|
1851
1890
|
|
|
1852
1891
|
query_expression = {
|
|
@@ -1896,6 +1935,8 @@ class ESCollection(Generic[ModelType]):
|
|
|
1896
1935
|
|
|
1897
1936
|
if not fl:
|
|
1898
1937
|
fl = "howler.id"
|
|
1938
|
+
else:
|
|
1939
|
+
fl = self._expand_fl(fl)
|
|
1899
1940
|
|
|
1900
1941
|
if rows is None:
|
|
1901
1942
|
rows = 5
|
|
@@ -2226,6 +2267,7 @@ class ESCollection(Generic[ModelType]):
|
|
|
2226
2267
|
filters.append("%s:*" % group_field)
|
|
2227
2268
|
|
|
2228
2269
|
if fl:
|
|
2270
|
+
fl = self._expand_fl(fl)
|
|
2229
2271
|
field_list = fl.split(",")
|
|
2230
2272
|
args.append(("field_list", field_list))
|
|
2231
2273
|
else:
|
|
@@ -13,5 +13,11 @@ class Host(odm.Model):
|
|
|
13
13
|
ip: list[str] = odm.List(odm.IP(), default=[], description="Host ip addresses.")
|
|
14
14
|
mac: list[str] = odm.List(odm.Keyword(), default=[], description="Host MAC addresses.")
|
|
15
15
|
name: Optional[str] = odm.Optional(odm.Keyword(description="Name of the host."))
|
|
16
|
+
hostname: Optional[str] = odm.Optional(
|
|
17
|
+
odm.Keyword(
|
|
18
|
+
description="Hostname of the host. It normally contains what the hostname "
|
|
19
|
+
"command returns on the host machine"
|
|
20
|
+
)
|
|
21
|
+
)
|
|
16
22
|
domain: Optional[str] = odm.Optional(odm.Keyword(description="Domain the host is a member of."))
|
|
17
23
|
type: Optional[str] = odm.Optional(odm.Keyword(description="As described by CSP."))
|
|
@@ -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.4.0.
|
|
155
|
+
version = "3.4.0.dev962"
|
|
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
|
{howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/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-3.4.0.dev950 → howler_api-3.4.0.dev962}/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.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/queues/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/howler/remote/datatypes/queues/priority.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-3.4.0.dev950 → howler_api-3.4.0.dev962}/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
|