looker-sdk 24.16.2__tar.gz → 24.18.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/PKG-INFO +1 -1
  2. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/sdk/api40/methods.py +95 -22
  3. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/sdk/api40/models.py +36 -61
  4. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/sdk/constants.py +1 -1
  5. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/version.py +1 -1
  6. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk.egg-info/PKG-INFO +1 -1
  7. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk.egg-info/SOURCES.txt +0 -2
  8. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/setup.py +1 -1
  9. looker_sdk-24.16.2/tests/__init__.py +0 -0
  10. looker_sdk-24.16.2/tests/conftest.py +0 -133
  11. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/LICENSE.txt +0 -0
  12. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/MANIFEST.in +0 -0
  13. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/README.rst +0 -0
  14. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/__init__.py +0 -0
  15. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/error.py +0 -0
  16. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/py.typed +0 -0
  17. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/__init__.py +0 -0
  18. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/api_methods.py +0 -0
  19. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/api_settings.py +0 -0
  20. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/auth_session.py +0 -0
  21. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/auth_token.py +0 -0
  22. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/constants.py +0 -0
  23. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/hooks.py +0 -0
  24. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/model.py +0 -0
  25. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/requests_transport.py +0 -0
  26. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/serialize.py +0 -0
  27. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/transport.py +0 -0
  28. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/sdk/__init__.py +0 -0
  29. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/sdk/api40/__init__.py +0 -0
  30. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk.egg-info/dependency_links.txt +0 -0
  31. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk.egg-info/requires.txt +0 -0
  32. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk.egg-info/top_level.txt +0 -0
  33. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/setup.cfg +0 -0
  34. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/integration/__init__.py +0 -0
  35. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/integration/test_methods.py +0 -0
  36. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/integration/test_netrc.py +0 -0
  37. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/__init__.py +0 -0
  38. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/test_api_methods.py +0 -0
  39. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/test_api_settings.py +0 -0
  40. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/test_auth_session.py +0 -0
  41. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/test_auth_token.py +0 -0
  42. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/test_requests_transport.py +0 -0
  43. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/test_serialize.py +0 -0
  44. {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/test_transport.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: looker_sdk
3
- Version: 24.16.2
3
+ Version: 24.18.1
4
4
  Summary: Looker REST API
5
5
  Home-page: https://pypi.python.org/pypi/looker_sdk
6
6
  Author: Looker Data Sciences, Inc.
@@ -21,7 +21,7 @@
21
21
  # SOFTWARE.
22
22
  #
23
23
 
24
- # 466 API methods
24
+ # 467 API methods
25
25
 
26
26
 
27
27
  # NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0
@@ -6028,19 +6028,19 @@ class Looker40SDK(api_methods.APIMethods):
6028
6028
  #
6029
6029
  # All personal folders will be returned.
6030
6030
  #
6031
- # GET /folders -> Sequence[mdls.Folder]
6031
+ # GET /folders -> Sequence[mdls.FolderBase]
6032
6032
  def all_folders(
6033
6033
  self,
6034
6034
  # Requested fields.
6035
6035
  fields: Optional[str] = None,
6036
6036
  transport_options: Optional[transport.TransportOptions] = None,
6037
- ) -> Sequence[mdls.Folder]:
6037
+ ) -> Sequence[mdls.FolderBase]:
6038
6038
  """Get All Folders"""
6039
6039
  response = cast(
6040
- Sequence[mdls.Folder],
6040
+ Sequence[mdls.FolderBase],
6041
6041
  self.get(
6042
6042
  path="/folders",
6043
- structure=Sequence[mdls.Folder],
6043
+ structure=Sequence[mdls.FolderBase],
6044
6044
  query_params={"fields": fields},
6045
6045
  transport_options=transport_options,
6046
6046
  ),
@@ -8994,20 +8994,20 @@ class Looker40SDK(api_methods.APIMethods):
8994
8994
  # will be in the message of the 400 error response, but not as detailed as expressed in `json_detail.errors`.
8995
8995
  # These data formats can only carry row data, and error info is not row data.
8996
8996
  #
8997
- # GET /query_tasks/{query_task_id}/results -> mdls.QueryTask
8997
+ # GET /query_tasks/{query_task_id}/results -> str
8998
8998
  def query_task_results(
8999
8999
  self,
9000
9000
  # ID of the Query Task
9001
9001
  query_task_id: str,
9002
9002
  transport_options: Optional[transport.TransportOptions] = None,
9003
- ) -> mdls.QueryTask:
9003
+ ) -> str:
9004
9004
  """Get Async Query Results"""
9005
9005
  query_task_id = self.encode_path_param(query_task_id)
