logprep 19.2.0__tar.gz → 19.3.0__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 (380) hide show
  1. {logprep-19.2.0 → logprep-19.3.0}/PKG-INFO +4 -13
  2. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/dummy/output.py +0 -4
  3. {logprep-19.2.0 → logprep-19.3.0}/logprep/filter/expression/filter_expression.py +63 -10
  4. {logprep-19.2.0 → logprep-19.3.0}/logprep/filter/lucene_filter.py +287 -3
  5. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/dummy/output.py +1 -5
  6. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/clusterer/processor.py +2 -3
  7. logprep-19.3.0/logprep/ng/processor/deduplicator/processor.py +50 -0
  8. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/clusterer/processor.py +3 -4
  9. logprep-19.3.0/logprep/processor/deduplicator/processor.py +50 -0
  10. logprep-19.3.0/logprep/processor/deduplicator/rule.py +59 -0
  11. logprep-19.3.0/logprep/registry.py +291 -0
  12. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/pseudo/commands/depseudonymize.py +0 -1
  13. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/pseudo/encrypter.py +3 -3
  14. logprep-19.3.0/logprep/util/pseudo/keygenerator/__init__.py +0 -0
  15. logprep-19.3.0/logprep/util/url/__init__.py +0 -0
  16. {logprep-19.2.0 → logprep-19.3.0}/pyproject.toml +4 -13
  17. logprep-19.2.0/logprep/registry.py +0 -272
  18. {logprep-19.2.0 → logprep-19.3.0}/LICENSE +0 -0
  19. {logprep-19.2.0 → logprep-19.3.0}/README.md +0 -0
  20. {logprep-19.2.0 → logprep-19.3.0}/logprep/__init__.py +0 -0
  21. {logprep-19.2.0 → logprep-19.3.0}/logprep/abc/__init__.py +0 -0
  22. {logprep-19.2.0 → logprep-19.3.0}/logprep/abc/component.py +0 -0
  23. {logprep-19.2.0 → logprep-19.3.0}/logprep/abc/connector.py +0 -0
  24. {logprep-19.2.0 → logprep-19.3.0}/logprep/abc/exceptions.py +0 -0
  25. {logprep-19.2.0 → logprep-19.3.0}/logprep/abc/getter.py +0 -0
  26. {logprep-19.2.0 → logprep-19.3.0}/logprep/abc/input.py +0 -0
  27. {logprep-19.2.0 → logprep-19.3.0}/logprep/abc/output.py +0 -0
  28. {logprep-19.2.0 → logprep-19.3.0}/logprep/abc/processor.py +0 -0
  29. {logprep-19.2.0 → logprep-19.3.0}/logprep/configuration.py +0 -0
  30. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/__init__.py +0 -0
  31. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/confluent_kafka/__init__.py +0 -0
  32. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/confluent_kafka/input.py +0 -0
  33. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/confluent_kafka/output.py +0 -0
  34. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/console/__init__.py +0 -0
  35. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/console/output.py +0 -0
  36. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/dummy/__init__.py +0 -0
  37. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/dummy/input.py +0 -0
  38. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/file/__init__.py +0 -0
  39. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/file/input.py +0 -0
  40. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/http/__init__.py +0 -0
  41. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/http/input.py +0 -0
  42. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/http/output.py +0 -0
  43. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/json/__init__.py +0 -0
  44. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/json/input.py +0 -0
  45. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/jsonl/__init__.py +0 -0
  46. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/jsonl/input.py +0 -0
  47. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/jsonl/output.py +0 -0
  48. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/opensearch/__init__.py +0 -0
  49. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/opensearch/output.py +0 -0
  50. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/s3/__init__.py +0 -0
  51. {logprep-19.2.0 → logprep-19.3.0}/logprep/connector/s3/output.py +0 -0
  52. {logprep-19.2.0 → logprep-19.3.0}/logprep/factory.py +0 -0
  53. {logprep-19.2.0 → logprep-19.3.0}/logprep/factory_error.py +0 -0
  54. {logprep-19.2.0 → logprep-19.3.0}/logprep/filter/__init__.py +0 -0
  55. {logprep-19.2.0 → logprep-19.3.0}/logprep/filter/expression/__init__.py +0 -0
  56. {logprep-19.2.0 → logprep-19.3.0}/logprep/framework/__init__.py +0 -0
  57. {logprep-19.2.0 → logprep-19.3.0}/logprep/framework/pipeline.py +0 -0
  58. {logprep-19.2.0 → logprep-19.3.0}/logprep/framework/pipeline_manager.py +0 -0
  59. {logprep-19.2.0 → logprep-19.3.0}/logprep/framework/rule_tree/__init__.py +0 -0
  60. {logprep-19.2.0 → logprep-19.3.0}/logprep/framework/rule_tree/demorgan_resolver.py +0 -0
  61. {logprep-19.2.0 → logprep-19.3.0}/logprep/framework/rule_tree/node.py +0 -0
  62. {logprep-19.2.0 → logprep-19.3.0}/logprep/framework/rule_tree/rule_parser.py +0 -0
  63. {logprep-19.2.0 → logprep-19.3.0}/logprep/framework/rule_tree/rule_segmenter.py +0 -0
  64. {logprep-19.2.0 → logprep-19.3.0}/logprep/framework/rule_tree/rule_sorter.py +0 -0
  65. {logprep-19.2.0 → logprep-19.3.0}/logprep/framework/rule_tree/rule_tagger.py +0 -0
  66. {logprep-19.2.0 → logprep-19.3.0}/logprep/framework/rule_tree/rule_tree.py +0 -0
  67. {logprep-19.2.0 → logprep-19.3.0}/logprep/generator/__init__.py +0 -0
  68. {logprep-19.2.0 → logprep-19.3.0}/logprep/generator/batcher.py +0 -0
  69. {logprep-19.2.0 → logprep-19.3.0}/logprep/generator/confluent_kafka/__init__.py +0 -0
  70. {logprep-19.2.0 → logprep-19.3.0}/logprep/generator/confluent_kafka/output.py +0 -0
  71. {logprep-19.2.0 → logprep-19.3.0}/logprep/generator/controller.py +0 -0
  72. {logprep-19.2.0 → logprep-19.3.0}/logprep/generator/factory.py +0 -0
  73. {logprep-19.2.0 → logprep-19.3.0}/logprep/generator/http/__init__.py +0 -0
  74. {logprep-19.2.0 → logprep-19.3.0}/logprep/generator/http/output.py +0 -0
  75. {logprep-19.2.0 → logprep-19.3.0}/logprep/generator/input.py +0 -0
  76. {logprep-19.2.0 → logprep-19.3.0}/logprep/generator/loader.py +0 -0
  77. {logprep-19.2.0 → logprep-19.3.0}/logprep/generator/manipulator.py +0 -0
  78. {logprep-19.2.0 → logprep-19.3.0}/logprep/generator/sender.py +0 -0
  79. {logprep-19.2.0 → logprep-19.3.0}/logprep/metrics/__init__.py +0 -0
  80. {logprep-19.2.0 → logprep-19.3.0}/logprep/metrics/exporter.py +0 -0
  81. {logprep-19.2.0 → logprep-19.3.0}/logprep/metrics/metrics.py +0 -0
  82. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/__init__.py +0 -0
  83. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/abc/__init__.py +0 -0
  84. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/abc/event.py +0 -0
  85. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/abc/input.py +0 -0
  86. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/abc/output.py +0 -0
  87. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/abc/processor.py +0 -0
  88. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/__init__.py +0 -0
  89. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/confluent_kafka/__init__.py +0 -0
  90. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/confluent_kafka/input.py +0 -0
  91. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/confluent_kafka/metadata.py +0 -0
  92. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/confluent_kafka/output.py +0 -0
  93. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/console/__init__.py +0 -0
  94. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/console/output.py +0 -0
  95. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/dummy/__init__.py +0 -0
  96. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/dummy/input.py +0 -0
  97. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/file/__init__.py +0 -0
  98. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/file/input.py +0 -0
  99. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/http/__init__.py +0 -0
  100. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/http/input.py +0 -0
  101. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/json/__init__.py +0 -0
  102. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/json/input.py +0 -0
  103. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/jsonl/__init__.py +0 -0
  104. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/jsonl/output.py +0 -0
  105. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/opensearch/__init__.py +0 -0
  106. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/connector/opensearch/output.py +0 -0
  107. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/event/__init__.py +0 -0
  108. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/event/error_event.py +0 -0
  109. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/event/event_state.py +0 -0
  110. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/event/filtered_event.py +0 -0
  111. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/event/log_event.py +0 -0
  112. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/event/pseudonym_event.py +0 -0
  113. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/event/set_event_backlog.py +0 -0
  114. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/event/sre_event.py +0 -0
  115. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/pipeline.py +0 -0
  116. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/__init__.py +0 -0
  117. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/amides/__init__.py +0 -0
  118. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/amides/processor.py +0 -0
  119. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/calculator/__init__.py +0 -0
  120. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/calculator/processor.py +0 -0
  121. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/clusterer/__init__.py +0 -0
  122. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/concatenator/__init__.py +0 -0
  123. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/concatenator/processor.py +0 -0
  124. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/datetime_extractor/__init__.py +0 -0
  125. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/datetime_extractor/processor.py +0 -0
  126. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/decoder/processor.py +0 -0
  127. {logprep-19.2.0/logprep/ng/processor/deleter → logprep-19.3.0/logprep/ng/processor/deduplicator}/__init__.py +0 -0
  128. {logprep-19.2.0/logprep/ng/processor/dissector → logprep-19.3.0/logprep/ng/processor/deleter}/__init__.py +0 -0
  129. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/deleter/processor.py +0 -0
  130. {logprep-19.2.0/logprep/ng/processor/domain_label_extractor → logprep-19.3.0/logprep/ng/processor/dissector}/__init__.py +0 -0
  131. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/dissector/processor.py +0 -0
  132. {logprep-19.2.0/logprep/ng/processor/domain_resolver → logprep-19.3.0/logprep/ng/processor/domain_label_extractor}/__init__.py +0 -0
  133. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/domain_label_extractor/processor.py +0 -0
  134. {logprep-19.2.0/logprep/ng/processor/dropper → logprep-19.3.0/logprep/ng/processor/domain_resolver}/__init__.py +0 -0
  135. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/domain_resolver/processor.py +0 -0
  136. {logprep-19.2.0/logprep/ng/processor/field_manager → logprep-19.3.0/logprep/ng/processor/dropper}/__init__.py +0 -0
  137. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/dropper/processor.py +0 -0
  138. {logprep-19.2.0/logprep/ng/processor/generic_adder → logprep-19.3.0/logprep/ng/processor/field_manager}/__init__.py +0 -0
  139. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/field_manager/processor.py +0 -0
  140. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/field_manager/rule.py +0 -0
  141. {logprep-19.2.0/logprep/ng/processor/generic_resolver → logprep-19.3.0/logprep/ng/processor/generic_adder}/__init__.py +0 -0
  142. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/generic_adder/processor.py +0 -0
  143. {logprep-19.2.0/logprep/ng/processor/geoip_enricher → logprep-19.3.0/logprep/ng/processor/generic_resolver}/__init__.py +0 -0
  144. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/generic_resolver/processor.py +0 -0
  145. {logprep-19.2.0/logprep/ng/processor/grokker → logprep-19.3.0/logprep/ng/processor/geoip_enricher}/__init__.py +0 -0
  146. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/geoip_enricher/processor.py +0 -0
  147. {logprep-19.2.0/logprep/ng/processor/ip_informer → logprep-19.3.0/logprep/ng/processor/grokker}/__init__.py +0 -0
  148. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/grokker/processor.py +0 -0
  149. {logprep-19.2.0/logprep/ng/processor/key_checker → logprep-19.3.0/logprep/ng/processor/ip_informer}/__init__.py +0 -0
  150. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/ip_informer/processor.py +0 -0
  151. {logprep-19.2.0/logprep/ng/processor/labeler → logprep-19.3.0/logprep/ng/processor/key_checker}/__init__.py +0 -0
  152. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/key_checker/processor.py +0 -0
  153. {logprep-19.2.0/logprep/ng/processor/list_comparison → logprep-19.3.0/logprep/ng/processor/labeler}/__init__.py +0 -0
  154. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/labeler/processor.py +0 -0
  155. {logprep-19.2.0/logprep/ng/processor/network_comparison → logprep-19.3.0/logprep/ng/processor/list_comparison}/__init__.py +0 -0
  156. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/list_comparison/processor.py +0 -0
  157. {logprep-19.2.0/logprep/ng/processor/pre_detector → logprep-19.3.0/logprep/ng/processor/network_comparison}/__init__.py +0 -0
  158. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/network_comparison/processor.py +0 -0
  159. {logprep-19.2.0/logprep/ng/processor/pseudonymizer → logprep-19.3.0/logprep/ng/processor/pre_detector}/__init__.py +0 -0
  160. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/pre_detector/processor.py +0 -0
  161. {logprep-19.2.0/logprep/ng/processor/replacer → logprep-19.3.0/logprep/ng/processor/pseudonymizer}/__init__.py +0 -0
  162. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/pseudonymizer/processor.py +0 -0
  163. {logprep-19.2.0/logprep/ng/processor/requester → logprep-19.3.0/logprep/ng/processor/replacer}/__init__.py +0 -0
  164. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/replacer/processor.py +0 -0
  165. {logprep-19.2.0/logprep/ng/processor/selective_extractor → logprep-19.3.0/logprep/ng/processor/requester}/__init__.py +0 -0
  166. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/requester/processor.py +0 -0
  167. {logprep-19.2.0/logprep/ng/processor/string_splitter → logprep-19.3.0/logprep/ng/processor/selective_extractor}/__init__.py +0 -0
  168. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/selective_extractor/processor.py +0 -0
  169. {logprep-19.2.0/logprep/ng/processor/template_replacer → logprep-19.3.0/logprep/ng/processor/string_splitter}/__init__.py +0 -0
  170. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/string_splitter/processor.py +0 -0
  171. {logprep-19.2.0/logprep/ng/processor/timestamp_differ → logprep-19.3.0/logprep/ng/processor/template_replacer}/__init__.py +0 -0
  172. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/template_replacer/processor.py +0 -0
  173. {logprep-19.2.0/logprep/ng/processor/timestamper → logprep-19.3.0/logprep/ng/processor/timestamp_differ}/__init__.py +0 -0
  174. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/timestamp_differ/processor.py +0 -0
  175. {logprep-19.2.0/logprep/processor → logprep-19.3.0/logprep/ng/processor/timestamper}/__init__.py +0 -0
  176. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/processor/timestamper/processor.py +0 -0
  177. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/runner.py +0 -0
  178. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/sender.py +0 -0
  179. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/util/configuration.py +0 -0
  180. {logprep-19.2.0 → logprep-19.3.0}/logprep/ng/util/defaults.py +0 -0
  181. {logprep-19.2.0/logprep/processor/amides → logprep-19.3.0/logprep/processor}/__init__.py +0 -0
  182. {logprep-19.2.0/logprep/processor/base → logprep-19.3.0/logprep/processor/amides}/__init__.py +0 -0
  183. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/amides/detection.py +0 -0
  184. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/amides/features.py +0 -0
  185. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/amides/normalize.py +0 -0
  186. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/amides/processor.py +0 -0
  187. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/amides/rule.py +0 -0
  188. {logprep-19.2.0/logprep/processor/calculator → logprep-19.3.0/logprep/processor/base}/__init__.py +0 -0
  189. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/base/exceptions.py +0 -0
  190. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/base/rule.py +0 -0
  191. {logprep-19.2.0/logprep/processor/clusterer → logprep-19.3.0/logprep/processor/calculator}/__init__.py +0 -0
  192. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/calculator/fourFn.py +0 -0
  193. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/calculator/processor.py +0 -0
  194. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/calculator/rule.py +0 -0
  195. {logprep-19.2.0/logprep/processor/clusterer/signature_calculation → logprep-19.3.0/logprep/processor/clusterer}/__init__.py +0 -0
  196. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/clusterer/configuration.py +0 -0
  197. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/clusterer/rule.py +0 -0
  198. {logprep-19.2.0/logprep/processor/clusterer/signature_calculation/rules → logprep-19.3.0/logprep/processor/clusterer/signature_calculation}/__init__.py +0 -0
  199. {logprep-19.2.0/logprep/processor/concatenator → logprep-19.3.0/logprep/processor/clusterer/signature_calculation/rules}/__init__.py +0 -0
  200. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/clusterer/signature_calculation/rules/rule_template.py +0 -0
  201. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/clusterer/signature_calculation/signature_phase.py +0 -0
  202. {logprep-19.2.0/logprep/processor/datetime_extractor → logprep-19.3.0/logprep/processor/concatenator}/__init__.py +0 -0
  203. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/concatenator/processor.py +0 -0
  204. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/concatenator/rule.py +0 -0
  205. {logprep-19.2.0/logprep/processor/decoder → logprep-19.3.0/logprep/processor/datetime_extractor}/__init__.py +0 -0
  206. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/datetime_extractor/processor.py +0 -0
  207. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/datetime_extractor/rule.py +0 -0
  208. {logprep-19.2.0/logprep/processor/deleter → logprep-19.3.0/logprep/processor/decoder}/__init__.py +0 -0
  209. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/decoder/decoders.py +0 -0
  210. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/decoder/processor.py +0 -0
  211. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/decoder/rule.py +0 -0
  212. {logprep-19.2.0/logprep/processor/dissector → logprep-19.3.0/logprep/processor/deduplicator}/__init__.py +0 -0
  213. {logprep-19.2.0/logprep/processor/domain_label_extractor → logprep-19.3.0/logprep/processor/deleter}/__init__.py +0 -0
  214. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/deleter/processor.py +0 -0
  215. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/deleter/rule.py +0 -0
  216. {logprep-19.2.0/logprep/processor/domain_resolver → logprep-19.3.0/logprep/processor/dissector}/__init__.py +0 -0
  217. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/dissector/processor.py +0 -0
  218. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/dissector/rule.py +0 -0
  219. {logprep-19.2.0/logprep/processor/dropper → logprep-19.3.0/logprep/processor/domain_label_extractor}/__init__.py +0 -0
  220. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/domain_label_extractor/processor.py +0 -0
  221. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/domain_label_extractor/rule.py +0 -0
  222. {logprep-19.2.0/logprep/processor/field_manager → logprep-19.3.0/logprep/processor/domain_resolver}/__init__.py +0 -0
  223. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/domain_resolver/processor.py +0 -0
  224. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/domain_resolver/rule.py +0 -0
  225. {logprep-19.2.0/logprep/processor/generic_adder → logprep-19.3.0/logprep/processor/dropper}/__init__.py +0 -0
  226. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/dropper/processor.py +0 -0
  227. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/dropper/rule.py +0 -0
  228. {logprep-19.2.0/logprep/processor/generic_resolver → logprep-19.3.0/logprep/processor/field_manager}/__init__.py +0 -0
  229. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/field_manager/processor.py +0 -0
  230. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/field_manager/rule.py +0 -0
  231. {logprep-19.2.0/logprep/processor/geoip_enricher → logprep-19.3.0/logprep/processor/generic_adder}/__init__.py +0 -0
  232. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/generic_adder/processor.py +0 -0
  233. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/generic_adder/rule.py +0 -0
  234. {logprep-19.2.0/logprep/processor/grokker → logprep-19.3.0/logprep/processor/generic_resolver}/__init__.py +0 -0
  235. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/generic_resolver/processor.py +0 -0
  236. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/generic_resolver/rule.py +0 -0
  237. {logprep-19.2.0/logprep/processor/ip_informer → logprep-19.3.0/logprep/processor/geoip_enricher}/__init__.py +0 -0
  238. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/geoip_enricher/processor.py +0 -0
  239. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/geoip_enricher/rule.py +0 -0
  240. {logprep-19.2.0/logprep/processor/key_checker → logprep-19.3.0/logprep/processor/grokker}/__init__.py +0 -0
  241. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/grokker/processor.py +0 -0
  242. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/grokker/rule.py +0 -0
  243. {logprep-19.2.0/logprep/processor/labeler → logprep-19.3.0/logprep/processor/ip_informer}/__init__.py +0 -0
  244. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/ip_informer/processor.py +0 -0
  245. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/ip_informer/rule.py +0 -0
  246. {logprep-19.2.0/logprep/processor/list_comparison → logprep-19.3.0/logprep/processor/key_checker}/__init__.py +0 -0
  247. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/key_checker/processor.py +0 -0
  248. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/key_checker/rule.py +0 -0
  249. {logprep-19.2.0/logprep/processor/network_comparison → logprep-19.3.0/logprep/processor/labeler}/__init__.py +0 -0
  250. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/labeler/labeling_schema.py +0 -0
  251. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/labeler/processor.py +0 -0
  252. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/labeler/rule.py +0 -0
  253. {logprep-19.2.0/logprep/processor/pre_detector → logprep-19.3.0/logprep/processor/list_comparison}/__init__.py +0 -0
  254. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/list_comparison/processor.py +0 -0
  255. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/list_comparison/rule.py +0 -0
  256. {logprep-19.2.0/logprep/processor/pseudonymizer → logprep-19.3.0/logprep/processor/network_comparison}/__init__.py +0 -0
  257. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/network_comparison/processor.py +0 -0
  258. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/network_comparison/rule.py +0 -0
  259. {logprep-19.2.0/logprep/processor/replacer → logprep-19.3.0/logprep/processor/pre_detector}/__init__.py +0 -0
  260. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/pre_detector/ip_alerter.py +0 -0
  261. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/pre_detector/processor.py +0 -0
  262. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/pre_detector/rule.py +0 -0
  263. {logprep-19.2.0/logprep/processor/requester → logprep-19.3.0/logprep/processor/pseudonymizer}/__init__.py +0 -0
  264. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/pseudonymizer/processor.py +0 -0
  265. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/pseudonymizer/rule.py +0 -0
  266. {logprep-19.2.0/logprep/processor/selective_extractor → logprep-19.3.0/logprep/processor/replacer}/__init__.py +0 -0
  267. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/replacer/processor.py +0 -0
  268. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/replacer/rule.py +0 -0
  269. {logprep-19.2.0/logprep/processor/string_splitter → logprep-19.3.0/logprep/processor/requester}/__init__.py +0 -0
  270. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/requester/processor.py +0 -0
  271. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/requester/rule.py +0 -0
  272. {logprep-19.2.0/logprep/processor/template_replacer → logprep-19.3.0/logprep/processor/selective_extractor}/__init__.py +0 -0
  273. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/selective_extractor/processor.py +0 -0
  274. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/selective_extractor/rule.py +0 -0
  275. {logprep-19.2.0/logprep/processor/timestamp_differ → logprep-19.3.0/logprep/processor/string_splitter}/__init__.py +0 -0
  276. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/string_splitter/processor.py +0 -0
  277. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/string_splitter/rule.py +0 -0
  278. {logprep-19.2.0/logprep/processor/timestamper → logprep-19.3.0/logprep/processor/template_replacer}/__init__.py +0 -0
  279. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/template_replacer/processor.py +0 -0
  280. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/template_replacer/rule.py +0 -0
  281. {logprep-19.2.0/logprep/util → logprep-19.3.0/logprep/processor/timestamp_differ}/__init__.py +0 -0
  282. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/timestamp_differ/processor.py +0 -0
  283. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/timestamp_differ/rule.py +0 -0
  284. {logprep-19.2.0/logprep/util/auto_rule_tester → logprep-19.3.0/logprep/processor/timestamper}/__init__.py +0 -0
  285. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/timestamper/processor.py +0 -0
  286. {logprep-19.2.0 → logprep-19.3.0}/logprep/processor/timestamper/rule.py +0 -0
  287. {logprep-19.2.0 → logprep-19.3.0}/logprep/run_logprep.py +0 -0
  288. {logprep-19.2.0 → logprep-19.3.0}/logprep/run_ng.py +0 -0
  289. {logprep-19.2.0 → logprep-19.3.0}/logprep/runner.py +0 -0
  290. {logprep-19.2.0/logprep/util/grok → logprep-19.3.0/logprep/util}/__init__.py +0 -0
  291. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/ansi.py +0 -0
  292. {logprep-19.2.0/logprep/util/pseudo → logprep-19.3.0/logprep/util/auto_rule_tester}/__init__.py +0 -0
  293. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/auto_rule_tester/auto_rule_tester.py +0 -0
  294. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/auto_rule_tester/grok_pattern_replacer.py +0 -0
  295. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/cache.py +0 -0
  296. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/configuration.py +0 -0
  297. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/context_managers.py +0 -0
  298. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/converters.py +0 -0
  299. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/credentials.py +0 -0
  300. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/decorators.py +0 -0
  301. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/defaults.py +0 -0
  302. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/event.py +0 -0
  303. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/getter.py +0 -0
  304. {logprep-19.2.0/logprep/util/pseudo/commands → logprep-19.3.0/logprep/util/grok}/__init__.py +0 -0
  305. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/grok.py +0 -0
  306. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/aws +0 -0
  307. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/bacula +0 -0
  308. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/bind +0 -0
  309. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/bro +0 -0
  310. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/exim +0 -0
  311. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/firewalls +0 -0
  312. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/grok-patterns +0 -0
  313. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/haproxy +0 -0
  314. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/httpd +0 -0
  315. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/java +0 -0
  316. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/junos +0 -0
  317. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/linux-syslog +0 -0
  318. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/maven +0 -0
  319. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/mcollective +0 -0
  320. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/mongodb +0 -0
  321. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/nagios +0 -0
  322. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/postgresql +0 -0
  323. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/rails +0 -0
  324. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/redis +0 -0
  325. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/ruby +0 -0
  326. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/squid +0 -0
  327. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/ecs-v1/zeek +0 -0
  328. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/aws +0 -0
  329. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/bacula +0 -0
  330. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/bind +0 -0
  331. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/bro +0 -0
  332. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/exim +0 -0
  333. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/firewalls +0 -0
  334. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/grok-patterns +0 -0
  335. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/haproxy +0 -0
  336. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/httpd +0 -0
  337. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/java +0 -0
  338. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/junos +0 -0
  339. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/linux-syslog +0 -0
  340. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/maven +0 -0
  341. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/mcollective +0 -0
  342. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/mcollective-patterns +0 -0
  343. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/mongodb +0 -0
  344. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/nagios +0 -0
  345. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/postgresql +0 -0
  346. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/rails +0 -0
  347. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/redis +0 -0
  348. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/ruby +0 -0
  349. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok/patterns/legacy/squid +0 -0
  350. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/grok_pattern_loader.py +0 -0
  351. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/hasher.py +0 -0
  352. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/helper.py +0 -0
  353. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/http.py +0 -0
  354. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/input_common.py +0 -0
  355. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/json_handling.py +0 -0
  356. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/logging.py +0 -0
  357. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/pipeline_profiler.py +0 -0
  358. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/processor_generator.py +0 -0
  359. {logprep-19.2.0/logprep/util/pseudo/keygenerator → logprep-19.3.0/logprep/util/pseudo}/__init__.py +0 -0
  360. {logprep-19.2.0/logprep/util/url → logprep-19.3.0/logprep/util/pseudo/commands}/__init__.py +0 -0
  361. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/pseudo/commands/generate_keys.py +0 -0
  362. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/pseudo/commands/pseudonymize.py +0 -0
  363. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/pseudo/decrypter.py +0 -0
  364. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/pseudo/keygenerator/generate_rsa_key.py +0 -0
  365. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/queue.py +0 -0
  366. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/rstr/__init__.py +0 -0
  367. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/rstr/rstr_base.py +0 -0
  368. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/rstr/xeger.py +0 -0
  369. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/rule_dry_runner.py +0 -0
  370. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/rule_loader.py +0 -0
  371. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/tag_yaml_loader.py +0 -0
  372. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/template_processor.py.j2 +0 -0
  373. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/template_processor_test.py.j2 +0 -0
  374. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/template_rule.py.j2 +0 -0
  375. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/template_rule_test.py.j2 +0 -0
  376. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/time.py +0 -0
  377. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/typing.py +0 -0
  378. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/url/tldlist/public_suffix_list.dat +0 -0
  379. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/url/url.py +0 -0
  380. {logprep-19.2.0 → logprep-19.3.0}/logprep/util/validators.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: logprep
