looker-sdk 25.4.0__py3-none-any.whl → 25.8.0__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.
@@ -21,7 +21,7 @@
21
21
  # SOFTWARE.
22
22
  #
23
23
 
24
- # 469 API methods
24
+ # 471 API methods
25
25
 
26
26
 
27
27
  # NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0
@@ -889,9 +889,6 @@ class Looker40SDK(api_methods.APIMethods):
889
889
  # it to disk, do not pass it to a third party, and only pass it through a secure HTTPS
890
890
  # encrypted transport.
891
891
  #
892
- #
893
- # **NOTE**: Calls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.
894
- #
895
892
  # POST /embed/token_url/me -> mdls.EmbedUrlResponse
896
893
  def create_embed_url_as_me(
897
894
  self,
@@ -4882,6 +4879,8 @@ class Looker40SDK(api_methods.APIMethods):
4882
4879
  # Any UDD (a dashboard which exists in the Looker database rather than as a LookML file) which has a `lookml_link_id`
4883
4880
  # property value referring to a LookML dashboard's id (model::dashboardname) will be updated so that it matches the current state of the LookML dashboard.
4884
4881
  #
4882
+ # If the dashboard_ids parameter is specified, only the dashboards with the specified ids will be updated.
4883
+ #
4885
4884
  # For this operation to succeed the user must have permission to view the LookML dashboard, and only linked dashboards
4886
4885
  # that the user has permission to update will be synced.
4887
4886
  #
@@ -4892,9 +4891,10 @@ class Looker40SDK(api_methods.APIMethods):
4892
4891
  self,
4893
4892
  # Id of LookML dashboard, in the form 'model::dashboardname'
4894
4893
  lookml_dashboard_id: str,
4895
- body: mdls.WriteDashboard,
4896
4894
  # If true, and this dashboard is localized, export it with the raw keys, not localized.
4897
4895
  raw_locale: Optional[bool] = None,
4896
+ # An array of UDD dashboard IDs to sync. If not specified, all UDD dashboards will be synced.
4897
+ dashboard_ids: Optional[mdls.DelimSequence[str]] = None,
4898
4898
  transport_options: Optional[transport.TransportOptions] = None,
4899
4899
  ) -> Sequence[int]:
4900
4900
  """Sync LookML Dashboard"""
@@ -4904,8 +4904,7 @@ class Looker40SDK(api_methods.APIMethods):
4904
4904
  self.patch(
4905
4905
  path=f"/dashboards/{lookml_dashboard_id}/sync",
4906
4906
  structure=Sequence[int],
4907
- query_params={"raw_locale": raw_locale},
4908
- body=body,
4907
+ query_params={"raw_locale": raw_locale, "dashboard_ids": dashboard_ids},
4909
4908
  transport_options=transport_options,
4910
4909
  ),
4911
4910
  )
@@ -8795,6 +8794,59 @@ class Looker40SDK(api_methods.APIMethods):
8795
8794
  )
8796
8795
  return response
8797
8796
 
8797
+ # ### Fetches a CI Run.
8798
+ #
8799
+ # GET /projects/{project_id}/ci/runs/{run_id} -> mdls.ProjectCIRun
8800
+ def get_ci_run(
8801
+ self,
8802
+ # Project Id
8803
+ project_id: str,
8804
+ # Run Id
8805
+ run_id: str,
8806
+ # Requested fields
8807
+ fields: Optional[str] = None,
8808
+ transport_options: Optional[transport.TransportOptions] = None,
8809
+ ) -> mdls.ProjectCIRun:
8810
+ """Fetch Continuous Integration run"""
8811
+ project_id = self.encode_path_param(project_id)
8812
+ run_id = self.encode_path_param(run_id)
8813
+ response = cast(
8814
+ mdls.ProjectCIRun,
8815
+ self.get(
8816
+ path=f"/projects/{project_id}/ci/runs/{run_id}",
8817
+ structure=mdls.ProjectCIRun,
8818
+ query_params={"fields": fields},
8819
+ transport_options=transport_options,
8820
+ ),
8821
+ )
8822
+ return response
8823
+
8824
+ # ### Creates a CI Run.
8825
+ #
8826
+ # POST /projects/{project_id}/ci/run -> mdls.CreateCIRunResponse
8827
+ def create_ci_run(
8828
+ self,
8829
+ # Project Id
8830
+ project_id: str,
8831
+ body: mdls.CreateCIRunRequest,
8832
+ # Requested fields
8833
+ fields: Optional[str] = None,
8834
+ transport_options: Optional[transport.TransportOptions] = None,
8835
+ ) -> mdls.CreateCIRunResponse:
8836
+ """Create a Continuous Integration run"""
8837
+ project_id = self.encode_path_param(project_id)
8838
+ response = cast(
8839
+ mdls.CreateCIRunResponse,
8840
+ self.post(
8841
+ path=f"/projects/{project_id}/ci/run",
8842
+ structure=mdls.CreateCIRunResponse,
8843
+ query_params={"fields": fields},
8844
+ body=body,
8845
+ transport_options=transport_options,
8846
+ ),
8847
+ )
8848
+ return response
8849
+
8798
8850
  # ### Configure Repository Credential for a remote dependency
8799
8851
  #
8800
8852
  # Admin required.
@@ -21,7 +21,7 @@
21
21
  # SOFTWARE.
22
22
  #
23
23
 
24
- # 344 API models: 260 Spec, 0 Request, 62 Write, 22 Enum
24
+ # 373 API models: 287 Spec, 0 Request, 62 Write, 24 Enum
25
25
 
26
26
 
27
27
  # NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0
@@ -620,6 +620,151 @@ class ArtifactUsage(model.Model):
620
620
  self.usage = usage
621
621
 
622
622
 