9006
9006
  response = cast(
9007
- mdls.QueryTask,
9007
+ str,
9008
9008
  self.get(
9009
9009
  path=f"/query_tasks/{query_task_id}/results",
9010
- structure=mdls.QueryTask,
9010
+ structure=str,
9011
9011
  transport_options=transport_options,
9012
9012
  ),
9013
9013
  )
@@ -10265,6 +10265,8 @@ class Looker40SDK(api_methods.APIMethods):
10265
10265
  built_in: Optional[bool] = None,
10266
10266
  # Combine given search criteria in a boolean OR expression.
10267
10267
  filter_or: Optional[bool] = None,
10268
+ # Search for Looker support roles.
10269
+ is_support_role: Optional[bool] = None,
10268
10270
  transport_options: Optional[transport.TransportOptions] = None,
10269
10271
  ) -> Sequence[mdls.Role]:
10270
10272
  """Search Roles"""
@@ -10282,6 +10284,7 @@ class Looker40SDK(api_methods.APIMethods):
10282
10284
  "name": name,
10283
10285
  "built_in": built_in,
10284
10286
  "filter_or": filter_or,
10287
+ "is_support_role": is_support_role,
10285
10288
  },
10286
10289
  transport_options=transport_options,
10287
10290
  ),
@@ -10839,6 +10842,84 @@ class Looker40SDK(api_methods.APIMethods):
10839
10842
  )
10840
10843
  return response
10841
10844
 
10845
+ # ### Search Scheduled Plans
10846
+ #
10847
+ # Returns all scheduled plans which matches the given search criteria.
10848
+ #
10849
+ # If no user_id is provided, this function returns the scheduled plans owned by the caller.
10850
+ #
10851
+ #
10852
+ # To list all schedules for all users, pass `all_users=true`.
10853
+ #
10854
+ #
10855
+ # The caller must have `see_schedules` permission to see other users' scheduled plans.
10856
+ #
10857
+ # GET /scheduled_plans/search -> Sequence[mdls.ScheduledPlan]
10858
+ def search_scheduled_plans(
10859
+ self,
10860
+ # Return scheduled plans belonging to this user_id. If not provided, returns scheduled plans owned by the caller.
10861
+ user_id: Optional[str] = None,
10862
+ # Comma delimited list of field names. If provided, only the fields specified will be included in the response
10863
+ fields: Optional[str] = None,
10864
+ # Return scheduled plans belonging to all users (caller needs see_schedules permission)
10865
+ all_users: Optional[bool] = None,
10866
+ # Number of results to return. (used with offset and takes priority over page and per_page)
10867
+ limit: Optional[int] = None,
10868
+ # Number of results to skip before returning any. (used with limit and takes priority over page and per_page)
10869
+ offset: Optional[int] = None,
10870
+ # Fields to sort by.
10871
+ sorts: Optional[str] = None,
10872
+ # Match Scheduled plan's name.
10873
+ name: Optional[str] = None,
10874
+ # Returns scheduled plans belonging to user with this first name.
10875
+ user_first_name: Optional[str] = None,
10876
+ # Returns scheduled plans belonging to user with this last name.
10877
+ user_last_name: Optional[str] = None,
10878
+ # Returns scheduled plans created on this Dashboard.
10879
+ dashboard_id: Optional[str] = None,
10880
+ # Returns scheduled plans created on this Look.
10881
+ look_id: Optional[str] = None,
10882
+ # Returns scheduled plans created on this LookML Dashboard.
10883
+ lookml_dashboard_id: Optional[str] = None,
10884
+ # Match recipient address.
10885
+ recipient: Optional[str] = None,
10886
+ # Match scheduled plan's destination type.
10887
+ destination_type: Optional[str] = None,
10888
+ # Match scheduled plan's delivery format.
10889
+ delivery_format: Optional[str] = None,
10890
+ # Combine given search criteria in a boolean OR expression
10891
+ filter_or: Optional[bool] = None,
10892
+ transport_options: Optional[transport.TransportOptions] = None,
10893
+ ) -> Sequence[mdls.ScheduledPlan]:
10894
+ """Search Scheduled Plans"""
10895
+ response = cast(
10896
+ Sequence[mdls.ScheduledPlan],
10897
+ self.get(
10898
+ path="/scheduled_plans/search",
10899
+ structure=Sequence[mdls.ScheduledPlan],
10900
+ query_params={
10901
+ "user_id": user_id,
10902
+ "fields": fields,
10903
+ "all_users": all_users,
10904
+ "limit": limit,
10905
+ "offset": offset,
10906
+ "sorts": sorts,
10907
+ "name": name,
10908
+ "user_first_name": user_first_name,
10909
+ "user_last_name": user_last_name,
10910
+ "dashboard_id": dashboard_id,
10911
+ "look_id": look_id,
10912
+ "lookml_dashboard_id": lookml_dashboard_id,
10913
+ "recipient": recipient,
10914
+ "destination_type": destination_type,
10915
+ "delivery_format": delivery_format,
10916
+ "filter_or": filter_or,
10917
+ },
10918
+ transport_options=transport_options,
10919
+ ),
10920
+ )
10921
+ return response
10922
+
10842
10923
  # ### Get Scheduled Plans for a Look
