airbyte-source-google-search-console 1.5.16.dev202503120000__py3-none-any.whl → 1.5.16.dev202503252224__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: airbyte-source-google-search-console
3
- Version: 1.5.16.dev202503120000
3
+ Version: 1.5.16.dev202503252224
4
4
  Summary: Source implementation for Google Search Console.
5
5
  License: Elv2
6
6
  Author: Airbyte
@@ -19,8 +19,8 @@ source_google_search_console/schemas/sites.json,sha256=WNiCRuStPL1YkJiFa8FEbNJmq
19
19
  source_google_search_console/service_account_authenticator.py,sha256=gjUxt0xFxj82uviCQNTsA1Jlee__UDhYNjE7bRO1G0U,1227
20
20
  source_google_search_console/source.py,sha256=8n10_agSa2rvPvEyBvOfOpmpEardbEhi3H0vlK2A4_g,10002
21
21
  source_google_search_console/spec.json,sha256=WYtFvaSqWYGm1Dt2yV9G92U78Q94rh9oarbxJe3H7xo,8470
22
- source_google_search_console/streams.py,sha256=OQJ8kQS_QZBkHZE3KNNpqNCDuixE9jeQ91PkJwv9o6E,19695
23
- airbyte_source_google_search_console-1.5.16.dev202503120000.dist-info/METADATA,sha256=1fH-_BgBDDe1MejjqIvGZPqTPy_m-LxmlfFr9uMgwAc,5646
24
- airbyte_source_google_search_console-1.5.16.dev202503120000.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
25
- airbyte_source_google_search_console-1.5.16.dev202503120000.dist-info/entry_points.txt,sha256=DMcgc9bCX-Vt6hm_68pa77qS3eGdeMhg-UdlFc-XKUM,85
26
- airbyte_source_google_search_console-1.5.16.dev202503120000.dist-info/RECORD,,
22
+ source_google_search_console/streams.py,sha256=7C9E8gYpzU4VdQGsrS2AqjQTdMjeQ3mS3iAfvywADek,20436
23
+ airbyte_source_google_search_console-1.5.16.dev202503252224.dist-info/METADATA,sha256=llHA_zmljhs2_GK5_vKBp_TJj7mgizzaB_kFodADb_A,5646
24
+ airbyte_source_google_search_console-1.5.16.dev202503252224.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
25
+ airbyte_source_google_search_console-1.5.16.dev202503252224.dist-info/entry_points.txt,sha256=DMcgc9bCX-Vt6hm_68pa77qS3eGdeMhg-UdlFc-XKUM,85
26
+ airbyte_source_google_search_console-1.5.16.dev202503252224.dist-info/RECORD,,
@@ -371,19 +371,7 @@ class SearchAppearance(SearchAnalytics):
371
371
  primary_key = None
372
372
  dimensions = ["searchAppearance"]
373
373
 
374
- def request_body_json(
375
- self,
376
- stream_state: Mapping[str, Any] = None,
377
- stream_slice: Mapping[str, Any] = None,
378
- next_page_token: Mapping[str, Any] = None,
379
- ) -> Optional[Union[Dict[str, Any], str]]:
380
- data = super().request_body_json(stream_state, stream_slice, next_page_token)
381
-
382
- fields_to_remove = ["aggregationType", "startRow", "rowLimit", "dataState"]
383
- for field in fields_to_remove:
384
- data.pop(field, None)
385
-
386
- return data
374
+
387
375
  class SearchByKeyword(SearchAnalytics):
388
376
  """
389
377
  Adds searchAppearance value to dimensionFilterGroups in json body
@@ -392,13 +380,30 @@ class SearchByKeyword(SearchAnalytics):
392
380
  groupType: "and" - Whether all filters in this group must return true ("and"), or one or more must return true (not yet supported).
393
381
  filters: {"dimension": "searchAppearance", "operator": "equals", "expression": keyword}
394
382
  """
395
- search_types = ["web", "news", "image", "video", "discover", "googleNews"]
396
383
 
397
384
  def stream_slices(
398
385
  self, sync_mode: SyncMode, cursor_field: List[str] = None, stream_state: Mapping[str, Any] = None
399
386
  ) -> Iterable[Optional[Mapping[str, Any]]]:
387
+ search_appearance_stream = SearchAppearance(self._session.auth, self._site_urls, self._start_date, self._end_date)
388
+
400
389
  for stream_slice in super().stream_slices(sync_mode, cursor_field, stream_state):
401
- yield stream_slice
390
+ keywords_records = search_appearance_stream.read_records(
391
+ sync_mode=SyncMode.full_refresh, stream_state=stream_state, stream_slice=stream_slice
392
+ )
393
+ # Safely extract keywords, handling cases where "searchAppearance" might be missing
394
+ keywords = {record["searchAppearance"] for record in keywords_records if "searchAppearance" in record}
395
+
396
+ if keywords:
397
+ # If keywords exist, yield a slice for each keyword with filters
398
+ for keyword in keywords:
399
+ filters = {"dimension": "searchAppearance", "operator": "equals", "expression": keyword}
400
+ # Create a copy to avoid modifying the original stream_slice
401
+ stream_slice_with_filter = stream_slice.copy()
402
+ stream_slice_with_filter["dimensionFilterGroups"] = [{"groupType": "and", "filters": [filters]}]
403
+ yield stream_slice_with_filter
404
+ else:
405
+ # If no keywords are found, yield the base slice without filters
406
+ yield stream_slice
402
407
 
403
408
  def request_body_json(
404
409
  self,
@@ -407,6 +412,8 @@ class SearchByKeyword(SearchAnalytics):
407
412
  next_page_token: Mapping[str, Any] = None,
408
413
  ) -> Optional[Union[Dict[str, Any], str]]:
409
414
  data = super().request_body_json(stream_state, stream_slice, next_page_token)
415
+ if "dimensionFilterGroups" in stream_slice:
416
+ data["dimensionFilterGroups"] = stream_slice["dimensionFilterGroups"]
410
417
  return data
411
418
 
412
419