3
- Version: 19.2.0
3
+ Version: 19.3.0
4
4
  Summary: Logprep allows to collect, process and forward log messages from various data sources.
5
5
  Keywords: kafka,etl,sre,preprocessing,opensearch,soar,logdata
6
6
  License: GNU LESSER GENERAL PUBLIC LICENSE
@@ -519,49 +519,38 @@ Classifier: Programming Language :: Python :: 3.14
519
519
  Classifier: Operating System :: POSIX :: Linux
520
520
  Classifier: Topic :: Security
521
521
  Classifier: Topic :: System :: Logging
522
- Requires-Dist: aiohttp>=3.13.3,<4
523
522
  Requires-Dist: attrs<26
524
- Requires-Dist: certifi>=2023.7.22,<2026
525
523
  Requires-Dist: confluent-kafka>2,<3
526
524
  Requires-Dist: filelock<4
527
525
  Requires-Dist: geoip2>=5.2.0,<6
528
526
  Requires-Dist: jsonref<2
529
527
  Requires-Dist: luqum<2
530
- Requires-Dist: more-itertools==8.10.0
531
528
  Requires-Dist: numpy>=1.26.0,<3
532
529
  Requires-Dist: opensearch-py>=3.2,<4
533
530
  Requires-Dist: prometheus-client<1