623
+ @attr.s(auto_attribs=True, init=False)
624
+ class AssertValidatorErrorItem(model.Model):
625
+ """
626
+ Attributes:
627
+ assert_error:
628
+ generic_error:
629
+ """
630
+
631
+ assert_error: Optional["AssertValidatorTestError"] = None
632
+ generic_error: Optional["GenericError"] = None
633
+
634
+ def __init__(
635
+ self,
636
+ *,
637
+ assert_error: Optional["AssertValidatorTestError"] = None,
638
+ generic_error: Optional["GenericError"] = None
639
+ ):
640
+ self.assert_error = assert_error
641
+ self.generic_error = generic_error
642
+
643
+
644
+ @attr.s(auto_attribs=True, init=False)
645
+ class AssertValidatorResult(model.Model):
646
+ """
647
+ Attributes:
648
+ name: Name of the validator (assert)
649
+ status: Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)
650
+ results: Results of the validation
651
+ """
652
+
653
+ name: Optional[str] = None
654
+ status: Optional[str] = None
655
+ results: Optional[Sequence["AssertValidatorTestedExplore"]] = None
656
+
657
+ def __init__(
658
+ self,
659
+ *,
660
+ name: Optional[str] = None,
661
+ status: Optional[str] = None,
662
+ results: Optional[Sequence["AssertValidatorTestedExplore"]] = None
663
+ ):
664
+ self.name = name
665
+ self.status = status
666
+ self.results = results
667
+
668
+
669
+ @attr.s(auto_attribs=True, init=False)
670
+ class AssertValidatorTestedExplore(model.Model):
671
+ """
672
+ Attributes:
673
+ error_count: Total number of failed data tests
674
+ errors: Details of data tests that failed validation
675
+ success_count: Total number of successful data tests
676
+ successes: Details of data tests that passed validation
677
+ """
678
+
679
+ error_count: Optional[int] = None
680
+ errors: Optional[Sequence["AssertValidatorErrorItem"]] = None
681
+ success_count: Optional[str] = None
682
+ successes: Optional[Sequence["AssertValidatorTestSuccess"]] = None
683
+
684
+ def __init__(
685
+ self,
686
+ *,
687
+ error_count: Optional[int] = None,
688
+ errors: Optional[Sequence["AssertValidatorErrorItem"]] = None,
689
+ success_count: Optional[str] = None,
690
+ successes: Optional[Sequence["AssertValidatorTestSuccess"]] = None
691
+ ):
692
+ self.error_count = error_count
693
+ self.errors = errors
694
+ self.success_count = success_count
695
+ self.successes = successes
696
+
697
+
698
+ @attr.s(auto_attribs=True, init=False)
699
+ class AssertValidatorTestError(model.Model):
700
+ """
701
+ Attributes:
702
+ model: LookML model that contains the data test
703
+ explore: LookML Explore that is used as the explore_source for the data test
704
+ test_name: Name of the data test
705
+ explore_url: URL to the Explore
706
+ lookml_url: URL to the LookML file where the data test is defined
707
+ message: Message returned by the data test
708
+ """
709
+
710
+ model: Optional[str] = None
711
+ explore: Optional[str] = None
712
+ test_name: Optional[str] = None
713
+ explore_url: Optional[str] = None
714
+ lookml_url: Optional[str] = None
715
+ message: Optional[str] = None
716
+
717
+ def __init__(
718
+ self,
719
+ *,
720
+ model: Optional[str] = None,
721
+ explore: Optional[str] = None,
722
+ test_name: Optional[str] = None,
723
+ explore_url: Optional[str] = None,
724
+ lookml_url: Optional[str] = None,
725
+ message: Optional[str] = None
726
+ ):
727
+ self.model = model
728
+ self.explore = explore
729
+ self.test_name = test_name
730
+ self.explore_url = explore_url
731
+ self.lookml_url = lookml_url
732
+ self.message = message
733
+
734
+
735
+ @attr.s(auto_attribs=True, init=False)
736
+ class AssertValidatorTestSuccess(model.Model):
737
+ """
738
+ Attributes:
739
+ model: LookML model that contains the data test
740
+ explore: LookML Explore that is used as the explore_source for the data test
741
+ test_name: Name of the data test
742
+ explore_url: URL to the Explore
743
+ lookml_url: URL to the LookML file where the data test is defined
744
+ """
745
+
746
+ model: Optional[str] = None
747
+ explore: Optional[str] = None
748
+ test_name: Optional[str] = None
749
+ explore_url: Optional[str] = None
750
+ lookml_url: Optional[str] = None
751
+
752
+ def __init__(
753
+ self,
754
+ *,
755
+ model: Optional[str] = None,
756
+ explore: Optional[str] = None,
757
+ test_name: Optional[str] = None,
758
+ explore_url: Optional[str] = None,
759
+ lookml_url: Optional[str] = None
760
+ ):
761
+ self.model = model
762
+ self.explore = explore
763
+ self.test_name = test_name
764
+ self.explore_url = explore_url
765
+ self.lookml_url = lookml_url
766
+
767
+
623
768
  @attr.s(auto_attribs=True, init=False)
624
769
  class BackupConfiguration(model.Model):
625
770
  """
@@ -917,6 +1062,219 @@ class Category(enum.Enum):
917
1062
  Category.__new__ = model.safe_enum__new__ # type: ignore
918
1063
 
919
1064
 
1065
+ @attr.s(auto_attribs=True, init=False)
1066
+ class CIChangeRequest(model.Model):
1067
+ """
1068
+ Attributes:
1069
+ change_request_number: Numeric identifier of the change request
1070
+ change_request_url: URL of the change request
1071
+ change_request_name: Name of the change request
1072
+ change_request_commits_url: For PR-triggered CI runs, the URL to the change request commit that triggered the run.
1073
+ """
1074
+
1075
+ change_request_number: Optional[int] = None
1076
+ change_request_url: Optional[str] = None
1077
+ change_request_name: Optional[str] = None
1078
+ change_request_commits_url: Optional[str] = None
1079
+
1080
+ def __init__(
1081
+ self,
1082
+ *,
1083
+ change_request_number: Optional[int] = None,
1084
+ change_request_url: Optional[str] = None,
1085
+ change_request_name: Optional[str] = None,
1086
+ change_request_commits_url: Optional[str] = None
1087
+ ):
1088
+ self.change_request_number = change_request_number
1089
+ self.change_request_url = change_request_url
1090
+ self.change_request_name = change_request_name
1091
+ self.change_request_commits_url = change_request_commits_url
1092
+
1093
+
1094
+ @attr.s(auto_attribs=True, init=False)
1095
+ class CIGitState(model.Model):
1096
+ """
1097
+ Attributes:
1098
+ branch: Git branch that the CI run validates
1099
+ repository: Git repository that contains the Git branch being validated
1100
+ commit_ref: Git commit that the CI run validates
1101
+ target: For incremental runs, the Git branch that the CI run compares against during validation
1102
+ """
1103
+
1104
+ branch: Optional[str] = None
1105
+ repository: Optional[str] = None
1106
+ commit_ref: Optional[str] = None
1107
+ target: Optional[str] = None
1108
+
1109
+ def __init__(
1110
+ self,
1111
+ *,
1112
+ branch: Optional[str] = None,
1113
+ repository: Optional[str] = None,
1114
+ commit_ref: Optional[str] = None,
1115
+ target: Optional[str] = None
1116
+ ):
1117
+ self.branch = branch
1118
+ self.repository = repository
1119
+ self.commit_ref = commit_ref
1120
+ self.target = target
1121
+
1122
+
1123
+ @attr.s(auto_attribs=True, init=False)
1124
+ class CIRun(model.Model):
1125
+ """
1126
+ Attributes:
1127
+ run_id: ID of the CI run
1128
+ created_at: Time and date that the CI run was initiated
1129
+ started_at: Time and date that the CI run began executing
1130
+ finished_at: Time and date that the CI run completed
1131
+ status_url: Git provider URL where you can view the commit status. This is the status URL that you specify when you create a CI suite
1132
+ status: Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running)
1133
+ git_service: Git service for CI run (e.g. GitHub)
1134
+ git_state:
1135
+ result:
1136
+ schedule:
1137
+ target_branch: Git branch that the CI run compares against during validation, used for incremental runs
1138
+ title: Name of the CI suite
1139
+ trigger: Trigger for CI run (unknown, manual, schedule, change_request)
1140
+ change_request:
1141
+ suite_id: ID of the CI suite
1142
+ username: Username of the user who triggered the CI run, if the CI run was manually triggered
1143
+ """
1144
+
1145
+ run_id: Optional[str] = None
1146
+ created_at: Optional[datetime.datetime] = None
1147
+ started_at: Optional[datetime.datetime] = None
1148
+ finished_at: Optional[datetime.datetime] = None
1149
+ status_url: Optional[str] = None
1150
+ status: Optional[str] = None
1151
+ git_service: Optional[str] = None
1152
+ git_state: Optional["CIGitState"] = None
1153
+ result: Optional["CIRunResult"] = None
1154
+ schedule: Optional["CIScheduleTrigger"] = None
1155
+ target_branch: Optional[str] = None
1156
+ title: Optional[str] = None
1157
+ trigger: Optional[str] = None
1158
+ change_request: Optional["CIChangeRequest"] = None
1159
+ suite_id: Optional[str] = None
1160
+ username: Optional[str] = None
1161
+
1162
+ def __init__(
1163
+ self,
1164
+ *,
1165
+ run_id: Optional[str] = None,
1166
+ created_at: Optional[datetime.datetime] = None,
1167
+ started_at: Optional[datetime.datetime] = None,
1168
+ finished_at: Optional[datetime.datetime] = None,
1169
+ status_url: Optional[str] = None,
1170
+ status: Optional[str] = None,
1171
+ git_service: Optional[str] = None,
1172
+ git_state: Optional["CIGitState"] = None,
1173
+ result: Optional["CIRunResult"] = None,
1174
+ schedule: Optional["CIScheduleTrigger"] = None,
1175
+ target_branch: Optional[str] = None,
1176
+ title: Optional[str] = None,
1177
+ trigger: Optional[str] = None,
1178
+ change_request: Optional["CIChangeRequest"] = None,
1179
+ suite_id: Optional[str] = None,
1180
+ username: Optional[str] = None
1181
+ ):
1182
+ self.run_id = run_id
1183
+ self.created_at = created_at
1184
+ self.started_at = started_at
1185
+ self.finished_at = finished_at
1186
+ self.status_url = status_url
1187
+ self.status = status
1188
+ self.git_service = git_service
1189
+ self.git_state = git_state
1190
+ self.result = result
1191
+ self.schedule = schedule
1192
+ self.target_branch = target_branch
1193
+ self.title = title
1194
+ self.trigger = trigger
1195
+ self.change_request = change_request
1196
+ self.suite_id = suite_id
1197
+ self.username = username
1198
+
1199
+
1200
+ @attr.s(auto_attribs=True, init=False)
1201
+ class CIRunResult(model.Model):
1202
+ """
1203
+ Attributes:
1204
+ sql_result:
1205
+ sql_error:
1206
+ assert_result:
1207
+ assert_error:
1208
+ content_result:
1209
+ content_error:
1210
+ lookml_result:
1211
+ lookml_error:
1212
+ generic_error:
1213
+ """
1214
+
1215
+ sql_result: Optional["SqlValidatorResult"] = None
1216
+ sql_error: Optional["GenericError"] = None
1217
+ assert_result: Optional["AssertValidatorResult"] = None
1218
+ assert_error: Optional["GenericError"] = None
1219
+ content_result: Optional["ContentValidatorResult"] = None
1220
+ content_error: Optional["GenericError"] = None
1221
+ lookml_result: Optional["LookMLValidatorResult"] = None
1222
+ lookml_error: Optional["GenericError"] = None
1223
+ generic_error: Optional["GenericError"] = None
1224
+
1225
+ def __init__(
1226
+ self,
1227
+ *,
1228
+ sql_result: Optional["SqlValidatorResult"] = None,
1229
+ sql_error: Optional["GenericError"] = None,
1230
+ assert_result: Optional["AssertValidatorResult"] = None,
1231
+ assert_error: Optional["GenericError"] = None,
1232
+ content_result: Optional["ContentValidatorResult"] = None,
1233
+ content_error: Optional["GenericError"] = None,
1234
+ lookml_result: Optional["LookMLValidatorResult"] = None,
1235
+ lookml_error: Optional["GenericError"] = None,
1236
+ generic_error: Optional["GenericError"] = None
1237
+ ):
1238
+ self.sql_result = sql_result
1239
+ self.sql_error = sql_error
1240
+ self.assert_result = assert_result
1241
+ self.assert_error = assert_error
1242
+ self.content_result = content_result
1243
+ self.content_error = content_error
1244
+ self.lookml_result = lookml_result
1245
+ self.lookml_error = lookml_error
1246
+ self.generic_error = generic_error
1247
+
1248
+
1249
+ @attr.s(auto_attribs=True, init=False)
1250
+ class CIScheduleTrigger(model.Model):
1251
+ """
1252
+ Attributes:
1253
+ enabled: Whether the CI run schedule is active
1254
+ day: For scheduled runs, day of the week that the CI run is scheduled
1255
+ hour: For schedules runs, the hour of the day (24 hour format) that the CI run is scheduled
1256
+ frequency: For scheduled runs, how often the CI run is scheduled to run (hourly, daily, weekly)
1257
+ """
1258
+
1259
+ enabled: Optional[bool] = None
1260
+ day: Optional[str] = None
1261
+ hour: Optional[str] = None
1262
+ frequency: Optional[str] = None
1263
+
1264
+ def __init__(
1265
+ self,
1266
+ *,
1267
+ enabled: Optional[bool] = None,
1268
+ day: Optional[str] = None,
1269
+ hour: Optional[str] = None,
1270
+ frequency: Optional[str] = None
1271
+ ):
1272
+ self.enabled = enabled
1273
+ self.day = day
1274
+ self.hour = hour
1275
+ self.frequency = frequency
1276
+
1277
+
920
1278
  @attr.s(auto_attribs=True, init=False)
921
1279
  class ColorCollection(model.Model):
922
1280
  """
