csv_formatter.py 文件源码

python
阅读 16 收藏 0 点赞 0 评论 0

项目:microcosm-flask 作者: globality-corp 项目源码 文件源码
def csvify(self, response_data):
        """
        Make Flask `Response` object, with data returned as a generator for the CSV content
        The CSV is built from JSON-like object (Python `dict` or list of `dicts`)

        """
        if "items" in response_data:
            list_response_data = response_data["items"]
        else:
            list_response_data = [response_data]

        response_fields = list(list_response_data[0].keys())

        column_order = getattr(self.response_schema, "csv_column_order", None)
        if column_order is None:
            # We should still be able to return a CSV even if no column order has been specified
            column_names = response_fields
        else:
            column_names = self.response_schema.csv_column_order
            # The column order be only partially specified
            column_names.extend([field_name for field_name in response_fields if field_name not in column_names])

        output = StringIO()
        csv_writer = writer(output, quoting=QUOTE_MINIMAL)
        csv_writer.writerow(column_names)
        for item in list_response_data:
            csv_writer.writerow([item[column] for column in column_names])
        # Ideally we'd want to `yield` each line to stream the content
        # But something downstream seems to break streaming
        yield output.getvalue()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号