From 91eda5ae34cef99b6a1a41e196002ba3c9ef87ed Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Tue, 20 Aug 2024 15:17:55 -0400 Subject: [PATCH] feat(prs): add filtering and table --- notebook/dashboard.ipynb | 2680 +++----------------------------------- requirements.txt | 2 + 2 files changed, 177 insertions(+), 2505 deletions(-) diff --git a/notebook/dashboard.ipynb b/notebook/dashboard.ipynb index 0c891940..8dde2a0a 100644 --- a/notebook/dashboard.ipynb +++ b/notebook/dashboard.ipynb @@ -87,6 +87,8 @@ "# lib imports\n", "from dotenv import load_dotenv\n", "from github import Github, UnknownObjectException\n", + "from IPython.display import display\n", + "from ipywidgets import widgets, interactive\n", "import pandas as pd\n", "import plotly.express as px\n", "import plotly.graph_objects as go\n", @@ -375,48 +377,184 @@ }, "source": [ "# Open PRs\n", - "pr_data = []\n", - "for repo in df_repos.to_dict('records'):\n", - " draft_prs = 0\n", - " non_draft_prs = 0\n", - " dependabot_prs = 0\n", + "try:\n", + " pr_data\n", + "except NameError:\n", + " pr_data = []\n", + " for repo in df_repos.to_dict('records'):\n", + " for pr in repo['prs']:\n", + " pr_details = repo['_repo'].get_pull(pr.number)\n", + " pr_data.append({\n", + " \"repo\": repo['repo'],\n", + " \"number\": pr.number,\n", + " \"title\": pr_details.title,\n", + " \"author\": pr_details.user.login,\n", + " \"assignees\": [assignee.login for assignee in pr_details.assignees],\n", + " \"labels\": [label.name for label in pr_details.labels],\n", + " \"ready\": not pr_details.draft,\n", + " \"created_at\": pr_details.created_at if hasattr(pr_details, 'created_at') else None,\n", + " \"updated_at\": pr_details.updated_at if hasattr(pr_details, 'updated_at') else None,\n", + " })\n", + "\n", + "df_prs = pd.DataFrame(pr_data)\n", "\n", - " for pr in repo['prs']:\n", - " pr_details = repo['_repo'].get_pull(pr.number)\n", - " if pr_details.user.login == 'dependabot[bot]' or pr_details.user.login == 'renovate[bot]':\n", - " dependabot_prs += 1\n", - " elif pr_details.draft:\n", - " draft_prs += 1\n", + "# Filter and sort functions\n", + "def filter_prs(\n", + " df,\n", + " repo='All',\n", + " author='All',\n", + " assignee='All',\n", + " label='All',\n", + " ready='All',\n", + " exclude_repo=False,\n", + " exclude_author=False,\n", + " exclude_assignee=False,\n", + " exclude_label=False,\n", + "):\n", + " if repo != 'All':\n", + " if exclude_repo:\n", + " df = df[df['repo'] != repo]\n", + " else:\n", + " df = df[df['repo'] == repo]\n", + " if author != 'All':\n", + " if exclude_author:\n", + " df = df[df['author'] != author]\n", + " else:\n", + " df = df[df['author'] == author]\n", + " if assignee != 'All':\n", + " if exclude_assignee:\n", + " df = df[~df['assignees'].apply(lambda x: assignee in x)]\n", " else:\n", - " non_draft_prs += 1\n", + " df = df[df['assignees'].apply(lambda x: assignee in x)]\n", + " if label != 'All':\n", + " if exclude_label:\n", + " df = df[~df['labels'].apply(lambda x: label in x)]\n", + " else:\n", + " df = df[df['labels'].apply(lambda x: label in x)]\n", + " if ready != 'All':\n", + " df = df[df['ready'] == (ready == 'Ready for Review')]\n", + " return df\n", + "\n", + "# Create dropdown filters\n", + "repo_filter = widgets.Dropdown(\n", + " options=['All'] + df_prs['repo'].unique().tolist(),\n", + " value='All',\n", + " description='Repo:',\n", + ")\n", "\n", - " pr_data.append({\n", - " \"repo\": repo['repo'],\n", - " \"Draft\": draft_prs,\n", - " \"Ready for review\": non_draft_prs,\n", - " \"Dependency\": dependabot_prs,\n", - " })\n", + "author_filter = widgets.Dropdown(\n", + " options=['All'] + df_prs['author'].unique().tolist(),\n", + " value='All',\n", + " description='Author:',\n", + ")\n", "\n", - "df_prs = pd.DataFrame(pr_data)\n", - "df_prs['total_prs'] = df_prs[['Draft', 'Ready for review', 'Dependency']].sum(axis=1)\n", + "assignee_filter = widgets.Dropdown(\n", + " options=['All'] + list(set(assignee for assignees in df_prs['assignees'] for assignee in assignees)),\n", + " value='All',\n", + " description='Assignee:',\n", + ")\n", "\n", - "# Sort by total PRs in descending order\n", - "df_prs = df_prs.sort_values(by='total_prs', ascending=False)\n", + "label_filter = widgets.Dropdown(\n", + " options=['All'] + list(set(label for labels in df_prs['labels'] for label in labels)),\n", + " value='All',\n", + " description='Label:',\n", + ")\n", "\n", - "# Visualize data using a stacked bar chart\n", - "fig = px.bar(\n", - " df_prs,\n", - " x='repo',\n", - " y=['Draft', 'Ready for review', 'Dependency'],\n", - " title='Open Pull Requests',\n", - " labels={'value': 'Count', 'variable': 'PR Type'},\n", - " barmode='stack'\n", + "ready_filter = widgets.Dropdown(\n", + " options=['All', 'Draft', 'Ready for Review'],\n", + " value='All',\n", + " description='Ready:',\n", ")\n", - "fig.update_layout(\n", - " yaxis_title='Count of PRs',\n", - " xaxis_title='Repository',\n", + "\n", + "# Create exclusion checkboxes\n", + "exclude_repo_checkbox = widgets.Checkbox(\n", + " value=False,\n", + " description='Exclude selected repo',\n", ")\n", - "fig.show()" + "\n", + "exclude_author_checkbox = widgets.Checkbox(\n", + " value=False,\n", + " description='Exclude selected author',\n", + ")\n", + "\n", + "exclude_assignee_checkbox = widgets.Checkbox(\n", + " value=False,\n", + " description='Exclude selected assignee',\n", + ")\n", + "\n", + "exclude_label_checkbox = widgets.Checkbox(\n", + " value=False,\n", + " description='Exclude selected label',\n", + ")\n", + "\n", + "# Text widget to display total number of PRs\n", + "total_prs_text = widgets.HTML(value=\"\")\n", + "\n", + "def update_visualizations(\n", + " repo,\n", + " author,\n", + " assignee,\n", + " label,\n", + " ready,\n", + " exclude_repo,\n", + " exclude_author,\n", + " exclude_assignee,\n", + " exclude_label,\n", + "):\n", + " filtered_df = filter_prs(\n", + " df_prs,\n", + " repo,\n", + " author,\n", + " assignee,\n", + " label,\n", + " ready,\n", + " exclude_repo,\n", + " exclude_author,\n", + " exclude_assignee,\n", + " exclude_label,\n", + " )\n", + "\n", + " # Update Table\n", + " fig_table = go.Figure(data=[go.Table(\n", + " header=dict(values=list(filtered_df.columns),\n", + " align='left'),\n", + " cells=dict(values=[filtered_df[col] for col in filtered_df.columns],\n", + " align='left'))\n", + " ])\n", + " fig_table.update_layout(height=800, title='Filtered PRs')\n", + "\n", + " # Update Bar Chart\n", + " df_bar = filtered_df.groupby(['repo', 'ready']).size().reset_index(name='count')\n", + " fig_bar = px.bar(\n", + " df_bar,\n", + " x='repo',\n", + " y='count',\n", + " color='ready',\n", + " title='PRs by Repo and Ready Status',\n", + " labels={'count': 'Number of PRs', 'repo': 'Repository', 'ready': 'Ready Status'},\n", + " barmode='stack',\n", + " text='count'\n", + " )\n", + "\n", + " # Update total PRs text\n", + " total_prs_text.value = f\"Filtered PRs: {len(filtered_df)}\"\n", + "\n", + " fig_table.show()\n", + " fig_bar.show()\n", + "\n", + "interactive_visualizations = interactive(\n", + " update_visualizations,\n", + " repo=repo_filter,\n", + " author=author_filter,\n", + " assignee=assignee_filter,\n", + " label=label_filter,\n", + " ready=ready_filter,\n", + " exclude_repo=exclude_repo_checkbox,\n", + " exclude_author=exclude_author_checkbox,\n", + " exclude_assignee=exclude_assignee_checkbox,\n", + " exclude_label=exclude_label_checkbox,\n", + ")\n", + "display(total_prs_text, interactive_visualizations)" ], "outputs": [], "execution_count": null @@ -585,12 +723,7 @@ "id": "a520a320cd823874" }, { - "metadata": { - "ExecuteTime": { - "end_time": "2024-08-20T02:58:06.219404Z", - "start_time": "2024-08-20T02:58:06.066344Z" - } - }, + "metadata": {}, "cell_type": "code", "source": [ "# Docs\n", @@ -663,2471 +796,8 @@ " fig.show()" ], "id": "ec43a8fd7f9d49bb", - "outputs": [ - { - "data": { - "application/vnd.plotly.v1+json": { - "data": [ - { - "branchvalues": "total", - "domain": { - "x": [ - 0.0, - 1.0 - ], - "y": [ - 0.0, - 1.0 - ] - }, - "hovertemplate": "labels=%{label}
repo_count=%{value}
parent=%{parent}
id=%{id}", - "ids": [ - "True/.github", - "True/GSMS", - "True/LizardByte.github.io", - "True/RetroArcher", - "True/Sunshine", - "True/Themerr-jellyfin", - "True/Themerr-kodi", - "True/Themerr-plex", - "True/ThemerrDB", - "True/Virtual-Gamepad-Emulation-Bus", - "True/Virtual-Gamepad-Emulation-Client", - "True/Virtual-Gamepad-Emulation-dotnet", - "True/awesome-sunshine", - "False/build-deps", - "True/create-release-action", - "True/dashboard", - "False/db", - "True/doxyconfig", - "True/homebrew-homebrew", - "True/homebrew-release-action", - "True/jellyfin-plugin-repo", - "True/libdisplaydevice", - "True/nvapi-open-source-sdk", - "True/pacman-repo", - "True/setup-python-action", - "True/setup-release-action", - "True/shared-web", - "True/support-bot", - "True/support-bot-commands", - "True/template-base", - "True/tray", - "False/uno", - "True/update-changelog-action", - "False", - "True" - ], - "labels": [ - ".github", - "GSMS", - "LizardByte.github.io", - "RetroArcher", - "Sunshine", - "Themerr-jellyfin", - "Themerr-kodi", - "Themerr-plex", - "ThemerrDB", - "Virtual-Gamepad-Emulation-Bus", - "Virtual-Gamepad-Emulation-Client", - "Virtual-Gamepad-Emulation-dotnet", - "awesome-sunshine", - "build-deps", - "create-release-action", - "dashboard", - "db", - "doxyconfig", - "homebrew-homebrew", - "homebrew-release-action", - "jellyfin-plugin-repo", - "libdisplaydevice", - "nvapi-open-source-sdk", - "pacman-repo", - "setup-python-action", - "setup-release-action", - "shared-web", - "support-bot", - "support-bot-commands", - "template-base", - "tray", - "uno", - "update-changelog-action", - "False", - "True" - ], - "name": "", - "parents": [ - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "False", - "True", - "True", - "False", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "False", - "True", - "", - "" - ], - "values": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 3, - 30 - ], - "type": "treemap" - }, - { - "branchvalues": "total", - "domain": { - "x": [ - 0.0, - 1.0 - ], - "y": [ - 0.0, - 1.0 - ] - }, - "hovertemplate": "labels=%{label}
repo_count=%{value}
parent=%{parent}
id=%{id}", - "ids": [ - "True/.github", - "True/GSMS", - "True/LizardByte.github.io", - "True/RetroArcher", - "True/Sunshine", - "True/Themerr-jellyfin", - "True/Themerr-kodi", - "True/Themerr-plex", - "True/ThemerrDB", - "True/Virtual-Gamepad-Emulation-Bus", - "True/Virtual-Gamepad-Emulation-Client", - "True/Virtual-Gamepad-Emulation-dotnet", - "True/awesome-sunshine", - "False/build-deps", - "True/create-release-action", - "True/dashboard", - "False/db", - "True/doxyconfig", - "True/homebrew-homebrew", - "True/homebrew-release-action", - "True/jellyfin-plugin-repo", - "True/libdisplaydevice", - "True/nvapi-open-source-sdk", - "True/pacman-repo", - "True/setup-python-action", - "True/setup-release-action", - "True/shared-web", - "True/support-bot", - "True/support-bot-commands", - "True/template-base", - "True/tray", - "False/uno", - "True/update-changelog-action", - "False", - "True" - ], - "labels": [ - ".github", - "GSMS", - "LizardByte.github.io", - "RetroArcher", - "Sunshine", - "Themerr-jellyfin", - "Themerr-kodi", - "Themerr-plex", - "ThemerrDB", - "Virtual-Gamepad-Emulation-Bus", - "Virtual-Gamepad-Emulation-Client", - "Virtual-Gamepad-Emulation-dotnet", - "awesome-sunshine", - "build-deps", - "create-release-action", - "dashboard", - "db", - "doxyconfig", - "homebrew-homebrew", - "homebrew-release-action", - "jellyfin-plugin-repo", - "libdisplaydevice", - "nvapi-open-source-sdk", - "pacman-repo", - "setup-python-action", - "setup-release-action", - "shared-web", - "support-bot", - "support-bot-commands", - "template-base", - "tray", - "uno", - "update-changelog-action", - "False", - "True" - ], - "name": "", - "parents": [ - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "False", - "True", - "True", - "False", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "False", - "True", - "", - "" - ], - "values": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 3, - 30 - ], - "type": "sunburst", - "visible": false - } - ], - "layout": { - "template": { - "data": { - "histogram2dcontour": [ - { - "type": "histogram2dcontour", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "choropleth": [ - { - "type": "choropleth", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - ], - "histogram2d": [ - { - "type": "histogram2d", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "heatmap": [ - { - "type": "heatmap", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "heatmapgl": [ - { - "type": "heatmapgl", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "contourcarpet": [ - { - "type": "contourcarpet", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - ], - "contour": [ - { - "type": "contour", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "surface": [ - { - "type": "surface", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "mesh3d": [ - { - "type": "mesh3d", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - ], - "scatter": [ - { - "marker": { - "line": { - "color": "#283442" - } - }, - "type": "scatter" - } - ], - "parcoords": [ - { - "type": "parcoords", - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scatterpolargl": [ - { - "type": "scatterpolargl", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "bar": [ - { - "error_x": { - "color": "#f2f5fa" - }, - "error_y": { - "color": "#f2f5fa" - }, - "marker": { - "line": { - "color": "rgb(17,17,17)", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "bar" - } - ], - "scattergeo": [ - { - "type": "scattergeo", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scatterpolar": [ - { - "type": "scatterpolar", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "histogram": [ - { - "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "histogram" - } - ], - "scattergl": [ - { - "marker": { - "line": { - "color": "#283442" - } - }, - "type": "scattergl" - } - ], - "scatter3d": [ - { - "type": "scatter3d", - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scattermapbox": [ - { - "type": "scattermapbox", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scatterternary": [ - { - "type": "scatterternary", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scattercarpet": [ - { - "type": "scattercarpet", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#A2B1C6", - "gridcolor": "#506784", - "linecolor": "#506784", - "minorgridcolor": "#506784", - "startlinecolor": "#A2B1C6" - }, - "baxis": { - "endlinecolor": "#A2B1C6", - "gridcolor": "#506784", - "linecolor": "#506784", - "minorgridcolor": "#506784", - "startlinecolor": "#A2B1C6" - }, - "type": "carpet" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#506784" - }, - "line": { - "color": "rgb(17,17,17)" - } - }, - "header": { - "fill": { - "color": "#2a3f5f" - }, - "line": { - "color": "rgb(17,17,17)" - } - }, - "type": "table" - } - ], - "barpolar": [ - { - "marker": { - "line": { - "color": "rgb(17,17,17)", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "barpolar" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ] - }, - "layout": { - "autotypenumbers": "strict", - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#FFA15A", - "#19d3f3", - "#FF6692", - "#B6E880", - "#FF97FF", - "#FECB52" - ], - "font": { - "color": "#f2f5fa" - }, - "hovermode": "closest", - "hoverlabel": { - "align": "left" - }, - "paper_bgcolor": "rgb(17,17,17)", - "plot_bgcolor": "rgb(17,17,17)", - "polar": { - "bgcolor": "rgb(17,17,17)", - "angularaxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - }, - "radialaxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - } - }, - "ternary": { - "bgcolor": "rgb(17,17,17)", - "aaxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - }, - "baxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - }, - "caxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - } - }, - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "sequential": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ] - }, - "xaxis": { - "gridcolor": "#283442", - "linecolor": "#506784", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "#283442", - "automargin": true, - "zerolinewidth": 2 - }, - "yaxis": { - "gridcolor": "#283442", - "linecolor": "#506784", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "#283442", - "automargin": true, - "zerolinewidth": 2 - }, - "scene": { - "xaxis": { - "backgroundcolor": "rgb(17,17,17)", - "gridcolor": "#506784", - "linecolor": "#506784", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#C8D4E3", - "gridwidth": 2 - }, - "yaxis": { - "backgroundcolor": "rgb(17,17,17)", - "gridcolor": "#506784", - "linecolor": "#506784", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#C8D4E3", - "gridwidth": 2 - }, - "zaxis": { - "backgroundcolor": "rgb(17,17,17)", - "gridcolor": "#506784", - "linecolor": "#506784", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#C8D4E3", - "gridwidth": 2 - } - }, - "shapedefaults": { - "line": { - "color": "#f2f5fa" - } - }, - "annotationdefaults": { - "arrowcolor": "#f2f5fa", - "arrowhead": 0, - "arrowwidth": 1 - }, - "geo": { - "bgcolor": "rgb(17,17,17)", - "landcolor": "rgb(17,17,17)", - "subunitcolor": "#506784", - "showland": true, - "showlakes": true, - "lakecolor": "rgb(17,17,17)" - }, - "title": { - "x": 0.05 - }, - "updatemenudefaults": { - "bgcolor": "#506784", - "borderwidth": 0 - }, - "sliderdefaults": { - "bgcolor": "#C8D4E3", - "borderwidth": 1, - "bordercolor": "rgb(17,17,17)", - "tickwidth": 0 - }, - "mapbox": { - "style": "dark" - } - } - }, - "title": { - "text": "Has README file" - }, - "updatemenus": [ - { - "buttons": [ - { - "args": [ - { - "visible": [ - true, - false - ] - } - ], - "label": "Treemap", - "method": "update" - }, - { - "args": [ - { - "visible": [ - false, - true - ] - } - ], - "label": "Sunburst", - "method": "update" - } - ], - "direction": "down", - "showactive": true - } - ] - }, - "config": { - "plotlyServerURL": "https://plot.ly" - } - }, - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.plotly.v1+json": { - "data": [ - { - "branchvalues": "total", - "domain": { - "x": [ - 0.0, - 1.0 - ], - "y": [ - 0.0, - 1.0 - ] - }, - "hovertemplate": "labels=%{label}
repo_count=%{value}
parent=%{parent}
id=%{id}", - "ids": [ - "True/.github", - "False/GSMS", - "False/LizardByte.github.io", - "True/RetroArcher", - "True/Sunshine", - "True/Themerr-jellyfin", - "True/Themerr-kodi", - "True/Themerr-plex", - "False/ThemerrDB", - "False/Virtual-Gamepad-Emulation-Bus", - "False/Virtual-Gamepad-Emulation-Client", - "False/Virtual-Gamepad-Emulation-dotnet", - "False/awesome-sunshine", - "False/build-deps", - "False/create-release-action", - "False/dashboard", - "False/db", - "True/doxyconfig", - "False/homebrew-homebrew", - "False/homebrew-release-action", - "False/jellyfin-plugin-repo", - "True/libdisplaydevice", - "False/nvapi-open-source-sdk", - "False/pacman-repo", - "False/setup-python-action", - "False/setup-release-action", - "False/shared-web", - "False/support-bot", - "False/support-bot-commands", - "False/template-base", - "True/tray", - "False/uno", - "False/update-changelog-action", - "False", - "True" - ], - "labels": [ - ".github", - "GSMS", - "LizardByte.github.io", - "RetroArcher", - "Sunshine", - "Themerr-jellyfin", - "Themerr-kodi", - "Themerr-plex", - "ThemerrDB", - "Virtual-Gamepad-Emulation-Bus", - "Virtual-Gamepad-Emulation-Client", - "Virtual-Gamepad-Emulation-dotnet", - "awesome-sunshine", - "build-deps", - "create-release-action", - "dashboard", - "db", - "doxyconfig", - "homebrew-homebrew", - "homebrew-release-action", - "jellyfin-plugin-repo", - "libdisplaydevice", - "nvapi-open-source-sdk", - "pacman-repo", - "setup-python-action", - "setup-release-action", - "shared-web", - "support-bot", - "support-bot-commands", - "template-base", - "tray", - "uno", - "update-changelog-action", - "False", - "True" - ], - "name": "", - "parents": [ - "True", - "False", - "False", - "True", - "True", - "True", - "True", - "True", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "True", - "False", - "False", - "False", - "True", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "True", - "False", - "False", - "", - "" - ], - "values": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 24, - 9 - ], - "type": "treemap" - }, - { - "branchvalues": "total", - "domain": { - "x": [ - 0.0, - 1.0 - ], - "y": [ - 0.0, - 1.0 - ] - }, - "hovertemplate": "labels=%{label}
repo_count=%{value}
parent=%{parent}
id=%{id}", - "ids": [ - "True/.github", - "False/GSMS", - "False/LizardByte.github.io", - "True/RetroArcher", - "True/Sunshine", - "True/Themerr-jellyfin", - "True/Themerr-kodi", - "True/Themerr-plex", - "False/ThemerrDB", - "False/Virtual-Gamepad-Emulation-Bus", - "False/Virtual-Gamepad-Emulation-Client", - "False/Virtual-Gamepad-Emulation-dotnet", - "False/awesome-sunshine", - "False/build-deps", - "False/create-release-action", - "False/dashboard", - "False/db", - "True/doxyconfig", - "False/homebrew-homebrew", - "False/homebrew-release-action", - "False/jellyfin-plugin-repo", - "True/libdisplaydevice", - "False/nvapi-open-source-sdk", - "False/pacman-repo", - "False/setup-python-action", - "False/setup-release-action", - "False/shared-web", - "False/support-bot", - "False/support-bot-commands", - "False/template-base", - "True/tray", - "False/uno", - "False/update-changelog-action", - "False", - "True" - ], - "labels": [ - ".github", - "GSMS", - "LizardByte.github.io", - "RetroArcher", - "Sunshine", - "Themerr-jellyfin", - "Themerr-kodi", - "Themerr-plex", - "ThemerrDB", - "Virtual-Gamepad-Emulation-Bus", - "Virtual-Gamepad-Emulation-Client", - "Virtual-Gamepad-Emulation-dotnet", - "awesome-sunshine", - "build-deps", - "create-release-action", - "dashboard", - "db", - "doxyconfig", - "homebrew-homebrew", - "homebrew-release-action", - "jellyfin-plugin-repo", - "libdisplaydevice", - "nvapi-open-source-sdk", - "pacman-repo", - "setup-python-action", - "setup-release-action", - "shared-web", - "support-bot", - "support-bot-commands", - "template-base", - "tray", - "uno", - "update-changelog-action", - "False", - "True" - ], - "name": "", - "parents": [ - "True", - "False", - "False", - "True", - "True", - "True", - "True", - "True", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "True", - "False", - "False", - "False", - "True", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "True", - "False", - "False", - "", - "" - ], - "values": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 24, - 9 - ], - "type": "sunburst", - "visible": false - } - ], - "layout": { - "template": { - "data": { - "histogram2dcontour": [ - { - "type": "histogram2dcontour", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "choropleth": [ - { - "type": "choropleth", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - ], - "histogram2d": [ - { - "type": "histogram2d", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "heatmap": [ - { - "type": "heatmap", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "heatmapgl": [ - { - "type": "heatmapgl", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "contourcarpet": [ - { - "type": "contourcarpet", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - ], - "contour": [ - { - "type": "contour", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "surface": [ - { - "type": "surface", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "mesh3d": [ - { - "type": "mesh3d", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - ], - "scatter": [ - { - "marker": { - "line": { - "color": "#283442" - } - }, - "type": "scatter" - } - ], - "parcoords": [ - { - "type": "parcoords", - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scatterpolargl": [ - { - "type": "scatterpolargl", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "bar": [ - { - "error_x": { - "color": "#f2f5fa" - }, - "error_y": { - "color": "#f2f5fa" - }, - "marker": { - "line": { - "color": "rgb(17,17,17)", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "bar" - } - ], - "scattergeo": [ - { - "type": "scattergeo", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scatterpolar": [ - { - "type": "scatterpolar", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "histogram": [ - { - "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "histogram" - } - ], - "scattergl": [ - { - "marker": { - "line": { - "color": "#283442" - } - }, - "type": "scattergl" - } - ], - "scatter3d": [ - { - "type": "scatter3d", - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scattermapbox": [ - { - "type": "scattermapbox", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scatterternary": [ - { - "type": "scatterternary", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scattercarpet": [ - { - "type": "scattercarpet", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#A2B1C6", - "gridcolor": "#506784", - "linecolor": "#506784", - "minorgridcolor": "#506784", - "startlinecolor": "#A2B1C6" - }, - "baxis": { - "endlinecolor": "#A2B1C6", - "gridcolor": "#506784", - "linecolor": "#506784", - "minorgridcolor": "#506784", - "startlinecolor": "#A2B1C6" - }, - "type": "carpet" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#506784" - }, - "line": { - "color": "rgb(17,17,17)" - } - }, - "header": { - "fill": { - "color": "#2a3f5f" - }, - "line": { - "color": "rgb(17,17,17)" - } - }, - "type": "table" - } - ], - "barpolar": [ - { - "marker": { - "line": { - "color": "rgb(17,17,17)", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "barpolar" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ] - }, - "layout": { - "autotypenumbers": "strict", - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#FFA15A", - "#19d3f3", - "#FF6692", - "#B6E880", - "#FF97FF", - "#FECB52" - ], - "font": { - "color": "#f2f5fa" - }, - "hovermode": "closest", - "hoverlabel": { - "align": "left" - }, - "paper_bgcolor": "rgb(17,17,17)", - "plot_bgcolor": "rgb(17,17,17)", - "polar": { - "bgcolor": "rgb(17,17,17)", - "angularaxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - }, - "radialaxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - } - }, - "ternary": { - "bgcolor": "rgb(17,17,17)", - "aaxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - }, - "baxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - }, - "caxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - } - }, - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "sequential": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ] - }, - "xaxis": { - "gridcolor": "#283442", - "linecolor": "#506784", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "#283442", - "automargin": true, - "zerolinewidth": 2 - }, - "yaxis": { - "gridcolor": "#283442", - "linecolor": "#506784", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "#283442", - "automargin": true, - "zerolinewidth": 2 - }, - "scene": { - "xaxis": { - "backgroundcolor": "rgb(17,17,17)", - "gridcolor": "#506784", - "linecolor": "#506784", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#C8D4E3", - "gridwidth": 2 - }, - "yaxis": { - "backgroundcolor": "rgb(17,17,17)", - "gridcolor": "#506784", - "linecolor": "#506784", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#C8D4E3", - "gridwidth": 2 - }, - "zaxis": { - "backgroundcolor": "rgb(17,17,17)", - "gridcolor": "#506784", - "linecolor": "#506784", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#C8D4E3", - "gridwidth": 2 - } - }, - "shapedefaults": { - "line": { - "color": "#f2f5fa" - } - }, - "annotationdefaults": { - "arrowcolor": "#f2f5fa", - "arrowhead": 0, - "arrowwidth": 1 - }, - "geo": { - "bgcolor": "rgb(17,17,17)", - "landcolor": "rgb(17,17,17)", - "subunitcolor": "#506784", - "showland": true, - "showlakes": true, - "lakecolor": "rgb(17,17,17)" - }, - "title": { - "x": 0.05 - }, - "updatemenudefaults": { - "bgcolor": "#506784", - "borderwidth": 0 - }, - "sliderdefaults": { - "bgcolor": "#C8D4E3", - "borderwidth": 1, - "bordercolor": "rgb(17,17,17)", - "tickwidth": 0 - }, - "mapbox": { - "style": "dark" - } - } - }, - "title": { - "text": "Uses ReadTheDocs" - }, - "updatemenus": [ - { - "buttons": [ - { - "args": [ - { - "visible": [ - true, - false - ] - } - ], - "label": "Treemap", - "method": "update" - }, - { - "args": [ - { - "visible": [ - false, - true - ] - } - ], - "label": "Sunburst", - "method": "update" - } - ], - "direction": "down", - "showactive": true - } - ] - }, - "config": { - "plotlyServerURL": "https://plot.ly" - } - }, - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "execution_count": 188 + "outputs": [], + "execution_count": null } ], "metadata": { diff --git a/requirements.txt b/requirements.txt index 744dbbca..7fdee19d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,5 @@ +ipython==8.26.0 +ipywidgets==8.1.3 notebook==7.2.1 pandas==2.2.2 plotly==5.23.0