@@ -1771,6 +2129,75 @@ class ContentValidationScheduledPlan(model.Model):
1771
2129
  self.id = id
1772
2130
 
1773
2131
 
2132
+ @attr.s(auto_attribs=True, init=False)
2133
+ class ContentValidatorContentError(model.Model):
2134
+ """
2135
+ Attributes:
2136
+ type: A URI reference that identifies the problem type
2137
+ title: Overview of the error
2138
+ detail: Detail of the error
2139
+ status: The HTTP status code for the problem
2140
+ instance: URI reference that identifies the specific occurrence of the problem
2141
+ model: LookML model that contains the error
2142
+ explore: LookML Explore that contains the error
2143
+ field_name: LookML field that caused the error
2144
+ content_type: Type of the content (dashboard, look)
2145
+ folder: Folder of the content
2146
+ url: URL of the content
2147
+ tile_type: Type of the tile (dashboard_element, dashboard_filter)
2148
+ tile_title: Title of the tile
2149
+ message: Message returned by the content validator
2150
+ """
2151
+
2152
+ type: Optional[str] = None
2153
+ title: Optional[str] = None
2154
+ detail: Optional[str] = None
2155
+ status: Optional[str] = None
2156
+ instance: Optional[str] = None
2157
+ model: Optional[str] = None
2158
+ explore: Optional[str] = None
2159
+ field_name: Optional[str] = None
2160
+ content_type: Optional[str] = None
2161
+ folder: Optional[str] = None
2162
+ url: Optional[str] = None
2163
+ tile_type: Optional[str] = None
2164
+ tile_title: Optional[str] = None
2165
+ message: Optional[str] = None
2166
+
2167
+ def __init__(
2168
+ self,
2169
+ *,
2170
+ type: Optional[str] = None,
2171
+ title: Optional[str] = None,
2172
+ detail: Optional[str] = None,
2173
+ status: Optional[str] = None,
2174
+ instance: Optional[str] = None,
2175
+ model: Optional[str] = None,
2176
+ explore: Optional[str] = None,
2177
+ field_name: Optional[str] = None,
2178
+ content_type: Optional[str] = None,
2179
+ folder: Optional[str] = None,
2180
+ url: Optional[str] = None,
2181
+ tile_type: Optional[str] = None,
2182
+ tile_title: Optional[str] = None,
2183
+ message: Optional[str] = None
2184
+ ):
2185
+ self.type = type
2186
+ self.title = title
2187
+ self.detail = detail
2188
+ self.status = status
2189
+ self.instance = instance
2190
+ self.model = model
2191
+ self.explore = explore
2192
+ self.field_name = field_name
2193
+ self.content_type = content_type
2194
+ self.folder = folder
2195
+ self.url = url
2196
+ self.tile_type = tile_type
2197
+ self.tile_title = tile_title
2198
+ self.message = message
2199
+
2200
+
1774
2201
  @attr.s(auto_attribs=True, init=False)
1775
2202
  class ContentValidatorError(model.Model):
