-
-
Notifications
You must be signed in to change notification settings - Fork 31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix callback outputs with short ID's #280
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this also a fix for #279 ?
R/utils.R
Outdated
output_id <- createCallbackId((output)) | ||
|
||
if (output_id %in% names(map)) { | ||
stop(sprintf("One or more outputs are duplicated across callbacks. Please ensure that all ID and property combinations are unique."), call. = FALSE) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
May as well include the output_id in the message, no?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I assume you verified this doesn't cause an error when there's one callback with output ID x and another callback with multiple IDs x and y
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this also a fix for #279 ?
Yes, this should address that issue as well.
I assume you verified this doesn't cause an error when there's one callback with output ID x and another callback with multiple IDs x and y
Do you mind clarifying this? If the output ID is duplicated (whether in a single or multiple output callback), it would throw an error, as it does with other backends as well.
Eg.
app %>% set_layout(
dccInput("text", "test"),
div(id = "out"),
div(id = "out2")
)
app %>% add_callback(
outputs = output("out", "children"),
params = input("text", "value"),
function(data) data
)
app %>% add_callback(
outputs = list(output("out", "children"),
output("out2", "children")),
params = input("text", "value"),
function(data) paste(data, "2")
)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I didn't realize this should throw an error! In that case ignore my comment :) I thought that only the complete set of outputs cannot be duplicated, I didn't realize a single output cannot appear in multiple callbacks
@@ -1139,7 +1147,7 @@ createCallbackId <- function(output) { | |||
} | |||
|
|||
getIdProps <- function(output) { | |||
output_ids <- strsplit(substr(output, 3, nchar(output)-2), '...', fixed=TRUE) | |||
output_ids <- strsplit(gsub("^\\.{2}|\\.{2}$", "", output), '...', fixed=TRUE) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't quite understand what's happening here, but we're sure this is safe -- it doesn't cause issues when two output IDs are similar and differ by just one character -- right
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a safer than what we had originally, which constrained output_id to be > 3 characters.
Now that we're simply gsub
'ing the 2 dots necessary for the multiple output syntax instead of substringing them, it's safer, since the only constraint is not including periods in the ID, which has already been documented.
Co-authored-by: Dean Attali <[email protected]>
…into fix-callback-outputs
* contribute test script * remove version updating in DESCRIPTION * fix EOL Co-authored-by: HammadTheOne <[email protected]> * Add support for user-defined server routes (#225) * Provide support for script and stylesheet attributes (#226) * Authenticate on pulls from Docker Hub (#231) * Add support for callback graph improvements and timing (#224) * Update CHANGELOG.md * 189 - Add Pattern Matching Callbacks for Dash R (#228) * Testing initial implementation * More testing * Callback Context Updates * Updating callback context logic * Fixing callback returns * Adding callback args conditional * Cleanup and additional changes to callback value conditionals * Comment cleanup * Added PMC callback validation, removed unnecessary code * Update R/dependencies.R Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update R/dependencies.R Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update R/dependencies.R Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update R/dependencies.R Co-authored-by: Ryan Patrick Kyle <[email protected]> * Added build to gitignore * Updated dependencies.R * Update boilerplate docs and add wildcard symbols * Drying up validation code and applying symbol logic * Update test to use symbols * Cleaned up code and added allsmaller test example * Cleaning up redundant code * Update FUNDING.yml * Updated callback_args logic and example * Adding basic unittests, updated validation * Fixed response for MATCH callbacks * Added integration test and updated examples for docs * Added additional integration test * Formatting and cleanup * update docs * Update to-do app * Add comments to examples * Change empy vector to character type. Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update boilerplate text. Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update tests/integration/callbacks/test_pattern_matching.py Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update tests/integration/callbacks/test_pattern_matching.py Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update tests/integration/callbacks/test_pattern_matching.py Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update tests/integration/callbacks/test_pattern_matching.py Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update tests/integration/callbacks/test_pattern_matching.py Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update tests/testthat/test-wildcards.R Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update wildcards_test.R Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update wildcards_test.R Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update wildcards_test.R Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update wildcards_test.R Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update wildcards_test.R Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update wildcards_test.R Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update wildcards_test.R Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update wildcards_test.R Co-authored-by: Ryan Patrick Kyle <[email protected]> * Removed triple colon syntax * Use seq_along and remove unnecessary unittest * Update CHANGELOG.md * Update CHANGELOG.md * Add support for arbitrary and sorted keys * Whitespace deleted * Added integration tests * Fixing test output * Fixing flakiness * Update test_pattern_matching.py * Update test_pattern_matching.py * Updating boilerplate text and test with generalized keys * Minor test fixes Co-authored-by: Ryan Patrick Kyle <[email protected]> Co-authored-by: Nicolas Kruchten <[email protected]> Co-authored-by: rpkyle <[email protected]> * Fixing Null error with glue::glue interpolation (#233) * Fixing NULL error with glue interpolation * Update utils.R * Update utils.R * Update CHANGELOG.md * Update dash-renderer to v1.8.2 (#234) * bump dash-renderer to v1.8.2 * Update CHANGELOG.md * add note about update to dash-renderer * Fixing flaky test * bump package version to v0.8.0 * Update R/dash.R Co-authored-by: HammadTheOne <[email protected]> * Update tests/testthat/test-wildcards.R Co-authored-by: HammadTheOne <[email protected]> * Update DESCRIPTION Co-authored-by: HammadTheOne <[email protected]> * add PMC example * update documentation * update CHANGELOG release date * 🔨 PMC docs refactor * Update tests/integration/callbacks/test_pattern_matching.py Co-authored-by: HammadTheOne <[email protected]> * Update tests/integration/callbacks/test_pattern_matching.py Co-authored-by: HammadTheOne <[email protected]> * Update tests/integration/callbacks/test_pattern_matching.py Co-authored-by: HammadTheOne <[email protected]> * add import of glue * add glue to imports.R * fix line length issue * Fix setCallbackContext for wildcard and ordinary inputs (#237) * Update setCallbackContext * Adding graphs test * Slight fix * bump version and update CHANGELOG * Less flaky test Co-authored-by: rpkyle <[email protected]> * bump dependency versions * update CHANGELOG * update dash-renderer to v1.8.3 * update CHANGELOG * Favicon fix (#240) * Adding default favicon * Removing redundant codeblock * Added default favicon * Minor fix to requests prefix * Update CHANGELOG.md Co-authored-by: Ryan Patrick Kyle <[email protected]> * Added simple test * Fixed typo * Fixed typo Co-authored-by: Ryan Patrick Kyle <[email protected]> * Remove context reference from CircleCI (#241) * Dash R Core Package Unification (#243) * Initialize npm and gulpfile in repo * Adding directory structure * Initial implementation of unification script * Minor grep fixes * Fixed DESCRIPTION imports * Added updated dash-table deps * Regex for version numbers * Cut import entries from NAMESPACE * Remove && include(dashr) * Removing gulp-asset artifacts and rebuilding complete package * Removing unnecessary files * fix: remove html, core pkgs from tests * fix: update script tags unit test * Revert R6 import * Add temporary collate * Update README examples * Scrubbing imports * More import scrubbing * Package development updates * Update gitignore and namespace * Updated gulpfile jobs * Updated all dependencies * Added templates for namespace/internal exports * Update internal, namespace, and gulpfile cleanup * Fix dependency sourcing * Linting * Adding job for asset retrieval and deletion * Minor src change * Added error handling * Fixing favicon bug * chore: use shallow clone Co-authored-by: Ryan Patrick Kyle <[email protected]> * Added deprecation warning if dcc, html, or table packages are attached (#249) * Added deprecation warning * Update R/dash.R Co-authored-by: Ryan Patrick Kyle <[email protected]> Co-authored-by: Ryan Patrick Kyle <[email protected]> * Update `highlight.js` dependency for dash-table (#262) * Updating gulpfile * Updating dependencies for dash components * Updated highlight.js dependency source * Add Dash 2 layout syntax wrappers and html tags (#265) * Added add_meta helper * Add helper functions and export pipe * Adding in tags wrapper * Updating ci config * Updated CHANGELOG * Updated circleci to include rust package manager (cargo). * Removed dashr command in circleci config. * Updating changelog * added basic test * Cleaning up Dash 2 references and duplication * Updated documentation * Allow conditional UI * Add meta tag check * More cleanup * Last bit of cleanup Co-authored-by: Steve Sperandeo <[email protected]> * Fix suppress_callback_exceptions config (#268) * Add config key * Fixing CI * Simplified callback syntax and addtional utility functions (#270) * Tag updates * Added RStudio dash snippet * Added simple_table * Added flexible callbacks * Documentation and NAMESPACE updates * Updated DESCRIPTION * Adding unittests * Adding context tags to tests * Updated CHANGELOG * Update monorepo and rebuild package (#271) * Updating gulpfile and package.json * More package.json and linting updates * Adding in simplified callback updates/tests * Import fixes * Updating package.json * Gulpfile script changes * Gulpfile updates * Rebuilding package with monorepo updates * Re-running test * Updating unittest * Updating test dependencies * Updating DESCRIPTION and .Rbuildignore forchecks * Updating function descriptions and NAMESPACE imports * Fixed examples and updated docs * Updating version * Remove references to dash namespace within package * Update testthat and remove deprecated context calls * Removed fixup_metadata.R * Removing more dash namespace references * Concatenating component function files * Updating checks * Merging components into package R files * Fixing check * More package cleanup * testthat 3.0.0 * Rebuilding package * Fixed conditional for multiple outputs * Fix no_update test * Fixing callback_instrumentation test * Fixing unit test * Added DBC to Dash R package (#273) * Adding dbc to dashR namespace * updated gitignore * Adding dbc docs and updating gulpfile * Updating test with dbc * Moved misc tests and added dbc snapshot * Fixing test * fixing id * Fixed export and test * Reverting sorted prop order * Checks updates * Re-running test * Remove html exports and update tags (#274) * Updating tags and html exports * Re-running tests * Updating tag generation * Re-running tests * Updating tests to use new html list syntax * Adjusting tests * Re-run tests again * Updating tests * Wrapping up test fixes * Percy test * CRAN submission updates * Fix callback outputs with short ID's (#280) * CRAN submission updates * Callback output ID validation fixes * Updating duplicate callbacks test * Security updates * Update R/utils.R Co-authored-by: Dean Attali <[email protected]> * Updating error message Co-authored-by: Dean Attali <[email protected]> * Updating README link Co-authored-by: Ryan Patrick Kyle <[email protected]> Co-authored-by: Ryan Patrick Kyle <[email protected]> Co-authored-by: Nicolas Kruchten <[email protected]> Co-authored-by: rpkyle <[email protected]> Co-authored-by: Steve Sperandeo <[email protected]> Co-authored-by: Dean Attali <[email protected]>
Closes #278
This PR fixes #278 by doing a regex substitution of the callback output ID's instead of a substring splice.
This PR also adds an additional check for duplicate output ID's before adding callbacks to the callback_map.
@daattali