pidatametrics1 0.3.5__py2.py3-none-any.whl → 0.3.6__py2.py3-none-any.whl

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.
pidatametrics/manager.py CHANGED
@@ -6,22 +6,21 @@ from dateutil.relativedelta import relativedelta
6
6
 
7
7
  class PiReportManager(PiDataMetrics):
8
8
 
9
- # --- HELPER: Generate Unique Tab Name ---
10
- def _generate_tab_name(self, base_name, workspace_ref=None):
9
+ # --- HELPER: Generate Unique Name ---
10
+ def _generate_unique_name(self, base_name, workspace_ref=None):
11
11
  """
12
- Creates a tab name like: Volume_12345_0502_1430
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 (5th Feb, 14:30)
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
- # Google Sheets tab limit is 31 chars.
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 to avoid API errors
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
- def _export_data(self, data, output_mode, filename, bq_config, spreadsheet_name, tab_name):
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
- PiExporter.to_excel(data, filename)
82
+ # Use unique_name as filename
83
+ PiExporter.to_excel(data, unique_name)
84
+
74
85
  elif output_mode == 'gsheet' and spreadsheet_name:
75
- # tab_name is already generated with ID and Timestamp before calling this
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
- PiExporter.to_csv(data, filename)
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
- # Get the first Workspace ID found to use in the tab name
105
+ # Generate Unique Name
93
106
  ws_ref = list(targets.keys())[0] if targets else "Multi"
94
- unique_tab = self._generate_tab_name("Vol", ws_ref)
107
+ unique_name = self._generate_unique_name("Vol", ws_ref)
95
108
 
96
- self._export_data(all_rows, output_mode, filename, bq_config, spreadsheet_name, tab_name=unique_tab)
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
- # Use the Workspace ID from the first data source
121
+ # Generate Unique Name
109
122
  ws_ref = data_sources[0][1] if data_sources else "All"
110
- unique_tab = self._generate_tab_name("SERP", ws_ref)
123
+ unique_name = self._generate_unique_name("SERP", ws_ref)
111
124
 
112
- self._export_data(all_rows, output_mode, filename or "serp_output", bq_config, spreadsheet_name, tab_name=unique_tab)
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
- unique_tab = self._generate_tab_name("Hist", ws_ref)
169
+ unique_name = self._generate_unique_name("Hist", ws_ref)
155
170
 
156
- self._export_data(all_file_rows, output_mode, filename, bq_config, spreadsheet_name, tab_name=unique_tab)
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
- # Use the Workspace ID from the first data source
188
+ # Generate Unique Name
174
189
  ws_ref = data_sources[0][1] if data_sources else "All"
175
- unique_tab = self._generate_tab_name("LLM", ws_ref)
190
+ unique_name = self._generate_unique_name("LLM", ws_ref)
176
191
 
177
- self._export_data(all_rows, output_mode, filename, bq_config, spreadsheet_name, tab_name=unique_tab)
192
+ self._export_data(all_rows, output_mode, bq_config, spreadsheet_name, unique_name)
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pidatametrics1
3
- Version: 0.3.5
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
@@ -1,8 +1,8 @@
1
1
  pidatametrics/__init__.py,sha256=cmNSHvjvMsYO1tMv0Nf-7LGjIJ8AFXmUIwiv8jQ34BI,137
2
2
  pidatametrics/client.py,sha256=tHH0GV0rk2SizVqRdKepjdDQevkfdWlHOJHwsPR2PCk,4399
3
3
  pidatametrics/exporter.py,sha256=CcsdVhxI6rXi0zlQaYzFEGX0GL3ZaNV94Pj5r_WrZc4,4226
4
- pidatametrics/manager.py,sha256=Sz4ecxwtY-lVjDjXsYO_rmLbK5_o9ZU0Fdv1MK50r40,8899
4
+ pidatametrics/manager.py,sha256=tUeeJ-wKAlhpWsaZEAjxtZCtA2EbQcTBB1JkXPEVV50,9101
5
5
  pidatametrics/parsers.py,sha256=fiLx3080wNubT1VqSIeDvlrKT85KdqlKhY6FaB2XuC8,5989
6
- pidatametrics1-0.3.5.dist-info/METADATA,sha256=GhLbrT6GUpcUq5F2PIzW5ThcnR-ApKkCL1WNkCBACzM,288
7
- pidatametrics1-0.3.5.dist-info/WHEEL,sha256=aha0VrrYvgDJ3Xxl3db_g_MDIW-ZexDdrc_m-Hk8YY4,105
8
- pidatametrics1-0.3.5.dist-info/RECORD,,
6
+ pidatametrics1-0.3.6.dist-info/METADATA,sha256=DOlktdH-uHRwem6nbXWDIn3NLXmw67iENpiiX4f7--o,293
7
+ pidatametrics1-0.3.6.dist-info/WHEEL,sha256=aha0VrrYvgDJ3Xxl3db_g_MDIW-ZexDdrc_m-Hk8YY4,105
8
+ pidatametrics1-0.3.6.dist-info/RECORD,,