logos-sdk 0.0.25.dev1__tar.gz → 0.0.25.dev3__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.
Files changed (26) hide show
  1. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/PKG-INFO +1 -1
  2. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/__init__.py +3 -3
  3. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/big_query/__init__.py +22 -22
  4. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/services/CampaignManager.py +54 -1
  5. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/services/Facebook.py +413 -413
  6. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/services/GoogleAds.py +165 -150
  7. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/services/GoogleSheets.py +293 -293
  8. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/services/MicrosoftAdvertising.py +178 -178
  9. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk.egg-info/PKG-INFO +1 -1
  10. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/LICENSE +0 -0
  11. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/README.md +0 -0
  12. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/big_query/BigQuery.py +0 -0
  13. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/logging/LogosLogger.py +0 -0
  14. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/logging/__init__.py +0 -0
  15. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/services/Collabim.py +0 -0
  16. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/services/DV360.py +0 -0
  17. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/services/MarketMiner.py +0 -0
  18. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/services/MerchantCenter.py +0 -0
  19. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/services/Sklik.py +0 -0
  20. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk/services/__init__.py +0 -0
  21. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk.egg-info/SOURCES.txt +0 -0
  22. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk.egg-info/dependency_links.txt +0 -0
  23. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk.egg-info/requires.txt +0 -0
  24. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/logos_sdk.egg-info/top_level.txt +0 -0
  25. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/setup.cfg +0 -0
  26. {logos_sdk-0.0.25.dev1 → logos_sdk-0.0.25.dev3}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: logos-sdk
3
- Version: 0.0.25.dev1
3
+ Version: 0.0.25.dev3
4
4
  Summary: SDK for Logos platform
5
5
  Home-page: https://bitbucket.org/databy/logos-sdk-pip/src/master/
6
6
  Author: Databy.io
@@ -1,4 +1,4 @@
1
- PRODUCTION = "PRODUCTION"
2
- DEVELOPMENT = "DEVELOPMENT"
3
- TESTING = "TESTING"
1
+ PRODUCTION = "PRODUCTION"
2
+ DEVELOPMENT = "DEVELOPMENT"
3
+ TESTING = "TESTING"
4
4
  CLOUD_DEVELOPMENT = "CLOUD_DEVELOPMENT"
@@ -1,22 +1,22 @@
1
- from functools import wraps
2
- from google.api_core.exceptions import NotFound
3
- import time
4
-
5
- MAX_NUMBER_OF_ATTEMPTS = 2
6
-
7
-
8
- def retry_on_not_found(wrapped_function):
9
- """This decorator retry call when table is not found. Insert into newly created table often fails with error
10
- because API probably needs few seconds to see new created table"""
11
-
12
- @wraps(wrapped_function)
13
- def inner(*args, **kwargs):
14
- for i in range(1, MAX_NUMBER_OF_ATTEMPTS + 1):
15
- try:
16
- kwargs["attempts"] = i
17
- return wrapped_function(*args, **kwargs)
18
- # this is because all request share same service
19
- except NotFound as err:
20
- time.sleep(2)
21
-
22
- return inner
1
+ from functools import wraps
2
+ from google.api_core.exceptions import NotFound
3
+ import time
4
+
5
+ MAX_NUMBER_OF_ATTEMPTS = 2
6
+
7
+
8
+ def retry_on_not_found(wrapped_function):
9
+ """This decorator retry call when table is not found. Insert into newly created table often fails with error
10
+ because API probably needs few seconds to see new created table"""
11
+
12
+ @wraps(wrapped_function)
13
+ def inner(*args, **kwargs):
14
+ for i in range(1, MAX_NUMBER_OF_ATTEMPTS + 1):
15
+ try:
16
+ kwargs["attempts"] = i
17
+ return wrapped_function(*args, **kwargs)
18
+ # this is because all request share same service
19
+ except NotFound as err:
20
+ time.sleep(2)
21
+
22
+ return inner
@@ -194,7 +194,7 @@ class CampaignManagerService:
194
194
  if self.check_report_ready(report_id, file_id, secret_id):
195
195
  return True
196
196
  else:
197
- time.sleep((2 ** attempt) + randint(1, 20))
197
+ time.sleep((2**attempt) + randint(1, 20))
198
198
 
199
199
  return False
200
200
 
@@ -344,3 +344,56 @@ class CampaignManagerService:
344
344
 
345
345
  service_response = response.json()
346
346
  yield service_response["data"]["items"]
347
+
348
+ def create_and_get_report_results(
349
+ self,
350
+ account_id: str,
351
+ name: str,
352
+ start_date: str,
353
+ end_date: str,
354
+ dimensions: list,
355
+ metrics_names: list,
356
+ dimension_filters: list,
357
+ secret_id: str,
358
+ backoff_attempts: int,
359
+ ) -> Dict:
360
+ """
361
+ Method to create report, run it and fetch results in one go
362
+ """
363
+ report = {}
364
+ try:
365
+ report = self.create_report(
366
+ account_id=account_id,
367
+ name=name,
368
+ start_date=start_date,
369
+ end_date=end_date,
370
+ dimensions=dimensions,
371
+ metrics_names=metrics_names,
372
+ dimension_filters=dimension_filters,
373
+ secret_id=secret_id,
374
+ )
375
+ run_report = self.run_report(
376
+ account_id=account_id,
377
+ report_id=report["id"],
378
+ secret_id=secret_id,
379
+ )
380
+ if self.check_report_ready_with_exponential_backoff(
381
+ report_id=report["id"],
382
+ file_id=run_report["id"],
383
+ secret_id=secret_id,
384
+ backoff_attempts=backoff_attempts,
385
+ ):
386
+ return self.get_report_results(
387
+ report_id=report["id"],
388
+ file_id=run_report["id"],
389
+ secret_id=secret_id,
390
+ )
391
+ except CampaignManagerServiceException as err:
392
+ raise err
393
+ finally:
394
+ if report:
395
+ self.delete_report(
396
+ account_id=account_id,
397
+ report_id=report["id"],
398
+ secret_id=secret_id,
399
+ )