howler-api 4.1.0.dev1643__tar.gz → 4.1.0.dev1654__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.
Files changed (239) hide show
  1. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/PKG-INFO +2 -2
  2. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/collection.py +47 -25
  3. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/mixins.py +6 -2
  4. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/action_service.py +13 -7
  5. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/analytic_service.py +15 -7
  6. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/case_service.py +18 -10
  7. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/dossier_service.py +15 -7
  8. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/event_service.py +11 -7
  9. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/hit_service.py +15 -9
  10. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/overview_service.py +4 -2
  11. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/template_service.py +2 -2
  12. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/user_service.py +14 -6
  13. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/chunk.py +3 -3
  14. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/pyproject.toml +2 -2
  15. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/README.md +0 -0
  16. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/__init__.py +0 -0
  17. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/actions/__init__.py +0 -0
  18. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/actions/add_label.py +0 -0
  19. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/actions/add_to_bundle.py +0 -0
  20. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/actions/add_to_case.py +0 -0
  21. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/actions/change_field.py +0 -0
  22. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/actions/demote.py +0 -0
  23. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/actions/example_plugin.py +0 -0
  24. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/actions/prioritization.py +0 -0
  25. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/actions/promote.py +0 -0
  26. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/actions/remove_from_bundle.py +0 -0
  27. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/actions/remove_label.py +0 -0
  28. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/actions/transition.py +0 -0
  29. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/__init__.py +0 -0
  30. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/base.py +0 -0
  31. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/socket.py +0 -0
  32. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/__init__.py +0 -0
  33. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/action.py +0 -0
  34. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/analytic.py +0 -0
  35. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/auth.py +0 -0
  36. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/clue.py +0 -0
  37. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/configs.py +0 -0
  38. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/dossier.py +0 -0
  39. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/help.py +0 -0
  40. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/hit.py +0 -0
  41. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/notebook.py +0 -0
  42. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/overview.py +0 -0
  43. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/search.py +0 -0
  44. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/template.py +0 -0
  45. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/tool.py +0 -0
  46. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/user.py +0 -0
  47. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/utils/__init__.py +0 -0
  48. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/utils/etag.py +0 -0
  49. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/utils/params.py +0 -0
  50. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/utils/permission_helper.py +0 -0
  51. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v1/view.py +0 -0
  52. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v2/__init__.py +0 -0
  53. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v2/case.py +0 -0
  54. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v2/fuzzy.py +0 -0
  55. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v2/ingest.py +0 -0
  56. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/api/v2/search.py +0 -0
  57. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/app.py +0 -0
  58. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/common/README.md +0 -0
  59. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/common/__init__.py +0 -0
  60. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/common/classification.py +0 -0
  61. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/common/classification.yml +0 -0
  62. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/common/exceptions.py +0 -0
  63. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/common/loader.py +0 -0
  64. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/common/logging/__init__.py +0 -0
  65. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/common/logging/audit.py +0 -0
  66. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/common/logging/format.py +0 -0
  67. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/common/net.py +0 -0
  68. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/common/net_static.py +0 -0
  69. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/common/random_user.py +0 -0
  70. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/common/swagger.py +0 -0
  71. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/config.py +0 -0
  72. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/cronjobs/__init__.py +0 -0
  73. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/cronjobs/action_queue_worker.py +0 -0
  74. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/cronjobs/correlation.py +0 -0
  75. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/cronjobs/retention.py +0 -0
  76. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/cronjobs/view_cleanup.py +0 -0
  77. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/README.md +0 -0
  78. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/__init__.py +0 -0
  79. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/bulk.py +0 -0
  80. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/constants.py +0 -0
  81. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/exceptions.py +0 -0
  82. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/howler_store.py +0 -0
  83. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/migrations/__init__.py +0 -0
  84. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/migrations/action_owner.py +0 -0
  85. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/migrations/base.py +0 -0
  86. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/migrations/fix_process.py +0 -0
  87. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/migrations/runner.py +0 -0
  88. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/operations.py +0 -0
  89. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/schemas.py +0 -0
  90. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/store.py +0 -0
  91. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/support/__init__.py +0 -0
  92. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/support/build.py +0 -0
  93. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/support/schemas.py +0 -0
  94. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/types.py +0 -0
  95. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/datastore/utils.py +0 -0
  96. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/error.py +0 -0
  97. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/external/README.md +0 -0
  98. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/external/__init__.py +0 -0
  99. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/external/check_duplicates.py +0 -0
  100. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/external/generate_mitre.py +0 -0
  101. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/external/generate_sigma_rules.py +0 -0
  102. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/external/generate_tlds.py +0 -0
  103. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/external/reindex_data.py +0 -0
  104. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/external/run_migrations.py +0 -0
  105. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/external/wipe_databases.py +0 -0
  106. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/gunicorn_config.py +0 -0
  107. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/healthz.py +0 -0
  108. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/helper/__init__.py +0 -0
  109. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/helper/azure.py +0 -0
  110. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/helper/discover.py +0 -0
  111. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/helper/hit.py +0 -0
  112. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/helper/oauth.py +0 -0
  113. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/helper/search.py +0 -0
  114. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/helper/workflow.py +0 -0
  115. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/helper/ws.py +0 -0
  116. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/README.md +0 -0
  117. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/__init__.py +0 -0
  118. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/base.py +0 -0
  119. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/charter.txt +0 -0
  120. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/constants.py +0 -0
  121. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/helper.py +0 -0
  122. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/howler_enum.py +0 -0
  123. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/__init__.py +0 -0
  124. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/action.py +0 -0
  125. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/analytic.py +0 -0
  126. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/assemblyline.py +0 -0
  127. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/aws.py +0 -0
  128. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/azure.py +0 -0
  129. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/case.py +0 -0
  130. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/cbs.py +0 -0
  131. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/clue.py +0 -0
  132. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/config.py +0 -0
  133. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/dossier.py +0 -0
  134. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/__init__.py +0 -0
  135. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/agent.py +0 -0
  136. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/autonomous_system.py +0 -0
  137. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/client.py +0 -0
  138. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/cloud.py +0 -0
  139. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/code_signature.py +0 -0
  140. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/container.py +0 -0
  141. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/dns.py +0 -0
  142. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/egress.py +0 -0
  143. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/elf.py +0 -0
  144. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/email.py +0 -0
  145. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/error.py +0 -0
  146. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/event.py +0 -0
  147. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/faas.py +0 -0
  148. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/file.py +0 -0
  149. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/geo.py +0 -0
  150. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/group.py +0 -0
  151. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/hash.py +0 -0
  152. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/host.py +0 -0
  153. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/http.py +0 -0
  154. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/ingress.py +0 -0
  155. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/interface.py +0 -0
  156. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/network.py +0 -0
  157. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/observer.py +0 -0
  158. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/organization.py +0 -0
  159. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/os.py +0 -0
  160. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/pe.py +0 -0
  161. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/process.py +0 -0
  162. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/registry.py +0 -0
  163. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/related.py +0 -0
  164. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/rule.py +0 -0
  165. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/server.py +0 -0
  166. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/threat.py +0 -0
  167. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/tls.py +0 -0
  168. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/url.py +0 -0
  169. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/user.py +0 -0
  170. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/user_agent.py +0 -0
  171. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ecs/vulnerability.py +0 -0
  172. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/event.py +0 -0
  173. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/gcp.py +0 -0
  174. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/hit.py +0 -0
  175. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/howler_data.py +0 -0
  176. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/lead.py +0 -0
  177. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/localized_label.py +0 -0
  178. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/log.py +0 -0
  179. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/migration.py +0 -0
  180. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/overview.py +0 -0
  181. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/ownership.py +0 -0
  182. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/permission_request.py +0 -0
  183. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/pivot.py +0 -0
  184. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/record.py +0 -0
  185. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/template.py +0 -0
  186. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/user.py +0 -0
  187. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/models/view.py +0 -0
  188. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/random_data.py +0 -0
  189. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/odm/randomizer.py +0 -0
  190. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/patched.py +0 -0
  191. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/plugins/__init__.py +0 -0
  192. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/plugins/config.py +0 -0
  193. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/remote/__init__.py +0 -0
  194. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/remote/datatypes/README.md +0 -0
  195. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/remote/datatypes/__init__.py +0 -0
  196. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/remote/datatypes/counters.py +0 -0
  197. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/remote/datatypes/events.py +0 -0
  198. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/remote/datatypes/hash.py +0 -0
  199. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/remote/datatypes/lock.py +0 -0
  200. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/remote/datatypes/queues/__init__.py +0 -0
  201. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/remote/datatypes/queues/comms.py +0 -0
  202. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/remote/datatypes/queues/multi.py +0 -0
  203. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/remote/datatypes/queues/named.py +0 -0
  204. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/remote/datatypes/queues/priority.py +0 -0
  205. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/remote/datatypes/set.py +0 -0
  206. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/remote/datatypes/user_quota_tracker.py +0 -0
  207. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/security/__init__.py +0 -0
  208. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/security/login.py +0 -0
  209. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/security/socket.py +0 -0
  210. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/security/utils.py +0 -0
  211. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/__init__.py +0 -0
  212. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/auth_service.py +0 -0
  213. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/bundle_compat_service.py +0 -0
  214. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/comms_service.py +0 -0
  215. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/config_service.py +0 -0
  216. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/correlation_service.py +0 -0
  217. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/docs_service.py +0 -0
  218. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/fuzzy_service.py +0 -0
  219. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/jwt_service.py +0 -0
  220. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/lucene_service.py +0 -0
  221. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/notebook_service.py +0 -0
  222. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/permission_service.py +0 -0
  223. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/search_service.py +0 -0
  224. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/services/viewer_service.py +0 -0
  225. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/telemetry.py +0 -0
  226. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/__init__.py +0 -0
  227. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/annotations.py +0 -0
  228. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/compat.py +0 -0
  229. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/constants.py +0 -0
  230. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/dict_utils.py +0 -0
  231. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/indexes.py +0 -0
  232. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/isotime.py +0 -0
  233. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/list_utils.py +0 -0
  234. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/lucene.py +0 -0
  235. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/net_utils.py +0 -0
  236. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/path.py +0 -0
  237. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/socket_utils.py +0 -0
  238. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/str_utils.py +0 -0
  239. {howler_api-4.1.0.dev1643 → howler_api-4.1.0.dev1654}/howler/utils/uid.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: howler-api
