tellaro-query-language 0.2.11__tar.gz → 0.2.13__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.
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/PKG-INFO +1 -1
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/pyproject.toml +1 -1
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/mutators/dns.py +11 -22
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/post_processor.py +13 -4
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/LICENSE +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/README.md +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/__init__.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/analyzer.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/cache/__init__.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/cache/base.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/cache/memory.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/cache/redis.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/cli.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/core.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/core_components/README.md +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/core_components/__init__.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/core_components/file_operations.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/core_components/opensearch_operations.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/core_components/stats_operations.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/core_components/validation_operations.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/evaluator.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/evaluator_components/README.md +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/evaluator_components/__init__.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/evaluator_components/field_access.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/evaluator_components/special_expressions.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/evaluator_components/value_comparison.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/exceptions.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/field_type_inference.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/geoip_normalizer.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/mutator_analyzer.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/mutators/__init__.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/mutators/base.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/mutators/encoding.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/mutators/geo.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/mutators/list.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/mutators/network.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/mutators/security.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/mutators/string.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/opensearch.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/opensearch_components/README.md +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/opensearch_components/__init__.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/opensearch_components/field_mapping.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/opensearch_components/lucene_converter.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/opensearch_components/query_converter.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/opensearch_mappings.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/opensearch_stats.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/parser.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/parser_components/README.md +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/parser_components/__init__.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/parser_components/ast_builder.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/parser_components/error_analyzer.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/parser_components/field_extractor.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/parser_components/grammar.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/scripts.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/stats_evaluator.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/stats_transformer.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/streaming_file_processor.py +0 -0
- {tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/validators.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "tellaro-query-language"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.13"
|
|
4
4
|
description = "A flexible, human-friendly query language for searching and filtering structured data"
|
|
5
5
|
authors = ["Justin Henderson <justin@tellaro.io>"]
|
|
6
6
|
license = "Proprietary"
|
|
@@ -294,28 +294,17 @@ class NSLookupMutator(BaseMutator):
|
|
|
294
294
|
append_to_result(record, dns_field, results_array)
|
|
295
295
|
# If no results, don't set any fields
|
|
296
296
|
|
|
297
|
-
# For enrichment mutators, return
|
|
298
|
-
#
|
|
299
|
-
#
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
first_answers = []
|
|
309
|
-
for query in queries:
|
|
310
|
-
if query in resolved_results:
|
|
311
|
-
dns_data = resolved_results[query]
|
|
312
|
-
answers = dns_data.get("answers", [])
|
|
313
|
-
if answers:
|
|
314
|
-
first_answers.append(answers[0])
|
|
315
|
-
return first_answers if first_answers else value
|
|
316
|
-
else:
|
|
317
|
-
# No results: return original value
|
|
318
|
-
return value
|
|
297
|
+
# For enrichment mutators, return the original value (not the DNS answer)
|
|
298
|
+
# This ensures the original field (e.g., destination.ip) is NOT overwritten
|
|
299
|
+
# The enrichment data (domain, dns) is already stored via append_to_result above
|
|
300
|
+
#
|
|
301
|
+
# IMPORTANT: We return the original value to prevent schema violations.
|
|
302
|
+
# For example, if destination.ip is typed as 'ip' in OpenSearch,
|
|
303
|
+
# returning a hostname like '170-114-14-33.zoom.us' would cause indexing errors.
|
|
304
|
+
#
|
|
305
|
+
# If the caller needs the resolved DNS name for comparison, they should
|
|
306
|
+
# access it via the domain field (e.g., destination.domain contains 'google')
|
|
307
|
+
return value
|
|
319
308
|
|
|
320
309
|
def _format_dns_ecs( # noqa: C901
|
|
321
310
|
self, query_value: str, records: List[Dict[str, Any]], query_types: List[str]
|
|
@@ -701,19 +701,24 @@ class QueryPostProcessor:
|
|
|
701
701
|
# Check if this is an enrichment mutator first
|
|
702
702
|
from .mutators import ENRICHMENT_MUTATORS
|
|
703
703
|
|
|
704
|
-
# Check if we have geo/geoip_lookup enrichment mutator
|
|
704
|
+
# Check if we have geo/geoip_lookup or nslookup enrichment mutator
|
|
705
705
|
is_geo_enrichment = False
|
|
706
|
+
is_nslookup_enrichment = False
|
|
706
707
|
for mutator in requirement.mutators:
|
|
707
708
|
mutator_name = mutator.get("name", "").lower()
|
|
708
709
|
if mutator_name in ["geo", "geoip_lookup"]:
|
|
709
710
|
is_geo_enrichment = True
|
|
710
|
-
|
|
711
|
+
elif mutator_name == "nslookup":
|
|
712
|
+
is_nslookup_enrichment = True
|
|
713
|
+
|
|
714
|
+
# Skip field transformation for enrichment mutators (they add data, not transform)
|
|
715
|
+
is_any_enrichment = is_geo_enrichment or is_nslookup_enrichment
|
|
711
716
|
|
|
712
|
-
if should_transform_output and not
|
|
717
|
+
if should_transform_output and not is_any_enrichment:
|
|
713
718
|
# Update the result with the mutated value
|
|
714
719
|
# Use the original field name for the output
|
|
715
720
|
self._set_field_value(result, requirement.field_name, mutated_value)
|
|
716
|
-
elif not
|
|
721
|
+
elif not is_any_enrichment:
|
|
717
722
|
# For type-changing mutators with filtering operations, store in temp field
|
|
718
723
|
temp_field_name = self._get_mutated_field_name(requirement.field_name)
|
|
719
724
|
self._set_field_value(result, temp_field_name, mutated_value)
|
|
@@ -750,6 +755,10 @@ class QueryPostProcessor:
|
|
|
750
755
|
if "as" in mutated_value:
|
|
751
756
|
result["enrichment"]["as"] = mutated_value["as"]
|
|
752
757
|
|
|
758
|
+
# Handle nslookup enrichment - the mutator already adds domain/dns via append_to_result
|
|
759
|
+
# We just need to ensure the original field value is preserved (don't overwrite)
|
|
760
|
+
# The nslookup mutator's apply() method handles enrichment storage via append_to_result()
|
|
761
|
+
|
|
753
762
|
return enrichment_mutator_found
|
|
754
763
|
|
|
755
764
|
except Exception:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/core_components/README.md
RENAMED
|
File without changes
|
{tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/core_components/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/field_type_inference.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/mutators/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/mutators/encoding.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/mutators/security.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/opensearch_mappings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/parser_components/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/parser_components/grammar.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/stats_transformer.py
RENAMED
|
File without changes
|
{tellaro_query_language-0.2.11 → tellaro_query_language-0.2.13}/src/tql/streaming_file_processor.py
RENAMED
|
File without changes
|
|
File without changes
|