|
1 | 1 | import logging |
2 | 2 |
|
3 | 3 | from defusedxml.ElementTree import fromstring |
| 4 | +from .tableau_types import TableauItem |
4 | 5 |
|
5 | 6 | from .datasource_item import DatasourceItem |
6 | 7 | from .flow_item import FlowItem |
7 | 8 | from .project_item import ProjectItem |
| 9 | +from .metric_item import MetricItem |
8 | 10 | from .view_item import ViewItem |
9 | 11 | from .workbook_item import WorkbookItem |
| 12 | +from typing import Dict, List |
10 | 13 |
|
11 | 14 | logger = logging.getLogger("tableau.models.favorites_item") |
12 | 15 |
|
13 | | -from typing import Dict, List, Union |
14 | 16 |
|
15 | 17 | FavoriteType = Dict[ |
16 | 18 | str, |
17 | | - List[ |
18 | | - Union[ |
19 | | - DatasourceItem, |
20 | | - ProjectItem, |
21 | | - FlowItem, |
22 | | - ViewItem, |
23 | | - WorkbookItem, |
24 | | - ] |
25 | | - ], |
| 19 | + List[TableauItem], |
26 | 20 | ] |
27 | 21 |
|
28 | 22 |
|
29 | 23 | class FavoriteItem: |
30 | | - class Type: |
31 | | - Workbook: str = "workbook" |
32 | | - Datasource: str = "datasource" |
33 | | - View: str = "view" |
34 | | - Project: str = "project" |
35 | | - Flow: str = "flow" |
36 | | - |
37 | 24 | @classmethod |
38 | 25 | def from_response(cls, xml: str, namespace: Dict) -> FavoriteType: |
39 | 26 | favorites: FavoriteType = { |
40 | 27 | "datasources": [], |
41 | 28 | "flows": [], |
42 | 29 | "projects": [], |
| 30 | + "metrics": [], |
43 | 31 | "views": [], |
44 | 32 | "workbooks": [], |
45 | 33 | } |
46 | | - |
47 | 34 | parsed_response = fromstring(xml) |
48 | | - for workbook in parsed_response.findall(".//t:favorite/t:workbook", namespace): |
49 | | - fav_workbook = WorkbookItem("") |
50 | | - fav_workbook._set_values(*fav_workbook._parse_element(workbook, namespace)) |
51 | | - if fav_workbook: |
52 | | - favorites["workbooks"].append(fav_workbook) |
53 | | - for view in parsed_response.findall(".//t:favorite[t:view]", namespace): |
54 | | - fav_views = ViewItem.from_xml_element(view, namespace) |
55 | | - if fav_views: |
56 | | - for fav_view in fav_views: |
57 | | - favorites["views"].append(fav_view) |
58 | | - for datasource in parsed_response.findall(".//t:favorite/t:datasource", namespace): |
59 | | - fav_datasource = DatasourceItem("") |
60 | | - fav_datasource._set_values(*fav_datasource._parse_element(datasource, namespace)) |
| 35 | + |
| 36 | + datasources_xml = parsed_response.findall(".//t:favorite/t:datasource", namespace) |
| 37 | + flows_xml = parsed_response.findall(".//t:favorite/t:flow", namespace) |
| 38 | + metrics_xml = parsed_response.findall(".//t:favorite/t:metric", namespace) |
| 39 | + projects_xml = parsed_response.findall(".//t:favorite/t:project", namespace) |
| 40 | + views_xml = parsed_response.findall(".//t:favorite/t:view", namespace) |
| 41 | + workbooks_xml = parsed_response.findall(".//t:favorite/t:workbook", namespace) |
| 42 | + |
| 43 | + logger.debug( |
| 44 | + "ds: {}, flows: {}, metrics: {}, projects: {}, views: {}, wbs: {}".format( |
| 45 | + len(datasources_xml), |
| 46 | + len(flows_xml), |
| 47 | + len(metrics_xml), |
| 48 | + len(projects_xml), |
| 49 | + len(views_xml), |
| 50 | + len(workbooks_xml), |
| 51 | + ) |
| 52 | + ) |
| 53 | + for datasource in datasources_xml: |
| 54 | + fav_datasource = DatasourceItem.from_xml(datasource, namespace) |
61 | 55 | if fav_datasource: |
| 56 | + logger.debug(fav_datasource) |
62 | 57 | favorites["datasources"].append(fav_datasource) |
63 | | - for project in parsed_response.findall(".//t:favorite/t:project", namespace): |
64 | | - fav_project = ProjectItem("p") |
65 | | - fav_project._set_values(*fav_project._parse_element(project)) |
66 | | - if fav_project: |
67 | | - favorites["projects"].append(fav_project) |
68 | | - for flow in parsed_response.findall(".//t:favorite/t:flow", namespace): |
69 | | - fav_flow = FlowItem("flows") |
70 | | - fav_flow._set_values(*fav_flow._parse_element(flow, namespace)) |
| 58 | + |
| 59 | + for flow in flows_xml: |
| 60 | + fav_flow = FlowItem.from_xml(flow, namespace) |
71 | 61 | if fav_flow: |
| 62 | + logger.debug(fav_flow) |
72 | 63 | favorites["flows"].append(fav_flow) |
73 | 64 |
|
| 65 | + for metric in metrics_xml: |
| 66 | + fav_metric = MetricItem.from_xml(metric, namespace) |
| 67 | + if fav_metric: |
| 68 | + logger.debug(fav_metric) |
| 69 | + favorites["metrics"].append(fav_metric) |
| 70 | + |
| 71 | + for project in projects_xml: |
| 72 | + fav_project = ProjectItem.from_xml(project, namespace) |
| 73 | + if fav_project: |
| 74 | + logger.debug(fav_project) |
| 75 | + favorites["projects"].append(fav_project) |
| 76 | + |
| 77 | + for view in views_xml: |
| 78 | + fav_view = ViewItem.from_xml(view, namespace) |
| 79 | + if fav_view: |
| 80 | + logger.debug(fav_view) |
| 81 | + favorites["views"].append(fav_view) |
| 82 | + |
| 83 | + for workbook in workbooks_xml: |
| 84 | + fav_workbook = WorkbookItem.from_xml(workbook, namespace) |
| 85 | + if fav_workbook: |
| 86 | + logger.debug(fav_workbook) |
| 87 | + favorites["workbooks"].append(fav_workbook) |
| 88 | + |
| 89 | + logger.debug(favorites) |
74 | 90 | return favorites |
0 commit comments