3
- Version: 4.1.0.dev1643
3
+ Version: 4.1.0.dev1654
4
4
  Summary: Howler - API server
5
5
  License: MIT
6
6
  Keywords: howler,alerting,gc,canada,cse-cst,cse,cst,cyber,cccs
@@ -43,7 +43,7 @@ Requires-Dist: prometheus-client (==0.26.0)
43
43
  Requires-Dist: pydantic (>=2.11.4,<3.0.0)
44
44
  Requires-Dist: pydantic-settings[yaml] (>=2.9.1,<3.0.0)
45
45
  Requires-Dist: pydash (>=8.0.5,<9.0.0)
46
- Requires-Dist: pyjwt (==2.14.0)
46
+ Requires-Dist: pyjwt (==2.15.0)
47
47
  Requires-Dist: pysigma (==0.11.23)
48
48
  Requires-Dist: pysigma-backend-elasticsearch (>=1.1.2,<2.0.0)
49
49
  Requires-Dist: python-baseconv (==1.2.2)
@@ -1210,13 +1210,15 @@ class ESCollection(Generic[ModelType]):
1210
1210
  return out
1211
1211
 
1212
1212
  @overload
1213
- def normalize(self: Self, data) -> ModelType | None: ...
1213
+ def normalize(self: Self, data) -> ModelType | None: ... # codeql[py/ineffectual-statement]
1214
1214
 
