{"action":"created","issue":{"url":"https://api.github.com/repos/bokeh/bokeh/issues/4152","repository_url":"https://api.github.com/repos/bokeh/bokeh","labels_url":"https://api.github.com/repos/bokeh/bokeh/issues/4152/labels{/name}","comments_url":"https://api.github.com/repos/bokeh/bokeh/issues/4152/comments","events_url":"https://api.github.com/repos/bokeh/bokeh/issues/4152/events","html_url":"https://github.com/bokeh/bokeh/pull/4152","id":147166263,"number":4152,"title":"add a decorator to allow callbacks to execute without a lock","user":{"login":"bryevdv","id":1078448,"avatar_url":"https://avatars.githubusercontent.com/u/1078448?v=3","gravatar_id":"","url":"https://api.github.com/users/bryevdv","html_url":"https://github.com/bryevdv","followers_url":"https://api.github.com/users/bryevdv/followers","following_url":"https://api.github.com/users/bryevdv/following{/other_user}","gists_url":"https://api.github.com/users/bryevdv/gists{/gist_id}","starred_url":"https://api.github.com/users/bryevdv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bryevdv/subscriptions","organizations_url":"https://api.github.com/users/bryevdv/orgs","repos_url":"https://api.github.com/users/bryevdv/repos","events_url":"https://api.github.com/users/bryevdv/events{/privacy}","received_events_url":"https://api.github.com/users/bryevdv/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/bokeh/bokeh/labels/status:%20WIP","name":"status: WIP","color":"fef2c0"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":9,"created_at":"2016-04-09T21:49:03Z","updated_at":"2016-04-11T18:45:47Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/bokeh/bokeh/pulls/4152","html_url":"https://github.com/bokeh/bokeh/pull/4152","diff_url":"https://github.com/bokeh/bokeh/pull/4152.diff","patch_url":"https://github.com/bokeh/bokeh/pull/4152.patch"},"body":"issues: fixes #3702"},"comment":{"url":"https://api.github.com/repos/bokeh/bokeh/issues/comments/208494330","html_url":"https://github.com/bokeh/bokeh/pull/4152#issuecomment-208494330","issue_url":"https://api.github.com/repos/bokeh/bokeh/issues/4152","id":208494330,"user":{"login":"bryevdv","id":1078448,"avatar_url":"https://avatars.githubusercontent.com/u/1078448?v=3","gravatar_id":"","url":"https://api.github.com/users/bryevdv","html_url":"https://github.com/bryevdv","followers_url":"https://api.github.com/users/bryevdv/followers","following_url":"https://api.github.com/users/bryevdv/following{/other_user}","gists_url":"https://api.github.com/users/bryevdv/gists{/gist_id}","starred_url":"https://api.github.com/users/bryevdv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bryevdv/subscriptions","organizations_url":"https://api.github.com/users/bryevdv/orgs","repos_url":"https://api.github.com/users/bryevdv/repos","events_url":"https://api.github.com/users/bryevdv/events{/privacy}","received_events_url":"https://api.github.com/users/bryevdv/received_events","type":"User","site_admin":false},"created_at":"2016-04-11T18:45:47Z","updated_at":"2016-04-11T18:45:47Z","body":"@havocp I started thinking about a few options and they all seemed complicated or made it too easy to get at the real document. So what about this: instead of returning `None` for `curdoc()`, return a proxy that wraps the document, and all it can do is `add_next_tick_callback` (maybe other callbacks too?) Then it's easy to do `curdoc().add_next_tick_callack` and we could also use the proxy to issue better warnings if other things are attempted. "}}