Repository navigation
Navigator: DAQ system browser, cloud dataset id, Assign to workspace; faster daqsystem_load - #344
Merged
Merged
Conversation
Mirrors VH-Lab/NDI-matlab#1058. - "Session > DAQ Systems..." opens ndi.gui.nav.DaqSystemBrowser: a read-only master-detail view of a session's DAQ systems (reader, file navigator and file patterns, epoch probe map class and patterns, metadata readers) with an on-request example epoch showing the actual files, the pattern each matches and which is the epoch probe map. - "Check Cloud status" opens ndi.gui.nav.CloudStatusDialog, showing the NDI Cloud dataset id with a Copy button (disabled when not in the cloud); check_cloud_status now returns the id. - "Assign to workspace..." on dataset and session nodes binds the object to a variable in __main__ and relabels the tree in place; datasets are listed once per id. - daqsystem_load drops a match-everything name ('(.*)', '.*') instead of sending a slow regexp search (new ndi_session.isMatchAllRegexp); SessionInfo and the browser load DAQ systems with no name filter. - Fix session.daqsystem_add, which called dev.setsession (the method is set_session) and so failed for every DAQ system. Bridge records synchronized with the NDI-matlab branch commits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PqqXTGv4TzdR86CnB2MBLv
Every MATLAB-named method on ndi_session carries a snake_case alias (tests/test_matlab_name_aliases.py). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PqqXTGv4TzdR86CnB2MBLv
session._find_all_dependencies (the database_rm cascade) searched
depends_on("", id), relying on an empty name meaning "any name". DID-python
main now runs depends_on in SQL (DID-python#101) and, like its brute-force
path, treats only '*' as the wildcard, so the cascade found nothing: with
current DID, deleting an element left its neuron_extracellular and epoch
documents in place, failing
test_gui_app_spike_sorter_importer::TestDeleting on main and on this PR.
'*' is what MATLAB's ndi.database.fun.findalldependencies asks for, and it
passes with both the old and the new DID.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PqqXTGv4TzdR86CnB2MBLv
Contributor
Author
|
The Cause: DID-python#101 runs
Fix: 859a4ac changes the search to
Generated by Claude Code |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PqqXTGv4TzdR86CnB2MBLv
This was referenced Oct 24, 2026
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The Python counterpart of VH-Lab/NDI-matlab#1058. Merge that PR first. The bridge records here point at commits on its branch.
Navigator (
ndi.gui.nav)DaqSystemBrowser(daq_system_browser.py): opened from Session → DAQ Systems....ndi.daq.reader.mfdaq.intan, viandi_matlab_classname), so both languages show the same names. File patterns are matched the same wayfind_file_groupsmatches them.describe,epoch_file_rows,matching_pattern,detail_items.load_epochsandchoose_epochwork without widgets too.CloudStatusDialog(cloud_status_dialog.py): Check Cloud status now opens this window instead of an alert. It shows the NDI Cloud dataset ID with a Copy button, greyed out when the dataset is not in the cloud.datasets_cloud.check_cloud_statusnow returns the ID, in the newCloudActionResult.cloud_dataset_idfield.__main__, the namespace the tree already scans for variable names.datasets_text.workspace_name_errorand confirms before replacing an existing variable.relabel_nodes), using each node's base label and id stored on the tree item.datasets_model.unique_by_id).Session
daqsystem_load: anamethat matches everything ('(.*)','.*', optionally anchored) is no longer sent as a regexp search. It is detected by the newndi_session.isMatchAllRegexp, aliasis_match_all_regexp. On a dataset of about 100,000 documents the regexp roughly doubled the search time, and probe epoch tables,getprobesand the sync graph all load DAQ systems that way.SessionInfoand the browser calldaqsystem_load()directly.daqsystem_addcalleddev.setsession, but the method onndi_daq_systemis namedset_session. Adding any DAQ system therefore raisedAttributeError.Bridge
datasetsPane(d2b5170),sessionInfo(b1da61b),session(10bad94, addsisMatchAllRegexp), andndi.daq.system(e066e8d). Forndi.daq.system, NDI-matlab added an experiment and then reverted it, so there is no net change; the decision log names both commits.daqSystemBrowserandcloudStatusDialog. Like the otherndi.gui.navrecords, they name nopython_class, because the attributes are snake_case (figure,epoch_table, …). The name mapping is written out in each decision log.Testing
New tests:
tests/test_gui_nav_daq_system_browser.py: helper functions, plus a real session with an mfdaq/intan DAQ system, with and without Qt.tests/test_gui_nav_cloud_status_dialog.pytests/test_session_daqsystem_load_name.py: also coversdaqsystem_add.tests/test_gui_nav_datasets_pane.py.unique_by_id, workspace assignment and name checks intests/test_gui_nav_datasets_model.py.Results:
QT_QPA_PLATFORM=offscreen: 6462 passed, 352 skipped and 1 failed (tests/symmetryexcluded). The skips are mostly cloud and network tests. The failure was the snake_case-alias convention check, fixed in b017b02; that check and the related tests pass on their own afterwards, and the whole suite was not rerun.test_matlab_bridge_*,test_matlab_branch_pending) pass underNDI_BRIDGE_CHECK_STRICT=1against the NDI-matlab branch.black --checkandruff checkare clean.Generated by Claude Code