1215
1215
  @overload
1216
- def normalize(self: Self, data, as_obj: Literal[True]) -> ModelType | None: ...
1216
+ def normalize(self: Self, data, as_obj: Literal[True]) -> ModelType | None: ... # codeql[py/ineffectual-statement]
1217
1217
 
1218
1218
  @overload
1219
- def normalize(self: Self, data, as_obj: Literal[False]) -> dict[str, Any] | None: ...
1219
+ def normalize(
1220
+ self: Self, data, as_obj: Literal[False]
1221
+ ) -> dict[str, Any] | None: ... # codeql[py/ineffectual-statement]
1220
1222
 
1221
1223
  def normalize(self: Self, data, as_obj=True):
1222
1224
  """Normalize the data using the model class
@@ -1285,10 +1287,14 @@ class ESCollection(Generic[ModelType]):
1285
1287
  raise elasticsearch.exceptions.NotFoundError(f"Document with id {key} not found", meta, result)
1286
1288
 
1287
1289
  @overload
1288
- def _get(self: Self, key, retries, version: Literal[False]) -> dict[str, Any]: ...
1290
+ def _get(
1291
+ self: Self, key, retries, version: Literal[False]
1292
+ ) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
1289
1293
 
1290
1294
  @overload
1291
- def _get(self: Self, key, retries, version: Literal[True]) -> tuple[dict[str, Any], str]: ...
1295
+ def _get(
1296
+ self: Self, key, retries, version: Literal[True]
1297
+ ) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
1292
1298
 
1293
1299
  def _get(self: Self, key, retries, version=False):
1294
1300
  """Versioned get-save for atomic update has two paths:
@@ -1368,25 +1374,33 @@ class ESCollection(Generic[ModelType]):
1368
1374
  raise DataStoreException(f"Invalid version token for {self.name}: {version!r}")
1369
1375
 
1370
1376
  @overload
1371
- def get(self: Self, key, as_obj: Literal[True], version: Literal[True]) -> tuple[ModelType | None, str]: ...
1377
+ def get(
1378
+ self: Self, key, as_obj: Literal[True], version: Literal[True]
1379
+ ) -> tuple[ModelType | None, str]: ... # codeql[py/ineffectual-statement]
1372
1380
 
1373
1381
  @overload
1374
- def get(self: Self, key, as_obj: Literal[True], version: Literal[False]) -> ModelType | None: ...
1382
+ def get(
1383
+ self: Self, key, as_obj: Literal[True], version: Literal[False]
1384
+ ) -> ModelType | None: ... # codeql[py/ineffectual-statement]
1375
1385
 
1376
1386
  @overload
1377
- def get(self: Self, key, as_obj: Literal[True]) -> ModelType | None: ...
1387
+ def get(self: Self, key, as_obj: Literal[True]) -> ModelType | None: ... # codeql[py/ineffectual-statement]
1378
1388
 
1379
1389
  @overload
1380
- def get(self: Self, key) -> ModelType | None: ...
1390
+ def get(self: Self, key) -> ModelType | None: ... # codeql[py/ineffectual-statement]
1381
1391
 
1382
1392
  @overload
1383
- def get(self: Self, key, as_obj: Literal[False], version: Literal[True]) -> tuple[dict[str, Any] | None, str]: ...
1393
+ def get(
1394
+ self: Self, key, as_obj: Literal[False], version: Literal[True]
1395
+ ) -> tuple[dict[str, Any] | None, str]: ... # codeql[py/ineffectual-statement]
1384
1396
 
1385
1397
  @overload
1386
- def get(self: Self, key, as_obj: Literal[False], version: Literal[False]) -> dict[str, Any] | None: ...
1398
+ def get(
1399
+ self: Self, key, as_obj: Literal[False], version: Literal[False]
1400
+ ) -> dict[str, Any] | None: ... # codeql[py/ineffectual-statement]
1387
1401
 
1388
1402
  @overload
1389
- def get(self: Self, key, as_obj: Literal[False]) -> dict[str, Any] | None: ...
1403
+ def get(self: Self, key, as_obj: Literal[False]) -> dict[str, Any] | None: ... # codeql[py/ineffectual-statement]
1390
1404
 
1391
1405
  def get(self: Self, key, as_obj=True, version=False):