1776
2203
  """
@@ -1826,6 +2253,77 @@ class ContentValidatorError(model.Model):
1826
2253
  self.id = id
1827
2254
 
1828
2255
 
2256
+ @attr.s(auto_attribs=True, init=False)
2257
+ class ContentValidatorErrorItem(model.Model):
2258
+ """
2259
+ Attributes:
2260
+ content_error:
2261
+ generic_error:
2262
+ """
2263
+
2264
+ content_error: Optional["ContentValidatorContentError"] = None
2265
+ generic_error: Optional["GenericError"] = None
2266
+
2267
+ def __init__(
2268
+ self,
2269
+ *,
2270
+ content_error: Optional["ContentValidatorContentError"] = None,
2271
+ generic_error: Optional["GenericError"] = None
2272
+ ):
2273
+ self.content_error = content_error
2274
+ self.generic_error = generic_error
2275
+
2276
+
2277
+ @attr.s(auto_attribs=True, init=False)
2278
+ class ContentValidatorResult(model.Model):
2279
+ """
2280
+ Attributes:
2281
+ name: Name of the validator (content)
2282
+ incremental: Whether the validation was incremental
2283
+ status: Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)
2284
+ result: Results of the content validation
2285
+ """
2286
+
2287
+ name: Optional[str] = None
2288
+ incremental: Optional[bool] = None
2289
+ status: Optional[str] = None
2290
+ result: Optional[Sequence["ContentValidatorTestedExplore"]] = None
2291
+
2292
+ def __init__(
2293
+ self,
2294
+ *,
2295
+ name: Optional[str] = None,
2296
+ incremental: Optional[bool] = None,
2297
+ status: Optional[str] = None,
2298
+ result: Optional[Sequence["ContentValidatorTestedExplore"]] = None
2299
+ ):
2300
+ self.name = name
2301
+ self.incremental = incremental
2302
+ self.status = status
2303
+ self.result = result
2304
+
2305
+
2306
+ @attr.s(auto_attribs=True, init=False)
2307
+ class ContentValidatorTestedExplore(model.Model):
2308
+ """
2309
+ Attributes:
2310
+ error_count: Total number of failed content validations
2311
+ errors: Details of the content that failed validation
2312
+ """
2313
+
2314
+ error_count: Optional[int] = None
2315
+ errors: Optional[Sequence["ContentValidatorErrorItem"]] = None
2316
+
2317
+ def __init__(
2318
+ self,
2319
+ *,
2320
+ error_count: Optional[int] = None,
2321
+ errors: Optional[Sequence["ContentValidatorErrorItem"]] = None
2322
+ ):
2323
+ self.error_count = error_count
2324
+ self.errors = errors
2325
+
2326
+
1829
2327
  @attr.s(auto_attribs=True, init=False)
1830
2328
  class ContentView(model.Model):
1831
2329
  """
@@ -1945,6 +2443,47 @@ class CostEstimate(model.Model):
1945
2443
  self.message = message
1946
2444
 
1947
2445
 
2446
+ @attr.s(auto_attribs=True, init=False)
2447
+ class CreateCIRunRequest(model.Model):
2448
+ """
2449
+ Attributes:
2450
+ suite_id: ID of the CI suite
2451
+ branch: Branch that the CI run should validate. Omit to test production.
2452
+ commit: Commit that the CI run should validate. Omit to test production.
2453
+ """
2454
+
2455
+ suite_id: Optional[str] = None
2456
+ branch: Optional[str] = None
2457
+ commit: Optional[str] = None
2458
+
2459
+ def __init__(
2460
+ self,
2461
+ *,
2462
+ suite_id: Optional[str] = None,
2463
+ branch: Optional[str] = None,
2464
+ commit: Optional[str] = None
2465
+ ):
2466
+ self.suite_id = suite_id
2467
+ self.branch = branch
2468
+ self.commit = commit
2469
+
2470
+
2471
+ @attr.s(auto_attribs=True, init=False)
2472
+ class CreateCIRunResponse(model.Model):
2473
+ """
2474
+ Attributes:
2475
+ run_id: ID of the CI run
2476
+ status: Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running)
2477
+ """
2478
+
2479
+ run_id: Optional[str] = None
2480
+ status: Optional[str] = None
2481
+
2482
+ def __init__(self, *, run_id: Optional[str] = None, status: Optional[str] = None):
2483
+ self.run_id = run_id
2484
+ self.status = status
2485
+
2486
+
1948
2487
  @attr.s(auto_attribs=True, init=False)
1949
2488
  class CreateCostEstimate(model.Model):
1950
2489
  """
@@ -3692,9 +4231,10 @@ class DBConnection(model.Model):
3692
4231
  username: Username for server authentication
3693
4232
  password: (Write-Only) Password for server authentication
3694
4233
  uses_oauth: Whether the connection uses OAuth for authentication.
4234
+ uses_key_pair_auth: Whether the connection uses key-pair for authentication.
3695
4235
  uses_instance_oauth: Whether the integration uses the oauth instance account.
3696
4236
  certificate: (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect).
3697
- file_type: (Write-Only) Certificate keyfile type - .json or .p12
4237
+ file_type: (Write-Only) Certificate keyfile type - .json, .p8 or .p12
3698
4238
  database: Database name
3699
4239
  db_timezone: Time zone of database
3700
4240
  query_timezone: Timezone to use in queries
@@ -3755,6 +4295,7 @@ class DBConnection(model.Model):
3755
4295
  username: Optional[str] = None
3756
4296
  password: Optional[str] = None
3757
4297
  uses_oauth: Optional[bool] = None
4298
+ uses_key_pair_auth: Optional[bool] = None
3758
4299
  uses_instance_oauth: Optional[bool] = None
3759
4300
  certificate: Optional[str] = None
3760
4301
  file_type: Optional[str] = None
@@ -3820,6 +4361,7 @@ class DBConnection(model.Model):
3820
4361
  username: Optional[str] = None,
3821
4362
  password: Optional[str] = None,
3822
4363
  uses_oauth: Optional[bool] = None,
4364
+ uses_key_pair_auth: Optional[bool] = None,
3823
4365
  uses_instance_oauth: Optional[bool] = None,
3824
4366
  certificate: Optional[str] = None,
3825
4367
  file_type: Optional[str] = None,
@@ -3882,6 +4424,7 @@ class DBConnection(model.Model):
3882
4424
  self.username = username
3883
4425
  self.password = password
3884
4426
  self.uses_oauth = uses_oauth
4427
+ self.uses_key_pair_auth = uses_key_pair_auth
3885
4428
  self.uses_instance_oauth = uses_instance_oauth
3886
4429
  self.certificate = certificate
3887
4430
  self.file_type = file_type
@@ -4260,6 +4803,24 @@ class Dialect(model.Model):
4260
4803
  self.has_ssl_support = has_ssl_support
4261
4804
 
4262
4805
 
4806
+ @attr.s(auto_attribs=True, init=False)
4807
+ class DialectDriverNamesVersion(model.Model):
4808
+ """
4809
+ Attributes:
4810
+ name: Name to be passed to the backend
4811
+ display_name: Name to be displayed in the frontend.
4812
+ """
4813
+
4814
+ name: Optional[str] = None
4815
+ display_name: Optional[str] = None
4816
+
4817
+ def __init__(
4818
+ self, *, name: Optional[str] = None, display_name: Optional[str] = None
4819
+ ):
4820
+ self.name = name
4821
+ self.display_name = display_name
4822
+
4823
+
4263
4824
  @attr.s(auto_attribs=True, init=False)
4264
4825
  class DialectInfo(model.Model):
4265
4826
  """
@@ -4267,6 +4828,8 @@ class DialectInfo(model.Model):
4267
4828
  can: Operations the current user is able to perform on this object
4268
4829
  default_max_connections: Default number max connections
4269
4830
  default_port: Default port number
4831
+ default_max_queries: Default number max queries
4832
+ default_max_queries_per_user: Default number max queries per user
4270
4833
  installed: Is the supporting driver installed
4271
4834
  label: The human-readable label of the connection
