File indexing completed on 2023-09-24 07:46:32
0001 /* 0002 SPDX-License-Identifier: GPL-2.0-or-later 0003 SPDX-FileCopyrightText: 2019 Sirgienko Nikita <warquark@gmail.com> 0004 */ 0005 0006 #ifndef JUPYTERUTILS_H 0007 #define JUPYTERUTILS_H 0008 0009 #include <vector> 0010 0011 #include <QString> 0012 #include <QMimeDatabase> 0013 #include <QStringList> 0014 0015 #include "cantor_export.h" 0016 0017 class QJsonValue; 0018 class QJsonObject; 0019 class QJsonArray; 0020 class QJsonDocument; 0021 class QImage; 0022 class QUrl; 0023 0024 namespace Cantor { 0025 0026 class Backend; 0027 0028 /** 0029 * Static class for storing some common code for working with jupyter json scheme 0030 * Like getting 'metadata', getting source code from 'source' tag, scheme validation 0031 * handleling missing keys, etc. 0032 * 0033 */ 0034 class CANTOR_EXPORT JupyterUtils 0035 { 0036 public: 0037 static QJsonObject getMetadata(const QJsonObject& object); 0038 static QJsonObject getCantorMetadata(const QJsonObject object); 0039 0040 static QJsonArray getCells(const QJsonObject notebook); 0041 static std::tuple<int, int> getNbformatVersion(const QJsonObject& notebook); 0042 0043 static QString getCellType(const QJsonObject& cell); 0044 static QString getSource(const QJsonObject& cell); 0045 static void setSource(QJsonObject& cell, const QString& source); 0046 0047 static QString getOutputType(const QJsonObject& output); 0048 0049 /// Actually, this function handle only Jupyter notebooks version >= 4.0.0 0050 /// Previous versions treats as 'not notebook' 0051 static bool isJupyterNotebook(const QJsonDocument& doc); 0052 0053 static bool isJupyterCell(const QJsonValue& cell); 0054 static bool isMarkdownCell(const QJsonValue& cell); 0055 static bool isCodeCell(const QJsonValue& cell); 0056 static bool isRawCell(const QJsonValue& cell); 0057 0058 static bool isJupyterOutput(const QJsonValue& output); 0059 static bool isJupyterDisplayOutput(const QJsonValue& output); 0060 static bool isJupyterTextOutput(const QJsonValue& output); 0061 static bool isJupyterErrorOutput(const QJsonValue& output); 0062 static bool isJupyterExecutionResult(const QJsonValue& output); 0063 0064 static QJsonValue toJupyterMultiline(const QString& source); 0065 static QString fromJupyterMultiline(const QJsonValue& source); 0066 0067 static QString getKernelName(const QJsonValue& kernelspecValue); 0068 static QJsonObject getKernelspec(const Cantor::Backend* backend); 0069 0070 static QImage loadImage(const QJsonValue& mimeBundle, const QString& key); 0071 static QJsonObject packMimeBundle(const QImage& image, const QString& mime); 0072 static QStringList imageKeys(const QJsonValue& mimeBundle); 0073 static QString firstImageKey(const QJsonValue& mimeBundle); 0074 static QString mainBundleKey(const QJsonValue& mimeBundle); 0075 0076 static bool isGifHtml(const QJsonValue& html); 0077 static QUrl loadGifHtml(const QJsonValue& html); 0078 public: 0079 static const QString cellsKey; 0080 static const QString metadataKey; 0081 static const QString cantorMetadataKey; 0082 static const QString nbformatKey; 0083 static const QString nbformatMinorKey; 0084 static const QString cellTypeKey; 0085 static const QString sourceKey; 0086 static const QString outputTypeKey; 0087 static const QString executionCountKey; 0088 static const QString outputsKey; 0089 static const QString dataKey; 0090 0091 static const QString pngMime; 0092 static const QString gifMime; 0093 static const QString textMime; 0094 static const QString htmlMime; 0095 static const QString latexMime; 0096 static const QString svgMime; 0097 0098 static const QMimeDatabase mimeDatabase; 0099 }; 0100 } 0101 0102 #endif // JUPYTERUTILS_H