GitHub PullRequestEvent at 2014-06-13 22:29:20
Repository: network_tools
Actor: sazlin
Payload: {"action":"opened","number":4,"pull_request":{"url":"https://api.github.com/repos/jefrailey/network_tools/pulls/4","id":17135125,"html_url":"https://github.com/jefrailey/network_tools/pull/4","diff_url":"https://github.com/jefrailey/network_tools/pull/4.diff","patch_url":"https://github.com/jefrailey/network_tools/pull/4.patch","issue_url":"https://api.github.com/repos/jefrailey/network_tools/issues/4","number":4,"state":"open","title":"Added http_server_my.py and the HttpServerMT class, which extends HttpSe...","user":{"login":"sazlin","id":7120031,"avatar_url":"https://avatars.githubusercontent.com/u/7120031?","gravatar_id":"3a5e5576aa0aefe0acb0441925a1d492","url":"https://api.github.com/users/sazlin","html_url":"https://github.com/sazlin","followers_url":"https://api.github.com/users/sazlin/followers","following_url":"https://api.github.com/users/sazlin/following{/other_user}","gists_url":"https://api.github.com/users/sazlin/gists{/gist_id}","starred_url":"https://api.github.com/users/sazlin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sazlin/subscriptions","organizations_url":"https://api.github.com/users/sazlin/orgs","repos_url":"https://api.github.com/users/sazlin/repos","events_url":"https://api.github.com/users/sazlin/events{/privacy}","received_events_url":"https://api.github.com/users/sazlin/received_events","type":"User","site_admin":false},"body":"...rver and adds support for processing multiple simultaneous client connections using threading.Thread. Also changed test_http.py to import HttpServerMT instead of HttpServer, and added a new multi-threaded test that spins up a HttpServerMT server in its own thread, and then 10 simple clients each in their own thread to bombard the Http server simultaneously-ish. Py.test's UI thread then waits for all the client threads to finish then validates the response of each client. Asserts true when all responses come back ok. Note that only partial validation is done at this point. Note that HttpServerMT's start_listening() method isn't shutting down gracefully when the server is started via py.test. The server will likely run until the py.test process finishes, which is really gross. We are half-way to fixing this by extending Thread with StoppableThread, but we haven't plumbed that in to HttpServerMT yet so StoppableThread isn't really yielding us anything useful yet.","created_at":"2014-06-13T22:29:18Z","updated_at":"2014-06-13T22:29:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"be1c5d617c2e5017c5bdf8c71838d471a15e5b13","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/jefrailey/network_tools/pulls/4/commits","review_comments_url":"https://api.github.com/repos/jefrailey/network_tools/pulls/4/comments","review_comment_url":"https://api.github.com/repos/jefrailey/network_tools/pulls/comments/{number}","comments_url":"https://api.github.com/repos/jefrailey/network_tools/issues/4/comments","statuses_url":"https://api.github.com/repos/jefrailey/network_tools/statuses/4cb31a536288b91a05da5d8d9f5118555b632009","head":{"label":"jefrailey:http3","ref":"http3","sha":"4cb31a536288b91a05da5d8d9f5118555b632009","user":{"login":"jefrailey","id":7455511,"avatar_url":"https://avatars.githubusercontent.com/u/7455511?","gravatar_id":"6c90d8db7bb32721c314ed439efe2bf2","url":"https://api.github.com/users/jefrailey","html_url":"https://github.com/jefrailey","followers_url":"https://api.github.com/users/jefrailey/followers","following_url":"https://api.github.com/users/jefrailey/following{/other_user}","gists_url":"https://api.github.com/users/jefrailey/gists{/gist_id}","starred_url":"https://api.github.com/users/jefrailey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jefrailey/subscriptions","organizations_url":"https://api.github.com/users/jefrailey/orgs","repos_url":"https://api.github.com/users/jefrailey/repos","events_url":"https://api.github.com/users/jefrailey/events{/privacy}","received_events_url":"https://api.github.com/users/jefrailey/received_events","type":"User","site_admin":false},"repo":{"id":20663184,"name":"network_tools","full_name":"jefrailey/network_tools","owner":{"login":"jefrailey","id":7455511,"avatar_url":"https://avatars.githubusercontent.com/u/7455511?","gravatar_id":"6c90d8db7bb32721c314ed439efe2bf2","url":"https://api.github.com/users/jefrailey","html_url":"https://github.com/jefrailey","followers_url":"https://api.github.com/users/jefrailey/followers","following_url":"https://api.github.com/users/jefrailey/following{/other_user}","gists_url":"https://api.github.com/users/jefrailey/gists{/gist_id}","starred_url":"https://api.github.com/users/jefrailey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jefrailey/subscriptions","organizations_url":"https://api.github.com/users/jefrailey/orgs","repos_url":"https://api.github.com/users/jefrailey/repos","events_url":"https://api.github.com/users/jefrailey/events{/privacy}","received_events_url":"https://api.github.com/users/jefrailey/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jefrailey/network_tools","description":"A repository for network tools in Python","fork":false,"url":"https://api.github.com/repos/jefrailey/network_tools","forks_url":"https://api.github.com/repos/jefrailey/network_tools/forks","keys_url":"https://api.github.com/repos/jefrailey/network_tools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jefrailey/network_tools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jefrailey/network_tools/teams","hooks_url":"https://api.github.com/repos/jefrailey/network_tools/hooks","issue_events_url":"https://api.github.com/repos/jefrailey/network_tools/issues/events{/number}","events_url":"https://api.github.com/repos/jefrailey/network_tools/events","assignees_url":"https://api.github.com/repos/jefrailey/network_tools/assignees{/user}","branches_url":"https://api.github.com/repos/jefrailey/network_tools/branches{/branch}","tags_url":"https://api.github.com/repos/jefrailey/network_tools/tags","blobs_url":"https://api.github.com/repos/jefrailey/network_tools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jefrailey/network_tools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jefrailey/network_tools/git/refs{/sha}","trees_url":"https://api.github.com/repos/jefrailey/network_tools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jefrailey/network_tools/statuses/{sha}","languages_url":"https://api.github.com/repos/jefrailey/network_tools/languages","stargazers_url":"https://api.github.com/repos/jefrailey/network_tools/stargazers","contributors_url":"https://api.github.com/repos/jefrailey/network_tools/contributors","subscribers_url":"https://api.github.com/repos/jefrailey/network_tools/subscribers","subscription_url":"https://api.github.com/repos/jefrailey/network_tools/subscription","commits_url":"https://api.github.com/repos/jefrailey/network_tools/commits{/sha}","git_commits_url":"https://api.github.com/repos/jefrailey/network_tools/git/commits{/sha}","comments_url":"https://api.github.com/repos/jefrailey/network_tools/comments{/number}","issue_comment_url":"https://api.github.com/repos/jefrailey/network_tools/issues/comments/{number}","contents_url":"https://api.github.com/repos/jefrailey/network_tools/contents/{+path}","compare_url":"https://api.github.com/repos/jefrailey/network_tools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jefrailey/network_tools/merges","archive_url":"https://api.github.com/repos/jefrailey/network_tools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jefrailey/network_tools/downloads","issues_url":"https://api.github.com/repos/jefrailey/network_tools/issues{/number}","pulls_url":"https://api.github.com/repos/jefrailey/network_tools/pulls{/number}","milestones_url":"https://api.github.com/repos/jefrailey/network_tools/milestones{/number}","notifications_url":"https://api.github.com/repos/jefrailey/network_tools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jefrailey/network_tools/labels{/name}","releases_url":"https://api.github.com/repos/jefrailey/network_tools/releases{/id}","created_at":"2014-06-09T21:40:07Z","updated_at":"2014-06-13T22:29:18Z","pushed_at":"2014-06-13T22:26:15Z","git_url":"git://github.com/jefrailey/network_tools.git","ssh_url":"git@github.com:jefrailey/network_tools.git","clone_url":"https://github.com/jefrailey/network_tools.git","svn_url":"https://github.com/jefrailey/network_tools","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"jefrailey:master","ref":"master","sha":"b06f8a07366977196af6103c145e043b52ee31e7","user":{"login":"jefrailey","id":7455511,"avatar_url":"https://avatars.githubusercontent.com/u/7455511?","gravatar_id":"6c90d8db7bb32721c314ed439efe2bf2","url":"https://api.github.com/users/jefrailey","html_url":"https://github.com/jefrailey","followers_url":"https://api.github.com/users/jefrailey/followers","following_url":"https://api.github.com/users/jefrailey/following{/other_user}","gists_url":"https://api.github.com/users/jefrailey/gists{/gist_id}","starred_url":"https://api.github.com/users/jefrailey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jefrailey/subscriptions","organizations_url":"https://api.github.com/users/jefrailey/orgs","repos_url":"https://api.github.com/users/jefrailey/repos","events_url":"https://api.github.com/users/jefrailey/events{/privacy}","received_events_url":"https://api.github.com/users/jefrailey/received_events","type":"User","site_admin":false},"repo":{"id":20663184,"name":"network_tools","full_name":"jefrailey/network_tools","owner":{"login":"jefrailey","id":7455511,"avatar_url":"https://avatars.githubusercontent.com/u/7455511?","gravatar_id":"6c90d8db7bb32721c314ed439efe2bf2","url":"https://api.github.com/users/jefrailey","html_url":"https://github.com/jefrailey","followers_url":"https://api.github.com/users/jefrailey/followers","following_url":"https://api.github.com/users/jefrailey/following{/other_user}","gists_url":"https://api.github.com/users/jefrailey/gists{/gist_id}","starred_url":"https://api.github.com/users/jefrailey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jefrailey/subscriptions","organizations_url":"https://api.github.com/users/jefrailey/orgs","repos_url":"https://api.github.com/users/jefrailey/repos","events_url":"https://api.github.com/users/jefrailey/events{/privacy}","received_events_url":"https://api.github.com/users/jefrailey/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jefrailey/network_tools","description":"A repository for network tools in Python","fork":false,"url":"https://api.github.com/repos/jefrailey/network_tools","forks_url":"https://api.github.com/repos/jefrailey/network_tools/forks","keys_url":"https://api.github.com/repos/jefrailey/network_tools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jefrailey/network_tools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jefrailey/network_tools/teams","hooks_url":"https://api.github.com/repos/jefrailey/network_tools/hooks","issue_events_url":"https://api.github.com/repos/jefrailey/network_tools/issues/events{/number}","events_url":"https://api.github.com/repos/jefrailey/network_tools/events","assignees_url":"https://api.github.com/repos/jefrailey/network_tools/assignees{/user}","branches_url":"https://api.github.com/repos/jefrailey/network_tools/branches{/branch}","tags_url":"https://api.github.com/repos/jefrailey/network_tools/tags","blobs_url":"https://api.github.com/repos/jefrailey/network_tools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jefrailey/network_tools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jefrailey/network_tools/git/refs{/sha}","trees_url":"https://api.github.com/repos/jefrailey/network_tools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jefrailey/network_tools/statuses/{sha}","languages_url":"https://api.github.com/repos/jefrailey/network_tools/languages","stargazers_url":"https://api.github.com/repos/jefrailey/network_tools/stargazers","contributors_url":"https://api.github.com/repos/jefrailey/network_tools/contributors","subscribers_url":"https://api.github.com/repos/jefrailey/network_tools/subscribers","subscription_url":"https://api.github.com/repos/jefrailey/network_tools/subscription","commits_url":"https://api.github.com/repos/jefrailey/network_tools/commits{/sha}","git_commits_url":"https://api.github.com/repos/jefrailey/network_tools/git/commits{/sha}","comments_url":"https://api.github.com/repos/jefrailey/network_tools/comments{/number}","issue_comment_url":"https://api.github.com/repos/jefrailey/network_tools/issues/comments/{number}","contents_url":"https://api.github.com/repos/jefrailey/network_tools/contents/{+path}","compare_url":"https://api.github.com/repos/jefrailey/network_tools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jefrailey/network_tools/merges","archive_url":"https://api.github.com/repos/jefrailey/network_tools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jefrailey/network_tools/downloads","issues_url":"https://api.github.com/repos/jefrailey/network_tools/issues{/number}","pulls_url":"https://api.github.com/repos/jefrailey/network_tools/pulls{/number}","milestones_url":"https://api.github.com/repos/jefrailey/network_tools/milestones{/number}","notifications_url":"https://api.github.com/repos/jefrailey/network_tools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jefrailey/network_tools/labels{/name}","releases_url":"https://api.github.com/repos/jefrailey/network_tools/releases{/id}","created_at":"2014-06-09T21:40:07Z","updated_at":"2014-06-13T22:29:18Z","pushed_at":"2014-06-13T22:26:15Z","git_url":"git://github.com/jefrailey/network_tools.git","ssh_url":"git@github.com:jefrailey/network_tools.git","clone_url":"https://github.com/jefrailey/network_tools.git","svn_url":"https://github.com/jefrailey/network_tools","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/jefrailey/network_tools/pulls/4"},"html":{"href":"https://github.com/jefrailey/network_tools/pull/4"},"issue":{"href":"https://api.github.com/repos/jefrailey/network_tools/issues/4"},"comments":{"href":"https://api.github.com/repos/jefrailey/network_tools/issues/4/comments"},"review_comments":{"href":"https://api.github.com/repos/jefrailey/network_tools/pulls/4/comments"},"review_comment":{"href":"https://api.github.com/repos/jefrailey/network_tools/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/jefrailey/network_tools/pulls/4/commits"},"statuses":{"href":"https://api.github.com/repos/jefrailey/network_tools/statuses/4cb31a536288b91a05da5d8d9f5118555b632009"}},"merged":false,"mergeable":true,"mergeable_state":"unstable","merged_by":null,"comments":0,"review_comments":0,"commits":1,"additions":161,"deletions":8,"changed_files":3}}