howler-api 2.10.0.dev155__tar.gz → 2.10.0.dev160__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 (196) hide show
  1. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/PKG-INFO +1 -1
  2. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/base.py +3 -9
  3. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/services/hit_service.py +2 -2
  4. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/utils/dict_utils.py +18 -23
  5. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/pyproject.toml +1 -1
  6. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/README.md +0 -0
  7. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/__init__.py +0 -0
  8. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/actions/__init__.py +0 -0
  9. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/actions/add_label.py +0 -0
  10. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/actions/add_to_bundle.py +0 -0
  11. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/actions/change_field.py +0 -0
  12. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/actions/demote.py +0 -0
  13. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/actions/example_plugin.py +0 -0
  14. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/actions/prioritization.py +0 -0
  15. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/actions/promote.py +0 -0
  16. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/actions/remove_from_bundle.py +0 -0
  17. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/actions/remove_label.py +0 -0
  18. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/actions/transition.py +0 -0
  19. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/__init__.py +0 -0
  20. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/base.py +0 -0
  21. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/socket.py +0 -0
  22. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/__init__.py +0 -0
  23. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/action.py +0 -0
  24. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/analytic.py +0 -0
  25. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/auth.py +0 -0
  26. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/borealis.py +0 -0
  27. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/configs.py +0 -0
  28. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/dossier.py +0 -0
  29. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/help.py +0 -0
  30. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/hit.py +0 -0
  31. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/notebook.py +0 -0
  32. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/overview.py +0 -0
  33. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/search.py +0 -0
  34. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/template.py +0 -0
  35. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/tool.py +0 -0
  36. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/user.py +0 -0
  37. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/utils/__init__.py +0 -0
  38. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/utils/etag.py +0 -0
  39. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/api/v1/view.py +0 -0
  40. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/app.py +0 -0
  41. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/README.md +0 -0
  42. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/__init__.py +0 -0
  43. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/classification.py +0 -0
  44. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/classification.yml +0 -0
  45. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/exceptions.py +0 -0
  46. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/hexdump.py +0 -0
  47. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/iprange.py +0 -0
  48. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/loader.py +0 -0
  49. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/logging/__init__.py +0 -0
  50. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/logging/audit.py +0 -0
  51. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/logging/format.py +0 -0
  52. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/net.py +0 -0
  53. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/net_static.py +0 -0
  54. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/random_user.py +0 -0
  55. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/common/swagger.py +0 -0
  56. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/config.py +0 -0
  57. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/cronjobs/__init__.py +0 -0
  58. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/cronjobs/retention.py +0 -0
  59. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/cronjobs/rules.py +0 -0
  60. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/README.md +0 -0
  61. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/__init__.py +0 -0
  62. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/bulk.py +0 -0
  63. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/collection.py +0 -0
  64. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/constants.py +0 -0
  65. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/exceptions.py +0 -0
  66. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/howler_store.py +0 -0
  67. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/migrations/fix_process.py +0 -0
  68. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/operations.py +0 -0
  69. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/schemas.py +0 -0
  70. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/store.py +0 -0
  71. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/support/__init__.py +0 -0
  72. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/support/build.py +0 -0
  73. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/support/schemas.py +0 -0
  74. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/datastore/types.py +0 -0
  75. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/error.py +0 -0
  76. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/external/__init__.py +0 -0
  77. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/external/generate_mitre.py +0 -0
  78. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/external/generate_sigma_rules.py +0 -0
  79. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/external/generate_tlds.py +0 -0
  80. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/external/reindex_data.py +0 -0
  81. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/external/wipe_databases.py +0 -0
  82. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/gunicorn_config.py +0 -0
  83. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/healthz.py +0 -0
  84. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/helper/__init__.py +0 -0
  85. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/helper/azure.py +0 -0
  86. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/helper/discover.py +0 -0
  87. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/helper/hit.py +0 -0
  88. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/helper/oauth.py +0 -0
  89. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/helper/search.py +0 -0
  90. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/helper/workflow.py +0 -0
  91. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/helper/ws.py +0 -0
  92. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/README.md +0 -0
  93. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/__init__.py +0 -0
  94. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/charter.txt +0 -0
  95. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/helper.py +0 -0
  96. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/howler_enum.py +0 -0
  97. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/__init__.py +0 -0
  98. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/action.py +0 -0
  99. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/analytic.py +0 -0
  100. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/assemblyline.py +0 -0
  101. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/aws.py +0 -0
  102. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/azure.py +0 -0
  103. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/cbs.py +0 -0
  104. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/config.py +0 -0
  105. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/dossier.py +0 -0
  106. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/__init__.py +0 -0
  107. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/agent.py +0 -0
  108. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/autonomous_system.py +0 -0
  109. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/client.py +0 -0
  110. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/cloud.py +0 -0
  111. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/code_signature.py +0 -0
  112. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/container.py +0 -0
  113. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/dns.py +0 -0
  114. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/egress.py +0 -0
  115. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/elf.py +0 -0
  116. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/email.py +0 -0
  117. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/error.py +0 -0
  118. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/event.py +0 -0
  119. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/faas.py +0 -0
  120. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/file.py +0 -0
  121. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/geo.py +0 -0
  122. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/group.py +0 -0
  123. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/hash.py +0 -0
  124. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/host.py +0 -0
  125. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/http.py +0 -0
  126. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/ingress.py +0 -0
  127. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/interface.py +0 -0
  128. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/network.py +0 -0
  129. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/observer.py +0 -0
  130. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/organization.py +0 -0
  131. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/os.py +0 -0
  132. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/pe.py +0 -0
  133. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/process.py +0 -0
  134. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/registry.py +0 -0
  135. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/related.py +0 -0
  136. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/rule.py +0 -0
  137. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/server.py +0 -0
  138. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/threat.py +0 -0
  139. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/tls.py +0 -0
  140. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/url.py +0 -0
  141. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/user.py +0 -0
  142. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/user_agent.py +0 -0
  143. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/ecs/vulnerability.py +0 -0
  144. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/gcp.py +0 -0
  145. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/hit.py +0 -0
  146. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/howler_data.py +0 -0
  147. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/lead.py +0 -0
  148. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/localized_label.py +0 -0
  149. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/overview.py +0 -0
  150. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/pivot.py +0 -0
  151. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/template.py +0 -0
  152. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/user.py +0 -0
  153. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/models/view.py +0 -0
  154. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/random_data.py +0 -0
  155. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/odm/randomizer.py +0 -0
  156. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/patched.py +0 -0
  157. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/plugins/__init__.py +0 -0
  158. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/plugins/config.py +0 -0
  159. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/remote/__init__.py +0 -0
  160. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/remote/datatypes/README.md +0 -0
  161. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/remote/datatypes/__init__.py +0 -0
  162. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/remote/datatypes/counters.py +0 -0
  163. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/remote/datatypes/events.py +0 -0
  164. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/remote/datatypes/hash.py +0 -0
  165. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/remote/datatypes/lock.py +0 -0
  166. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/remote/datatypes/queues/__init__.py +0 -0
  167. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/remote/datatypes/queues/comms.py +0 -0
  168. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/remote/datatypes/queues/multi.py +0 -0
  169. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/remote/datatypes/queues/named.py +0 -0
  170. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/remote/datatypes/queues/priority.py +0 -0
  171. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/remote/datatypes/set.py +0 -0
  172. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/remote/datatypes/user_quota_tracker.py +0 -0
  173. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/security/__init__.py +0 -0
  174. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/security/socket.py +0 -0
  175. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/security/utils.py +0 -0
  176. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/services/__init__.py +0 -0
  177. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/services/action_service.py +0 -0
  178. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/services/analytic_service.py +0 -0
  179. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/services/auth_service.py +0 -0
  180. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/services/config_service.py +0 -0
  181. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/services/dossier_service.py +0 -0
  182. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/services/event_service.py +0 -0
  183. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/services/jwt_service.py +0 -0
  184. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/services/lucene_service.py +0 -0
  185. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/services/notebook_service.py +0 -0
  186. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/services/user_service.py +0 -0
  187. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/utils/__init__.py +0 -0
  188. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/utils/annotations.py +0 -0
  189. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/utils/chunk.py +0 -0
  190. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/utils/isotime.py +0 -0
  191. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/utils/list_utils.py +0 -0
  192. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/utils/lucene.py +0 -0
  193. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/utils/path.py +0 -0
  194. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/utils/socket_utils.py +0 -0
  195. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/utils/str_utils.py +0 -0
  196. {howler_api-2.10.0.dev155 → howler_api-2.10.0.dev160}/howler/utils/uid.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: howler-api
