def flat_map(self, function: Callable, to: AutoStreamType = AUTO) -> Stream: if arg.is_defined(to): stream_class = StreamType.detect(to).get_class() else: stream_class = self.__class__ new_props_keys = stream_class([]).get_meta().keys() props = {k: v for k, v in self.get_meta().items() if k in new_props_keys} props.pop('count') items = self._get_mapped_items(function=function, flat=True) return stream_class(items, **props)
def _get_stream_type(self, stream_type: Union[StreamType, Auto] = AUTO) -> StreamType: if not Auto.is_defined(stream_type): if hasattr(self, 'get_stream_type'): stream_type = self.get_stream_type() elif hasattr(self, 'get_default_stream_type'): stream_type = self.get_default_stream_type() else: item_type = self.get_default_item_type() stream_type = StreamType.detect(item_type) return stream_type
def filter(self, *args, item_type: ItemType = ItemType.Auto, skip_errors: bool = False, **kwargs) -> Native: item_type = arg.delayed_acquire(item_type, self.get_item_type) stream_type = StreamType.detect(item_type) filtered_items = self._get_filtered_items(*args, item_type=item_type, skip_errors=skip_errors, **kwargs) stream = self.to_stream(data=filtered_items, stream_type=stream_type) return self._assume_native(stream)
def get_stream_type(cls) -> StreamType: stream_type = StreamType.detect(cls) assert isinstance(stream_type, StreamType) return stream_type