10843
10924
  #
10844
10925
  # Returns all scheduled plans for a look which belong to the caller or given user.
@@ -11132,17 +11213,9 @@ class Looker40SDK(api_methods.APIMethods):
11132
11213
  #
11133
11214
  # | result_format | Description
11134
11215
  # | :-----------: | :--- |
11135
- # | json | Plain json
11136
- # | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query
11137
- # | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query
11138
- # | csv | Comma separated values with a header
11139
- # | txt | Tab separated values with a header
11140
- # | html | Simple html
11141
- # | md | Simple markdown
11142
- # | xlsx | MS Excel spreadsheet
11143
- # | sql | Returns the generated SQL rather than running the query
11216
+ # | json_bi | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query
11144
11217
  #
11145
- # GET /sql_interface_queries/{query_id}/run/{result_format} -> mdls.QueryFormats
11218
+ # GET /sql_interface_queries/{query_id}/run/{result_format} -> mdls.JsonBi
11146
11219
  def run_sql_interface_query(
11147
11220
  self,
11148
11221
  # Integer id of query
@@ -11150,14 +11223,14 @@ class Looker40SDK(api_methods.APIMethods):
11150
11223
  # Format of result, options are: ["json_bi"]
11151
11224
  result_format: str,
11152
11225
  transport_options: Optional[transport.TransportOptions] = None,
11153
- ) -> mdls.QueryFormats:
11226
+ ) -> mdls.JsonBi:
11154
11227
  """Run SQL Interface Query"""
11155
11228
  result_format = self.encode_path_param(result_format)
11156
11229
  response = cast(
11157
- mdls.QueryFormats,
11230
+ mdls.JsonBi,
11158
11231
  self.get(
11159
11232
  path=f"/sql_interface_queries/{query_id}/run/{result_format}",
11160
- structure=mdls.QueryFormats,
11233
+ structure=mdls.JsonBi,
11161
11234
  transport_options=transport_options,
11162
11235
  ),
11163
11236
  )
@@ -21,7 +21,7 @@
21
21
  # SOFTWARE.
22
22
  #
23
23
 
24
- # 343 API models: 260 Spec, 0 Request, 61 Write, 22 Enum
24
+ # 342 API models: 259 Spec, 0 Request, 61 Write, 22 Enum
25
25
 
26
26
 
27
27
  # NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0
@@ -1247,6 +1247,7 @@ class ContentSearch(model.Model):
1247
1247
  folder_name: Name of the folder where the content is saved
1248
1248
  view_count: Number of times the content has been viewed
1249
1249
  preferred_viewer: Preferred way of viewing the content (only applies to dashboards)
