findly.unified-reporting-sdk 0.7.12__py3-none-any.whl → 0.7.14__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.
@@ -11,10 +11,6 @@ from findly.unified_reporting_sdk.data_sources.common.common_parser import (
11
11
  RESERVED_TOTAL,
12
12
  )
13
13
 
14
- from findly.unified_reporting_sdk.util.create_numeric_string_series import (
15
- create_numeric_string_series,
16
- )
17
-
18
14
  from findly.unified_reporting_sdk.data_sources.common.where_string_comparison import (
19
15
  parse_where_column_condition,
20
16
  WhereClauseInformation,
@@ -333,8 +329,6 @@ class FbAdsQueryArgsParser(CommonParser):
333
329
 
334
330
  # remove duplicates from explosions and reset index
335
331
  df = df.drop_duplicates().reset_index(drop=True)
336
- # Also cap float columns to 2 decimal places
337
- df = df.apply(create_numeric_string_series)
338
332
 
339
333
  # At last, return that if there is only one date range,
340
334
  # else, we need to split the dataframe into multiple dataframes
@@ -555,9 +549,6 @@ class FbAdsQueryArgsParser(CommonParser):
555
549
  # Keep only the first row
556
550
  summary_df = summary_df.head(1)
557
551
 
558
- # Also cap float columns to 2 decimal places
559
- summary_df = summary_df.apply(create_numeric_string_series)
560
-
561
552
  return [summary_df]
562
553
 
563
554
  async def parse_query_args_to_request_params(
@@ -83,14 +83,14 @@ class GA4QueryArgsParser(CommonParser):
83
83
  # Check if the metric header ends with 'Rate'
84
84
  if header.endswith("Rate"):
85
85
  # Convert the value to a float and multiply by 100
86
- value_number = round(float(value) * 100, 2)
86
+ value_number = float(value) * 100
87
87
  else:
88
88
  # Cap float values to 2 decimal places
89
89
  value_number = float(value)
90
90
  if value_number.is_integer():
91
91
  value_number = int(value_number)
92
92
  else:
93
- value_number = round(value_number, 2)
93
+ value_number = value_number
94
94
  row_dict[header] = value_number
95
95
 
96
96
  rows.append(row_dict)
@@ -228,17 +228,17 @@ class GA4QueryArgsParser(CommonParser):
228
228
  # Remove duplicates from metrics and dimensions to avoid redundant processing.
229
229
  unique_metrics = list(dict.fromkeys(query_args.metrics))
230
230
  unique_dimensions = list(dict.fromkeys(query_args.group_by_columns))
231
-
231
+
232
232
  ga4_metrics_list = await self.get_metrics(
233
233
  metrics_name_list=unique_metrics,
234
234
  )
235
235
  LOGGER.info("sucessfully got metrics")
236
-
236
+
237
237
  ga4_dimensions_list = await self.get_dimensions(
238
238
  dimensions_name_list=unique_dimensions,
239
239
  )
240
240
  LOGGER.info("sucessfully got dimensions")
241
-
241
+
242
242
  ga4_date_ranges = self.get_date_ranges(
243
243
  date_str_range_list=(
244
244
  list(query_args.date_ranges)
@@ -248,7 +248,7 @@ class GA4QueryArgsParser(CommonParser):
248
248
  format_function=format_ga4_date_ranges_default,
249
249
  )
250
250
  LOGGER.info("sucessfully got date ranges")
251
-
251
+
252
252
  ga4_order_by_list = await self.get_order_by(
253
253
  order_by_list=(
254
254
  list(query_args.order_by) if query_args.order_by is not None else None
@@ -257,17 +257,17 @@ class GA4QueryArgsParser(CommonParser):
257
257
  order_by_dimensions_candidates=list(query_args.group_by_columns),
258
258
  )
259
259
  LOGGER.info("sucessfully got order by")
260
-
260
+
261
261
  ga4_dimension_filter_list = await self.get_filter_clause(
262
262
  filter_clause=query_args.where_clause
263
263
  )
264
264
  LOGGER.info("sucessfully got dimension filter")
265
-
265
+
266
266
  ga4_metrics_filter_list = await self.get_filter_clause(
267
267
  filter_clause=query_args.having_clause
268
268
  )
269
269
  LOGGER.info("sucessfully got metrics filter")
270
-
270
+
271
271
  LOGGER.info(
272
272
  {
273
273
  "msg": "query_parts",
@@ -283,7 +283,7 @@ class GA4QueryArgsParser(CommonParser):
283
283
  "limit": query_args.limit,
284
284
  }
285
285
  )
286
-
286
+
287
287
  ga4_request = {
288
288
  "metrics": ga4_metrics_list,
289
289
  "dimensions": ga4_dimensions_list,
@@ -8,48 +8,35 @@ from googleapiclient.discovery import Resource
8
8
 
9
9
 
10
10
  class Sites(Protocol):
11
- def add(self) -> None:
12
- ...
11
+ def add(self) -> None: ...
13
12
 
14
- def delete(self) -> None:
15
- ...
13
+ def delete(self) -> None: ...
16
14
 
17
- def get(self) -> None:
18
- ...
15
+ def get(self) -> None: ...
19
16
 
20
- def list(self) -> HttpRequest:
21
- ...
17
+ def list(self) -> HttpRequest: ...
22
18
 
23
19
 
24
20
  class SearchAnalytics(Protocol):
25
21
  class SearchAnalyticsQueryKwargs(TypedDict):
26
22
  siteUrl: str
27
23
 
28
- def query(self, **kwargs: Unpack[SearchAnalyticsQueryKwargs]) -> HttpRequest:
29
- ...
24
+ def query(self, **kwargs: Unpack[SearchAnalyticsQueryKwargs]) -> HttpRequest: ...
30
25
 
31
- def close(self) -> None:
32
- ...
26
+ def close(self) -> None: ...
33
27
 
34
28
 
35
29
  class GscService(Protocol):
36
- def close(self) -> None:
37
- ...
30
+ def close(self) -> None: ...
38
31
 
39
- def new_batch_http_request(self) -> None:
40
- ...
32
+ def new_batch_http_request(self) -> None: ...
41
33
 
42
- def searchanalytics(self) -> SearchAnalytics:
43
- ...
34
+ def searchanalytics(self) -> SearchAnalytics: ...
44
35
 
45
- def sitemaps(self) -> None:
46
- ...
36
+ def sitemaps(self) -> None: ...
47
37
 
48
- def sites(self) -> Sites:
49
- ...
38
+ def sites(self) -> Sites: ...
50
39
 
51
- def urlInspection(self) -> None:
52
- ...
40
+ def urlInspection(self) -> None: ...
53
41
 
54
- def urlTestingTools(self) -> None:
55
- ...
42
+ def urlTestingTools(self) -> None: ...
@@ -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\"\x93\x03\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\x12\x1d\n\x15main_data_source_name\x18\x0f \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
- _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
19
- _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'findly_semantic_layer_pb2', globals())
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=1495
26
- _DATASOURCEINTEGRATION._serialized_end=1593
27
- _DATEGRANULARITY._serialized_start=1595
28
- _DATEGRANULARITY._serialized_end=1678
29
- _AGGREGATION._serialized_start=1680
30
- _AGGREGATION._serialized_end=1807
31
- _DIMENSIONTYPE._serialized_start=1810
32
- _DIMENSIONTYPE._serialized_end=1981
33
- _DIMENSIONVALUETYPE._serialized_start=1984
34
- _DIMENSIONVALUETYPE._serialized_end=2116
35
- _METRICTYPE._serialized_start=2118
36
- _METRICTYPE._serialized_end=2229
37
- _METRICVALUETYPE._serialized_start=2232
38
- _METRICVALUETYPE._serialized_end=2865
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=1362
49
- _DATASOURCEMETADATA._serialized_start=1365
50
- _DATASOURCEMETADATA._serialized_end=1493
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=1495
26
+ _globals['_DATASOURCEINTEGRATION']._serialized_end=1593
27
+ _globals['_DATEGRANULARITY']._serialized_start=1595
28
+ _globals['_DATEGRANULARITY']._serialized_end=1678
29
+ _globals['_AGGREGATION']._serialized_start=1680
30
+ _globals['_AGGREGATION']._serialized_end=1807
31
+ _globals['_DIMENSIONTYPE']._serialized_start=1810
32
+ _globals['_DIMENSIONTYPE']._serialized_end=1981
33
+ _globals['_DIMENSIONVALUETYPE']._serialized_start=1984
34
+ _globals['_DIMENSIONVALUETYPE']._serialized_end=2116
35
+ _globals['_METRICTYPE']._serialized_start=2118
36
+ _globals['_METRICTYPE']._serialized_end=2229
37
+ _globals['_METRICVALUETYPE']._serialized_start=2232
38
+ _globals['_METRICVALUETYPE']._serialized_end=2865
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=1362
49
+ _globals['_DATASOURCEMETADATA']._serialized_start=1365
50
+ _globals['_DATASOURCEMETADATA']._serialized_end=1493
51
51
  # @@protoc_insertion_point(module_scope)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: findly.unified-reporting-sdk
3
- Version: 0.7.12
3
+ Version: 0.7.14
4
4
  Summary:
5
5
  License: GPL-3.0-only
6
6
  Requires-Python: >=3.9,<4.0
@@ -13,14 +13,14 @@ Classifier: Programming Language :: Python :: 3.12
13
13
  Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Dist: aiocache (>=0.12.2,<0.13.0)
15
15
  Requires-Dist: backoff (>=2.2.1,<3.0.0)
16
- Requires-Dist: facebook-business (>=21.0.5,<22.0.0)
17
- Requires-Dist: google-analytics-admin (>=0.22.7,<0.23.0)
18
- Requires-Dist: google-analytics-data (>=0.18.8,<0.19.0)
19
- Requires-Dist: google-api-python-client (>=2.122.0,<3.0.0)
16
+ Requires-Dist: facebook-business (>=22.0.5,<23.0.0)
17
+ Requires-Dist: google-analytics-admin (>=0.24.0,<0.25.0)
18
+ Requires-Dist: google-analytics-data (>=0.18.18,<0.19.0)
19
+ Requires-Dist: google-api-python-client (>=2.169.0,<3.0.0)
20
20
  Requires-Dist: oauth2client (>=4.1.3,<5.0.0)
21
21
  Requires-Dist: pandas (>=2.2.3,<3.0.0)
22
22
  Requires-Dist: protobuf (>=4.25.3,<5.0.0)
23
- Requires-Dist: sqlglot (>=25.25.1,<26.0.0)
23
+ Requires-Dist: sqlglot (>=26.17.1,<27.0.0)
24
24
  Description-Content-Type: text/markdown
25
25
 
26
26
  # Unified Reporting SDK (URS)
@@ -9,7 +9,7 @@ findly/unified_reporting_sdk/data_sources/common/reports_client.py,sha256=zvr6it
9
9
  findly/unified_reporting_sdk/data_sources/common/where_string_comparison.py,sha256=rraEwXe_bo0R1Fbq6-C_Ooz0_J5C0tr1VwHvajKWfsg,8298
10
10
  findly/unified_reporting_sdk/data_sources/fb_ads/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
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=eh9yp6bLJzPP9hY8CNDiBAcfZ6G-aYmgCfsr2wWBQ4c,31791
12
+ findly/unified_reporting_sdk/data_sources/fb_ads/fb_ads_query_args_parser.py,sha256=GKzJXCgQd4FUziMSXKch4eyLk8rK9DsIyLQN7rAc2NY,31442
13
13
  findly/unified_reporting_sdk/data_sources/fb_ads/metadata/action_breakdowns.csv,sha256=FUjp_e4aPnkKPIjCmEq4gOmSInFefAZQNsSs3-rRcLg,1492
14
14
  findly/unified_reporting_sdk/data_sources/fb_ads/metadata/breakdowns.csv,sha256=-i_hd5NAJjHkcfMboqemRmnAalZ4Z8TczNzeYuaFnsw,5778
15
15
  findly/unified_reporting_sdk/data_sources/fb_ads/metadata/dimensions.jsonl,sha256=066M3G-khDomEBN3BwE2wf5QVTZDucC7Cqr_77CZfN8,16133
@@ -17,19 +17,17 @@ findly/unified_reporting_sdk/data_sources/fb_ads/metadata/fields.csv,sha256=9FQ8
17
17
  findly/unified_reporting_sdk/data_sources/fb_ads/metadata/metrics.jsonl,sha256=k46VIKAOZiuefpo-umQ7SYZnl8I5NIzP7_KITLfL974,19606
18
18
  findly/unified_reporting_sdk/data_sources/ga4/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  findly/unified_reporting_sdk/data_sources/ga4/ga4_client.py,sha256=_HDaDyxecq5CRxyGi1FcGeMismxhqgg598ISMrpIvrQ,39901
20
- findly/unified_reporting_sdk/data_sources/ga4/ga4_query_args_parser.py,sha256=3UyjOGb7U494v697lSSrKZMxtm5iBYYEgirbOVbkDhc,30256
20
+ findly/unified_reporting_sdk/data_sources/ga4/ga4_query_args_parser.py,sha256=-s9iLTuFvpxx4NGll6GrUNQ_Exc_3UDZOFJ8EdPBYiA,30200
21
21
  findly/unified_reporting_sdk/data_sources/ga4/metadata/dimensions.jsonl,sha256=nSecS8Pi0ZTjsd1PlIyqAbYF56Chw2zLYRWetLkG9VQ,33511
22
22
  findly/unified_reporting_sdk/data_sources/gsc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  findly/unified_reporting_sdk/data_sources/gsc/gsc_client.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- findly/unified_reporting_sdk/data_sources/gsc/gsc_service.py,sha256=uWs9b5qNgmNaqBWml8tkTKGlE1RgXs6Hn8eNZ5fCnZg,1038
24
+ findly/unified_reporting_sdk/data_sources/gsc/gsc_service.py,sha256=C6wm38Hu-UozFll71G3b03e2hgLFiC4I5yjcuo9hB4M,934
25
25
  findly/unified_reporting_sdk/protos/.gitignore,sha256=jyvVCY11J1OlOGM-nZCWKSR1vfO6fP65lnH65qf5W20,27
26
26
  findly/unified_reporting_sdk/protos/__init__.py,sha256=sfz7Yn3hvQrnhTfoZPGTbo0F1_Fw4X494wPSZojRajA,137
27
- findly/unified_reporting_sdk/protos/findly_semantic_layer_pb2.py,sha256=aVZGPhrYEKN8PExrm8GzAZJI6Yzip8XxfIaDJlh4R88,6925
27
+ findly/unified_reporting_sdk/protos/findly_semantic_layer_pb2.py,sha256=SaY46pOt8sDiVWrpY_f0uDwfgm_OPcHUkCdetnbPnUw,7279
28
28
  findly/unified_reporting_sdk/protos/findly_semantic_layer_pb2.pyi,sha256=jjoQm4TljpS8pcF6bqj21ygTQ-ayCzS3ScrRtbd5hPA,31043
29
29
  findly/unified_reporting_sdk/urs.py,sha256=-vhOFpi-M0uo_tZ_O_hTDDEGO-ATf78nqEf5JhIcaz4,2956
30
- findly/unified_reporting_sdk/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- findly/unified_reporting_sdk/util/create_numeric_string_series.py,sha256=MmufpYatIhcVxA9e3H1dR1CrejXRnA8j4NNjJxfvBVA,457
32
- findly_unified_reporting_sdk-0.7.12.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
33
- findly_unified_reporting_sdk-0.7.12.dist-info/METADATA,sha256=A1mP7CEhr2UE0ziHqH6cM-lwDNckYgHeoPI6nfmN4Qs,3212
34
- findly_unified_reporting_sdk-0.7.12.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
35
- findly_unified_reporting_sdk-0.7.12.dist-info/RECORD,,
30
+ findly_unified_reporting_sdk-0.7.14.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
31
+ findly_unified_reporting_sdk-0.7.14.dist-info/METADATA,sha256=0zNhdl6yBerd1pxBEOGD0qA-K67Hni8_yLi63-8brvo,3213
32
+ findly_unified_reporting_sdk-0.7.14.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
33
+ findly_unified_reporting_sdk-0.7.14.dist-info/RECORD,,
File without changes
@@ -1,16 +0,0 @@
1
- import pandas as pd
2
-
3
- DEFAULT_FLOAT_PRECISION = 2
4
-
5
-
6
- def create_numeric_string_series(
7
- col: pd.Series, precision: int = DEFAULT_FLOAT_PRECISION
8
- ) -> pd.Series:
9
- try:
10
- numeric_col: pd.Series = pd.to_numeric(col)
11
- if (numeric_col.dropna() % 1 == 0).all():
12
- return numeric_col.astype(int).astype(str)
13
- else:
14
- return numeric_col.astype(float).round(precision).astype(str)
15
- except Exception:
16
- return col