Skip to content

Commit

Permalink
Merge pull request #968 from IanCa/develop
Browse files Browse the repository at this point in the history
Add a search util function to convert to long
  • Loading branch information
VisLab authored Jun 18, 2024
2 parents 0f57eae + 4d94071 commit 0343a3e
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
38 changes: 38 additions & 0 deletions hed/models/basic_search_util.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
"""
Utilities to support HED searches based on strings.
"""
from hed.models.hed_string import HedString
from hed.models.hed_tag import HedTag


def convert_query(search_query, schema):
"""Converts the given basic search query into a hed_string
Parameters:
search_query(str): The basic search query to convert.
schema(HedSchema): The schema to use to convert tags
Returns:
long_query(str): The converted search query, in long form.
"""
input_tags = HedString.split_hed_string(search_query)
output_string = ""
skippable_prefix = ("@", "~")
skippable_suffix = ("*", )
for is_hed_tag, (startpos, endpos) in input_tags:
input_tag = search_query[startpos:endpos]
add_suffix = ""
if is_hed_tag:
if input_tag.startswith(skippable_prefix):
output_string += input_tag[:1]
input_tag = input_tag[1:]

if input_tag.endswith(skippable_suffix):
add_suffix = input_tag[-1:]
input_tag = input_tag[:-1]
output_string += HedTag(input_tag, schema).long_tag
output_string += add_suffix
else:
output_string += input_tag

return output_string
20 changes: 20 additions & 0 deletions tests/models/test_basic_search_util.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import unittest
from hed import load_schema_version
from hed.models.basic_search_util import convert_query


class TestConvertQueryToForm(unittest.TestCase):
schema = load_schema_version("8.3.0")

def test_basic_convert(self):
input = "@Event, Head-part*, Time-interval/1"
expected_output = "@Event, Item/Biological-item/Anatomical-item/Body-part/Head-part*, Property/Data-property/Data-value/Spatiotemporal-value/Temporal-value/Time-interval/1"

actual_output = convert_query(input, self.schema)
self.assertEqual(expected_output, actual_output)

input = "@Head-part*, Event, Time-interval/1"
expected_output = "@Item/Biological-item/Anatomical-item/Body-part/Head-part*, Event, Property/Data-property/Data-value/Spatiotemporal-value/Temporal-value/Time-interval/1"

actual_output = convert_query(input, self.schema)
self.assertEqual(expected_output, actual_output)

0 comments on commit 0343a3e

Please sign in to comment.