534
- Requires-Dist: protobuf>=3.20.2,<7
535
531
  Requires-Dist: pycryptodome<4
536
532
  Requires-Dist: pyparsing<4
537
533
  Requires-Dist: scikit-learn>=1.2.0,<2
538
- Requires-Dist: scipy>=1.9.2,<2
539
534
  Requires-Dist: joblib<2
540
- Requires-Dist: pyyaml<7
541
535
  Requires-Dist: requests>=2.33.0,<3
542
536
  Requires-Dist: ruamel-yaml<1
543
537
  Requires-Dist: schedule<2
544
538
  Requires-Dist: urllib3>=2.7.0,<3
545
539
  Requires-Dist: uvicorn<1
546
- Requires-Dist: deepdiff>=8.6.2,<9
547
540
  Requires-Dist: msgspec<1
548
541
  Requires-Dist: boto3<2
549
- Requires-Dist: pydantic<3
550
542
  Requires-Dist: click<9
551
- Requires-Dist: pandas<3
552
- Requires-Dist: tabulate<1
553
543
  Requires-Dist: falcon>=3.1.3,<5
554
544
  Requires-Dist: uvloop<1
555
545
  Requires-Dist: httptools<1
546
+ Requires-Dist: more-itertools>=11.1.0
556
547
  Requires-Dist: black>=26.0.0 ; extra == 'dev'