1250
+ model: Name of the model the explore belongs to
1250
1251
  """
1251
1252
 
1252
1253
  can: Optional[MutableMapping[str, bool]] = None
@@ -1258,6 +1259,7 @@ class ContentSearch(model.Model):
1258
1259
  folder_name: Optional[str] = None
1259
1260
  view_count: Optional[int] = None
1260
1261
  preferred_viewer: Optional[str] = None
1262
+ model: Optional[str] = None
1261
1263
 
1262
1264
  def __init__(
1263
1265
  self,
@@ -1270,7 +1272,8 @@ class ContentSearch(model.Model):
1270
1272
  folder_id: Optional[str] = None,
1271
1273
  folder_name: Optional[str] = None,
1272
1274
  view_count: Optional[int] = None,
1273
- preferred_viewer: Optional[str] = None
1275
+ preferred_viewer: Optional[str] = None,
1276
+ model: Optional[str] = None
1274
1277
  ):
1275
1278
  self.can = can
1276
1279
  self.content_id = content_id
@@ -1281,6 +1284,7 @@ class ContentSearch(model.Model):
1281
1284
  self.folder_name = folder_name
1282
1285
  self.view_count = view_count
1283
1286
  self.preferred_viewer = preferred_viewer
1287
+ self.model = model
1284
1288
 
1285
1289
 
1286
1290
  @attr.s(auto_attribs=True, init=False)
@@ -1292,6 +1296,7 @@ class ContentSummary(model.Model):
1292
1296
  content_type: Content type
1293
1297
  content_id: Content id
1294
1298
  content_slug: Content slug
1299
+ content_url: Content url
1295
1300
  title: Content title
1296
1301
  description: Content Description
1297
1302
  last_viewed_at: Last time viewed by current user
@@ -1312,6 +1317,7 @@ class ContentSummary(model.Model):
1312
1317
  content_type: Optional[str] = None
1313
1318
  content_id: Optional[str] = None
1314
1319
  content_slug: Optional[str] = None
1320
+ content_url: Optional[str] = None
1315
1321
  title: Optional[str] = None
1316
1322
  description: Optional[str] = None
1317
1323
  last_viewed_at: Optional[datetime.datetime] = None
@@ -1334,6 +1340,7 @@ class ContentSummary(model.Model):
1334
1340
  content_type: Optional[str] = None,
1335
1341
  content_id: Optional[str] = None,
1336
1342
  content_slug: Optional[str] = None,
1343
+ content_url: Optional[str] = None,
1337
1344
  title: Optional[str] = None,
1338
1345
  description: Optional[str] = None,
1339
1346
  last_viewed_at: Optional[datetime.datetime] = None,
@@ -1353,6 +1360,7 @@ class ContentSummary(model.Model):
1353
1360
  self.content_type = content_type
1354
1361
  self.content_id = content_id
1355
1362
  self.content_slug = content_slug
1363
+ self.content_url = content_url
1356
1364
  self.title = title
1357
1365
  self.description = description
1358
1366
  self.last_viewed_at = last_viewed_at
@@ -3728,6 +3736,7 @@ class DBConnection(model.Model):
3728
3736
  default_bq_connection: When true, represents that this connection is the default BQ connection.
3729
3737
  bq_storage_project_id: The project id of the default BigQuery storage project.
3730
3738
  bq_roles_verified: When true, represents that all project roles have been verified.
3739
+ p4sa_name: The name of P4SA service account that is associated with the Looker instance
3731
3740
  """
3732
3741
 
3733
3742
  can: Optional[MutableMapping[str, bool]] = None
@@ -3786,6 +3795,7 @@ class DBConnection(model.Model):
3786
3795
  default_bq_connection: Optional[bool] = None
3787
3796
  bq_storage_project_id: Optional[str] = None
3788
3797
  bq_roles_verified: Optional[bool] = None
3798
+ p4sa_name: Optional[str] = None
3789
3799
 
3790
3800
  def __init__(
3791
3801
  self,
@@ -3845,7 +3855,8 @@ class DBConnection(model.Model):
3845
3855
  connection_pooling: Optional[bool] = None,
3846
3856
  default_bq_connection: Optional[bool] = None,
3847
3857
  bq_storage_project_id: Optional[str] = None,
3848
- bq_roles_verified: Optional[bool] = None
3858
+ bq_roles_verified: Optional[bool] = None,
3859
+ p4sa_name: Optional[str] = None
3849
3860
  ):
3850
3861
  self.can = can
3851
3862
  self.name = name
@@ -3903,6 +3914,7 @@ class DBConnection(model.Model):
3903
3914
  self.default_bq_connection = default_bq_connection
3904
3915
  self.bq_storage_project_id = bq_storage_project_id
3905
3916
  self.bq_roles_verified = bq_roles_verified
3917
+ self.p4sa_name = p4sa_name
3906
3918
 
3907
3919
 
3908
3920
  @attr.s(auto_attribs=True, init=False)
@@ -6766,6 +6778,7 @@ class Look(model.Model):
6766
6778
  folder:
6767
6779
  folder_id: Folder Id
6768
6780
  updated_at: Time that the Look was updated.
6781
+ user_name: Name of User that created the look.
6769
6782
  view_count: Number of times viewed in the Looker web UI
6770
6783
  """
6771
6784
 
@@ -6798,6 +6811,7 @@ class Look(model.Model):
6798
6811
  folder: Optional["FolderBase"] = None
6799
6812
  folder_id: Optional[str] = None
6800
6813
  updated_at: Optional[datetime.datetime] = None
6814
+ user_name: Optional[str] = None
6801
6815
  view_count: Optional[int] = None
6802
6816
 
6803
6817
  def __init__(
@@ -6832,6 +6846,7 @@ class Look(model.Model):
6832
6846
  folder: Optional["FolderBase"] = None,
6833
6847
  folder_id: Optional[str] = None,
6834
6848
  updated_at: Optional[datetime.datetime] = None,
6849
+ user_name: Optional[str] = None,
6835
6850
  view_count: Optional[int] = None
6836
6851
  ):
6837
6852
  self.can = can
@@ -6863,6 +6878,7 @@ class Look(model.Model):
6863
6878
  self.folder = folder
6864
6879
  self.folder_id = folder_id
6865
6880
  self.updated_at = updated_at
6881
+ self.user_name = user_name
6866
6882
  self.view_count = view_count
6867
6883
 
6868
6884
 
@@ -7902,6 +7918,7 @@ class LookWithDashboards(model.Model):
7902
7918
  folder:
7903
7919
  folder_id: Folder Id
7904
7920
  updated_at: Time that the Look was updated.
7921
+ user_name: Name of User that created the look.
7905
7922
  view_count: Number of times viewed in the Looker web UI
7906
7923
  dashboards: Dashboards
7907
7924
  """
