{"action":"opened","issue":{"url":"https://api.github.com/repos/Parsely/streamparse/issues/252","repository_url":"https://api.github.com/repos/Parsely/streamparse","labels_url":"https://api.github.com/repos/Parsely/streamparse/issues/252/labels{/name}","comments_url":"https://api.github.com/repos/Parsely/streamparse/issues/252/comments","events_url":"https://api.github.com/repos/Parsely/streamparse/issues/252/events","html_url":"https://github.com/Parsely/streamparse/issues/252","id":154462233,"number":252,"title":"3.0.0.dev3: TypeError: Inputs must be ComponentSpec or GlobalStreamId objects.","user":{"login":"Darkless012","id":1187034,"avatar_url":"https://avatars.githubusercontent.com/u/1187034?v=3","gravatar_id":"","url":"https://api.github.com/users/Darkless012","html_url":"https://github.com/Darkless012","followers_url":"https://api.github.com/users/Darkless012/followers","following_url":"https://api.github.com/users/Darkless012/following{/other_user}","gists_url":"https://api.github.com/users/Darkless012/gists{/gist_id}","starred_url":"https://api.github.com/users/Darkless012/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Darkless012/subscriptions","organizations_url":"https://api.github.com/users/Darkless012/orgs","repos_url":"https://api.github.com/users/Darkless012/repos","events_url":"https://api.github.com/users/Darkless012/events{/privacy}","received_events_url":"https://api.github.com/users/Darkless012/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2016-05-12T11:42:24Z","updated_at":"2016-05-12T11:42:24Z","closed_at":null,"body":"I'm trying to come to streamparse 3. And the most difficult part is Streams and Stream Grouping for inputs.\r\n\r\nhttp://streamparse.readthedocs.io/en/master/topologies.html\r\n\r\nThere is only example of inputs with \"A dict mapping from ComponentSpec to Grouping\".\r\nAnd outputs without streams.\r\n\r\nSo lets see API directly:\r\nhttp://streamparse.readthedocs.io/en/master/api.html#streamparse.Bolt.spec\r\n\r\n    inputs –\r\n    Streams that feed into this Bolt.\r\n\r\n    Two forms of this are acceptable:\r\n\r\n    A dict mapping from ComponentSpec to Grouping.\r\n    A list of Stream or ComponentSpec\r\n\r\nOk, so according to this the accepted inputs should be:\r\n\r\n    inputs={my_bolt: Grouping.Grouping.fields('data')}\r\n    or\r\n    inputs=[my_bolt]\r\n    \r\nBut what about streams?\r\nConsider this example of outputs:\r\n\r\n    outputs = [\r\n            streamparse.Stream(fields=['data'],\r\n                   name='unit',),\r\n            streamparse.Stream(fields=['data'],\r\n                   name='incident',),\r\n        ]\r\n\r\nSo according to DOC inputs should be list of Streams?\r\n    \r\n    inputs=[streamparse.Stream(fields=['data'],\r\n                   name='unit',)]\r\n\r\nThrows an error: TypeError: Inputs must be ComponentSpec or GlobalStreamId objects.\r\nSo I guess it is not Stream that doc says, because there is no link to previous bolts (origination of data.)\r\n\r\nSo lets try:\r\n\r\n    inputs={my_bolt : streamparse.Stream(fields=['data'],\r\n                   name='unit',)}\r\n\r\nKeyError: \"Invalid stream for test_bolt: 'default'. Valid streams are: ['incident', 'unit']\"\r\nSo I'm guessing the defaults is taken from here:\r\nhttps://github.com/Parsely/streamparse/blob/master/streamparse/dsl/component.py#L80\r\n\r\nSo How do I make Simple case scenario with Streams and grouping?\r\n\r\n    [first_spout]         [second_spout]\r\n        \\__________ __________/\r\n                   |\r\n           [process_bolt]\r\n         __________|__________\r\n        /                     \\\r\n    [unit_bolt]          [incident_bolt]\r\n        \\__________ __________/\r\n                   |\r\n              [save_bolt]\r\n\r\n"}}