1392
1406
  """Get a document from the datastore, retry a few times if not found and normalize the
@@ -1407,27 +1421,35 @@ class ESCollection(Generic[ModelType]):
1407
1421
  return self.normalize(data, as_obj=as_obj)
1408
1422
 
1409
1423
  @overload
1410
- def get_if_exists(self: Self, key: str, as_obj: Literal[True], version: Literal[True]) -> tuple[ModelType, str]: ...
1424
+ def get_if_exists(
1425
+ self: Self, key: str, as_obj: Literal[True], version: Literal[True]
1426
+ ) -> tuple[ModelType, str]: ... # codeql[py/ineffectual-statement]
1411
1427
 
1412
1428
  @overload
1413
- def get_if_exists(self: Self, key: str, as_obj: Literal[True], version: Literal[False]) -> ModelType: ...
1429
+ def get_if_exists(
1430
+ self: Self, key: str, as_obj: Literal[True], version: Literal[False]
1431
+ ) -> ModelType: ... # codeql[py/ineffectual-statement]
1414
1432
 
1415
1433
  @overload
1416
- def get_if_exists(self: Self, key: str, as_obj: Literal[True]) -> ModelType: ...
1434
+ def get_if_exists(self: Self, key: str, as_obj: Literal[True]) -> ModelType: ... # codeql[py/ineffectual-statement]
1417
1435
 
1418
1436
  @overload
1419
- def get_if_exists(self: Self, key: str) -> ModelType: ...
1437
+ def get_if_exists(self: Self, key: str) -> ModelType: ... # codeql[py/ineffectual-statement]
1420
1438
 
1421
1439
  @overload
1422
1440
  def get_if_exists(
1423
1441
  self: Self, key: str, as_obj: Literal[False], version: Literal[True]
1424
- ) -> tuple[dict[str, Any], str]: ...
1442
+ ) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
1425
1443
 
1426
1444
  @overload
1427
- def get_if_exists(self: Self, key: str, as_obj: Literal[False], version: Literal[False]) -> dict[str, Any]: ...
1445
+ def get_if_exists(
1446
+ self: Self, key: str, as_obj: Literal[False], version: Literal[False]
1447
+ ) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
1428
1448
 
1429
1449
  @overload
1430
- def get_if_exists(self: Self, key: str, as_obj: Literal[False]) -> dict[str, Any]: ...
1450
+ def get_if_exists(
1451
+ self: Self, key: str, as_obj: Literal[False]
1452
+ ) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
1431
1453
 
1432
1454
  def get_if_exists(self: Self, key: str, as_obj=True, version=False):
1433
1455
  """Get a document from the datastore but do not retry if not found.
@@ -2095,7 +2117,7 @@ class ESCollection(Generic[ModelType]):
2095
2117
  script_fields: list[str] = [],
2096
2118
  *,
2097
2119
  aggregations: None = None,
2098
- ) -> SearchResult[ModelType]: ...
2120
+ ) -> SearchResult[ModelType]: ... # codeql[py/ineffectual-statement]
2099
2121
 
2100
2122
  @overload
2101
2123
  def search(
@@ -2114,7 +2136,7 @@ class ESCollection(Generic[ModelType]):
2114
2136
  script_fields: list[str] = [],
2115
2137
  *,
2116
2138
  aggregations: None = None,
2117
- ) -> SearchResult[dict[str, typing.Any]]: ...
2139
+ ) -> SearchResult[dict[str, typing.Any]]: ... # codeql[py/ineffectual-statement]
2118
2140
 
2119
2141
  @overload
2120
2142
  def search(
@@ -2133,7 +2155,7 @@ class ESCollection(Generic[ModelType]):
2133
2155
  script_fields: list[str] = [],
2134
2156
  *,
2135
2157
  aggregations: list[tuple[str, dict]],
2136
- ) -> AggSearchResult[ModelType]: ...
2158
+ ) -> AggSearchResult[ModelType]: ... # codeql[py/ineffectual-statement]
2137
2159
 
2138
2160
  @overload
2139
2161
  def search(
@@ -2152,7 +2174,7 @@ class ESCollection(Generic[ModelType]):
2152
2174
  script_fields: list[str] = [],
2153
2175
  *,
2154
2176
  aggregations: list[tuple[str, dict]],
2155
- ) -> AggSearchResult[dict[str, typing.Any]]: ...
2177
+ ) -> AggSearchResult[dict[str, typing.Any]]: ... # codeql[py/ineffectual-statement]
2156
2178
 
2157
2179
  def search(
2158
2180
  self: Self,
@@ -2316,7 +2338,7 @@ class ESCollection(Generic[ModelType]):
2316
2338
  item_buffer_size: int = 200,
2317
2339
  *,
2318
2340
  as_obj: Literal[True] = True,
2319
- ) -> typing.Generator[ModelType, None, None]: ...
2341
+ ) -> typing.Generator[ModelType, None, None]: ... # codeql[py/ineffectual-statement]
2320
2342
 
2321
2343
  @overload
2322
2344
  def stream_search(
@@ -2328,7 +2350,7 @@ class ESCollection(Generic[ModelType]):
2328
2350
  item_buffer_size: int = 200,
2329
2351
  *,
2330
2352
  as_obj: Literal[False],
2331
- ) -> typing.Generator[dict[str, typing.Any], None, None]: ...
2353
+ ) -> typing.Generator[dict[str, typing.Any], None, None]: ... # codeql[py/ineffectual-statement]
2332
2354
 
