pidatametrics1 0.3.5__tar.gz → 0.3.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pidatametrics1-0.3.5 → pidatametrics1-0.3.6}/PKG-INFO +2 -2
- {pidatametrics1-0.3.5 → pidatametrics1-0.3.6}/pyproject.toml +2 -2
- {pidatametrics1-0.3.5 → pidatametrics1-0.3.6}/src/pidatametrics/manager.py +39 -24
- {pidatametrics1-0.3.5 → pidatametrics1-0.3.6}/README.md +0 -0
- {pidatametrics1-0.3.5 → pidatametrics1-0.3.6}/src/pidatametrics/__init__.py +0 -0
- {pidatametrics1-0.3.5 → pidatametrics1-0.3.6}/src/pidatametrics/client.py +0 -0
- {pidatametrics1-0.3.5 → pidatametrics1-0.3.6}/src/pidatametrics/exporter.py +0 -0
- {pidatametrics1-0.3.5 → pidatametrics1-0.3.6}/src/pidatametrics/parsers.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pidatametrics1
|
|
3
|
-
Version: 0.3.
|
|
4
|
-
Summary: A wrapper for Pi Datametrics API with CSV and BigQuery support.
|
|
3
|
+
Version: 0.3.6
|
|
4
|
+
Summary: A test wrapper for Pi Datametrics API with CSV and BigQuery support.
|
|
5
5
|
Requires-Dist: google-auth
|
|
6
6
|
Requires-Dist: google-cloud-bigquery
|
|
7
7
|
Requires-Dist: gspread
|
|
@@ -4,8 +4,8 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pidatametrics1"
|
|
7
|
-
version = "0.3.
|
|
8
|
-
description = "A wrapper for Pi Datametrics API with CSV and BigQuery support."
|
|
7
|
+
version = "0.3.6"
|
|
8
|
+
description = "A test wrapper for Pi Datametrics API with CSV and BigQuery support."
|
|
9
9
|
dependencies = [
|
|
10
10
|
"requests",
|
|
11
11
|
"google-cloud-bigquery",
|
|
@@ -6,22 +6,21 @@ from dateutil.relativedelta import relativedelta
|
|
|
6
6
|
|
|
7
7
|
class PiReportManager(PiDataMetrics):
|
|
8
8
|
|
|
9
|
-
# --- HELPER: Generate Unique
|
|
10
|
-
def
|
|
9
|
+
# --- HELPER: Generate Unique Name ---
|
|
10
|
+
def _generate_unique_name(self, base_name, workspace_ref=None):
|
|
11
11
|
"""
|
|
12
|
-
Creates a
|
|
12
|
+
Creates a unique name like: Hist_51780_0502_1430
|
|
13
13
|
(Base_WorkspaceID_Date_Time)
|
|
14
14
|
"""
|
|
15
15
|
now = datetime.datetime.now()
|
|
16
|
-
timestamp = now.strftime("%d%m_%H%M") # e.g., 0502_1430
|
|
16
|
+
timestamp = now.strftime("%d%m_%H%M") # e.g., 0502_1430
|
|
17
17
|
|
|
18
18
|
ws_part = f"_{workspace_ref}" if workspace_ref else ""
|
|
19
19
|
|
|
20
|
-
#
|
|
21
|
-
# Timestamp (9) + Base (approx 10) leaves ~10 for ID.
|
|
20
|
+
# Combine parts
|
|
22
21
|
full_name = f"{base_name}{ws_part}_{timestamp}"
|
|
23
22
|
|
|
24
|
-
# Truncate to 31 chars
|
|
23
|
+
# Truncate to 31 chars (Google Sheets limit) just in case
|
|
25
24
|
return full_name[:31]
|
|
26
25
|
|
|
27
26
|
def _resolve_workspaces(self, ids_str=None, name_pattern=None):
|
|
@@ -62,20 +61,34 @@ class PiReportManager(PiDataMetrics):
|
|
|
62
61
|
current_date -= relativedelta(months=1)
|
|
63
62
|
return dates
|
|
64
63
|
|
|
65
|
-
|
|
64
|
+
# --- UPDATED EXPORT LOGIC ---
|
|
65
|
+
def _export_data(self, data, output_mode, bq_config, spreadsheet_name, unique_name):
|
|
66
|
+
"""
|
|
67
|
+
Handles export routing.
|
|
68
|
+
unique_name is used for:
|
|
69
|
+
- CSV Filename
|
|
70
|
+
- Excel Filename
|
|
71
|
+
- Google Sheet Tab Name
|
|
72
|
+
"""
|
|
66
73
|
if not data:
|
|
67
74
|
print("No data to export.")
|
|
68
75
|
return
|
|
69
76
|
|
|
70
77
|
if output_mode == 'bigquery' and bq_config:
|
|
78
|
+
# BigQuery doesn't use filenames, it uses the Table ID in config
|
|
71
79
|
PiExporter.to_bigquery(data, bq_config['project'], bq_config['dataset'], bq_config['table'])
|
|
80
|
+
|
|
72
81
|
elif output_mode == 'excel':
|
|
73
|
-
|
|
82
|
+
# Use unique_name as filename
|
|
83
|
+
PiExporter.to_excel(data, unique_name)
|
|
84
|
+
|
|
74
85
|
elif output_mode == 'gsheet' and spreadsheet_name:
|
|
75
|
-
#
|
|
76
|
-
PiExporter.to_google_sheet(data, spreadsheet_name, tab_name)
|
|
86
|
+
# Use unique_name as Tab Name
|
|
87
|
+
PiExporter.to_google_sheet(data, spreadsheet_name, tab_name=unique_name)
|
|
88
|
+
|
|
77
89
|
else:
|
|
78
|
-
|
|
90
|
+
# Default to CSV, use unique_name as filename
|
|
91
|
+
PiExporter.to_csv(data, unique_name)
|
|
79
92
|
|
|
80
93
|
def run_volume_report(self, filename, workspace_ids=None, workspace_name=None, output_mode='csv', bq_config=None, spreadsheet_name=None):
|
|
81
94
|
targets = self._resolve_workspaces(workspace_ids, workspace_name)
|
|
@@ -89,11 +102,11 @@ class PiReportManager(PiDataMetrics):
|
|
|
89
102
|
rows = PiParsers.parse_volume_data(vol_data, stg['name'], terms, ws_name)
|
|
90
103
|
all_rows.extend(rows)
|
|
91
104
|
|
|
92
|
-
#
|
|
105
|
+
# Generate Unique Name
|
|
93
106
|
ws_ref = list(targets.keys())[0] if targets else "Multi"
|
|
94
|
-
|
|
107
|
+
unique_name = self._generate_unique_name("Vol", ws_ref)
|
|
95
108
|
|
|
96
|
-
self._export_data(all_rows, output_mode,
|
|
109
|
+
self._export_data(all_rows, output_mode, bq_config, spreadsheet_name, unique_name)
|
|
97
110
|
|
|
98
111
|
def run_serp_report(self, data_sources, output_mode='csv', bq_config=None, filename=None, manual_duplication=None, spreadsheet_name=None):
|
|
99
112
|
yesterday = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime("%Y-%m-%d")
|
|
@@ -105,11 +118,11 @@ class PiReportManager(PiDataMetrics):
|
|
|
105
118
|
rows = PiParsers.parse_serp_response(raw_data, market, w_name, se_name, yesterday, cat_map, manual_duplication)
|
|
106
119
|
all_rows.extend(rows)
|
|
107
120
|
|
|
108
|
-
#
|
|
121
|
+
# Generate Unique Name
|
|
109
122
|
ws_ref = data_sources[0][1] if data_sources else "All"
|
|
110
|
-
|
|
123
|
+
unique_name = self._generate_unique_name("SERP", ws_ref)
|
|
111
124
|
|
|
112
|
-
self._export_data(all_rows, output_mode,
|
|
125
|
+
self._export_data(all_rows, output_mode, bq_config, spreadsheet_name, unique_name)
|
|
113
126
|
|
|
114
127
|
def run_historical_serp_report(self, data_sources, duration, frequency, start_date=None, features=None, num_results=25, output_mode='csv', bq_config=None, filename="historical_data", spreadsheet_name=None):
|
|
115
128
|
if features is None:
|
|
@@ -141,19 +154,21 @@ class PiReportManager(PiDataMetrics):
|
|
|
141
154
|
except Exception as e:
|
|
142
155
|
print(f"Failed to fetch {w_name} on {date}: {e}")
|
|
143
156
|
|
|
157
|
+
# BigQuery uploads immediately per day
|
|
144
158
|
if output_mode == 'bigquery' and bq_config:
|
|
145
159
|
if daily_rows:
|
|
146
160
|
print(f"Uploading {len(daily_rows)} rows for {date} to BigQuery...")
|
|
147
161
|
PiExporter.to_bigquery(daily_rows, bq_config['project'], bq_config['dataset'], bq_config['table'])
|
|
162
|
+
# Others accumulate
|
|
148
163
|
elif output_mode in ['csv', 'excel', 'gsheet']:
|
|
149
164
|
all_file_rows.extend(daily_rows)
|
|
150
165
|
|
|
166
|
+
# Final Export for Files
|
|
151
167
|
if output_mode in ['csv', 'excel', 'gsheet']:
|
|
152
|
-
# Use the Workspace ID from the first data source
|
|
153
168
|
ws_ref = data_sources[0][1] if data_sources else "All"
|
|
154
|
-
|
|
169
|
+
unique_name = self._generate_unique_name("Hist", ws_ref)
|
|
155
170
|
|
|
156
|
-
self._export_data(all_file_rows, output_mode,
|
|
171
|
+
self._export_data(all_file_rows, output_mode, bq_config, spreadsheet_name, unique_name)
|
|
157
172
|
|
|
158
173
|
def run_llm_report(self, data_sources, start_period, end_period, stg_ids=None, output_mode='csv', bq_config=None, filename="llm_output", spreadsheet_name=None):
|
|
159
174
|
all_rows = []
|
|
@@ -170,8 +185,8 @@ class PiReportManager(PiDataMetrics):
|
|
|
170
185
|
except Exception as e:
|
|
171
186
|
print(f"Failed to fetch LLM data for {w_name}: {e}")
|
|
172
187
|
|
|
173
|
-
#
|
|
188
|
+
# Generate Unique Name
|
|
174
189
|
ws_ref = data_sources[0][1] if data_sources else "All"
|
|
175
|
-
|
|
190
|
+
unique_name = self._generate_unique_name("LLM", ws_ref)
|
|
176
191
|
|
|
177
|
-
self._export_data(all_rows, output_mode,
|
|
192
|
+
self._export_data(all_rows, output_mode, bq_config, spreadsheet_name, unique_name)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|