557
- Requires-Dist: httpx ; extra == 'dev'
558
548
  Requires-Dist: isort ; extra == 'dev'
559
549
  Requires-Dist: pylint ; extra == 'dev'
560
550
  Requires-Dist: pytest ; extra == 'dev'
561
551
  Requires-Dist: pytest-cov ; extra == 'dev'
562
552
  Requires-Dist: responses ; extra == 'dev'
563
553
  Requires-Dist: jinja2 ; extra == 'dev'
564
- Requires-Dist: maturin ; extra == 'dev'
565
554
  Requires-Dist: cibuildwheel ; extra == 'dev'
566
555
  Requires-Dist: asgiref ; extra == 'dev'
567
556
  Requires-Dist: pytest-asyncio ; extra == 'dev'
@@ -571,6 +560,7 @@ Requires-Dist: psutil ; extra == 'dev'
571
560
  Requires-Dist: types-requests ; extra == 'dev'
572
561
  Requires-Dist: types-psutil ; extra == 'dev'
573
562
  Requires-Dist: types-pyyaml ; extra == 'dev'
563
+ Requires-Dist: deepdiff>=8.6.2,<9 ; extra == 'dev'
574
564
  Requires-Dist: sphinx>=8.2.0,<9 ; extra == 'doc'
575
565
  Requires-Dist: sphinx-rtd-theme ; extra == 'doc'
