This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Remove events - #114

Merged
alexcjohnson merged 12 commits into
masterfrom
no-events
Jan 21, 2019
Merged

Remove events#114
alexcjohnson merged 12 commits into
masterfrom
no-events

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Closes#113
Pretty straightforward, just removing the DepGraph for events (but note that state.graphs is still an object we can add more to, which may be important for multi-outputs and dynamic callbacks to create a modified graph for cycle detection), and all references to fireEvent.

As in plotly/dash-html-components#89 I added a test shortcut to package.json - is there already a way to do this that I didn't see?

There were some (mostly skipped) tests of events, and rather than
removing them, I adapted them to the corresponding event properties.
This had the nice effects of 1) showing that the event behavior
that was listed as broken is not broken as properties, and
2) pointing out the need to skip the first call (using PreventUpdate)
if we want an exact match to the old event behavior.
Comment threadpackage.json Outdated
"format:test": "prettier --config .prettierrc src/**/*.js --list-different",
"test": "npm run lint"
"test": "npm run lint",
"test:py": "python -m unittest tests.test_render.Tests && python -m unittest tests.test_race_conditions.Tests"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update CircleCI config to use this command instead

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

I think this Event should also be removed

fromdash.dependenciesimportInput, Output, State, Event

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

Missing a changelog entry.

@Marc-Andre-Rivet

Marc-Andre-Rivet commented Jan 10, 2019

Copy link
Copy Markdown
Contributor

Getting errors when running dash-docs with this version of dash-renderer.
Seems like one usage of updateOutput in src/actions/index.js was not updated

Need to remove the null event.

Not sure if this is what's getting caught by the failing tests or something else.

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Comment threadtests/test_render.py
if not n_clicks:
# initial value is quick, only new value is slow
# also don't let the initial value increment call_counts
return 'Initial Value'

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand how this test was passing on master - it failed for me locally, and failed in this branch on ci, until this fix.

Comment threadtests/utils.py
if get_message:
message = get_message()
elif expected_value:
message = 'Final value: {}'.format(condition_val)

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would have helped me debug test_removing_component_while_its_getting_updated - I thought the callback wasn't getting called at all, when in fact it was called too many times! With expected_value you can get error messages like:

======================================================================
ERROR: test_removing_component_while_its_getting_updated (tests.test_render.Tests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests/test_render.py", line 1423, in test_removing_component_while_its_getting_updated
wait_for(lambda: call_counts['button-output'].value, expected_value=1)
File "tests/utils.py", line 72, in wait_for
raise WaitForTimeout(message)
WaitForTimeout: Final value: 2

Which would have made it much clearer what was going on.

Would be nice if we could share utils like this across dash repos - perhaps if we split out dash_development things like this could go there?

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Aaaactually we did have a test that covered this case: test_callbacks_triggered_on_generated_output - not sure how I missed that the first time, but anyway I made that test a bit clearer in 57ef3b2

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

@alexcjohnson So, I haven't digged enough in renderer to have a fully formed opinion but a few things already come to mind -- obviously nothing in here is in the scope for this PR!

  • would very probably benefit from using a typing library
  • fine grained testing is HARD when you're only doing integration/e2e tests.. secondary observations used to deduce underlying behavior -- most of the tests of that sort should pbly live in the comps source repo (and potentially be called as additional tests by this repo)
  • some tests depend on implementation details of components in dcc and html -- internally defined comps for specfic tests would be better
  • def would like to push some shared configurations somewhere else! ts/es/lint configs, version/deployment scripts, etc.

@alexcjohnsonalexcjohnson mentioned this pull request Jan 20, 2019

@Marc-Andre-RivetMarc-Andre-Rivet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💃

@alexcjohnson
alexcjohnson merged commit ed06794 into masterJan 21, 2019
@alexcjohnson
alexcjohnson deleted the no-events branch January 21, 2019 22:13
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@alexcjohnson@Marc-Andre-Rivet
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Remove events - #114

Merged
alexcjohnson merged 12 commits into
masterfrom
no-events
Jan 21, 2019
Merged

Remove events#114
alexcjohnson merged 12 commits into
masterfrom
no-events

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Closes#113
Pretty straightforward, just removing the DepGraph for events (but note that state.graphs is still an object we can add more to, which may be important for multi-outputs and dynamic callbacks to create a modified graph for cycle detection), and all references to fireEvent.

As in plotly/dash-html-components#89 I added a test shortcut to package.json - is there already a way to do this that I didn't see?

There were some (mostly skipped) tests of events, and rather than
removing them, I adapted them to the corresponding event properties.
This had the nice effects of 1) showing that the event behavior
that was listed as broken is not broken as properties, and
2) pointing out the need to skip the first call (using PreventUpdate)
if we want an exact match to the old event behavior.
Comment threadpackage.json Outdated
"format:test": "prettier --config .prettierrc src/**/*.js --list-different",
"test": "npm run lint"
"test": "npm run lint",
"test:py": "python -m unittest tests.test_render.Tests && python -m unittest tests.test_race_conditions.Tests"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update CircleCI config to use this command instead

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