2333
2355
  def stream_search(
2334
2356
  self: Self,
@@ -29,10 +29,14 @@ class _ObjectsDescriptor(Generic[ModelType]):
29
29
  """
30
30
 
31
31
  @overload
32
- def __get__(self: Self, obj: None, objtype: type[ModelType]) -> ESCollection[ModelType]: ...
32
+ def __get__(
33
+ self: Self, obj: None, objtype: type[ModelType]
34
+ ) -> ESCollection[ModelType]: ... # codeql[py/ineffectual-statement]
33
35
 
34
36
  @overload
35
- def __get__(self: Self, obj: ModelType, objtype: type[ModelType]) -> ESCollection[ModelType]: ...
37
+ def __get__(
38
+ self: Self, obj: ModelType, objtype: type[ModelType]
39
+ ) -> ESCollection[ModelType]: ... # codeql[py/ineffectual-statement]
36
40
 
37
41
  def __get__(self, obj: ModelType | None, objtype: type[ModelType] | None = None) -> ESCollection[ModelType]:
38
42
  """Return the ESCollection for the owner class.
@@ -38,31 +38,37 @@ _action_queues: dict[str, NamedQueue[TriggeredAction]] = {}
38
38
  @overload
39
39
  def get_action(
40
40
  id: str, as_odm: Literal[True], version: Literal[True], user: User | None = None
41
- ) -> tuple[Action, str]: ...
41
+ ) -> tuple[Action, str]: ... # codeql[py/ineffectual-statement]
42
42
 
43
43
 
44
44
  @overload
45
- def get_action(id: str, as_odm: Literal[True], version: Literal[False]) -> Action: ...
45
+ def get_action(
46
+ id: str, as_odm: Literal[True], version: Literal[False]
47
+ ) -> Action: ... # codeql[py/ineffectual-statement]
46
48
 
47
49
 
48
50
  @overload
49
- def get_action(id: str, as_odm: Literal[True]) -> Action: ...
51
+ def get_action(id: str, as_odm: Literal[True]) -> Action: ... # codeql[py/ineffectual-statement]
50
52
 
51
53
 
52
54
  @overload
53
- def get_action(id: str) -> Action: ...
55
+ def get_action(id: str) -> Action: ... # codeql[py/ineffectual-statement]
54
56
 
55
57
 
56
58
  @overload
57
- def get_action(id: str, as_odm: Literal[False], version: Literal[True]) -> tuple[dict[str, Any], str]: ...
59
+ def get_action(
60
+ id: str, as_odm: Literal[False], version: Literal[True]
61
+ ) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
58
62
 
59
63
 
60
64
  @overload
61
- def get_action(id: str, as_odm: Literal[False], version: Literal[False]) -> dict[str, Any]: ...
65
+ def get_action(
66
+ id: str, as_odm: Literal[False], version: Literal[False]
67
+ ) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
62
68
 
63
69
 
64
70
  @overload
65
- def get_action(id: str, as_odm: Literal[False]) -> dict[str, Any]: ...
71
+ def get_action(id: str, as_odm: Literal[False]) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
66
72
 
67
73
 
68
74
  def get_action(id: str, as_odm=False, version=False, user: User | None = None):
@@ -19,31 +19,39 @@ def does_analytic_exist(analytic_id: str) -> bool:
19
19
 
20
20
 
21
21
  @overload
22
- def get_analytic(id: str, as_odm: Literal[True], version: Literal[True]) -> tuple[Analytic, str]: ...
22
+ def get_analytic(
23
+ id: str, as_odm: Literal[True], version: Literal[True]
24
+ ) -> tuple[Analytic, str]: ... # codeql[py/ineffectual-statement]
23
25
 
24
26
 
25
27
  @overload
26
- def get_analytic(id: str, as_odm: Literal[True], version: Literal[False]) -> Analytic: ...
28
+ def get_analytic(
29
+ id: str, as_odm: Literal[True], version: Literal[False]
30
+ ) -> Analytic: ... # codeql[py/ineffectual-statement]
27
31
 
28
32
 
29
33
  @overload
30
- def get_analytic(id: str, as_odm: Literal[True]) -> Analytic: ...
34
+ def get_analytic(id: str, as_odm: Literal[True]) -> Analytic: ... # codeql[py/ineffectual-statement]
31
35
 
32
36
 
33
37
  @overload
34
- def get_analytic(id: str) -> Analytic: ...
38
+ def get_analytic(id: str) -> Analytic: ... # codeql[py/ineffectual-statement]
35
39
 
36
40
 
37
41
  @overload
38
- def get_analytic(id: str, as_odm: Literal[False], version: Literal[True]) -> tuple[dict[str, Any], str]: ...
42
+ def get_analytic(
43
+ id: str, as_odm: Literal[False], version: Literal[True]
44
+ ) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
39
45
 
40
46
 
41
47
  @overload
42
- def get_analytic(id: str, as_odm: Literal[False], version: Literal[False]) -> dict[str, Any]: ...
48
+ def get_analytic(
49
+ id: str, as_odm: Literal[False], version: Literal[False]
50
+ ) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
43
51
 
44
52
 
45
53
  @overload
46
- def get_analytic(id: str, as_odm: Literal[False]) -> dict[str, Any]: ...
54
+ def get_analytic(id: str, as_odm: Literal[False]) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
47
55
 
48
56
 
