findly.unified-reporting-sdk 0.6.22__py3-none-any.whl → 0.7.1__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.
- findly/unified_reporting_sdk/data_sources/common/common_parser.py +5 -7
- findly/unified_reporting_sdk/data_sources/common/entities.py +10 -0
- findly/unified_reporting_sdk/data_sources/common/reports_client.py +6 -5
- findly/unified_reporting_sdk/data_sources/common/where_string_comparison.py +1 -1
- findly/unified_reporting_sdk/data_sources/fb_ads/fb_ads_client.py +9 -4
- findly/unified_reporting_sdk/data_sources/fb_ads/fb_ads_query_args_parser.py +3 -3
- findly/unified_reporting_sdk/data_sources/ga4/ga4_client.py +10 -4
- findly/unified_reporting_sdk/data_sources/ga4/ga4_query_args_parser.py +8 -8
- findly/unified_reporting_sdk/protos/findly_semantic_layer_pb2.py +32 -32
- findly/unified_reporting_sdk/protos/findly_semantic_layer_pb2.pyi +40 -52
- findly/unified_reporting_sdk/urs.py +6 -5
- {findly_unified_reporting_sdk-0.6.22.dist-info → findly_unified_reporting_sdk-0.7.1.dist-info}/METADATA +1 -1
- {findly_unified_reporting_sdk-0.6.22.dist-info → findly_unified_reporting_sdk-0.7.1.dist-info}/RECORD +15 -14
- {findly_unified_reporting_sdk-0.6.22.dist-info → findly_unified_reporting_sdk-0.7.1.dist-info}/LICENSE +0 -0
- {findly_unified_reporting_sdk-0.6.22.dist-info → findly_unified_reporting_sdk-0.7.1.dist-info}/WHEEL +0 -0
|
@@ -127,12 +127,9 @@ class CommonParser:
|
|
|
127
127
|
|
|
128
128
|
# Date Where clause
|
|
129
129
|
if query.date_ranges:
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
for date_range in sql_date_range:
|
|
134
|
-
start_date = date_range["since"]
|
|
135
|
-
end_date = date_range["until"]
|
|
130
|
+
for date_range in list(query.date_ranges):
|
|
131
|
+
start_date = date_range.start_date
|
|
132
|
+
end_date = date_range.end_date
|
|
136
133
|
# Check if start and end dates are the same
|
|
137
134
|
if start_date == end_date:
|
|
138
135
|
# Use equality condition when dates are the same
|
|
@@ -158,7 +155,8 @@ class CommonParser:
|
|
|
158
155
|
|
|
159
156
|
# Order By
|
|
160
157
|
if query.order_by:
|
|
161
|
-
|
|
158
|
+
order_by_str = ", ".join(query.order_by)
|
|
159
|
+
query_parts.append(f"ORDER BY {order_by_str}")
|
|
162
160
|
|
|
163
161
|
# Limit
|
|
164
162
|
if query.limit:
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import pandas as pd
|
|
3
1
|
from abc import ABC, abstractmethod
|
|
4
|
-
from typing import List,
|
|
2
|
+
from typing import List, Optional
|
|
5
3
|
|
|
4
|
+
from findly.unified_reporting_sdk.data_sources.common.entities import (
|
|
5
|
+
ReportsClientQueryResult,
|
|
6
|
+
)
|
|
6
7
|
from findly.unified_reporting_sdk.protos.findly_semantic_layer_pb2 import (
|
|
7
8
|
Dimension,
|
|
8
9
|
Metric,
|
|
@@ -23,7 +24,7 @@ class ReportsClient(ABC):
|
|
|
23
24
|
@abstractmethod
|
|
24
25
|
async def query(
|
|
25
26
|
self, query_args: QueryArgs, property_id: str, **kwargs: str
|
|
26
|
-
) -> Optional[
|
|
27
|
+
) -> Optional[ReportsClientQueryResult]:
|
|
27
28
|
"""
|
|
28
29
|
Executes the integration API request based on the SQL query parts.
|
|
29
30
|
|
|
@@ -32,7 +33,7 @@ class ReportsClient(ABC):
|
|
|
32
33
|
property_id (str): The property ID to execute the query for.
|
|
33
34
|
|
|
34
35
|
Returns:
|
|
35
|
-
Optional[
|
|
36
|
+
Optional[ReportsClientQueryResult]: The query result, or None if the query failed.
|
|
36
37
|
"""
|
|
37
38
|
pass
|
|
38
39
|
|
|
@@ -194,6 +194,6 @@ def parse_where_column_condition(
|
|
|
194
194
|
if __name__ == "__main__":
|
|
195
195
|
# ERROR:findly.unified_reporting_sdk.data_sources.common.where_string_comparison:{'msg': 'error_parse_where_column_condition', 'where_clause': "WHERE LOWER(cargo) LIKE LOWER('%crude%') AND WHERE LOWER(imo__ais_destination_formatted) LIKE LOWER(%rotterdam%) ", 'sql_query': "select * from table WHERE LOWER(cargo) LIKE LOWER('%crude%') AND WHERE LOWER(imo__ais_destination_formatted) LIKE LOWER(%rotterdam%) ", 'error': "Required keyword: 'expression' missing for <class 'sqlglot.expressions.And'>. Line 1, Col: 70.\n select * from table WHERE LOWER(cargo) LIKE LOWER('%crude%') AND \x1b[4mWHERE\x1b[0m LOWER(imo__ais_destination_formatted) LIKE LOWER(%rotterdam%) "}
|
|
196
196
|
# i want to test this case above
|
|
197
|
-
where_clause_str = "WHERE LOWER(cargo) LIKE LOWER('%crude%') AND
|
|
197
|
+
where_clause_str = "WHERE LOWER(cargo) LIKE LOWER('%crude%') AND LOWER(imo__ais_destination_formatted) LIKE LOWER('%rotterdam%') "
|
|
198
198
|
dialect = "bigquery"
|
|
199
199
|
print(parse_where_column_condition(where_clause_str, dialect))
|
|
@@ -10,6 +10,9 @@ from facebook_business.adobjects.adsinsights import AdsInsights
|
|
|
10
10
|
from facebook_business.adobjects.user import User
|
|
11
11
|
from facebook_business.adobjects.business import Business
|
|
12
12
|
|
|
13
|
+
from findly.unified_reporting_sdk.data_sources.common.entities import (
|
|
14
|
+
ReportsClientQueryResult,
|
|
15
|
+
)
|
|
13
16
|
from findly.unified_reporting_sdk.data_sources.common.reports_client import (
|
|
14
17
|
ReportsClient,
|
|
15
18
|
)
|
|
@@ -172,7 +175,6 @@ class FbAdsClient(ReportsClient):
|
|
|
172
175
|
sort: Optional[List[str]] = None,
|
|
173
176
|
filtering: Optional[List[Dict[str, str]]] = None,
|
|
174
177
|
limit: Union[int, str] = DEFAULT_LIMIT_FOR_ADS_INSIGHTS_CURSOR,
|
|
175
|
-
time_increment: Optional[str] = None,
|
|
176
178
|
level: AdsInsights.Level = AdsInsights.Level.account,
|
|
177
179
|
page_size: int = DEFAULT_PAGE_SIZE_FOR_FB_ADS_PAGINATED_CALL,
|
|
178
180
|
**kwargs: str,
|
|
@@ -303,7 +305,7 @@ class FbAdsClient(ReportsClient):
|
|
|
303
305
|
query_args: QueryArgs,
|
|
304
306
|
property_id: str,
|
|
305
307
|
**kwargs: str,
|
|
306
|
-
) -> Optional[
|
|
308
|
+
) -> Optional[ReportsClientQueryResult]:
|
|
307
309
|
params = await FB_PARSER.parse_query_args_to_request_params(
|
|
308
310
|
query_args=query_args,
|
|
309
311
|
property_id=property_id,
|
|
@@ -333,14 +335,17 @@ class FbAdsClient(ReportsClient):
|
|
|
333
335
|
summary=summary,
|
|
334
336
|
query_args=query_args,
|
|
335
337
|
)
|
|
336
|
-
|
|
338
|
+
|
|
339
|
+
return ReportsClientQueryResult(
|
|
340
|
+
main_result=generated_result_df, totals_result=generated_totals_df
|
|
341
|
+
)
|
|
337
342
|
|
|
338
343
|
async def query(
|
|
339
344
|
self,
|
|
340
345
|
query_args: QueryArgs,
|
|
341
346
|
property_id: str,
|
|
342
347
|
**kwargs: str,
|
|
343
|
-
) -> Optional[
|
|
348
|
+
) -> Optional[ReportsClientQueryResult]:
|
|
344
349
|
return await self._decorated_query(
|
|
345
350
|
query_args=query_args,
|
|
346
351
|
property_id=property_id,
|
|
@@ -299,7 +299,7 @@ class FbAdsQueryArgsParser(CommonParser):
|
|
|
299
299
|
exploded_df = df.explode(metric.name)
|
|
300
300
|
|
|
301
301
|
# Normalize the dictionary in 'metric column to separate columns
|
|
302
|
-
normalized_df = pd.json_normalize(exploded_df[metric.name])
|
|
302
|
+
normalized_df = pd.json_normalize(exploded_df[metric.name].tolist())
|
|
303
303
|
|
|
304
304
|
# Identify overlapping columns
|
|
305
305
|
overlapping_columns = list(
|
|
@@ -398,7 +398,7 @@ class FbAdsQueryArgsParser(CommonParser):
|
|
|
398
398
|
)
|
|
399
399
|
equalized_dataframes = self.equalize_dataframe_rows(
|
|
400
400
|
dataframes=final_df_list,
|
|
401
|
-
dimensions=
|
|
401
|
+
dimensions=list(query_args.group_by_columns),
|
|
402
402
|
)
|
|
403
403
|
return equalized_dataframes
|
|
404
404
|
|
|
@@ -493,7 +493,7 @@ class FbAdsQueryArgsParser(CommonParser):
|
|
|
493
493
|
exploded_df = summary_df.explode(metric.name)
|
|
494
494
|
|
|
495
495
|
# Normalize the dictionary in 'metric column to separate columns
|
|
496
|
-
normalized_df = pd.json_normalize(exploded_df[metric.name])
|
|
496
|
+
normalized_df = pd.json_normalize(exploded_df[metric.name].tolist())
|
|
497
497
|
|
|
498
498
|
# Identify overlapping columns
|
|
499
499
|
overlapping_columns = list(
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import backoff
|
|
3
3
|
import json
|
|
4
|
-
import pandas as pd
|
|
5
4
|
from aiocache import cached, Cache
|
|
6
5
|
from google.protobuf.json_format import ParseDict
|
|
7
6
|
from google.analytics.data_v1beta import BetaAnalyticsDataAsyncClient
|
|
@@ -29,6 +28,10 @@ from google.analytics.data_v1beta.types import (
|
|
|
29
28
|
CheckCompatibilityRequest,
|
|
30
29
|
CheckCompatibilityResponse,
|
|
31
30
|
)
|
|
31
|
+
|
|
32
|
+
from findly.unified_reporting_sdk.data_sources.common.entities import (
|
|
33
|
+
ReportsClientQueryResult,
|
|
34
|
+
)
|
|
32
35
|
from findly.unified_reporting_sdk.protos.findly_semantic_layer_pb2 import (
|
|
33
36
|
Dimension as DimensionProto,
|
|
34
37
|
)
|
|
@@ -330,7 +333,7 @@ class GA4Client(ReportsClient):
|
|
|
330
333
|
query_args: QueryArgs,
|
|
331
334
|
property_id: str,
|
|
332
335
|
**kwargs: str,
|
|
333
|
-
) -> Optional[
|
|
336
|
+
) -> Optional[ReportsClientQueryResult]:
|
|
334
337
|
params = await GA4_PARSER.parse_query_args_to_request_params(
|
|
335
338
|
query_args=query_args,
|
|
336
339
|
property_id=property_id,
|
|
@@ -357,14 +360,17 @@ class GA4Client(ReportsClient):
|
|
|
357
360
|
generated_totals_df = GA4_PARSER.parse_totals_to_dataframe(
|
|
358
361
|
report_response=result,
|
|
359
362
|
)
|
|
360
|
-
|
|
363
|
+
|
|
364
|
+
return ReportsClientQueryResult(
|
|
365
|
+
main_result=generated_result_df, totals_result=generated_totals_df
|
|
366
|
+
)
|
|
361
367
|
|
|
362
368
|
async def query(
|
|
363
369
|
self,
|
|
364
370
|
query_args: QueryArgs,
|
|
365
371
|
property_id: str,
|
|
366
372
|
**kwargs: str,
|
|
367
|
-
) -> Optional[
|
|
373
|
+
) -> Optional[ReportsClientQueryResult]:
|
|
368
374
|
return await self._decorated_query(
|
|
369
375
|
query_args=query_args, property_id=property_id, **kwargs
|
|
370
376
|
)
|
|
@@ -109,7 +109,7 @@ class GA4QueryArgsParser(CommonParser):
|
|
|
109
109
|
date_range_indices = set([row[DATE_RANGE_HEADER] for row in rows])
|
|
110
110
|
|
|
111
111
|
# Create a list of dataframes.
|
|
112
|
-
|
|
112
|
+
dataframes_tuple: List[tuple[int, pd.DataFrame]] = []
|
|
113
113
|
for date_range_index in date_range_indices:
|
|
114
114
|
# Create a dataframe with the rows that have the same date range index.
|
|
115
115
|
date_range_df = pd.DataFrame(
|
|
@@ -120,14 +120,14 @@ class GA4QueryArgsParser(CommonParser):
|
|
|
120
120
|
date_range_df = date_range_df.drop(columns=[DATE_RANGE_HEADER])
|
|
121
121
|
|
|
122
122
|
# Add the dataframe to the list of dataframes.
|
|
123
|
-
|
|
123
|
+
dataframes_tuple.append(
|
|
124
124
|
(int(str(date_range_index).split("_")[-1]), date_range_df)
|
|
125
125
|
)
|
|
126
126
|
# Sort the dataframes based on the date range index.
|
|
127
|
-
|
|
127
|
+
dataframes_tuple.sort()
|
|
128
128
|
|
|
129
129
|
# Remove the date range index from the tuples.
|
|
130
|
-
dataframes = [df for _, df in
|
|
130
|
+
dataframes: List[pd.DataFrame] = [df for _, df in dataframes_tuple]
|
|
131
131
|
|
|
132
132
|
# remove DATE_RANGE_HEADER from the dimension headers.
|
|
133
133
|
if DATE_RANGE_HEADER in dimension_headers:
|
|
@@ -196,7 +196,7 @@ class GA4QueryArgsParser(CommonParser):
|
|
|
196
196
|
date_range_indices = set([row[DATE_RANGE_HEADER] for row in rows])
|
|
197
197
|
|
|
198
198
|
# Create a list of dataframes.
|
|
199
|
-
|
|
199
|
+
dataframes_tuple: List[tuple[int, pd.DataFrame]] = []
|
|
200
200
|
for date_range_index in date_range_indices:
|
|
201
201
|
# Create a dataframe with the rows that have the same date range index.
|
|
202
202
|
date_range_df = pd.DataFrame(
|
|
@@ -207,14 +207,14 @@ class GA4QueryArgsParser(CommonParser):
|
|
|
207
207
|
date_range_df = date_range_df.drop(columns=[DATE_RANGE_HEADER])
|
|
208
208
|
|
|
209
209
|
# Add the dataframe to the list of dataframes.
|
|
210
|
-
|
|
210
|
+
dataframes_tuple.append(
|
|
211
211
|
(int(str(date_range_index).split("_")[-1]), date_range_df)
|
|
212
212
|
)
|
|
213
213
|
# Sort the dataframes based on the date range index.
|
|
214
|
-
|
|
214
|
+
dataframes_tuple.sort()
|
|
215
215
|
|
|
216
216
|
# Remove the date range index from the tuples.
|
|
217
|
-
dataframes = [df for _, df in
|
|
217
|
+
dataframes: List[pd.DataFrame] = [df for _, df in dataframes_tuple]
|
|
218
218
|
|
|
219
219
|
# remove DATE_RANGE_HEADER from the dimension headers.
|
|
220
220
|
if DATE_RANGE_HEADER in dimension_headers:
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
3
|
# source: findly_semantic_layer.proto
|
|
4
4
|
"""Generated protocol buffer code."""
|
|
5
|
-
from google.protobuf.internal import builder as _builder
|
|
6
5
|
from google.protobuf import descriptor as _descriptor
|
|
7
6
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
7
|
from google.protobuf import symbol_database as _symbol_database
|
|
8
|
+
from google.protobuf.internal import builder as _builder
|
|
9
9
|
# @@protoc_insertion_point(imports)
|
|
10
10
|
|
|
11
11
|
_sym_db = _symbol_database.Default()
|
|
@@ -15,37 +15,37 @@ _sym_db = _symbol_database.Default()
|
|
|
15
15
|
|
|
16
16
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x66indly_semantic_layer.proto\x12\x15\x66indly_semantic_layer\"\xd4\x02\n\tDimension\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0c\n\x04\x65xpr\x18\x03 \x01(\t\x12\x32\n\x04type\x18\x04 \x01(\x0e\x32$.findly_semantic_layer.DimensionType\x12?\n\x0btype_params\x18\x05 \x01(\x0b\x32*.findly_semantic_layer.DimensionTypeParams\x12\x14\n\x0ctop_n_values\x18\x06 \x03(\t\x12\x16\n\nvalue_type\x18\x07 \x01(\tB\x02\x18\x01\x12\x19\n\x11\x64\x61ta_source_names\x18\x08 \x03(\t\x12\x14\n\x0c\x64isplay_name\x18\t \x01(\t\x12\x42\n\x0fvalue_type_enum\x18\n \x01(\x0e\x32).findly_semantic_layer.DimensionValueType\"k\n\x13\x44imensionTypeParams\x12@\n\x10time_granularity\x18\x01 \x01(\x0e\x32&.findly_semantic_layer.DateGranularity\x12\x12\n\nis_primary\x18\x02 \x01(\x08\"\x8b\x03\n\x06Metric\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x12\n\nexpression\x18\x04 \x01(\t\x12\x18\n\x10view_id_of_table\x18\x05 \x01(\t\x12\x12\n\ntable_name\x18\x06 \x01(\t\x12\x10\n\x08measures\x18\x07 \x03(\t\x12\x11\n\tnumerator\x18\x08 \x01(\t\x12\x13\n\x0b\x64\x65nominator\x18\t \x01(\t\x12/\n\x04type\x18\n \x01(\x0e\x32!.findly_semantic_layer.MetricType\x12\x10\n\x06window\x18\x0b \x01(\tH\x00\x12\x17\n\rgrain_to_date\x18\x0c \x01(\tH\x00\x12:\n\nvalue_type\x18\r \x01(\x0e\x32&.findly_semantic_layer.MetricValueType\x12\x14\n\x0c\x64isplay_name\x18\x0e \x01(\t\x12\x12\n\nis_numeric\x18\x0f \x01(\x08\x42\x14\n\x12\x63umulative_process\"4\n\x0c\x44\x61teStrRange\x12\x12\n\nstart_date\x18\x01 \x01(\t\x12\x10\n\x08\x65nd_date\x18\x02 \x01(\t\"\xf4\x02\n\tQueryArgs\x12\x14\n\x0cwhere_clause\x18\x01 \x01(\t\x12\x18\n\x10group_by_columns\x18\x02 \x03(\t\x12\x1a\n\x12metrics_expression\x18\x03 \x03(\t\x12\r\n\x05limit\x18\x04 \x01(\t\x12\x10\n\x08order_by\x18\x05 \x03(\t\x12\x19\n\x11\x64\x61te_where_clause\x18\x06 \x01(\t\x12\x0f\n\x07metrics\x18\x07 \x03(\t\x12\x15\n\rhaving_clause\x18\x08 \x01(\t\x12\x1c\n\x14incompatible_metrics\x18\t \x03(\t\x12\x1f\n\x17incompatible_dimensions\x18\n \x03(\t\x12\x38\n\x0b\x64\x61te_ranges\x18\x0b \x03(\x0b\x32#.findly_semantic_layer.DateStrRange\x12\x17\n\x0fsql_explanation\x18\x0c \x01(\t\x12\r\n\x05level\x18\r \x01(\t\x12\x16\n\x0etime_increment\x18\x0e \x01(\t\"\x80\x01\n\x12\x44\x61tasourceMetadata\x12>\n\x08location\x18\x01 \x01(\x0e\x32,.findly_semantic_layer.DataSourceIntegration\x12\x13\n\x0bproperty_id\x18\x02 \x01(\t\x12\x15\n\rproperty_name\x18\x03 \x01(\t*b\n\x15\x44\x61taSourceIntegration\x12 \n\x1c\x44\x41TA_SOURCE_LOCATION_UNKNOWN\x10\x00\x12\x12\n\x0eSEMANTIC_LAYER\x10\x01\x12\x07\n\x03GA4\x10\x02\x12\n\n\x06\x46\x42_ADS\x10\x03*S\n\x0f\x44\x61teGranularity\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x44\x41Y\x10\x01\x12\x08\n\x04WEEK\x10\x02\x12\t\n\x05MONTH\x10\x03\x12\x0b\n\x07QUARTER\x10\x04\x12\x08\n\x04YEAR\x10\x05*\x7f\n\x0b\x41ggregation\x12\x17\n\x13\x41GGREGATION_UNKNOWN\x10\x00\x12\x07\n\x03SUM\x10\x01\x12\x0f\n\x0bSUM_BOOLEAN\x10\x02\x12\x12\n\x0e\x43OUNT_DISTINCT\x10\x03\x12\x07\n\x03MIN\x10\x04\x12\x07\n\x03MAX\x10\x05\x12\x0b\n\x07\x41VERAGE\x10\x06\x12\n\n\x06MEDIAN\x10\x07*\xab\x01\n\rDimensionType\x12\x15\n\x11\x44IMENSION_UNKNOWN\x10\x00\x12\x0f\n\x0b\x43\x41TEGORICAL\x10\x01\x12\x08\n\x04TIME\x10\x02\x12\x10\n\x0c\x46\x42_ADS_FIELD\x10\x03\x12\x14\n\x10\x46\x42_ADS_BREAKDOWN\x10\x04\x12\x1b\n\x17\x46\x42_ADS_ACTION_BREAKDOWN\x10\x05\x12#\n\x1f\x46\x42_ADS_SUMMARY_ACTION_BREAKDOWN\x10\x06*\x84\x01\n\x12\x44imensionValueType\x12\x16\n\x12VALUE_TYPE_UNKNOWN\x10\x00\x12\n\n\x06STRING\x10\x01\x12\x0b\n\x07INTEGER\x10\x02\x12\t\n\x05\x46LOAT\x10\x03\x12\x0b\n\x07\x42OOLEAN\x10\x04\x12\x08\n\x04\x44\x41TE\x10\x05\x12\x0c\n\x08\x44\x41TETIME\x10\x06\x12\r\n\tTIMESTAMP\x10\x07*o\n\nMetricType\x12\x12\n\x0eMETRIC_UNKNOWN\x10\x00\x12\x11\n\rMEASURE_PROXY\x10\x01\x12\x0e\n\nCUMULATIVE\x10\x02\x12\t\n\x05RATIO\x10\x03\x12\x0b\n\x07\x44\x45RIVED\x10\x04\x12\x12\n\x0eSQL_EXPRESSION\x10\x05*\xf9\x04\n\x0fMetricValueType\x12\x1d\n\x19METRIC_VALUE_TYPE_UNKNOWN\x10\x00\x12\x1d\n\x19METRIC_VALUE_TYPE_INTEGER\x10\x01\x12\x1b\n\x17METRIC_VALUE_TYPE_FLOAT\x10\x02\x12\x1d\n\x19METRIC_VALUE_TYPE_SECONDS\x10\x03\x12\"\n\x1eMETRIC_VALUE_TYPE_MILLISECONDS\x10\x04\x12\x1d\n\x19METRIC_VALUE_TYPE_MINUTES\x10\x05\x12\x1b\n\x17METRIC_VALUE_TYPE_HOURS\x10\x06\x12\x1e\n\x1aMETRIC_VALUE_TYPE_STANDARD\x10\x07\x12\x1e\n\x1aMETRIC_VALUE_TYPE_CURRENCY\x10\x08\x12\x1a\n\x16METRIC_VALUE_TYPE_FEET\x10\t\x12\x1b\n\x17METRIC_VALUE_TYPE_MILES\x10\n\x12\x1c\n\x18METRIC_VALUE_TYPE_METERS\x10\x0b\x12 \n\x1cMETRIC_VALUE_TYPE_KILOMETERS\x10\x0c\x12\x1c\n\x18METRIC_VALUE_TYPE_STRING\x10\r\x12$\n METRIC_VALUE_TYPE_NUMERIC_STRING\x10\x0e\x12+\n\'METRIC_VALUE_TYPE_LIST_ADS_ACTION_STATS\x10\x0f\x12\x32\n.METRIC_VALUE_TYPE_LIST_ADS_INSIGHTS_DDA_RESULT\x10\x10\x12.\n*METRIC_VALUE_TYPE_LIST_ADS_HISTOGRAM_STATS\x10\x11\x62\x06proto3')
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
_builder.
|
|
18
|
+
_globals = globals()
|
|
19
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
20
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'findly_semantic_layer_pb2', _globals)
|
|
20
21
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
21
|
-
|
|
22
22
|
DESCRIPTOR._options = None
|
|
23
|
-
_DIMENSION.fields_by_name['value_type']._options = None
|
|
24
|
-
_DIMENSION.fields_by_name['value_type']._serialized_options = b'\030\001'
|
|
25
|
-
_DATASOURCEINTEGRATION._serialized_start=1464
|
|
26
|
-
_DATASOURCEINTEGRATION._serialized_end=1562
|
|
27
|
-
_DATEGRANULARITY._serialized_start=1564
|
|
28
|
-
_DATEGRANULARITY._serialized_end=1647
|
|
29
|
-
_AGGREGATION._serialized_start=1649
|
|
30
|
-
_AGGREGATION._serialized_end=1776
|
|
31
|
-
_DIMENSIONTYPE._serialized_start=1779
|
|
32
|
-
_DIMENSIONTYPE._serialized_end=1950
|
|
33
|
-
_DIMENSIONVALUETYPE._serialized_start=1953
|
|
34
|
-
_DIMENSIONVALUETYPE._serialized_end=2085
|
|
35
|
-
_METRICTYPE._serialized_start=2087
|
|
36
|
-
_METRICTYPE._serialized_end=2198
|
|
37
|
-
_METRICVALUETYPE._serialized_start=2201
|
|
38
|
-
_METRICVALUETYPE._serialized_end=2834
|
|
39
|
-
_DIMENSION._serialized_start=55
|
|
40
|
-
_DIMENSION._serialized_end=395
|
|
41
|
-
_DIMENSIONTYPEPARAMS._serialized_start=397
|
|
42
|
-
_DIMENSIONTYPEPARAMS._serialized_end=504
|
|
43
|
-
_METRIC._serialized_start=507
|
|
44
|
-
_METRIC._serialized_end=902
|
|
45
|
-
_DATESTRRANGE._serialized_start=904
|
|
46
|
-
_DATESTRRANGE._serialized_end=956
|
|
47
|
-
_QUERYARGS._serialized_start=959
|
|
48
|
-
_QUERYARGS._serialized_end=1331
|
|
49
|
-
_DATASOURCEMETADATA._serialized_start=1334
|
|
50
|
-
_DATASOURCEMETADATA._serialized_end=1462
|
|
23
|
+
_globals['_DIMENSION'].fields_by_name['value_type']._options = None
|
|
24
|
+
_globals['_DIMENSION'].fields_by_name['value_type']._serialized_options = b'\030\001'
|
|
25
|
+
_globals['_DATASOURCEINTEGRATION']._serialized_start=1464
|
|
26
|
+
_globals['_DATASOURCEINTEGRATION']._serialized_end=1562
|
|
27
|
+
_globals['_DATEGRANULARITY']._serialized_start=1564
|
|
28
|
+
_globals['_DATEGRANULARITY']._serialized_end=1647
|
|
29
|
+
_globals['_AGGREGATION']._serialized_start=1649
|
|
30
|
+
_globals['_AGGREGATION']._serialized_end=1776
|
|
31
|
+
_globals['_DIMENSIONTYPE']._serialized_start=1779
|
|
32
|
+
_globals['_DIMENSIONTYPE']._serialized_end=1950
|
|
33
|
+
_globals['_DIMENSIONVALUETYPE']._serialized_start=1953
|
|
34
|
+
_globals['_DIMENSIONVALUETYPE']._serialized_end=2085
|
|
35
|
+
_globals['_METRICTYPE']._serialized_start=2087
|
|
36
|
+
_globals['_METRICTYPE']._serialized_end=2198
|
|
37
|
+
_globals['_METRICVALUETYPE']._serialized_start=2201
|
|
38
|
+
_globals['_METRICVALUETYPE']._serialized_end=2834
|
|
39
|
+
_globals['_DIMENSION']._serialized_start=55
|
|
40
|
+
_globals['_DIMENSION']._serialized_end=395
|
|
41
|
+
_globals['_DIMENSIONTYPEPARAMS']._serialized_start=397
|
|
42
|
+
_globals['_DIMENSIONTYPEPARAMS']._serialized_end=504
|
|
43
|
+
_globals['_METRIC']._serialized_start=507
|
|
44
|
+
_globals['_METRIC']._serialized_end=902
|
|
45
|
+
_globals['_DATESTRRANGE']._serialized_start=904
|
|
46
|
+
_globals['_DATESTRRANGE']._serialized_end=956
|
|
47
|
+
_globals['_QUERYARGS']._serialized_start=959
|
|
48
|
+
_globals['_QUERYARGS']._serialized_end=1331
|
|
49
|
+
_globals['_DATASOURCEMETADATA']._serialized_start=1334
|
|
50
|
+
_globals['_DATASOURCEMETADATA']._serialized_end=1462
|
|
51
51
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
@generated by mypy-protobuf. Do not edit manually!
|
|
3
3
|
isort:skip_file
|
|
4
4
|
"""
|
|
5
|
-
|
|
6
5
|
import builtins
|
|
7
6
|
import collections.abc
|
|
8
7
|
import google.protobuf.descriptor
|
|
@@ -287,7 +286,7 @@ METRIC_VALUE_TYPE_LIST_ADS_INSIGHTS_DDA_RESULT: MetricValueType.ValueType # 16
|
|
|
287
286
|
METRIC_VALUE_TYPE_LIST_ADS_HISTOGRAM_STATS: MetricValueType.ValueType # 17
|
|
288
287
|
global___MetricValueType = MetricValueType
|
|
289
288
|
|
|
290
|
-
@
|
|
289
|
+
@typing_extensions.final
|
|
291
290
|
class Dimension(google.protobuf.message.Message):
|
|
292
291
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
293
292
|
|
|
@@ -313,25 +312,22 @@ class Dimension(google.protobuf.message.Message):
|
|
|
313
312
|
"""
|
|
314
313
|
type: global___DimensionType.ValueType
|
|
315
314
|
"""The type of the dimension, e.g. CATEGORICAL or TIME."""
|
|
316
|
-
value_type: builtins.str
|
|
317
|
-
"""The type of the values of the dimension, e.g. STRING, INTEGER, FLOAT, etc.
|
|
318
|
-
Prefer to use the value_type_enum field
|
|
319
|
-
"""
|
|
320
|
-
display_name: builtins.str
|
|
321
|
-
"""The display name."""
|
|
322
|
-
value_type_enum: global___DimensionValueType.ValueType
|
|
323
315
|
@property
|
|
324
316
|
def type_params(self) -> global___DimensionTypeParams:
|
|
325
317
|
"""The parameters of the dimension type."""
|
|
326
|
-
|
|
327
318
|
@property
|
|
328
319
|
def top_n_values(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
|
|
329
320
|
"""The top n values of the dimension."""
|
|
330
|
-
|
|
321
|
+
value_type: builtins.str
|
|
322
|
+
"""The type of the values of the dimension, e.g. STRING, INTEGER, FLOAT, etc.
|
|
323
|
+
Prefer to use the value_type_enum field
|
|
324
|
+
"""
|
|
331
325
|
@property
|
|
332
326
|
def data_source_names(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
|
|
333
327
|
"""The data source names that the dimension is available in."""
|
|
334
|
-
|
|
328
|
+
display_name: builtins.str
|
|
329
|
+
"""The display name."""
|
|
330
|
+
value_type_enum: global___DimensionValueType.ValueType
|
|
335
331
|
def __init__(
|
|
336
332
|
self,
|
|
337
333
|
*,
|
|
@@ -346,12 +342,12 @@ class Dimension(google.protobuf.message.Message):
|
|
|
346
342
|
display_name: builtins.str = ...,
|
|
347
343
|
value_type_enum: global___DimensionValueType.ValueType = ...,
|
|
348
344
|
) -> None: ...
|
|
349
|
-
def HasField(self, field_name:
|
|
350
|
-
def ClearField(self, field_name:
|
|
345
|
+
def HasField(self, field_name: typing_extensions.Literal["type_params", b"type_params"]) -> builtins.bool: ...
|
|
346
|
+
def ClearField(self, field_name: typing_extensions.Literal["data_source_names", b"data_source_names", "description", b"description", "display_name", b"display_name", "expr", b"expr", "name", b"name", "top_n_values", b"top_n_values", "type", b"type", "type_params", b"type_params", "value_type", b"value_type", "value_type_enum", b"value_type_enum"]) -> None: ...
|
|
351
347
|
|
|
352
348
|
global___Dimension = Dimension
|
|
353
349
|
|
|
354
|
-
@
|
|
350
|
+
@typing_extensions.final
|
|
355
351
|
class DimensionTypeParams(google.protobuf.message.Message):
|
|
356
352
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
357
353
|
|
|
@@ -369,11 +365,11 @@ class DimensionTypeParams(google.protobuf.message.Message):
|
|
|
369
365
|
time_granularity: global___DateGranularity.ValueType = ...,
|
|
370
366
|
is_primary: builtins.bool = ...,
|
|
371
367
|
) -> None: ...
|
|
372
|
-
def ClearField(self, field_name:
|
|
368
|
+
def ClearField(self, field_name: typing_extensions.Literal["is_primary", b"is_primary", "time_granularity", b"time_granularity"]) -> None: ...
|
|
373
369
|
|
|
374
370
|
global___DimensionTypeParams = DimensionTypeParams
|
|
375
371
|
|
|
376
|
-
@
|
|
372
|
+
@typing_extensions.final
|
|
377
373
|
class Metric(google.protobuf.message.Message):
|
|
378
374
|
"""Parameters that are associated with metrics include:
|
|
379
375
|
|
|
@@ -419,6 +415,13 @@ class Metric(google.protobuf.message.Message):
|
|
|
419
415
|
"""The id of the table view that the metric is defined on."""
|
|
420
416
|
table_name: builtins.str
|
|
421
417
|
"""The name of the table view that the metric is defined on."""
|
|
418
|
+
@property
|
|
419
|
+
def measures(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
|
|
420
|
+
"""The measures of the metric.
|
|
421
|
+
If type is MEASURE_PROXY, then this should be a list of exactly one measure.
|
|
422
|
+
It should be included only measures that are defined in a data source.
|
|
423
|
+
Two metrics of type MEASURE_PROXY cannot refer to the same measure.
|
|
424
|
+
"""
|
|
422
425
|
numerator: builtins.str
|
|
423
426
|
"""Numerator and denominator are only used if type is RATIO. Don't use identifiers as numerator or denominator.
|
|
424
427
|
It should be included only measures that are defined in a data source.
|
|
@@ -443,14 +446,6 @@ class Metric(google.protobuf.message.Message):
|
|
|
443
446
|
display_name: builtins.str
|
|
444
447
|
is_numeric: builtins.bool
|
|
445
448
|
"""If the metric is numeric or not."""
|
|
446
|
-
@property
|
|
447
|
-
def measures(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
|
|
448
|
-
"""The measures of the metric.
|
|
449
|
-
If type is MEASURE_PROXY, then this should be a list of exactly one measure.
|
|
450
|
-
It should be included only measures that are defined in a data source.
|
|
451
|
-
Two metrics of type MEASURE_PROXY cannot refer to the same measure.
|
|
452
|
-
"""
|
|
453
|
-
|
|
454
449
|
def __init__(
|
|
455
450
|
self,
|
|
456
451
|
*,
|
|
@@ -470,13 +465,13 @@ class Metric(google.protobuf.message.Message):
|
|
|
470
465
|
display_name: builtins.str = ...,
|
|
471
466
|
is_numeric: builtins.bool = ...,
|
|
472
467
|
) -> None: ...
|
|
473
|
-
def HasField(self, field_name:
|
|
474
|
-
def ClearField(self, field_name:
|
|
475
|
-
def WhichOneof(self, oneof_group:
|
|
468
|
+
def HasField(self, field_name: typing_extensions.Literal["cumulative_process", b"cumulative_process", "grain_to_date", b"grain_to_date", "window", b"window"]) -> builtins.bool: ...
|
|
469
|
+
def ClearField(self, field_name: typing_extensions.Literal["cumulative_process", b"cumulative_process", "denominator", b"denominator", "description", b"description", "display_name", b"display_name", "expression", b"expression", "grain_to_date", b"grain_to_date", "id", b"id", "is_numeric", b"is_numeric", "measures", b"measures", "name", b"name", "numerator", b"numerator", "table_name", b"table_name", "type", b"type", "value_type", b"value_type", "view_id_of_table", b"view_id_of_table", "window", b"window"]) -> None: ...
|
|
470
|
+
def WhichOneof(self, oneof_group: typing_extensions.Literal["cumulative_process", b"cumulative_process"]) -> typing_extensions.Literal["window", "grain_to_date"] | None: ...
|
|
476
471
|
|
|
477
472
|
global___Metric = Metric
|
|
478
473
|
|
|
479
|
-
@
|
|
474
|
+
@typing_extensions.final
|
|
480
475
|
class DateStrRange(google.protobuf.message.Message):
|
|
481
476
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
482
477
|
|
|
@@ -492,11 +487,11 @@ class DateStrRange(google.protobuf.message.Message):
|
|
|
492
487
|
start_date: builtins.str = ...,
|
|
493
488
|
end_date: builtins.str = ...,
|
|
494
489
|
) -> None: ...
|
|
495
|
-
def ClearField(self, field_name:
|
|
490
|
+
def ClearField(self, field_name: typing_extensions.Literal["end_date", b"end_date", "start_date", b"start_date"]) -> None: ...
|
|
496
491
|
|
|
497
492
|
global___DateStrRange = DateStrRange
|
|
498
493
|
|
|
499
|
-
@
|
|
494
|
+
@typing_extensions.final
|
|
500
495
|
class QueryArgs(google.protobuf.message.Message):
|
|
501
496
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
502
497
|
|
|
@@ -516,45 +511,38 @@ class QueryArgs(google.protobuf.message.Message):
|
|
|
516
511
|
TIME_INCREMENT_FIELD_NUMBER: builtins.int
|
|
517
512
|
where_clause: builtins.str
|
|
518
513
|
"""This is the where clause of the generated sql."""
|
|
519
|
-
limit: builtins.str
|
|
520
|
-
"""This is the LIMIT clause of the generated sql."""
|
|
521
|
-
date_where_clause: builtins.str
|
|
522
|
-
having_clause: builtins.str
|
|
523
|
-
sql_explanation: builtins.str
|
|
524
|
-
"""The explanation of the generated sql."""
|
|
525
|
-
level: builtins.str
|
|
526
|
-
"""level and time_increment are important info for Facebook Ads insights
|
|
527
|
-
https://developers.facebook.com/docs/marketing-api/reference/ad-account/insights/
|
|
528
|
-
"""
|
|
529
|
-
time_increment: builtins.str
|
|
530
514
|
@property
|
|
531
515
|
def group_by_columns(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
|
|
532
516
|
"""This is the group by clause of the generated sql."""
|
|
533
|
-
|
|
534
517
|
@property
|
|
535
518
|
def metrics_expression(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
|
|
536
519
|
"""This is the metric expression of the generated sql."""
|
|
537
|
-
|
|
520
|
+
limit: builtins.str
|
|
521
|
+
"""This is the LIMIT clause of the generated sql."""
|
|
538
522
|
@property
|
|
539
523
|
def order_by(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
|
|
540
524
|
"""Column names for ordering. Descending order is indicated by a prepended '-'."""
|
|
541
|
-
|
|
525
|
+
date_where_clause: builtins.str
|
|
542
526
|
@property
|
|
543
527
|
def metrics(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
|
|
544
528
|
"""The name of the metrics to be queried."""
|
|
545
|
-
|
|
529
|
+
having_clause: builtins.str
|
|
546
530
|
@property
|
|
547
531
|
def incompatible_metrics(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
|
|
548
532
|
"""The list of metrics selected by the pipeline, but are incompatible for the request."""
|
|
549
|
-
|
|
550
533
|
@property
|
|
551
534
|
def incompatible_dimensions(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
|
|
552
535
|
"""The list of dimensions selected by the pipeline, but are incompatible for the request."""
|
|
553
|
-
|
|
554
536
|
@property
|
|
555
537
|
def date_ranges(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___DateStrRange]:
|
|
556
538
|
"""The date ranges to be queried."""
|
|
557
|
-
|
|
539
|
+
sql_explanation: builtins.str
|
|
540
|
+
"""The explanation of the generated sql."""
|
|
541
|
+
level: builtins.str
|
|
542
|
+
"""level and time_increment are important info for Facebook Ads insights
|
|
543
|
+
https://developers.facebook.com/docs/marketing-api/reference/ad-account/insights/
|
|
544
|
+
"""
|
|
545
|
+
time_increment: builtins.str
|
|
558
546
|
def __init__(
|
|
559
547
|
self,
|
|
560
548
|
*,
|
|
@@ -573,11 +561,11 @@ class QueryArgs(google.protobuf.message.Message):
|
|
|
573
561
|
level: builtins.str = ...,
|
|
574
562
|
time_increment: builtins.str = ...,
|
|
575
563
|
) -> None: ...
|
|
576
|
-
def ClearField(self, field_name:
|
|
564
|
+
def ClearField(self, field_name: typing_extensions.Literal["date_ranges", b"date_ranges", "date_where_clause", b"date_where_clause", "group_by_columns", b"group_by_columns", "having_clause", b"having_clause", "incompatible_dimensions", b"incompatible_dimensions", "incompatible_metrics", b"incompatible_metrics", "level", b"level", "limit", b"limit", "metrics", b"metrics", "metrics_expression", b"metrics_expression", "order_by", b"order_by", "sql_explanation", b"sql_explanation", "time_increment", b"time_increment", "where_clause", b"where_clause"]) -> None: ...
|
|
577
565
|
|
|
578
566
|
global___QueryArgs = QueryArgs
|
|
579
567
|
|
|
580
|
-
@
|
|
568
|
+
@typing_extensions.final
|
|
581
569
|
class DatasourceMetadata(google.protobuf.message.Message):
|
|
582
570
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
583
571
|
|
|
@@ -594,6 +582,6 @@ class DatasourceMetadata(google.protobuf.message.Message):
|
|
|
594
582
|
property_id: builtins.str = ...,
|
|
595
583
|
property_name: builtins.str = ...,
|
|
596
584
|
) -> None: ...
|
|
597
|
-
def ClearField(self, field_name:
|
|
585
|
+
def ClearField(self, field_name: typing_extensions.Literal["location", b"location", "property_id", b"property_id", "property_name", b"property_name"]) -> None: ...
|
|
598
586
|
|
|
599
587
|
global___DatasourceMetadata = DatasourceMetadata
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
from typing import List, Optional, Any
|
|
2
|
+
|
|
1
3
|
from findly.unified_reporting_sdk.data_sources.common.reports_client import (
|
|
2
4
|
ReportsClient,
|
|
3
5
|
)
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
from findly.unified_reporting_sdk.data_sources.common.entities import (
|
|
7
|
+
ReportsClientQueryResult,
|
|
8
|
+
)
|
|
8
9
|
from findly.unified_reporting_sdk.protos.findly_semantic_layer_pb2 import (
|
|
9
10
|
Dimension,
|
|
10
11
|
Metric,
|
|
@@ -44,7 +45,7 @@ class Urs(ReportsClient):
|
|
|
44
45
|
|
|
45
46
|
async def query(
|
|
46
47
|
self, query_args: QueryArgs, property_id: str, **kwargs: str
|
|
47
|
-
) -> Optional[
|
|
48
|
+
) -> Optional[ReportsClientQueryResult]:
|
|
48
49
|
return await self._client.query(
|
|
49
50
|
query_args=query_args, property_id=property_id, **kwargs
|
|
50
51
|
)
|
|
@@ -2,33 +2,34 @@ findly/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
2
2
|
findly/unified_reporting_sdk/__init__.py,sha256=1GE1LJq5zf-0fuObZtLXJN6RaxkeByKX3-bgEkzpi6I,342
|
|
3
3
|
findly/unified_reporting_sdk/data_sources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
findly/unified_reporting_sdk/data_sources/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
findly/unified_reporting_sdk/data_sources/common/common_parser.py,sha256=
|
|
5
|
+
findly/unified_reporting_sdk/data_sources/common/common_parser.py,sha256=3pT27dAsOMBUGuBL77hqtiAaNtvjsOUp5ndETGD8I3c,7828
|
|
6
6
|
findly/unified_reporting_sdk/data_sources/common/date_range_helper.py,sha256=z2L1YU1Mzbybkl1wZK_mXL9lKFfG6CEomvlTfADD_80,971
|
|
7
|
-
findly/unified_reporting_sdk/data_sources/common/
|
|
8
|
-
findly/unified_reporting_sdk/data_sources/common/
|
|
7
|
+
findly/unified_reporting_sdk/data_sources/common/entities.py,sha256=vz6V1KaZVqMpLghFOD-KaBGuTikt1rJFzfpkz53gBbU,243
|
|
8
|
+
findly/unified_reporting_sdk/data_sources/common/reports_client.py,sha256=zvr6itv2MSV_O1zlhlgiHSWZNMyyjs-2OQG59aWMZLg,3628
|
|
9
|
+
findly/unified_reporting_sdk/data_sources/common/where_string_comparison.py,sha256=rraEwXe_bo0R1Fbq6-C_Ooz0_J5C0tr1VwHvajKWfsg,8298
|
|
9
10
|
findly/unified_reporting_sdk/data_sources/fb_ads/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
findly/unified_reporting_sdk/data_sources/fb_ads/fb_ads_client.py,sha256=
|
|
11
|
-
findly/unified_reporting_sdk/data_sources/fb_ads/fb_ads_query_args_parser.py,sha256=
|
|
11
|
+
findly/unified_reporting_sdk/data_sources/fb_ads/fb_ads_client.py,sha256=K4Z6cIBNdQWBrD_NKT_QRz8-gJE7YnoOeZmxGhgUT8A,22004
|
|
12
|
+
findly/unified_reporting_sdk/data_sources/fb_ads/fb_ads_query_args_parser.py,sha256=HY-p7gX2vn34UtFtQWDfhps0SJgNtg8Cz5LPW4yDsuQ,31982
|
|
12
13
|
findly/unified_reporting_sdk/data_sources/fb_ads/metadata/action_breakdowns.csv,sha256=FUjp_e4aPnkKPIjCmEq4gOmSInFefAZQNsSs3-rRcLg,1492
|
|
13
14
|
findly/unified_reporting_sdk/data_sources/fb_ads/metadata/breakdowns.csv,sha256=-i_hd5NAJjHkcfMboqemRmnAalZ4Z8TczNzeYuaFnsw,5778
|
|
14
15
|
findly/unified_reporting_sdk/data_sources/fb_ads/metadata/dimensions.jsonl,sha256=066M3G-khDomEBN3BwE2wf5QVTZDucC7Cqr_77CZfN8,16133
|
|
15
16
|
findly/unified_reporting_sdk/data_sources/fb_ads/metadata/fields.csv,sha256=9FQ8yMY7DuD7NG_3vIlbHg-U2O__MQBZ5oRdX5ZeYIE,17708
|
|
16
17
|
findly/unified_reporting_sdk/data_sources/fb_ads/metadata/metrics.jsonl,sha256=k46VIKAOZiuefpo-umQ7SYZnl8I5NIzP7_KITLfL974,19606
|
|
17
18
|
findly/unified_reporting_sdk/data_sources/ga4/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
-
findly/unified_reporting_sdk/data_sources/ga4/ga4_client.py,sha256=
|
|
19
|
-
findly/unified_reporting_sdk/data_sources/ga4/ga4_query_args_parser.py,sha256=
|
|
19
|
+
findly/unified_reporting_sdk/data_sources/ga4/ga4_client.py,sha256=xx2joP4BOObyNPxASjPO2mYuCsGwfYnAvcU_swp3KsI,38297
|
|
20
|
+
findly/unified_reporting_sdk/data_sources/ga4/ga4_query_args_parser.py,sha256=I8iuEqWHUS_S6iXKEXRE1-RVWCOdb1HP11MyTS_fPag,30332
|
|
20
21
|
findly/unified_reporting_sdk/data_sources/ga4/metadata/dimensions.jsonl,sha256=nSecS8Pi0ZTjsd1PlIyqAbYF56Chw2zLYRWetLkG9VQ,33511
|
|
21
22
|
findly/unified_reporting_sdk/data_sources/gsc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
23
|
findly/unified_reporting_sdk/data_sources/gsc/gsc_client.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
24
|
findly/unified_reporting_sdk/data_sources/gsc/gsc_service.py,sha256=uWs9b5qNgmNaqBWml8tkTKGlE1RgXs6Hn8eNZ5fCnZg,1038
|
|
24
25
|
findly/unified_reporting_sdk/protos/.gitignore,sha256=jyvVCY11J1OlOGM-nZCWKSR1vfO6fP65lnH65qf5W20,27
|
|
25
26
|
findly/unified_reporting_sdk/protos/__init__.py,sha256=sfz7Yn3hvQrnhTfoZPGTbo0F1_Fw4X494wPSZojRajA,137
|
|
26
|
-
findly/unified_reporting_sdk/protos/findly_semantic_layer_pb2.py,sha256=
|
|
27
|
-
findly/unified_reporting_sdk/protos/findly_semantic_layer_pb2.pyi,sha256=
|
|
28
|
-
findly/unified_reporting_sdk/urs.py,sha256
|
|
27
|
+
findly/unified_reporting_sdk/protos/findly_semantic_layer_pb2.py,sha256=1QkWH9LLhvbZPDH1HEX2nDblrwBJc3liKfckW93myew,7228
|
|
28
|
+
findly/unified_reporting_sdk/protos/findly_semantic_layer_pb2.pyi,sha256=QwFz5TD5qW3eC7pVODIb8ystAHfHmRvk8Hyj4RzXwvM,31012
|
|
29
|
+
findly/unified_reporting_sdk/urs.py,sha256=-vhOFpi-M0uo_tZ_O_hTDDEGO-ATf78nqEf5JhIcaz4,2956
|
|
29
30
|
findly/unified_reporting_sdk/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
31
|
findly/unified_reporting_sdk/util/create_numeric_string_series.py,sha256=MmufpYatIhcVxA9e3H1dR1CrejXRnA8j4NNjJxfvBVA,457
|
|
31
|
-
findly_unified_reporting_sdk-0.
|
|
32
|
-
findly_unified_reporting_sdk-0.
|
|
33
|
-
findly_unified_reporting_sdk-0.
|
|
34
|
-
findly_unified_reporting_sdk-0.
|
|
32
|
+
findly_unified_reporting_sdk-0.7.1.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
33
|
+
findly_unified_reporting_sdk-0.7.1.dist-info/METADATA,sha256=2TPLRnZFIBNXP9E1H7w--htXoHTjJ9qz7rPlDtgwtHY,3159
|
|
34
|
+
findly_unified_reporting_sdk-0.7.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
35
|
+
findly_unified_reporting_sdk-0.7.1.dist-info/RECORD,,
|
|
File without changes
|
{findly_unified_reporting_sdk-0.6.22.dist-info → findly_unified_reporting_sdk-0.7.1.dist-info}/WHEEL
RENAMED
|
File without changes
|