I think this Event should also be removed

fromdash.dependenciesimportInput, Output, State, Event

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

Missing a changelog entry.

@Marc-Andre-Rivet

Marc-Andre-Rivet commented Jan 10, 2019

Copy link
Copy Markdown
Contributor

Getting errors when running dash-docs with this version of dash-renderer.
Seems like one usage of updateOutput in src/actions/index.js was not updated

Need to remove the null event.

Not sure if this is what's getting caught by the failing tests or something else.

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Comment threadtests/test_render.py
if not n_clicks:
# initial value is quick, only new value is slow
# also don't let the initial value increment call_counts
return 'Initial Value'

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand how this test was passing on master - it failed for me locally, and failed in this branch on ci, until this fix.

Comment threadtests/utils.py
if get_message:
message = get_message()
elif expected_value:
message = 'Final value: {}'.format(condition_val)

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would have helped me debug test_removing_component_while_its_getting_updated - I thought the callback wasn't getting called at all, when in fact it was called too many times! With expected_value you can get error messages like:

======================================================================
ERROR: test_removing_component_while_its_getting_updated (tests.test_render.Tests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests/test_render.py", line 1423, in test_removing_component_while_its_getting_updated
wait_for(lambda: call_counts['button-output'].value, expected_value=1)
File "tests/utils.py", line 72, in wait_for
raise WaitForTimeout(message)
WaitForTimeout: Final value: 2

Which would have made it much clearer what was going on.

Would be nice if we could share utils like this across dash repos - perhaps if we split out dash_development things like this could go there?

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Aaaactually we did have a test that covered this case: test_callbacks_triggered_on_generated_output - not sure how I missed that the first time, but anyway I made that test a bit clearer in 57ef3b2

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

@alexcjohnson So, I haven't digged enough in renderer to have a fully formed opinion but a few things already come to mind -- obviously nothing in here is in the scope for this PR!

  • would very probably benefit from using a typing library
  • fine grained testing is HARD when you're only doing integration/e2e tests.. secondary observations used to deduce underlying behavior -- most of the tests of that sort should pbly live in the comps source repo (and potentially be called as additional tests by this repo)
  • some tests depend on implementation details of components in dcc and html -- internally defined comps for specfic tests would be better
  • def would like to push some shared configurations somewhere else! ts/es/lint configs, version/deployment scripts, etc.

@alexcjohnsonalexcjohnson mentioned this pull request Jan 20, 2019

@Marc-Andre-RivetMarc-Andre-Rivet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💃

@alexcjohnson
alexcjohnson merged commit ed06794 into masterJan 21, 2019
@alexcjohnson
alexcjohnson deleted the no-events branch January 21, 2019 22:13
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@alexcjohnson@Marc-Andre-Rivet
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Remove events - #114

Merged
alexcjohnson merged 12 commits into
masterfrom
no-events
Jan 21, 2019
Merged

Remove events#114
alexcjohnson merged 12 commits into
masterfrom
no-events

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Closes#113
Pretty straightforward, just removing the DepGraph for events (but note that state.graphs is still an object we can add more to, which may be important for multi-outputs and dynamic callbacks to create a modified graph for cycle detection), and all references to fireEvent.

As in plotly/dash-html-components#89 I added a test shortcut to package.json - is there already a way to do this that I didn't see?

There were some (mostly skipped) tests of events, and rather than
removing them, I adapted them to the corresponding event properties.
This had the nice effects of 1) showing that the event behavior
that was listed as broken is not broken as properties, and
2) pointing out the need to skip the first call (using PreventUpdate)
if we want an exact match to the old event behavior.
Comment threadpackage.json Outdated
"format:test": "prettier --config .prettierrc src/**/*.js --list-different",
"test": "npm run lint"
"test": "npm run lint",
"test:py": "python -m unittest tests.test_render.Tests && python -m unittest tests.test_race_conditions.Tests"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update CircleCI config to use this command instead

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