49
57
  def get_analytic(
@@ -39,35 +39,43 @@ CREATED_CASES = Counter(f"{APP_NAME.replace('-', '_')}_created_cases_total", "Th
39
39
  @overload
40
40
  def get_case(
41
41
  id: str, as_odm: Literal[True], version: Literal[True], user: User | None = None
42
- ) -> tuple[Case | None, str]: ...
42
+ ) -> tuple[Case | None, str]: ... # codeql[py/ineffectual-statement]
43
43
 
44
44
 
45
45
  @overload
46
- def get_case(id: str, as_odm: Literal[True], version: Literal[False]) -> Case | None: ...
46
+ def get_case(
47
+ id: str, as_odm: Literal[True], version: Literal[False]
48
+ ) -> Case | None: ... # codeql[py/ineffectual-statement]
47
49
 
48
50
 
49
51
  @overload
50
- def get_case(id: str, as_odm: Literal[True], version: Literal[False], user: User | None = None) -> Case | None: ...
52
+ def get_case(
53
+ id: str, as_odm: Literal[True], version: Literal[False], user: User | None = None
54
+ ) -> Case | None: ... # codeql[py/ineffectual-statement]
51
55
 
52
56
 
53
57
  @overload
54
- def get_case(id: str, as_odm: Literal[True]) -> Case | None: ...
58
+ def get_case(id: str, as_odm: Literal[True]) -> Case | None: ... # codeql[py/ineffectual-statement]
55
59
 
56
60
 
57
61
  @overload
58
- def get_case(id: str) -> Case | None: ...
62
+ def get_case(id: str) -> Case | None: ... # codeql[py/ineffectual-statement]
59
63
 
60
64
 
61
65
  @overload
62
- def get_case(id: str, as_odm: Literal[False], version: Literal[True]) -> tuple[dict[str, Any] | None, str]: ...
66
+ def get_case(
67
+ id: str, as_odm: Literal[False], version: Literal[True]
68
+ ) -> tuple[dict[str, Any] | None, str]: ... # codeql[py/ineffectual-statement]
63
69
 
64
70
 
65
71
  @overload
66
- def get_case(id: str, as_odm: Literal[False], version: Literal[False]) -> dict[str, Any] | None: ...
72
+ def get_case(
73
+ id: str, as_odm: Literal[False], version: Literal[False]
74
+ ) -> dict[str, Any] | None: ... # codeql[py/ineffectual-statement]
67
75
 
68
76
 
69
77
  @overload
70
- def get_case(id: str, as_odm: Literal[False]) -> dict[str, Any] | None: ...
78
+ def get_case(id: str, as_odm: Literal[False]) -> dict[str, Any] | None: ... # codeql[py/ineffectual-statement]
71
79
 
72
80
 
73
81
  def get_case(id: str, as_odm=False, version=False, user: User | None = None):
@@ -497,7 +505,7 @@ def append_case_item(
497
505
  item_name: str | None = None,
498
506
  *,
499
507
  user: User | None = None,
500
- ) -> Case: ...
508
+ ) -> Case: ... # codeql[py/ineffectual-statement]
501
509
 
502
510
 
503
511
  @overload
@@ -510,7 +518,7 @@ def append_case_item(
510
518
  item_name: str | None = ...,
511
519
  *,
512
520
  user: User | None = None,
513
- ) -> Case: ...
521
+ ) -> Case: ... # codeql[py/ineffectual-statement]
514
522
 
515
523
 