@@ -7935,6 +7952,7 @@ class LookWithDashboards(model.Model):
7935
7952
  folder: Optional["FolderBase"] = None
7936
7953
  folder_id: Optional[str] = None
7937
7954
  updated_at: Optional[datetime.datetime] = None
7955
+ user_name: Optional[str] = None
7938
7956
  view_count: Optional[int] = None
7939
7957
  dashboards: Optional[Sequence["DashboardBase"]] = None
7940
7958
 
@@ -7970,6 +7988,7 @@ class LookWithDashboards(model.Model):
7970
7988
  folder: Optional["FolderBase"] = None,
7971
7989
  folder_id: Optional[str] = None,
7972
7990
  updated_at: Optional[datetime.datetime] = None,
7991
+ user_name: Optional[str] = None,
7973
7992
  view_count: Optional[int] = None,
7974
7993
  dashboards: Optional[Sequence["DashboardBase"]] = None
7975
7994
  ):
@@ -8002,6 +8021,7 @@ class LookWithDashboards(model.Model):
8002
8021
  self.folder = folder
8003
8022
  self.folder_id = folder_id
8004
8023
  self.updated_at = updated_at
8024
+ self.user_name = user_name
8005
8025
  self.view_count = view_count
8006
8026
  self.dashboards = dashboards
8007
8027
 
@@ -8039,6 +8059,7 @@ class LookWithQuery(model.Model):
8039
8059
  folder:
8040
8060
  folder_id: Folder Id
8041
8061
  updated_at: Time that the Look was updated.
8062
+ user_name: Name of User that created the look.
8042
8063
  view_count: Number of times viewed in the Looker web UI
8043
8064
  query:
8044
8065
  url: Url
@@ -8073,6 +8094,7 @@ class LookWithQuery(model.Model):
8073
8094
  folder: Optional["FolderBase"] = None
8074
8095
  folder_id: Optional[str] = None
8075
8096
  updated_at: Optional[datetime.datetime] = None
8097
+ user_name: Optional[str] = None
8076
8098
  view_count: Optional[int] = None
8077
8099
  query: Optional["Query"] = None
8078
8100
  url: Optional[str] = None
@@ -8109,6 +8131,7 @@ class LookWithQuery(model.Model):
8109
8131
  folder: Optional["FolderBase"] = None,
8110
8132
  folder_id: Optional[str] = None,
8111
8133
  updated_at: Optional[datetime.datetime] = None,
8134
+ user_name: Optional[str] = None,
8112
8135
  view_count: Optional[int] = None,
8113
8136
  query: Optional["Query"] = None,
8114
8137
  url: Optional[str] = None
@@ -8142,6 +8165,7 @@ class LookWithQuery(model.Model):
8142
8165
  self.folder = folder
8143
8166
  self.folder_id = folder_id
8144
8167
  self.updated_at = updated_at
8168
+ self.user_name = user_name
8145
8169
  self.view_count = view_count
8146
8170
  self.query = query
8147
8171
  self.url = url
@@ -9556,55 +9580,6 @@ class Query(model.Model):
9556
9580
  self.has_table_calculations = has_table_calculations
9557
9581
 
9558
9582
 
9559
- @attr.s(auto_attribs=True, init=False)
9560
- class QueryFormats(model.Model):
9561
- """
9562
- Attributes:
9563
- json_bi:
9564
- json:
9565
- json_detail:
9566
- csv:
9567
- txt:
9568
- html:
9569
- md:
9570
- xlsx:
9571
- sql:
9572
- """
9573
-
9574
- json_bi: Optional["JsonBi"] = None
9575
- json: Optional[str] = None
9576
- json_detail: Optional[str] = None
9577
- csv: Optional[str] = None
9578
- txt: Optional[str] = None
9579
- html: Optional[str] = None
9580
- md: Optional[str] = None
9581
- xlsx: Optional[str] = None
9582
- sql: Optional[str] = None
9583
-
9584
- def __init__(
9585
- self,
9586
- *,
9587
- json_bi: Optional["JsonBi"] = None,
9588
- json: Optional[str] = None,
9589
- json_detail: Optional[str] = None,
9590
- csv: Optional[str] = None,
9591
- txt: Optional[str] = None,
9592
- html: Optional[str] = None,
9593
- md: Optional[str] = None,
9594
- xlsx: Optional[str] = None,
9595
- sql: Optional[str] = None
9596
- ):
9597
- self.json_bi = json_bi
9598
- self.json = json
9599
- self.json_detail = json_detail
9600
- self.csv = csv
9601
- self.txt = txt
9602
- self.html = html
9603
- self.md = md
9604
- self.xlsx = xlsx
9605
- self.sql = sql
9606
-
9607
-
9608
9583
  @attr.s(auto_attribs=True, init=False)
