Spaces:
Running
Running
Add new_addons_number_presenter
Browse files- app.py +16 -2
- src/df_utils.py +8 -0
- src/presenter/new_addons_number_presenter.py +27 -0
app.py
CHANGED
|
@@ -7,6 +7,7 @@ from gradio import Accordion, Blocks, Markdown, Number, TabbedInterface, render
|
|
| 7 |
sys.path.insert(0, str(Path(__file__).parent / "src"))
|
| 8 |
from dataset_data import DatasetData
|
| 9 |
from presenter.addons_number_presenter import AddonsNumberPresenter
|
|
|
|
| 10 |
from presenter.rust_addons_number_presenter import RustAddonsNumberPresenter
|
| 11 |
from presenter.svelte_addons_number_presenter import SvelteAddonsNumberPresenter
|
| 12 |
from presenter.tests_count_addons_number_presenter import TestsCountAddonsNumberPresenter
|
|
@@ -25,6 +26,11 @@ with Blocks() as updated_addons_number_block:
|
|
| 25 |
updated_addons_number_presenter: UpdatedAddonsNumberPresenter = UpdatedAddonsNumberPresenter(data)
|
| 26 |
updated_addons_number_presenter.present()
|
| 27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
with Blocks() as tests_count_block:
|
| 29 |
Markdown("## Number of Anki addons having unit-tests")
|
| 30 |
tests_count_addons_number_presenter: TestsCountAddonsNumberPresenter = TestsCountAddonsNumberPresenter(data)
|
|
@@ -61,8 +67,16 @@ with Blocks() as demo:
|
|
| 61 |
""")
|
| 62 |
)
|
| 63 |
TabbedInterface(
|
| 64 |
-
[
|
| 65 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 66 |
)
|
| 67 |
|
| 68 |
demo.launch()
|
|
|
|
| 7 |
sys.path.insert(0, str(Path(__file__).parent / "src"))
|
| 8 |
from dataset_data import DatasetData
|
| 9 |
from presenter.addons_number_presenter import AddonsNumberPresenter
|
| 10 |
+
from presenter.new_addons_number_presenter import NewAddonsNumberPresenter
|
| 11 |
from presenter.rust_addons_number_presenter import RustAddonsNumberPresenter
|
| 12 |
from presenter.svelte_addons_number_presenter import SvelteAddonsNumberPresenter
|
| 13 |
from presenter.tests_count_addons_number_presenter import TestsCountAddonsNumberPresenter
|
|
|
|
| 26 |
updated_addons_number_presenter: UpdatedAddonsNumberPresenter = UpdatedAddonsNumberPresenter(data)
|
| 27 |
updated_addons_number_presenter.present()
|
| 28 |
|
| 29 |
+
with Blocks() as new_addons_number_block:
|
| 30 |
+
Markdown("## Number of new Anki addons")
|
| 31 |
+
new_addons_number_presenter: NewAddonsNumberPresenter = NewAddonsNumberPresenter(data)
|
| 32 |
+
new_addons_number_presenter.present()
|
| 33 |
+
|
| 34 |
with Blocks() as tests_count_block:
|
| 35 |
Markdown("## Number of Anki addons having unit-tests")
|
| 36 |
tests_count_addons_number_presenter: TestsCountAddonsNumberPresenter = TestsCountAddonsNumberPresenter(data)
|
|
|
|
| 67 |
""")
|
| 68 |
)
|
| 69 |
TabbedInterface(
|
| 70 |
+
[
|
| 71 |
+
addons_number_block,
|
| 72 |
+
updated_addons_number_block,
|
| 73 |
+
new_addons_number_block,
|
| 74 |
+
tests_count_block,
|
| 75 |
+
svelte_block,
|
| 76 |
+
rust_block,
|
| 77 |
+
top_rating_block,
|
| 78 |
+
],
|
| 79 |
+
["Addons number", "Updated addons number", "New addons number", "Unit-Tests", "Svelte", "Rust", "Rating"],
|
| 80 |
)
|
| 81 |
|
| 82 |
demo.launch()
|
src/df_utils.py
CHANGED
|
@@ -33,6 +33,14 @@ class DfUtils:
|
|
| 33 |
)
|
| 34 |
return tests_count_df.drop(columns=["github"], errors="ignore")
|
| 35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
@staticmethod
|
| 37 |
def extract_updated_number(df: DataFrame, day: date, previous_day: Optional[date]) -> int:
|
| 38 |
anki_web_df: DataFrame = DataFrame(df["anki_web"].tolist())
|
|
|
|
| 33 |
)
|
| 34 |
return tests_count_df.drop(columns=["github"], errors="ignore")
|
| 35 |
|
| 36 |
+
@staticmethod
|
| 37 |
+
def extract_new_number(df: DataFrame, previous_df: Optional[DataFrame]) -> int:
|
| 38 |
+
if previous_df is None:
|
| 39 |
+
return 0
|
| 40 |
+
previous_ids: set = set(previous_df["id"])
|
| 41 |
+
is_new: Series = ~df["id"].isin(previous_ids)
|
| 42 |
+
return int(is_new.sum())
|
| 43 |
+
|
| 44 |
@staticmethod
|
| 45 |
def extract_updated_number(df: DataFrame, day: date, previous_day: Optional[date]) -> int:
|
| 46 |
anki_web_df: DataFrame = DataFrame(df["anki_web"].tolist())
|
src/presenter/new_addons_number_presenter.py
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from datetime import date
|
| 2 |
+
from typing import Optional
|
| 3 |
+
|
| 4 |
+
from gradio import BarPlot
|
| 5 |
+
from pandas import DataFrame
|
| 6 |
+
|
| 7 |
+
from dataset_data import DatasetData
|
| 8 |
+
from df_utils import DfUtils
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
class NewAddonsNumberPresenter:
|
| 12 |
+
def __init__(self, data: DatasetData):
|
| 13 |
+
self.__data = data
|
| 14 |
+
|
| 15 |
+
def present(self) -> BarPlot:
|
| 16 |
+
all_dfs: dict[date, DataFrame] = self.__data.get_parquet_dict()
|
| 17 |
+
sorted_dates: list[date] = sorted(all_dfs.keys())
|
| 18 |
+
new_row_count: dict[date, int] = {}
|
| 19 |
+
for i, day in enumerate(sorted_dates):
|
| 20 |
+
previous_df: Optional[DataFrame] = all_dfs[sorted_dates[i - 1]] if i > 0 else None
|
| 21 |
+
new_row_count[day] = DfUtils.extract_new_number(all_dfs[day], previous_df)
|
| 22 |
+
plot_df: DataFrame = DataFrame.from_dict(new_row_count, orient="index").reset_index()
|
| 23 |
+
plot_df.columns = ["Date", "RowCount"]
|
| 24 |
+
plot_df["Date"] = plot_df["Date"].astype(str)
|
| 25 |
+
return BarPlot(
|
| 26 |
+
plot_df, x="Date", y="RowCount", y_title="New addons number", y_lim=[0, None], y_axis_format="d"
|
| 27 |
+
)
|