516
524
  def append_case_item( # noqa: C901
@@ -55,31 +55,39 @@ def exists(dossier_id: str) -> bool:
55
55
 
56
56
 
57
57
  @overload
58
- def get_dossier(id: str, as_odm: Literal[True], version: Literal[True]) -> tuple[Dossier, str]: ...
58
+ def get_dossier(
59
+ id: str, as_odm: Literal[True], version: Literal[True]
60
+ ) -> tuple[Dossier, str]: ... # codeql[py/ineffectual-statement]
59
61
 
60
62
 
61
63
  @overload
62
- def get_dossier(id: str, as_odm: Literal[True], version: Literal[False]) -> Dossier: ...
64
+ def get_dossier(
65
+ id: str, as_odm: Literal[True], version: Literal[False]
66
+ ) -> Dossier: ... # codeql[py/ineffectual-statement]
63
67
 
64
68
 
65
69
  @overload
66
- def get_dossier(id: str, as_odm: Literal[True]) -> Dossier: ...
70
+ def get_dossier(id: str, as_odm: Literal[True]) -> Dossier: ... # codeql[py/ineffectual-statement]
67
71
 
68
72
 
69
73
  @overload
70
- def get_dossier(id: str) -> Dossier: ...
74
+ def get_dossier(id: str) -> Dossier: ... # codeql[py/ineffectual-statement]
71
75
 
72
76
 
73
77
  @overload
74
- def get_dossier(id: str, as_odm: Literal[False], version: Literal[True]) -> tuple[dict[str, Any], str]: ...
78
+ def get_dossier(
79
+ id: str, as_odm: Literal[False], version: Literal[True]
80
+ ) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
75
81
 
76
82
 
77
83
  @overload
78
- def get_dossier(id: str, as_odm: Literal[False], version: Literal[False]) -> dict[str, Any]: ...
84
+ def get_dossier(
85
+ id: str, as_odm: Literal[False], version: Literal[False]
86
+ ) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
79
87
 
80
88
 
81
89
  @overload
82
- def get_dossier(id: str, as_odm: Literal[False]) -> dict[str, Any]: ...
90
+ def get_dossier(id: str, as_odm: Literal[False]) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
83
91
 
84
92
 
85
93
  def get_dossier(
@@ -37,31 +37,35 @@ def exists(id: str) -> bool:
37
37
  @overload
38
38
  def get_event(
39
39
  id: str, as_odm: Literal[True], version: Literal[True], user: User | None = None
40
- ) -> tuple[Event, str]: ...
40
+ ) -> tuple[Event, str]: ... # codeql[py/ineffectual-statement]
41
41
 
42
42
 
43
43
  @overload
44
- def get_event(id: str, as_odm: Literal[True], version: Literal[False]) -> Event: ...
44
+ def get_event(id: str, as_odm: Literal[True], version: Literal[False]) -> Event: ... # codeql[py/ineffectual-statement]
45
45
 
46
46
 
47
47
  @overload
48
- def get_event(id: str, as_odm: Literal[True]) -> Event: ...
48
+ def get_event(id: str, as_odm: Literal[True]) -> Event: ... # codeql[py/ineffectual-statement]
49
49
 
50
50
 
51
51
  @overload
52
- def get_event(id: str) -> Event: ...
52
+ def get_event(id: str) -> Event: ... # codeql[py/ineffectual-statement]
53
53
 
54
54
 
55
55
  @overload
56
- def get_event(id: str, as_odm: Literal[False], version: Literal[True]) -> tuple[dict[str, Any], str]: ...
56
+ def get_event(
57
+ id: str, as_odm: Literal[False], version: Literal[True]
58
+ ) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
57
59
 
58
60
 
59
61
  @overload
60
- def get_event(id: str, as_odm: Literal[False], version: Literal[False]) -> dict[str, Any]: ...
62
+ def get_event(
63
+ id: str, as_odm: Literal[False], version: Literal[False]
64
+ ) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
61
65
 
62
66
 
63
67
  @overload
64
- def get_event(id: str, as_odm: Literal[False]) -> dict[str, Any]: ...
68
+ def get_event(id: str, as_odm: Literal[False]) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
65
69
 
66
70
 
67
71
  @tracer.start_as_current_span(f"{__name__}.get_event")
@@ -361,31 +361,37 @@ def exists(id: str) -> bool:
361
361
 
362
362
 
363
363
  @overload
364
- def get_hit(id: str, as_odm: Literal[True], version: Literal[True], user: User | None = None) -> tuple[Hit, str]: ...
364
+ def get_hit(
365
+ id: str, as_odm: Literal[True], version: Literal[True], user: User | None = None
366
+ ) -> tuple[Hit, str]: ... # codeql[py/ineffectual-statement]
365
367
 
366
368
 
367
369
  @overload
368
- def get_hit(id: str, as_odm: Literal[True], version: Literal[False]) -> Hit: ...
370
+ def get_hit(id: str, as_odm: Literal[True], version: Literal[False]) -> Hit: ... # codeql[py/ineffectual-statement]
369
371
 
370
372
 
371
373
  @overload
372
- def get_hit(id: str, as_odm: Literal[True]) -> Hit: ...
374
+ def get_hit(id: str, as_odm: Literal[True]) -> Hit: ... # codeql[py/ineffectual-statement]
373
375
 
374
376
 
375
377
  @overload
376
- def get_hit(id: str) -> Hit: ...
378
+ def get_hit(id: str) -> Hit: ... # codeql[py/ineffectual-statement]
377
379
 
378
380
 
379
381
  @overload
380
- def get_hit(id: str, as_odm: Literal[False], version: Literal[True]) -> tuple[dict[str, Any], str]: ...
382
+ def get_hit(
383
+ id: str, as_odm: Literal[False], version: Literal[True]
384
+ ) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
381
385
 
382
386
 
383
387
  @overload
384
- def get_hit(id: str, as_odm: Literal[False], version: Literal[False]) -> dict[str, Any]: ...
388
+ def get_hit(
389
+ id: str, as_odm: Literal[False], version: Literal[False]
390
+ ) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
385
391
 
386
392
 
387
393
  @overload
388
- def get_hit(id: str, as_odm: Literal[False]) -> dict[str, Any]: ...
394
+ def get_hit(id: str, as_odm: Literal[False]) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
389
395
 
390
396
 
391
397
  @tracer.start_as_current_span(f"{__name__}.get_hit")
@@ -812,7 +818,7 @@ def search(
812
818
  deep_paging_id: str | None = None,
813
819
  track_total_hits: bool = False,
814
820
  filters: list[str] | None = None,
815
- ) -> SearchResult[Hit]: ...
821
+ ) -> SearchResult[Hit]: ... # codeql[py/ineffectual-statement]
816
822
 
817
823
 
818
824
  @overload
@@ -827,7 +833,7 @@ def search(
827
833
  deep_paging_id: str | None = None,
828
834
  track_total_hits: bool = False,
829
835
  filters: list[str] | None = None,
830
- ) -> SearchResult[dict[str, Any]]: ...
836
+ ) -> SearchResult[dict[str, Any]]: ... # codeql[py/ineffectual-statement]
831
837
 
832
838
 
833
839
  @tracer.start_as_current_span(f"{__name__}.search")
@@ -13,11 +13,13 @@ logger = get_logger(__file__)
13
13
  @overload
14
14
  def get_matching_overviews(
15
15
  hits: list[Hit] | list[dict[str, Any]], as_odm: Literal[False] = False
16
- ) -> list[dict[str, Any]]: ...
16
+ ) -> list[dict[str, Any]]: ... # codeql[py/ineffectual-statement]
17
17
 
