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