Usage Examples#
Register Search Models and Monitor Registry Changes#
import omni.kit.search_core as search_core
from omni.kit.search_core import AbstractSearchModel
# Create a simple search model class
class SimpleSearchModel(AbstractSearchModel):
    @property
    def items(self):
        # Return search results here
        return []
# Get the search engine registry
registry = search_core.SearchEngineRegistry()
# Define a callback for when engines change
def on_engines_changed():
    print(f"Available search engines: {registry.get_search_names()}")
# Subscribe to changes in the registry
subscription = registry.subscribe_engines_changed(on_engines_changed)
# Register our search model (this will trigger the callback)
model_subscription = registry.register_search_model("SimpleSearch", SimpleSearchModel)
# Get available search engines
all_engines = registry.get_search_names()
print(f"Available search engines: {all_engines}")
# Get available search engines for a specific server
server_engines = registry.get_available_search_names("MyServer")
print(f"Search engines for 'MyServer': {server_engines}")
# Get a specific search model class
search_model_class = registry.get_search_model("SimpleSearch")
# Unregister (this will also trigger the callback)
model_subscription = None  # This will deregister the model automatically
Create Custom Search Model with Items#
import asyncio
import omni.kit.search_core as search_core
from omni.kit.search_core import AbstractSearchModel, AbstractSearchItem
# Create a custom search item
class MySearchItem(AbstractSearchItem):
    def __init__(self, name, path, is_folder=False, size=0):
        self._name = name
        self._path = path
        self._is_folder = is_folder
        self._size = size
        self._date = None
        
    @property
    def path(self):
        return self._path
        
    @property
    def name(self):
        return self._name
        
    @property
    def date(self):
        return self._date
        
    @property
    def size(self):
        return self._size
        
    @property
    def icon(self):
        return None
        
    @property
    def is_folder(self):
        return self._is_folder
        
    def __getitem__(self, key):
        if hasattr(self, key):
            return getattr(self, key)
        return None
# Create a custom search model
class MySearchModel(AbstractSearchModel):
    def __init__(self, search_text="", current_dir="", search_lifetime=None):
        super().__init__()
        self._search_text = search_text
        self._current_dir = current_dir
        self._search_lifetime = search_lifetime
        self._search_items = []
        
        # Start asynchronous search
        asyncio.ensure_future(self._perform_search())
        
    @property
    def items(self):
        return self._search_items
        
    async def _perform_search(self):
        # Simulate search delay
        await asyncio.sleep(1)
        
        # Add some search results
        self._search_items = [
            MySearchItem("Item 1", "/path/to/item1", False, 1024),
            MySearchItem("Item 2", "/path/to/item2", True, 0),
            MySearchItem("Item 3", "/path/to/item3", False, 2048)
        ]
        
        # When search results are updated, subscribers will be notified
        # No need to manually call protected methods
Use SearchLifetimeObject for Callbacks#
import omni.kit.search_core as search_core
def search_completed_callback():
    print("Search operation completed!")
# Create a SearchLifetimeObject to manage the callback
search_lifetime = search_core.SearchLifetimeObject(search_completed_callback)
# Later when search is finished
search_lifetime.destroy()  # This calls the callback and cleans up