I think this Event should also be removed

fromdash.dependenciesimportInput, Output, State, Event

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

Missing a changelog entry.

@Marc-Andre-Rivet

Marc-Andre-Rivet commented Jan 10, 2019

Copy link
Copy Markdown
Contributor

Getting errors when running dash-docs with this version of dash-renderer.
Seems like one usage of updateOutput in src/actions/index.js was not updated

Need to remove the null event.

Not sure if this is what's getting caught by the failing tests or something else.

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Comment threadtests/test_render.py
if not n_clicks:
# initial value is quick, only new value is slow
# also don't let the initial value increment call_counts
return 'Initial Value'

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand how this test was passing on master - it failed for me locally, and failed in this branch on ci, until this fix.

Comment threadtests/utils.py
if get_message:
message = get_message()
elif expected_value:
message = 'Final value: {}'.format(condition_val)

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would have helped me debug test_removing_component_while_its_getting_updated - I thought the callback wasn't getting called at all, when in fact it was called too many times! With expected_value you can get error messages like:

======================================================================
ERROR: test_removing_component_while_its_getting_updated (tests.test_render.Tests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests/test_render.py", line 1423, in test_removing_component_while_its_getting_updated
wait_for(lambda: call_counts['button-output'].value, expected_value=1)
File "tests/utils.py", line 72, in wait_for
raise WaitForTimeout(message)
WaitForTimeout: Final value: 2

Which would have made it much clearer what was going on.

Would be nice if we could share utils like this across dash repos - perhaps if we split out dash_development things like this could go there?

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Aaaactually we did have a test that covered this case: test_callbacks_triggered_on_generated_output - not sure how I missed that the first time, but anyway I made that test a bit clearer in 57ef3b2

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

@alexcjohnson So, I haven't digged enough in renderer to have a fully formed opinion but a few things already come to mind -- obviously nothing in here is in the scope for this PR!

  • would very probably benefit from using a typing library
  • fine grained testing is HARD when you're only doing integration/e2e tests.. secondary observations used to deduce underlying behavior -- most of the tests of that sort should pbly live in the comps source repo (and potentially be called as additional tests by this repo)
  • some tests depend on implementation details of components in dcc and html -- internally defined comps for specfic tests would be better
  • def would like to push some shared configurations somewhere else! ts/es/lint configs, version/deployment scripts, etc.

@alexcjohnsonalexcjohnson mentioned this pull request Jan 20, 2019

@Marc-Andre-RivetMarc-Andre-Rivet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💃

@alexcjohnson
alexcjohnson merged commit ed06794 into masterJan 21, 2019
@alexcjohnson
alexcjohnson deleted the no-events branch January 21, 2019 22:13
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@alexcjohnson@Marc-Andre-Rivet
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Remove events - #114

Merged
alexcjohnson merged 12 commits into
masterfrom
no-events
Jan 21, 2019
Merged

Remove events#114
alexcjohnson merged 12 commits into
masterfrom
no-events

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Closes#113
Pretty straightforward, just removing the DepGraph for events (but note that state.graphs is still an object we can add more to, which may be important for multi-outputs and dynamic callbacks to create a modified graph for cycle detection), and all references to fireEvent.

As in plotly/dash-html-components#89 I added a test shortcut to package.json - is there already a way to do this that I didn't see?

There were some (mostly skipped) tests of events, and rather than
removing them, I adapted them to the corresponding event properties.
This had the nice effects of 1) showing that the event behavior
that was listed as broken is not broken as properties, and
2) pointing out the need to skip the first call (using PreventUpdate)
if we want an exact match to the old event behavior.
Comment threadpackage.json Outdated
"format:test": "prettier --config .prettierrc src/**/*.js --list-different",
"test": "npm run lint"
"test": "npm run lint",
"test:py": "python -m unittest tests.test_render.Tests && python -m unittest tests.test_race_conditions.Tests"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update CircleCI config to use this command instead

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

