{"action":"created","issue":{"url":"https://api.github.com/repos/hypothesis/h/issues/2029","labels_url":"https://api.github.com/repos/hypothesis/h/issues/2029/labels{/name}","comments_url":"https://api.github.com/repos/hypothesis/h/issues/2029/comments","events_url":"https://api.github.com/repos/hypothesis/h/issues/2029/events","html_url":"https://github.com/hypothesis/h/pull/2029","id":60915783,"number":2029,"title":"Add an Atom feed for the stream (first pass)","user":{"login":"tilgovi","id":20818,"avatar_url":"https://avatars.githubusercontent.com/u/20818?v=3","gravatar_id":"","url":"https://api.github.com/users/tilgovi","html_url":"https://github.com/tilgovi","followers_url":"https://api.github.com/users/tilgovi/followers","following_url":"https://api.github.com/users/tilgovi/following{/other_user}","gists_url":"https://api.github.com/users/tilgovi/gists{/gist_id}","starred_url":"https://api.github.com/users/tilgovi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tilgovi/subscriptions","organizations_url":"https://api.github.com/users/tilgovi/orgs","repos_url":"https://api.github.com/users/tilgovi/repos","events_url":"https://api.github.com/users/tilgovi/events{/privacy}","received_events_url":"https://api.github.com/users/tilgovi/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"seanh","id":22498,"avatar_url":"https://avatars.githubusercontent.com/u/22498?v=3","gravatar_id":"","url":"https://api.github.com/users/seanh","html_url":"https://github.com/seanh","followers_url":"https://api.github.com/users/seanh/followers","following_url":"https://api.github.com/users/seanh/following{/other_user}","gists_url":"https://api.github.com/users/seanh/gists{/gist_id}","starred_url":"https://api.github.com/users/seanh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seanh/subscriptions","organizations_url":"https://api.github.com/users/seanh/orgs","repos_url":"https://api.github.com/users/seanh/repos","events_url":"https://api.github.com/users/seanh/events{/privacy}","received_events_url":"https://api.github.com/users/seanh/received_events","type":"User","site_admin":false},"milestone":null,"comments":21,"created_at":"2015-03-12T21:58:51Z","updated_at":"2015-03-20T15:35:31Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/hypothesis/h/pulls/2029","html_url":"https://github.com/hypothesis/h/pull/2029","diff_url":"https://github.com/hypothesis/h/pull/2029.diff","patch_url":"https://github.com/hypothesis/h/pull/2029.patch"},"body":"Rebased #2028 so that travis passes."},"comment":{"url":"https://api.github.com/repos/hypothesis/h/issues/comments/84050731","html_url":"https://github.com/hypothesis/h/pull/2029#issuecomment-84050731","issue_url":"https://api.github.com/repos/hypothesis/h/issues/2029","id":84050731,"user":{"login":"tilgovi","id":20818,"avatar_url":"https://avatars.githubusercontent.com/u/20818?v=3","gravatar_id":"","url":"https://api.github.com/users/tilgovi","html_url":"https://github.com/tilgovi","followers_url":"https://api.github.com/users/tilgovi/followers","following_url":"https://api.github.com/users/tilgovi/following{/other_user}","gists_url":"https://api.github.com/users/tilgovi/gists{/gist_id}","starred_url":"https://api.github.com/users/tilgovi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tilgovi/subscriptions","organizations_url":"https://api.github.com/users/tilgovi/orgs","repos_url":"https://api.github.com/users/tilgovi/repos","events_url":"https://api.github.com/users/tilgovi/events{/privacy}","received_events_url":"https://api.github.com/users/tilgovi/received_events","type":"User","site_admin":false},"created_at":"2015-03-20T15:35:31Z","updated_at":"2015-03-20T15:35:31Z","body":"I'm not sure there's cause for a new exception type. I know that's best practice in some Python documentation, but this is something that so many Pyramid modules must do. We're going to break this pattern all over the place. Modules we include that we don't build will throw other exceptions. Modules we do write may or may not want to depend on h in order to get `h.exceptions`.\r\n\r\nI don't particularly care what exception type you raise, but I'd just go with `RuntimeError`, like I suggested. The reason is that trying to catch and recover from configuration errors happening in other modules during application init seems like a bad idea to me. The only code that should be running during the boot process is includeme() functions and helpers called from those. Each should deal with its own configuration. None should be trying to be clever about what the others do.\r\n\r\nIf you want to document the rest as Pyramid best practices somewhere, that'd be fine developer documentation."}}