576
566
  Requires-Dist: sphinxcontrib-datatemplates ; extra == 'doc'
@@ -579,6 +569,7 @@ Requires-Dist: sphinx-copybutton ; extra == 'doc'
579
569
  Requires-Dist: nbsphinx>=0.9 ; extra == 'doc'
580
570
  Requires-Dist: ipython>=8.7 ; extra == 'doc'
581
571
  Requires-Dist: openpyxl ; extra == 'doc'
572
+ Requires-Dist: pandas<3 ; extra == 'doc'
582
573
  Requires-Python: >=3.11
583
574
  Project-URL: Homepage, https://github.com/fkie-cad/Logprep
584
575
  Project-URL: Documentation, https://logprep.readthedocs.io/en/latest/
@@ -19,15 +19,11 @@ Example
19
19
 
20
20
  import logging
21
21
  import typing
22
- from typing import TYPE_CHECKING
23
22
 
24
23
  from attrs import define, field, validators
25
24
 
26
25
  from logprep.abc.output import Output
27
26
 
28
- if TYPE_CHECKING:
29
- from logprep.abc.connector import Connector # pragma: no cover
30
-
31
27
  logger = logging.getLogger("DummyOutput")
32
28
 
33
29
 
@@ -3,10 +3,12 @@
3
3
  import re
4
4
  from abc import ABC, abstractmethod
5
5
  from itertools import chain, zip_longest
6
- from typing import Any, Sequence
6
+ from typing import Any, Generic, Sequence, TypeVar
7
7
 
8
8
  from logprep.util.helper import field_list_to_dotted_field
9
9
 
10
+ RangeBoundary = TypeVar("RangeBoundary", int, float, str)
11
+
10
12
 
11
13
  class FilterExpressionError(Exception):
12
14
  """Base class for FilterExpression related exceptions."""
@@ -289,37 +291,88 @@ class FloatFilterExpression(KeyValueBasedFilterExpression):
289
291
  return value == self._expected_value
290
292
 
291
293
 
292
- class RangeBasedFilterExpression(KeyBasedFilterExpression):
294
+ class RangeBasedFilterExpression(KeyBasedFilterExpression, Generic[RangeBoundary]):
293
295
  """Base class of filter expressions that match for a range of values."""
294
296
 
