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.
Files changed (198) hide show
  1. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/PKG-INFO +1 -1
  2. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/cronjobs/view_cleanup.py +8 -6
  3. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/collection.py +8 -8
  4. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/migrations/fix_process.py +2 -2
  5. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/analytic_service.py +2 -2
  6. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/dossier_service.py +2 -2
  7. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/overview_service.py +12 -6
  8. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/template_service.py +5 -5
  9. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/user_service.py +4 -4
  10. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/pyproject.toml +1 -1
  11. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/README.md +0 -0
  12. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/__init__.py +0 -0
  13. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/__init__.py +0 -0
  14. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/add_label.py +0 -0
  15. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/add_to_bundle.py +0 -0
  16. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/change_field.py +0 -0
  17. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/demote.py +0 -0
  18. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/example_plugin.py +0 -0
  19. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/prioritization.py +0 -0
  20. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/promote.py +0 -0
  21. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/remove_from_bundle.py +0 -0
  22. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/remove_label.py +0 -0
  23. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/actions/transition.py +0 -0
  24. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/__init__.py +0 -0
  25. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/base.py +0 -0
  26. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/socket.py +0 -0
  27. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/__init__.py +0 -0
  28. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/action.py +0 -0
  29. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/analytic.py +0 -0
  30. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/auth.py +0 -0
  31. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/clue.py +0 -0
  32. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/configs.py +0 -0
  33. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/dossier.py +0 -0
  34. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/help.py +0 -0
  35. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/hit.py +0 -0
  36. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/notebook.py +0 -0
  37. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/overview.py +0 -0
  38. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/search.py +0 -0
  39. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/template.py +0 -0
  40. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/tool.py +0 -0
  41. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/user.py +0 -0
  42. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/utils/__init__.py +0 -0
  43. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/utils/etag.py +0 -0
  44. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/api/v1/view.py +0 -0
  45. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/app.py +0 -0
  46. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/README.md +0 -0
  47. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/__init__.py +0 -0
  48. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/classification.py +0 -0
  49. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/classification.yml +0 -0
  50. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/exceptions.py +0 -0
  51. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/loader.py +0 -0
  52. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/logging/__init__.py +0 -0
  53. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/logging/audit.py +0 -0
  54. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/logging/format.py +0 -0
  55. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/net.py +0 -0
  56. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/net_static.py +0 -0
  57. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/random_user.py +0 -0
  58. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/common/swagger.py +0 -0
  59. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/config.py +0 -0
  60. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/cronjobs/__init__.py +0 -0
  61. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/cronjobs/retention.py +0 -0
  62. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/cronjobs/rules.py +0 -0
  63. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/README.md +0 -0
  64. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/__init__.py +0 -0
  65. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/bulk.py +0 -0
  66. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/constants.py +0 -0
  67. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/exceptions.py +0 -0
  68. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/howler_store.py +0 -0
  69. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/operations.py +0 -0
  70. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/schemas.py +0 -0
  71. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/store.py +0 -0
  72. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/support/__init__.py +0 -0
  73. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/support/build.py +0 -0
  74. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/support/schemas.py +0 -0
  75. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/datastore/types.py +0 -0
  76. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/error.py +0 -0
  77. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/external/__init__.py +0 -0
  78. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/external/generate_mitre.py +0 -0
  79. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/external/generate_sigma_rules.py +0 -0
  80. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/external/generate_tlds.py +0 -0
  81. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/external/reindex_data.py +0 -0
  82. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/external/wipe_databases.py +0 -0
  83. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/gunicorn_config.py +0 -0
  84. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/healthz.py +0 -0
  85. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/__init__.py +0 -0
  86. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/azure.py +0 -0
  87. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/discover.py +0 -0
  88. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/hit.py +0 -0
  89. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/oauth.py +0 -0
  90. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/search.py +0 -0
  91. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/workflow.py +0 -0
  92. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/helper/ws.py +0 -0
  93. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/README.md +0 -0
  94. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/__init__.py +0 -0
  95. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/base.py +0 -0
  96. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/charter.txt +0 -0
  97. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/helper.py +0 -0
  98. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/howler_enum.py +0 -0
  99. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/__init__.py +0 -0
  100. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/action.py +0 -0
  101. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/analytic.py +0 -0
  102. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/assemblyline.py +0 -0
  103. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/aws.py +0 -0
  104. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/azure.py +0 -0
  105. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/cbs.py +0 -0
  106. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/clue.py +0 -0
  107. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/config.py +0 -0
  108. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/dossier.py +0 -0
  109. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/__init__.py +0 -0
  110. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/agent.py +0 -0
  111. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/autonomous_system.py +0 -0
  112. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/client.py +0 -0
  113. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/cloud.py +0 -0
  114. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/code_signature.py +0 -0
  115. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/container.py +0 -0
  116. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/dns.py +0 -0
  117. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/egress.py +0 -0
  118. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/elf.py +0 -0
  119. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/email.py +0 -0
  120. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/error.py +0 -0
  121. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/event.py +0 -0
  122. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/faas.py +0 -0
  123. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/file.py +0 -0
  124. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/geo.py +0 -0
  125. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/group.py +0 -0
  126. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/hash.py +0 -0
  127. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/host.py +0 -0
  128. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/http.py +0 -0
  129. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/ingress.py +0 -0
  130. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/interface.py +0 -0
  131. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/network.py +0 -0
  132. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/observer.py +0 -0
  133. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/organization.py +0 -0
  134. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/os.py +0 -0
  135. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/pe.py +0 -0
  136. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/process.py +0 -0
  137. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/registry.py +0 -0
  138. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/related.py +0 -0
  139. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/rule.py +0 -0
  140. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/server.py +0 -0
  141. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/threat.py +0 -0
  142. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/tls.py +0 -0
  143. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/url.py +0 -0
  144. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/user.py +0 -0
  145. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/user_agent.py +0 -0
  146. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/ecs/vulnerability.py +0 -0
  147. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/gcp.py +0 -0
  148. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/hit.py +0 -0
  149. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/howler_data.py +0 -0
  150. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/lead.py +0 -0
  151. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/localized_label.py +0 -0
  152. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/overview.py +0 -0
  153. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/pivot.py +0 -0
  154. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/template.py +0 -0
  155. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/user.py +0 -0
  156. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/models/view.py +0 -0
  157. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/random_data.py +0 -0
  158. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/odm/randomizer.py +0 -0
  159. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/patched.py +0 -0
  160. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/plugins/__init__.py +0 -0
  161. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/plugins/config.py +0 -0
  162. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/__init__.py +0 -0
  163. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/README.md +0 -0
  164. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/__init__.py +0 -0
  165. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/counters.py +0 -0
  166. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/events.py +0 -0
  167. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/hash.py +0 -0
  168. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/lock.py +0 -0
  169. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/queues/__init__.py +0 -0
  170. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/queues/comms.py +0 -0
  171. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/queues/multi.py +0 -0
  172. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/queues/named.py +0 -0
  173. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/queues/priority.py +0 -0
  174. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/set.py +0 -0
  175. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/remote/datatypes/user_quota_tracker.py +0 -0
  176. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/security/__init__.py +0 -0
  177. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/security/socket.py +0 -0
  178. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/security/utils.py +0 -0
  179. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/__init__.py +0 -0
  180. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/action_service.py +0 -0
  181. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/auth_service.py +0 -0
  182. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/config_service.py +0 -0
  183. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/event_service.py +0 -0
  184. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/hit_service.py +0 -0
  185. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/jwt_service.py +0 -0
  186. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/lucene_service.py +0 -0
  187. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/services/notebook_service.py +0 -0
  188. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/__init__.py +0 -0
  189. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/annotations.py +0 -0
  190. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/chunk.py +0 -0
  191. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/dict_utils.py +0 -0
  192. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/isotime.py +0 -0
  193. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/list_utils.py +0 -0
  194. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/lucene.py +0 -0
  195. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/path.py +0 -0
  196. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/socket_utils.py +0 -0
  197. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/str_utils.py +0 -0
  198. {howler_api-3.2.0.dev472 → howler_api-3.2.0.dev475}/howler/utils/uid.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: howler-api
