payload: {"action":"closed","number":937,"pull_request":{"url":"https://api.github.com/repos/python-trio/trio/pulls/937","id":254104206,"node_id":"MDExOlB1bGxSZXF1ZXN0MjU0MTA0MjA2","html_url":"https://github.com/python-trio/trio/pull/937","diff_url":"https://github.com/python-trio/trio/pull/937.diff","patch_url":"https://github.com/python-trio/trio/pull/937.patch","issue_url":"https://api.github.com/repos/python-trio/trio/issues/937","number":937,"state":"closed","locked":false,"title":"Remove undocumented public API usage of UnboundedQueue","user":{"login":"lojack5","id":1458329,"node_id":"MDQ6VXNlcjE0NTgzMjk=","avatar_url":"https://avatars0.githubusercontent.com/u/1458329?v=4","gravatar_id":"","url":"https://api.github.com/users/lojack5","html_url":"https://github.com/lojack5","followers_url":"https://api.github.com/users/lojack5/followers","following_url":"https://api.github.com/users/lojack5/following{/other_user}","gists_url":"https://api.github.com/users/lojack5/gists{/gist_id}","starred_url":"https://api.github.com/users/lojack5/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lojack5/subscriptions","organizations_url":"https://api.github.com/users/lojack5/orgs","repos_url":"https://api.github.com/users/lojack5/repos","events_url":"https://api.github.com/users/lojack5/events{/privacy}","received_events_url":"https://api.github.com/users/lojack5/received_events","type":"User","site_admin":false},"body":"Long time lurker here, I was tinkering around with using IOCP on Windows (messing with ReadDirectoryChanges), dug into some of the undocumented public methods here, as well as the deprecated warning going along with its usage of UnboundedQueue.\r\n\r\nSo: I updated it to use channels instead, (as well as the kqueue IOManager version).  I have a few questions though:\r\n\r\n1. The kqueue IOManager doesn't appear to have any tests for the similar API (`monitor_kevent`).  Should one be written? And if so maybe some guidance on tests, I'm pretty new to those, and don't have the appropriate machine setup ATM.  This also seems to be why coverage dropped?\r\n2. My second commit adds a synchronous `close()` method to channels (does the exact same thing, just never awaits a checkpoint).  Not sure if this is a thing that makes sense to have or not, but it seemed like it was something that should be used to close the send side of the channel when the IOManager doesn't need it anymore.  Maybe there's a better way (queue the `aclose()` version in the scheduler?).\r\n3. This changes a public API (`monitor_completion_key` and `monitor_kevent` yield `MemoryRecieveChannel`s instead of `UnboundedQueue`s).  But the API was undocumented to begin with...should I add documentation?  Should a news fragment go with this since *someone* may have been relying on the old interface?  And if so, should this wait until `UnboundedQueue` goes from deprecated to removed?\r\n4. As far as I can tell `UnboundedQueue` isn't used anywhere else after these changes (I know, not a question).\r\n\r\nThis is pretty much just to squash the deprecation warning, as I tinker around I'll have more things I might want to change (ex: the context manager for `monitor_completion_key` is cumbersome to use some cases, though that could just be cause I'm designing my classes wrong for the API).","created_at":"2019-02-19T03:35:44Z","updated_at":"2019-03-02T23:14:58Z","closed_at":"2019-03-02T23:14:58Z","merged_at":null,"merge_commit_sha":"127da071374f242668c143090d3cf8e894bda416","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/python-trio/trio/pulls/937/commits","review_comments_url":"https://api.github.com/repos/python-trio/trio/pulls/937/comments","review_comment_url":"https://api.github.com/repos/python-trio/trio/pulls/comments{/number}","comments_url":"https://api.github.com/repos/python-trio/trio/issues/937/comments","statuses_url":"https://api.github.com/repos/python-trio/trio/statuses/ed63e4a76c8534a3bacca9f452414abf8b157999","head":{"label":"lojack5:remove-unboundedqueue-usage","ref":"remove-unboundedqueue-usage","sha":"ed63e4a76c8534a3bacca9f452414abf8b157999","user":{"login":"lojack5","id":1458329,"node_id":"MDQ6VXNlcjE0NTgzMjk=","avatar_url":"https://avatars0.githubusercontent.com/u/1458329?v=4","gravatar_id":"","url":"https://api.github.com/users/lojack5","html_url":"https://github.com/lojack5","followers_url":"https://api.github.com/users/lojack5/followers","following_url":"https://api.github.com/users/lojack5/following{/other_user}","gists_url":"https://api.github.com/users/lojack5/gists{/gist_id}","starred_url":"https://api.github.com/users/lojack5/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lojack5/subscriptions","organizations_url":"https://api.github.com/users/lojack5/orgs","repos_url":"https://api.github.com/users/lojack5/repos","events_url":"https://api.github.com/users/lojack5/events{/privacy}","received_events_url":"https://api.github.com/users/lojack5/received_events","type":"User","site_admin":false},"repo":{"id":171211370,"node_id":"MDEwOlJlcG9zaXRvcnkxNzEyMTEzNzA=","name":"trio","full_name":"lojack5/trio","private":false,"owner":{"login":"lojack5","id":1458329,"node_id":"MDQ6VXNlcjE0NTgzMjk=","avatar_url":"https://avatars0.githubusercontent.com/u/1458329?v=4","gravatar_id":"","url":"https://api.github.com/users/lojack5","html_url":"https://github.com/lojack5","followers_url":"https://api.github.com/users/lojack5/followers","following_url":"https://api.github.com/users/lojack5/following{/other_user}","gists_url":"https://api.github.com/users/lojack5/gists{/gist_id}","starred_url":"https://api.github.com/users/lojack5/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lojack5/subscriptions","organizations_url":"https://api.github.com/users/lojack5/orgs","repos_url":"https://api.github.com/users/lojack5/repos","events_url":"https://api.github.com/users/lojack5/events{/privacy}","received_events_url":"https://api.github.com/users/lojack5/received_events","type":"User","site_admin":false},"html_url":"https://github.com/lojack5/trio","description":"Trio – Pythonic async I/O for humans and snake people 🐍","fork":true,"url":"https://api.github.com/repos/lojack5/trio","forks_url":"https://api.github.com/repos/lojack5/trio/forks","keys_url":"https://api.github.com/repos/lojack5/trio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lojack5/trio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lojack5/trio/teams","hooks_url":"https://api.github.com/repos/lojack5/trio/hooks","issue_events_url":"https://api.github.com/repos/lojack5/trio/issues/events{/number}","events_url":"https://api.github.com/repos/lojack5/trio/events","assignees_url":"https://api.github.com/repos/lojack5/trio/assignees{/user}","branches_url":"https://api.github.com/repos/lojack5/trio/branches{/branch}","tags_url":"https://api.github.com/repos/lojack5/trio/tags","blobs_url":"https://api.github.com/repos/lojack5/trio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lojack5/trio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lojack5/trio/git/refs{/sha}","trees_url":"https://api.github.com/repos/lojack5/trio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lojack5/trio/statuses/{sha}","languages_url":"https://api.github.com/repos/lojack5/trio/languages","stargazers_url":"https://api.github.com/repos/lojack5/trio/stargazers","contributors_url":"https://api.github.com/repos/lojack5/trio/contributors","subscribers_url":"https://api.github.com/repos/lojack5/trio/subscribers","subscription_url":"https://api.github.com/repos/lojack5/trio/subscription","commits_url":"https://api.github.com/repos/lojack5/trio/commits{/sha}","git_commits_url":"https://api.github.com/repos/lojack5/trio/git/commits{/sha}","comments_url":"https://api.github.com/repos/lojack5/trio/comments{/number}","issue_comment_url":"https://api.github.com/repos/lojack5/trio/issues/comments{/number}","contents_url":"https://api.github.com/repos/lojack5/trio/contents/{+path}","compare_url":"https://api.github.com/repos/lojack5/trio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lojack5/trio/merges","archive_url":"https://api.github.com/repos/lojack5/trio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lojack5/trio/downloads","issues_url":"https://api.github.com/repos/lojack5/trio/issues{/number}","pulls_url":"https://api.github.com/repos/lojack5/trio/pulls{/number}","milestones_url":"https://api.github.com/repos/lojack5/trio/milestones{/number}","notifications_url":"https://api.github.com/repos/lojack5/trio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lojack5/trio/labels{/name}","releases_url":"https://api.github.com/repos/lojack5/trio/releases{/id}","deployments_url":"https://api.github.com/repos/lojack5/trio/deployments","created_at":"2019-02-18T03:55:56Z","updated_at":"2019-02-21T00:40:36Z","pushed_at":"2019-03-02T23:12:50Z","git_url":"git://github.com/lojack5/trio.git","ssh_url":"git@github.com:lojack5/trio.git","clone_url":"https://github.com/lojack5/trio.git","svn_url":"https://github.com/lojack5/trio","homepage":"https://trio.readthedocs.io","size":3257,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"python-trio:master","ref":"master","sha":"3737f796237afe4e02378c140b7b2e7e605e7a13","user":{"login":"python-trio","id":26335827,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI2MzM1ODI3","avatar_url":"https://avatars2.githubusercontent.com/u/26335827?v=4","gravatar_id":"","url":"https://api.github.com/users/python-trio","html_url":"https://github.com/python-trio","followers_url":"https://api.github.com/users/python-trio/followers","following_url":"https://api.github.com/users/python-trio/following{/other_user}","gists_url":"https://api.github.com/users/python-trio/gists{/gist_id}","starred_url":"https://api.github.com/users/python-trio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/python-trio/subscriptions","organizations_url":"https://api.github.com/users/python-trio/orgs","repos_url":"https://api.github.com/users/python-trio/repos","events_url":"https://api.github.com/users/python-trio/events{/privacy}","received_events_url":"https://api.github.com/users/python-trio/received_events","type":"Organization","site_admin":false},"repo":{"id":79083614,"node_id":"MDEwOlJlcG9zaXRvcnk3OTA4MzYxNA==","name":"trio","full_name":"python-trio/trio","private":false,"owner":{"login":"python-trio","id":26335827,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI2MzM1ODI3","avatar_url":"https://avatars2.githubusercontent.com/u/26335827?v=4","gravatar_id":"","url":"https://api.github.com/users/python-trio","html_url":"https://github.com/python-trio","followers_url":"https://api.github.com/users/python-trio/followers","following_url":"https://api.github.com/users/python-trio/following{/other_user}","gists_url":"https://api.github.com/users/python-trio/gists{/gist_id}","starred_url":"https://api.github.com/users/python-trio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/python-trio/subscriptions","organizations_url":"https://api.github.com/users/python-trio/orgs","repos_url":"https://api.github.com/users/python-trio/repos","events_url":"https://api.github.com/users/python-trio/events{/privacy}","received_events_url":"https://api.github.com/users/python-trio/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/python-trio/trio","description":"Trio – Pythonic async I/O for humans and snake people 🐍","fork":false,"url":"https://api.github.com/repos/python-trio/trio","forks_url":"https://api.github.com/repos/python-trio/trio/forks","keys_url":"https://api.github.com/repos/python-trio/trio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/python-trio/trio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/python-trio/trio/teams","hooks_url":"https://api.github.com/repos/python-trio/trio/hooks","issue_events_url":"https://api.github.com/repos/python-trio/trio/issues/events{/number}","events_url":"https://api.github.com/repos/python-trio/trio/events","assignees_url":"https://api.github.com/repos/python-trio/trio/assignees{/user}","branches_url":"https://api.github.com/repos/python-trio/trio/branches{/branch}","tags_url":"https://api.github.com/repos/python-trio/trio/tags","blobs_url":"https://api.github.com/repos/python-trio/trio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/python-trio/trio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/python-trio/trio/git/refs{/sha}","trees_url":"https://api.github.com/repos/python-trio/trio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/python-trio/trio/statuses/{sha}","languages_url":"https://api.github.com/repos/python-trio/trio/languages","stargazers_url":"https://api.github.com/repos/python-trio/trio/stargazers","contributors_url":"https://api.github.com/repos/python-trio/trio/contributors","subscribers_url":"https://api.github.com/repos/python-trio/trio/subscribers","subscription_url":"https://api.github.com/repos/python-trio/trio/subscription","commits_url":"https://api.github.com/repos/python-trio/trio/commits{/sha}","git_commits_url":"https://api.github.com/repos/python-trio/trio/git/commits{/sha}","comments_url":"https://api.github.com/repos/python-trio/trio/comments{/number}","issue_comment_url":"https://api.github.com/repos/python-trio/trio/issues/comments{/number}","contents_url":"https://api.github.com/repos/python-trio/trio/contents/{+path}","compare_url":"https://api.github.com/repos/python-trio/trio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/python-trio/trio/merges","archive_url":"https://api.github.com/repos/python-trio/trio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/python-trio/trio/downloads","issues_url":"https://api.github.com/repos/python-trio/trio/issues{/number}","pulls_url":"https://api.github.com/repos/python-trio/trio/pulls{/number}","milestones_url":"https://api.github.com/repos/python-trio/trio/milestones{/number}","notifications_url":"https://api.github.com/repos/python-trio/trio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/python-trio/trio/labels{/name}","releases_url":"https://api.github.com/repos/python-trio/trio/releases{/id}","deployments_url":"https://api.github.com/repos/python-trio/trio/deployments","created_at":"2017-01-16T04:45:25Z","updated_at":"2019-03-02T11:51:54Z","pushed_at":"2019-03-01T08:02:30Z","git_url":"git://github.com/python-trio/trio.git","ssh_url":"git@github.com:python-trio/trio.git","clone_url":"https://github.com/python-trio/trio.git","svn_url":"https://github.com/python-trio/trio","homepage":"https://trio.readthedocs.io","size":3280,"stargazers_count":2202,"watchers_count":2202,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":124,"mirror_url":null,"archived":false,"open_issues_count":214,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":124,"open_issues":214,"watchers":2202,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/python-trio/trio/pulls/937"},"html":{"href":"https://github.com/python-trio/trio/pull/937"},"issue":{"href":"https://api.github.com/repos/python-trio/trio/issues/937"},"comments":{"href":"https://api.github.com/repos/python-trio/trio/issues/937/comments"},"review_comments":{"href":"https://api.github.com/repos/python-trio/trio/pulls/937/comments"},"review_comment":{"href":"https://api.github.com/repos/python-trio/trio/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/python-trio/trio/pulls/937/commits"},"statuses":{"href":"https://api.github.com/repos/python-trio/trio/statuses/ed63e4a76c8534a3bacca9f452414abf8b157999"}},"author_association":"NONE","merged":false,"mergeable":true,"rebaseable":true,"mergeable_state":"unstable","merged_by":null,"comments":5,"review_comments":0,"maintainer_can_modify":false,"commits":2,"additions":37,"deletions":38,"changed_files":4}}
other: {"actor":{"display_login":"lojack5"}}