295
- def __init__(self, key: Sequence[str], lower_bound: float, upper_bound: float):
297
+ def __init__(
298
+ self,
299
+ key: Sequence[str],
300
+ lower_bound: RangeBoundary,
301
+ upper_bound: RangeBoundary,
302
+ include_lower_bound: bool = True,
303
+ include_upper_bound: bool = True,
304
+ ):
296
305
  super().__init__(key)
297
- self._lower_bound = lower_bound
298
- self._upper_bound = upper_bound
306
+ self._lower_bound: RangeBoundary = lower_bound
307
+ self._upper_bound: RangeBoundary = upper_bound
308
+ self._include_lower_bound = include_lower_bound
309
+ self._include_upper_bound = include_upper_bound
299
310
 
300
311
  def __repr__(self) -> str:
301
- return f"{self.key_as_dotted_string}:[{self._lower_bound} TO {self._upper_bound}]"
312
+ opening_bracket = "[" if self._include_lower_bound else "{"
313
+ closing_bracket = "]" if self._include_upper_bound else "}"
314
+
315
+ return (
316
+ f"{self.key_as_dotted_string}:"
317
+ f"{opening_bracket}{self._lower_bound} TO {self._upper_bound}"
318
+ f"{closing_bracket}"
319
+ )
320
+
321
+ def _matches_lower_bound(self, value: RangeBoundary) -> bool:
322
+ if self._include_lower_bound:
323
+ return value >= self._lower_bound
324
+ return value > self._lower_bound
325
+
326
+ def _matches_upper_bound(self, value: RangeBoundary) -> bool:
327
+ if self._include_upper_bound:
328
+ return value <= self._upper_bound
329
+ return value < self._upper_bound
330
+
331
+ def _matches_range(self, value: RangeBoundary) -> bool:
332
+ return self._matches_lower_bound(value) and self._matches_upper_bound(value)
302
333
 
303
334
  def does_match(self, document: dict):
304
335
  raise NotImplementedError
305
336
 
306
337
 
307
- class IntegerRangeFilterExpression(RangeBasedFilterExpression):
338
+ class IntegerRangeFilterExpression(RangeBasedFilterExpression[int]):
308
339
  """Range based filter expression that matches for integers."""
309
340
 
310
341
  def does_match(self, document: dict) -> bool:
311
342
  value = self._get_value(self.key, document)
312
343
 
313
- return self._lower_bound <= value <= self._upper_bound
344
+ if not isinstance(value, int) or isinstance(value, bool):
345
+ return False
346
+
347
+ return self._matches_range(value)
314
348
 
315
349
 
316
- class FloatRangeFilterExpression(RangeBasedFilterExpression):
350
+ class FloatRangeFilterExpression(RangeBasedFilterExpression[float]):
317
351
  """Range based filter expression that matches for floats."""
318
352
 
319
353
  def does_match(self, document: dict) -> bool:
320
354
  value = self._get_value(self.key, document)
321
355
 
322
- return self._lower_bound <= value <= self._upper_bound
356
+ if not isinstance(value, float) or isinstance(value, bool):
357
+ return False
358
+
359
+ return self._matches_range(value)
360
+
361
+
362
+ class StringRangeFilterExpression(RangeBasedFilterExpression[str]):
363
+ """Range based filter expression that matches for strings.
364
+
365
+ String ranges are compared lexicographically.
366
+ """
367
+
368
+ def does_match(self, document: dict) -> bool:
369
+ value = self._get_value(self.key, document)
370
+
371
+ # Avoid comparing strings with other value types, which would raise a TypeError.
372
+ if not isinstance(value, str):
373
+ return False
374
+
375
+ return self._matches_range(value)
323
376
 
324
377
 
325
378
  class RegExFilterExpression(KeyValueBasedFilterExpression):
@@ -1,4 +1,6 @@
1
1
  # pylint: disable=anomalous-backslash-in-string
2
+ # pylint: disable=too-many-positional-arguments
3
+ # pylint: disable=too-many-return-statements
2
4
  r"""
3
5
  Filter
4
6
  ======
@@ -58,6 +60,101 @@ This example is not complete, since rules are specific to processors and require
58
60
 
59
61
  { "filter": "event_id: 1 AND NOT ip_address: 192.168.0.1" }
60
62
 
63
+ Range-Filter
64
+ ------------
65
+
66
+ It is possible to use range expressions to match integer, floating-point, and
67
+ string values. Square brackets include a boundary, while curly brackets exclude
68
+ a boundary. String ranges are compared lexicographically.
69
+
70
+ The lower and upper boundaries of a range must have the same type. Mixed ranges
71
+ such as integer-to-float, integer-to-string, or float-to-string are not
72
+ supported.
73
+
74
+
75
+ .. code-block:: yaml
76
+ :linenos:
77
+ :caption: Example
78
+
79
+ filter: 'age:[18 TO 65]'
80
+
81
+
82
+ The example matches log messages in which the value of :code:`age` is greater
83
+ than or equal to :code:`18` and less than or equal to :code:`65`.
84
+
85
+ Exclusive boundaries are also supported:
86
+
87
+
88
+ .. code-block:: yaml
89
+ :linenos:
90
+ :caption: Example
91
+
92
+ filter: 'age:{18 TO 65}'
93
+
94
+
95
+ The example matches log messages in which the value of :code:`age` is greater
96
+ than :code:`18` and less than :code:`65`.
97
+
98
+ Floating-point ranges are supported as well:
99
+
100
+
101
+ .. code-block:: yaml
102
+ :linenos:
103
+ :caption: Example
104
+
105
+ filter: 'temperature:[18.5 TO 25.0]'
106
+
107
+
108
+ String ranges are compared lexicographically:
109
+
110
+
111
+ .. code-block:: yaml
112
+ :linenos:
113
+ :caption: Example
114
+
115
+ filter: 'status:[alpha TO stable]'
116
+
117
+
118
+ This also allows matching consistently formatted ISO-8601 timestamps as string
119
+ ranges:
120
+
121
+
122
+ .. code-block:: yaml
123
+ :linenos:
124
+ :caption: Example
125
+
126
+ filter: 'timestamp:[2024-01-01T00:00:00Z TO 2024-12-31T23:59:59Z]'
127
+
128
+
129
+ The example matches log messages in which the value of :code:`timestamp` is
130
+ lexicographically greater than or equal to :code:`2024-01-01T00:00:00Z` and
131
+ less than or equal to :code:`2024-12-31T23:59:59Z`.
132
+
133
+ Range boundaries containing Lucene special characters must be quoted. This is
134
+ required, for example, for ISO-8601 timestamps with timezone offsets:
135
+
136
+
137
+ .. code-block:: yaml
138
+ :linenos:
139
+ :caption: Example
140
+
141
+ filter: 'timestamp:["2024-01-01T00:00:00+01:00" TO "2024-12-31T23:59:59+01:00"]'
142
+
143
+
144
+ Range expressions can also be used within field groups:
145
+
146
+
147
+ .. code-block:: yaml
148
+ :linenos:
149
+ :caption: Example
150
+
151
+ filter: 'temperature:([18.5 TO 25.0])'
152
+
153
+
154
+ Open boundaries using :code:`*`, non-finite numeric boundaries, mixed boundary
155
+ types, and unquoted boundaries containing Lucene special characters are not
156
+ supported.
157
+
61
158
  RegEx-Filter
62
159
  ------------
63
160
 
@@ -73,7 +170,8 @@ To be recognized as a regular expression, the filter field has to start with
73
170
  filter: 'ip_address: /192\.168\.0\..*/'
74
171
 
75
172
 
76
- [Deprecated, but still functional] The field with the regex pattern must be added to the optional field
173
+ [Deprecated, but still functional] The field with the regex pattern
174
+ must be added to the optional field
77
175
  :code:`regex_fields` in the rule definition.
78
176
 
79
177
  In the following example the field :code:`ip_address` is defined as regex field.
@@ -93,6 +191,7 @@ require additional options.
93
191
  """