4272
4835
  label_for_database_equivalent: What the dialect calls the equivalent of a normal SQL table
@@ -4280,13 +4843,15 @@ class DialectInfo(model.Model):
4280
4843
  can: Optional[MutableMapping[str, bool]] = None
4281
4844
  default_max_connections: Optional[str] = None
4282
4845
  default_port: Optional[str] = None
4846
+ default_max_queries: Optional[str] = None
4847
+ default_max_queries_per_user: Optional[str] = None
4283
4848
  installed: Optional[bool] = None
4284
4849
  label: Optional[str] = None
4285
4850
  label_for_database_equivalent: Optional[str] = None
4286
4851
  label_for_schema_equivalent: Optional[str] = None
4287
4852
  name: Optional[str] = None
4288
4853
  supported_driver_name: Optional[str] = None
4289
- supported_driver_versions: Optional[Sequence[str]] = None
4854
+ supported_driver_versions: Optional[Sequence["DialectDriverNamesVersion"]] = None
4290
4855
  supported_options: Optional["DialectInfoOptions"] = None
4291
4856
 
4292
4857
  def __init__(
@@ -4295,18 +4860,24 @@ class DialectInfo(model.Model):
4295
4860
  can: Optional[MutableMapping[str, bool]] = None,
4296
4861
  default_max_connections: Optional[str] = None,
4297
4862
  default_port: Optional[str] = None,
4863
+ default_max_queries: Optional[str] = None,
4864
+ default_max_queries_per_user: Optional[str] = None,
4298
4865
  installed: Optional[bool] = None,
4299
4866
  label: Optional[str] = None,
4300
4867
  label_for_database_equivalent: Optional[str] = None,
4301
4868
  label_for_schema_equivalent: Optional[str] = None,
4302
4869
  name: Optional[str] = None,
4303
4870
  supported_driver_name: Optional[str] = None,
4304
- supported_driver_versions: Optional[Sequence[str]] = None,
4871
+ supported_driver_versions: Optional[
4872
+ Sequence["DialectDriverNamesVersion"]
4873
+ ] = None,
4305
4874
  supported_options: Optional["DialectInfoOptions"] = None
4306
4875
  ):
4307
4876
  self.can = can
4308
4877
  self.default_max_connections = default_max_connections
4309
4878
  self.default_port = default_port
4879
+ self.default_max_queries = default_max_queries
4880
+ self.default_max_queries_per_user = default_max_queries_per_user
4310
4881
  self.installed = installed
4311
4882
  self.label = label
4312
4883
  self.label_for_database_equivalent = label_for_database_equivalent
@@ -5120,6 +5691,39 @@ class Format(enum.Enum):
5120
5691
  Format.__new__ = model.safe_enum__new__ # type: ignore
5121
5692
 
5122
5693
 
5694
+ @attr.s(auto_attribs=True, init=False)
5695
+ class GenericError(model.Model):
5696
+ """
5697
+ Attributes:
5698
+ type: A URI reference that identifies the problem type
5699
+ title: Overview of the error
5700
+ detail: Detail of the error
5701
+ status: The HTTP status code for the problem
5702
+ instance: URI reference that identifies the specific occurrence of the problem
5703
+ """
5704
+
5705
+ type: Optional[str] = None
5706
+ title: Optional[str] = None
5707
+ detail: Optional[str] = None
5708
+ status: Optional[str] = None
5709
+ instance: Optional[str] = None
5710
+
5711
+ def __init__(
5712
+ self,
5713
+ *,
5714
+ type: Optional[str] = None,
5715
+ title: Optional[str] = None,
5716
+ detail: Optional[str] = None,
5717
+ status: Optional[str] = None,
5718
+ instance: Optional[str] = None
5719
+ ):
5720
+ self.type = type
5721
+ self.title = title
5722
+ self.detail = detail
5723
+ self.status = status
5724
+ self.instance = instance
5725
+
5726
+
5123
5727
  @attr.s(auto_attribs=True, init=False)
5124
5728
  class GitBranch(model.Model):
5125
5729
  """
@@ -6273,6 +6877,22 @@ class JsonBiTableCalc(model.Model):
6273
6877
  self.measure = measure
6274
6878
 
6275
6879
 
6880
+ class Kind(enum.Enum):
6881
+ """
6882
+ The type of calculation for the period_over_period measure. Valid values are: "previous", "difference", "relative_change". (Enum defined in LookmlModelExploreFieldPeriodOverPeriodParams)
6883
+
6884
+ """
6885
+
6886
+ previous = "previous"
6887
+ difference = "difference"
6888
+ relative_change = "relative_change"
6889
+ invalid_api_enum_value = "invalid_api_enum_value"
6890
+
6891
+
6892
+ # https://github.com/python/mypy/issues/2427
6893
+ Kind.__new__ = model.safe_enum__new__ # type: ignore
6894
+
6895
+
6276
6896
  @attr.s(auto_attribs=True, init=False)
6277
6897
  class LDAPConfig(model.Model):
6278
6898
  """
@@ -7361,6 +7981,7 @@ class LookmlModelExploreField(model.Model):
7361
7981
  name: Fully-qualified name of the field.
7362
7982
  strict_value_format: If yes, the field will not be localized with the user attribute number_format. Defaults to no
7363
7983
  parameter: Whether this field is a parameter.
7984
+ period_over_period_params:
7364
7985
  permanent: Whether this field can be removed from a query.
7365
7986
  primary_key: Whether or not the field represents a primary key.
7366
7987
  project_name: The name of the project this field is defined in.
@@ -7420,6 +8041,9 @@ class LookmlModelExploreField(model.Model):
7420
8041
  name: Optional[str] = None
7421
8042
  strict_value_format: Optional[bool] = None
7422
8043
  parameter: Optional[bool] = None
8044
+ period_over_period_params: Optional[
8045
+ "LookmlModelExploreFieldPeriodOverPeriodParams"
8046
+ ] = None
7423
8047
  permanent: Optional[bool] = None
7424
8048
  primary_key: Optional[bool] = None
7425
8049
  project_name: Optional[str] = None
@@ -7481,6 +8105,9 @@ class LookmlModelExploreField(model.Model):
7481
8105
  name: Optional[str] = None,
7482
8106
  strict_value_format: Optional[bool] = None,
7483
8107
  parameter: Optional[bool] = None,
8108
+ period_over_period_params: Optional[
8109
+ "LookmlModelExploreFieldPeriodOverPeriodParams"
8110
+ ] = None,
7484
8111
  permanent: Optional[bool] = None,
7485
8112
  primary_key: Optional[bool] = None,
7486
8113
  project_name: Optional[str] = None,
@@ -7541,6 +8168,7 @@ class LookmlModelExploreField(model.Model):
7541
8168
  self.name = name
7542
8169
  self.strict_value_format = strict_value_format
7543
8170
  self.parameter = parameter
8171
+ self.period_over_period_params = period_over_period_params
7544
8172
  self.permanent = permanent
7545
8173
  self.primary_key = primary_key
7546
8174
  self.project_name = project_name
@@ -7653,6 +8281,35 @@ class LookmlModelExploreFieldMeasureFilters(model.Model):
7653
8281
  self.condition = condition
7654
8282
 
7655
8283
 