I think this Event should also be removed

fromdash.dependenciesimportInput, Output, State, Event

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

Missing a changelog entry.

@Marc-Andre-Rivet

Marc-Andre-Rivet commented Jan 10, 2019

Copy link
Copy Markdown
Contributor

Getting errors when running dash-docs with this version of dash-renderer.
Seems like one usage of updateOutput in src/actions/index.js was not updated

Need to remove the null event.

Not sure if this is what's getting caught by the failing tests or something else.

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Comment threadtests/test_render.py
if not n_clicks:
# initial value is quick, only new value is slow
# also don't let the initial value increment call_counts
return 'Initial Value'

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand how this test was passing on master - it failed for me locally, and failed in this branch on ci, until this fix.

Comment threadtests/utils.py
if get_message:
message = get_message()
elif expected_value:
message = 'Final value: {}'.format(condition_val)

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would have helped me debug test_removing_component_while_its_getting_updated - I thought the callback wasn't getting called at all, when in fact it was called too many times! With expected_value you can get error messages like:

======================================================================
ERROR: test_removing_component_while_its_getting_updated (tests.test_render.Tests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests/test_render.py", line 1423, in test_removing_component_while_its_getting_updated
wait_for(lambda: call_counts['button-output'].value, expected_value=1)
File "tests/utils.py", line 72, in wait_for
raise WaitForTimeout(message)
WaitForTimeout: Final value: 2

Which would have made it much clearer what was going on.

Would be nice if we could share utils like this across dash repos - perhaps if we split out dash_development things like this could go there?

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Aaaactually we did have a test that covered this case: test_callbacks_triggered_on_generated_output - not sure how I missed that the first time, but anyway I made that test a bit clearer in 57ef3b2

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

@alexcjohnson So, I haven't digged enough in renderer to have a fully formed opinion but a few things already come to mind -- obviously nothing in here is in the scope for this PR!

  • would very probably benefit from using a typing library
  • fine grained testing is HARD when you're only doing integration/e2e tests.. secondary observations used to deduce underlying behavior -- most of the tests of that sort should pbly live in the comps source repo (and potentially be called as additional tests by this repo)
  • some tests depend on implementation details of components in dcc and html -- internally defined comps for specfic tests would be better
  • def would like to push some shared configurations somewhere else! ts/es/lint configs, version/deployment scripts, etc.

@alexcjohnsonalexcjohnson mentioned this pull request Jan 20, 2019

@Marc-Andre-RivetMarc-Andre-Rivet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💃

@alexcjohnson
alexcjohnson merged commit ed06794 into masterJan 21, 2019
@alexcjohnson
alexcjohnson deleted the no-events branch January 21, 2019 22:13
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@alexcjohnson@Marc-Andre-Rivet
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Remove events - #114

Merged
alexcjohnson merged 12 commits into
masterfrom
no-events
Jan 21, 2019
Merged

Remove events#114
alexcjohnson merged 12 commits into
masterfrom
no-events

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Closes#113
Pretty straightforward, just removing the DepGraph for events (but note that state.graphs is still an object we can add more to, which may be important for multi-outputs and dynamic callbacks to create a modified graph for cycle detection), and all references to fireEvent.

As in plotly/dash-html-components#89 I added a test shortcut to package.json - is there already a way to do this that I didn't see?

There were some (mostly skipped) tests of events, and rather than
removing them, I adapted them to the corresponding event properties.
This had the nice effects of 1) showing that the event behavior
that was listed as broken is not broken as properties, and
2) pointing out the need to skip the first call (using PreventUpdate)
if we want an exact match to the old event behavior.
Comment threadpackage.json Outdated
"format:test": "prettier --config .prettierrc src/**/*.js --list-different",
"test": "npm run lint"
"test": "npm run lint",
"test:py": "python -m unittest tests.test_render.Tests && python -m unittest tests.test_race_conditions.Tests"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update CircleCI config to use this command instead

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