9609
9584
  class QueryTask(model.Model):
9610
9585
  """
@@ -12024,7 +11999,6 @@ class User(model.Model):
12024
11999
  allow_normal_group_membership: User can be a direct member of a normal Looker group.
12025
12000
  allow_roles_from_normal_groups: User can inherit roles from a normal Looker group.
12026
12001
  embed_group_folder_id: (Embed only) ID of user's group folder based on the external_group_id optionally specified during embed user login
12027
- is_iam_admin: User is an IAM Admin - only available in Looker (Google Cloud core)
12028
12002
  url: Link to get this item
12029
12003
  """
12030
12004
 
@@ -12063,7 +12037,6 @@ class User(model.Model):
12063
12037
  allow_normal_group_membership: Optional[bool] = None
12064
12038
  allow_roles_from_normal_groups: Optional[bool] = None
12065
12039
  embed_group_folder_id: Optional[str] = None
12066
- is_iam_admin: Optional[bool] = None
12067
12040
  url: Optional[str] = None
12068
12041
 
12069
12042
  def __init__(
@@ -12104,7 +12077,6 @@ class User(model.Model):
12104
12077
  allow_normal_group_membership: Optional[bool] = None,
12105
12078
  allow_roles_from_normal_groups: Optional[bool] = None,
12106
12079
  embed_group_folder_id: Optional[str] = None,
12107
- is_iam_admin: Optional[bool] = None,
12108
12080
  url: Optional[str] = None
12109
12081
  ):
12110
12082
  self.can = can
@@ -12142,7 +12114,6 @@ class User(model.Model):
12142
12114
  self.allow_normal_group_membership = allow_normal_group_membership
12143
12115
  self.allow_roles_from_normal_groups = allow_roles_from_normal_groups
12144
12116
  self.embed_group_folder_id = embed_group_folder_id
12145
- self.is_iam_admin = is_iam_admin
12146
12117
  self.url = url
12147
12118
 
12148
12119
 
@@ -13323,7 +13294,7 @@ class WriteDashboardElement(model.Model):
13323
13294
  body_text: Text tile body text
13324
13295
  dashboard_id: Id of Dashboard
13325
13296
  look: Dynamic writeable type for LookWithQuery removes:
13326
- can, content_metadata_id, id, content_favorite_id, created_at, deleted_at, deleter_id, embed_url, excel_file_url, favorite_count, google_spreadsheet_formula, image_embed_url, last_accessed_at, last_updater_id, last_viewed_at, model, public_slug, public_url, short_url, updated_at, view_count, url
13297
+ can, content_metadata_id, id, content_favorite_id, created_at, deleted_at, deleter_id, embed_url, excel_file_url, favorite_count, google_spreadsheet_formula, image_embed_url, last_accessed_at, last_updater_id, last_viewed_at, model, public_slug, public_url, short_url, updated_at, user_name, view_count, url
13327
13298
  look_id: Id Of Look
13328
13299
  merge_result_id: ID of merge result
13329
13300
  note_display: Note Display
@@ -13600,7 +13571,7 @@ class WriteDatagroup(model.Model):
13600
13571
  class WriteDBConnection(model.Model):
13601
13572
  """
13602
13573
  Dynamic writeable type for DBConnection removes:
13603
- can, dialect, snippets, pdts_enabled, uses_oauth, uses_instance_oauth, supports_data_studio_link, created_at, user_id, example, last_regen_at, last_reap_at, managed, default_bq_connection, bq_roles_verified
13574
+ can, dialect, snippets, pdts_enabled, uses_oauth, uses_instance_oauth, supports_data_studio_link, created_at, user_id, example, last_regen_at, last_reap_at, managed, default_bq_connection, p4sa_name
13604
13575
 
13605
13576
  Attributes:
13606
13577
  name: Name of the connection. Also used as the unique identifier
@@ -13645,6 +13616,7 @@ class WriteDBConnection(model.Model):
13645
13616
  pdt_api_control_enabled: PDT builds on this connection can be kicked off and cancelled via API.
13646
13617
  connection_pooling: Enable database connection pooling.
13647
13618
  bq_storage_project_id: The project id of the default BigQuery storage project.
13619
+ bq_roles_verified: When true, represents that all project roles have been verified.
13648
13620
  """
