Coverage for mindsdb / integrations / handlers / pypi_handler / pypi_tables.py: 0%
82 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-21 00:36 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-21 00:36 +0000
1from typing import List
3import pandas as pd
4from mindsdb_sql_parser import ast
6from mindsdb.integrations.utilities.handlers.query_utilities import (
7 SELECTQueryExecutor,
8 SELECTQueryParser,
9)
10from mindsdb.integrations.libs.api_handler import APIHandler, APITable
11from mindsdb.integrations.utilities.sql_utils import conditions_to_filter
14class CustomAPITable(APITable):
15 name: str = None
16 columns: List[str] = [
17 "category",
18 "date",
19 "downloads",
20 ]
22 def __init__(self, handler: APIHandler):
23 super().__init__(handler)
24 self.handler.connect()
26 def get_columns(self, ignore: List[str] = []) -> List[str]:
27 """columns
29 Args:
30 ignore (List[str], optional): exclusion items. Defaults to [].
32 Returns:
33 List[str]: available columns with `ignore` items removed from the list.
34 """
36 return [item for item in self.columns if item not in ignore]
39class PyPIRecentTable(CustomAPITable):
40 name: str = "recent"
41 columns: List[str] = [
42 "last_day",
43 "last_week",
44 "last_month",
45 ]
47 def select(self, query: ast.Select) -> pd.DataFrame:
48 """triggered at the SELECT query
50 Args:
51 query (ast.Select): user's entered query
53 Returns:
54 pd.DataFrame: the queried information
55 """
56 params = conditions_to_filter(query.where)
58 package_name = params["package"]
59 period = params.get("period", None)
60 all_cols = {
61 "day": "last_day",
62 "week": "last_week",
63 "month": "last_month",
64 }
66 to_be_excluded = []
68 if period:
69 if period in all_cols.keys():
70 del all_cols[period]
71 to_be_excluded = list(all_cols.values())
72 else:
73 raise ValueError(
74 "Make sure that one of `day`, `week` or `month` values is assigned to `period`."
75 )
77 select_statement_parser = SELECTQueryParser(
78 query, PyPIRecentTable.name, self.get_columns(to_be_excluded)
79 )
80 (
81 selected_columns,
82 _,
83 order_by_conditions,
84 _,
85 ) = select_statement_parser.parse_query()
87 raw_df = self.handler.connection(name=package_name).recent(period)
89 select_statement_executor = SELECTQueryExecutor(
90 raw_df, selected_columns, [], order_by_conditions
91 )
93 result_df = select_statement_executor.execute_query()
95 return result_df
98class PyPIOverallTable(CustomAPITable):
99 name: str = "overall"
101 def select(self, query: ast.Select) -> pd.DataFrame:
102 """triggered at the SELECT query
104 Args:
105 query (ast.Select): user's entered query
107 Returns:
108 pd.DataFrame: the queried information
109 """
110 params = conditions_to_filter(query.where)
112 package_name = params["package"]
113 mirrors = params.get("mirrors", None)
115 select_statement_parser = SELECTQueryParser(
116 query,
117 PyPIOverallTable.name,
118 self.get_columns(),
119 )
120 (
121 selected_columns,
122 _,
123 order_by_conditions,
124 result_limit,
125 ) = select_statement_parser.parse_query()
127 raw_df = self.handler.connection(name=package_name, limit=result_limit).overall(
128 mirrors=mirrors
129 )
131 select_statement_executor = SELECTQueryExecutor(
132 raw_df, selected_columns, [], order_by_conditions
133 )
135 result_df = select_statement_executor.execute_query()
137 return result_df
140class PyPIPythonMajorTable(CustomAPITable):
141 name: str = "python_major"
143 def select(self, query: ast.Select) -> pd.DataFrame:
144 """triggered at the SELECT query
146 Args:
147 query (ast.Select): user's entered query
149 Returns:
150 pd.DataFrame: the queried information
151 """
152 params = conditions_to_filter(query.where)
154 package_name = params["package"]
155 version = params.get("version", None)
157 select_statement_parser = SELECTQueryParser(
158 query,
159 PyPIOverallTable.name,
160 self.get_columns(),
161 )
162 (
163 selected_columns,
164 _,
165 order_by_conditions,
166 result_limit,
167 ) = select_statement_parser.parse_query()
169 raw_df = self.handler.connection(
170 name=package_name, limit=result_limit
171 ).python_major(version=version)
173 select_statement_executor = SELECTQueryExecutor(
174 raw_df, selected_columns, [], order_by_conditions
175 )
177 result_df = select_statement_executor.execute_query()
179 return result_df
182class PyPIPythonMinorTable(CustomAPITable):
183 name: str = "python_minor"
185 def select(self, query: ast.Select) -> pd.DataFrame:
186 """triggered at the SELECT query
188 Args:
189 query (ast.Select): user's entered query
191 Returns:
192 pd.DataFrame: the queried information
193 """
194 params = conditions_to_filter(query.where)
196 package_name = params["package"]
197 version = params.get("version", None)
199 select_statement_parser = SELECTQueryParser(
200 query,
201 PyPIOverallTable.name,
202 self.get_columns(),
203 )
204 (
205 selected_columns,
206 _,
207 order_by_conditions,
208 result_limit,
209 ) = select_statement_parser.parse_query()
211 raw_df = self.handler.connection(
212 name=package_name, limit=result_limit
213 ).python_minor(version=version)
215 select_statement_executor = SELECTQueryExecutor(
216 raw_df, selected_columns, [], order_by_conditions
217 )
219 result_df = select_statement_executor.execute_query()
221 return result_df
224class PyPISystemTable(CustomAPITable):
225 name: str = "system"
227 def select(self, query: ast.Select) -> pd.DataFrame:
228 """triggered at the SELECT query
230 Args:
231 query (ast.Select): user's entered query
233 Returns:
234 pd.DataFrame: the queried information
235 """
236 params = conditions_to_filter(query.where)
238 package_name = params["package"]
239 os = params.get("os", None)
241 select_statement_parser = SELECTQueryParser(
242 query,
243 PyPIOverallTable.name,
244 self.get_columns(),
245 )
246 (
247 selected_columns,
248 _,
249 order_by_conditions,
250 result_limit,
251 ) = select_statement_parser.parse_query()
253 raw_df = self.handler.connection(name=package_name, limit=result_limit).system(
254 os=os
255 )
257 select_statement_executor = SELECTQueryExecutor(
258 raw_df, selected_columns, [], order_by_conditions
259 )
261 result_df = select_statement_executor.execute_query()
263 return result_df