I think this Event should also be removed

fromdash.dependenciesimportInput, Output, State, Event

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

Missing a changelog entry.

@Marc-Andre-Rivet

Marc-Andre-Rivet commented Jan 10, 2019

Copy link
Copy Markdown
Contributor

Getting errors when running dash-docs with this version of dash-renderer.
Seems like one usage of updateOutput in src/actions/index.js was not updated

Need to remove the null event.

Not sure if this is what's getting caught by the failing tests or something else.

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Comment threadtests/test_render.py
if not n_clicks:
# initial value is quick, only new value is slow
# also don't let the initial value increment call_counts
return 'Initial Value'

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand how this test was passing on master - it failed for me locally, and failed in this branch on ci, until this fix.

Comment threadtests/utils.py
if get_message:
message = get_message()
elif expected_value:
message = 'Final value: {}'.format(condition_val)

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would have helped me debug test_removing_component_while_its_getting_updated - I thought the callback wasn't getting called at all, when in fact it was called too many times! With expected_value you can get error messages like:

======================================================================
ERROR: test_removing_component_while_its_getting_updated (tests.test_render.Tests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests/test_render.py", line 1423, in test_removing_component_while_its_getting_updated
wait_for(lambda: call_counts['button-output'].value, expected_value=1)
File "tests/utils.py", line 72, in wait_for
raise WaitForTimeout(message)
WaitForTimeout: Final value: 2

Which would have made it much clearer what was going on.

Would be nice if we could share utils like this across dash repos - perhaps if we split out dash_development things like this could go there?

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Aaaactually we did have a test that covered this case: test_callbacks_triggered_on_generated_output - not sure how I missed that the first time, but anyway I made that test a bit clearer in 57ef3b2

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

@alexcjohnson So, I haven't digged enough in renderer to have a fully formed opinion but a few things already come to mind -- obviously nothing in here is in the scope for this PR!

  • would very probably benefit from using a typing library
  • fine grained testing is HARD when you're only doing integration/e2e tests.. secondary observations used to deduce underlying behavior -- most of the tests of that sort should pbly live in the comps source repo (and potentially be called as additional tests by this repo)
  • some tests depend on implementation details of components in dcc and html -- internally defined comps for specfic tests would be better
  • def would like to push some shared configurations somewhere else! ts/es/lint configs, version/deployment scripts, etc.

@alexcjohnsonalexcjohnson mentioned this pull request Jan 20, 2019

@Marc-Andre-RivetMarc-Andre-Rivet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💃

@alexcjohnson
alexcjohnson merged commit ed06794 into masterJan 21, 2019
@alexcjohnson
alexcjohnson deleted the no-events branch January 21, 2019 22:13
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@alexcjohnson@Marc-Andre-Rivet
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Remove events - #114

Merged
alexcjohnson merged 12 commits into
masterfrom
no-events
Jan 21, 2019
Merged

Remove events#114
alexcjohnson merged 12 commits into
masterfrom
no-events

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Closes#113
Pretty straightforward, just removing the DepGraph for events (but note that state.graphs is still an object we can add more to, which may be important for multi-outputs and dynamic callbacks to create a modified graph for cycle detection), and all references to fireEvent.

As in plotly/dash-html-components#89 I added a test shortcut to package.json - is there already a way to do this that I didn't see?

There were some (mostly skipped) tests of events, and rather than
removing them, I adapted them to the corresponding event properties.
This had the nice effects of 1) showing that the event behavior
that was listed as broken is not broken as properties, and
2) pointing out the need to skip the first call (using PreventUpdate)
if we want an exact match to the old event behavior.
Comment threadpackage.json Outdated
"format:test": "prettier --config .prettierrc src/**/*.js --list-different",
"test": "npm run lint"
"test": "npm run lint",
"test:py": "python -m unittest tests.test_render.Tests && python -m unittest tests.test_race_conditions.Tests"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update CircleCI config to use this command instead

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