13649
13621
 
13650
13622
  name: Optional[str] = None
@@ -13688,6 +13660,7 @@ class WriteDBConnection(model.Model):
13688
13660
  pdt_api_control_enabled: Optional[bool] = None
13689
13661
  connection_pooling: Optional[bool] = None
13690
13662
  bq_storage_project_id: Optional[str] = None
13663
+ bq_roles_verified: Optional[bool] = None
13691
13664
 
13692
13665
  def __init__(
13693
13666
  self,
@@ -13732,7 +13705,8 @@ class WriteDBConnection(model.Model):
13732
13705
  cost_estimate_enabled: Optional[bool] = None,
13733
13706
  pdt_api_control_enabled: Optional[bool] = None,
13734
13707
  connection_pooling: Optional[bool] = None,
13735
- bq_storage_project_id: Optional[str] = None
13708
+ bq_storage_project_id: Optional[str] = None,
13709
+ bq_roles_verified: Optional[bool] = None
13736
13710
  ):
13737
13711
  self.name = name
13738
13712
  self.host = host
@@ -13775,6 +13749,7 @@ class WriteDBConnection(model.Model):
13775
13749
  self.pdt_api_control_enabled = pdt_api_control_enabled
13776
13750
  self.connection_pooling = connection_pooling
13777
13751
  self.bq_storage_project_id = bq_storage_project_id
13752
+ self.bq_roles_verified = bq_roles_verified
13778
13753
 
13779
13754
 
13780
13755
  @attr.s(auto_attribs=True, init=False)
@@ -14272,7 +14247,7 @@ class WriteLookmlModel(model.Model):
14272
14247
  class WriteLookWithQuery(model.Model):
14273
14248
  """
14274
14249
  Dynamic writeable type for LookWithQuery removes:
14275
- can, content_metadata_id, id, content_favorite_id, created_at, deleted_at, deleter_id, embed_url, excel_file_url, favorite_count, google_spreadsheet_formula, image_embed_url, last_accessed_at, last_updater_id, last_viewed_at, model, public_slug, public_url, short_url, updated_at, view_count, url
14250
+ can, content_metadata_id, id, content_favorite_id, created_at, deleted_at, deleter_id, embed_url, excel_file_url, favorite_count, google_spreadsheet_formula, image_embed_url, last_accessed_at, last_updater_id, last_viewed_at, model, public_slug, public_url, short_url, updated_at, user_name, view_count, url
14276
14251
 
14277
14252
  Attributes:
14278
14253
  title: Look Title
@@ -15443,7 +15418,7 @@ class WriteTheme(model.Model):
15443
15418
  class WriteUser(model.Model):
15444
15419
  """
15445
15420
  Dynamic writeable type for User removes:
15446
- can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, embed_group_folder_id, is_iam_admin, url
15421
+ can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, embed_group_folder_id, url
15447
15422
 
15448
15423
  Attributes:
15449
15424
  credentials_email: Dynamic writeable type for CredentialsEmail removes:
@@ -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 = "24.16"
23
+ sdk_version = "24.18"
24
24
  environment_prefix = "LOOKERSDK"
@@ -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__ = "24.16.2"
23
+ __version__ = "24.18.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: looker-sdk
3
- Version: 24.16.2
3
+ Version: 24.18.1
4
4
  Summary: Looker REST API
5
5
  Home-page: https://pypi.python.org/pypi/looker_sdk
6
6
  Author: Looker Data Sciences, Inc.
@@ -27,8 +27,6 @@ looker_sdk/sdk/constants.py
27
27
  looker_sdk/sdk/api40/__init__.py
28
28
  looker_sdk/sdk/api40/methods.py
29
29
  looker_sdk/sdk/api40/models.py
30
- tests/__init__.py
31
- tests/conftest.py
32
30
  tests/integration/__init__.py
33
31
  tests/integration/test_methods.py
34
32
  tests/integration/test_netrc.py
