Skip to content
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

Ensure curdoc is available to async callbacks #2942

Merged
merged 1 commit into from
Nov 22, 2021
Merged

Conversation

philippjfr
Copy link
Member

Ensures that asynchronous callbacks have access to pn.state.curdoc.

@codecov
Copy link

codecov bot commented Nov 22, 2021

Codecov Report

Merging #2942 (525b02a) into master (eeefd2d) will decrease coverage by 0.00%.
The diff coverage is 100.00%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master    #2942      +/-   ##
==========================================
- Coverage   83.13%   83.13%   -0.01%     
==========================================
  Files         190      190              
  Lines       24865    24867       +2     
==========================================
+ Hits        20672    20673       +1     
- Misses       4193     4194       +1     
Impacted Files Coverage Δ
panel/io/reload.py 69.23% <100.00%> (-1.89%) ⬇️
panel/io/server.py 73.63% <100.00%> (+0.27%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 2c97383...525b02a. Read the comment docs.

@philippjfr philippjfr merged commit 74092c0 into master Nov 22, 2021
@philippjfr philippjfr deleted the async_exec_curdoc branch November 22, 2021 17:26
@philippjfr philippjfr mentioned this pull request Nov 22, 2021
philippjfr added a commit that referenced this pull request Nov 23, 2021
* Resolve issues with inline resources on save (#2794)

* Fix saving using inline resources

* Add tests

* docs: Fix default values of panels.io.server.serve() (#2799)

* Ensure ipywidget rendering is compatible with ipykernel>6 and bokeh>2.4 (#2798)

* Bump django from 3.1.12 to 3.1.13 in /examples/apps/django_multi_apps (#2773)

Bumps [django](https://github.com/django/django) from 3.1.12 to 3.1.13.
- [Release notes](https://github.com/django/django/releases)
- [Commits](django/django@3.1.12...3.1.13)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Tabulator: allow to set a maximum number of selectable rows (#2791)

* allow to set the maximum number of rows selectable

* update docs

* clarify docs about pagination

* Fixed bug where tables with remote pagination would modify the wrong (#2801)

rows if not yet sorted.

* Compatibility for latest Param (#2809)

* Ensure non-exported requirejs modules do not error (#2808)

* Ensure non-exported requirejs modules do not error

* Improve requirejs exports

* Fix Ace requirejs definition

* Fix Perspective requirejs definition

* Fix xtermjs requirejs definition

* Support async load for VTK

* Remove print

* Ensure Tabulator checkbox selection only happens in checkbox column (#2812)

* Vtkvolume correction of dimensions order (#2818)

* vtkvolume correction of dimensions order

* add end line

Co-authored-by: ARTUSI <[email protected]>

* Add light to list of button types (#2814)

* add light to list of button types (#2816)

* light to list of button

* update button on py file

Co-authored-by: [email protected] <[email protected]>
Co-authored-by: Philipp Rudiger <[email protected]>

* Make OAuth cookie expiry configurable (#2724)

* Add compatibility for Param precedence backward compatibility fix

* Run onload callbacks with --warm option (#2844)

* Improve Plotly responsive sizing behavior (#2838)

* Improve Plotly responsive sizing behavior

* Cleanup

* Added FastApi in the user guide for embedding apps (#2870)

* fix(vega): allow data item to miss optional field (#2853)

* fix(vega): allow data item to miss optional field

The current implementation assume that all items in the dataset has the exact same fields. 
The list of keys are extracted from the first item in the dataset only and will crash if 
* the first item does not include all field names
* some following items miss certain field

* Update panel/pane/vega.py

* fix: typo

meant `k` not `v`

Co-authored-by: Philipp Rudiger <[email protected]>

* Update docs about pn.serve per user state (#2849)

* Improve documentation about pn.serve

* Update overview

* allow to set AutoCompleteInput in a Param pane (#2874)

* Improve Terminal keystroke and size handling (#2878)

* Improve Terminal keystroke and size handling

* Cleanup

* Fixed UTF-8 decoding in Terminal widget (#2880)

* Update Tabulator styles on scroll (#2881)

* Update pydata template for compatibility (#2884)

* successfully exit after pyct command is executed (#2883)

* Update jQuery to remediate CVEs (#2885)

* Do not sync Indicator properties from frontend (#2886)

* Fix roundtrip of datetimes on ReactiveData objects (#2888)

* Fix roundtrip of datetimes on ReactiveData objects

* Fix flakes

* Fix handling of Plotly pane in Tabs (#2890)

* Fix handling of Plotly pane in Tabs

* Fix flake

* Fix logic

* Add comment

* Update plotly test

* Adds escape parameter to DataFrame pane to enable using html markup (#2893)

* add escape parameter to DataFrame

* add test

Co-authored-by: Marc Skov Madsen <[email protected]>

* Allow to update the completions options from a parameter (#2895)

* allow updating completion options of a param obj

* reset value to '' of AutocompleteInput when not in the options

* Add tests

* fix #2896: Colorbar background for dark theme (#2897)

Co-authored-by: Marc Skov Madsen <[email protected]>

* Fix issues when streaming or patching ReactiveData (#2900)

* Fix issues when streaming or patching ReactiveData

* Efficient stream updates

* Cleanup

* Ensure stream and patch events do not boomerang (#2902)

* Tabs cache dynamic contents (#2909)

* Bump panel.js version

* Cache rendered output in Tabs

* Fix flake

* Allow setting a maximum height for the loading indicator (#2910)

* Fixes for Card rendering in MaterialTemplate (#2911)

* Further fixes for Card header alignments (#2912)

* Fix material card css

* Ensure HoloViews matplotlib output uses tight layout (#2920)

* Ensure loading of MathJax bundle is optional (#2919)

* Ensure loading of MathJax bundle is optional

* Fix flake

* Fix autoload_js

* Update changelog

* Fix tabulator

* Allow url decoding single quoted strings (#2925)

* Update changelog

* Fix Tabulator checkbox selection (#2931)

* Fix Vega pane sizing issues (#2933)

* Ensure toggled Accordion only triggers one event on change of active Card (#2934)

* Fix target transform on LiteralInput (#2935)

* Update CHANGELOG

* Bump panel.js version

* Log output

* Pin sphinx

* Bump python version

* Fix for docs ipywidget rendering

* Fix issue in detecting script data assignment (#2939)

* Ensure Card collapsible icon offset is computed robustly (#2940)

* Autoreload should not reload panel modules (#2941)

* Ensure curdoc is available to async callbacks (#2942)

* Update CHANGELOG

* Bump panel.js version

* Revert broken optimization in Tabulator streaming implementation (#2944)

* Simplify homepage (#2850)

* Bump panel.js version

* Bump bokeh.js version (#2945)

* Update CHANGELOG.md

Co-authored-by: pmav99 <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Maxime Liquet <[email protected]>
Co-authored-by: Samuel Yee <[email protected]>
Co-authored-by: Xavier Artusi <[email protected]>
Co-authored-by: ARTUSI <[email protected]>
Co-authored-by: Aravindhan <[email protected]>
Co-authored-by: Prashant kumar <[email protected]>
Co-authored-by: [email protected] <[email protected]>
Co-authored-by: Tyler Houssian <[email protected]>
Co-authored-by: Krist Wongsuphasawat <[email protected]>
Co-authored-by: Jean-Luc Stevens <[email protected]>
Co-authored-by: Marc Skov Madsen <[email protected]>
Co-authored-by: Marc Skov Madsen <[email protected]>
@Jhsmit
Copy link

Jhsmit commented Nov 27, 2021

If you're scheduling multiple coroutines with async_execute with this wrapper (such as in this example), as the first coroutine completes, you'll no longer have access to curdoc because the set_curdoc contextmanager reverts it to None.

A workaround is to get a local reference to doc (doc=pn.state.curdoc) in the coroutine before awaiting anything. However, that might not be 100% fail save.
Is there a reason why the set_curdoc has to revert pn.state.curdoc to None?

@philippjfr
Copy link
Member Author

It definitely shouldn't revert to None. It should restore the previous state. Sounds like a bug.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants