airbyte-source-google-search-console 1.4.4__py3-none-any.whl → 1.4.6__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.1
2
2
  Name: airbyte-source-google-search-console
3
- Version: 1.4.4
3
+ Version: 1.4.6
4
4
  Summary: Source implementation for Google Search Console.
5
5
  Home-page: https://airbyte.com
6
6
  License: Elv2
@@ -19,8 +19,8 @@ source_google_search_console/schemas/sites.json,sha256=WNiCRuStPL1YkJiFa8FEbNJmq
19
19
  source_google_search_console/service_account_authenticator.py,sha256=ocSisT5IYegoZf4atsGm9u2lJCdmeSf_9o4q7YN3vD4,1225
20
20
  source_google_search_console/source.py,sha256=s-ZFiZ0iDL_OGOndO9tyBAoiiLSPtCf5kVmHWsxE25k,10029
21
21
  source_google_search_console/spec.json,sha256=WYtFvaSqWYGm1Dt2yV9G92U78Q94rh9oarbxJe3H7xo,8470
22
- source_google_search_console/streams.py,sha256=8uj_SjdDykkb6vf-gcDqP6j6Ve7bu8rw3NT_LFtUQxE,18331
23
- airbyte_source_google_search_console-1.4.4.dist-info/METADATA,sha256=vKujbocKO2h2afZgdXWlGfRM6ApbK4AWwnL9u1cTYPQ,5619
24
- airbyte_source_google_search_console-1.4.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
25
- airbyte_source_google_search_console-1.4.4.dist-info/entry_points.txt,sha256=DMcgc9bCX-Vt6hm_68pa77qS3eGdeMhg-UdlFc-XKUM,85
26
- airbyte_source_google_search_console-1.4.4.dist-info/RECORD,,
22
+ source_google_search_console/streams.py,sha256=avllhiXP9DGuFBdiYEaaiKCog0bzskeRISCXGxSqiT4,19120
23
+ airbyte_source_google_search_console-1.4.6.dist-info/METADATA,sha256=3jKQ_vZslVlFWQcKNo6SobGXVJLAN5qZ91d2cAdZIAo,5619
24
+ airbyte_source_google_search_console-1.4.6.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
25
+ airbyte_source_google_search_console-1.4.6.dist-info/entry_points.txt,sha256=DMcgc9bCX-Vt6hm_68pa77qS3eGdeMhg-UdlFc-XKUM,85
26
+ airbyte_source_google_search_console-1.4.6.dist-info/RECORD,,
@@ -10,6 +10,7 @@ from urllib.parse import quote_plus, unquote_plus
10
10
  import pendulum
11
11
  import requests
12
12
  from airbyte_cdk.models import SyncMode
13
+ from airbyte_cdk.sources.streams import CheckpointMixin
13
14
  from airbyte_cdk.sources.streams.http import HttpStream
14
15
  from requests.auth import AuthBase
15
16
 
@@ -114,7 +115,7 @@ class Sitemaps(GoogleSearchConsole):
114
115
  return f"sites/{stream_slice.get('site_url')}/sitemaps"
115
116
 
116
117
 
117
- class SearchAnalytics(GoogleSearchConsole, ABC):
118
+ class SearchAnalytics(GoogleSearchConsole, CheckpointMixin, ABC):
118
119
  """
119
120
  API docs: https://developers.google.com/webmaster-tools/search-console-api-original/v3/searchanalytics
120
121
  """
@@ -126,6 +127,10 @@ class SearchAnalytics(GoogleSearchConsole, ABC):
126
127
  search_types = ["web", "news", "image", "video"]
127
128
  range_of_days = 3
128
129
 
130
+ def __init__(self, authenticator: AuthBase, site_urls: list, start_date: str, end_date: str, data_state: str = "final", **kwargs):
131
+ super().__init__(authenticator=authenticator, site_urls=site_urls, start_date=start_date, end_date=end_date, data_state=data_state)
132
+ self._state = {}
133
+
129
134
  def path(
130
135
  self,
131
136
  stream_state: Mapping[str, Any] = None,
@@ -142,6 +147,14 @@ class SearchAnalytics(GoogleSearchConsole, ABC):
142
147
  def http_method(self) -> str:
143
148
  return "POST"
144
149
 
150
+ @property
151
+ def state(self) -> MutableMapping[str, Any]:
152
+ return self._state
153
+
154
+ @state.setter
155
+ def state(self, value: MutableMapping[str, Any]):
156
+ self._state = value
157
+
145
158
  def stream_slices(
146
159
  self, sync_mode: SyncMode, cursor_field: List[str] = None, stream_state: Mapping[str, Any] = None
147
160
  ) -> Iterable[Optional[Mapping[str, Any]]]:
@@ -262,7 +275,7 @@ class SearchAnalytics(GoogleSearchConsole, ABC):
262
275
 
263
276
  yield record
264
277
 
265
- def get_updated_state(
278
+ def _get_updated_state(
266
279
  self,
267
280
  current_stream_state: MutableMapping[str, Any],
268
281
  latest_record: Mapping[str, Any],
@@ -290,7 +303,7 @@ class SearchAnalytics(GoogleSearchConsole, ABC):
290
303
  }
291
304
  """
292
305
 
293
- latest_benchmark = latest_record[self.cursor_field]
306
+ latest_benchmark = latest_record.get(self.cursor_field)
294
307
 
295
308
  site_url = latest_record.get("site_url")
296
309
  search_type = latest_record.get("search_type")
@@ -306,6 +319,11 @@ class SearchAnalytics(GoogleSearchConsole, ABC):
306
319
 
307
320
  return current_stream_state
308
321
 
322
+ def read_records(self, **kwargs) -> Iterable[Mapping[str, Any]]:
323
+ for record in super().read_records(**kwargs):
324
+ self.state = self._get_updated_state(self.state, record)
325
+ yield record
326
+
309
327
 
310
328
  class SearchAnalyticsByDate(SearchAnalytics):
311
329
  primary_key = ["site_url", "date", "search_type"]