I think this Event should also be removed

fromdash.dependenciesimportInput, Output, State, Event

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

Missing a changelog entry.

@Marc-Andre-Rivet

Marc-Andre-Rivet commented Jan 10, 2019

Copy link
Copy Markdown
Contributor

Getting errors when running dash-docs with this version of dash-renderer.
Seems like one usage of updateOutput in src/actions/index.js was not updated

Need to remove the null event.

Not sure if this is what's getting caught by the failing tests or something else.

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Comment threadtests/test_render.py
if not n_clicks:
# initial value is quick, only new value is slow
# also don't let the initial value increment call_counts
return 'Initial Value'

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand how this test was passing on master - it failed for me locally, and failed in this branch on ci, until this fix.

Comment threadtests/utils.py
if get_message:
message = get_message()
elif expected_value:
message = 'Final value: {}'.format(condition_val)

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would have helped me debug test_removing_component_while_its_getting_updated - I thought the callback wasn't getting called at all, when in fact it was called too many times! With expected_value you can get error messages like:

======================================================================
ERROR: test_removing_component_while_its_getting_updated (tests.test_render.Tests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests/test_render.py", line 1423, in test_removing_component_while_its_getting_updated
wait_for(lambda: call_counts['button-output'].value, expected_value=1)
File "tests/utils.py", line 72, in wait_for
raise WaitForTimeout(message)
WaitForTimeout: Final value: 2

Which would have made it much clearer what was going on.

Would be nice if we could share utils like this across dash repos - perhaps if we split out dash_development things like this could go there?

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Aaaactually we did have a test that covered this case: test_callbacks_triggered_on_generated_output - not sure how I missed that the first time, but anyway I made that test a bit clearer in 57ef3b2

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

@alexcjohnson So, I haven't digged enough in renderer to have a fully formed opinion but a few things already come to mind -- obviously nothing in here is in the scope for this PR!

  • would very probably benefit from using a typing library
  • fine grained testing is HARD when you're only doing integration/e2e tests.. secondary observations used to deduce underlying behavior -- most of the tests of that sort should pbly live in the comps source repo (and potentially be called as additional tests by this repo)
  • some tests depend on implementation details of components in dcc and html -- internally defined comps for specfic tests would be better
  • def would like to push some shared configurations somewhere else! ts/es/lint configs, version/deployment scripts, etc.

@alexcjohnsonalexcjohnson mentioned this pull request Jan 20, 2019

@Marc-Andre-RivetMarc-Andre-Rivet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💃

@alexcjohnson
alexcjohnson merged commit ed06794 into masterJan 21, 2019
@alexcjohnson
alexcjohnson deleted the no-events branch January 21, 2019 22:13
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@alexcjohnson@Marc-Andre-Rivet
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Remove events - #114

Merged
alexcjohnson merged 12 commits into
masterfrom
no-events
Jan 21, 2019
Merged

Remove events#114
alexcjohnson merged 12 commits into
masterfrom
no-events

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Closes#113
Pretty straightforward, just removing the DepGraph for events (but note that state.graphs is still an object we can add more to, which may be important for multi-outputs and dynamic callbacks to create a modified graph for cycle detection), and all references to fireEvent.

As in plotly/dash-html-components#89 I added a test shortcut to package.json - is there already a way to do this that I didn't see?

There were some (mostly skipped) tests of events, and rather than
removing them, I adapted them to the corresponding event properties.
This had the nice effects of 1) showing that the event behavior
that was listed as broken is not broken as properties, and
2) pointing out the need to skip the first call (using PreventUpdate)
if we want an exact match to the old event behavior.
Comment threadpackage.json Outdated
"format:test": "prettier --config .prettierrc src/**/*.js --list-different",
"test": "npm run lint"
"test": "npm run lint",
"test:py": "python -m unittest tests.test_render.Tests && python -m unittest tests.test_race_conditions.Tests"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update CircleCI config to use this command instead

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

