{"action":"created","issue":{"url":"https://api.github.com/repos/testing-cabal/testtools/issues/207","repository_url":"https://api.github.com/repos/testing-cabal/testtools","labels_url":"https://api.github.com/repos/testing-cabal/testtools/issues/207/labels{/name}","comments_url":"https://api.github.com/repos/testing-cabal/testtools/issues/207/comments","events_url":"https://api.github.com/repos/testing-cabal/testtools/issues/207/events","html_url":"https://github.com/testing-cabal/testtools/pull/207","id":131353048,"number":207,"title":"Add always and never matchers.","user":{"login":"mithrandi","id":856430,"avatar_url":"https://avatars.githubusercontent.com/u/856430?v=3","gravatar_id":"","url":"https://api.github.com/users/mithrandi","html_url":"https://github.com/mithrandi","followers_url":"https://api.github.com/users/mithrandi/followers","following_url":"https://api.github.com/users/mithrandi/following{/other_user}","gists_url":"https://api.github.com/users/mithrandi/gists{/gist_id}","starred_url":"https://api.github.com/users/mithrandi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mithrandi/subscriptions","organizations_url":"https://api.github.com/users/mithrandi/orgs","repos_url":"https://api.github.com/users/mithrandi/repos","events_url":"https://api.github.com/users/mithrandi/events{/privacy}","received_events_url":"https://api.github.com/users/mithrandi/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":4,"created_at":"2016-02-04T13:46:36Z","updated_at":"2016-02-04T21:19:01Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/testing-cabal/testtools/pulls/207","html_url":"https://github.com/testing-cabal/testtools/pull/207","diff_url":"https://github.com/testing-cabal/testtools/pull/207.diff","patch_url":"https://github.com/testing-cabal/testtools/pull/207.patch"},"body":"Fixes LP#947026. Please criticize ruthlessly for style / formatting / etc. since I just cribbed a bunch from other modules.\n\n<!-- Reviewable:start -->\n[<img src=\"https://reviewable.io/review_button.svg\" height=\"40\" alt=\"Review on Reviewable\"/>](https://reviewable.io/reviews/testing-cabal/testtools/207)\n<!-- Reviewable:end -->\n"},"comment":{"url":"https://api.github.com/repos/testing-cabal/testtools/issues/comments/180056830","html_url":"https://github.com/testing-cabal/testtools/pull/207#issuecomment-180056830","issue_url":"https://api.github.com/repos/testing-cabal/testtools/issues/207","id":180056830,"user":{"login":"thomir","id":372783,"avatar_url":"https://avatars.githubusercontent.com/u/372783?v=3","gravatar_id":"","url":"https://api.github.com/users/thomir","html_url":"https://github.com/thomir","followers_url":"https://api.github.com/users/thomir/followers","following_url":"https://api.github.com/users/thomir/following{/other_user}","gists_url":"https://api.github.com/users/thomir/gists{/gist_id}","starred_url":"https://api.github.com/users/thomir/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thomir/subscriptions","organizations_url":"https://api.github.com/users/thomir/orgs","repos_url":"https://api.github.com/users/thomir/repos","events_url":"https://api.github.com/users/thomir/events{/privacy}","received_events_url":"https://api.github.com/users/thomir/received_events","type":"User","site_admin":false},"created_at":"2016-02-04T21:19:01Z","updated_at":"2016-02-04T21:19:01Z","body":"> We've started to change that idiom with the twistedsupport matchers. Basically, I don't want to export concrete types unless we have to.\r\n\r\nHmmmm, whether or not you're exporting a concrete type, it seems odd to me to break a naming convention. As an end user, if I want to import 'randommatcher', how do I know if I have to type:\r\n\r\nfrom testtools.matchers import randommatcher\r\n\r\n-or-\r\n\r\nfrom testtools.matchers import RandomMatcher\r\n\r\n?\r\n\r\nI don't mind having a level of indirection via a function (that's a conversation for another day, at least), but breaking the titlecase naming convention seems like it's going to cause confusion and surprise."}}