3
- Version: 2.10.0.dev155
3
+ Version: 2.10.0.dev160
4
4
  Summary: Howler - API server
5
5
  License: MIT
6
6
  Keywords: howler,alerting,gc,canada,cse-cst,cse,cst,cyber,cccs
@@ -20,7 +20,6 @@ from enum import Enum as PyEnum
20
20
  from enum import EnumMeta
21
21
  from typing import Any as _Any
22
22
  from typing import Dict, Tuple, Union
23
- from typing import Mapping as _Mapping
24
23
  from venv import logger
25
24
 
26
25
  import arrow
@@ -28,12 +27,7 @@ import validators
28
27
  from dateutil.tz import tzutc
29
28
 
30
29
  from howler.common import loader
31
- from howler.common.exceptions import (
32
- HowlerKeyError,
33
- HowlerNotImplementedError,
34
- HowlerTypeError,
35
- HowlerValueError,
36
- )
30
+ from howler.common.exceptions import HowlerKeyError, HowlerNotImplementedError, HowlerTypeError, HowlerValueError
37
31
  from howler.common.net import is_valid_domain, is_valid_ip
38
32
  from howler.utils.dict_utils import flatten, recursive_update
39
33
  from howler.utils.isotime import now_as_iso
@@ -1050,7 +1044,7 @@ class Optional(_Field):
1050
1044
 
