Coverage for mindsdb / integrations / handlers / sharepoint_handler / sharepoint_tables.py: 0%
190 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
1import pandas as pd
2from typing import Text, List, Dict, Any
4from mindsdb_sql_parser import ast
5from mindsdb.integrations.libs.api_handler import APITable
7from mindsdb.integrations.utilities.handlers.query_utilities.select_query_utilities import (
8 SELECTQueryParser,
9 SELECTQueryExecutor,
10)
11from mindsdb.integrations.utilities.handlers.query_utilities.delete_query_utilities import (
12 DELETEQueryParser,
13 DELETEQueryExecutor,
14)
16from mindsdb.integrations.utilities.handlers.query_utilities.update_query_utilities import (
17 UPDATEQueryParser,
18 UPDATEQueryExecutor,
19)
21from mindsdb.integrations.utilities.handlers.query_utilities import INSERTQueryParser
24class SitesTable(APITable):
25 def select(self, query: ast.Select) -> pd.DataFrame:
26 """
27 Pulls Sharepoint Sites data.
29 Parameters
30 ----------
31 query : ast.Select
32 Given SQL SELECT query
34 Returns
35 -------
36 pd.DataFrame
37 Sharepoint Sites matching the query
39 Raises
40 ------
41 ValueError
42 If the query contains an unsupported condition
43 """
44 select_statement_parser = SELECTQueryParser(query, "sites", self.get_columns())
45 (
46 selected_columns,
47 where_conditions,
48 order_by_conditions,
49 result_limit,
50 ) = select_statement_parser.parse_query()
52 sites_df = pd.json_normalize(self.get_sites(limit=result_limit))
53 select_statement_executor = SELECTQueryExecutor(
54 sites_df, selected_columns, where_conditions, order_by_conditions
55 )
56 sites_df = select_statement_executor.execute_query()
58 return sites_df
60 def update(self, query: ast.Update) -> None:
61 """Updates data in the Sharepoint "PUT /lists" API endpoint.
63 Parameters
64 ----------
65 query : ast.Update
66 Given SQL UPDATE query
68 Returns
69 -------
70 None
72 Raises
73 ------
74 ValueError
75 If the query contains an unsupported condition
76 """
77 update_statement_parser = UPDATEQueryParser(query)
78 values_to_update, where_conditions = update_statement_parser.parse_query()
80 sites_df = pd.json_normalize(self.get_sites())
82 update_query_executor = UPDATEQueryExecutor(sites_df, where_conditions)
84 sites_df = update_query_executor.execute_query()
86 sites_ids = sites_df[["siteId"]].to_dict(orient="records")
88 self.update_sites(sites_ids, values_to_update)
90 def get_columns(self) -> List[Text]:
91 return pd.json_normalize(self.get_sites(limit=1)).columns.tolist()
93 def get_sites(self, **kwargs) -> List[Dict]:
94 if not self.handler.connection.check_bearer_token_validity():
95 self.handler.connect()
96 client = self.handler.connection
97 site_data = client.get_all_sites(**kwargs)
98 return site_data
100 def update_sites(self, site_ids: List[dict], values_to_update: dict) -> None:
101 if not self.handler.connection.check_bearer_token_validity():
102 self.handler.connect()
103 client = self.handler.connection
104 client.update_sites(site_ids, values_to_update)
107class ListsTable(APITable):
108 def insert(self, query: ast.Insert) -> None:
109 """Inserts data into the Sharepoint "POST /lists" API endpoint.
111 Parameters
112 ----------
113 query : ast.Insert
114 Given SQL INSERT query
116 Returns
117 -------
118 None
120 Raises
121 ------
122 ValueError
123 If the query contains an unsupported condition
124 """
125 insert_statement_parser = INSERTQueryParser(
126 query,
127 supported_columns=["displayName", "columns", "list", "siteId"],
128 mandatory_columns=["displayName", "list", "siteId"],
129 all_mandatory=False,
130 )
131 lists_data = insert_statement_parser.parse_query()
132 self.create_lists(lists_data)
134 def select(self, query: ast.Select) -> pd.DataFrame:
135 """
136 Pulls Sharepoint lists data.
138 Parameters
139 ----------
140 query : ast.Select
141 Given SQL SELECT query
143 Returns
144 -------
145 pd.DataFrame
146 Sharepoint lists matching the query
148 Raises
149 ------
150 ValueError
151 If the query contains an unsupported condition
152 """
153 select_statement_parser = SELECTQueryParser(query, "lists", self.get_columns())
154 (
155 selected_columns,
156 where_conditions,
157 order_by_conditions,
158 result_limit,
159 ) = select_statement_parser.parse_query()
161 lists_df = pd.json_normalize(self.get_lists(limit=result_limit))
162 select_statement_executor = SELECTQueryExecutor(
163 lists_df, selected_columns, where_conditions, order_by_conditions
164 )
165 lists_df = select_statement_executor.execute_query()
167 return lists_df
169 def update(self, query: ast.Update) -> None:
170 """Updates data in the Sharepoint "PUT /lists" API endpoint.
172 Parameters
173 ----------
174 query : ast.Update
175 Given SQL UPDATE query
177 Returns
178 -------
179 None
181 Raises
182 ------
183 ValueError
184 If the query contains an unsupported condition
185 """
186 update_statement_parser = UPDATEQueryParser(query)
187 values_to_update, where_conditions = update_statement_parser.parse_query()
189 lists_df = pd.json_normalize(self.get_lists())
191 update_query_executor = UPDATEQueryExecutor(lists_df, where_conditions)
193 lists_df = update_query_executor.execute_query()
195 list_ids = lists_df[["id", "siteId"]].to_dict(orient="records")
197 self.update_lists(list_ids, values_to_update)
199 def delete(self, query: ast.Delete) -> None:
200 """
201 Deletes data from the Sharepoint "DELETE /lists" API endpoint.
203 Parameters
204 ----------
205 query : ast.Delete
206 Given SQL DELETE query
208 Returns
209 -------
210 None
212 Raises
213 ------
214 ValueError
215 If the query contains an unsupported condition
216 """
217 delete_statement_parser = DELETEQueryParser(query)
218 where_conditions = delete_statement_parser.parse_query()
220 lists_df = pd.json_normalize(self.get_lists())
222 delete_query_executor = DELETEQueryExecutor(lists_df, where_conditions)
224 lists_df = delete_query_executor.execute_query()
226 list_ids = lists_df[["id", "siteId"]].to_dict(orient="records")
227 self.delete_lists(list_ids)
229 def get_lists(self, **kwargs) -> List[Dict]:
230 if not self.handler.connection.check_bearer_token_validity():
231 self.handler.connect()
232 client = self.handler.connection
233 lists_data = client.get_all_lists(**kwargs)
234 return lists_data
236 def delete_lists(self, list_ids: List[dict]) -> None:
237 if not self.handler.connection.check_bearer_token_validity():
238 self.handler.connect()
239 client = self.handler.connection
240 client.delete_lists(list_ids)
242 def update_lists(self, list_ids: List[dict], values_to_update: dict) -> None:
243 if not self.handler.connection.check_bearer_token_validity():
244 self.handler.connect()
245 client = self.handler.connection
246 client.update_lists(list_ids, values_to_update)
248 def create_lists(self, lists_data: List[Dict[Text, Any]]) -> None:
249 if not self.handler.connection.check_bearer_token_validity():
250 self.handler.connect()
251 client = self.handler.connection
252 client.create_lists(data=lists_data)
254 def get_columns(self) -> List[Text]:
255 return pd.json_normalize(self.get_lists(limit=1)).columns.tolist()
258class SiteColumnsTable(APITable):
259 def insert(self, query: ast.Insert) -> None:
260 """Inserts data into the Sharepoint "POST /columns" API endpoint.
262 Parameters
263 ----------
264 query : ast.Insert
265 Given SQL INSERT query
267 Returns
268 -------
269 None
271 Raises
272 ------
273 ValueError
274 If the query contains an unsupported condition
275 """
276 insert_statement_parser = INSERTQueryParser(
277 query,
278 supported_columns=[
279 "text",
280 "name",
281 "indexed",
282 "enforceUniqueValues",
283 "hidden",
284 "siteId",
285 ],
286 mandatory_columns=["name", "siteId"],
287 all_mandatory=False,
288 )
289 site_columns_data = insert_statement_parser.parse_query()
290 self.create_site_columns(site_columns_data)
292 def select(self, query: ast.Select) -> pd.DataFrame:
293 """
294 Pulls Sharepoint columns data.
296 Parameters
297 ----------
298 query : ast.Select
299 Given SQL SELECT query
301 Returns
302 -------
303 pd.DataFrame
304 Sharepoint Columns matching the query
306 Raises
307 ------
308 ValueError
309 If the query contains an unsupported condition
310 """
311 select_statement_parser = SELECTQueryParser(
312 query, "siteColumns", self.get_columns()
313 )
314 (
315 selected_columns,
316 where_conditions,
317 order_by_conditions,
318 result_limit,
319 ) = select_statement_parser.parse_query()
321 site_columns_df = pd.json_normalize(self.get_site_columns(limit=result_limit))
322 select_statement_executor = SELECTQueryExecutor(
323 site_columns_df,
324 selected_columns,
325 where_conditions,
326 order_by_conditions,
327 )
328 site_columns_df = select_statement_executor.execute_query()
330 return site_columns_df
332 def update(self, query: ast.Update) -> None:
333 """Updates data in the Sharepoint "PUT /columns" API endpoint.
335 Parameters
336 ----------
337 query : ast.Update
338 Given SQL UPDATE query
340 Returns
341 -------
342 None
344 Raises
345 ------
346 ValueError
347 If the query contains an unsupported condition
348 """
349 update_statement_parser = UPDATEQueryParser(query)
350 values_to_update, where_conditions = update_statement_parser.parse_query()
352 site_columns_df = pd.json_normalize(self.get_site_columns())
354 update_query_executor = UPDATEQueryExecutor(site_columns_df, where_conditions)
356 site_columns_df = update_query_executor.execute_query()
358 site_columns_ids = site_columns_df[["id", "siteId"]].to_dict(orient="records")
360 self.update_site_columns(site_columns_ids, values_to_update)
362 def delete(self, query: ast.Delete) -> None:
363 """
364 Deletes data from the Sharepoint "DELETE /columns" API endpoint.
366 Parameters
367 ----------
368 query : ast.Delete
369 Given SQL DELETE query
371 Returns
372 -------
373 None
375 Raises
376 ------
377 ValueError
378 If the query contains an unsupported condition
379 """
380 delete_statement_parser = DELETEQueryParser(query)
381 where_conditions = delete_statement_parser.parse_query()
383 site_columns_df = pd.json_normalize(self.get_site_columns())
385 delete_query_executor = DELETEQueryExecutor(site_columns_df, where_conditions)
387 site_columns_df = delete_query_executor.execute_query()
389 site_columns_ids = site_columns_df[["id", "siteId"]].to_dict(orient="records")
390 self.delete_site_columns(site_columns_ids)
392 def get_site_columns(self, **kwargs) -> List[Dict]:
393 if not self.handler.connection.check_bearer_token_validity():
394 self.handler.connect()
395 client = self.handler.connection
396 site_columns_data = client.get_all_site_columns(**kwargs)
397 return site_columns_data
399 def delete_site_columns(self, sharepoint_column_ids: List[dict]) -> None:
400 if not self.handler.connection.check_bearer_token_validity():
401 self.handler.connect()
402 client = self.handler.connection
403 client.delete_site_columns(sharepoint_column_ids)
405 def update_site_columns(
406 self, sharepoint_column_ids: List[dict], values_to_update: dict
407 ) -> None:
408 if not self.handler.connection.check_bearer_token_validity():
409 self.handler.connect()
410 client = self.handler.connection
411 client.update_site_columns(sharepoint_column_ids, values_to_update)
413 def create_site_columns(
414 self, sharepoint_column_data: List[Dict[Text, Any]]
415 ) -> None:
416 if not self.handler.connection.check_bearer_token_validity():
417 self.handler.connect()
418 client = self.handler.connection
419 client.create_site_columns(data=sharepoint_column_data)
421 def get_columns(self) -> List[Text]:
422 return pd.json_normalize(self.get_site_columns(limit=1)).columns.tolist()
425class ListItemsTable(APITable):
426 def insert(self, query: ast.Insert) -> None:
427 """Inserts data into the Sharepoint "POST /items" API endpoint.
429 Parameters
430 ----------
431 query : ast.Insert
432 Given SQL INSERT query
434 Returns
435 -------
436 None
438 Raises
439 ------
440 ValueError
441 If the query contains an unsupported condition
442 """
443 insert_statement_parser = INSERTQueryParser(
444 query,
445 supported_columns=["fields", "listId", "siteId"],
446 mandatory_columns=["listId", "siteId"],
447 all_mandatory=False,
448 )
449 list_items_data = insert_statement_parser.parse_query()
450 self.create_list_items(list_items_data)
452 def select(self, query: ast.Select) -> pd.DataFrame:
453 """
454 Pulls Sharepoint items data.
456 Parameters
457 ----------
458 query : ast.Select
459 Given SQL SELECT query
461 Returns
462 -------
463 pd.DataFrame
464 Sharepoint items matching the query
466 Raises
467 ------
468 ValueError
469 If the query contains an unsupported condition
470 """
471 select_statement_parser = SELECTQueryParser(
472 query, "listItems", self.get_columns()
473 )
474 (
475 selected_columns,
476 where_conditions,
477 order_by_conditions,
478 result_limit,
479 ) = select_statement_parser.parse_query()
481 list_items_df = pd.json_normalize(self.get_list_items(limit=result_limit))
482 select_statement_executor = SELECTQueryExecutor(
483 list_items_df, selected_columns, where_conditions, order_by_conditions
484 )
485 list_items_df = select_statement_executor.execute_query()
487 return list_items_df
489 def update(self, query: ast.Update) -> None:
490 """Updates data in the Sharepoint "PUT /items" API endpoint.
492 Parameters
493 ----------
494 query : ast.Update
495 Given SQL UPDATE query
497 Returns
498 -------
499 None
501 Raises
502 ------
503 ValueError
504 If the query contains an unsupported condition
505 """
506 update_statement_parser = UPDATEQueryParser(query)
507 values_to_update, where_conditions = update_statement_parser.parse_query()
509 list_items_df = pd.json_normalize(self.get_list_items())
511 update_query_executor = UPDATEQueryExecutor(list_items_df, where_conditions)
513 list_items_df = update_query_executor.execute_query()
515 list_items_ids = list_items_df[["id", "siteId", "listId"]].to_dict(
516 orient="records"
517 )
519 self.update_list_items(list_items_ids, values_to_update)
521 def delete(self, query: ast.Delete) -> None:
522 """
523 Deletes data from the Sharepoint "DELETE /items" API endpoint.
525 Parameters
526 ----------
527 query : ast.Delete
528 Given SQL DELETE query
530 Returns
531 -------
532 None
534 Raises
535 ------
536 ValueError
537 If the query contains an unsupported condition
538 """
539 delete_statement_parser = DELETEQueryParser(query)
540 where_conditions = delete_statement_parser.parse_query()
542 list_items_df = pd.json_normalize(self.get_list_items())
544 delete_query_executor = DELETEQueryExecutor(list_items_df, where_conditions)
546 list_items_df = delete_query_executor.execute_query()
548 list_items_ids = list_items_df[["id", "siteId", "listId"]].to_dict(
549 orient="records"
550 )
551 self.delete_list_items(list_items_ids)
553 def get_list_items(self, **kwargs) -> List[Dict]:
554 if not self.handler.connection.check_bearer_token_validity():
555 self.handler.connect()
556 client = self.handler.connection
557 list_items_data = client.get_all_items(**kwargs)
558 return list_items_data
560 def delete_list_items(self, list_item_ids: List[dict]) -> None:
561 if not self.handler.connnection.check_connection():
562 self.handler.connect()
563 client = self.handler.connection
564 client.delete_items(list_item_ids)
566 def update_list_items(
567 self, list_items_ids: List[dict], values_to_update: dict
568 ) -> None:
569 if not self.handler.connection.check_bearer_token_validity():
570 self.handler.connect()
571 client = self.handler.connection
572 client.update_items(item_dict=list_items_ids, values_to_update=values_to_update)
574 def create_list_items(self, list_items_data: List[Dict[Text, Any]]) -> None:
575 if not self.handler.connection.check_bearer_token_validity():
576 self.handler.connect()
577 client = self.handler.connection
578 client.create_items(data=list_items_data)
580 def get_columns(self) -> List[Text]:
581 return pd.json_normalize(self.get_list_items(limit=1)).columns.tolist()