I think this Event should also be removed

fromdash.dependenciesimportInput, Output, State, Event

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

Missing a changelog entry.

@Marc-Andre-Rivet

Marc-Andre-Rivet commented Jan 10, 2019

Copy link
Copy Markdown
Contributor

Getting errors when running dash-docs with this version of dash-renderer.
Seems like one usage of updateOutput in src/actions/index.js was not updated

Need to remove the null event.

Not sure if this is what's getting caught by the failing tests or something else.

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Comment threadtests/test_render.py
if not n_clicks:
# initial value is quick, only new value is slow
# also don't let the initial value increment call_counts
return 'Initial Value'

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand how this test was passing on master - it failed for me locally, and failed in this branch on ci, until this fix.

Comment threadtests/utils.py
if get_message:
message = get_message()
elif expected_value:
message = 'Final value: {}'.format(condition_val)

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would have helped me debug test_removing_component_while_its_getting_updated - I thought the callback wasn't getting called at all, when in fact it was called too many times! With expected_value you can get error messages like:

======================================================================
ERROR: test_removing_component_while_its_getting_updated (tests.test_render.Tests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests/test_render.py", line 1423, in test_removing_component_while_its_getting_updated
wait_for(lambda: call_counts['button-output'].value, expected_value=1)
File "tests/utils.py", line 72, in wait_for
raise WaitForTimeout(message)
WaitForTimeout: Final value: 2

Which would have made it much clearer what was going on.

Would be nice if we could share utils like this across dash repos - perhaps if we split out dash_development things like this could go there?

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Aaaactually we did have a test that covered this case: test_callbacks_triggered_on_generated_output - not sure how I missed that the first time, but anyway I made that test a bit clearer in 57ef3b2

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

@alexcjohnson So, I haven't digged enough in renderer to have a fully formed opinion but a few things already come to mind -- obviously nothing in here is in the scope for this PR!

  • would very probably benefit from using a typing library
  • fine grained testing is HARD when you're only doing integration/e2e tests.. secondary observations used to deduce underlying behavior -- most of the tests of that sort should pbly live in the comps source repo (and potentially be called as additional tests by this repo)
  • some tests depend on implementation details of components in dcc and html -- internally defined comps for specfic tests would be better
  • def would like to push some shared configurations somewhere else! ts/es/lint configs, version/deployment scripts, etc.

@alexcjohnsonalexcjohnson mentioned this pull request Jan 20, 2019

@Marc-Andre-RivetMarc-Andre-Rivet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💃

@alexcjohnson
alexcjohnson merged commit ed06794 into masterJan 21, 2019
@alexcjohnson
alexcjohnson deleted the no-events branch January 21, 2019 22:13
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@alexcjohnson@Marc-Andre-Rivet
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Remove events - #114

Merged
alexcjohnson merged 12 commits into
masterfrom
no-events
Jan 21, 2019
Merged

Remove events#114
alexcjohnson merged 12 commits into
masterfrom
no-events

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Closes#113
Pretty straightforward, just removing the DepGraph for events (but note that state.graphs is still an object we can add more to, which may be important for multi-outputs and dynamic callbacks to create a modified graph for cycle detection), and all references to fireEvent.

As in plotly/dash-html-components#89 I added a test shortcut to package.json - is there already a way to do this that I didn't see?

There were some (mostly skipped) tests of events, and rather than
removing them, I adapted them to the corresponding event properties.
This had the nice effects of 1) showing that the event behavior
that was listed as broken is not broken as properties, and
2) pointing out the need to skip the first call (using PreventUpdate)
if we want an exact match to the old event behavior.
Comment threadpackage.json Outdated
"format:test": "prettier --config .prettierrc src/**/*.js --list-different",
"test": "npm run lint"
"test": "npm run lint",
"test:py": "python -m unittest tests.test_render.Tests && python -m unittest tests.test_race_conditions.Tests"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update CircleCI config to use this command instead

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

