howler-api 3.2.0.dev472__tar.gz → 3.2.0.dev475__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.2.0.dev472 → howler_api-3.2.0.dev475}/PKG-INFO +1 -1
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/cronjobs/view_cleanup.py +8 -6
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/collection.py +8 -8
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/migrations/fix_process.py +2 -2
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/analytic_service.py +2 -2
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/dossier_service.py +2 -2
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/overview_service.py +12 -6
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/template_service.py +5 -5
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/user_service.py +4 -4
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/pyproject.toml +1 -1
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/README.md +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/add_label.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/add_to_bundle.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/change_field.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/demote.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/example_plugin.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/prioritization.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/promote.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/remove_from_bundle.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/remove_label.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/transition.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/base.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/socket.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/action.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/analytic.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/auth.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/clue.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/configs.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/dossier.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/help.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/hit.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/notebook.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/overview.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/search.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/template.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/tool.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/user.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/view.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/app.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/README.md +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/classification.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/classification.yml +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/exceptions.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/loader.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/logging/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/logging/audit.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/logging/format.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/net.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/net_static.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/random_user.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/swagger.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/config.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/cronjobs/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/cronjobs/retention.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/cronjobs/rules.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/README.md +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/bulk.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/constants.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/exceptions.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/howler_store.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/operations.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/schemas.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/store.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/support/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/support/build.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/support/schemas.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/types.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/error.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/external/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/external/generate_mitre.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/external/generate_tlds.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/external/reindex_data.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/external/wipe_databases.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/gunicorn_config.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/healthz.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/azure.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/discover.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/hit.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/oauth.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/search.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/workflow.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/ws.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/README.md +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/base.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/charter.txt +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/helper.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/howler_enum.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/action.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/analytic.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/aws.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/azure.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/cbs.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/clue.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/config.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/dossier.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/host.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/related.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/gcp.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/hit.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/howler_data.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/lead.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/localized_label.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/overview.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/pivot.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/template.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/user.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/view.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/random_data.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/randomizer.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/patched.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/plugins/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/plugins/config.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/README.md +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/events.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/set.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/security/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/security/socket.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/security/utils.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/action_service.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/auth_service.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/config_service.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/event_service.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/hit_service.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/jwt_service.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/lucene_service.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/notebook_service.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/__init__.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/annotations.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/chunk.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/dict_utils.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/isotime.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/list_utils.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/lucene.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/path.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/socket_utils.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/str_utils.py +0 -0
- {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/uid.py +0 -0
|
@@ -18,14 +18,16 @@ def execute():
|
|
|
18
18
|
|
|
19
19
|
# Initialize datastore
|
|
20
20
|
ds = datastore()
|
|
21
|
+
|
|
21
22
|
# fetch the first result from user ds (needed to initialize total)
|
|
22
|
-
|
|
23
|
-
total_user_count =
|
|
24
|
-
user_list: List[Any] =
|
|
23
|
+
user_result = ds.user.search("*:*", rows=250, fl="*")
|
|
24
|
+
total_user_count = user_result["total"]
|
|
25
|
+
user_list: List[Any] = user_result["items"]
|
|
26
|
+
|
|
25
27
|
# Do the same thing for the views
|
|
26
|
-
|
|
27
|
-
total_view_count =
|
|
28
|
-
view_list: List[Any] =
|
|
28
|
+
view_result = ds.view.search("*:*", rows=250)
|
|
29
|
+
total_view_count = view_result["total"]
|
|
30
|
+
view_list: List[Any] = view_result["items"]
|
|
29
31
|
view_ids: List[str] = []
|
|
30
32
|
|
|
31
33
|
# Collect all views
|
|
@@ -973,27 +973,27 @@ class ESCollection(Generic[ModelType]):
|
|
|
973
973
|
return self.normalize(data, as_obj=as_obj)
|
|
974
974
|
|
|
975
975
|
@overload
|
|
976
|
-
def get_if_exists(self, key, as_obj: Literal[True], version: Literal[True]) -> tuple[ModelType, str]: ...
|
|
976
|
+
def get_if_exists(self, key: str, as_obj: Literal[True], version: Literal[True]) -> tuple[ModelType, str]: ...
|
|
977
977
|
|
|
978
978
|
@overload
|
|
979
|
-
def get_if_exists(self, key, as_obj: Literal[True], version: Literal[False]) -> ModelType: ...
|
|
979
|
+
def get_if_exists(self, key: str, as_obj: Literal[True], version: Literal[False]) -> ModelType: ...
|
|
980
980
|
|
|
981
981
|
@overload
|
|
982
|
-
def get_if_exists(self, key, as_obj: Literal[True]) -> ModelType: ...
|
|
982
|
+
def get_if_exists(self, key: str, as_obj: Literal[True]) -> ModelType: ...
|
|
983
983
|
|
|
984
984
|
@overload
|
|
985
|
-
def get_if_exists(self, key) -> ModelType: ...
|
|
985
|
+
def get_if_exists(self, key: str) -> ModelType: ...
|
|
986
986
|
|
|
987
987
|
@overload
|
|
988
|
-
def get_if_exists(self, key, as_obj: Literal[False], version: Literal[True]) -> tuple[dict[str, Any], str]: ...
|
|
988
|
+
def get_if_exists(self, key: str, as_obj: Literal[False], version: Literal[True]) -> tuple[dict[str, Any], str]: ...
|
|
989
989
|
|
|
990
990
|
@overload
|
|
991
|
-
def get_if_exists(self, key, as_obj: Literal[False], version: Literal[False]) -> dict[str, Any]: ...
|
|
991
|
+
def get_if_exists(self, key: str, as_obj: Literal[False], version: Literal[False]) -> dict[str, Any]: ...
|
|
992
992
|
|
|
993
993
|
@overload
|
|
994
|
-
def get_if_exists(self, key, as_obj: Literal[False]) -> dict[str, Any]: ...
|
|
994
|
+
def get_if_exists(self, key: str, as_obj: Literal[False]) -> dict[str, Any]: ...
|
|
995
995
|
|
|
996
|
-
def get_if_exists(self, key, as_obj=True, version=False):
|
|
996
|
+
def get_if_exists(self, key: str, as_obj=True, version=False):
|
|
997
997
|
"""Get a document from the datastore but do not retry if not found.
|
|
998
998
|
|
|
999
999
|
Use this more in caching scenarios because eventually consistent database may lead
|
{howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/migrations/fix_process.py
RENAMED
|
@@ -21,9 +21,9 @@ def migrate():
|
|
|
21
21
|
return
|
|
22
22
|
|
|
23
23
|
logger.info(f"We will delete {result['total']} hits. Continue?")
|
|
24
|
-
|
|
24
|
+
prompt_result = input("y/[n]")
|
|
25
25
|
|
|
26
|
-
if
|
|
26
|
+
if prompt_result.lower() != "y":
|
|
27
27
|
logger.warning("Did not receive an OK, stopping")
|
|
28
28
|
return
|
|
29
29
|
|
|
@@ -48,8 +48,8 @@ def get_analytic(id: str, as_odm: Literal[False]) -> dict[str, Any]: ...
|
|
|
48
48
|
|
|
49
49
|
def get_analytic(
|
|
50
50
|
id: str,
|
|
51
|
-
as_odm
|
|
52
|
-
version
|
|
51
|
+
as_odm=False,
|
|
52
|
+
version=False,
|
|
53
53
|
):
|
|
54
54
|
"""Return analytic object as either an ODM or Dict"""
|
|
55
55
|
return datastore().analytic.get_if_exists(key=id, as_obj=as_odm, version=version)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any,
|
|
1
|
+
from typing import Any, Literal, overload
|
|
2
2
|
|
|
3
3
|
from howler.common.loader import datastore
|
|
4
4
|
from howler.common.logging import get_logger
|
|
@@ -10,9 +10,17 @@ from howler.utils.str_utils import sanitize_lucene_query
|
|
|
10
10
|
logger = get_logger(__file__)
|
|
11
11
|
|
|
12
12
|
|
|
13
|
+
@overload
|
|
13
14
|
def get_matching_overviews(
|
|
14
|
-
hits:
|
|
15
|
-
) ->
|
|
15
|
+
hits: list[Hit] | list[dict[str, Any]], as_odm: Literal[False] = False
|
|
16
|
+
) -> list[dict[str, Any]]: ...
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@overload
|
|
20
|
+
def get_matching_overviews(hits: list[Hit] | list[dict[str, Any]], as_odm: Literal[True]) -> list[Overview]: ...
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def get_matching_overviews(hits: list[Hit] | list[dict[str, Any]], as_odm=False):
|
|
16
24
|
"""Generate a list of overviews matching a given list of analytic names from the provided hits.
|
|
17
25
|
|
|
18
26
|
Args:
|
|
@@ -33,12 +41,10 @@ def get_matching_overviews(
|
|
|
33
41
|
return []
|
|
34
42
|
|
|
35
43
|
try:
|
|
36
|
-
|
|
44
|
+
return datastore().overview.search(
|
|
37
45
|
f"analytic:({' OR '.join(analytic_names)})",
|
|
38
46
|
as_obj=as_odm,
|
|
39
47
|
)["items"]
|
|
40
|
-
|
|
41
|
-
return overview_candidates
|
|
42
48
|
except SearchException:
|
|
43
49
|
logger.exception("Exception on analytic matching")
|
|
44
50
|
return []
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any, Literal,
|
|
1
|
+
from typing import Any, Literal, cast, overload
|
|
2
2
|
|
|
3
3
|
from howler.common.loader import datastore
|
|
4
4
|
from howler.common.logging import get_logger
|
|
@@ -12,24 +12,24 @@ logger = get_logger(__file__)
|
|
|
12
12
|
|
|
13
13
|
@overload
|
|
14
14
|
def get_matching_templates(
|
|
15
|
-
hits:
|
|
15
|
+
hits: list[Hit] | list[dict[str, Any]], as_odm: Literal[False] = False, uname: str | None = None
|
|
16
16
|
) -> list[dict[str, Any]]: ...
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
@overload
|
|
20
20
|
def get_matching_templates(
|
|
21
|
-
hits:
|
|
21
|
+
hits: list[Hit] | list[dict[str, Any]], as_odm: Literal[True], uname: str | None = None
|
|
22
22
|
) -> list[Analytic]: ...
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
def get_matching_templates(
|
|
26
|
-
hits:
|
|
26
|
+
hits: list[Hit] | list[dict[str, Any]], as_odm=False, uname: str | None = None
|
|
27
27
|
) -> list[dict[str, Any]] | list[Analytic]:
|
|
28
28
|
"""Generate a list of templates matching a given list of analytic names, and optionally a user.
|
|
29
29
|
|
|
30
30
|
Args:
|
|
31
31
|
hits (list[Hit] | list[dict[str, Any]]]: List of hits, each containing analytic information.
|
|
32
|
-
uname (
|
|
32
|
+
uname (str | None, optional): Username to filter templates by owner. Defaults to None.
|
|
33
33
|
as_odm (bool, optional): If True, return results as ODM objects. If False, return as dicts. Defaults to False.
|
|
34
34
|
|
|
35
35
|
Returns:
|
|
@@ -40,8 +40,8 @@ def get_user(id: str) -> dict[str, Any]: ...
|
|
|
40
40
|
|
|
41
41
|
def get_user(
|
|
42
42
|
id: str,
|
|
43
|
-
as_odm
|
|
44
|
-
version
|
|
43
|
+
as_odm=False,
|
|
44
|
+
version=False,
|
|
45
45
|
):
|
|
46
46
|
"""Return hit object as either an ODM or Dict"""
|
|
47
47
|
return datastore().user.get_if_exists(key=id, as_obj=as_odm, version=version)
|
|
@@ -77,10 +77,10 @@ def convert_user(user: User) -> dict[str, Any]:
|
|
|
77
77
|
|
|
78
78
|
user_data["apikeys"] = [
|
|
79
79
|
(key, value["acl"], value["expiry_date"])
|
|
80
|
-
for key, value in datastore().user.get_if_exists(user
|
|
80
|
+
for key, value in datastore().user.get_if_exists(user.uname).apikeys.items()
|
|
81
81
|
]
|
|
82
82
|
|
|
83
|
-
user_data["avatar"] = datastore().user_avatar.get_if_exists(user
|
|
83
|
+
user_data["avatar"] = datastore().user_avatar.get_if_exists(user.uname)
|
|
84
84
|
user_data["username"] = user_data.pop("uname")
|
|
85
85
|
user_data["is_admin"] = "admin" in user_data["type"]
|
|
86
86
|
user_data["roles"] = list(set(user_data.pop("type")))
|
|
@@ -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.2.0.
|
|
155
|
+
version = "3.2.0.dev475"
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.2.0.dev472 → howler_api-3.2.0.dev475}/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
|
{howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/queues/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/queues/priority.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/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
|