looker-sdk 24.2.1__py3-none-any.whl → 25.0.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.
- looker_sdk/error.py +2 -2
- looker_sdk/sdk/api40/methods.py +212 -37
- looker_sdk/sdk/api40/models.py +477 -142
- looker_sdk/sdk/constants.py +1 -1
- looker_sdk/version.py +1 -1
- {looker_sdk-24.2.1.dist-info → looker_sdk-25.0.0.dist-info}/METADATA +5 -5
- {looker_sdk-24.2.1.dist-info → looker_sdk-25.0.0.dist-info}/RECORD +10 -12
- {looker_sdk-24.2.1.dist-info → looker_sdk-25.0.0.dist-info}/WHEEL +1 -1
- tests/__init__.py +0 -0
- tests/conftest.py +0 -133
- {looker_sdk-24.2.1.dist-info → looker_sdk-25.0.0.dist-info}/LICENSE.txt +0 -0
- {looker_sdk-24.2.1.dist-info → looker_sdk-25.0.0.dist-info}/top_level.txt +0 -0
looker_sdk/sdk/constants.py
CHANGED
looker_sdk/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: looker-sdk
|
|
3
|
-
Version:
|
|
3
|
+
Version: 25.0.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.
|
|
@@ -9,10 +9,10 @@ Keywords: Looker,Looker API,looker_sdk,Looker API 4.0
|
|
|
9
9
|
Requires-Python: >=3.6
|
|
10
10
|
Description-Content-Type: text/x-rst
|
|
11
11
|
License-File: LICENSE.txt
|
|
12
|
-
Requires-Dist: requests
|
|
13
|
-
Requires-Dist: typing-extensions
|
|
14
|
-
Requires-Dist: attrs
|
|
15
|
-
Requires-Dist: cattrs
|
|
12
|
+
Requires-Dist: requests>=2.22
|
|
13
|
+
Requires-Dist: typing-extensions>=4.1.1
|
|
14
|
+
Requires-Dist: attrs>=20.1.0; python_version >= "3.7"
|
|
15
|
+
Requires-Dist: cattrs>=1.3; python_version >= "3.7"
|
|
16
16
|
|
|
17
17
|
===========
|
|
18
18
|
Looker SDK
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
looker_sdk/__init__.py,sha256=0UOw2v-BP1bNoBIIm-BnyKUpGQB3Zx-JZRmpYyLiIuY,2589
|
|
2
|
-
looker_sdk/error.py,sha256=
|
|
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=
|
|
4
|
+
looker_sdk/version.py,sha256=4B8Xj6LFthmnrTSPjgleLaaulpUiS-BKNpjR_Ls-epk,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,12 +14,10 @@ looker_sdk/rtl/requests_transport.py,sha256=2lckuJyjeySAuAn7v-RA_xTjjWe53uCCLSWg
|
|
|
14
14
|
looker_sdk/rtl/serialize.py,sha256=Arm26aGLOhW-uUW4qgV1tTna83A3gNMYcF9YwRvf0gQ,4418
|
|
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=
|
|
17
|
+
looker_sdk/sdk/constants.py,sha256=pYtcc0UoyRO148wO5V_WRp2bxWnqC8e5byMP1kVUEnw,1186
|
|
18
18
|
looker_sdk/sdk/api40/__init__.py,sha256=Dvx1t9vDBvgEl-p1eeP7ebEC6Q6wb6rASPi7nx3z7dg,18
|
|
19
|
-
looker_sdk/sdk/api40/methods.py,sha256=
|
|
20
|
-
looker_sdk/sdk/api40/models.py,sha256=
|
|
21
|
-
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
-
tests/conftest.py,sha256=ZLymw2rfMVus_CRBbbcxpK3_rEpMJRMQX9A5m2aQgQs,3895
|
|
19
|
+
looker_sdk/sdk/api40/methods.py,sha256=jbG4g9mMQPZRluD_IKBDW4gOJwlWJ-rFGJGG-IlkZZY,520686
|
|
20
|
+
looker_sdk/sdk/api40/models.py,sha256=DhSx60TYcR6dK3oRiXvgHUzHDfUketAhYCiovGAT794,639941
|
|
23
21
|
tests/integration/__init__.py,sha256=K4tvUu8CgFRwtDhDNixHKDDb8uubXgevQBq8JmZvf8Y,63
|
|
24
22
|
tests/integration/test_methods.py,sha256=GXeBAxKYLH45YsPDGduRxaoGKBNoxRX1Cxdo4a_2eW8,24977
|
|
25
23
|
tests/integration/test_netrc.py,sha256=XJAzCh853Q0P6ZY_Cq6CtRHAqlvjGkBItgvxJMQw4Sw,1595
|
|
@@ -31,8 +29,8 @@ tests/rtl/test_auth_token.py,sha256=Ep4u0ushHqKiIkGgw-XVn1lSzPeH6pVmDB2bw-MXNAo,
|
|
|
31
29
|
tests/rtl/test_requests_transport.py,sha256=mSsxudpAkKe-uSVOIzDrV0XCFlj_ACt6T1yzbUbuwG0,5442
|
|
32
30
|
tests/rtl/test_serialize.py,sha256=1SC8jigZFFL3mrU2oSTnc2nbDxXve224_r3GaxEeU90,25917
|
|
33
31
|
tests/rtl/test_transport.py,sha256=tI83LYOeuWEmkngXyRqMjW-pv-ipLPLj4t0hGD8zqL8,1555
|
|
34
|
-
looker_sdk-
|
|
35
|
-
looker_sdk-
|
|
36
|
-
looker_sdk-
|
|
37
|
-
looker_sdk-
|
|
38
|
-
looker_sdk-
|
|
32
|
+
looker_sdk-25.0.0.dist-info/LICENSE.txt,sha256=N4Rmmbuo5EryYSCXcvjuXL1ZXwyXanRzuGP-dJzwsoE,1094
|
|
33
|
+
looker_sdk-25.0.0.dist-info/METADATA,sha256=GVSD4_IQWtgzqgfPZTdIFvgMErXeNAUg-dHiCTuPmJE,7021
|
|
34
|
+
looker_sdk-25.0.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
35
|
+
looker_sdk-25.0.0.dist-info/top_level.txt,sha256=tDPNJRQM_A_Oncxlgxwvnzq7hZDWZaadt_nR8DmORTI,17
|
|
36
|
+
looker_sdk-25.0.0.dist-info/RECORD,,
|
tests/__init__.py
DELETED
|
File without changes
|
tests/conftest.py
DELETED
|
@@ -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
|