94
192
 
95
193
  import logging
194
+ import math
96
195
  import re
97
196
  from itertools import chain, zip_longest
98
197
  from typing import Sequence
@@ -106,24 +205,31 @@ from luqum.tree import (
106
205
  Not,
107
206
  OrOperation,
108
207
  Phrase,
208
+ Prohibit,
209
+ Range,
109
210
  Regex,
110
211
  SearchField,
111
212
  Word,
112
213
  )
214
+
113
215
  from logprep.abc.exceptions import LogprepException
114
216
  from logprep.filter.expression.filter_expression import (
115
217
  Always,
116
218
  And,
117
219
  Exists,
118
220
  FilterExpression,
221
+ FloatRangeFilterExpression,
222
+ IntegerRangeFilterExpression,
119
223
  )
120
224
  from logprep.filter.expression.filter_expression import Not as NotExpression
121
225
  from logprep.filter.expression.filter_expression import (
122
226
  Null,
123
227
  Or,
228
+ RangeBoundary,
124
229
  RegExFilterExpression,
125
230
  SigmaFilterExpression,
126
231
  StringFilterExpression,
232
+ StringRangeFilterExpression,
127
233
  )
128
234
  from logprep.util.helper import field_list_to_dotted_field, get_dotted_field_list
129
235
 
@@ -275,6 +381,14 @@ class LuceneTransformer:
275
381
  # pylint: enable=no-value-for-parameter
276
382
  if isinstance(tree, Group):
277
383
  return self._parse_tree(tree.children[0])
384
+
385
+ if isinstance(tree, Range):
386
+ if self._last_search_field is None:
387
+ raise LuceneFilterError(f'The expression "{str(tree)}" is invalid!')
388
+
389
+ key = get_dotted_field_list(self._last_search_field)
390
+ return self._parse_range(key, tree)
391
+
278
392
  if isinstance(tree, SearchField):
279
393
  if isinstance(tree.expr, FieldGroup):
280
394
  self._last_search_field = tree.name
@@ -288,6 +402,171 @@ class LuceneTransformer:
288
402
  return self._create_value_expression(tree)
289
403
  raise LuceneFilterError(f'The expression "{str(tree)}" is invalid!')
290
404
 
405
+ def _parse_range(self, key: Sequence[str], expr: Range) -> FilterExpression:
406
+ lower_value = self._get_range_boundary_value(expr.low)
407
+ upper_value = self._get_range_boundary_value(expr.high)
408
+
409
+ for range_parser in (
410
+ self._parse_integer_range,
411
+ self._parse_float_range,
412
+ self._parse_string_range,
413
+ ):
414
+ range_filter_expression = range_parser(
415
+ key,
416
+ lower_value,
417
+ upper_value,
418
+ expr.include_low,
419
+ expr.include_high,
420
+ expr,
421
+ )
422
+
423
+ if range_filter_expression is not None:
424
+ return range_filter_expression
425
+
426
+ raise LuceneFilterError(f'The expression "{expr}" is invalid!')
427
+
428
+ @staticmethod
429
+ def _parse_integer_range(
430
+ key: Sequence[str],
431
+ lower_value: str,
432
+ upper_value: str,
433
+ include_lower_bound: bool,
434
+ include_upper_bound: bool,
435
+ expr: Range,
436
+ ) -> IntegerRangeFilterExpression | None:
437
+ """Create an integer range expression if both boundaries are integers."""
438
+ try:
439
+ lower_bound = int(lower_value)
440
+ upper_bound = int(upper_value)
441
+ except ValueError:
442
+ return None
443
+
444
+ LuceneTransformer._validate_range_boundaries(lower_bound, upper_bound, expr)
445
+
446
+ return IntegerRangeFilterExpression(
447
+ key,
448
+ lower_bound,
449
+ upper_bound,
450
+ include_lower_bound,
451
+ include_upper_bound,
452
+ )
453
+
454
+ @staticmethod
455
+ def _parse_float_range(
456
+ key: Sequence[str],
457
+ lower_value: str,
458
+ upper_value: str,
459
+ include_lower_bound: bool,
460
+ include_upper_bound: bool,
461
+ expr: Range,
462
+ ) -> FloatRangeFilterExpression | None:
463
+ """Create a float range expression if both boundaries are finite numbers."""
464
+ try:
465
+ lower_bound = float(lower_value)
466
+ upper_bound = float(upper_value)
467
+ except ValueError:
468
+ return None
469
+
470
+ if not math.isfinite(lower_bound) or not math.isfinite(upper_bound):
471
+ raise LuceneFilterError(
472
+ f'The expression "{expr}" is invalid. ' "Range boundaries must be finite numbers."
473
+ )
474
+
475
+ LuceneTransformer._validate_range_boundaries(lower_bound, upper_bound, expr)
476
+
477
+ return FloatRangeFilterExpression(
478
+ key,
479
+ lower_bound,
480
+ upper_bound,
481
+ include_lower_bound,
482
+ include_upper_bound,
483
+ )
484
+
485
+ @staticmethod
486
+ def _parse_string_range(
487
+ key: Sequence[str],
488
+ lower_value: str,
489
+ upper_value: str,
490
+ include_lower_bound: bool,
491
+ include_upper_bound: bool,
492
+ expr: Range,
493
+ ) -> StringRangeFilterExpression | None:
494
+ """Create a lexicographic string range expression for non-numeric boundaries."""
495
+ if lower_value == "*" or upper_value == "*":
496
+ raise LuceneFilterError(f'The expression "{expr}" is invalid!')
497
+
498
+ if LuceneTransformer._is_finite_numeric_range_boundary(
499
+ lower_value
500
+ ) or LuceneTransformer._is_finite_numeric_range_boundary(upper_value):
501
+ return None
502
+
503
+ LuceneTransformer._validate_range_boundaries(lower_value, upper_value, expr)
504
+
505
+ return StringRangeFilterExpression(
506
+ key,
507
+ lower_value,
508
+ upper_value,
509
+ include_lower_bound,
510
+ include_upper_bound,
511
+ )
512
+
513
+ @staticmethod
514
+ def _is_finite_numeric_range_boundary(value: str) -> bool:
515
+ """Return whether a range boundary can be interpreted as a finite number."""
516
+ try:
517
+ numeric_value = float(value)
518
+ except ValueError:
519
+ return False
520
+
521
+ return math.isfinite(numeric_value)
522
+
523
+ @staticmethod
524
+ def _get_range_boundary_value(token: luqum.tree) -> str:
525
+ """Return a range boundary as a normalized string.
526
+
527
+ Luqum parses a negative boundary such as ``-10`` as
528
+ ``Prohibit(Word("10"))`` instead of ``Word("-10")``. Quoted boundaries are
529
+ parsed as phrases and are required for values containing Lucene special
530
+ characters, such as ISO-8601 timestamps with timezone offsets.
531
+ """
532
+
533
+ if isinstance(token, Word):
534
+ return token.value
535
+
536
+ if isinstance(token, Phrase):
537
+ return token.value.strip('"')
538
+
539
+ if isinstance(token, Prohibit) and len(token.children) == 1:
540
+ child = token.children[0]
541
+
542
+ if isinstance(child, Word):
543
+ return f"-{child.value}"
544
+
545
+ raise LuceneFilterError(f'The range boundary "{token}" is invalid!')
546
+
547
+ @staticmethod
548
+ def _validate_range_boundaries(
549
+ lower_bound: RangeBoundary,
550
+ upper_bound: RangeBoundary,
551
+ expr: Range,
552
+ ) -> None:
553
+ """Validate that the range boundaries form an ascending range.
554
+
555
+ Range filter expressions require the lower boundary to be less than or equal
556
+ to the upper boundary. This is independent of whether the boundaries are
557
+ inclusive or exclusive.
558
+
559
+ Numeric boundaries are compared numerically. String boundaries are compared
560
+ lexicographically. Without this validation, a reversed range such as
561
+ ``[10 TO 0]`` or ``[foo TO bar]`` would be accepted but could never match
562
+ any value, which would hide a likely configuration error.
563
+ """
564
+
565
+ if lower_bound > upper_bound:
566
+ raise LuceneFilterError(
567
+ "The lower range boundary must not exceed " f'the upper range boundary: "{expr}"'
568
+ )
569
+
291
570
  def _create_field_group_expression(
292
571
  self, tree: luqum.tree, dotted_field: str
293
572
  ) -> FilterExpression:
