-
Notifications
You must be signed in to change notification settings - Fork 419
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
- Loading branch information
Mathieu Martin
authored
Oct 2, 2020
1 parent
e086abb
commit b9b1ba5
Showing
5 changed files
with
100 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# This script performs a best effort fallback of basic data types to equivalent | ||
# OSS data types. | ||
# Note however that not all basic data types have an OSS replacement. | ||
# | ||
# The way this script is currently written, it has to be run on the fields *before* | ||
# the cleaner script applies defaults, as there's no concept of defaults here. | ||
# But since it navigates using the visitor script, it can easily be moved around | ||
# in the chain, provided we add support for defaults as well. | ||
# | ||
# For now, no warning is output on basic fields that don't have a fallback. | ||
# This could be improved if ECS starts using such types. | ||
|
||
from schema import visitor | ||
|
||
TYPE_FALLBACKS = { | ||
'wildcard': 'keyword', | ||
'version': 'keyword' | ||
} | ||
|
||
|
||
def fallback(fields): | ||
"""Verify all fields for basic data type usage, and fallback to an OSS equivalent if appropriate.""" | ||
visitor.visit_fields(fields, field_func=perform_fallback) | ||
|
||
|
||
def perform_fallback(field): | ||
"""Performs a best effort fallback of basic data types to equivalent OSS data types.""" | ||
if field['field_details']['type'] in TYPE_FALLBACKS.keys(): | ||
field['field_details']['type'] = TYPE_FALLBACKS[field['field_details']['type']] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
import os | ||
import pprint | ||
import sys | ||
import unittest | ||
|
||
sys.path.append(os.path.join(os.path.dirname(__file__), '../..')) | ||
|
||
from schema import oss | ||
from schema import visitor | ||
|
||
|
||
class TestSchemaOss(unittest.TestCase): | ||
|
||
def setUp(self): | ||
self.maxDiff = None | ||
|
||
def test_wildcard_fallback(self): | ||
field = {'field_details': {'name': 'myfield', 'type': 'wildcard'}} | ||
oss.perform_fallback(field) | ||
self.assertEqual('keyword', field['field_details']['type']) | ||
|
||
def test_version_fallback(self): | ||
field = {'field_details': {'name': 'myfield', 'type': 'version'}} | ||
oss.perform_fallback(field) | ||
self.assertEqual('keyword', field['field_details']['type']) | ||
|
||
def test_basic_without_fallback(self): | ||
field = {'field_details': {'name': 'myfield', 'type': 'histogram'}} | ||
oss.perform_fallback(field) | ||
self.assertEqual('histogram', field['field_details']['type']) | ||
|
||
def test_oss_no_fallback(self): | ||
field = {'field_details': {'name': 'myfield', 'type': 'keyword'}} | ||
oss.perform_fallback(field) | ||
self.assertEqual('keyword', field['field_details']['type']) |