1051
1045
  class Model:
1052
1046
  @classmethod
1053
- def fields(cls, skip_mappings=False) -> _Mapping[str, _Field]:
1047
+ def fields(cls, skip_mappings=False) -> dict[str, _Field]:
1054
1048
  """Describe the elements of the model.
1055
1049
 
1056
1050
  For compound fields return the field object.
@@ -1122,7 +1116,7 @@ class Model:
1122
1116
  return out
1123
1117
 
1124
1118
  @classmethod
1125
- def flat_fields(cls, show_compound=False, skip_mappings=False) -> _Mapping[str, _Field]:
1119
+ def flat_fields(cls, show_compound=False, skip_mappings=False) -> dict[str, _Field]:
1126
1120
  """Describe the elements of the model.
1127
1121
 
1128
1122
  Recurse into compound fields, concatenating the names with '.' separators.
@@ -25,7 +25,6 @@ from howler.helper.hit import (
25
25
  vote_hit,
26
26
  )
27
27
  from howler.helper.workflow import Transition, Workflow
28
- from howler.odm.base import BANNED_FIELDS
29
28
  from howler.odm.models.ecs.event import Event
30
29
  from howler.odm.models.hit import Hit
31
30
  from howler.odm.models.howler_data import HitOperationType, HitStatus, HitStatusTransition, Log
@@ -296,6 +295,7 @@ def convert_hit(data: dict[str, Any], unique: bool, ignore_extra_values: bool =
296
295
  if "bundle_size" not in data and "howler.hits" in data:
297
296
  data["howler.bundle_size"] = len(data["howler.hits"])
298
297
 
298
+ # TODO: This is a really strange double-validation check we should look to refactor
299
299
  try:
300
300
  odm = Hit(data, ignore_extra_values=ignore_extra_values)
301
301
  except TypeError as e:
@@ -303,7 +303,7 @@ def convert_hit(data: dict[str, Any], unique: bool, ignore_extra_values: bool =
303
303
 
304
304
  # Check for deprecated field and unused fields
305
305
  odm_flatten = odm.flat_fields(show_compound=True)
306
- unused_keys = extra_keys(data, set(odm_flatten.keys()) - BANNED_FIELDS)
306
+ unused_keys = extra_keys(Hit, data)
307
307
 
308
308
  if unused_keys and not ignore_extra_values:
309
309
  raise HowlerValueError(f"Hit was created with invalid parameters: {', '.join(unused_keys)}")
@@ -134,32 +134,27 @@ def unflatten(data: _Mapping) -> _Mapping:
134
134
  return out
135
135
 
136
136
 
137
- def extra_keys(data: _Mapping, keys: set[str], parent_key: Optional[str] = None) -> set[str]:
137
+ def extra_keys(odm: type["Model"], data: _Mapping) -> set[str]:
138
138
  "Geta list of extra keys when compared to a list of permitted keys"
139
+ from howler.odm.base import Mapping
140
+
141
+ data = flatten_deep(data)
142
+
139
143
  result: set[str] = set()
140
144
  for key in data.keys():
141
- if isinstance(data[key], dict):
142
- result = result | extra_keys(
143
- data[key],
144
- {sub_key[(len(sub_key) + 1) :] for sub_key in keys if sub_key.startswith(f"{key}.")},
145
- parent_key=key if not parent_key else f"{parent_key}.{key}",
146
- )
147
- elif isinstance(data[key], list):
148
- if key in keys:
149
- continue
150
-
151
- for entry in data[key]:
152
- if not isinstance(entry, dict):
153
- result.add(key if not parent_key else f"{parent_key}.{key}")
154
- break
155
- else:
156
- result = result | extra_keys(
157
- entry,
158
- {sub_key[(len(key) + 1) :] for sub_key in keys if sub_key.startswith(f"{key}.")},
159
- parent_key=key if not parent_key else f"{parent_key}.{key}",
160
- )
161
- elif key not in keys:
162
- result.add(key if not parent_key else f"{parent_key}.{key}")
145
+ parts = key.split(".")
146
+
147
+ current_odm = odm
148
+ for part in parts:
149
+ sub_fields: dict[str, Any] = current_odm.fields()
150
+
151
+ if part in sub_fields:
152
+ current_odm = sub_fields[part]
153
+ elif isinstance(current_odm, Mapping):
154
+ current_odm = current_odm.child_type
155
+ else:
156
+ result.add(key)
157
+ break
163
158
 
164
159
  return result
165
160
 
@@ -148,7 +148,7 @@ suppress-none-returning = true
148
148
  [tool.poetry]
149
149
  package-mode = true
150
150
  name = "howler-api"
151
- version = "2.10.0.dev155"
151
+ version = "2.10.0.dev160"
152
152
  description = "Howler - API server"
153
153
  authors = [
154
154
  "Canadian Centre for Cyber Security <howler@cyber.gc.ca>",