3
- Version: 3.2.0.dev472
3
+ Version: 3.2.0.dev475
4
4
  Summary: Howler - API server
5
5
  License: MIT
6
6
  Keywords: howler,alerting,gc,canada,cse-cst,cse,cst,cyber,cccs
@@ -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
- result = ds.user.search("*:*", rows=250, fl="*")
23
- total_user_count = result["total"]
24
- user_list: List[Any] = result["items"]
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
- result = ds.view.search("*:*", rows=250)
27
- total_view_count = result["total"]
28
- view_list: List[Any] = result["items"]
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
@@ -21,9 +21,9 @@ def migrate():
21
21
  return
22
22
 
23
23
  logger.info(f"We will delete {result['total']} hits. Continue?")
24
- result = input("y/[n]")
24
+ prompt_result = input("y/[n]")
25
25
 
26
- if result.lower() != "y":
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: bool = False,
52
- version: bool = False,
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)
@@ -72,8 +72,8 @@ def get_dossier(id: str, as_odm: Literal[False]) -> dict[str, Any]: ...
72
72
 
73
73
  def get_dossier(
74
74
  id: str,
75
- as_odm: bool = False,
76
- version: bool = False,
75
+ as_odm=False,
76
+ version=False,
77
77
  ):
78
78
  """Retrieve a dossier from the datastore.
79
79
 
@@ -1,4 +1,4 @@
1
- from typing import Any, Union
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: Union[list[Hit], list[dict[str, Any]]], as_odm: bool = False
15
- ) -> Union[list[dict[str, Any]], list[Overview]]:
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
- overview_candidates = datastore().overview.search(
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, Optional, Union, cast, overload
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: Union[list[Hit], list[dict[str, Any]]], as_odm: Literal[False] = False, uname: Optional[str] = None
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: Union[list[Hit], list[dict[str, Any]]], as_odm: Literal[True], uname: Optional[str] = None
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: Union[list[Hit], list[dict[str, Any]]], as_odm: bool = False, uname: Optional[str] = None
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 (Optional[str], optional): Username to filter templates by owner. Defaults to None.
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: bool = False,
44
- version: bool = False,
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["uname"]).apikeys.items()
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["uname"])
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.dev472"
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>",