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.
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/PKG-INFO +1 -1
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/sdk/api40/methods.py +95 -22
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/sdk/api40/models.py +36 -61
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/sdk/constants.py +1 -1
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/version.py +1 -1
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk.egg-info/PKG-INFO +1 -1
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk.egg-info/SOURCES.txt +0 -2
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/setup.py +1 -1
- looker_sdk-24.16.2/tests/__init__.py +0 -0
- looker_sdk-24.16.2/tests/conftest.py +0 -133
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/LICENSE.txt +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/MANIFEST.in +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/README.rst +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/__init__.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/error.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/py.typed +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/__init__.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/api_methods.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/api_settings.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/auth_session.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/auth_token.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/constants.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/hooks.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/model.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/requests_transport.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/serialize.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/rtl/transport.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/sdk/__init__.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk/sdk/api40/__init__.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk.egg-info/dependency_links.txt +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk.egg-info/requires.txt +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/looker_sdk.egg-info/top_level.txt +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/setup.cfg +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/integration/__init__.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/integration/test_methods.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/integration/test_netrc.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/__init__.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/test_api_methods.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/test_api_settings.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/test_auth_session.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/test_auth_token.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/test_requests_transport.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/test_serialize.py +0 -0
- {looker_sdk-24.16.2 → looker_sdk-24.18.1}/tests/rtl/test_transport.py +0 -0
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
# SOFTWARE.
|
|
22
22
|
#
|
|
23
23
|
|
|
24
|
-
#
|
|
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.
|
|
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.
|
|
6037
|
+
) -> Sequence[mdls.FolderBase]:
|
|
6038
6038
|
"""Get All Folders"""
|
|
6039
6039
|
response = cast(
|
|
6040
|
-
Sequence[mdls.
|
|
6040
|
+
Sequence[mdls.FolderBase],
|
|
6041
6041
|
self.get(
|
|
6042
6042
|
path="/folders",
|
|
6043
|
-
structure=Sequence[mdls.
|
|
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 ->
|
|
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
|
-
) ->
|
|
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
|
-
|
|
9007
|
+
str,
|
|
9008
9008
|
self.get(
|
|
9009
9009
|
path=f"/query_tasks/{query_task_id}/results",
|
|
9010
|
-
structure=
|
|
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
|
-
# |
|
|
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.
|
|
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.
|
|
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.
|
|
11230
|
+
mdls.JsonBi,
|
|
11158
11231
|
self.get(
|
|
11159
11232
|
path=f"/sql_interface_queries/{query_id}/run/{result_format}",
|
|
11160
|
-
structure=mdls.
|
|
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
|
-
#
|
|
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,
|
|
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,
|
|
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:
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|