Ya-Alex commited on
Commit
afa039e
·
1 Parent(s): 3b8277b

Add new_addons_number_presenter

Browse files
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
- [addons_number_block, updated_addons_number_block, tests_count_block, svelte_block, rust_block, top_rating_block],
65
- ["Addons number", "Updated addons number", "Unit-Tests", "Svelte", "Rust", "Rating"],
 
 
 
 
 
 
 
 
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
+ )