8284
+ @attr.s(auto_attribs=True, init=False)
8285
+ class LookmlModelExploreFieldPeriodOverPeriodParams(model.Model):
8286
+ """
8287
+ Attributes:
8288
+ based_on: Specifies the measure that will be calculated over the different periods.
8289
+ based_on_time: Specifies the time dimension that this measure will operate over.
8290
+ period: Specifies the time frame for the comparison. Valid values are: "year", "fiscal_year", "quarter", "fiscal_quarter", "month", "week", "date".
8291
+ kind: The type of calculation for the period_over_period measure. Valid values are: "previous", "difference", "relative_change".
8292
+ """
8293
+
8294
+ based_on: Optional[str] = None
8295
+ based_on_time: Optional[str] = None
8296
+ period: Optional["Period"] = None
8297
+ kind: Optional["Kind"] = None
8298
+
8299
+ def __init__(
8300
+ self,
8301
+ *,
8302
+ based_on: Optional[str] = None,
8303
+ based_on_time: Optional[str] = None,
8304
+ period: Optional["Period"] = None,
8305
+ kind: Optional["Kind"] = None
8306
+ ):
8307
+ self.based_on = based_on
8308
+ self.based_on_time = based_on_time
8309
+ self.period = period
8310
+ self.kind = kind
8311
+
8312
+
7656
8313
  @attr.s(auto_attribs=True, init=False)
7657
8314
  class LookmlModelExploreFieldset(model.Model):
7658
8315
  """
@@ -7937,6 +8594,121 @@ class LookmlTestResult(model.Model):
7937
8594
  self.success = success
7938
8595
 
7939
8596
 
8597
+ @attr.s(auto_attribs=True, init=False)
8598
+ class LookMLValidatorError(model.Model):
8599
+ """
8600
+ Attributes:
8601
+ type: A URI reference that identifies the problem type
8602
+ title: Overview of the error
8603
+ detail: Detail of the error
8604
+ status: The HTTP status code for the problem
8605
+ instance: URI reference that identifies the specific occurrence of the problem
8606
+ model: LookML model that contains the error
8607
+ explore: LookML Explore that contains the error
8608
+ field_name: LookML field that caused the error
8609
+ message: Message returned by the LookML validator
8610
+ severity: Severity of the error (warning, error, fatal, info, success)
8611
+ line_number: Line number of the error in the LookML file
8612
+ lookml_url: URL to the LookML that caused the error
8613
+ file_path: IDE folder path to the LookML file that caused the error
8614
+ """
8615
+
8616
+ type: Optional[str] = None
8617
+ title: Optional[str] = None
8618
+ detail: Optional[str] = None
8619
+ status: Optional[str] = None
8620
+ instance: Optional[str] = None
8621
+ model: Optional[str] = None
8622
+ explore: Optional[str] = None
8623
+ field_name: Optional[str] = None
8624
+ message: Optional[str] = None
8625
+ severity: Optional[str] = None
8626
+ line_number: Optional[str] = None
8627
+ lookml_url: Optional[str] = None
8628
+ file_path: Optional[str] = None
8629
+
8630
+ def __init__(
8631
+ self,
8632
+ *,
8633
+ type: Optional[str] = None,
8634
+ title: Optional[str] = None,
8635
+ detail: Optional[str] = None,
8636
+ status: Optional[str] = None,
8637
+ instance: Optional[str] = None,
8638
+ model: Optional[str] = None,
8639
+ explore: Optional[str] = None,
8640
+ field_name: Optional[str] = None,
8641
+ message: Optional[str] = None,
8642
+ severity: Optional[str] = None,
8643
+ line_number: Optional[str] = None,
8644
+ lookml_url: Optional[str] = None,
8645
+ file_path: Optional[str] = None
8646
+ ):
8647
+ self.type = type
8648
+ self.title = title
8649
+ self.detail = detail
8650
+ self.status = status
8651
+ self.instance = instance
8652
+ self.model = model
8653
+ self.explore = explore
8654
+ self.field_name = field_name
8655
+ self.message = message
8656
+ self.severity = severity
8657
+ self.line_number = line_number
8658
+ self.lookml_url = lookml_url
8659
+ self.file_path = file_path
8660
+
8661
+
8662
+ @attr.s(auto_attribs=True, init=False)
8663
+ class LookMLValidatorErrorItem(model.Model):
8664
+ """
8665
+ Attributes:
8666
+ lookml_error:
8667
+ generic_error:
8668
+ """
8669
+
8670
+ lookml_error: Optional["LookMLValidatorError"] = None
8671
+ generic_error: Optional["GenericError"] = None
8672
+
8673
+ def __init__(
8674
+ self,
8675
+ *,
8676
+ lookml_error: Optional["LookMLValidatorError"] = None,
8677
+ generic_error: Optional["GenericError"] = None
8678
+ ):
8679
+ self.lookml_error = lookml_error
8680
+ self.generic_error = generic_error
8681
+
8682
+
8683
+ @attr.s(auto_attribs=True, init=False)
8684
+ class LookMLValidatorResult(model.Model):
8685
+ """
8686
+ Attributes:
8687
+ name: Name of the validator (lookml)
8688
+ status: Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)
8689
+ error_count: Total number of failed LookML validations
8690
+ errors: Details of the LookML that failed validation
8691
+ """
8692
+
8693
+ name: Optional[str] = None
8694
+ status: Optional[str] = None
8695
+ error_count: Optional[int] = None
8696
+ errors: Optional[Sequence["LookMLValidatorErrorItem"]] = None
8697
+
8698
+ def __init__(
8699
+ self,
8700
+ *,
8701
+ name: Optional[str] = None,
8702
+ status: Optional[str] = None,
8703
+ error_count: Optional[int] = None,
8704
+ errors: Optional[Sequence["LookMLValidatorErrorItem"]] = None
8705
+ ):
8706
+ self.name = name
8707
+ self.status = status
8708
+ self.error_count = error_count
8709
+ self.errors = errors
8710
+
8711
+
7940
8712
  @attr.s(auto_attribs=True, init=False)
7941
8713
  class LookModel(model.Model):
7942
8714
  """
@@ -9038,6 +9810,26 @@ class PasswordConfig(model.Model):
9038
9810
  self.require_special = require_special
9039
9811
 
9040
9812
 
9813
+ class Period(enum.Enum):
9814
+ """
9815
+ Specifies the time frame for the comparison. Valid values are: "year", "fiscal_year", "quarter", "fiscal_quarter", "month", "week", "date". (Enum defined in LookmlModelExploreFieldPeriodOverPeriodParams)
9816
+
9817
+ """
9818
+
9819
+ year = "year"
9820
+ fiscal_year = "fiscal_year"
9821
+ quarter = "quarter"
9822
+ fiscal_quarter = "fiscal_quarter"
9823
+ month = "month"
9824
+ week = "week"
9825
+ date = "date"
9826
+ invalid_api_enum_value = "invalid_api_enum_value"
9827
+
9828
+
9829
+ # https://github.com/python/mypy/issues/2427
9830
+ Period.__new__ = model.safe_enum__new__ # type: ignore
9831
+
9832
+
9041
9833
  @attr.s(auto_attribs=True, init=False)
9042
9834
  class Permission(model.Model):
9043
9835
  """
@@ -9297,6 +10089,19 @@ class Project(model.Model):
9297
10089
  self.dependency_status = dependency_status
9298
10090
 
9299
10091
 
10092
+ @attr.s(auto_attribs=True, init=False)
10093
+ class ProjectCIRun(model.Model):
10094
+ """
10095
+ Attributes:
10096
+ run:
10097
+ """
10098
+
10099
+ run: Optional["CIRun"] = None
10100
+
10101
+ def __init__(self, *, run: Optional["CIRun"] = None):
10102
+ self.run = run
10103
+
10104
+
9300
10105
  @attr.s(auto_attribs=True, init=False)
9301
10106
  class ProjectError(model.Model):
9302
10107
  """
@@ -9852,6 +10657,7 @@ class Report(model.Model):
9852
10657
  last_accessed_at: Last Accessed at
9853
10658
  deleter_user_id: User Id of the deleter of the report
9854
10659
  deleter_user_name: Name of User that deleted the Report.
