Ejemplo n.º 1
0
 def __getitem__(self, stream):
     if stream not in self.common.streams:
         raise KeyError('Invalid stream for {}: {!r}. Valid streams are: '
                        '{}'.format(self.name, stream,
                                    list(self.common.streams.keys())))
     # If name is None, because it hasn't been set yet, use object instead
     component_id = self.name or self
     return GlobalStreamId(componentId=component_id, streamId=stream)
Ejemplo n.º 2
0
 def _sanitize_inputs(inputs):
     if isinstance(inputs, dict):
         for key, val in list(iteritems(inputs)):
             if not isinstance(key, GlobalStreamId):
                 if isinstance(key, ComponentSpec):
                     inputs[key['default']] = val
                     del inputs[key]
                 else:
                     raise TypeError(
                         'If inputs is a dict, it is expected to'
                         ' map from GlobalStreamId or '
                         'ComponentSpec objects to Grouping '
                         'objects.  Given key: {!r}; Given '
                         'value: {!r}'.format(key, val))
             if not isinstance(val, storm_thrift.Grouping):
                 raise TypeError(
                     'If inputs is a dict, it is expected to map'
                     ' from GlobalStreamId or ComponentSpec '
                     'objects to Grouping objects.  Given key: '
                     '{!r}; Given value: {!r}'.format(key, val))
         input_dict = inputs
     else:
         if isinstance(inputs, ComponentSpec):
             inputs = [inputs]
         if isinstance(inputs, (list, tuple)):
             input_dict = {}
             for input_spec in inputs:
                 grouping = Grouping.SHUFFLE
                 if isinstance(input_spec, ComponentSpec):
                     component_id = input_spec.name or input_spec
                     stream_id = GlobalStreamId(componentId=component_id,
                                                streamId='default')
                     # Can only automatically determine if grouping should be
                     # direct when given a ComponentSpec.  If
                     # GlobalStreamId, we're out of luck.
                     # TODO: Document this.
                     default_stream = input_spec.common.streams.get(
                         'default')
                     if default_stream is not None and default_stream.direct:
                         grouping = Grouping.DIRECT
                 elif isinstance(input_spec, GlobalStreamId):
                     stream_id = input_spec
                 else:
                     raise TypeError(
                         'Inputs must be ComponentSpec or '
                         'GlobalStreamId objects.  Given: {!r}'.format(
                             input_spec))
                 input_dict[stream_id] = grouping
         elif inputs is None:
             input_dict = {}
         else:
             raise TypeError(
                 'Inputs must either be a list, dict, or None.  '
                 'Given: {!r}'.format(inputs))
     return input_dict