@@ -49,7 +49,7 @@ setup(
49
49
  keywords=["Looker", "Looker API", "looker_sdk", "Looker API 4.0"],
50
50
  name=NAME,
51
51
  package_data={"looker_sdk": ["py.typed", "looker_sdk/looker-sample.ini"]},
52
- packages=find_packages(),
52
+ packages=find_packages(exclude=("tests",)),
53
53
  # restrict python to <=3.9.9 due to https://github.com/looker-open-source/sdk-codegen/issues/944
54
54
  python_requires=">=3.6",
55
55
  url="https://pypi.python.org/pypi/looker_sdk",
File without changes
@@ -1,133 +0,0 @@
1
- import os.path
2
- import sys
3
- from typing import Dict, List, Union, cast
4
-
5
- import pytest # type: ignore
6
- import yaml
7
-
8
- import looker_sdk # noqa: E402
9
- from looker_sdk.sdk.api40 import methods as methods40
10
- from looker_sdk.sdk.api40 import models as models40 # noqa: E402
11
-
12
- sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
13
-
14
-
15
- @pytest.fixture(scope="session")
16
- def dashboards(_test_data):
17
- return _test_data["dashboards"]
18
-
19
-
20
- @pytest.fixture(scope="session")
21
- def looks(_test_data):
22
- return _test_data["looks"]
23
-
24
-
25
- @pytest.fixture(scope="session")
26
- def queries(_test_data) -> List[Dict[str, str]]:
27
- return _test_data["queries"]
28
-
29
-
30
- @pytest.fixture(scope="session")
31
- def queries_system_activity(_test_data) -> List[Dict[str, str]]:
32
- return _test_data["queries_system_activity"]
33
-
34
-
35
- @pytest.fixture(scope="session")
36
- def users(_test_data) -> List[Dict[str, str]]:
37
- return _test_data["users"]
38
-
39
-
40
- @pytest.fixture(scope="session")
41
- def email_domain(_test_data) -> str:
42
- return _test_data["email_domain"]
43
-
44
-
45
- @pytest.fixture(scope="session")
46
- def string_content_types(_test_data) -> List[str]:
47
- return _test_data["content_types"]["string"]
48
-
49
-
50
- @pytest.fixture(scope="session")
51
- def binary_content_types(_test_data) -> List[str]:
52
- return _test_data["content_types"]["binary"]
53
-
54
-
55
- TTestData = Dict[str, Union[str, List[Dict[str, str]]]]
56
-
57
-
58
- @pytest.fixture(scope="session", name="_test_data")
59
- def _get_test_data() -> TTestData:
60
- with open("../test/data.yml") as f:
61
- test_data = cast(TTestData, yaml.safe_load(f))
62
- test_data["email_domain"] = "@testfoo.com"
63
- return test_data
64
-
65
-
66
- @pytest.fixture(scope="function")
67
- def remove_test_dashboards(sdk40: methods40.Looker40SDK, dashboards):
68
- # Clean up any test dashboards that may exist. We do this at the beginning
69
- # instead of the end of tests in case we want to view the dashboards after the test
70
- for d in dashboards:
71
- search_results = sdk40.search_dashboards(title=d["title"])
72
- if len(search_results) > 0:
73
- for dashboard in search_results:
74
- sdk40.delete_dashboard(cast(str, dashboard.id))
75
-
76
-
77
- @pytest.fixture(scope="function")
78
- def remove_test_looks(sdk40: methods40.Looker40SDK, looks):
79
- for l in looks:
80
- search_results = sdk40.search_looks(title=l["title"])
81
- if len(search_results) > 0:
82
- for look in search_results:
83
- sdk40.delete_look(cast(int, look.id))
84
-
85
-
86
- @pytest.fixture(name="test_users", scope="session")
87
- def create_test_users(
88
- sdk40: methods40.Looker40SDK, users: List[Dict[str, str]], email_domain: str
89
- ):
90
- user_ids: List[int] = []
91
- for u in users:
92
- users = sdk40.search_users(first_name=u["first_name"], last_name=u["last_name"])
93
- if len(users) > 0:
94
- # recover from crashed test, dummy
95
- user = users[0]
96
- user_ids.append(user.id)
97
- else:
98
- user = sdk40.create_user(
99
- models40.WriteUser(first_name=u["first_name"], last_name=u["last_name"])
100
- )
101
-
102
- if user.id:
103
- user_ids.append(user.id)
104
- email = f"{u['first_name']}.{u['last_name']}{email_domain}"
105
- sdk40.create_user_credentials_email(
106
- user.id, models40.WriteCredentialsEmail(email=email)
107
- )
108
-
109
- yield
110
-
111
- for user_id in user_ids:
112
- sdk40.delete_user(user_id)
113
-
114
-
115
- @pytest.fixture(scope="session")
116
- def sdk40(init_sdk):
117
- filename = os.getenv("LOOKERSDK_INI", "../looker.ini")
118
- sdk = looker_sdk.init40(filename)
119
- yield sdk
120
- sdk.auth.logout()
121
-
122
-
123
- @pytest.fixture(scope="session")
124
- def init_sdk():
125
- def _sdk(api_version):
126
- filename = os.getenv("LOOKERSDK_INI", "../looker.ini")
127
- if api_version == 4.0:
128
- sdk = looker_sdk.init40(filename)
129
- elif api_version == 3.1:
130
- sdk = looker_sdk.init31(filename)
131
- return sdk
132
-
133
- return _sdk
File without changes
File without changes
File without changes
File without changes