10660
+ schedule_count: Count of schedules on the report.
9855
10661
  """
9856
10662
 
9857
10663
  can: Optional[MutableMapping[str, bool]] = None
@@ -9872,6 +10678,7 @@ class Report(model.Model):
9872
10678
  last_accessed_at: Optional[datetime.datetime] = None
9873
10679
  deleter_user_id: Optional[str] = None
9874
10680
  deleter_user_name: Optional[str] = None
10681
+ schedule_count: Optional[int] = None
9875
10682
 
9876
10683
  def __init__(
9877
10684
  self,
@@ -9893,7 +10700,8 @@ class Report(model.Model):
9893
10700
  deleted_at: Optional[datetime.datetime] = None,
9894
10701
  last_accessed_at: Optional[datetime.datetime] = None,
9895
10702
  deleter_user_id: Optional[str] = None,
9896
- deleter_user_name: Optional[str] = None
10703
+ deleter_user_name: Optional[str] = None,
10704
+ schedule_count: Optional[int] = None
9897
10705
  ):
9898
10706
  self.can = can
9899
10707
  self.id = id
@@ -9913,6 +10721,7 @@ class Report(model.Model):
9913
10721
  self.last_accessed_at = last_accessed_at
9914
10722
  self.deleter_user_id = deleter_user_id
9915
10723
  self.deleter_user_name = deleter_user_name
10724
+ self.schedule_count = schedule_count
9916
10725
 
9917
10726
 
9918
10727
  @attr.s(auto_attribs=True, init=False)
@@ -11509,6 +12318,154 @@ class SqlQueryCreate(model.Model):
11509
12318
  self.vis_config = vis_config
11510
12319
 
11511
12320
 
12321
+ @attr.s(auto_attribs=True, init=False)
12322
+ class SqlValidatorError(model.Model):
12323
+ """
12324
+ Attributes:
12325
+ type: A URI reference that identifies the problem type
12326
+ title: Overview of the error
12327
+ detail: Detail of the error
12328
+ status: The HTTP status code for the problem
12329
+ instance: URI reference that identifies the specific occurrence of the problem
12330
+ model: LookML model that contains the Explore that failed SQL validation
12331
+ explore: LookML Explore that failed SQL validation
12332
+ message: Message returned by the SQL validation
12333
+ explore_url: URL to the Explore
12334
+ lookml_url: URL to the LookML that caused the error
12335
+ dimension: LookML dimension that caused the error
12336
+ line_number: Line of the error in the LookML file
12337
+ """
12338
+
12339
+ type: Optional[str] = None
12340
+ title: Optional[str] = None
12341
+ detail: Optional[str] = None
12342
+ status: Optional[str] = None
12343
+ instance: Optional[str] = None
12344
+ model: Optional[str] = None
12345
+ explore: Optional[str] = None
12346
+ message: Optional[str] = None
12347
+ explore_url: Optional[str] = None
12348
+ lookml_url: Optional[str] = None
12349
+ dimension: Optional[str] = None
12350
+ line_number: Optional[str] = None
12351
+
12352
+ def __init__(
12353
+ self,
12354
+ *,
12355
+ type: Optional[str] = None,
12356
+ title: Optional[str] = None,
12357
+ detail: Optional[str] = None,
12358
+ status: Optional[str] = None,
12359
+ instance: Optional[str] = None,
12360
+ model: Optional[str] = None,
12361
+ explore: Optional[str] = None,
12362
+ message: Optional[str] = None,
12363
+ explore_url: Optional[str] = None,
12364
+ lookml_url: Optional[str] = None,
12365
+ dimension: Optional[str] = None,
12366
+ line_number: Optional[str] = None
12367
+ ):
12368
+ self.type = type
12369
+ self.title = title
12370
+ self.detail = detail
12371
+ self.status = status
12372
+ self.instance = instance
12373
+ self.model = model
12374
+ self.explore = explore
12375
+ self.message = message
12376
+ self.explore_url = explore_url
12377
+ self.lookml_url = lookml_url
12378
+ self.dimension = dimension
12379
+ self.line_number = line_number
12380
+
12381
+
12382
+ @attr.s(auto_attribs=True, init=False)
12383
+ class SqlValidatorErrorItem(model.Model):
12384
+ """
12385
+ Attributes:
12386
+ sql_error:
12387
+ generic_error:
12388
+ """
12389
+
12390
+ sql_error: Optional["SqlValidatorError"] = None
12391
+ generic_error: Optional["GenericError"] = None
12392
+
12393
+ def __init__(
12394
+ self,
12395
+ *,
12396
+ sql_error: Optional["SqlValidatorError"] = None,
12397
+ generic_error: Optional["GenericError"] = None
12398
+ ):
12399
+ self.sql_error = sql_error
12400
+ self.generic_error = generic_error
12401
+
12402
+
12403
+ @attr.s(auto_attribs=True, init=False)
12404
+ class SqlValidatorResult(model.Model):
12405
+ """
12406
+ Attributes:
12407
+ name: Name of the validator (sql)
12408
+ incremental: Whether the validation was incremental
12409
+ status: Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)
12410
+ result: The results of tested Explores
12411
+ """
12412
+
12413
+ name: Optional[str] = None
12414
+ incremental: Optional[bool] = None
12415
+ status: Optional[str] = None
12416
+ result: Optional[Sequence["SqlValidatorTestedExplore"]] = None
12417
+
12418
+ def __init__(
12419
+ self,
12420
+ *,
12421
+ name: Optional[str] = None,
12422
+ incremental: Optional[bool] = None,
12423
+ status: Optional[str] = None,
12424
+ result: Optional[Sequence["SqlValidatorTestedExplore"]] = None
12425
+ ):
12426
+ self.name = name
12427
+ self.incremental = incremental
12428
+ self.status = status
12429
+ self.result = result
12430
+
12431
+
12432
+ @attr.s(auto_attribs=True, init=False)
12433
+ class SqlValidatorTestedExplore(model.Model):
12434
+ """
12435
+ Attributes:
12436
+ model: LookML model that was tested
12437
+ explore: LookML Explore that was tested
12438
+ status: Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)
12439
+ skip_reason: Reason the validation was skipped
12440
+ error_count: Total number of failed validations
12441
+ errors: Details of the LookML that failed SQL validation
12442
+ """
12443
+
12444
+ model: Optional[str] = None
12445
+ explore: Optional[str] = None
12446
+ status: Optional[str] = None
12447
+ skip_reason: Optional[str] = None
12448
+ error_count: Optional[int] = None
12449
+ errors: Optional[Sequence["SqlValidatorErrorItem"]] = None
12450
+
12451
+ def __init__(
12452
+ self,
12453
+ *,
12454
+ model: Optional[str] = None,
12455
+ explore: Optional[str] = None,
12456
+ status: Optional[str] = None,
12457
+ skip_reason: Optional[str] = None,
12458
+ error_count: Optional[int] = None,
12459
+ errors: Optional[Sequence["SqlValidatorErrorItem"]] = None
12460
+ ):
12461
+ self.model = model
12462
+ self.explore = explore
12463
+ self.status = status
12464
+ self.skip_reason = skip_reason
12465
+ self.error_count = error_count
12466
+ self.errors = errors
12467
+
12468
+
11512
12469
  @attr.s(auto_attribs=True, init=False)
11513
12470
  class SshPublicKey(model.Model):
11514
12471
  """
@@ -13742,8 +14699,9 @@ class WriteDBConnection(model.Model):
13742
14699
  port: Port number on server. If the connection is over an SSH tunnel, then the local port associated with the SSH tunnel.
13743
14700
  username: Username for server authentication
13744
14701
  password: (Write-Only) Password for server authentication
14702
+ uses_key_pair_auth: Whether the connection uses key-pair for authentication.
13745
14703
  certificate: (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect).
13746
- file_type: (Write-Only) Certificate keyfile type - .json or .p12
14704
+ file_type: (Write-Only) Certificate keyfile type - .json, .p8 or .p12
13747
14705
  database: Database name