I think this Event should also be removed

fromdash.dependenciesimportInput, Output, State, Event

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

Missing a changelog entry.

@Marc-Andre-Rivet

Marc-Andre-Rivet commented Jan 10, 2019

Copy link
Copy Markdown
Contributor

Getting errors when running dash-docs with this version of dash-renderer.
Seems like one usage of updateOutput in src/actions/index.js was not updated

Need to remove the null event.

Not sure if this is what's getting caught by the failing tests or something else.

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Comment threadtests/test_render.py
if not n_clicks:
# initial value is quick, only new value is slow
# also don't let the initial value increment call_counts
return 'Initial Value'

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand how this test was passing on master - it failed for me locally, and failed in this branch on ci, until this fix.

Comment threadtests/utils.py
if get_message:
message = get_message()
elif expected_value:
message = 'Final value: {}'.format(condition_val)

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would have helped me debug test_removing_component_while_its_getting_updated - I thought the callback wasn't getting called at all, when in fact it was called too many times! With expected_value you can get error messages like:

======================================================================
ERROR: test_removing_component_while_its_getting_updated (tests.test_render.Tests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests/test_render.py", line 1423, in test_removing_component_while_its_getting_updated
wait_for(lambda: call_counts['button-output'].value, expected_value=1)
File "tests/utils.py", line 72, in wait_for
raise WaitForTimeout(message)
WaitForTimeout: Final value: 2

Which would have made it much clearer what was going on.

Would be nice if we could share utils like this across dash repos - perhaps if we split out dash_development things like this could go there?

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Seems like one usage of updateOutput in src/actions/index.js was not updated

Good catch! updated that in c4a9a22. It seems like the dash-renderer tests don't touch this unfortunately, but it's a bit tough as I get a few failures with these tests locally even on master. Not going to try and sort that out in this PR, but I'll see if I can add a test that covers that updateOutput call.

Aaaactually we did have a test that covered this case: test_callbacks_triggered_on_generated_output - not sure how I missed that the first time, but anyway I made that test a bit clearer in 57ef3b2

@Marc-Andre-Rivet

Copy link
Copy Markdown
Contributor

@alexcjohnson So, I haven't digged enough in renderer to have a fully formed opinion but a few things already come to mind -- obviously nothing in here is in the scope for this PR!

  • would very probably benefit from using a typing library
  • fine grained testing is HARD when you're only doing integration/e2e tests.. secondary observations used to deduce underlying behavior -- most of the tests of that sort should pbly live in the comps source repo (and potentially be called as additional tests by this repo)
  • some tests depend on implementation details of components in dcc and html -- internally defined comps for specfic tests would be better
  • def would like to push some shared configurations somewhere else! ts/es/lint configs, version/deployment scripts, etc.

@alexcjohnsonalexcjohnson mentioned this pull request Jan 20, 2019

@Marc-Andre-RivetMarc-Andre-Rivet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💃

@alexcjohnson
alexcjohnson merged commit ed06794 into masterJan 21, 2019
@alexcjohnson
alexcjohnson deleted the no-events branch January 21, 2019 22:13
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@alexcjohnson@Marc-Andre-Rivet