def _document_to_dict()

in components/webui/src/dpu/api.py [0:0]


def _document_to_dict(doc: Document) -> Optional[dict]:

    def to_proto(value):
        return Struct(
            fields={k: v for k, v in value.items()},
        )

    def struct_data_to_dict(struct_data) -> Dict:
        if type(struct_data).__name__ == "MapComposite":
            return MessageToDict(to_proto(struct_data.pb))
        return MessageToDict(struct_data)

    odoc: Dict[str, Any] = {
        "id": doc.id,
        "name": doc.name,
    }

    # Load metadata (from json_data or struct_data)
    if doc.json_data:
        metadata = json.loads(doc.json_data)
        odoc["metadata"] = json.loads(doc.json_data)
    else:
        metadata = struct_data_to_dict(doc.struct_data)
    odoc["metadata"] = metadata.get("metadata", {})
    odoc["status"] = metadata.get("status", "")
    odoc["objs"] = metadata.get("objs", [])

    # Load derived data if available
    if doc.derived_struct_data:
        doc_info = struct_data_to_dict(doc.derived_struct_data)
        odoc["content"] = [
            snippet.get("snippet")
            for snippet in doc_info.get("snippets", [])
            if snippet.get("snippet") is not None
        ]
        odoc["title"] = doc_info.get("title")
        odoc["uri"] = doc_info.get("link")

    # Otherwise just load normal content
    elif doc.content:
        odoc["uri"] = doc.content.uri

    return odoc