18
18
 
19
19
  @overload
20
- def get_matching_overviews(hits: list[Hit] | list[dict[str, Any]], as_odm: Literal[True]) -> list[Overview]: ...
20
+ def get_matching_overviews(
21
+ hits: list[Hit] | list[dict[str, Any]], as_odm: Literal[True]
22
+ ) -> list[Overview]: ... # codeql[py/ineffectual-statement]
21
23
 
22
24
 
23
25
  def get_matching_overviews(hits: list[Hit] | list[dict[str, Any]], as_odm=False):
@@ -13,13 +13,13 @@ logger = get_logger(__file__)
13
13
  @overload
14
14
  def get_matching_templates(
15
15
  hits: list[Hit] | list[dict[str, Any]], as_odm: Literal[False] = False, uname: str | None = None
16
- ) -> list[dict[str, Any]]: ...
16
+ ) -> list[dict[str, Any]]: ... # codeql[py/ineffectual-statement]
17
17
 
18
18
 
19
19
  @overload
20
20
  def get_matching_templates(
21
21
  hits: list[Hit] | list[dict[str, Any]], as_odm: Literal[True], uname: str | None = None
22
- ) -> list[Analytic]: ...
22
+ ) -> list[Analytic]: ... # codeql[py/ineffectual-statement]
23
23
 
24
24
 
25
25
  def get_matching_templates(
@@ -20,27 +20,35 @@ tracer = trace.get_tracer(__name__)
20
20
 
21
21
 
22
22
  @overload
23
- def get_user(id: str, as_odm: Literal[True], version: Literal[True]) -> tuple[User, str]: ...
23
+ def get_user(
24
+ id: str, as_odm: Literal[True], version: Literal[True]
25
+ ) -> tuple[User, str]: ... # codeql[py/ineffectual-statement]
24
26
 
25
27
 
26
28
  @overload
27
- def get_user(id: str, *, as_odm: Literal[True], version: Literal[True], user: User | None) -> tuple[User, str]: ...
29
+ def get_user(
30
+ id: str, *, as_odm: Literal[True], version: Literal[True], user: User | None
31
+ ) -> tuple[User, str]: ... # codeql[py/ineffectual-statement]
28
32
 
29
33
 
30
34
  @overload
31
- def get_user(id: str, as_odm: Literal[True], version: Literal[False]) -> User: ...
35
+ def get_user(id: str, as_odm: Literal[True], version: Literal[False]) -> User: ... # codeql[py/ineffectual-statement]
32
36
 
33
37
 
34
38
  @overload
35
- def get_user(id: str, as_odm: Literal[False], version: Literal[True]) -> tuple[dict[str, Any], str]: ...
39
+ def get_user(
40
+ id: str, as_odm: Literal[False], version: Literal[True]
41
+ ) -> tuple[dict[str, Any], str]: ... # codeql[py/ineffectual-statement]
36
42
 
37
43
 
38
44
  @overload
39
- def get_user(id: str, as_odm: Literal[False], version: Literal[False]) -> dict[str, Any]: ...
45
+ def get_user(
46
+ id: str, as_odm: Literal[False], version: Literal[False]
47
+ ) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
40
48
 
41
49
 
42
50
  @overload
43
- def get_user(id: str) -> dict[str, Any]: ...
51
+ def get_user(id: str) -> dict[str, Any]: ... # codeql[py/ineffectual-statement]
44
52
 
45
53
 
46
54
  def get_user(
@@ -8,15 +8,15 @@ _T = TypeVar("_T")
8
8
 
9
9
 
10
10
  @overload
11
- def chunk(items: bytes, n: int) -> Generator[bytes, None, None]: ...
11
+ def chunk(items: bytes, n: int) -> Generator[bytes, None, None]: ... # codeql[py/ineffectual-statement]
12
12
 
13
13
 
14
14
  @overload
15
- def chunk(items: str, n: int) -> Generator[str, None, None]: ...
15
+ def chunk(items: str, n: int) -> Generator[str, None, None]: ... # codeql[py/ineffectual-statement]
16
16
 
17
17
 
18
18
  @overload
19
- def chunk(items: Sequence[_T], n: int) -> Generator[Sequence[_T], None, None]: ...
19
+ def chunk(items: Sequence[_T], n: int) -> Generator[Sequence[_T], None, None]: ... # codeql[py/ineffectual-statement]
20
20
 
21
21
 
22
22
  def chunk(items, n: int):
@@ -244,7 +244,7 @@ suppress-none-returning = true
244
244
  [tool.poetry]
245
245
  package-mode = true
246
246
  name = "howler-api"
247
- version = "4.1.0.dev1643"
247
+ version = "4.1.0.dev1654"
248
248
  description = "Howler - API server"
249
249
  authors = [
250
250
  "Canadian Centre for Cyber Security <howler@cyber.gc.ca>",
@@ -299,7 +299,7 @@ flask-caching = "2.4.1"
299
299
  packaging = "<25.0"
300
300
  passlib = "1.7.4"
301
301
  prometheus-client = "0.26.0"
302
- pyjwt = "2.14.0"
302
+ pyjwt = "2.15.0"
303
303
  python-baseconv = "1.2.2"
304
304
  python-datemath = "3.0.3"
305
305
  pyyaml = "6.0.3"