@@ -321,22 +600,27 @@ class LuceneTransformer:
321
600
  return expressions
322
601
 
323
602
  def _create_field(self, tree: luqum.tree) -> FilterExpression:
603
+ key = get_dotted_field_list(tree.name)
604
+
324
605
  if isinstance(tree.expr, (Phrase, Word)):
325
- key = get_dotted_field_list(tree.name)
326
606
  if tree.expr.value == "null":
327
607
  return Null(key)
328
608
 
329
609
  value = self._strip_quote_from_string(tree.expr.value)
330
610
  value = self._remove_lucene_escaping(value)
331
611
  return self._get_filter_expression(key, value)
612
+
332
613
  if isinstance(tree.expr, Regex):
333
- key = get_dotted_field_list(tree.name)
334
614
  if tree.expr.value == "null":
335
615
  return Null(key)
336
616
 
337
617
  value = self._strip_quote_from_string(tree.expr.value)
338
618
  value = self._remove_lucene_escaping(value)
339
619
  return self._get_filter_expression_regex(key, value)
620
+
621
+ if isinstance(tree.expr, Range):
622
+ return self._parse_range(key, tree.expr)
623
+
340
624
  raise LuceneFilterError(f'The expression "{str(tree)}" is invalid!')
341
625
 
342
626
  @staticmethod
@@ -19,7 +19,6 @@ Example
19
19
 
20
20
  import logging
21
21
  import typing
22
- from typing import TYPE_CHECKING
23
22
 
24
23
  from attrs import define, field, validators
25
24
 
@@ -27,9 +26,6 @@ from logprep.ng.abc.event import Event
27
26
  from logprep.ng.abc.output import Output
28
27
  from logprep.ng.event.log_event import LogEvent
29
28
 
30
- if TYPE_CHECKING:
31
- from logprep.abc.connector import Connector # pragma: no cover
32
-
33
29
  logger = logging.getLogger("DummyOutput")
34
30
 
35
31
 
@@ -88,7 +84,7 @@ class DummyOutput(Output):
88
84
  return typing.cast("DummyOutput.Config", self._config)
89
85
 
90
86
  @Output._handle_errors
91
- def store(self, event: Event) -> None:
87
+ def store(self, event: LogEvent) -> None:
92
88
  """Store the document in the output destination.
93
89
 
94
90
  Parameters
@@ -44,7 +44,6 @@ Processor Configuration
44
44
  """
45
45
 
46
46
  import typing
47
- from typing import Tuple
48
47
 
49
48
  from attrs import define, field, validators
50
49
 
@@ -57,11 +56,11 @@ from logprep.processor.clusterer.signature_calculation.signature_phase import (
57
56
  SignaturePhaseStreaming,
58
57
  )
59
58
  from logprep.util.helper import (
59
+ MISSING,
60
+ FieldValue,
60
61
  add_fields_to,
61
62
  get_dotted_field_value,
62
63
  get_field_value_no_slice,
63
- MISSING,
64
- FieldValue,
65
64
  )
66
65
 
67
66
 
@@ -0,0 +1,50 @@
1
+ """
2
+ Deduplicator
3
+ ============
4
+
5
+ The `deduplicator` is a processor that removes duplicate values from specified fields.
6
+
7
+ Processor Configuration
8
+ ^^^^^^^^^^^^^^^^^^^^^^^
9
+ .. code-block:: yaml
10
+ :linenos:
11
+
12
+ - deduplicatorname:
13
+ type: deduplicator
14
+ rules:
15
+ - tests/testdata/rules/rules
16
+
17
+ .. autoclass:: logprep.processor.deduplicator.processor.Deduplicator.Config
18
+ :members:
19
+ :undoc-members:
20
+ :inherited-members:
21
+ :noindex:
22
+
23
+ .. automodule:: logprep.processor.deduplicator.rule
24
+ """
25
+
26
+ import typing
27
+
28
+ from logprep.ng.abc.processor import Processor
29
+ from logprep.processor.base.rule import Rule
30
+ from logprep.processor.deduplicator.rule import DeduplicatorRule
31
+ from logprep.util.helper import get_dotted_field_value, add_fields_to
32
+
33
+
34
+ class Deduplicator(Processor):
35
+ """A processor that removes duplicates from lists"""
36
+
37
+ rule_class = DeduplicatorRule # type: ignore
38
+
39
+ def _apply_rules(self, event: dict, rule: Rule):
40
+ rule = typing.cast(DeduplicatorRule, rule)
41
+ for field in rule.fields:
42
+ value_list = get_dotted_field_value(event, field)
43
+ if not isinstance(value_list, list):
44
+ continue
45
+
46
+ unique = []
47
+ for value in value_list:
48
+ if value not in unique:
49
+ unique.append(value)
50
+ add_fields_to(event, {field: unique}, rule, False, True)