13748
14706
  db_timezone: Time zone of database
13749
14707
  query_timezone: Timezone to use in queries
@@ -13790,6 +14748,7 @@ class WriteDBConnection(model.Model):
13790
14748
  port: Optional[str] = None
13791
14749
  username: Optional[str] = None
13792
14750
  password: Optional[str] = None
14751
+ uses_key_pair_auth: Optional[bool] = None
13793
14752
  certificate: Optional[str] = None
13794
14753
  file_type: Optional[str] = None
13795
14754
  database: Optional[str] = None
@@ -13839,6 +14798,7 @@ class WriteDBConnection(model.Model):
13839
14798
  port: Optional[str] = None,
13840
14799
  username: Optional[str] = None,
13841
14800
  password: Optional[str] = None,
14801
+ uses_key_pair_auth: Optional[bool] = None,
13842
14802
  certificate: Optional[str] = None,
13843
14803
  file_type: Optional[str] = None,
13844
14804
  database: Optional[str] = None,
@@ -13885,6 +14845,7 @@ class WriteDBConnection(model.Model):
13885
14845
  self.port = port
13886
14846
  self.username = username
13887
14847
  self.password = password
14848
+ self.uses_key_pair_auth = uses_key_pair_auth
13888
14849
  self.certificate = certificate
13889
14850
  self.file_type = file_type
13890
14851
  self.database = database
@@ -20,5 +20,5 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
21
  # THE SOFTWARE.
22
22
 
23
- sdk_version = "25.4"
23
+ sdk_version = "25.8"
24
24
  environment_prefix = "LOOKERSDK"
looker_sdk/version.py CHANGED
@@ -20,4 +20,4 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
21
  # THE SOFTWARE.
22
22
 
23
- __version__ = "25.4.0"
23
+ __version__ = "25.8.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: looker-sdk
3
- Version: 25.4.0
3
+ Version: 25.8.0
4
4
  Summary: Looker REST API
5
5
  Home-page: https://pypi.python.org/pypi/looker_sdk
6
6
  Author: Looker Data Sciences, Inc.
@@ -1,7 +1,7 @@
1
1
  looker_sdk/__init__.py,sha256=0UOw2v-BP1bNoBIIm-BnyKUpGQB3Zx-JZRmpYyLiIuY,2589
2
2
  looker_sdk/error.py,sha256=XTKuy1zEyhSVd-VCWHKB2zVjj0X7VUzVwq9y9L22Bo0,4941
3
3
  looker_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- looker_sdk/version.py,sha256=UoVBBcwNZOgrivWuNITWgZEgc_i6_b42vI5J1ZEshwA,1155
4
+ looker_sdk/version.py,sha256=wiR7kKlbJHrLuZr4dMOtENv23VeHYh3MyyyNsNXoIGA,1155
5
5
  looker_sdk/rtl/__init__.py,sha256=hgj6CO_Du2XcJ4bRYbhaVS3dvLxjCqPQDR8KwD9IPTQ,1132
6
6
  looker_sdk/rtl/api_methods.py,sha256=J-dm7UMyJajsJDCB0JMpGUmp80I8oPMs7cggdIaCWng,8862
7
7
  looker_sdk/rtl/api_settings.py,sha256=0QbmNhfgjBJNnr1CNEMxCHoiu908jT8amAtSAha1xS8,6953
@@ -14,10 +14,10 @@ looker_sdk/rtl/requests_transport.py,sha256=2lckuJyjeySAuAn7v-RA_xTjjWe53uCCLSWg
14
14
  looker_sdk/rtl/serialize.py,sha256=pO2arIln2QmuEjTodsVmVrJixRjBSsUGKEcMTpxshNM,4447
15
15
  looker_sdk/rtl/transport.py,sha256=zNCaGmmJBtF87iLS6xtSTwiyEXP0BDdMJafPn0_tIrk,3911
16
16
  looker_sdk/sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
- looker_sdk/sdk/constants.py,sha256=jbnba1WD_1YTS9iTniCGqchfUro0F-wV1FIlt1AtW7w,1186
17
+ looker_sdk/sdk/constants.py,sha256=uNdxbJPrqsvMF3Y2wJ1che2iMZFZNcbRHfXltK-wlNg,1186
18
18
  looker_sdk/sdk/api40/__init__.py,sha256=Dvx1t9vDBvgEl-p1eeP7ebEC6Q6wb6rASPi7nx3z7dg,18
19
- looker_sdk/sdk/api40/methods.py,sha256=mc2gMeI7e6d9Zc9Aj28BiSdUa5AD6H9BkOJSH6fFJ44,524722
20
- looker_sdk/sdk/api40/models.py,sha256=rakJinNxjroGcSQWJZuMr3tAZmyCJu-q5b7Ot7q6F7k,649896
19
+ looker_sdk/sdk/api40/methods.py,sha256=nL_LcXGW7DC7gapTUvAt22zDsvfxCvBISKE-VEsoDBg,526484
20
+ looker_sdk/sdk/api40/models.py,sha256=l82-D1cXC-3ICJ3qRnhgvHC2peUSssJq1yVKi_TG7z8,681544
21
21
  tests/integration/__init__.py,sha256=K4tvUu8CgFRwtDhDNixHKDDb8uubXgevQBq8JmZvf8Y,63
22
22
  tests/integration/test_methods.py,sha256=GXeBAxKYLH45YsPDGduRxaoGKBNoxRX1Cxdo4a_2eW8,24977
23
23
  tests/integration/test_netrc.py,sha256=XJAzCh853Q0P6ZY_Cq6CtRHAqlvjGkBItgvxJMQw4Sw,1595
@@ -29,8 +29,8 @@ tests/rtl/test_auth_token.py,sha256=Ep4u0ushHqKiIkGgw-XVn1lSzPeH6pVmDB2bw-MXNAo,
29
29
  tests/rtl/test_requests_transport.py,sha256=mSsxudpAkKe-uSVOIzDrV0XCFlj_ACt6T1yzbUbuwG0,5442
30
30
  tests/rtl/test_serialize.py,sha256=1SC8jigZFFL3mrU2oSTnc2nbDxXve224_r3GaxEeU90,25917
31
31
  tests/rtl/test_transport.py,sha256=tI83LYOeuWEmkngXyRqMjW-pv-ipLPLj4t0hGD8zqL8,1555
32
- looker_sdk-25.4.0.dist-info/LICENSE.txt,sha256=N4Rmmbuo5EryYSCXcvjuXL1ZXwyXanRzuGP-dJzwsoE,1094
33
- looker_sdk-25.4.0.dist-info/METADATA,sha256=UUgQQ5pQqGpejJIihQ0Cx4Car7nnl8jwL6hUTXS_3R8,7021
34
- looker_sdk-25.4.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
35
- looker_sdk-25.4.0.dist-info/top_level.txt,sha256=tDPNJRQM_A_Oncxlgxwvnzq7hZDWZaadt_nR8DmORTI,17
36
- looker_sdk-25.4.0.dist-info/RECORD,,
32
+ looker_sdk-25.8.0.dist-info/LICENSE.txt,sha256=N4Rmmbuo5EryYSCXcvjuXL1ZXwyXanRzuGP-dJzwsoE,1094
33
+ looker_sdk-25.8.0.dist-info/METADATA,sha256=YVpfjPt8OP5QF1cMQFUAbmi1PdDJuwA-3bGqMb7C1Wc,7021
34
+ looker_sdk-25.8.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
35
+ looker_sdk-25.8.0.dist-info/top_level.txt,sha256=tDPNJRQM_A_Oncxlgxwvnzq7hZDWZaadt_nR8DmORTI,17
36
+ looker_sdk-25.8.0.dist-info/RECORD,,