diff --git a/.editorconfig b/.editorconfig index ee2c8abd6..643e240d0 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,6 +4,9 @@ end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true -[*.{kt,gradle}] +[*.{kt,kts}] indent_style = space indent_size = 4 +ktlint_standard_no-wildcard-imports = disabled +ktlint_standard_filename = disabled +ktlint_standard_enum-entry-name-case = disabled diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..610c8f51b --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @looker-open-source/cloud-looker-devrel diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index cc36515a7..4c9863bbd 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -7,7 +7,8 @@ ## Developer Checklist [ℹ️](https://github.com/looker-open-source/sdk-codegen/blob/main/CONTRIBUTING.md#developer-checklist) Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: -- [ ] Make sure to open an issue as a [bug/issue](https://github.com/looker-open-source/sdk-codegen/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea + +- [ ] Make sure to open an issue as a [bug/issue](https://github.com/looker-open-source/sdk-codegen/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea - [ ] Ensure the tests and linter pass - [ ] Appropriate docs were updated (if necessary) diff --git a/.github/workflows/apix-ci.yml b/.github/workflows/apix-ci.yml index cfb2d57a2..f5f705497 100644 --- a/.github/workflows/apix-ci.yml +++ b/.github/workflows/apix-ci.yml @@ -2,6 +2,7 @@ name: API Explorer CI on: pull_request: paths: + - package.json - packages/code-editor/** - packages/run-it/** - packages/api-explorer/** @@ -13,6 +14,7 @@ on: branches: - main paths: + - package.json - packages/code-editor/** - packages/run-it/** - packages/api-explorer/** @@ -37,7 +39,7 @@ jobs: matrix: os: - ubuntu - node-version: [16.x] + node-version: [18.x] steps: - name: Cancel Previous Runs diff --git a/.github/workflows/codegen-ci.yml b/.github/workflows/codegen-ci.yml index acd068403..d1d539d01 100644 --- a/.github/workflows/codegen-ci.yml +++ b/.github/workflows/codegen-ci.yml @@ -2,6 +2,7 @@ name: Codegen CI on: pull_request: paths: + - package.json - packages/sdk-codegen/** - packages/sdk-codegen-utils/** - packages/sdk-codegen-scripts/** @@ -11,6 +12,7 @@ on: branches: - main paths: + - package.json - packages/sdk-codegen/** - packages/sdk-codegen-utils/** - packages/sdk-codegen-scripts/** @@ -71,7 +73,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x - name: Install dependencies run: | diff --git a/.github/workflows/fix-npm.yml b/.github/workflows/fix-npm.yml new file mode 100644 index 000000000..666d57224 --- /dev/null +++ b/.github/workflows/fix-npm.yml @@ -0,0 +1,14 @@ +name: Fix NPM info + +on: + workflow_dispatch: + +jobs: + + fix: + runs-on: ubuntu-latest + steps: + - name: Get NPM token last 8 + run: echo $NODE_AUTH_TOKEN | sed 's/^.*\(.\{8\}\)$/\1/' + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN_RELEASE_BACKED }} diff --git a/.github/workflows/go-ci.yml b/.github/workflows/go-ci.yml index 07cbf0d0a..d04efac57 100644 --- a/.github/workflows/go-ci.yml +++ b/.github/workflows/go-ci.yml @@ -70,7 +70,7 @@ jobs: uses: looker-open-source/reusable-actions/.github/workflows/supported-versions.yml@main integration: - needs: [setup,unit] + needs: [setup, unit] name: Integration - ${{ matrix.os }} / Looker.${{ matrix.looker }} env: LOOKERSDK_CLIENT_ID: ${{ secrets.LOOKERSDK_CLIENT_ID }} @@ -85,7 +85,8 @@ jobs: matrix: os: - ubuntu - looker: ${{ fromJson(needs.setup.outputs.matrix_json) }} + looker: + ${{ fromJson(needs.setup.outputs.matrix_json) }} # TODO uncomment `include:` when either macos or windows works to satisfaction. #include: diff --git a/.github/workflows/hackathon-ci.yml b/.github/workflows/hackathon-ci.yml index 49ab4b627..7be1eef1b 100644 --- a/.github/workflows/hackathon-ci.yml +++ b/.github/workflows/hackathon-ci.yml @@ -2,6 +2,7 @@ name: Hackathon CI on: pull_request: paths: + - package.json - packages/wholly-artifact/** - packages/hackathon/** - .github/workflows/hackathon-ci.yml @@ -10,6 +11,7 @@ on: branches: - main paths: + - package.json - packages/wholly-artifact/** - packages/hackathon/** - .github/workflows/hackathon-ci.yml @@ -31,7 +33,7 @@ jobs: matrix: os: - ubuntu - node-version: [16.x] + node-version: [18.x] steps: - name: Cancel Previous Runs diff --git a/.github/workflows/lerna-publish.yml b/.github/workflows/lerna-publish.yml index fc9b66a98..dcb7b195a 100644 --- a/.github/workflows/lerna-publish.yml +++ b/.github/workflows/lerna-publish.yml @@ -56,7 +56,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 18.x registry-url: https://wombat-dressing-room.appspot.com - name: Install dependencies and build @@ -74,7 +74,7 @@ jobs: echo "client_secret=secret" >> looker.ini echo "verify_ssl=False" >> looker.ini echo "timeout=31" >> looker.ini - echo "[Looker31]" >> looker.ini + echo "[Looker40]" >> looker.ini echo "base_url=https://self-signed.looker.com:19999" >> looker.ini echo "verify_ssl=False" >> looker.ini echo "timeout=30" >> looker.ini @@ -84,6 +84,6 @@ jobs: ${{ github.workspace }}/.github/scripts/wait_for_looker.sh - name: Publish to NPM registry - run: $(npm bin)/lerna publish from-package --yes --no-verify-access + run: npx lerna publish from-package --yes --no-verify-access env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN_RELEASE_BACKED }} diff --git a/.github/workflows/p3-issue-label.yml b/.github/workflows/p3-issue-label.yml index f180e24e6..4c9f825f5 100644 --- a/.github/workflows/p3-issue-label.yml +++ b/.github/workflows/p3-issue-label.yml @@ -18,4 +18,4 @@ jobs: owner: context.repo.owner, repo: context.repo.repo, labels: ["p3"] - }) \ No newline at end of file + }) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 6592769b3..5012a1ae2 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -61,7 +61,7 @@ jobs: matrix: os: - ubuntu - - macos + # - macos # Temporary disable since runners down - windows python-version: - '3.10' @@ -98,7 +98,7 @@ jobs: path: python/results/ integration: - needs: [unit,setup] + needs: [unit, setup] name: Integration - ${{ matrix.os }} / Looker.${{ matrix.looker }} env: TOX_JUNIT_OUTPUT_NAME: ${{ matrix.os }}.Looker-${{ matrix.looker }}.py3.x @@ -117,10 +117,11 @@ jobs: matrix: os: - large-ubuntu - looker: ${{ fromJson(needs.setup.outputs.matrix_json) }} + looker: + ${{ fromJson(needs.setup.outputs.matrix_json) }} # TODO uncomment `include:` when either macos or windows works to satisfaction. - #include: + #include: # TODO: macos matrix leg is functional but it takes ~20 minutes (compared # to ~4 minutes for ubuntu) because docker install takes ~5 minutes # and docker pull takes ~10 minutes. We can probably figure out how to diff --git a/.github/workflows/release-metrics.yml b/.github/workflows/release-metrics.yml index 77e75023f..d170fc741 100644 --- a/.github/workflows/release-metrics.yml +++ b/.github/workflows/release-metrics.yml @@ -18,16 +18,16 @@ jobs: uses: google-github-actions/setup-gcloud@v1.1.0 - run: 'jq -c ''.release | - { - package_name: .name | split(" ")[0], - name, - tag_name, - version: .tag_name | split("-v")[1], - html_url, - target_commitish, - created_at, - published_at, - draft, - prerelease - }'' $GITHUB_EVENT_PATH > releases.json' + { + package_name: .name | split(" ")[0], + name, + tag_name, + version: .tag_name | split("-v")[1], + html_url, + target_commitish, + created_at, + published_at, + draft, + prerelease + }'' $GITHUB_EVENT_PATH > releases.json' - run: bq load --source_format=NEWLINE_DELIMITED_JSON metrics.releases releases.json diff --git a/.github/workflows/required-checks-hack-ci.yml b/.github/workflows/required-checks-hack-ci.yml index 8a9cee5b6..374528bbb 100644 --- a/.github/workflows/required-checks-hack-ci.yml +++ b/.github/workflows/required-checks-hack-ci.yml @@ -44,6 +44,7 @@ jobs: with: filters: | apix: + - package.json - packages/code-editor/**/* - packages/run-it/**/* - packages/api-explorer/**/* @@ -51,11 +52,13 @@ jobs: - packages/extension-utils/**/* - .github/workflows/apix-ci.yml codegen: + - package.json - packages/sdk-codegen/**/* - packages/sdk-codegen-utils/**/* - packages/sdk-codegen-scripts/**/* - .github/workflows/codegen-ci.yml hackathon: + - package.json - packages/wholly-sheet/**/* - packages/hackathon/**/* - .github/workflows/hackathon-ci.yml @@ -67,6 +70,7 @@ jobs: - docs/resources/**/* - .github/workflows/resources-ci.yml tssdk: + - package.json - packages/sdk/**/* - packages/sdk-rtl/**/* - packages/sdk-node/**/* diff --git a/.github/workflows/resources-ci.yml b/.github/workflows/resources-ci.yml index e272e42c5..37b98f7da 100644 --- a/.github/workflows/resources-ci.yml +++ b/.github/workflows/resources-ci.yml @@ -38,7 +38,7 @@ jobs: - name: Install Node uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 18.x - name: Install Dependencies run: | diff --git a/.github/workflows/triage-issue-label.yml b/.github/workflows/triage-issue-label.yml index d378fa092..a4a69088b 100644 --- a/.github/workflows/triage-issue-label.yml +++ b/.github/workflows/triage-issue-label.yml @@ -17,4 +17,4 @@ jobs: owner: context.repo.owner, repo: context.repo.repo, labels: ["need triage"] - }) \ No newline at end of file + }) diff --git a/.github/workflows/tssdk-ci.yml b/.github/workflows/tssdk-ci.yml index e06bd5e6d..7b64b90a7 100644 --- a/.github/workflows/tssdk-ci.yml +++ b/.github/workflows/tssdk-ci.yml @@ -2,6 +2,7 @@ name: TypeScript SDK CI on: pull_request: paths: + - package.json - packages/sdk/** - packages/sdk-rtl/** - packages/sdk-node/** @@ -14,6 +15,7 @@ on: branches: - main paths: + - package.json - packages/sdk/** - packages/sdk-rtl/** - packages/sdk-node/** @@ -41,7 +43,7 @@ jobs: matrix: os: - ubuntu - node-version: [14.x, 16.x] + node-version: [18.x, 20.x] steps: - name: Cancel Previous Runs @@ -110,7 +112,7 @@ jobs: setup: uses: looker-open-source/reusable-actions/.github/workflows/supported-versions.yml@main integration: - needs: [unit,setup] + needs: [unit, setup] name: Integration - ${{ matrix.os }} / Node.${{ matrix.node-version }} / Looker.${{ matrix.looker }} env: JEST_JUNIT_OUTPUT_DIR: results/tssdk @@ -120,7 +122,7 @@ jobs: runs-on: ${{ matrix.os }}-latest strategy: matrix: - node-version: [16.x] + node-version: [18.x, 20.x] os: - ubuntu looker: ${{ fromJson(needs.setup.outputs.matrix_json) }} diff --git a/.prettierignore b/.prettierignore index 0e19a1782..56a41889c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,9 @@ -**/node_modules/* -packages/**/lib/ - +*.md +**/*.md +**/*.mdx +**/dist +**/lib +**/storybook-static +**/test/output +**/.eslintrc +*.lock \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 000000000..deb2720b9 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,8 @@ +// module.exports = require("@looker/prettier-config"); +const config = { + // SSchema: "https://json.schemastore.org/prettierrc", + semi: true, + singleQuote: true, + trailingComma: 'es5', +}; +module.exports = config; diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index ed40f2ae3..000000000 --- a/.prettierrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "http://json.schemastore.org/prettierrc", - "semi": false, - "singleQuote": true -} diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 86774a9d4..66e04839f 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,23 +1,24 @@ { - ".": "23.16.0", - "packages/api-explorer": "0.9.52", + ".": "24.3.0", + "packages/api-explorer": "0.9.58", "packages/code-editor": "0.1.30", - "packages/extension-api-explorer": "22.21.9", - "packages/extension-sdk": "23.16.0", - "packages/extension-sdk-react": "23.16.0", - "packages/extension-utils": "0.1.29", - "packages/hackathon": "22.21.11", - "packages/run-it": "0.9.52", - "packages/sdk": "23.16.0", + "packages/extension-api-explorer": "22.21.15", + "packages/extension-sdk": "24.2.1", + "packages/extension-sdk-react": "24.2.1", + "packages/extension-utils": "0.1.35", + "packages/hackathon": "22.21.17", + "packages/run-it": "0.9.58", + "packages/sdk": "24.2.1", "packages/sdk-codegen": "21.8.2", - "packages/sdk-codegen-scripts": "21.5.9", + "packages/sdk-codegen-scripts": "21.5.15", "packages/sdk-codegen-utils": "21.0.11", - "packages/sdk-node": "23.16.0", + "packages/sdk-node": "24.2.1", "packages/sdk-rtl": "21.6.1", - "packages/wholly-artifact": "0.1.10", - "packages/wholly-sheet": "0.5.48", - "python": "23.16.0", - "packages/extension-playground": "1.0.9", - "packages/embed-services": "23.16.0", - "packages/embed-components": "23.16.0" + "packages/wholly-artifact": "0.1.16", + "packages/wholly-sheet": "0.5.54", + "python": "24.2.1", + "packages/extension-playground": "1.0.15", + "packages/extension-tile-playground": "1.1.2", + "packages/embed-services": "24.2.1", + "packages/embed-components": "24.2.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index cefa51304..f7e8ec5f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,764 +1,720 @@ # Changelog -## [23.16.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.14.1...sdk-codegen-all-v23.16.0) (2023-09-21) +## [24.3.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v24.2.0...sdk-codegen-all-v24.3.0) (2024-03-12) + + +### Features + +* error-doc handling in python SDK ([#1440](https://github.com/looker-open-source/sdk-codegen/issues/1440)) ([21daada](https://github.com/looker-open-source/sdk-codegen/commit/21daada7f6c1ab52c861bd2e2a01a560cd0294f7)) + +## [24.2.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v24.0.0...sdk-codegen-all-v24.2.0) (2024-02-21) ### Features -* generate SDKs for Looker 23.16 ([#1365](https://github.com/looker-open-source/sdk-codegen/issues/1365)) ([9d6937a](https://github.com/looker-open-source/sdk-codegen/commit/9d6937a042d1649b41bc1851d579b5aa5360ad44)) +* generate SDKs for Looker 24.2 ([#1432](https://github.com/looker-open-source/sdk-codegen/issues/1432)) ([0ef33b2](https://github.com/looker-open-source/sdk-codegen/commit/0ef33b29903df5a3e83872951619e20495ef4ab8)) + +## [24.0.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.21.0...sdk-codegen-all-v24.0.0) (2024-02-03) + + +### Features + +* generate SDKs for Looker 24.0 ([#1426](https://github.com/looker-open-source/sdk-codegen/issues/1426)) ([8c42be7](https://github.com/looker-open-source/sdk-codegen/commit/8c42be7cede8594626f2f453ca937801a609efe4)) ### Bug Fixes -* add mdls import to makeTheCall when mdls is used ([#1355](https://github.com/looker-open-source/sdk-codegen/issues/1355)) ([4f5ed2b](https://github.com/looker-open-source/sdk-codegen/commit/4f5ed2be97cc1462b980c20c2e9140cee087865f)) -* sync up package versions ([#1356](https://github.com/looker-open-source/sdk-codegen/issues/1356)) ([351a15d](https://github.com/looker-open-source/sdk-codegen/commit/351a15d71dd6b87124a0275a9b2d126f4e5c3ed1)) +* **Transport:** Disable automatic User Agent Suffix [clone of [#1420](https://github.com/looker-open-source/sdk-codegen/issues/1420)] ([#1423](https://github.com/looker-open-source/sdk-codegen/issues/1423)) ([aa6c173](https://github.com/looker-open-source/sdk-codegen/commit/aa6c173d47b5b260625eae5e5ebc542111c2395a)) -## [23.14.1](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.12.0...sdk-codegen-all-v23.14.1) (2023-08-15) +## [23.21.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.20.0...sdk-codegen-all-v23.21.0) (2023-12-19) + +### Features + +- make update filter naming generic ([#1413](https://github.com/looker-open-source/sdk-codegen/issues/1413)) ([0fb1b5d](https://github.com/looker-open-source/sdk-codegen/commit/0fb1b5d9374b476c7aeee065207936b7cd5403fd)) +## [23.20.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.18.0...sdk-codegen-all-v23.20.0) (2023-11-30) ### Features -* generate SDKs for Looker 23.14 ([#1347](https://github.com/looker-open-source/sdk-codegen/issues/1347)) ([90f3f5f](https://github.com/looker-open-source/sdk-codegen/commit/90f3f5f3104c1a76cd1cce10e06e0b995e53c40f)) -* Send message on visConfig extension update ([#1348](https://github.com/looker-open-source/sdk-codegen/issues/1348)) ([20295d3](https://github.com/looker-open-source/sdk-codegen/commit/20295d318aa7aa59083342038f0c5168959ef3fd)) +- generate SDKs for Looker 23.20 ([#1402](https://github.com/looker-open-source/sdk-codegen/issues/1402)) ([dabb34a](https://github.com/looker-open-source/sdk-codegen/commit/dabb34a793a136cd2fbb4b8cb0a63b4efa89614f)) +## [23.18.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.16.0...sdk-codegen-all-v23.18.0) (2023-11-22) + +### Features + +- Allow for setting vis config in extensions ([3fbe8fd](https://github.com/looker-open-source/sdk-codegen/commit/3fbe8fd7d44611370c5fc4e608957953dabb82c0)) +- Allow for setting vis config in extensions ([#1394](https://github.com/looker-open-source/sdk-codegen/issues/1394)) ([3ea3cfc](https://github.com/looker-open-source/sdk-codegen/commit/3ea3cfcb0f40237da28de113a344f7dd0f94a355)) +- generate SDKs for Looker 23.18 ([3f13822](https://github.com/looker-open-source/sdk-codegen/commit/3f13822daa3a5b9c179d23f0c1c8a6433f0a0655)) + +## [23.16.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.14.1...sdk-codegen-all-v23.16.0) (2023-09-21) + +### Features + +- generate SDKs for Looker 23.16 ([#1365](https://github.com/looker-open-source/sdk-codegen/issues/1365)) ([9d6937a](https://github.com/looker-open-source/sdk-codegen/commit/9d6937a042d1649b41bc1851d579b5aa5360ad44)) ### Bug Fixes -* change visconfig types to reflect new getter ([#1350](https://github.com/looker-open-source/sdk-codegen/issues/1350)) ([c7648d9](https://github.com/looker-open-source/sdk-codegen/commit/c7648d9792bf976e2ea0ab0e94dfa0d45de83e66)) +- add mdls import to makeTheCall when mdls is used ([#1355](https://github.com/looker-open-source/sdk-codegen/issues/1355)) ([4f5ed2b](https://github.com/looker-open-source/sdk-codegen/commit/4f5ed2be97cc1462b980c20c2e9140cee087865f)) +- sync up package versions ([#1356](https://github.com/looker-open-source/sdk-codegen/issues/1356)) ([351a15d](https://github.com/looker-open-source/sdk-codegen/commit/351a15d71dd6b87124a0275a9b2d126f4e5c3ed1)) + +## [23.14.1](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.12.0...sdk-codegen-all-v23.14.1) (2023-08-15) + +### Features + +- generate SDKs for Looker 23.14 ([#1347](https://github.com/looker-open-source/sdk-codegen/issues/1347)) ([90f3f5f](https://github.com/looker-open-source/sdk-codegen/commit/90f3f5f3104c1a76cd1cce10e06e0b995e53c40f)) +- Send message on visConfig extension update ([#1348](https://github.com/looker-open-source/sdk-codegen/issues/1348)) ([20295d3](https://github.com/looker-open-source/sdk-codegen/commit/20295d318aa7aa59083342038f0c5168959ef3fd)) + +### Bug Fixes +- change visconfig types to reflect new getter ([#1350](https://github.com/looker-open-source/sdk-codegen/issues/1350)) ([c7648d9](https://github.com/looker-open-source/sdk-codegen/commit/c7648d9792bf976e2ea0ab0e94dfa0d45de83e66)) ### Miscellaneous Chores -* Update Typescript SDK README.md ([#1353](https://github.com/looker-open-source/sdk-codegen/issues/1353)) ([b528e38](https://github.com/looker-open-source/sdk-codegen/commit/b528e3895fc4b5c7b864627fcfb9d421233f12a1)) +- Update Typescript SDK README.md ([#1353](https://github.com/looker-open-source/sdk-codegen/issues/1353)) ([b528e38](https://github.com/looker-open-source/sdk-codegen/commit/b528e3895fc4b5c7b864627fcfb9d421233f12a1)) ## [23.12.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.10.0...sdk-codegen-all-v23.12.0) (2023-07-17) - ### Features -* Add sagas to OAuth Form ([#1330](https://github.com/looker-open-source/sdk-codegen/issues/1330)) ([3095a48](https://github.com/looker-open-source/sdk-codegen/commit/3095a488d578bf5496f6e1622271bc568a4512f9)) -* generate SDKs for Looker 23.12 ([#1335](https://github.com/looker-open-source/sdk-codegen/issues/1335)) ([fba4161](https://github.com/looker-open-source/sdk-codegen/commit/fba4161497fe4688508e2e3a7ba476fc2d4ea11d)) +- Add sagas to OAuth Form ([#1330](https://github.com/looker-open-source/sdk-codegen/issues/1330)) ([3095a48](https://github.com/looker-open-source/sdk-codegen/commit/3095a488d578bf5496f6e1622271bc568a4512f9)) +- generate SDKs for Looker 23.12 ([#1335](https://github.com/looker-open-source/sdk-codegen/issues/1335)) ([fba4161](https://github.com/looker-open-source/sdk-codegen/commit/fba4161497fe4688508e2e3a7ba476fc2d4ea11d)) ## [23.10.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.8.1...sdk-codegen-all-v23.10.0) (2023-06-15) - ### Features -* change "Cancel" to "Close" in QuickEmbed component ([#1317](https://github.com/looker-open-source/sdk-codegen/issues/1317)) ([6eedf6f](https://github.com/looker-open-source/sdk-codegen/commit/6eedf6ffaf0e3487152bc283d925c86058cd9f59)) -* generate SDKs for Looker 23.10 ([#1326](https://github.com/looker-open-source/sdk-codegen/issues/1326)) ([121b90e](https://github.com/looker-open-source/sdk-codegen/commit/121b90e9258a49de51e2332f6f2b639b96956c36)) -* minor tweaks to embed-components and embed-services ([#1315](https://github.com/looker-open-source/sdk-codegen/issues/1315)) ([f3c5fc4](https://github.com/looker-open-source/sdk-codegen/commit/f3c5fc44a6161c0aab519527a4feb68e1f826bce)) - +- change "Cancel" to "Close" in QuickEmbed component ([#1317](https://github.com/looker-open-source/sdk-codegen/issues/1317)) ([6eedf6f](https://github.com/looker-open-source/sdk-codegen/commit/6eedf6ffaf0e3487152bc283d925c86058cd9f59)) +- generate SDKs for Looker 23.10 ([#1326](https://github.com/looker-open-source/sdk-codegen/issues/1326)) ([121b90e](https://github.com/looker-open-source/sdk-codegen/commit/121b90e9258a49de51e2332f6f2b639b96956c36)) +- minor tweaks to embed-components and embed-services ([#1315](https://github.com/looker-open-source/sdk-codegen/issues/1315)) ([f3c5fc4](https://github.com/looker-open-source/sdk-codegen/commit/f3c5fc44a6161c0aab519527a4feb68e1f826bce)) ### Bug Fixes -* use new CDN for errorcodes repository ([#1320](https://github.com/looker-open-source/sdk-codegen/issues/1320)) ([df40441](https://github.com/looker-open-source/sdk-codegen/commit/df40441cb1f187df5469f834486f8ff4de82c266)) +- use new CDN for errorcodes repository ([#1320](https://github.com/looker-open-source/sdk-codegen/issues/1320)) ([df40441](https://github.com/looker-open-source/sdk-codegen/commit/df40441cb1f187df5469f834486f8ff4de82c266)) ## [23.8.1](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.8.0...sdk-codegen-all-v23.8.1) (2023-05-11) - ### Bug Fixes -* release config for embed-components ([#1312](https://github.com/looker-open-source/sdk-codegen/issues/1312)) ([b450071](https://github.com/looker-open-source/sdk-codegen/commit/b45007116a340a9e5b026303b5919a85ee33d1ba)) +- release config for embed-components ([#1312](https://github.com/looker-open-source/sdk-codegen/issues/1312)) ([b450071](https://github.com/looker-open-source/sdk-codegen/commit/b45007116a340a9e5b026303b5919a85ee33d1ba)) ## [23.8.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.7.0...sdk-codegen-all-v23.8.0) (2023-05-11) - ### Features -* Add Looker content cleanup automation example ([#1279](https://github.com/looker-open-source/sdk-codegen/issues/1279)) ([f2644fc](https://github.com/looker-open-source/sdk-codegen/commit/f2644fc209045fd9be18a721d0746d5027d59ad8)) -* generate SDKs for Looker 23.8 ([#1311](https://github.com/looker-open-source/sdk-codegen/issues/1311)) ([e0b6597](https://github.com/looker-open-source/sdk-codegen/commit/e0b65973c3827b1c701fe8941d0f010ad7603354)) -* QuickEmbed component ([#1306](https://github.com/looker-open-source/sdk-codegen/issues/1306)) ([4c78712](https://github.com/looker-open-source/sdk-codegen/commit/4c78712d44fb32dbdc0690a6121bc35086dec44a)) -* replace @looker/redux for with npm dependency ([#1307](https://github.com/looker-open-source/sdk-codegen/issues/1307)) ([baa58db](https://github.com/looker-open-source/sdk-codegen/commit/baa58db1bce9d974384c63a0e11301f38774a7b2)) -* SelectTheme component ([#1300](https://github.com/looker-open-source/sdk-codegen/issues/1300)) ([95c0da6](https://github.com/looker-open-source/sdk-codegen/commit/95c0da628d1d22fae2c6968f988047bfacc5fd01)) +- Add Looker content cleanup automation example ([#1279](https://github.com/looker-open-source/sdk-codegen/issues/1279)) ([f2644fc](https://github.com/looker-open-source/sdk-codegen/commit/f2644fc209045fd9be18a721d0746d5027d59ad8)) +- generate SDKs for Looker 23.8 ([#1311](https://github.com/looker-open-source/sdk-codegen/issues/1311)) ([e0b6597](https://github.com/looker-open-source/sdk-codegen/commit/e0b65973c3827b1c701fe8941d0f010ad7603354)) +- QuickEmbed component ([#1306](https://github.com/looker-open-source/sdk-codegen/issues/1306)) ([4c78712](https://github.com/looker-open-source/sdk-codegen/commit/4c78712d44fb32dbdc0690a6121bc35086dec44a)) +- replace @looker/redux for with npm dependency ([#1307](https://github.com/looker-open-source/sdk-codegen/issues/1307)) ([baa58db](https://github.com/looker-open-source/sdk-codegen/commit/baa58db1bce9d974384c63a0e11301f38774a7b2)) +- SelectTheme component ([#1300](https://github.com/looker-open-source/sdk-codegen/issues/1300)) ([95c0da6](https://github.com/looker-open-source/sdk-codegen/commit/95c0da628d1d22fae2c6968f988047bfacc5fd01)) ## [23.7.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.6.0...sdk-codegen-all-v23.7.0) (2023-04-13) - ### Features -* base class for all services ([#1295](https://github.com/looker-open-source/sdk-codegen/issues/1295)) ([b51f782](https://github.com/looker-open-source/sdk-codegen/commit/b51f782b4da04581e6ef262d26453430916580a8)) -* embed url service ([#1297](https://github.com/looker-open-source/sdk-codegen/issues/1297)) ([0f71acf](https://github.com/looker-open-source/sdk-codegen/commit/0f71acf083043e7056f65b34acd56a617438e4be)) -* singleton factory and theme service ([#1298](https://github.com/looker-open-source/sdk-codegen/issues/1298)) ([18af00b](https://github.com/looker-open-source/sdk-codegen/commit/18af00b9894b9c19597c3e868161e04b387df20b)) +- base class for all services ([#1295](https://github.com/looker-open-source/sdk-codegen/issues/1295)) ([b51f782](https://github.com/looker-open-source/sdk-codegen/commit/b51f782b4da04581e6ef262d26453430916580a8)) +- embed url service ([#1297](https://github.com/looker-open-source/sdk-codegen/issues/1297)) ([0f71acf](https://github.com/looker-open-source/sdk-codegen/commit/0f71acf083043e7056f65b34acd56a617438e4be)) +- singleton factory and theme service ([#1298](https://github.com/looker-open-source/sdk-codegen/issues/1298)) ([18af00b](https://github.com/looker-open-source/sdk-codegen/commit/18af00b9894b9c19597c3e868161e04b387df20b)) ## [23.6.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.4.0...sdk-codegen-all-v23.6.0) (2023-04-11) - ### Features -* Add Go SDK custom header support and README ([#1288](https://github.com/looker-open-source/sdk-codegen/issues/1288)) ([308b419](https://github.com/looker-open-source/sdk-codegen/commit/308b419a67c4806dda4eb3f15064661925314bda)) -* generate SDKs for Looker 23.6 ([#1293](https://github.com/looker-open-source/sdk-codegen/issues/1293)) ([dab9e0a](https://github.com/looker-open-source/sdk-codegen/commit/dab9e0a745ca7c099db13e258a0eea8c6b7b6e24)) +- Add Go SDK custom header support and README ([#1288](https://github.com/looker-open-source/sdk-codegen/issues/1288)) ([308b419](https://github.com/looker-open-source/sdk-codegen/commit/308b419a67c4806dda4eb3f15064661925314bda)) +- generate SDKs for Looker 23.6 ([#1293](https://github.com/looker-open-source/sdk-codegen/issues/1293)) ([dab9e0a](https://github.com/looker-open-source/sdk-codegen/commit/dab9e0a745ca7c099db13e258a0eea8c6b7b6e24)) ## [23.4.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.2.1...sdk-codegen-all-v23.4.0) (2023-03-31) - ### Features -* embed playground ([#1280](https://github.com/looker-open-source/sdk-codegen/issues/1280)) ([28f1218](https://github.com/looker-open-source/sdk-codegen/commit/28f121830f116da59b7f1cd248433c15c98cc56e)) -* generate SDKs for Looker 23.4 ([#1290](https://github.com/looker-open-source/sdk-codegen/issues/1290)) ([d7cd650](https://github.com/looker-open-source/sdk-codegen/commit/d7cd65054369a5eb93235a2d9b85b0f553bd1306)) - +- embed playground ([#1280](https://github.com/looker-open-source/sdk-codegen/issues/1280)) ([28f1218](https://github.com/looker-open-source/sdk-codegen/commit/28f121830f116da59b7f1cd248433c15c98cc56e)) +- generate SDKs for Looker 23.4 ([#1290](https://github.com/looker-open-source/sdk-codegen/issues/1290)) ([d7cd650](https://github.com/looker-open-source/sdk-codegen/commit/d7cd65054369a5eb93235a2d9b85b0f553bd1306)) ### Bug Fixes -* Implement Go SDK timeout ([#1287](https://github.com/looker-open-source/sdk-codegen/issues/1287)) ([44974ec](https://github.com/looker-open-source/sdk-codegen/commit/44974eccdc4f1d454906a4236d865de0fdb71320)) -* Make Go SDK set correct content-type header ([#1283](https://github.com/looker-open-source/sdk-codegen/issues/1283)) ([b1f98c6](https://github.com/looker-open-source/sdk-codegen/commit/b1f98c6745b5084b42d6d6a29336e86681b15f83)) -* Oauth message on failed verify ([#1282](https://github.com/looker-open-source/sdk-codegen/issues/1282)) ([f3c1b2c](https://github.com/looker-open-source/sdk-codegen/commit/f3c1b2c3ef6e34ab3f984e3e28288a99f14d77b7)) -* Set Go SDK's User-Agent header ([#1285](https://github.com/looker-open-source/sdk-codegen/issues/1285)) ([68fd4c4](https://github.com/looker-open-source/sdk-codegen/commit/68fd4c4b6081551ba4813547303ecdd19e8e4e04)) +- Implement Go SDK timeout ([#1287](https://github.com/looker-open-source/sdk-codegen/issues/1287)) ([44974ec](https://github.com/looker-open-source/sdk-codegen/commit/44974eccdc4f1d454906a4236d865de0fdb71320)) +- Make Go SDK set correct content-type header ([#1283](https://github.com/looker-open-source/sdk-codegen/issues/1283)) ([b1f98c6](https://github.com/looker-open-source/sdk-codegen/commit/b1f98c6745b5084b42d6d6a29336e86681b15f83)) +- Oauth message on failed verify ([#1282](https://github.com/looker-open-source/sdk-codegen/issues/1282)) ([f3c1b2c](https://github.com/looker-open-source/sdk-codegen/commit/f3c1b2c3ef6e34ab3f984e3e28288a99f14d77b7)) +- Set Go SDK's User-Agent header ([#1285](https://github.com/looker-open-source/sdk-codegen/issues/1285)) ([68fd4c4](https://github.com/looker-open-source/sdk-codegen/commit/68fd4c4b6081551ba4813547303ecdd19e8e4e04)) ## [23.2.1](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.2.0...sdk-codegen-all-v23.2.1) (2023-03-09) - ### Bug Fixes -* correct documentation on WhollyArtifact construction ([#1269](https://github.com/looker-open-source/sdk-codegen/issues/1269)) ([bec902c](https://github.com/looker-open-source/sdk-codegen/commit/bec902c511c77e02d49239e94f68fd91d2c38106)) +- correct documentation on WhollyArtifact construction ([#1269](https://github.com/looker-open-source/sdk-codegen/issues/1269)) ([bec902c](https://github.com/looker-open-source/sdk-codegen/commit/bec902c511c77e02d49239e94f68fd91d2c38106)) ## [23.2.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v23.0.0...sdk-codegen-all-v23.2.0) (2023-03-01) - ### Features -* generate SDKs for Looker 23.2 ([#1257](https://github.com/looker-open-source/sdk-codegen/issues/1257)) ([75346bc](https://github.com/looker-open-source/sdk-codegen/commit/75346bc0cc03224661a2986a44f5d670f872def4)) +- generate SDKs for Looker 23.2 ([#1257](https://github.com/looker-open-source/sdk-codegen/issues/1257)) ([75346bc](https://github.com/looker-open-source/sdk-codegen/commit/75346bc0cc03224661a2986a44f5d670f872def4)) ## [23.0.0](https://github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.13.0...sdk-codegen-all-v23.0.0) (2023-02-22) - ### Features -* generate SDKs for Looker 23.0 ([#1237](https://github.com/looker-open-source/sdk-codegen/issues/1237)) ([2ade858](https://github.com/looker-open-source/sdk-codegen/commit/2ade85815c43383169263659f5dddd783c062c09)) -* keep all body parameters toggle in API Explorer requests ([#1245](https://github.com/looker-open-source/sdk-codegen/issues/1245)) ([043ed3f](https://github.com/looker-open-source/sdk-codegen/commit/043ed3ff12cba4f821604b5b668d7301ed4aa6d1)) -* show Looker release version providing API specification ([#1233](https://github.com/looker-open-source/sdk-codegen/issues/1233)) ([a2be9ee](https://github.com/looker-open-source/sdk-codegen/commit/a2be9ee4736ce88336a27b78989763ecb2c57e00)) -* track request time if the transport doesn't ([#1231](https://github.com/looker-open-source/sdk-codegen/issues/1231)) ([a0e31a4](https://github.com/looker-open-source/sdk-codegen/commit/a0e31a41c1075b653fc8a2bf44b297ff98b41c72)) - +- generate SDKs for Looker 23.0 ([#1237](https://github.com/looker-open-source/sdk-codegen/issues/1237)) ([2ade858](https://github.com/looker-open-source/sdk-codegen/commit/2ade85815c43383169263659f5dddd783c062c09)) +- keep all body parameters toggle in API Explorer requests ([#1245](https://github.com/looker-open-source/sdk-codegen/issues/1245)) ([043ed3f](https://github.com/looker-open-source/sdk-codegen/commit/043ed3ff12cba4f821604b5b668d7301ed4aa6d1)) +- show Looker release version providing API specification ([#1233](https://github.com/looker-open-source/sdk-codegen/issues/1233)) ([a2be9ee](https://github.com/looker-open-source/sdk-codegen/commit/a2be9ee4736ce88336a27b78989763ecb2c57e00)) +- track request time if the transport doesn't ([#1231](https://github.com/looker-open-source/sdk-codegen/issues/1231)) ([a0e31a4](https://github.com/looker-open-source/sdk-codegen/commit/a0e31a41c1075b653fc8a2bf44b297ff98b41c72)) ### Miscellaneous Chores -* Update sdk Readme and kickoff Release 23.0.0 ([#1247](https://github.com/looker-open-source/sdk-codegen/issues/1247)) ([4a8ef9d](https://github.com/looker-open-source/sdk-codegen/commit/4a8ef9dad45de28d222b35229fadd985aec06bfc)) +- Update sdk Readme and kickoff Release 23.0.0 ([#1247](https://github.com/looker-open-source/sdk-codegen/issues/1247)) ([4a8ef9d](https://github.com/looker-open-source/sdk-codegen/commit/4a8ef9dad45de28d222b35229fadd985aec06bfc)) ## [2.13.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.12.0...sdk-codegen-all-v2.13.0) (2022-12-09) - ### Features -* add request time tracking ([#1223](https://www.github.com/looker-open-source/sdk-codegen/issues/1223)) ([2aefe06](https://www.github.com/looker-open-source/sdk-codegen/commit/2aefe064d668e02f3af95202e4667036cba01979)) -* new WhollyArtifact package ([#1200](https://www.github.com/looker-open-source/sdk-codegen/issues/1200)) ([0d9d45d](https://www.github.com/looker-open-source/sdk-codegen/commit/0d9d45de07b461554739d847b7b312909228adf5)) - +- add request time tracking ([#1223](https://www.github.com/looker-open-source/sdk-codegen/issues/1223)) ([2aefe06](https://www.github.com/looker-open-source/sdk-codegen/commit/2aefe064d668e02f3af95202e4667036cba01979)) +- new WhollyArtifact package ([#1200](https://www.github.com/looker-open-source/sdk-codegen/issues/1200)) ([0d9d45d](https://www.github.com/looker-open-source/sdk-codegen/commit/0d9d45de07b461554739d847b7b312909228adf5)) ### Bug Fixes -* Fix admin add user to correctly generate API3 keys. ([#1218](https://www.github.com/looker-open-source/sdk-codegen/issues/1218)) ([6764236](https://www.github.com/looker-open-source/sdk-codegen/commit/67642366ce7e0d94d5185df3c9bc7be592a275af)) -* Hack app fixes ([#1219](https://www.github.com/looker-open-source/sdk-codegen/issues/1219)) ([7993d92](https://www.github.com/looker-open-source/sdk-codegen/commit/7993d9254f03f9f4f9d11d9f2c384b858e5dc6e1)) -* Hack App Wholly Artifact Refactor ([#1210](https://www.github.com/looker-open-source/sdk-codegen/issues/1210)) ([d508fa8](https://www.github.com/looker-open-source/sdk-codegen/commit/d508fa878ca23f6ed298359d3ec1b25a3f333fac)) -* Multiple hack app changes ([#1213](https://www.github.com/looker-open-source/sdk-codegen/issues/1213)) ([a2b7b0c](https://www.github.com/looker-open-source/sdk-codegen/commit/a2b7b0c3667d7b041ca8d546b08bd94040c275d3)) -* Multiple hack app fixes and changes [#1214](https://www.github.com/looker-open-source/sdk-codegen/issues/1214) ([9dbc204](https://www.github.com/looker-open-source/sdk-codegen/commit/9dbc2045b1702bdd98d4280f0d63518a5c21e8e2)) -* oauth timeout ([#1222](https://www.github.com/looker-open-source/sdk-codegen/issues/1222)) ([5ce073b](https://www.github.com/looker-open-source/sdk-codegen/commit/5ce073bd8171686451330abd4a25edbfb4756852)) -* Update agenda times with prefix and add studio resources ([#1220](https://www.github.com/looker-open-source/sdk-codegen/issues/1220)) ([f1296a8](https://www.github.com/looker-open-source/sdk-codegen/commit/f1296a813ee3ef0ef5e1095367b63a3c2adc5d91)) -* Updated hackapp agenda and resources and fixed markdown links ([#1217](https://www.github.com/looker-open-source/sdk-codegen/issues/1217)) ([3187766](https://www.github.com/looker-open-source/sdk-codegen/commit/318776640b9b9474d792aed53d70706be5cd45d2)) -* WhollyArtifact/Hack App table name fix ([#1212](https://www.github.com/looker-open-source/sdk-codegen/issues/1212)) ([2bba660](https://www.github.com/looker-open-source/sdk-codegen/commit/2bba660a6d9fa135eade144900bac5e5e5e180d7)) +- Fix admin add user to correctly generate API3 keys. ([#1218](https://www.github.com/looker-open-source/sdk-codegen/issues/1218)) ([6764236](https://www.github.com/looker-open-source/sdk-codegen/commit/67642366ce7e0d94d5185df3c9bc7be592a275af)) +- Hack app fixes ([#1219](https://www.github.com/looker-open-source/sdk-codegen/issues/1219)) ([7993d92](https://www.github.com/looker-open-source/sdk-codegen/commit/7993d9254f03f9f4f9d11d9f2c384b858e5dc6e1)) +- Hack App Wholly Artifact Refactor ([#1210](https://www.github.com/looker-open-source/sdk-codegen/issues/1210)) ([d508fa8](https://www.github.com/looker-open-source/sdk-codegen/commit/d508fa878ca23f6ed298359d3ec1b25a3f333fac)) +- Multiple hack app changes ([#1213](https://www.github.com/looker-open-source/sdk-codegen/issues/1213)) ([a2b7b0c](https://www.github.com/looker-open-source/sdk-codegen/commit/a2b7b0c3667d7b041ca8d546b08bd94040c275d3)) +- Multiple hack app fixes and changes [#1214](https://www.github.com/looker-open-source/sdk-codegen/issues/1214) ([9dbc204](https://www.github.com/looker-open-source/sdk-codegen/commit/9dbc2045b1702bdd98d4280f0d63518a5c21e8e2)) +- oauth timeout ([#1222](https://www.github.com/looker-open-source/sdk-codegen/issues/1222)) ([5ce073b](https://www.github.com/looker-open-source/sdk-codegen/commit/5ce073bd8171686451330abd4a25edbfb4756852)) +- Update agenda times with prefix and add studio resources ([#1220](https://www.github.com/looker-open-source/sdk-codegen/issues/1220)) ([f1296a8](https://www.github.com/looker-open-source/sdk-codegen/commit/f1296a813ee3ef0ef5e1095367b63a3c2adc5d91)) +- Updated hackapp agenda and resources and fixed markdown links ([#1217](https://www.github.com/looker-open-source/sdk-codegen/issues/1217)) ([3187766](https://www.github.com/looker-open-source/sdk-codegen/commit/318776640b9b9474d792aed53d70706be5cd45d2)) +- WhollyArtifact/Hack App table name fix ([#1212](https://www.github.com/looker-open-source/sdk-codegen/issues/1212)) ([2bba660](https://www.github.com/looker-open-source/sdk-codegen/commit/2bba660a6d9fa135eade144900bac5e5e5e180d7)) ## [2.12.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.11.0...sdk-codegen-all-v2.12.0) (2022-11-10) - ### Features -* generate SDKs for Looker 22.20 ([#1203](https://www.github.com/looker-open-source/sdk-codegen/issues/1203)) ([ba4595e](https://www.github.com/looker-open-source/sdk-codegen/commit/ba4595ee47895ec11ed1e1a74d87748285210d64)) - +- generate SDKs for Looker 22.20 ([#1203](https://www.github.com/looker-open-source/sdk-codegen/issues/1203)) ([ba4595e](https://www.github.com/looker-open-source/sdk-codegen/commit/ba4595ee47895ec11ed1e1a74d87748285210d64)) ### Bug Fixes -* Handle Go SDK 204 no responses correctly ([#1193](https://www.github.com/looker-open-source/sdk-codegen/issues/1193)) ([ba7ded8](https://www.github.com/looker-open-source/sdk-codegen/commit/ba7ded84a9a09da2ef63362792656cbd57d9aae1)) -* oauth support in APIX when embedded in another app ([#1198](https://www.github.com/looker-open-source/sdk-codegen/issues/1198)) ([c464d2f](https://www.github.com/looker-open-source/sdk-codegen/commit/c464d2f24c7f8e7d282208efd00feaaba216fe3e)) -* spec parsing unit tests ([#1207](https://www.github.com/looker-open-source/sdk-codegen/issues/1207)) ([4e86291](https://www.github.com/looker-open-source/sdk-codegen/commit/4e862913b555c6294798d11eaa012b7f72736ecb)) +- Handle Go SDK 204 no responses correctly ([#1193](https://www.github.com/looker-open-source/sdk-codegen/issues/1193)) ([ba7ded8](https://www.github.com/looker-open-source/sdk-codegen/commit/ba7ded84a9a09da2ef63362792656cbd57d9aae1)) +- oauth support in APIX when embedded in another app ([#1198](https://www.github.com/looker-open-source/sdk-codegen/issues/1198)) ([c464d2f](https://www.github.com/looker-open-source/sdk-codegen/commit/c464d2f24c7f8e7d282208efd00feaaba216fe3e)) +- spec parsing unit tests ([#1207](https://www.github.com/looker-open-source/sdk-codegen/issues/1207)) ([4e86291](https://www.github.com/looker-open-source/sdk-codegen/commit/4e862913b555c6294798d11eaa012b7f72736ecb)) ## [2.11.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.10.0...sdk-codegen-all-v2.11.0) (2022-10-17) - ### Features -* generate SDKs for Looker 22.18 ([#1191](https://www.github.com/looker-open-source/sdk-codegen/issues/1191)) ([6d487be](https://www.github.com/looker-open-source/sdk-codegen/commit/6d487be80e89bda6feea446130ad2c318eb61d43)) - +- generate SDKs for Looker 22.18 ([#1191](https://www.github.com/looker-open-source/sdk-codegen/issues/1191)) ([6d487be](https://www.github.com/looker-open-source/sdk-codegen/commit/6d487be80e89bda6feea446130ad2c318eb61d43)) ### Bug Fixes -* various path navigation issues ([#1190](https://www.github.com/looker-open-source/sdk-codegen/issues/1190)) ([e73da3d](https://www.github.com/looker-open-source/sdk-codegen/commit/e73da3d39960cb528947c21202318b84d586ce1f)) +- various path navigation issues ([#1190](https://www.github.com/looker-open-source/sdk-codegen/issues/1190)) ([e73da3d](https://www.github.com/looker-open-source/sdk-codegen/commit/e73da3d39960cb528947c21202318b84d586ce1f)) ## [2.10.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.9.0...sdk-codegen-all-v2.10.0) (2022-09-21) - ### Features -* generate SDKs for Looker 22.16 ([#1181](https://www.github.com/looker-open-source/sdk-codegen/issues/1181)) ([cf8ecdf](https://www.github.com/looker-open-source/sdk-codegen/commit/cf8ecdf53761193b575590aec21963ccc388b15a)) +- generate SDKs for Looker 22.16 ([#1181](https://www.github.com/looker-open-source/sdk-codegen/issues/1181)) ([cf8ecdf](https://www.github.com/looker-open-source/sdk-codegen/commit/cf8ecdf53761193b575590aec21963ccc388b15a)) ## [2.9.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.8.0...sdk-codegen-all-v2.9.0) (2022-09-21) - ### Features -* generate SDKs for Looker 22.14 round 2 ([#1178](https://www.github.com/looker-open-source/sdk-codegen/issues/1178)) ([944bd10](https://www.github.com/looker-open-source/sdk-codegen/commit/944bd10a4f11046e374ab7d87b1a2e2f4b344398)) +- generate SDKs for Looker 22.14 round 2 ([#1178](https://www.github.com/looker-open-source/sdk-codegen/issues/1178)) ([944bd10](https://www.github.com/looker-open-source/sdk-codegen/commit/944bd10a4f11046e374ab7d87b1a2e2f4b344398)) ## [2.8.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.7.0...sdk-codegen-all-v2.8.0) (2022-09-21) - ### Features -* ability to share a tag scene with a filter applied ([#1142](https://www.github.com/looker-open-source/sdk-codegen/issues/1142)) ([135dce3](https://www.github.com/looker-open-source/sdk-codegen/commit/135dce3a3bf75ad79525a81b2e848e118cc340e4)) -* capture error details for the Kotlin SDK ([#1137](https://www.github.com/looker-open-source/sdk-codegen/issues/1137)) ([9909206](https://www.github.com/looker-open-source/sdk-codegen/commit/9909206e326b60a4465dbd50fbcf0ddb71749ae7)) -* change diff scene route ([#1159](https://www.github.com/looker-open-source/sdk-codegen/issues/1159)) ([180cf20](https://www.github.com/looker-open-source/sdk-codegen/commit/180cf204f767474a76ad7de2ee6fb5171f910eb0)) -* copy link button for search ([#1120](https://www.github.com/looker-open-source/sdk-codegen/issues/1120)) ([d6e0c37](https://www.github.com/looker-open-source/sdk-codegen/commit/d6e0c37ae36b1ff4129cf3bb30f8462f4aa49b0d)) -* error code document retrieval ([#1136](https://www.github.com/looker-open-source/sdk-codegen/issues/1136)) ([305966b](https://www.github.com/looker-open-source/sdk-codegen/commit/305966b943e8dc6fde08d58cbb36febcbae5733f)) -* error document retrieval in API Explorer ([#1161](https://www.github.com/looker-open-source/sdk-codegen/issues/1161)) ([89a94e1](https://www.github.com/looker-open-source/sdk-codegen/commit/89a94e167b8a3e1aa662c0b5de7c585b3eac2f13)) -* error documentation redirect and support for detailed error content ([#1167](https://www.github.com/looker-open-source/sdk-codegen/issues/1167)) ([5b4fc5b](https://www.github.com/looker-open-source/sdk-codegen/commit/5b4fc5b91e05ed4ccd9090724e4ac3f506b541fd)) -* generate SDKs for Looker 22.12 ([#1175](https://www.github.com/looker-open-source/sdk-codegen/issues/1175)) ([6f427a7](https://www.github.com/looker-open-source/sdk-codegen/commit/6f427a71dd30669afc901a47418decd59b977a7a)) -* generate SDKs for Looker 22.14 ([#1176](https://www.github.com/looker-open-source/sdk-codegen/issues/1176)) ([328d3e5](https://www.github.com/looker-open-source/sdk-codegen/commit/328d3e5710fc80caf5691b8d3ea3d8b8db358ad6)) -* regenerate Looker 22.12 SDKs ([#1177](https://www.github.com/looker-open-source/sdk-codegen/issues/1177)) ([b3a9b7b](https://www.github.com/looker-open-source/sdk-codegen/commit/b3a9b7bfff6366abce4802b819d19d00ee00cd60)) -* SDK language selection as URL search parameter ([#1123](https://www.github.com/looker-open-source/sdk-codegen/issues/1123)) ([ae59b95](https://www.github.com/looker-open-source/sdk-codegen/commit/ae59b956a5f42dcdd5aa9b4c3d0da1836129a932)) - +- ability to share a tag scene with a filter applied ([#1142](https://www.github.com/looker-open-source/sdk-codegen/issues/1142)) ([135dce3](https://www.github.com/looker-open-source/sdk-codegen/commit/135dce3a3bf75ad79525a81b2e848e118cc340e4)) +- capture error details for the Kotlin SDK ([#1137](https://www.github.com/looker-open-source/sdk-codegen/issues/1137)) ([9909206](https://www.github.com/looker-open-source/sdk-codegen/commit/9909206e326b60a4465dbd50fbcf0ddb71749ae7)) +- change diff scene route ([#1159](https://www.github.com/looker-open-source/sdk-codegen/issues/1159)) ([180cf20](https://www.github.com/looker-open-source/sdk-codegen/commit/180cf204f767474a76ad7de2ee6fb5171f910eb0)) +- copy link button for search ([#1120](https://www.github.com/looker-open-source/sdk-codegen/issues/1120)) ([d6e0c37](https://www.github.com/looker-open-source/sdk-codegen/commit/d6e0c37ae36b1ff4129cf3bb30f8462f4aa49b0d)) +- error code document retrieval ([#1136](https://www.github.com/looker-open-source/sdk-codegen/issues/1136)) ([305966b](https://www.github.com/looker-open-source/sdk-codegen/commit/305966b943e8dc6fde08d58cbb36febcbae5733f)) +- error document retrieval in API Explorer ([#1161](https://www.github.com/looker-open-source/sdk-codegen/issues/1161)) ([89a94e1](https://www.github.com/looker-open-source/sdk-codegen/commit/89a94e167b8a3e1aa662c0b5de7c585b3eac2f13)) +- error documentation redirect and support for detailed error content ([#1167](https://www.github.com/looker-open-source/sdk-codegen/issues/1167)) ([5b4fc5b](https://www.github.com/looker-open-source/sdk-codegen/commit/5b4fc5b91e05ed4ccd9090724e4ac3f506b541fd)) +- generate SDKs for Looker 22.12 ([#1175](https://www.github.com/looker-open-source/sdk-codegen/issues/1175)) ([6f427a7](https://www.github.com/looker-open-source/sdk-codegen/commit/6f427a71dd30669afc901a47418decd59b977a7a)) +- generate SDKs for Looker 22.14 ([#1176](https://www.github.com/looker-open-source/sdk-codegen/issues/1176)) ([328d3e5](https://www.github.com/looker-open-source/sdk-codegen/commit/328d3e5710fc80caf5691b8d3ea3d8b8db358ad6)) +- regenerate Looker 22.12 SDKs ([#1177](https://www.github.com/looker-open-source/sdk-codegen/issues/1177)) ([b3a9b7b](https://www.github.com/looker-open-source/sdk-codegen/commit/b3a9b7bfff6366abce4802b819d19d00ee00cd60)) +- SDK language selection as URL search parameter ([#1123](https://www.github.com/looker-open-source/sdk-codegen/issues/1123)) ([ae59b95](https://www.github.com/looker-open-source/sdk-codegen/commit/ae59b956a5f42dcdd5aa9b4c3d0da1836129a932)) ### Bug Fixes -* add error detail handling for Python SDK ([#1170](https://www.github.com/looker-open-source/sdk-codegen/issues/1170)) ([0db7157](https://www.github.com/looker-open-source/sdk-codegen/commit/0db715768deedbf3290cd29c5aa788d9546e64f0)) -* add ErrorDoc class to the Kotlin SDK ([#1143](https://www.github.com/looker-open-source/sdk-codegen/issues/1143)) ([20fbd31](https://www.github.com/looker-open-source/sdk-codegen/commit/20fbd31939e0ff88b9be3fdcf260176069143925)) -* add field details for SDK error ([#1134](https://www.github.com/looker-open-source/sdk-codegen/issues/1134)) ([ef1c96d](https://www.github.com/looker-open-source/sdk-codegen/commit/ef1c96d9bc1ae7c27b6ec4b07c7d33f04930d2a7)) -* add field details for SDK error ([#1141](https://www.github.com/looker-open-source/sdk-codegen/issues/1141)) ([9af3092](https://www.github.com/looker-open-source/sdk-codegen/commit/9af30928417e773b6e23a539012bdf9381490a13)) -* DiffScene Page Displays Accurate Number of Diff Entries ([#1163](https://www.github.com/looker-open-source/sdk-codegen/issues/1163)) ([ee46932](https://www.github.com/looker-open-source/sdk-codegen/commit/ee469326783377a4ba382e1df915a30f1c503fd6)) -* IErrorDetail fields should not be null ([#1146](https://www.github.com/looker-open-source/sdk-codegen/issues/1146)) ([44274b4](https://www.github.com/looker-open-source/sdk-codegen/commit/44274b4a3974ff4b946a9a0f3209c70cd77b245e)) -* rerendering issues on DiffScene options change ([#1168](https://www.github.com/looker-open-source/sdk-codegen/issues/1168)) ([a4ac3bc](https://www.github.com/looker-open-source/sdk-codegen/commit/a4ac3bcf2b03ef427fe0fd13c72d1d7e3e939f90)) -* whitespace under CollapserCard child components ([#1162](https://www.github.com/looker-open-source/sdk-codegen/issues/1162)) ([89fbf29](https://www.github.com/looker-open-source/sdk-codegen/commit/89fbf2911701b598bf9d673cef00e790a1bc8207)) +- add error detail handling for Python SDK ([#1170](https://www.github.com/looker-open-source/sdk-codegen/issues/1170)) ([0db7157](https://www.github.com/looker-open-source/sdk-codegen/commit/0db715768deedbf3290cd29c5aa788d9546e64f0)) +- add ErrorDoc class to the Kotlin SDK ([#1143](https://www.github.com/looker-open-source/sdk-codegen/issues/1143)) ([20fbd31](https://www.github.com/looker-open-source/sdk-codegen/commit/20fbd31939e0ff88b9be3fdcf260176069143925)) +- add field details for SDK error ([#1134](https://www.github.com/looker-open-source/sdk-codegen/issues/1134)) ([ef1c96d](https://www.github.com/looker-open-source/sdk-codegen/commit/ef1c96d9bc1ae7c27b6ec4b07c7d33f04930d2a7)) +- add field details for SDK error ([#1141](https://www.github.com/looker-open-source/sdk-codegen/issues/1141)) ([9af3092](https://www.github.com/looker-open-source/sdk-codegen/commit/9af30928417e773b6e23a539012bdf9381490a13)) +- DiffScene Page Displays Accurate Number of Diff Entries ([#1163](https://www.github.com/looker-open-source/sdk-codegen/issues/1163)) ([ee46932](https://www.github.com/looker-open-source/sdk-codegen/commit/ee469326783377a4ba382e1df915a30f1c503fd6)) +- IErrorDetail fields should not be null ([#1146](https://www.github.com/looker-open-source/sdk-codegen/issues/1146)) ([44274b4](https://www.github.com/looker-open-source/sdk-codegen/commit/44274b4a3974ff4b946a9a0f3209c70cd77b245e)) +- rerendering issues on DiffScene options change ([#1168](https://www.github.com/looker-open-source/sdk-codegen/issues/1168)) ([a4ac3bc](https://www.github.com/looker-open-source/sdk-codegen/commit/a4ac3bcf2b03ef427fe0fd13c72d1d7e3e939f90)) +- whitespace under CollapserCard child components ([#1162](https://www.github.com/looker-open-source/sdk-codegen/issues/1162)) ([89fbf29](https://www.github.com/looker-open-source/sdk-codegen/commit/89fbf2911701b598bf9d673cef00e790a1bc8207)) ## [2.7.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.6.0...sdk-codegen-all-v2.7.0) (2022-07-29) - ### Features -* keep SDK request interfaces distinct ([#1125](https://www.github.com/looker-open-source/sdk-codegen/issues/1125)) ([50e925c](https://www.github.com/looker-open-source/sdk-codegen/commit/50e925c90eb3c5ffefc8e8535131471e2f2d0334)) -* URL Sharable Search in Explorer ([#1103](https://www.github.com/looker-open-source/sdk-codegen/issues/1103)) ([0eb10ee](https://www.github.com/looker-open-source/sdk-codegen/commit/0eb10ee5490e363baa3fd90561e417bd902cd50a)) +- keep SDK request interfaces distinct ([#1125](https://www.github.com/looker-open-source/sdk-codegen/issues/1125)) ([50e925c](https://www.github.com/looker-open-source/sdk-codegen/commit/50e925c90eb3c5ffefc8e8535131471e2f2d0334)) +- URL Sharable Search in Explorer ([#1103](https://www.github.com/looker-open-source/sdk-codegen/issues/1103)) ([0eb10ee](https://www.github.com/looker-open-source/sdk-codegen/commit/0eb10ee5490e363baa3fd90561e417bd902cd50a)) ## [2.6.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.5.0...sdk-codegen-all-v2.6.0) (2022-07-14) - ### Features -* generate SDKs for Looker 22.10 ([#1115](https://www.github.com/looker-open-source/sdk-codegen/issues/1115)) ([2156fff](https://www.github.com/looker-open-source/sdk-codegen/commit/2156ffff2e041fceb38554bbf5a743ec6e3a2c97)) +- generate SDKs for Looker 22.10 ([#1115](https://www.github.com/looker-open-source/sdk-codegen/issues/1115)) ([2156fff](https://www.github.com/looker-open-source/sdk-codegen/commit/2156ffff2e041fceb38554bbf5a743ec6e3a2c97)) ## [2.5.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.4.0...sdk-codegen-all-v2.5.0) (2022-07-13) - ### Features -* generate 22.8 SDKs ([#1114](https://www.github.com/looker-open-source/sdk-codegen/issues/1114)) ([c771395](https://www.github.com/looker-open-source/sdk-codegen/commit/c771395e37940df581d10fb95b62382e20b1600c)) - +- generate 22.8 SDKs ([#1114](https://www.github.com/looker-open-source/sdk-codegen/issues/1114)) ([c771395](https://www.github.com/looker-open-source/sdk-codegen/commit/c771395e37940df581d10fb95b62382e20b1600c)) ### Bug Fixes -* handle python crashed test ([#1111](https://www.github.com/looker-open-source/sdk-codegen/issues/1111)) ([08248c0](https://www.github.com/looker-open-source/sdk-codegen/commit/08248c07802030af10a59af3090c763a19ff9b4b)) +- handle python crashed test ([#1111](https://www.github.com/looker-open-source/sdk-codegen/issues/1111)) ([08248c0](https://www.github.com/looker-open-source/sdk-codegen/commit/08248c07802030af10a59af3090c763a19ff9b4b)) ## [2.4.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.3.2...sdk-codegen-all-v2.4.0) (2022-07-07) - ### Features -* Add ExtensionProvider40 component ([#1068](https://www.github.com/looker-open-source/sdk-codegen/issues/1068)) ([425aee5](https://www.github.com/looker-open-source/sdk-codegen/commit/425aee5097361b580b3ff7e93f227d6d34f21eb3)) -* generate SDK 22.6 ([#1102](https://www.github.com/looker-open-source/sdk-codegen/issues/1102)) ([2162860](https://www.github.com/looker-open-source/sdk-codegen/commit/2162860f0bf292bce0a79f8115f7c9fc5628057f)) - +- Add ExtensionProvider40 component ([#1068](https://www.github.com/looker-open-source/sdk-codegen/issues/1068)) ([425aee5](https://www.github.com/looker-open-source/sdk-codegen/commit/425aee5097361b580b3ff7e93f227d6d34f21eb3)) +- generate SDK 22.6 ([#1102](https://www.github.com/looker-open-source/sdk-codegen/issues/1102)) ([2162860](https://www.github.com/looker-open-source/sdk-codegen/commit/2162860f0bf292bce0a79f8115f7c9fc5628057f)) ### Bug Fixes -* add children property to ExtensionProvider type ([#1070](https://www.github.com/looker-open-source/sdk-codegen/issues/1070)) ([9524583](https://www.github.com/looker-open-source/sdk-codegen/commit/9524583fd99f0b46bba443a1dfa59cc6f42d081c)) -* correct HTTP status code values ([#1101](https://www.github.com/looker-open-source/sdk-codegen/issues/1101)) ([3d0f902](https://www.github.com/looker-open-source/sdk-codegen/commit/3d0f902b67d6384c08641579ae959829c78d1994)) -* description sync issues in diff scene ([#1086](https://www.github.com/looker-open-source/sdk-codegen/issues/1086)) ([a37aa50](https://www.github.com/looker-open-source/sdk-codegen/commit/a37aa50064bb41ca5af2c9d19371e2ef7973e6d9)) -* example miner github permalinks do not use `.git` in the repository name ([#1063](https://www.github.com/looker-open-source/sdk-codegen/issues/1063)) ([e150b33](https://www.github.com/looker-open-source/sdk-codegen/commit/e150b33ff974575d731f48f2f1488bdbeeb9118c)) -* package refs for API Explorer extension ([#1055](https://www.github.com/looker-open-source/sdk-codegen/issues/1055)) ([5fcf358](https://www.github.com/looker-open-source/sdk-codegen/commit/5fcf3588e1f4e87fc6d1d5789e00f66cf4fe92d9)) -* Refactored Go SDK to use Go oauth2 client, added `x-looker-appid` header to Go requests ([#1069](https://www.github.com/looker-open-source/sdk-codegen/issues/1069)) ([d51a675](https://www.github.com/looker-open-source/sdk-codegen/commit/d51a6750f7d5f22efa84278492a71336e39d92e1)) -* Register Go Fuzzy JSON Decoders once on init ([#1054](https://www.github.com/looker-open-source/sdk-codegen/issues/1054)) ([350d32d](https://www.github.com/looker-open-source/sdk-codegen/commit/350d32dfecb42679cff06e0c4508bebcf7fa6809)) -* remove generated files from examples index ([#1076](https://www.github.com/looker-open-source/sdk-codegen/issues/1076)) ([d75bce8](https://www.github.com/looker-open-source/sdk-codegen/commit/d75bce8dc25d41fd6bc5e2e513782eaa6009fd10)) -* replacing unimported exception ([#1066](https://www.github.com/looker-open-source/sdk-codegen/issues/1066)) ([d85b1b8](https://www.github.com/looker-open-source/sdk-codegen/commit/d85b1b889c9d27e337a5e8d38fc3f32e013cc4d8)) -* Sidenav Methods Panel Open & Closing ([#1097](https://www.github.com/looker-open-source/sdk-codegen/issues/1097)) ([c49fae4](https://www.github.com/looker-open-source/sdk-codegen/commit/c49fae4ca6a7a30feb61f021ec878a8091eaa078)) -* Update prod entrypoint to match dev entrypoint (pull [#1059](https://www.github.com/looker-open-source/sdk-codegen/issues/1059)) ([0e4c3f4](https://www.github.com/looker-open-source/sdk-codegen/commit/0e4c3f47782d23f6c8e5509bd2942b0934e44ea2)) +- add children property to ExtensionProvider type ([#1070](https://www.github.com/looker-open-source/sdk-codegen/issues/1070)) ([9524583](https://www.github.com/looker-open-source/sdk-codegen/commit/9524583fd99f0b46bba443a1dfa59cc6f42d081c)) +- correct HTTP status code values ([#1101](https://www.github.com/looker-open-source/sdk-codegen/issues/1101)) ([3d0f902](https://www.github.com/looker-open-source/sdk-codegen/commit/3d0f902b67d6384c08641579ae959829c78d1994)) +- description sync issues in diff scene ([#1086](https://www.github.com/looker-open-source/sdk-codegen/issues/1086)) ([a37aa50](https://www.github.com/looker-open-source/sdk-codegen/commit/a37aa50064bb41ca5af2c9d19371e2ef7973e6d9)) +- example miner github permalinks do not use `.git` in the repository name ([#1063](https://www.github.com/looker-open-source/sdk-codegen/issues/1063)) ([e150b33](https://www.github.com/looker-open-source/sdk-codegen/commit/e150b33ff974575d731f48f2f1488bdbeeb9118c)) +- package refs for API Explorer extension ([#1055](https://www.github.com/looker-open-source/sdk-codegen/issues/1055)) ([5fcf358](https://www.github.com/looker-open-source/sdk-codegen/commit/5fcf3588e1f4e87fc6d1d5789e00f66cf4fe92d9)) +- Refactored Go SDK to use Go oauth2 client, added `x-looker-appid` header to Go requests ([#1069](https://www.github.com/looker-open-source/sdk-codegen/issues/1069)) ([d51a675](https://www.github.com/looker-open-source/sdk-codegen/commit/d51a6750f7d5f22efa84278492a71336e39d92e1)) +- Register Go Fuzzy JSON Decoders once on init ([#1054](https://www.github.com/looker-open-source/sdk-codegen/issues/1054)) ([350d32d](https://www.github.com/looker-open-source/sdk-codegen/commit/350d32dfecb42679cff06e0c4508bebcf7fa6809)) +- remove generated files from examples index ([#1076](https://www.github.com/looker-open-source/sdk-codegen/issues/1076)) ([d75bce8](https://www.github.com/looker-open-source/sdk-codegen/commit/d75bce8dc25d41fd6bc5e2e513782eaa6009fd10)) +- replacing unimported exception ([#1066](https://www.github.com/looker-open-source/sdk-codegen/issues/1066)) ([d85b1b8](https://www.github.com/looker-open-source/sdk-codegen/commit/d85b1b889c9d27e337a5e8d38fc3f32e013cc4d8)) +- Sidenav Methods Panel Open & Closing ([#1097](https://www.github.com/looker-open-source/sdk-codegen/issues/1097)) ([c49fae4](https://www.github.com/looker-open-source/sdk-codegen/commit/c49fae4ca6a7a30feb61f021ec878a8091eaa078)) +- Update prod entrypoint to match dev entrypoint (pull [#1059](https://www.github.com/looker-open-source/sdk-codegen/issues/1059)) ([0e4c3f4](https://www.github.com/looker-open-source/sdk-codegen/commit/0e4c3f47782d23f6c8e5509bd2942b0934e44ea2)) ### [2.3.2](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.3.1...sdk-codegen-all-v2.3.2) (2022-04-07) - ### Bug Fixes -* encodeParam doc tweak to republish ([#1050](https://www.github.com/looker-open-source/sdk-codegen/issues/1050)) ([512bc81](https://www.github.com/looker-open-source/sdk-codegen/commit/512bc81865a9f5cbf8fafb83f41dfc2e8629ff3b)) +- encodeParam doc tweak to republish ([#1050](https://www.github.com/looker-open-source/sdk-codegen/issues/1050)) ([512bc81](https://www.github.com/looker-open-source/sdk-codegen/commit/512bc81865a9f5cbf8fafb83f41dfc2e8629ff3b)) ### [2.3.1](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.3.0...sdk-codegen-all-v2.3.1) (2022-04-07) - ### Bug Fixes -* encodeParam returned [object Object] for object types ([#1047](https://www.github.com/looker-open-source/sdk-codegen/issues/1047)) ([eccc1db](https://www.github.com/looker-open-source/sdk-codegen/commit/eccc1dbb3d64f36e6a06d71a1c3da37d972abd3a)) +- encodeParam returned [object Object] for object types ([#1047](https://www.github.com/looker-open-source/sdk-codegen/issues/1047)) ([eccc1db](https://www.github.com/looker-open-source/sdk-codegen/commit/eccc1dbb3d64f36e6a06d71a1c3da37d972abd3a)) ## [2.3.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.2.0...sdk-codegen-all-v2.3.0) (2022-03-24) - ### Features -* Looker 22.4 API updates ([#1024](https://www.github.com/looker-open-source/sdk-codegen/issues/1024)) ([19bdd61](https://www.github.com/looker-open-source/sdk-codegen/commit/19bdd612366a44bb74d793544df0f9d4babfb099)) -* Revert "Update release-please version, add r-p config for Go, add Go publish CI ([#1030](https://www.github.com/looker-open-source/sdk-codegen/issues/1030))" ([#1035](https://www.github.com/looker-open-source/sdk-codegen/issues/1035)) ([8f79913](https://www.github.com/looker-open-source/sdk-codegen/commit/8f79913c70dc37c0798dc5b28006b41c13a3ce9e)) -* Update release-please version, add r-p config for Go, add Go publish CI ([#1030](https://www.github.com/looker-open-source/sdk-codegen/issues/1030)) ([e597978](https://www.github.com/looker-open-source/sdk-codegen/commit/e597978f0c27eb5818e97e3c9426704948e0a6e6)) - +- Looker 22.4 API updates ([#1024](https://www.github.com/looker-open-source/sdk-codegen/issues/1024)) ([19bdd61](https://www.github.com/looker-open-source/sdk-codegen/commit/19bdd612366a44bb74d793544df0f9d4babfb099)) +- Revert "Update release-please version, add r-p config for Go, add Go publish CI ([#1030](https://www.github.com/looker-open-source/sdk-codegen/issues/1030))" ([#1035](https://www.github.com/looker-open-source/sdk-codegen/issues/1035)) ([8f79913](https://www.github.com/looker-open-source/sdk-codegen/commit/8f79913c70dc37c0798dc5b28006b41c13a3ce9e)) +- Update release-please version, add r-p config for Go, add Go publish CI ([#1030](https://www.github.com/looker-open-source/sdk-codegen/issues/1030)) ([e597978](https://www.github.com/looker-open-source/sdk-codegen/commit/e597978f0c27eb5818e97e3c9426704948e0a6e6)) ### Bug Fixes -* declaration miner (internal utility) ([#1025](https://www.github.com/looker-open-source/sdk-codegen/issues/1025)) ([9b987b2](https://www.github.com/looker-open-source/sdk-codegen/commit/9b987b2c2f24e4a43d6ff25921c5f46804b7702a)) -* Make Go SDK parse response by result type ([#1021](https://www.github.com/looker-open-source/sdk-codegen/issues/1021)) ([c1675ab](https://www.github.com/looker-open-source/sdk-codegen/commit/c1675abb20593467b210decc212902e0110db270)) +- declaration miner (internal utility) ([#1025](https://www.github.com/looker-open-source/sdk-codegen/issues/1025)) ([9b987b2](https://www.github.com/looker-open-source/sdk-codegen/commit/9b987b2c2f24e4a43d6ff25921c5f46804b7702a)) +- Make Go SDK parse response by result type ([#1021](https://www.github.com/looker-open-source/sdk-codegen/issues/1021)) ([c1675ab](https://www.github.com/looker-open-source/sdk-codegen/commit/c1675abb20593467b210decc212902e0110db270)) ## [2.2.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.1.0...sdk-codegen-all-v2.2.0) (2022-03-04) - ### Features -* generate code deprecation tags ([#1006](https://www.github.com/looker-open-source/sdk-codegen/issues/1006)) ([afd4b66](https://www.github.com/looker-open-source/sdk-codegen/commit/afd4b66ffbd11cdacd19fe1353c9e5bf381fe932)) -* python rtl optional config ApiSettings init parameter ([#996](https://www.github.com/looker-open-source/sdk-codegen/issues/996)) ([3ae42cd](https://www.github.com/looker-open-source/sdk-codegen/commit/3ae42cd97f974322b77d58941ac72b88be3f8b97)) - +- generate code deprecation tags ([#1006](https://www.github.com/looker-open-source/sdk-codegen/issues/1006)) ([afd4b66](https://www.github.com/looker-open-source/sdk-codegen/commit/afd4b66ffbd11cdacd19fe1353c9e5bf381fe932)) +- python rtl optional config ApiSettings init parameter ([#996](https://www.github.com/looker-open-source/sdk-codegen/issues/996)) ([3ae42cd](https://www.github.com/looker-open-source/sdk-codegen/commit/3ae42cd97f974322b77d58941ac72b88be3f8b97)) ### Bug Fixes -* remove python version upper bound ([#1015](https://www.github.com/looker-open-source/sdk-codegen/issues/1015)) ([b1650a1](https://www.github.com/looker-open-source/sdk-codegen/commit/b1650a1a8a56c52a7a06ca5c9cef02300af7289e)) -* url-parse dependabot issue ([#1014](https://www.github.com/looker-open-source/sdk-codegen/issues/1014)) ([b785225](https://www.github.com/looker-open-source/sdk-codegen/commit/b785225df35e0db9a0514ad92b0c823906e27827)) +- remove python version upper bound ([#1015](https://www.github.com/looker-open-source/sdk-codegen/issues/1015)) ([b1650a1](https://www.github.com/looker-open-source/sdk-codegen/commit/b1650a1a8a56c52a7a06ca5c9cef02300af7289e)) +- url-parse dependabot issue ([#1014](https://www.github.com/looker-open-source/sdk-codegen/issues/1014)) ([b785225](https://www.github.com/looker-open-source/sdk-codegen/commit/b785225df35e0db9a0514ad92b0c823906e27827)) ## [2.1.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v2.0.0...sdk-codegen-all-v2.1.0) (2022-02-18) - ### Features -* Go SDK integration tests and CI ([#988](https://www.github.com/looker-open-source/sdk-codegen/issues/988)) ([fd7c979](https://www.github.com/looker-open-source/sdk-codegen/commit/fd7c979a43a87cee8df476f3a850dcff5f601781)) -* SDK for Looker 22_2 ([#966](https://www.github.com/looker-open-source/sdk-codegen/issues/966)) ([3ba5420](https://www.github.com/looker-open-source/sdk-codegen/commit/3ba5420c75d602692c1c8aa806648e2c2dd73cac)) - +- Go SDK integration tests and CI ([#988](https://www.github.com/looker-open-source/sdk-codegen/issues/988)) ([fd7c979](https://www.github.com/looker-open-source/sdk-codegen/commit/fd7c979a43a87cee8df476f3a850dcff5f601781)) +- SDK for Looker 22_2 ([#966](https://www.github.com/looker-open-source/sdk-codegen/issues/966)) ([3ba5420](https://www.github.com/looker-open-source/sdk-codegen/commit/3ba5420c75d602692c1c8aa806648e2c2dd73cac)) ### Bug Fixes -* Fixed incorrect VerifySSL setting implementation ([#989](https://www.github.com/looker-open-source/sdk-codegen/issues/989)) ([a4f1dec](https://www.github.com/looker-open-source/sdk-codegen/commit/a4f1dec40804280f54fd06d47dc760e37d37895f)) -* Update readme to link to update_prod_branches_to_main.py ([#971](https://www.github.com/looker-open-source/sdk-codegen/issues/971)) ([#986](https://www.github.com/looker-open-source/sdk-codegen/issues/986)) ([5bb2fdb](https://www.github.com/looker-open-source/sdk-codegen/commit/5bb2fdbb474e8201d4df6e031fe49c019fd608e8)) +- Fixed incorrect VerifySSL setting implementation ([#989](https://www.github.com/looker-open-source/sdk-codegen/issues/989)) ([a4f1dec](https://www.github.com/looker-open-source/sdk-codegen/commit/a4f1dec40804280f54fd06d47dc760e37d37895f)) +- Update readme to link to update_prod_branches_to_main.py ([#971](https://www.github.com/looker-open-source/sdk-codegen/issues/971)) ([#986](https://www.github.com/looker-open-source/sdk-codegen/issues/986)) ([5bb2fdb](https://www.github.com/looker-open-source/sdk-codegen/commit/5bb2fdbb474e8201d4df6e031fe49c019fd608e8)) ## [2.0.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.21.1...sdk-codegen-all-v2.0.0) (2022-02-14) - ### ⚠ BREAKING CHANGES -* SDK support for 22.0 +- SDK support for 22.0 ### Features -* Added 4.0 GA stable banner to api explorer ([#956](https://www.github.com/looker-open-source/sdk-codegen/issues/956)) ([c59b5d4](https://www.github.com/looker-open-source/sdk-codegen/commit/c59b5d4d14189329fd9d95b31d3801dd27bd1c08)) -* Added unit test CI for Go SDK changes ([#965](https://www.github.com/looker-open-source/sdk-codegen/issues/965)) ([47a52dd](https://www.github.com/looker-open-source/sdk-codegen/commit/47a52dddd61cf1264ad0ea02b17e763e510bbd6c)) -* fuzzy JSON value handling for the Swift SDK ([#961](https://www.github.com/looker-open-source/sdk-codegen/issues/961)) ([0b6b696](https://www.github.com/looker-open-source/sdk-codegen/commit/0b6b696742d67d1abc0cf69dfbf820f5a28d0f86)) -* Implemented Go SDK env var handling ([#975](https://www.github.com/looker-open-source/sdk-codegen/issues/975)) ([571a817](https://www.github.com/looker-open-source/sdk-codegen/commit/571a817c710db1fb395a46187f593d77d7260e60)) -* SDK build for 22.0. ([#959](https://www.github.com/looker-open-source/sdk-codegen/issues/959)) ([de651b3](https://www.github.com/looker-open-source/sdk-codegen/commit/de651b373978fd3689429c0cbdb364a2820fe211)) -* SDK support for 22.0 ([5f9930c](https://www.github.com/looker-open-source/sdk-codegen/commit/5f9930c0b0f7bde59f0b9b47f882ae1f3ff9e490)) - +- Added 4.0 GA stable banner to api explorer ([#956](https://www.github.com/looker-open-source/sdk-codegen/issues/956)) ([c59b5d4](https://www.github.com/looker-open-source/sdk-codegen/commit/c59b5d4d14189329fd9d95b31d3801dd27bd1c08)) +- Added unit test CI for Go SDK changes ([#965](https://www.github.com/looker-open-source/sdk-codegen/issues/965)) ([47a52dd](https://www.github.com/looker-open-source/sdk-codegen/commit/47a52dddd61cf1264ad0ea02b17e763e510bbd6c)) +- fuzzy JSON value handling for the Swift SDK ([#961](https://www.github.com/looker-open-source/sdk-codegen/issues/961)) ([0b6b696](https://www.github.com/looker-open-source/sdk-codegen/commit/0b6b696742d67d1abc0cf69dfbf820f5a28d0f86)) +- Implemented Go SDK env var handling ([#975](https://www.github.com/looker-open-source/sdk-codegen/issues/975)) ([571a817](https://www.github.com/looker-open-source/sdk-codegen/commit/571a817c710db1fb395a46187f593d77d7260e60)) +- SDK build for 22.0. ([#959](https://www.github.com/looker-open-source/sdk-codegen/issues/959)) ([de651b3](https://www.github.com/looker-open-source/sdk-codegen/commit/de651b373978fd3689429c0cbdb364a2820fe211)) +- SDK support for 22.0 ([5f9930c](https://www.github.com/looker-open-source/sdk-codegen/commit/5f9930c0b0f7bde59f0b9b47f882ae1f3ff9e490)) ### Bug Fixes -* clean up package dependencies ([#974](https://www.github.com/looker-open-source/sdk-codegen/issues/974)) ([49614f5](https://www.github.com/looker-open-source/sdk-codegen/commit/49614f5a19c7fe873e9ceed14d407d18864286f9)) -* Fix broken apix test because of 22.0 build ([#968](https://www.github.com/looker-open-source/sdk-codegen/issues/968)) ([45a9a69](https://www.github.com/looker-open-source/sdk-codegen/commit/45a9a6915be0fbcfdbd3ee6152a59d9d8728b3ca)) -* runtime error for API Explorer ([#973](https://www.github.com/looker-open-source/sdk-codegen/issues/973)) ([4823fcb](https://www.github.com/looker-open-source/sdk-codegen/commit/4823fcb56d38bde5ae2f80d02a946b5bd3eeb834)) -* Update go codegen to set object as interface{} ([#980](https://www.github.com/looker-open-source/sdk-codegen/issues/980)) ([007989d](https://www.github.com/looker-open-source/sdk-codegen/commit/007989d6c438fa42ec261f5b216f2d933b489742)) +- clean up package dependencies ([#974](https://www.github.com/looker-open-source/sdk-codegen/issues/974)) ([49614f5](https://www.github.com/looker-open-source/sdk-codegen/commit/49614f5a19c7fe873e9ceed14d407d18864286f9)) +- Fix broken apix test because of 22.0 build ([#968](https://www.github.com/looker-open-source/sdk-codegen/issues/968)) ([45a9a69](https://www.github.com/looker-open-source/sdk-codegen/commit/45a9a6915be0fbcfdbd3ee6152a59d9d8728b3ca)) +- runtime error for API Explorer ([#973](https://www.github.com/looker-open-source/sdk-codegen/issues/973)) ([4823fcb](https://www.github.com/looker-open-source/sdk-codegen/commit/4823fcb56d38bde5ae2f80d02a946b5bd3eeb834)) +- Update go codegen to set object as interface{} ([#980](https://www.github.com/looker-open-source/sdk-codegen/issues/980)) ([007989d](https://www.github.com/looker-open-source/sdk-codegen/commit/007989d6c438fa42ec261f5b216f2d933b489742)) ### [1.21.1](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.18.0...sdk-codegen-all-v1.21.1) (2022-01-27) - ### Features -* add http method to IRawResponse ([#925](https://www.github.com/looker-open-source/sdk-codegen/issues/925)) ([25cef47](https://www.github.com/looker-open-source/sdk-codegen/commit/25cef47fa61a5f15565560b48f5e0c45a0cd9b44)) -* looker resources index ([#931](https://www.github.com/looker-open-source/sdk-codegen/issues/931)) ([82e965b](https://www.github.com/looker-open-source/sdk-codegen/commit/82e965b29f84c9996fea7de9c8fdfca600e1c0b3)) -* OAuthConfigProvider ([209f399](https://www.github.com/looker-open-source/sdk-codegen/commit/209f399a089beb28405a178d3dc8f769478ae97b)) -* Python SDK example: write query result to BigQuery using Cloud Functions ([#908](https://www.github.com/looker-open-source/sdk-codegen/issues/908)) ([53ee684](https://www.github.com/looker-open-source/sdk-codegen/commit/53ee684c7a230865d40a464d2836f653fabaa386)) -* support string or numeric JSON format for numeric IDs in Swift ([#937](https://www.github.com/looker-open-source/sdk-codegen/issues/937)) ([1487d8a](https://www.github.com/looker-open-source/sdk-codegen/commit/1487d8a38432cef2e994d14001df18659522ca90)) - +- add http method to IRawResponse ([#925](https://www.github.com/looker-open-source/sdk-codegen/issues/925)) ([25cef47](https://www.github.com/looker-open-source/sdk-codegen/commit/25cef47fa61a5f15565560b48f5e0c45a0cd9b44)) +- looker resources index ([#931](https://www.github.com/looker-open-source/sdk-codegen/issues/931)) ([82e965b](https://www.github.com/looker-open-source/sdk-codegen/commit/82e965b29f84c9996fea7de9c8fdfca600e1c0b3)) +- OAuthConfigProvider ([209f399](https://www.github.com/looker-open-source/sdk-codegen/commit/209f399a089beb28405a178d3dc8f769478ae97b)) +- Python SDK example: write query result to BigQuery using Cloud Functions ([#908](https://www.github.com/looker-open-source/sdk-codegen/issues/908)) ([53ee684](https://www.github.com/looker-open-source/sdk-codegen/commit/53ee684c7a230865d40a464d2836f653fabaa386)) +- support string or numeric JSON format for numeric IDs in Swift ([#937](https://www.github.com/looker-open-source/sdk-codegen/issues/937)) ([1487d8a](https://www.github.com/looker-open-source/sdk-codegen/commit/1487d8a38432cef2e994d14001df18659522ca90)) ### Bug Fixes -* enum naming and registration ([#918](https://www.github.com/looker-open-source/sdk-codegen/issues/918)) ([9d4a6cb](https://www.github.com/looker-open-source/sdk-codegen/commit/9d4a6cbfac5defad3a35389e2d46947d2135d349)) -* hackathon build ([#915](https://www.github.com/looker-open-source/sdk-codegen/issues/915)) ([67df146](https://www.github.com/looker-open-source/sdk-codegen/commit/67df1465d1ec04709c0c20d9a1b157f9199f795e)) -* Made Go SDK json decoding fuzzy ([#943](https://www.github.com/looker-open-source/sdk-codegen/issues/943)) ([378df76](https://www.github.com/looker-open-source/sdk-codegen/commit/378df7694a7d9b02f1d4c67061dddda576883bfd)) -* make sheetCell always return a Span ([#907](https://www.github.com/looker-open-source/sdk-codegen/issues/907)) ([f1fe4f5](https://www.github.com/looker-open-source/sdk-codegen/commit/f1fe4f5a5265008507ee29ff7e92149fc2869a82)) -* Remove hackathon project invite only UI ([#905](https://www.github.com/looker-open-source/sdk-codegen/issues/905)) ([2f10dd3](https://www.github.com/looker-open-source/sdk-codegen/commit/2f10dd3c07e6ddb076893932f4eccb2ac6dc3565)) -* restore join/leave project functionality ([#904](https://www.github.com/looker-open-source/sdk-codegen/issues/904)) ([42b2c0f](https://www.github.com/looker-open-source/sdk-codegen/commit/42b2c0f80a99685e02acc1a7b466b39029f15cad)) -* restrict python version and update cattrs version restriction ([#949](https://www.github.com/looker-open-source/sdk-codegen/issues/949)) ([ba28ac6](https://www.github.com/looker-open-source/sdk-codegen/commit/ba28ac6a288b140b906ab8f164aa65b1389027a3)) -* rtl IError type ([#928](https://www.github.com/looker-open-source/sdk-codegen/issues/928)) ([7d8f906](https://www.github.com/looker-open-source/sdk-codegen/commit/7d8f906f4b10b5e915df292fcf30d1eb456c3463)) -* **sdk-rtl/src/delimArray:** Fixed issue with single element number array ([#927](https://www.github.com/looker-open-source/sdk-codegen/issues/927)) ([6e94d73](https://www.github.com/looker-open-source/sdk-codegen/commit/6e94d73f88fb6c2f3138818967f4e8cb49ff89e6)) -* Updated hackathon agenda links ([#901](https://www.github.com/looker-open-source/sdk-codegen/issues/901)) ([7f58b6c](https://www.github.com/looker-open-source/sdk-codegen/commit/7f58b6c096ab8a6b983ea515b38be9877d9faa20)) -* use headless navigation mode for API Explorer extension ([#950](https://www.github.com/looker-open-source/sdk-codegen/issues/950)) ([fa44a8a](https://www.github.com/looker-open-source/sdk-codegen/commit/fa44a8a2383d48a524371401455fc825d3608fc7)) +- enum naming and registration ([#918](https://www.github.com/looker-open-source/sdk-codegen/issues/918)) ([9d4a6cb](https://www.github.com/looker-open-source/sdk-codegen/commit/9d4a6cbfac5defad3a35389e2d46947d2135d349)) +- hackathon build ([#915](https://www.github.com/looker-open-source/sdk-codegen/issues/915)) ([67df146](https://www.github.com/looker-open-source/sdk-codegen/commit/67df1465d1ec04709c0c20d9a1b157f9199f795e)) +- Made Go SDK json decoding fuzzy ([#943](https://www.github.com/looker-open-source/sdk-codegen/issues/943)) ([378df76](https://www.github.com/looker-open-source/sdk-codegen/commit/378df7694a7d9b02f1d4c67061dddda576883bfd)) +- make sheetCell always return a Span ([#907](https://www.github.com/looker-open-source/sdk-codegen/issues/907)) ([f1fe4f5](https://www.github.com/looker-open-source/sdk-codegen/commit/f1fe4f5a5265008507ee29ff7e92149fc2869a82)) +- Remove hackathon project invite only UI ([#905](https://www.github.com/looker-open-source/sdk-codegen/issues/905)) ([2f10dd3](https://www.github.com/looker-open-source/sdk-codegen/commit/2f10dd3c07e6ddb076893932f4eccb2ac6dc3565)) +- restore join/leave project functionality ([#904](https://www.github.com/looker-open-source/sdk-codegen/issues/904)) ([42b2c0f](https://www.github.com/looker-open-source/sdk-codegen/commit/42b2c0f80a99685e02acc1a7b466b39029f15cad)) +- restrict python version and update cattrs version restriction ([#949](https://www.github.com/looker-open-source/sdk-codegen/issues/949)) ([ba28ac6](https://www.github.com/looker-open-source/sdk-codegen/commit/ba28ac6a288b140b906ab8f164aa65b1389027a3)) +- rtl IError type ([#928](https://www.github.com/looker-open-source/sdk-codegen/issues/928)) ([7d8f906](https://www.github.com/looker-open-source/sdk-codegen/commit/7d8f906f4b10b5e915df292fcf30d1eb456c3463)) +- **sdk-rtl/src/delimArray:** Fixed issue with single element number array ([#927](https://www.github.com/looker-open-source/sdk-codegen/issues/927)) ([6e94d73](https://www.github.com/looker-open-source/sdk-codegen/commit/6e94d73f88fb6c2f3138818967f4e8cb49ff89e6)) +- Updated hackathon agenda links ([#901](https://www.github.com/looker-open-source/sdk-codegen/issues/901)) ([7f58b6c](https://www.github.com/looker-open-source/sdk-codegen/commit/7f58b6c096ab8a6b983ea515b38be9877d9faa20)) +- use headless navigation mode for API Explorer extension ([#950](https://www.github.com/looker-open-source/sdk-codegen/issues/950)) ([fa44a8a](https://www.github.com/looker-open-source/sdk-codegen/commit/fa44a8a2383d48a524371401455fc825d3608fc7)) ### [1.20.1](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.20.0...sdk-codegen-all-v1.20.1) (2021-12-20) - ### Bug Fixes -* rtl IError type ([#928](https://www.github.com/looker-open-source/sdk-codegen/issues/928)) ([7d8f906](https://www.github.com/looker-open-source/sdk-codegen/commit/7d8f906f4b10b5e915df292fcf30d1eb456c3463)) +- rtl IError type ([#928](https://www.github.com/looker-open-source/sdk-codegen/issues/928)) ([7d8f906](https://www.github.com/looker-open-source/sdk-codegen/commit/7d8f906f4b10b5e915df292fcf30d1eb456c3463)) ## [1.20.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.19.0...sdk-codegen-all-v1.20.0) (2021-12-16) - ### Features -* add http method to IRawResponse ([#925](https://www.github.com/looker-open-source/sdk-codegen/issues/925)) ([25cef47](https://www.github.com/looker-open-source/sdk-codegen/commit/25cef47fa61a5f15565560b48f5e0c45a0cd9b44)) -* Python SDK example: write query result to BigQuery using Cloud Functions ([#908](https://www.github.com/looker-open-source/sdk-codegen/issues/908)) ([53ee684](https://www.github.com/looker-open-source/sdk-codegen/commit/53ee684c7a230865d40a464d2836f653fabaa386)) +- add http method to IRawResponse ([#925](https://www.github.com/looker-open-source/sdk-codegen/issues/925)) ([25cef47](https://www.github.com/looker-open-source/sdk-codegen/commit/25cef47fa61a5f15565560b48f5e0c45a0cd9b44)) +- Python SDK example: write query result to BigQuery using Cloud Functions ([#908](https://www.github.com/looker-open-source/sdk-codegen/issues/908)) ([53ee684](https://www.github.com/looker-open-source/sdk-codegen/commit/53ee684c7a230865d40a464d2836f653fabaa386)) ## [1.19.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.18.0...sdk-codegen-all-v1.19.0) (2021-12-06) - ### Features -* OAuthConfigProvider ([209f399](https://www.github.com/looker-open-source/sdk-codegen/commit/209f399a089beb28405a178d3dc8f769478ae97b)) - +- OAuthConfigProvider ([209f399](https://www.github.com/looker-open-source/sdk-codegen/commit/209f399a089beb28405a178d3dc8f769478ae97b)) ### Bug Fixes -* enum naming and registration ([#918](https://www.github.com/looker-open-source/sdk-codegen/issues/918)) ([9d4a6cb](https://www.github.com/looker-open-source/sdk-codegen/commit/9d4a6cbfac5defad3a35389e2d46947d2135d349)) -* hackathon build ([#915](https://www.github.com/looker-open-source/sdk-codegen/issues/915)) ([67df146](https://www.github.com/looker-open-source/sdk-codegen/commit/67df1465d1ec04709c0c20d9a1b157f9199f795e)) -* make sheetCell always return a Span ([#907](https://www.github.com/looker-open-source/sdk-codegen/issues/907)) ([f1fe4f5](https://www.github.com/looker-open-source/sdk-codegen/commit/f1fe4f5a5265008507ee29ff7e92149fc2869a82)) -* Remove hackathon project invite only UI ([#905](https://www.github.com/looker-open-source/sdk-codegen/issues/905)) ([2f10dd3](https://www.github.com/looker-open-source/sdk-codegen/commit/2f10dd3c07e6ddb076893932f4eccb2ac6dc3565)) -* restore join/leave project functionality ([#904](https://www.github.com/looker-open-source/sdk-codegen/issues/904)) ([42b2c0f](https://www.github.com/looker-open-source/sdk-codegen/commit/42b2c0f80a99685e02acc1a7b466b39029f15cad)) -* Updated hackathon agenda links ([#901](https://www.github.com/looker-open-source/sdk-codegen/issues/901)) ([7f58b6c](https://www.github.com/looker-open-source/sdk-codegen/commit/7f58b6c096ab8a6b983ea515b38be9877d9faa20)) +- enum naming and registration ([#918](https://www.github.com/looker-open-source/sdk-codegen/issues/918)) ([9d4a6cb](https://www.github.com/looker-open-source/sdk-codegen/commit/9d4a6cbfac5defad3a35389e2d46947d2135d349)) +- hackathon build ([#915](https://www.github.com/looker-open-source/sdk-codegen/issues/915)) ([67df146](https://www.github.com/looker-open-source/sdk-codegen/commit/67df1465d1ec04709c0c20d9a1b157f9199f795e)) +- make sheetCell always return a Span ([#907](https://www.github.com/looker-open-source/sdk-codegen/issues/907)) ([f1fe4f5](https://www.github.com/looker-open-source/sdk-codegen/commit/f1fe4f5a5265008507ee29ff7e92149fc2869a82)) +- Remove hackathon project invite only UI ([#905](https://www.github.com/looker-open-source/sdk-codegen/issues/905)) ([2f10dd3](https://www.github.com/looker-open-source/sdk-codegen/commit/2f10dd3c07e6ddb076893932f4eccb2ac6dc3565)) +- restore join/leave project functionality ([#904](https://www.github.com/looker-open-source/sdk-codegen/issues/904)) ([42b2c0f](https://www.github.com/looker-open-source/sdk-codegen/commit/42b2c0f80a99685e02acc1a7b466b39029f15cad)) +- Updated hackathon agenda links ([#901](https://www.github.com/looker-open-source/sdk-codegen/issues/901)) ([7f58b6c](https://www.github.com/looker-open-source/sdk-codegen/commit/7f58b6c096ab8a6b983ea515b38be9877d9faa20)) ## [1.18.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.17.1...sdk-codegen-all-v1.18.0) (2021-11-10) - ### Features -* Add JPN agenda.ts and add yarn command in readme.md for hackathon app ([#889](https://www.github.com/looker-open-source/sdk-codegen/issues/889)) ([16528bc](https://www.github.com/looker-open-source/sdk-codegen/commit/16528bc245f6e447be3d862a4a0115a50aa1a16a)) -* create @looker/extension-utils ([#886](https://www.github.com/looker-open-source/sdk-codegen/issues/886)) ([9d1720d](https://www.github.com/looker-open-source/sdk-codegen/commit/9d1720d9a4cec00c45195dd9c716d9a2a929264f)) -* disable "Add Project" when judging starts ([#894](https://www.github.com/looker-open-source/sdk-codegen/issues/894)) ([d3386ae](https://www.github.com/looker-open-source/sdk-codegen/commit/d3386ae034dd5bacd067de791fe5ba5f3ed06ac4)) -* enforce required body parameters for RunIt ([#883](https://www.github.com/looker-open-source/sdk-codegen/issues/883)) ([a4dfb3c](https://www.github.com/looker-open-source/sdk-codegen/commit/a4dfb3cd318de65f78f89df5b55e9daf61c42826)) -* judging view for Hackathon app ([#891](https://www.github.com/looker-open-source/sdk-codegen/issues/891)) ([ff9f9f6](https://www.github.com/looker-open-source/sdk-codegen/commit/ff9f9f6240b54abf0a295bead5317489658ec068)) -* Looker 21.20 bindings ([#899](https://www.github.com/looker-open-source/sdk-codegen/issues/899)) ([304d0d0](https://www.github.com/looker-open-source/sdk-codegen/commit/304d0d0688349efad0499d37609605e14df7e97d)) -* markdown, link click support, and project view for hackathon projects ([#877](https://www.github.com/looker-open-source/sdk-codegen/issues/877)) ([c55b221](https://www.github.com/looker-open-source/sdk-codegen/commit/c55b22101f3be2b8f172841dc3964dcc18825e47)) -* Python SDK Example: Gsheet / Cloud Functions / Looker SDK integration ([#874](https://www.github.com/looker-open-source/sdk-codegen/issues/874)) ([0ec156a](https://www.github.com/looker-open-source/sdk-codegen/commit/0ec156a210e7aa1e23bc33bbc3555ba90e166332)) - +- Add JPN agenda.ts and add yarn command in readme.md for hackathon app ([#889](https://www.github.com/looker-open-source/sdk-codegen/issues/889)) ([16528bc](https://www.github.com/looker-open-source/sdk-codegen/commit/16528bc245f6e447be3d862a4a0115a50aa1a16a)) +- create @looker/extension-utils ([#886](https://www.github.com/looker-open-source/sdk-codegen/issues/886)) ([9d1720d](https://www.github.com/looker-open-source/sdk-codegen/commit/9d1720d9a4cec00c45195dd9c716d9a2a929264f)) +- disable "Add Project" when judging starts ([#894](https://www.github.com/looker-open-source/sdk-codegen/issues/894)) ([d3386ae](https://www.github.com/looker-open-source/sdk-codegen/commit/d3386ae034dd5bacd067de791fe5ba5f3ed06ac4)) +- enforce required body parameters for RunIt ([#883](https://www.github.com/looker-open-source/sdk-codegen/issues/883)) ([a4dfb3c](https://www.github.com/looker-open-source/sdk-codegen/commit/a4dfb3cd318de65f78f89df5b55e9daf61c42826)) +- judging view for Hackathon app ([#891](https://www.github.com/looker-open-source/sdk-codegen/issues/891)) ([ff9f9f6](https://www.github.com/looker-open-source/sdk-codegen/commit/ff9f9f6240b54abf0a295bead5317489658ec068)) +- Looker 21.20 bindings ([#899](https://www.github.com/looker-open-source/sdk-codegen/issues/899)) ([304d0d0](https://www.github.com/looker-open-source/sdk-codegen/commit/304d0d0688349efad0499d37609605e14df7e97d)) +- markdown, link click support, and project view for hackathon projects ([#877](https://www.github.com/looker-open-source/sdk-codegen/issues/877)) ([c55b221](https://www.github.com/looker-open-source/sdk-codegen/commit/c55b22101f3be2b8f172841dc3964dcc18825e47)) +- Python SDK Example: Gsheet / Cloud Functions / Looker SDK integration ([#874](https://www.github.com/looker-open-source/sdk-codegen/issues/874)) ([0ec156a](https://www.github.com/looker-open-source/sdk-codegen/commit/0ec156a210e7aa1e23bc33bbc3555ba90e166332)) ### Bug Fixes -* add hackathon resource ([#900](https://www.github.com/looker-open-source/sdk-codegen/issues/900)) ([c092c93](https://www.github.com/looker-open-source/sdk-codegen/commit/c092c933b01ba61cb285782a4dd5cbf97d249f6f)) -* Add hackathon resources and refactor to use enums ([#887](https://www.github.com/looker-open-source/sdk-codegen/issues/887)) ([59faaab](https://www.github.com/looker-open-source/sdk-codegen/commit/59faaaba3875c60c88bb1aa7adea2ef16a94705c)) -* api explorer initialization ([#885](https://www.github.com/looker-open-source/sdk-codegen/issues/885)) ([b08b08e](https://www.github.com/looker-open-source/sdk-codegen/commit/b08b08e9767725e19a573bac0385320bb903490d)) -* Hackathon styling and resource update ([#884](https://www.github.com/looker-open-source/sdk-codegen/issues/884)) ([7e07abb](https://www.github.com/looker-open-source/sdk-codegen/commit/7e07abb46213b9c7fd3170f1d75788a621e6bbd8)) -* optimize scripts for parallel startup of Looker docker image ([#881](https://www.github.com/looker-open-source/sdk-codegen/issues/881)) ([5624c72](https://www.github.com/looker-open-source/sdk-codegen/commit/5624c72e3e65159bd8ae306c3eca4176ebee3675)) -* show a helpful message when sdk call syntax generation fails ([#879](https://www.github.com/looker-open-source/sdk-codegen/issues/879)) ([1e9348b](https://www.github.com/looker-open-source/sdk-codegen/commit/1e9348b797c2f3760d03c1f94c60f18e534e8298)) -* Update CI to include Looker 21.20 ([#895](https://www.github.com/looker-open-source/sdk-codegen/issues/895)) ([3defa5b](https://www.github.com/looker-open-source/sdk-codegen/commit/3defa5bbacb0269230bbdbe91b2d6acf71fde1f3)) -* Updated and corrected agenda and resources page ([#892](https://www.github.com/looker-open-source/sdk-codegen/issues/892)) ([db5000c](https://www.github.com/looker-open-source/sdk-codegen/commit/db5000ced51deddfc0fbb64161283770868a2cd2)) -* Updated hackathon readme landing page path and cleanup ([#893](https://www.github.com/looker-open-source/sdk-codegen/issues/893)) ([382a9f0](https://www.github.com/looker-open-source/sdk-codegen/commit/382a9f0e41716a8b1adc9858ad60a88b6e0b5343)) -* Updated hackathon resources and project description ([#898](https://www.github.com/looker-open-source/sdk-codegen/issues/898)) ([9581b20](https://www.github.com/looker-open-source/sdk-codegen/commit/9581b20d27530d0a2d0e4327bdf2b9daf0e4e35a)) +- add hackathon resource ([#900](https://www.github.com/looker-open-source/sdk-codegen/issues/900)) ([c092c93](https://www.github.com/looker-open-source/sdk-codegen/commit/c092c933b01ba61cb285782a4dd5cbf97d249f6f)) +- Add hackathon resources and refactor to use enums ([#887](https://www.github.com/looker-open-source/sdk-codegen/issues/887)) ([59faaab](https://www.github.com/looker-open-source/sdk-codegen/commit/59faaaba3875c60c88bb1aa7adea2ef16a94705c)) +- api explorer initialization ([#885](https://www.github.com/looker-open-source/sdk-codegen/issues/885)) ([b08b08e](https://www.github.com/looker-open-source/sdk-codegen/commit/b08b08e9767725e19a573bac0385320bb903490d)) +- Hackathon styling and resource update ([#884](https://www.github.com/looker-open-source/sdk-codegen/issues/884)) ([7e07abb](https://www.github.com/looker-open-source/sdk-codegen/commit/7e07abb46213b9c7fd3170f1d75788a621e6bbd8)) +- optimize scripts for parallel startup of Looker docker image ([#881](https://www.github.com/looker-open-source/sdk-codegen/issues/881)) ([5624c72](https://www.github.com/looker-open-source/sdk-codegen/commit/5624c72e3e65159bd8ae306c3eca4176ebee3675)) +- show a helpful message when sdk call syntax generation fails ([#879](https://www.github.com/looker-open-source/sdk-codegen/issues/879)) ([1e9348b](https://www.github.com/looker-open-source/sdk-codegen/commit/1e9348b797c2f3760d03c1f94c60f18e534e8298)) +- Update CI to include Looker 21.20 ([#895](https://www.github.com/looker-open-source/sdk-codegen/issues/895)) ([3defa5b](https://www.github.com/looker-open-source/sdk-codegen/commit/3defa5bbacb0269230bbdbe91b2d6acf71fde1f3)) +- Updated and corrected agenda and resources page ([#892](https://www.github.com/looker-open-source/sdk-codegen/issues/892)) ([db5000c](https://www.github.com/looker-open-source/sdk-codegen/commit/db5000ced51deddfc0fbb64161283770868a2cd2)) +- Updated hackathon readme landing page path and cleanup ([#893](https://www.github.com/looker-open-source/sdk-codegen/issues/893)) ([382a9f0](https://www.github.com/looker-open-source/sdk-codegen/commit/382a9f0e41716a8b1adc9858ad60a88b6e0b5343)) +- Updated hackathon resources and project description ([#898](https://www.github.com/looker-open-source/sdk-codegen/issues/898)) ([9581b20](https://www.github.com/looker-open-source/sdk-codegen/commit/9581b20d27530d0a2d0e4327bdf2b9daf0e4e35a)) ### [1.17.1](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.17.0...sdk-codegen-all-v1.17.1) (2021-10-27) - ### Bug Fixes -* another TS SDK error handling tweak ([#873](https://www.github.com/looker-open-source/sdk-codegen/issues/873)) ([1c04952](https://www.github.com/looker-open-source/sdk-codegen/commit/1c049527e22926fa7fe0ae011ab4595520005e2f)) -* do not "reserve" type names ending in [] ([#876](https://www.github.com/looker-open-source/sdk-codegen/issues/876)) ([bab56ef](https://www.github.com/looker-open-source/sdk-codegen/commit/bab56ef1c60389d04e8a1e4973afde0d0b75d5ec)) +- another TS SDK error handling tweak ([#873](https://www.github.com/looker-open-source/sdk-codegen/issues/873)) ([1c04952](https://www.github.com/looker-open-source/sdk-codegen/commit/1c049527e22926fa7fe0ae011ab4595520005e2f)) +- do not "reserve" type names ending in [] ([#876](https://www.github.com/looker-open-source/sdk-codegen/issues/876)) ([bab56ef](https://www.github.com/looker-open-source/sdk-codegen/commit/bab56ef1c60389d04e8a1e4973afde0d0b75d5ec)) ## [1.17.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.16.0...sdk-codegen-all-v1.17.0) (2021-10-24) - ### Features -* Cloud Functions Examples (User Provisioner) ([#849](https://www.github.com/looker-open-source/sdk-codegen/issues/849)) ([ec2e4d0](https://www.github.com/looker-open-source/sdk-codegen/commit/ec2e4d0ebc4c80dab4242a1e14a2ae6e0223c8c1)) -* Hackathon admin add users UI ([#854](https://www.github.com/looker-open-source/sdk-codegen/issues/854)) ([a6fe4fd](https://www.github.com/looker-open-source/sdk-codegen/commit/a6fe4fdb6c26c17be848196c68f3508205dbdc4c)) -* Looker 21.18 bindings ([#865](https://www.github.com/looker-open-source/sdk-codegen/issues/865)) ([fa98888](https://www.github.com/looker-open-source/sdk-codegen/commit/fa988886c2d88290044d2818de7f549ca28b49bc)) -* personalized Hackathon agenda ([#853](https://www.github.com/looker-open-source/sdk-codegen/issues/853)) ([a143225](https://www.github.com/looker-open-source/sdk-codegen/commit/a1432250bad0bd35d5d9c5044aced81cf2cc1346)) - +- Cloud Functions Examples (User Provisioner) ([#849](https://www.github.com/looker-open-source/sdk-codegen/issues/849)) ([ec2e4d0](https://www.github.com/looker-open-source/sdk-codegen/commit/ec2e4d0ebc4c80dab4242a1e14a2ae6e0223c8c1)) +- Hackathon admin add users UI ([#854](https://www.github.com/looker-open-source/sdk-codegen/issues/854)) ([a6fe4fd](https://www.github.com/looker-open-source/sdk-codegen/commit/a6fe4fdb6c26c17be848196c68f3508205dbdc4c)) +- Looker 21.18 bindings ([#865](https://www.github.com/looker-open-source/sdk-codegen/issues/865)) ([fa98888](https://www.github.com/looker-open-source/sdk-codegen/commit/fa988886c2d88290044d2818de7f549ca28b49bc)) +- personalized Hackathon agenda ([#853](https://www.github.com/looker-open-source/sdk-codegen/issues/853)) ([a143225](https://www.github.com/looker-open-source/sdk-codegen/commit/a1432250bad0bd35d5d9c5044aced81cf2cc1346)) ### Bug Fixes -* Update resources list and enable link opening ([4f17aee](https://www.github.com/looker-open-source/sdk-codegen/commit/4f17aee91a0b0d7a133c1e77b3842b072e1a446e)) +- Update resources list and enable link opening ([4f17aee](https://www.github.com/looker-open-source/sdk-codegen/commit/4f17aee91a0b0d7a133c1e77b3842b072e1a446e)) ## [1.16.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.15.0...sdk-codegen-all-v1.16.0) (2021-10-19) - ### Features -* @looker/redux package ([#843](https://www.github.com/looker-open-source/sdk-codegen/issues/843)) ([b2267a0](https://www.github.com/looker-open-source/sdk-codegen/commit/b2267a0ee07bb5c10bd760cd25addeff74fd0a66)) -* 21.16 release ([#859](https://www.github.com/looker-open-source/sdk-codegen/issues/859)) ([0b4385c](https://www.github.com/looker-open-source/sdk-codegen/commit/0b4385c83c5225acf0a9b0c76f9e890600a449af)) -* closest path match for API Explorer ([#811](https://www.github.com/looker-open-source/sdk-codegen/issues/811)) ([45fd26f](https://www.github.com/looker-open-source/sdk-codegen/commit/45fd26fb0f325fa90edfec72f835ed3a79b9afeb)) -* headless nav toggle ([#860](https://www.github.com/looker-open-source/sdk-codegen/issues/860)) ([8e66d1b](https://www.github.com/looker-open-source/sdk-codegen/commit/8e66d1bed84cdcf91b92dccdb5cdbb87be5c3f4a)) -* lots of RunIt form cleanup ([#814](https://www.github.com/looker-open-source/sdk-codegen/issues/814)) ([e92eae8](https://www.github.com/looker-open-source/sdk-codegen/commit/e92eae8fc127a0aa99545ca9c577152c08d59000)) -* makeTheCall for Kotlin and type tagging ([#833](https://www.github.com/looker-open-source/sdk-codegen/issues/833)) ([2ca950e](https://www.github.com/looker-open-source/sdk-codegen/commit/2ca950e16c9c172d3e67de58261df16e424efaa3)) -* support either string or numeric JSON values with AnyString ([#848](https://www.github.com/looker-open-source/sdk-codegen/issues/848)) ([9b428f5](https://www.github.com/looker-open-source/sdk-codegen/commit/9b428f5dc871477402f1683cffaadfad55501878)) -* Update Kotlin SDK to use Gson instead of Jackson ([#836](https://www.github.com/looker-open-source/sdk-codegen/issues/836)) ([4d1f789](https://www.github.com/looker-open-source/sdk-codegen/commit/4d1f789fa3b97b0808f06d5d547c96de3ca890ff)) -* Use agenda data for the Hackathon home page ([#842](https://www.github.com/looker-open-source/sdk-codegen/issues/842)) ([0da2523](https://www.github.com/looker-open-source/sdk-codegen/commit/0da25239c3f108cb684309818c33c91c2a7c3278)) - +- @looker/redux package ([#843](https://www.github.com/looker-open-source/sdk-codegen/issues/843)) ([b2267a0](https://www.github.com/looker-open-source/sdk-codegen/commit/b2267a0ee07bb5c10bd760cd25addeff74fd0a66)) +- 21.16 release ([#859](https://www.github.com/looker-open-source/sdk-codegen/issues/859)) ([0b4385c](https://www.github.com/looker-open-source/sdk-codegen/commit/0b4385c83c5225acf0a9b0c76f9e890600a449af)) +- closest path match for API Explorer ([#811](https://www.github.com/looker-open-source/sdk-codegen/issues/811)) ([45fd26f](https://www.github.com/looker-open-source/sdk-codegen/commit/45fd26fb0f325fa90edfec72f835ed3a79b9afeb)) +- headless nav toggle ([#860](https://www.github.com/looker-open-source/sdk-codegen/issues/860)) ([8e66d1b](https://www.github.com/looker-open-source/sdk-codegen/commit/8e66d1bed84cdcf91b92dccdb5cdbb87be5c3f4a)) +- lots of RunIt form cleanup ([#814](https://www.github.com/looker-open-source/sdk-codegen/issues/814)) ([e92eae8](https://www.github.com/looker-open-source/sdk-codegen/commit/e92eae8fc127a0aa99545ca9c577152c08d59000)) +- makeTheCall for Kotlin and type tagging ([#833](https://www.github.com/looker-open-source/sdk-codegen/issues/833)) ([2ca950e](https://www.github.com/looker-open-source/sdk-codegen/commit/2ca950e16c9c172d3e67de58261df16e424efaa3)) +- support either string or numeric JSON values with AnyString ([#848](https://www.github.com/looker-open-source/sdk-codegen/issues/848)) ([9b428f5](https://www.github.com/looker-open-source/sdk-codegen/commit/9b428f5dc871477402f1683cffaadfad55501878)) +- Update Kotlin SDK to use Gson instead of Jackson ([#836](https://www.github.com/looker-open-source/sdk-codegen/issues/836)) ([4d1f789](https://www.github.com/looker-open-source/sdk-codegen/commit/4d1f789fa3b97b0808f06d5d547c96de3ca890ff)) +- Use agenda data for the Hackathon home page ([#842](https://www.github.com/looker-open-source/sdk-codegen/issues/842)) ([0da2523](https://www.github.com/looker-open-source/sdk-codegen/commit/0da25239c3f108cb684309818c33c91c2a7c3278)) ### Bug Fixes -* add support for okta oauth implicit flow in extension framework ([#847](https://www.github.com/looker-open-source/sdk-codegen/issues/847)) ([6aaa0e5](https://www.github.com/looker-open-source/sdk-codegen/commit/6aaa0e5b829403a6e003162edc72c3e63291c0e5)) -* Extension Api Explorer markdown link clicks ([#830](https://www.github.com/looker-open-source/sdk-codegen/issues/830)) ([dd8a3f0](https://www.github.com/looker-open-source/sdk-codegen/commit/dd8a3f03b8ea03858271bf55307c7d359631455a)) -* intrinsic type params are not Partial ([#819](https://www.github.com/looker-open-source/sdk-codegen/issues/819)) ([4b31490](https://www.github.com/looker-open-source/sdk-codegen/commit/4b31490f7ce5c9593854e56518245c5399ea9548)) -* logic for 2D JSON data detection ([#840](https://www.github.com/looker-open-source/sdk-codegen/issues/840)) ([3d18b93](https://www.github.com/looker-open-source/sdk-codegen/commit/3d18b9359e16aa4923f825e748f82a6049f02062)) -* Property names with special characters in Kotlin SDK ([#838](https://www.github.com/looker-open-source/sdk-codegen/issues/838)) ([40b6b24](https://www.github.com/looker-open-source/sdk-codegen/commit/40b6b24bfedf8ba16b5dbae2abbbdce2f73c1ffd)) -* remove body from REST call if no body elements are defined ([#841](https://www.github.com/looker-open-source/sdk-codegen/issues/841)) ([eb1731f](https://www.github.com/looker-open-source/sdk-codegen/commit/eb1731f2e2d3911fe5044e06321eb9712ddfa419)) -* request content initialization and filtering for RunIt requests ([#852](https://www.github.com/looker-open-source/sdk-codegen/issues/852)) ([474ee93](https://www.github.com/looker-open-source/sdk-codegen/commit/474ee9365dafe6549826a9f627ac0a79dc0e9a56)) -* Sidenav selection ([#831](https://www.github.com/looker-open-source/sdk-codegen/issues/831)) ([52e3ef3](https://www.github.com/looker-open-source/sdk-codegen/commit/52e3ef31a6157a6a544bf712a73d118d22913583)) -* stack overflow for type tagging during codegen ([#845](https://www.github.com/looker-open-source/sdk-codegen/issues/845)) ([4ece1b3](https://www.github.com/looker-open-source/sdk-codegen/commit/4ece1b374d9d4b73c1f3fd0512ab54da209c6be6)) -* type issues, tests and bin/deploy ([#844](https://www.github.com/looker-open-source/sdk-codegen/issues/844)) ([9e4a141](https://www.github.com/looker-open-source/sdk-codegen/commit/9e4a1413d4b6267805c0514dac1def93f5a56cb6)) -* typo with error boundary ([#851](https://www.github.com/looker-open-source/sdk-codegen/issues/851)) ([bb08f25](https://www.github.com/looker-open-source/sdk-codegen/commit/bb08f258354bb6439f08d29f340b1f396841ab12)) -* validateBody for API Explorer ([#846](https://www.github.com/looker-open-source/sdk-codegen/issues/846)) ([d1f203c](https://www.github.com/looker-open-source/sdk-codegen/commit/d1f203c3d843adb76217a750c0f414c608ceab0f)) +- add support for okta oauth implicit flow in extension framework ([#847](https://www.github.com/looker-open-source/sdk-codegen/issues/847)) ([6aaa0e5](https://www.github.com/looker-open-source/sdk-codegen/commit/6aaa0e5b829403a6e003162edc72c3e63291c0e5)) +- Extension Api Explorer markdown link clicks ([#830](https://www.github.com/looker-open-source/sdk-codegen/issues/830)) ([dd8a3f0](https://www.github.com/looker-open-source/sdk-codegen/commit/dd8a3f03b8ea03858271bf55307c7d359631455a)) +- intrinsic type params are not Partial ([#819](https://www.github.com/looker-open-source/sdk-codegen/issues/819)) ([4b31490](https://www.github.com/looker-open-source/sdk-codegen/commit/4b31490f7ce5c9593854e56518245c5399ea9548)) +- logic for 2D JSON data detection ([#840](https://www.github.com/looker-open-source/sdk-codegen/issues/840)) ([3d18b93](https://www.github.com/looker-open-source/sdk-codegen/commit/3d18b9359e16aa4923f825e748f82a6049f02062)) +- Property names with special characters in Kotlin SDK ([#838](https://www.github.com/looker-open-source/sdk-codegen/issues/838)) ([40b6b24](https://www.github.com/looker-open-source/sdk-codegen/commit/40b6b24bfedf8ba16b5dbae2abbbdce2f73c1ffd)) +- remove body from REST call if no body elements are defined ([#841](https://www.github.com/looker-open-source/sdk-codegen/issues/841)) ([eb1731f](https://www.github.com/looker-open-source/sdk-codegen/commit/eb1731f2e2d3911fe5044e06321eb9712ddfa419)) +- request content initialization and filtering for RunIt requests ([#852](https://www.github.com/looker-open-source/sdk-codegen/issues/852)) ([474ee93](https://www.github.com/looker-open-source/sdk-codegen/commit/474ee9365dafe6549826a9f627ac0a79dc0e9a56)) +- Sidenav selection ([#831](https://www.github.com/looker-open-source/sdk-codegen/issues/831)) ([52e3ef3](https://www.github.com/looker-open-source/sdk-codegen/commit/52e3ef31a6157a6a544bf712a73d118d22913583)) +- stack overflow for type tagging during codegen ([#845](https://www.github.com/looker-open-source/sdk-codegen/issues/845)) ([4ece1b3](https://www.github.com/looker-open-source/sdk-codegen/commit/4ece1b374d9d4b73c1f3fd0512ab54da209c6be6)) +- type issues, tests and bin/deploy ([#844](https://www.github.com/looker-open-source/sdk-codegen/issues/844)) ([9e4a141](https://www.github.com/looker-open-source/sdk-codegen/commit/9e4a1413d4b6267805c0514dac1def93f5a56cb6)) +- typo with error boundary ([#851](https://www.github.com/looker-open-source/sdk-codegen/issues/851)) ([bb08f25](https://www.github.com/looker-open-source/sdk-codegen/commit/bb08f258354bb6439f08d29f340b1f396841ab12)) +- validateBody for API Explorer ([#846](https://www.github.com/looker-open-source/sdk-codegen/issues/846)) ([d1f203c](https://www.github.com/looker-open-source/sdk-codegen/commit/d1f203c3d843adb76217a750c0f414c608ceab0f)) ## [1.15.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.14.0...sdk-codegen-all-v1.15.0) (2021-09-01) - ### Features -* http response explorer for RunIt ([#800](https://www.github.com/looker-open-source/sdk-codegen/issues/800)) ([3f273ea](https://www.github.com/looker-open-source/sdk-codegen/commit/3f273ea7f849dafece8f4f5f60558021ecd41705)) -* Looker 21.14 release ([#807](https://www.github.com/looker-open-source/sdk-codegen/issues/807)) ([99db26d](https://www.github.com/looker-open-source/sdk-codegen/commit/99db26dcd812135d775e61e495c98a66057c6f54)) -* new configuration UI for API Explorer ([#803](https://www.github.com/looker-open-source/sdk-codegen/issues/803)) ([e6c67d1](https://www.github.com/looker-open-source/sdk-codegen/commit/e6c67d1211b412d4ce83127c9f7a8f091e3cf27f)) - +- http response explorer for RunIt ([#800](https://www.github.com/looker-open-source/sdk-codegen/issues/800)) ([3f273ea](https://www.github.com/looker-open-source/sdk-codegen/commit/3f273ea7f849dafece8f4f5f60558021ecd41705)) +- Looker 21.14 release ([#807](https://www.github.com/looker-open-source/sdk-codegen/issues/807)) ([99db26d](https://www.github.com/looker-open-source/sdk-codegen/commit/99db26dcd812135d775e61e495c98a66057c6f54)) +- new configuration UI for API Explorer ([#803](https://www.github.com/looker-open-source/sdk-codegen/issues/803)) ([e6c67d1](https://www.github.com/looker-open-source/sdk-codegen/commit/e6c67d1211b412d4ce83127c9f7a8f091e3cf27f)) ### Bug Fixes -* placate TypeScript 4.4 ([#809](https://www.github.com/looker-open-source/sdk-codegen/issues/809)) ([6509c17](https://www.github.com/looker-open-source/sdk-codegen/commit/6509c17da655be1fb7d51d0275b9e198aa6ae929)) -* remove custom Exceptions and `assert` to make scripts executable at the simplest possible setup. ([#780](https://www.github.com/looker-open-source/sdk-codegen/issues/780)) ([0126ad9](https://www.github.com/looker-open-source/sdk-codegen/commit/0126ad978cd0b7df3daab3932d93bae307260bf4)) -* spec refresh ([#801](https://www.github.com/looker-open-source/sdk-codegen/issues/801)) ([a10245a](https://www.github.com/looker-open-source/sdk-codegen/commit/a10245aa7ea180670d9d8219810aab88eb50854d)) +- placate TypeScript 4.4 ([#809](https://www.github.com/looker-open-source/sdk-codegen/issues/809)) ([6509c17](https://www.github.com/looker-open-source/sdk-codegen/commit/6509c17da655be1fb7d51d0275b9e198aa6ae929)) +- remove custom Exceptions and `assert` to make scripts executable at the simplest possible setup. ([#780](https://www.github.com/looker-open-source/sdk-codegen/issues/780)) ([0126ad9](https://www.github.com/looker-open-source/sdk-codegen/commit/0126ad978cd0b7df3daab3932d93bae307260bf4)) +- spec refresh ([#801](https://www.github.com/looker-open-source/sdk-codegen/issues/801)) ([a10245a](https://www.github.com/looker-open-source/sdk-codegen/commit/a10245aa7ea180670d9d8219810aab88eb50854d)) ## [1.14.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.13.1...sdk-codegen-all-v1.14.0) (2021-08-11) - ### Features -* fetch API specifications for stand-alone API Explorer ([#789](https://www.github.com/looker-open-source/sdk-codegen/issues/789)) ([f7be1fb](https://www.github.com/looker-open-source/sdk-codegen/commit/f7be1fb589570137c5ab39304910c57f721de8fb)) - +- fetch API specifications for stand-alone API Explorer ([#789](https://www.github.com/looker-open-source/sdk-codegen/issues/789)) ([f7be1fb](https://www.github.com/looker-open-source/sdk-codegen/commit/f7be1fb589570137c5ab39304910c57f721de8fb)) ### Bug Fixes -* relax python dict key access ([#791](https://www.github.com/looker-open-source/sdk-codegen/issues/791)) ([d923c2f](https://www.github.com/looker-open-source/sdk-codegen/commit/d923c2faf3bde822307fa3d4f3367f270f47b49e)), closes [#778](https://www.github.com/looker-open-source/sdk-codegen/issues/778) +- relax python dict key access ([#791](https://www.github.com/looker-open-source/sdk-codegen/issues/791)) ([d923c2f](https://www.github.com/looker-open-source/sdk-codegen/commit/d923c2faf3bde822307fa3d4f3367f270f47b49e)), closes [#778](https://www.github.com/looker-open-source/sdk-codegen/issues/778) ### [1.13.1](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.13.0...sdk-codegen-all-v1.13.1) (2021-08-09) - ### Bug Fixes -* remove python setup.py author_email ([#787](https://www.github.com/looker-open-source/sdk-codegen/issues/787)) ([7939a73](https://www.github.com/looker-open-source/sdk-codegen/commit/7939a7397c44864e1f48cea7a408ce1bfdef9782)) +- remove python setup.py author_email ([#787](https://www.github.com/looker-open-source/sdk-codegen/issues/787)) ([7939a73](https://www.github.com/looker-open-source/sdk-codegen/commit/7939a7397c44864e1f48cea7a408ce1bfdef9782)) ## [1.13.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.12.0...sdk-codegen-all-v1.13.0) (2021-08-06) - ### Features -* Another simple example add users to a Looker group based on a csv. ([#776](https://www.github.com/looker-open-source/sdk-codegen/issues/776)) ([83cde03](https://www.github.com/looker-open-source/sdk-codegen/commit/83cde032a17aa6cf1d9f8ab598c8b5484336496c)) -* Looker 21.12 bindings ([#782](https://www.github.com/looker-open-source/sdk-codegen/issues/782)) ([a00b908](https://www.github.com/looker-open-source/sdk-codegen/commit/a00b908e6fee79250c4c1ffb1b1e8915d58dd633)) - +- Another simple example add users to a Looker group based on a csv. ([#776](https://www.github.com/looker-open-source/sdk-codegen/issues/776)) ([83cde03](https://www.github.com/looker-open-source/sdk-codegen/commit/83cde032a17aa6cf1d9f8ab598c8b5484336496c)) +- Looker 21.12 bindings ([#782](https://www.github.com/looker-open-source/sdk-codegen/issues/782)) ([a00b908](https://www.github.com/looker-open-source/sdk-codegen/commit/a00b908e6fee79250c4c1ffb1b1e8915d58dd633)) ### Bug Fixes -* apix fix ([#785](https://www.github.com/looker-open-source/sdk-codegen/issues/785)) ([5ecea27](https://www.github.com/looker-open-source/sdk-codegen/commit/5ecea27fa5cc124ec1d823484cd67b0d22132624)) -* documentation refs and notes for Typescript SDK and more ([#783](https://www.github.com/looker-open-source/sdk-codegen/issues/783)) ([b2487ea](https://www.github.com/looker-open-source/sdk-codegen/commit/b2487ea4a113ce17a080ccab9b4c4139813e8810)) +- apix fix ([#785](https://www.github.com/looker-open-source/sdk-codegen/issues/785)) ([5ecea27](https://www.github.com/looker-open-source/sdk-codegen/commit/5ecea27fa5cc124ec1d823484cd67b0d22132624)) +- documentation refs and notes for Typescript SDK and more ([#783](https://www.github.com/looker-open-source/sdk-codegen/issues/783)) ([b2487ea](https://www.github.com/looker-open-source/sdk-codegen/commit/b2487ea4a113ce17a080ccab9b4c4139813e8810)) ## [1.12.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.11.0...sdk-codegen-all-v1.12.0) (2021-07-30) - ### Features -* add 2 Python examples (pause/copy schedules, kill queries) ([#757](https://www.github.com/looker-open-source/sdk-codegen/issues/757)) ([787eeeb](https://www.github.com/looker-open-source/sdk-codegen/commit/787eeeb16d34dc27af01deef40fd69e175186f65)) -* adding python example for folder permission access ([#758](https://www.github.com/looker-open-source/sdk-codegen/issues/758)) ([21e52df](https://www.github.com/looker-open-source/sdk-codegen/commit/21e52df573fcedab65449b3554d4f35ddee503d3)) -* python barebones schedule plan example ([#763](https://www.github.com/looker-open-source/sdk-codegen/issues/763)) ([57cd05b](https://www.github.com/looker-open-source/sdk-codegen/commit/57cd05b2bc6b0427bb72eca57d91a0435de3785c)) - +- add 2 Python examples (pause/copy schedules, kill queries) ([#757](https://www.github.com/looker-open-source/sdk-codegen/issues/757)) ([787eeeb](https://www.github.com/looker-open-source/sdk-codegen/commit/787eeeb16d34dc27af01deef40fd69e175186f65)) +- adding python example for folder permission access ([#758](https://www.github.com/looker-open-source/sdk-codegen/issues/758)) ([21e52df](https://www.github.com/looker-open-source/sdk-codegen/commit/21e52df573fcedab65449b3554d4f35ddee503d3)) +- python barebones schedule plan example ([#763](https://www.github.com/looker-open-source/sdk-codegen/issues/763)) ([57cd05b](https://www.github.com/looker-open-source/sdk-codegen/commit/57cd05b2bc6b0427bb72eca57d91a0435de3785c)) ### Bug Fixes -* dev portal apix tweaks ([#760](https://www.github.com/looker-open-source/sdk-codegen/issues/760)) ([6e937f4](https://www.github.com/looker-open-source/sdk-codegen/commit/6e937f4778457021dd739e849e209ad4de7bb450)) -* improved writeable type support ([#766](https://www.github.com/looker-open-source/sdk-codegen/issues/766)) ([be91bd8](https://www.github.com/looker-open-source/sdk-codegen/commit/be91bd8e772f9a64c47486b317f1ac1f6ef14327)) -* remove unused net/url import from go ([#767](https://www.github.com/looker-open-source/sdk-codegen/issues/767)) ([35d912c](https://www.github.com/looker-open-source/sdk-codegen/commit/35d912c1e31e5817a2b6a81084753a66a4860338)), closes [#765](https://www.github.com/looker-open-source/sdk-codegen/issues/765) -* support response observer chaining ([025618c](https://www.github.com/looker-open-source/sdk-codegen/commit/025618c806efc1664b4f573248ad5a64d6cee3e3)) -* uses consistent heading text ([#761](https://www.github.com/looker-open-source/sdk-codegen/issues/761)) ([2e308ec](https://www.github.com/looker-open-source/sdk-codegen/commit/2e308ec1c6b4f181be12dda806955f8913336234)) +- dev portal apix tweaks ([#760](https://www.github.com/looker-open-source/sdk-codegen/issues/760)) ([6e937f4](https://www.github.com/looker-open-source/sdk-codegen/commit/6e937f4778457021dd739e849e209ad4de7bb450)) +- improved writeable type support ([#766](https://www.github.com/looker-open-source/sdk-codegen/issues/766)) ([be91bd8](https://www.github.com/looker-open-source/sdk-codegen/commit/be91bd8e772f9a64c47486b317f1ac1f6ef14327)) +- remove unused net/url import from go ([#767](https://www.github.com/looker-open-source/sdk-codegen/issues/767)) ([35d912c](https://www.github.com/looker-open-source/sdk-codegen/commit/35d912c1e31e5817a2b6a81084753a66a4860338)), closes [#765](https://www.github.com/looker-open-source/sdk-codegen/issues/765) +- support response observer chaining ([025618c](https://www.github.com/looker-open-source/sdk-codegen/commit/025618c806efc1664b4f573248ad5a64d6cee3e3)) +- uses consistent heading text ([#761](https://www.github.com/looker-open-source/sdk-codegen/issues/761)) ([2e308ec](https://www.github.com/looker-open-source/sdk-codegen/commit/2e308ec1c6b4f181be12dda806955f8913336234)) ## [1.11.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.10.1...sdk-codegen-all-v1.11.0) (2021-07-15) - ### Features -* API explorer error boundary ([#753](https://www.github.com/looker-open-source/sdk-codegen/issues/753)) ([3321bf1](https://www.github.com/looker-open-source/sdk-codegen/commit/3321bf1c7abf9f5165799970da5c2be40d94463a)) -* apix sidebar toggle for dev portal ([#751](https://www.github.com/looker-open-source/sdk-codegen/issues/751)) ([ac83a57](https://www.github.com/looker-open-source/sdk-codegen/commit/ac83a5708feab996a528520103b3f3dd9314861e)) -* initial api explorer dev portal support ([#748](https://www.github.com/looker-open-source/sdk-codegen/issues/748)) ([a4a7056](https://www.github.com/looker-open-source/sdk-codegen/commit/a4a70567bc114466d7650b9fba4545a16a2f0e37)) -* simplify apix dev portal navigation toggle ([#752](https://www.github.com/looker-open-source/sdk-codegen/issues/752)) ([dcbf642](https://www.github.com/looker-open-source/sdk-codegen/commit/dcbf64264387b611bcf939d7430a2cfb4b4665bd)) - +- API explorer error boundary ([#753](https://www.github.com/looker-open-source/sdk-codegen/issues/753)) ([3321bf1](https://www.github.com/looker-open-source/sdk-codegen/commit/3321bf1c7abf9f5165799970da5c2be40d94463a)) +- apix sidebar toggle for dev portal ([#751](https://www.github.com/looker-open-source/sdk-codegen/issues/751)) ([ac83a57](https://www.github.com/looker-open-source/sdk-codegen/commit/ac83a5708feab996a528520103b3f3dd9314861e)) +- initial api explorer dev portal support ([#748](https://www.github.com/looker-open-source/sdk-codegen/issues/748)) ([a4a7056](https://www.github.com/looker-open-source/sdk-codegen/commit/a4a70567bc114466d7650b9fba4545a16a2f0e37)) +- simplify apix dev portal navigation toggle ([#752](https://www.github.com/looker-open-source/sdk-codegen/issues/752)) ([dcbf642](https://www.github.com/looker-open-source/sdk-codegen/commit/dcbf64264387b611bcf939d7430a2cfb4b4665bd)) ### Bug Fixes -* bullet proof APIX response handling ([#754](https://www.github.com/looker-open-source/sdk-codegen/issues/754)) ([b2a018a](https://www.github.com/looker-open-source/sdk-codegen/commit/b2a018a62e4a1acd837b6861c3e3d26c7af385bd)) +- bullet proof APIX response handling ([#754](https://www.github.com/looker-open-source/sdk-codegen/issues/754)) ([b2a018a](https://www.github.com/looker-open-source/sdk-codegen/commit/b2a018a62e4a1acd837b6861c3e3d26c7af385bd)) ### [1.10.1](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.10.0...sdk-codegen-all-v1.10.1) (2021-07-09) - ### Bug Fixes -* browserTransport.ts retains ok: false now ([#745](https://www.github.com/looker-open-source/sdk-codegen/issues/745)) ([451481c](https://www.github.com/looker-open-source/sdk-codegen/commit/451481c62cdc986c860c582e4a77e3e887c6a732)) +- browserTransport.ts retains ok: false now ([#745](https://www.github.com/looker-open-source/sdk-codegen/issues/745)) ([451481c](https://www.github.com/looker-open-source/sdk-codegen/commit/451481c62cdc986c860c582e4a77e3e887c6a732)) ## [1.10.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.9.2...sdk-codegen-all-v1.10.0) (2021-07-08) - ### Features -* Looker 21.10 bindings ([#737](https://www.github.com/looker-open-source/sdk-codegen/issues/737)) ([6b3895d](https://www.github.com/looker-open-source/sdk-codegen/commit/6b3895d35e138df9ff84286b7658434292617aa8)) - +- Looker 21.10 bindings ([#737](https://www.github.com/looker-open-source/sdk-codegen/issues/737)) ([6b3895d](https://www.github.com/looker-open-source/sdk-codegen/commit/6b3895d35e138df9ff84286b7658434292617aa8)) ### Bug Fixes -* add a test to additional query param required bug ([#741](https://www.github.com/looker-open-source/sdk-codegen/issues/741)) ([0cbe656](https://www.github.com/looker-open-source/sdk-codegen/commit/0cbe656aaf53f6f92fafcc62eeb573e0ff2d0a19)) -* check HTTP status code for TS SDK "ok" toggle ([#739](https://www.github.com/looker-open-source/sdk-codegen/issues/739)) ([3ed6af7](https://www.github.com/looker-open-source/sdk-codegen/commit/3ed6af78b2cb9610b3386ff851013a93fff40f54)) -* extension-api-explorer build ([#740](https://www.github.com/looker-open-source/sdk-codegen/issues/740)) ([1697883](https://www.github.com/looker-open-source/sdk-codegen/commit/16978836f42d8c755031a3438eeee1e9c1a743e6)) +- add a test to additional query param required bug ([#741](https://www.github.com/looker-open-source/sdk-codegen/issues/741)) ([0cbe656](https://www.github.com/looker-open-source/sdk-codegen/commit/0cbe656aaf53f6f92fafcc62eeb573e0ff2d0a19)) +- check HTTP status code for TS SDK "ok" toggle ([#739](https://www.github.com/looker-open-source/sdk-codegen/issues/739)) ([3ed6af7](https://www.github.com/looker-open-source/sdk-codegen/commit/3ed6af78b2cb9610b3386ff851013a93fff40f54)) +- extension-api-explorer build ([#740](https://www.github.com/looker-open-source/sdk-codegen/issues/740)) ([1697883](https://www.github.com/looker-open-source/sdk-codegen/commit/16978836f42d8c755031a3438eeee1e9c1a743e6)) ### [1.9.2](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.9.1...sdk-codegen-all-v1.9.2) (2021-07-02) - ### Bug Fixes -* explain pager and pageAll sdk param better ([#736](https://www.github.com/looker-open-source/sdk-codegen/issues/736)) ([a93a9b1](https://www.github.com/looker-open-source/sdk-codegen/commit/a93a9b1ded0acddeaf051e7a2fed5132c1cb5c0c)) -* python datetime [de]serialization bug ([#734](https://www.github.com/looker-open-source/sdk-codegen/issues/734)) ([c821f2b](https://www.github.com/looker-open-source/sdk-codegen/commit/c821f2b77b99edfa2dd53aa0af82ab48081c3220)) -* python remove runtime asserts ([#703](https://www.github.com/looker-open-source/sdk-codegen/issues/703)) ([9b963c3](https://www.github.com/looker-open-source/sdk-codegen/commit/9b963c3367905f907e7867df1446f56e18284c3b)), closes [#695](https://www.github.com/looker-open-source/sdk-codegen/issues/695) +- explain pager and pageAll sdk param better ([#736](https://www.github.com/looker-open-source/sdk-codegen/issues/736)) ([a93a9b1](https://www.github.com/looker-open-source/sdk-codegen/commit/a93a9b1ded0acddeaf051e7a2fed5132c1cb5c0c)) +- python datetime [de]serialization bug ([#734](https://www.github.com/looker-open-source/sdk-codegen/issues/734)) ([c821f2b](https://www.github.com/looker-open-source/sdk-codegen/commit/c821f2b77b99edfa2dd53aa0af82ab48081c3220)) +- python remove runtime asserts ([#703](https://www.github.com/looker-open-source/sdk-codegen/issues/703)) ([9b963c3](https://www.github.com/looker-open-source/sdk-codegen/commit/9b963c3367905f907e7867df1446f56e18284c3b)), closes [#695](https://www.github.com/looker-open-source/sdk-codegen/issues/695) ### [1.9.1](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.9.0...sdk-codegen-all-v1.9.1) (2021-07-01) - ### Bug Fixes -* paging parsing issues ([#728](https://www.github.com/looker-open-source/sdk-codegen/issues/728)) ([f8eec43](https://www.github.com/looker-open-source/sdk-codegen/commit/f8eec43bdfbe337d41b1da02c127d690c8815ed3)) +- paging parsing issues ([#728](https://www.github.com/looker-open-source/sdk-codegen/issues/728)) ([f8eec43](https://www.github.com/looker-open-source/sdk-codegen/commit/f8eec43bdfbe337d41b1da02c127d690c8815ed3)) ## [1.9.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.8.0...sdk-codegen-all-v1.9.0) (2021-06-30) - ### Features -* paging results for the Typescript SDK ([#698](https://www.github.com/looker-open-source/sdk-codegen/issues/698)) ([537eb57](https://www.github.com/looker-open-source/sdk-codegen/commit/537eb579b9c6d95d600f455a187e6d7b9bf700ef)) -* refactor Markdown out to @looker/code-editor ([#699](https://www.github.com/looker-open-source/sdk-codegen/issues/699)) ([f3c16e2](https://www.github.com/looker-open-source/sdk-codegen/commit/f3c16e2a162266545ba3086a0a1dddd0cb79195f)) -* syntax highlight application/sql responses ([#718](https://www.github.com/looker-open-source/sdk-codegen/issues/718)) ([28a1bbe](https://www.github.com/looker-open-source/sdk-codegen/commit/28a1bbedb04f500a12e2c5a0fe304919139e6638)) - +- paging results for the Typescript SDK ([#698](https://www.github.com/looker-open-source/sdk-codegen/issues/698)) ([537eb57](https://www.github.com/looker-open-source/sdk-codegen/commit/537eb579b9c6d95d600f455a187e6d7b9bf700ef)) +- refactor Markdown out to @looker/code-editor ([#699](https://www.github.com/looker-open-source/sdk-codegen/issues/699)) ([f3c16e2](https://www.github.com/looker-open-source/sdk-codegen/commit/f3c16e2a162266545ba3086a0a1dddd0cb79195f)) +- syntax highlight application/sql responses ([#718](https://www.github.com/looker-open-source/sdk-codegen/issues/718)) ([28a1bbe](https://www.github.com/looker-open-source/sdk-codegen/commit/28a1bbedb04f500a12e2c5a0fe304919139e6638)) ### Bug Fixes -* dependabot security package upgrades ([#725](https://www.github.com/looker-open-source/sdk-codegen/issues/725)) ([15d7cb3](https://www.github.com/looker-open-source/sdk-codegen/commit/15d7cb3f70229424cc1710112683f096ccbc863c)) +- dependabot security package upgrades ([#725](https://www.github.com/looker-open-source/sdk-codegen/issues/725)) ([15d7cb3](https://www.github.com/looker-open-source/sdk-codegen/commit/15d7cb3f70229424cc1710112683f096ccbc863c)) ## [1.8.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.7.0...sdk-codegen-all-v1.8.0) (2021-06-17) - ### Features -* Looker 21.8 bindings ([#705](https://www.github.com/looker-open-source/sdk-codegen/issues/705)) ([032d0f8](https://www.github.com/looker-open-source/sdk-codegen/commit/032d0f80e30356aaa9f3b3f987b315203f896a61)) +- Looker 21.8 bindings ([#705](https://www.github.com/looker-open-source/sdk-codegen/issues/705)) ([032d0f8](https://www.github.com/looker-open-source/sdk-codegen/commit/032d0f80e30356aaa9f3b3f987b315203f896a61)) ## [1.7.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.6.0...sdk-codegen-all-v1.7.0) (2021-06-16) - ### Features -* **New Python Examples:** Adding 2 new Python examples ([#701](https://www.github.com/looker-open-source/sdk-codegen/issues/701)) ([c4135eb](https://www.github.com/looker-open-source/sdk-codegen/commit/c4135eb962dbf05c5b1644e2ed437272eec8894d)) -* reduce size of apix bundle ([#676](https://www.github.com/looker-open-source/sdk-codegen/issues/676)) ([0d74f6a](https://www.github.com/looker-open-source/sdk-codegen/commit/0d74f6a7814b509416a9d2558c16439a4859b543)) -* show original spec in API Explorer ([#686](https://www.github.com/looker-open-source/sdk-codegen/issues/686)) ([2bfb014](https://www.github.com/looker-open-source/sdk-codegen/commit/2bfb0147f2947680a784ef3118192b1e7590b296)) -* two-way type references ([#684](https://www.github.com/looker-open-source/sdk-codegen/issues/684)) ([fbc0565](https://www.github.com/looker-open-source/sdk-codegen/commit/fbc0565c4c8fe3d1488bd246e244bed56f1412a9)) -* upgrade react-markdown ([#681](https://www.github.com/looker-open-source/sdk-codegen/issues/681)) ([952ed30](https://www.github.com/looker-open-source/sdk-codegen/commit/952ed305347e591154413171d73cc648d3f597c5)) - +- **New Python Examples:** Adding 2 new Python examples ([#701](https://www.github.com/looker-open-source/sdk-codegen/issues/701)) ([c4135eb](https://www.github.com/looker-open-source/sdk-codegen/commit/c4135eb962dbf05c5b1644e2ed437272eec8894d)) +- reduce size of apix bundle ([#676](https://www.github.com/looker-open-source/sdk-codegen/issues/676)) ([0d74f6a](https://www.github.com/looker-open-source/sdk-codegen/commit/0d74f6a7814b509416a9d2558c16439a4859b543)) +- show original spec in API Explorer ([#686](https://www.github.com/looker-open-source/sdk-codegen/issues/686)) ([2bfb014](https://www.github.com/looker-open-source/sdk-codegen/commit/2bfb0147f2947680a784ef3118192b1e7590b296)) +- two-way type references ([#684](https://www.github.com/looker-open-source/sdk-codegen/issues/684)) ([fbc0565](https://www.github.com/looker-open-source/sdk-codegen/commit/fbc0565c4c8fe3d1488bd246e244bed56f1412a9)) +- upgrade react-markdown ([#681](https://www.github.com/looker-open-source/sdk-codegen/issues/681)) ([952ed30](https://www.github.com/looker-open-source/sdk-codegen/commit/952ed305347e591154413171d73cc648d3f597c5)) ### Bug Fixes -* export funcs for TS SDK ([#693](https://www.github.com/looker-open-source/sdk-codegen/issues/693)) ([eec853e](https://www.github.com/looker-open-source/sdk-codegen/commit/eec853e87d35e4908d3416d6f3b1d98209ab22f5)) -* font download on route change ([#678](https://www.github.com/looker-open-source/sdk-codegen/issues/678)) ([ae62914](https://www.github.com/looker-open-source/sdk-codegen/commit/ae62914faa2e93d5523ddc82973f23df2992ea2f)) -* rendering of markdown tables in APIX explorer ([#687](https://www.github.com/looker-open-source/sdk-codegen/issues/687)) ([40e8640](https://www.github.com/looker-open-source/sdk-codegen/commit/40e8640872db001075c397b5d941dec535867a3d)) -* sync design-tokens/icons dependency constraint ([eb1a427](https://www.github.com/looker-open-source/sdk-codegen/commit/eb1a427d3c90bec44b2aac542783c3cda4810c0e)) -* sync design-tokens/icons dependency constraint ([eb1a427](https://www.github.com/looker-open-source/sdk-codegen/commit/eb1a427d3c90bec44b2aac542783c3cda4810c0e)) +- export funcs for TS SDK ([#693](https://www.github.com/looker-open-source/sdk-codegen/issues/693)) ([eec853e](https://www.github.com/looker-open-source/sdk-codegen/commit/eec853e87d35e4908d3416d6f3b1d98209ab22f5)) +- font download on route change ([#678](https://www.github.com/looker-open-source/sdk-codegen/issues/678)) ([ae62914](https://www.github.com/looker-open-source/sdk-codegen/commit/ae62914faa2e93d5523ddc82973f23df2992ea2f)) +- rendering of markdown tables in APIX explorer ([#687](https://www.github.com/looker-open-source/sdk-codegen/issues/687)) ([40e8640](https://www.github.com/looker-open-source/sdk-codegen/commit/40e8640872db001075c397b5d941dec535867a3d)) +- sync design-tokens/icons dependency constraint ([eb1a427](https://www.github.com/looker-open-source/sdk-codegen/commit/eb1a427d3c90bec44b2aac542783c3cda4810c0e)) +- sync design-tokens/icons dependency constraint ([eb1a427](https://www.github.com/looker-open-source/sdk-codegen/commit/eb1a427d3c90bec44b2aac542783c3cda4810c0e)) ## [1.6.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.5.0...sdk-codegen-all-v1.6.0) (2021-05-05) - ### Features -* update SDKs to Looker 21.6 ([#666](https://www.github.com/looker-open-source/sdk-codegen/issues/666)) ([b2b6b79](https://www.github.com/looker-open-source/sdk-codegen/commit/b2b6b793e38d05d0fcb6236505fb581778d12094)) - +- update SDKs to Looker 21.6 ([#666](https://www.github.com/looker-open-source/sdk-codegen/issues/666)) ([b2b6b79](https://www.github.com/looker-open-source/sdk-codegen/commit/b2b6b793e38d05d0fcb6236505fb581778d12094)) ### Bug Fixes -* Fix transpiler warnings in hackathon extension ([#651](https://www.github.com/looker-open-source/sdk-codegen/issues/651)) ([bdd9428](https://www.github.com/looker-open-source/sdk-codegen/commit/bdd9428550e60d7eef9016519e07b3c65ad81550)) -* improve TS SDK imports/exports ([#657](https://www.github.com/looker-open-source/sdk-codegen/issues/657)) ([4c2ec6e](https://www.github.com/looker-open-source/sdk-codegen/commit/4c2ec6ea390bb27d123c333f6d559749efa33830)) -* rerender sdk declarations on type/method change ([#659](https://www.github.com/looker-open-source/sdk-codegen/issues/659)) ([77139f6](https://www.github.com/looker-open-source/sdk-codegen/commit/77139f672200d31518543eb76546e9bb2ccf64c3)) -* use "TypeScript" and "JavaScript" everywhere ([#644](https://www.github.com/looker-open-source/sdk-codegen/issues/644)) ([c15031c](https://www.github.com/looker-open-source/sdk-codegen/commit/c15031cee189556adbd9e18641e7c992e86e3611)) +- Fix transpiler warnings in hackathon extension ([#651](https://www.github.com/looker-open-source/sdk-codegen/issues/651)) ([bdd9428](https://www.github.com/looker-open-source/sdk-codegen/commit/bdd9428550e60d7eef9016519e07b3c65ad81550)) +- improve TS SDK imports/exports ([#657](https://www.github.com/looker-open-source/sdk-codegen/issues/657)) ([4c2ec6e](https://www.github.com/looker-open-source/sdk-codegen/commit/4c2ec6ea390bb27d123c333f6d559749efa33830)) +- rerender sdk declarations on type/method change ([#659](https://www.github.com/looker-open-source/sdk-codegen/issues/659)) ([77139f6](https://www.github.com/looker-open-source/sdk-codegen/commit/77139f672200d31518543eb76546e9bb2ccf64c3)) +- use "TypeScript" and "JavaScript" everywhere ([#644](https://www.github.com/looker-open-source/sdk-codegen/issues/644)) ([c15031c](https://www.github.com/looker-open-source/sdk-codegen/commit/c15031cee189556adbd9e18641e7c992e86e3611)) ## [1.5.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.4.1...sdk-codegen-all-v1.5.0) (2021-04-27) - ### Features -* APIX now uses google font appropriately ([#636](https://www.github.com/looker-open-source/sdk-codegen/issues/636)) ([ed932d6](https://www.github.com/looker-open-source/sdk-codegen/commit/ed932d6744fd3c102bfff7417643667bb57aee00)) -* extension framework identifies looker host type ([#634](https://www.github.com/looker-open-source/sdk-codegen/issues/634)) ([c6c6f64](https://www.github.com/looker-open-source/sdk-codegen/commit/c6c6f64bf4d2ec5eef4ac2f082868f80d11a180d)) +- APIX now uses google font appropriately ([#636](https://www.github.com/looker-open-source/sdk-codegen/issues/636)) ([ed932d6](https://www.github.com/looker-open-source/sdk-codegen/commit/ed932d6744fd3c102bfff7417643667bb57aee00)) +- extension framework identifies looker host type ([#634](https://www.github.com/looker-open-source/sdk-codegen/issues/634)) ([c6c6f64](https://www.github.com/looker-open-source/sdk-codegen/commit/c6c6f64bf4d2ec5eef4ac2f082868f80d11a180d)) ### [1.4.1](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.4.0...sdk-codegen-all-v1.4.1) (2021-04-27) - ### Bug Fixes -* added a missing "import type" statement to the TS SDK ([#632](https://www.github.com/looker-open-source/sdk-codegen/issues/632)) ([59c0f3d](https://www.github.com/looker-open-source/sdk-codegen/commit/59c0f3d418ca557c65e5690435ee2eca96c5231d)) +- added a missing "import type" statement to the TS SDK ([#632](https://www.github.com/looker-open-source/sdk-codegen/issues/632)) ([59c0f3d](https://www.github.com/looker-open-source/sdk-codegen/commit/59c0f3d418ca557c65e5690435ee2eca96c5231d)) ## [1.4.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.3.0...sdk-codegen-all-v1.4.0) (2021-04-26) - ### Features -* add noComment toggle to code generators ([#627](https://www.github.com/looker-open-source/sdk-codegen/issues/627)) ([90bbecb](https://www.github.com/looker-open-source/sdk-codegen/commit/90bbecbeb31c66bda31f6d14abcc50288e6d7ea1)), closes [#626](https://www.github.com/looker-open-source/sdk-codegen/issues/626) -* adds editor functionality to CodeDisplay ([#615](https://www.github.com/looker-open-source/sdk-codegen/issues/615)) ([b256d14](https://www.github.com/looker-open-source/sdk-codegen/commit/b256d14c279e47f531c8291d11146d07a7b5ad94)) - +- add noComment toggle to code generators ([#627](https://www.github.com/looker-open-source/sdk-codegen/issues/627)) ([90bbecb](https://www.github.com/looker-open-source/sdk-codegen/commit/90bbecbeb31c66bda31f6d14abcc50288e6d7ea1)), closes [#626](https://www.github.com/looker-open-source/sdk-codegen/issues/626) +- adds editor functionality to CodeDisplay ([#615](https://www.github.com/looker-open-source/sdk-codegen/issues/615)) ([b256d14](https://www.github.com/looker-open-source/sdk-codegen/commit/b256d14c279e47f531c8291d11146d07a7b5ad94)) ### Bug Fixes -* remove deprecated object attribute reference in APIX tests ([#622](https://www.github.com/looker-open-source/sdk-codegen/issues/622)) ([581b351](https://www.github.com/looker-open-source/sdk-codegen/commit/581b3511fdc8431f80d54fd315a12192ceb86382)) +- remove deprecated object attribute reference in APIX tests ([#622](https://www.github.com/looker-open-source/sdk-codegen/issues/622)) ([581b351](https://www.github.com/looker-open-source/sdk-codegen/commit/581b3511fdc8431f80d54fd315a12192ceb86382)) ## [1.3.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.2.0...sdk-codegen-all-v1.3.0) (2021-04-21) - ### Features -* Add clipboard write capability to extension framework ([#603](https://www.github.com/looker-open-source/sdk-codegen/issues/603)) ([d6b52ea](https://www.github.com/looker-open-source/sdk-codegen/commit/d6b52ea4f009f64e43167a4acac973fcbfb91e2e)) -* adds 'SDK Examples' data table ([#602](https://www.github.com/looker-open-source/sdk-codegen/issues/602)) ([3678c96](https://www.github.com/looker-open-source/sdk-codegen/commit/3678c96cc7c2edadd00013b66711c917a62d1000)) -* introduces prism-editor package; implements read-only usage ([#588](https://www.github.com/looker-open-source/sdk-codegen/issues/588)) ([863c88d](https://www.github.com/looker-open-source/sdk-codegen/commit/863c88dfb0569f7c829602acee2404e1c840097e)) -* Playground for extension SDK changes ([#605](https://www.github.com/looker-open-source/sdk-codegen/issues/605)) ([f99de7e](https://www.github.com/looker-open-source/sdk-codegen/commit/f99de7e5bf590056b797b4b05c7a0a1c60f9d8dd)) - +- Add clipboard write capability to extension framework ([#603](https://www.github.com/looker-open-source/sdk-codegen/issues/603)) ([d6b52ea](https://www.github.com/looker-open-source/sdk-codegen/commit/d6b52ea4f009f64e43167a4acac973fcbfb91e2e)) +- adds 'SDK Examples' data table ([#602](https://www.github.com/looker-open-source/sdk-codegen/issues/602)) ([3678c96](https://www.github.com/looker-open-source/sdk-codegen/commit/3678c96cc7c2edadd00013b66711c917a62d1000)) +- introduces prism-editor package; implements read-only usage ([#588](https://www.github.com/looker-open-source/sdk-codegen/issues/588)) ([863c88d](https://www.github.com/looker-open-source/sdk-codegen/commit/863c88dfb0569f7c829602acee2404e1c840097e)) +- Playground for extension SDK changes ([#605](https://www.github.com/looker-open-source/sdk-codegen/issues/605)) ([f99de7e](https://www.github.com/looker-open-source/sdk-codegen/commit/f99de7e5bf590056b797b4b05c7a0a1c60f9d8dd)) ### Bug Fixes -* error handling for TS SDK, GSon body serialization for Kotlin SDK ([#601](https://www.github.com/looker-open-source/sdk-codegen/issues/601)) ([11e924f](https://www.github.com/looker-open-source/sdk-codegen/commit/11e924fb81af00c7b20a1af2330f43873c016f83)), closes [#544](https://www.github.com/looker-open-source/sdk-codegen/issues/544) -* lint dependencies ([#617](https://www.github.com/looker-open-source/sdk-codegen/issues/617)) ([7b172b1](https://www.github.com/looker-open-source/sdk-codegen/commit/7b172b1c6927fbf62eb668a503313ced10558dfd)) -* looker component version merge issue ([#609](https://www.github.com/looker-open-source/sdk-codegen/issues/609)) ([6aa9f60](https://www.github.com/looker-open-source/sdk-codegen/commit/6aa9f601019bb3f7105c48e3d360c3e61f57c6e1)) -* updated TypeScript, C#, Go language names in codeGenerators.ts ([#610](https://www.github.com/looker-open-source/sdk-codegen/issues/610)) ([13fb42b](https://www.github.com/looker-open-source/sdk-codegen/commit/13fb42b6bfa651a137e75b04fc6ee00620705ede)) +- error handling for TS SDK, GSon body serialization for Kotlin SDK ([#601](https://www.github.com/looker-open-source/sdk-codegen/issues/601)) ([11e924f](https://www.github.com/looker-open-source/sdk-codegen/commit/11e924fb81af00c7b20a1af2330f43873c016f83)), closes [#544](https://www.github.com/looker-open-source/sdk-codegen/issues/544) +- lint dependencies ([#617](https://www.github.com/looker-open-source/sdk-codegen/issues/617)) ([7b172b1](https://www.github.com/looker-open-source/sdk-codegen/commit/7b172b1c6927fbf62eb668a503313ced10558dfd)) +- looker component version merge issue ([#609](https://www.github.com/looker-open-source/sdk-codegen/issues/609)) ([6aa9f60](https://www.github.com/looker-open-source/sdk-codegen/commit/6aa9f601019bb3f7105c48e3d360c3e61f57c6e1)) +- updated TypeScript, C#, Go language names in codeGenerators.ts ([#610](https://www.github.com/looker-open-source/sdk-codegen/issues/610)) ([13fb42b](https://www.github.com/looker-open-source/sdk-codegen/commit/13fb42b6bfa651a137e75b04fc6ee00620705ede)) ## [1.2.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.1.0...sdk-codegen-all-v1.2.0) (2021-04-15) - ### Features -* **api-explorer:** add source declaration links to API Explorer ([#578](https://www.github.com/looker-open-source/sdk-codegen/issues/578)) ([ce0e588](https://www.github.com/looker-open-source/sdk-codegen/commit/ce0e588787bdbc2e8ca4aadd44c31dc3ba1a0ef1)) -* **api-explorer:** adds prism editor and implements for sdkdocs ([#581](https://www.github.com/looker-open-source/sdk-codegen/issues/581)) ([aea0424](https://www.github.com/looker-open-source/sdk-codegen/commit/aea042439d2358a61bbf705528d6006d694d5ea5)) -* **api-explorer:** click diff item method to show method detail ([#592](https://www.github.com/looker-open-source/sdk-codegen/issues/592)) ([a5f082a](https://www.github.com/looker-open-source/sdk-codegen/commit/a5f082af262ab5451d6af09083a8a3c2eb31fcfa)) -* **api-explorer:** document request bodies for methods with body parameters ([#593](https://www.github.com/looker-open-source/sdk-codegen/issues/593)) ([740ae5d](https://www.github.com/looker-open-source/sdk-codegen/commit/740ae5d89aa701b29bf225cf61f9a87de0907ef7)) -* **api-explorer:** remember user's SDK language preference ([#567](https://www.github.com/looker-open-source/sdk-codegen/issues/567)) ([faa2511](https://www.github.com/looker-open-source/sdk-codegen/commit/faa25113d87072875ec5fb718da7eb10e0a518e4)) -* **extension-api-explorer:** prettier loading scene while fetching API specs ([#595](https://www.github.com/looker-open-source/sdk-codegen/issues/595)) ([678297c](https://www.github.com/looker-open-source/sdk-codegen/commit/678297c91f1a922bc8e6858541064f3eea5e1a7c)) -* **sdk:** TypeScript SDK tree-shaking support ([#580](https://www.github.com/looker-open-source/sdk-codegen/issues/580)) ([8b7f2f0](https://www.github.com/looker-open-source/sdk-codegen/commit/8b7f2f00ab1a765a04bd460a1ca88e9b7bd66a98)) - +- **api-explorer:** add source declaration links to API Explorer ([#578](https://www.github.com/looker-open-source/sdk-codegen/issues/578)) ([ce0e588](https://www.github.com/looker-open-source/sdk-codegen/commit/ce0e588787bdbc2e8ca4aadd44c31dc3ba1a0ef1)) +- **api-explorer:** adds prism editor and implements for sdkdocs ([#581](https://www.github.com/looker-open-source/sdk-codegen/issues/581)) ([aea0424](https://www.github.com/looker-open-source/sdk-codegen/commit/aea042439d2358a61bbf705528d6006d694d5ea5)) +- **api-explorer:** click diff item method to show method detail ([#592](https://www.github.com/looker-open-source/sdk-codegen/issues/592)) ([a5f082a](https://www.github.com/looker-open-source/sdk-codegen/commit/a5f082af262ab5451d6af09083a8a3c2eb31fcfa)) +- **api-explorer:** document request bodies for methods with body parameters ([#593](https://www.github.com/looker-open-source/sdk-codegen/issues/593)) ([740ae5d](https://www.github.com/looker-open-source/sdk-codegen/commit/740ae5d89aa701b29bf225cf61f9a87de0907ef7)) +- **api-explorer:** remember user's SDK language preference ([#567](https://www.github.com/looker-open-source/sdk-codegen/issues/567)) ([faa2511](https://www.github.com/looker-open-source/sdk-codegen/commit/faa25113d87072875ec5fb718da7eb10e0a518e4)) +- **extension-api-explorer:** prettier loading scene while fetching API specs ([#595](https://www.github.com/looker-open-source/sdk-codegen/issues/595)) ([678297c](https://www.github.com/looker-open-source/sdk-codegen/commit/678297c91f1a922bc8e6858541064f3eea5e1a7c)) +- **sdk:** TypeScript SDK tree-shaking support ([#580](https://www.github.com/looker-open-source/sdk-codegen/issues/580)) ([8b7f2f0](https://www.github.com/looker-open-source/sdk-codegen/commit/8b7f2f00ab1a765a04bd460a1ca88e9b7bd66a98)) ### Bug Fixes -* **sdk-codegen:** add missing bumper method to ICodeGen ([#575](https://www.github.com/looker-open-source/sdk-codegen/issues/575)) ([2a87467](https://www.github.com/looker-open-source/sdk-codegen/commit/2a87467ae9297d062257eaced6ebd09cd6d78856)) -* **python:** add warning about python sdk login_user breaking change in 21.4.0 ([#579](https://www.github.com/looker-open-source/sdk-codegen/issues/579)) ([c74d447](https://www.github.com/looker-open-source/sdk-codegen/commit/c74d447e53d81c84d2182960f00ad2d3191b9cef)) -* **api-explorer:** Added support for Golang syntax highlighting ([#563](https://www.github.com/looker-open-source/sdk-codegen/issues/563)) ([e2ae33e](https://www.github.com/looker-open-source/sdk-codegen/commit/e2ae33eb1d63b0f8d9987bf86bbed64641d4bea3)) -* **api-explorer:** extends runit response height and fixes response models scrolling ([#558](https://www.github.com/looker-open-source/sdk-codegen/issues/558)) ([61627ce](https://www.github.com/looker-open-source/sdk-codegen/commit/61627ce282c1f7e4eaf082ccd66466060d2e7b98)) -* **sdk-codegen:** recursive search of direct type references ([#591](https://www.github.com/looker-open-source/sdk-codegen/issues/591)) ([9af2e37](https://www.github.com/looker-open-source/sdk-codegen/commit/9af2e3755fb4f7f987cc6980ed57e15f504295ba)) -* **api-explorer:** remove search criteria selector and auto expand results ([#571](https://www.github.com/looker-open-source/sdk-codegen/issues/571)) ([e5a5ee7](https://www.github.com/looker-open-source/sdk-codegen/commit/e5a5ee7ddb2a9c6822dccc9493c994a9a826b419)) -* **run-it:** RunIt request overflow ([#565](https://www.github.com/looker-open-source/sdk-codegen/issues/565)) ([38665ac](https://www.github.com/looker-open-source/sdk-codegen/commit/38665ac40b6abc20557db66d0dc536c347c6a862)) -* **sdk:** TypeScript OAuth test ([#597](https://www.github.com/looker-open-source/sdk-codegen/issues/597)) ([d84d1fc](https://www.github.com/looker-open-source/sdk-codegen/commit/d84d1fc976b52f01981592eacb3abc8e1aab9f1f)) +- **sdk-codegen:** add missing bumper method to ICodeGen ([#575](https://www.github.com/looker-open-source/sdk-codegen/issues/575)) ([2a87467](https://www.github.com/looker-open-source/sdk-codegen/commit/2a87467ae9297d062257eaced6ebd09cd6d78856)) +- **python:** add warning about python sdk login_user breaking change in 21.4.0 ([#579](https://www.github.com/looker-open-source/sdk-codegen/issues/579)) ([c74d447](https://www.github.com/looker-open-source/sdk-codegen/commit/c74d447e53d81c84d2182960f00ad2d3191b9cef)) +- **api-explorer:** Added support for Golang syntax highlighting ([#563](https://www.github.com/looker-open-source/sdk-codegen/issues/563)) ([e2ae33e](https://www.github.com/looker-open-source/sdk-codegen/commit/e2ae33eb1d63b0f8d9987bf86bbed64641d4bea3)) +- **api-explorer:** extends runit response height and fixes response models scrolling ([#558](https://www.github.com/looker-open-source/sdk-codegen/issues/558)) ([61627ce](https://www.github.com/looker-open-source/sdk-codegen/commit/61627ce282c1f7e4eaf082ccd66466060d2e7b98)) +- **sdk-codegen:** recursive search of direct type references ([#591](https://www.github.com/looker-open-source/sdk-codegen/issues/591)) ([9af2e37](https://www.github.com/looker-open-source/sdk-codegen/commit/9af2e3755fb4f7f987cc6980ed57e15f504295ba)) +- **api-explorer:** remove search criteria selector and auto expand results ([#571](https://www.github.com/looker-open-source/sdk-codegen/issues/571)) ([e5a5ee7](https://www.github.com/looker-open-source/sdk-codegen/commit/e5a5ee7ddb2a9c6822dccc9493c994a9a826b419)) +- **run-it:** RunIt request overflow ([#565](https://www.github.com/looker-open-source/sdk-codegen/issues/565)) ([38665ac](https://www.github.com/looker-open-source/sdk-codegen/commit/38665ac40b6abc20557db66d0dc536c347c6a862)) +- **sdk:** TypeScript OAuth test ([#597](https://www.github.com/looker-open-source/sdk-codegen/issues/597)) ([d84d1fc](https://www.github.com/looker-open-source/sdk-codegen/commit/d84d1fc976b52f01981592eacb3abc8e1aab9f1f)) ## [1.1.0](https://www.github.com/looker-open-source/sdk-codegen/compare/sdk-codegen-all-v1.0.0...sdk-codegen-all-v1.1.0) (2021-04-02) - ### ⚠ BREAKING CHANGES -* **python:** sdk.login, sdk.logout, and sdk.login_user will now behave exactly as the Looker API spec describes. The previous behavior can still be accessed via sdk.auth.login, sdk.auth.logout, and sdk.auth.login_user +- **python:** sdk.login, sdk.logout, and sdk.login_user will now behave exactly as the Looker API spec describes. The previous behavior can still be accessed via sdk.auth.login, sdk.auth.logout, and sdk.auth.login_user ### Features -* **api-explorer:** adds scrolling to frame elements ([#526](https://www.github.com/looker-open-source/sdk-codegen/issues/526)) ([d7cd769](https://www.github.com/looker-open-source/sdk-codegen/commit/d7cd76917522c37e2902792405a75b8b9358e92f)) -* **sdk-codegen:** Added --versions option to the code generator ([#514](https://www.github.com/looker-open-source/sdk-codegen/issues/514)) ([ee6f3e8](https://www.github.com/looker-open-source/sdk-codegen/commit/ee6f3e8f55e300df1a75c9be89b47f067bc08dee)) -* **sdk-codegen:** added -n | --nostreams to code generator options ([#549](https://www.github.com/looker-open-source/sdk-codegen/issues/549)) ([6ead15a](https://www.github.com/looker-open-source/sdk-codegen/commit/6ead15a26093cc108912c8082b7267fb3a0b76b3)) -* **sdk-codegen:** Looker 21.4 bindings ([#529](https://www.github.com/looker-open-source/sdk-codegen/issues/529)) ([4ecaec9](https://www.github.com/looker-open-source/sdk-codegen/commit/4ecaec93d991b9d82fd3a9ce584ee6ae8810341f)) -* **python:** Add Flask app example ([92e088e](https://www.github.com/looker-open-source/sdk-codegen/commit/92e088e30f944540054b75d58614578b8fd5dd00)) - +- **api-explorer:** adds scrolling to frame elements ([#526](https://www.github.com/looker-open-source/sdk-codegen/issues/526)) ([d7cd769](https://www.github.com/looker-open-source/sdk-codegen/commit/d7cd76917522c37e2902792405a75b8b9358e92f)) +- **sdk-codegen:** Added --versions option to the code generator ([#514](https://www.github.com/looker-open-source/sdk-codegen/issues/514)) ([ee6f3e8](https://www.github.com/looker-open-source/sdk-codegen/commit/ee6f3e8f55e300df1a75c9be89b47f067bc08dee)) +- **sdk-codegen:** added -n | --nostreams to code generator options ([#549](https://www.github.com/looker-open-source/sdk-codegen/issues/549)) ([6ead15a](https://www.github.com/looker-open-source/sdk-codegen/commit/6ead15a26093cc108912c8082b7267fb3a0b76b3)) +- **sdk-codegen:** Looker 21.4 bindings ([#529](https://www.github.com/looker-open-source/sdk-codegen/issues/529)) ([4ecaec9](https://www.github.com/looker-open-source/sdk-codegen/commit/4ecaec93d991b9d82fd3a9ce584ee6ae8810341f)) +- **python:** Add Flask app example ([92e088e](https://www.github.com/looker-open-source/sdk-codegen/commit/92e088e30f944540054b75d58614578b8fd5dd00)) ### Bug Fixes -* **sdk-codegen:** legacy generator was broken ([#540](https://www.github.com/looker-open-source/sdk-codegen/issues/540)) ([212cfce](https://www.github.com/looker-open-source/sdk-codegen/commit/212cfce4745ea663322b2338d91315cefec451a9)) -* **sdk-codegen:** TypeScript SDK generator import logic ([#547](https://www.github.com/looker-open-source/sdk-codegen/issues/547)) ([c5aa033](https://www.github.com/looker-open-source/sdk-codegen/commit/c5aa033c749a2db8a0f98d5b8f49dc287fad06a2)) -* **python:** auth_session uses transport_options ([#550](https://www.github.com/looker-open-source/sdk-codegen/issues/550)) ([94d6047](https://www.github.com/looker-open-source/sdk-codegen/commit/94d6047a0d52912ac082eb91616c1e7c379ab262)) -* **python:** sdk login, login_user, logout methods ([#545](https://www.github.com/looker-open-source/sdk-codegen/issues/545)) ([e55086c](https://www.github.com/looker-open-source/sdk-codegen/commit/e55086c81401092e8dbd93e273ba101e2e3efe95)) +- **sdk-codegen:** legacy generator was broken ([#540](https://www.github.com/looker-open-source/sdk-codegen/issues/540)) ([212cfce](https://www.github.com/looker-open-source/sdk-codegen/commit/212cfce4745ea663322b2338d91315cefec451a9)) +- **sdk-codegen:** TypeScript SDK generator import logic ([#547](https://www.github.com/looker-open-source/sdk-codegen/issues/547)) ([c5aa033](https://www.github.com/looker-open-source/sdk-codegen/commit/c5aa033c749a2db8a0f98d5b8f49dc287fad06a2)) +- **python:** auth_session uses transport_options ([#550](https://www.github.com/looker-open-source/sdk-codegen/issues/550)) ([94d6047](https://www.github.com/looker-open-source/sdk-codegen/commit/94d6047a0d52912ac082eb91616c1e7c379ab262)) +- **python:** sdk login, login_user, logout methods ([#545](https://www.github.com/looker-open-source/sdk-codegen/issues/545)) ([e55086c](https://www.github.com/looker-open-source/sdk-codegen/commit/e55086c81401092e8dbd93e273ba101e2e3efe95)) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index d3465dedf..b2846d2f8 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -8,19 +8,19 @@ In the interest of fostering an open and welcoming environment, we as contributo Examples of behavior that contributes to creating a positive environment include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a1f77d92e..e2cebefd9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,7 +26,7 @@ Because there are many different SDKs and languages included in this repository, - Use a clear and descriptive title for the issue - Note what version and which SDK you're using - Describe how to reproduce the problem - - Bonus points for a working example in [examples](/examples) + - Bonus points for a working example in [examples](/examples) - Explain the behavior your were expecting - Label your issue with "bug" @@ -89,7 +89,8 @@ Edit the developer checklist to reflect only items relevant to your pull request Not sure if an item applies? Leave it in place and ask your reviewer to help determine if it's relevant. Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: -- [ ] Make sure to open an issue as a [bug/issue](https://github.com/looker-open-source/sdk-codegen/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea + +- [ ] Make sure to open an issue as a [bug/issue](https://github.com/looker-open-source/sdk-codegen/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea - [ ] Ensure the tests and linter pass - [ ] Appropriate docs were updated (if necessary) diff --git a/Pipfile b/Pipfile index cde895932..91e9fc9aa 100644 --- a/Pipfile +++ b/Pipfile @@ -4,10 +4,11 @@ url = "https://pypi.org/simple" verify_ssl = true [dev-packages] +tox = "*" +tox-pipenv = "*" [packages] black = "*" -tox = "*" [requires] python_version = "3.8" diff --git a/Pipfile.lock b/Pipfile.lock index 70cb64675..f86adc1e7 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "069f413a99ad9c29916fca5532adede3ce508a19df2ff2e6866f5f65a9036b30" + "sha256": "341b3907c2dc02e6a17c86279186c731ae01bbc1b34458539b24a3b38c46aa70" }, "pipfile-spec": 6, "requires": { @@ -18,39 +18,106 @@ "default": { "black": { "hashes": [ - "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3", - "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb", - "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087", - "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320", - "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6", - "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3", - "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc", - "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f", - "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587", - "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91", - "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a", - "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad", - "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926", - "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9", - "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be", - "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd", - "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96", - "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491", - "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2", - "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a", - "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f", - "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995" + "sha256:2818cf72dfd5d289e48f37ccfa08b460bf469e67fb7c4abb07edc2e9f16fb63f", + "sha256:41622020d7120e01d377f74249e677039d20e6344ff5851de8a10f11f513bf93", + "sha256:4acf672def7eb1725f41f38bf6bf425c8237248bb0804faa3965c036f7672d11", + "sha256:4be5bb28e090456adfc1255e03967fb67ca846a03be7aadf6249096100ee32d0", + "sha256:4f1373a7808a8f135b774039f61d59e4be7eb56b2513d3d2f02a8b9365b8a8a9", + "sha256:56f52cfbd3dabe2798d76dbdd299faa046a901041faf2cf33288bc4e6dae57b5", + "sha256:65b76c275e4c1c5ce6e9870911384bff5ca31ab63d19c76811cb1fb162678213", + "sha256:65c02e4ea2ae09d16314d30912a58ada9a5c4fdfedf9512d23326128ac08ac3d", + "sha256:6905238a754ceb7788a73f02b45637d820b2f5478b20fec82ea865e4f5d4d9f7", + "sha256:79dcf34b33e38ed1b17434693763301d7ccbd1c5860674a8f871bd15139e7837", + "sha256:7bb041dca0d784697af4646d3b62ba4a6b028276ae878e53f6b4f74ddd6db99f", + "sha256:7d5e026f8da0322b5662fa7a8e752b3fa2dac1c1cbc213c3d7ff9bdd0ab12395", + "sha256:9f50ea1132e2189d8dff0115ab75b65590a3e97de1e143795adb4ce317934995", + "sha256:a0c9c4a0771afc6919578cec71ce82a3e31e054904e7197deacbc9382671c41f", + "sha256:aadf7a02d947936ee418777e0247ea114f78aff0d0959461057cae8a04f20597", + "sha256:b5991d523eee14756f3c8d5df5231550ae8993e2286b8014e2fdea7156ed0959", + "sha256:bf21b7b230718a5f08bd32d5e4f1db7fc8788345c8aea1d155fc17852b3410f5", + "sha256:c45f8dff244b3c431b36e3224b6be4a127c6aca780853574c00faf99258041eb", + "sha256:c7ed6668cbbfcd231fa0dc1b137d3e40c04c7f786e626b405c62bcd5db5857e4", + "sha256:d7de8d330763c66663661a1ffd432274a2f92f07feeddd89ffd085b5744f85e7", + "sha256:e19cb1c6365fd6dc38a6eae2dcb691d7d83935c10215aef8e6c38edee3f77abd", + "sha256:e2af80566f43c85f5797365077fb64a393861a3730bd110971ab7a0c94e873e7" ], "index": "pypi", - "version": "==23.7.0" + "markers": "python_version >= '3.8'", + "version": "==24.3.0" }, + "click": { + "hashes": [ + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" + ], + "markers": "python_version >= '3.7'", + "version": "==8.1.7" + }, + "mypy-extensions": { + "hashes": [ + "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", + "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" + ], + "markers": "python_version >= '3.5'", + "version": "==1.0.0" + }, + "packaging": { + "hashes": [ + "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", + "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9" + ], + "markers": "python_version >= '3.7'", + "version": "==24.0" + }, + "pathspec": { + "hashes": [ + "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", + "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712" + ], + "markers": "python_version >= '3.8'", + "version": "==0.12.1" + }, + "platformdirs": { + "hashes": [ + "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068", + "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768" + ], + "markers": "python_version >= '3.8'", + "version": "==4.2.0" + }, + "tomli": { + "hashes": [ + "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", + "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" + ], + "markers": "python_version < '3.11'", + "version": "==2.0.1" + }, + "typing-extensions": { + "hashes": [ + "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475", + "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb" + ], + "markers": "python_version < '3.11'", + "version": "==4.10.0" + } + }, + "develop": { "cachetools": { "hashes": [ - "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590", - "sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b" + "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2", + "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1" ], "markers": "python_version >= '3.7'", - "version": "==5.3.1" + "version": "==5.3.2" + }, + "certifi": { + "hashes": [ + "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1", + "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474" + ], + "markers": "python_version >= '3.6'", + "version": "==2023.11.17" }, "chardet": { "hashes": [ @@ -60,14 +127,6 @@ "markers": "python_version >= '3.7'", "version": "==5.2.0" }, - "click": { - "hashes": [ - "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd", - "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5" - ], - "markers": "python_version >= '3.7'", - "version": "==8.1.6" - }, "colorama": { "hashes": [ "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", @@ -85,76 +144,91 @@ }, "filelock": { "hashes": [ - "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81", - "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec" + "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e", + "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c" ], - "markers": "python_version >= '3.7'", - "version": "==3.12.2" - }, - "mypy-extensions": { - "hashes": [ - "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", - "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" - ], - "markers": "python_version >= '3.5'", - "version": "==1.0.0" + "markers": "python_version >= '3.8'", + "version": "==3.13.1" }, "packaging": { "hashes": [ - "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", - "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" + "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", + "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" ], "markers": "python_version >= '3.7'", - "version": "==23.1" + "version": "==23.2" }, - "pathspec": { + "pipenv": { "hashes": [ - "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20", - "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3" + "sha256:6eb537da5a27671f71dc596ea96a5b341aae9a1695413beeb95364467409bb3d", + "sha256:f587ffff47e8aa76f17803d571f64cf5a24b2bdfb9334435e6528b22ad5e304f" ], - "markers": "python_version >= '3.7'", - "version": "==0.11.2" + "markers": "python_version >= '3.8'", + "version": "==2023.11.15" }, "platformdirs": { "hashes": [ - "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d", - "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d" + "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b", + "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731" ], "markers": "python_version >= '3.7'", - "version": "==3.10.0" + "version": "==4.0.0" }, "pluggy": { "hashes": [ - "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849", - "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3" + "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12", + "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7" ], - "markers": "python_version >= '3.7'", - "version": "==1.2.0" + "markers": "python_version >= '3.8'", + "version": "==1.3.0" }, "pyproject-api": { "hashes": [ - "sha256:14cf09828670c7b08842249c1f28c8ee6581b872e893f81b62d5465bec41502f", - "sha256:ffb5b2d7cad43f5b2688ab490de7c4d3f6f15e0b819cb588c4b771567c9729eb" + "sha256:1817dc018adc0d1ff9ca1ed8c60e1623d5aaca40814b953af14a9cf9a5cae538", + "sha256:4c0116d60476b0786c88692cf4e325a9814965e2469c5998b830bba16b183675" ], - "markers": "python_version >= '3.7'", - "version": "==1.5.3" + "markers": "python_version >= '3.8'", + "version": "==1.6.1" + }, + "setuptools": { + "hashes": [ + "sha256:6875bbd06382d857b1b90cd07cee6a2df701a164f241095706b5192bc56c5c62", + "sha256:f25195d54deb649832182d6455bffba7ac3d8fe71d35185e738d2198a4310044" + ], + "markers": "python_version >= '3.8'", + "version": "==69.0.1" + }, + "tomli": { + "hashes": [ + "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", + "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" + ], + "markers": "python_version < '3.11'", + "version": "==2.0.1" }, "tox": { "hashes": [ - "sha256:79399a3d4641d1fd15eb6bd62c2f35923988038bf0ecf37a688b5e7a767de7d7", - "sha256:89120e1568c763924301cfde61ba7d4b5c4615eeb1086d5370deb03e9cf63c41" + "sha256:5039f68276461fae6a9452a3b2c7295798f00a0e92edcd9a3b78ba1a73577951", + "sha256:599af5e5bb0cad0148ac1558a0b66f8fff219ef88363483b8d92a81e4246f28f" + ], + "index": "pypi", + "version": "==4.11.3" + }, + "tox-pipenv": { + "hashes": [ + "sha256:5fe576294be7a5a14ba4bdea729d9c738e6c7d423ab84273c9b106d5b2508999", + "sha256:f51476491b52c22455fe37f31aa1a0c5aa9798d223f19be58dfadcf79e503362" ], "index": "pypi", - "version": "==4.7.0" + "version": "==1.10.1" }, "virtualenv": { "hashes": [ - "sha256:95a6e9398b4967fbcb5fef2acec5efaf9aa4972049d9ae41f95e0972a683fd02", - "sha256:e5c3b4ce817b0b328af041506a2a299418c98747c4b1e68cb7527e74ced23efc" + "sha256:69050ffb42419c91f6c1284a7b24e0475d793447e35929b488bf6a0aade39353", + "sha256:a18b3fd0314ca59a2e9f4b556819ed07183b3e9a3702ecfe213f593d44f7b3fd" ], "markers": "python_version >= '3.7'", - "version": "==20.24.3" + "version": "==20.24.7" } - }, - "develop": {} + } } diff --git a/README.md b/README.md index f8aab82eb..8eef64dec 100644 --- a/README.md +++ b/README.md @@ -8,24 +8,23 @@ While Looker has developed and tested this code internally, we cannot guarantee that the open-source tools used by the scripts in this repository have not been modified with malicious code. -**Important** - If you are using the Looker TypeScript SDK, please see the -[note at the bottom](#very-important-note-regarding-the-looker-typescript-sdk) -of this file explaining changes to dependencies and packaging. +**Important** - If you are using the Looker TypeScript SDK, please see this +[note on npmjs.com](https://www.npmjs.com/package/@looker/sdk#typescript-sdk-packages) explaining changes to dependencies and packaging. ### Support + The TypeScript and Python SDKs are officially supported by Looker/Google. Issues can be logged here in the GitHub Issues page, but can also be logged with Looker Support. The other language SDKs are community supported. Issues for these should be logged only in the GitHub Issues page. Details of Looker API and SDK support can be found at [https://cloud.google.com/looker/docs/api-sdk-support-policy](https://cloud.google.com/looker/docs/api-sdk-support-policy). - ## Overview This repository contains: - The [SDK code generator](packages/sdk-codegen) that generates the source code for Looker SDKs -- Source code for the [Looker SDKs](#looker-sdks) produced by the code generator +- Source code for the Looker SDKs produced by the code generator - Looker SDK source code [examples](examples) - the [API Explorer extension](packages/extension-api-explorer) that can be installed into a Looker instance - the stand-alone [API Explorer](packages/api-explorer) @@ -44,8 +43,7 @@ The Looker SDK has several parts: specification](https://github.com/OAI/OpenAPI-Specification) (e.g., the Swagger 2.x representation found at `https://:19999/api/4.0/swagger.json`). The 4.0 API is - our current & stable API. As of June 2022, [3.x is - deprecated](https://developers.looker.com/api/advanced-usage/version-3x-deprecation). + our current & stable API. As of October 2023, [3.x has been removed](https://cloud.google.com/looker/docs/api-3x-deprecation). - The **Looker API Explorer**, an interactive reference, accessible either stand-alone at @@ -56,68 +54,17 @@ The Looker SDK has several parts: - **Language SDKs**, "smarter" client language classes and methods to improve the experience of calling the Looker API in various popular coding languages. Some SDKs are - [Looker-supported](https://docs.looker.com/reference/api-and-integration/api-sdk-support-policy#support_levels) + [Looker-supported](https://cloud.google.com/looker/docs/api-sdk-support-policy) whereas others are community-supported. -## SDK multi-API-version support - -The 4.0 version of the API is the current and stable version of the API, in -addition to the 3.x API which is now -[deprecated](https://developers.looker.com/api/advanced-usage/version-3x-deprecation). - -Some SDKs support and expose both API versions in the same SDK package, -including all [Looker-supported -SDKs](https://docs.looker.com/reference/api-and-integration/api-sdk-support-policy#language_sdks). - -For SDKs that support multiple API versions, there will be `methods.*` and -`models.*` collections generated for each API version. Each API version is -exposed under a distinct class name from which to instantiate an initial SDK -object. - -API-version-specific files generally use shared Run-Time Library (RTL) code in -the SDK package to minimize code duplication. - -Regardless of which API version you use, API credentials are unchanged, and may -continue to be referred to as "API3" credentials. +## SDK Versions +The 4.0 version of the API is the current and stable version of the API. The 3.x API has now been +[removed](https://cloud.google.com/looker/docs/api-3x-deprecation). -### Looker SDKs +For self-hosted instances on older versions of Looker, please use the corresponding release of `sdk-codegen`` to use API 3.x. -Please review the following table for a breakdown of the options to initialize -the desired SDK object. - -| SDK | API 3.1 [(deprecated)](https://developers.looker.com/api/advanced-usage/version-3x-deprecation) | API 4.0 | Notes | -| -------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [Python](python) | `looker_sdk.init31()` | `looker_sdk.init40()` | | -| [TypeScript](packages/sdk) | `Looker31SDK()`, `LookerNodeSDK.init31()`, or `LookerBrowserSDK.init31()` | `Looker40SDK()`, `LookerNodeSDK.init40()` or `LookerBrowserSDK.init40()` | **Important** - See information on the [typescript SDK dependencies](#very-important-note-regarding-the-looker-typescript-sdk) at the bottom of this file. | -| [Kotlin](kotlin) | Not supported | `LookerSDK()` | Community-supported SDK. Uses API 4.0 exclusively. The initializer uses an unversioned name. | -| [Swift](swift/looker) | Not supported | `Looker40SDK()` | Community-supported SDK. Uses API 4.0 exclusively. | -| [Look#](csharp) | Not supported | `Looker40SDK()` | Community-supported SDK. Uses API 4.0 exclusively. | -| [GoLook](go) | Not supported | `v4.NewLookerSDK()` | Community-supported SDK. Uses API 4.0 exclusively. | - -By supporting both API versions in the same SDK package, we hope the migration -path to the latest API is simplified. Both SDK versions can be used at the same -time, in the same source file, which should allow for iterative work to move to -the new API version. - -For example: - -```typescript -import { - Looker40SDK, - Looker31SDK, - NodeSession, - NodeSettingsIniFile, -} from '@looker/sdk' - -const settings = new NodeSettingsIniFile() -const session = new NodeSession(settings) -const sdk = new Looker40SDK(session) -const sdk31 = new Looker31SDK(session) - -const me40 = await sdk.ok(sdk.me()) -const me31 = await sdk.ok(sdk31.me()) // or sdk31.ok(sdk31.me()) -``` +Note: API credentials have not been changed between API 3.x and API 4 and may continue to be referred to as "API3" credentials in the Looker UI, docs, or elsewhere. ## Automatic URL encoding for input values @@ -154,7 +101,7 @@ There are three steps for generating an SDK with this project: - **Note**: previous versions of the `looker.ini` file had an `api_version` entry. This is no longer required. The code generator project will read an `api_versions` value if that is found, but the SDKs ignore this value. If - `api_versions` is not found in the `ini` file, it defaults to "3.1,4.0" for + `api_versions` is not found in the `ini` file, it defaults to "4.0" for the generator to produce the definitions for the supported API versions. - install the code generator project dependencies by running: @@ -170,7 +117,7 @@ The resources required to run the code generator are in [package.json](package.j - run the SDK generator with `yarn gen [language]` -- **Note**: [Generating Client SDKs for the Looker API](https://discourse.looker.com/t/generating-client-sdks-for-the-looker-api/3185) describes the legacy, manual steps for generating an API language binding. This project replaces these manual steps, and uses an improved code generator. +- **Note**: [Generating Client SDKs for the Looker API](https://www.googlecloudcommunity.com/gc/Developing-Applications/Generating-Client-SDKs-for-the-Looker-API/td-p/574683) describes the legacy, manual steps for generating an API language binding. This project replaces these manual steps, and uses an improved code generator. ## Configuring `looker.ini` or `.env` @@ -181,10 +128,10 @@ file needs to be in the root folder of the code generator. To create `looker.ini`, copy [`looker-sample.ini`](looker-sample.ini) to `looker.ini` and fill in the required values. The values for `client_id` and `client_secret` can be retrieved by navigating to -`https:///admin/users`, editing your user, editing API3 +`https:///admin/users`, editing your user, editing API keys, and clicking the "reveal" button to view your `client_id` and -`client_secret`. If there are currently no API3 credentials, they can be -generated by clicking “New API3 Key.” +`client_secret`. If there are currently no API credentials, they can be +generated by clicking “New API Key.” For your own source code repositories, be sure to configure your version control system to ignore the SDK configuration `.ini` file so it doesn't @@ -307,7 +254,7 @@ and are also welcome to contribute additional examples. ## API Troubleshooting -See the official documentation for [API Troubleshooting](https://docs.looker.com/reference/api-and-integration/api-troubleshooting) suggestions. +See the official documentation for [API Troubleshooting](https://cloud.google.com/looker/docs/api-troubleshooting) suggestions. ## Notes @@ -396,13 +343,13 @@ The following table describes the environment variables. By default, the SDK "namespace" is "LookerSDK" which is converted to UPPERCASE when used for naming environment variables. -| Variable name | Description | -| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| LOOKERSDK_BASE_URL | A URL like `https://my.looker.com:19999`. No default value. | -| LOOKERSDK_VERIFY_SSL | `true`, `t`, `yes`, `y`, or `1` (case insensitive) to enable SSL verification. Any other value is treated as `false`. Defaults to `true` if not set. | -| LOOKERSDK_TIMEOUT | Request timeout in seconds. Defaults to `120` for most platforms. | -| LOOKERSDK_CLIENT_ID | API3 credentials `client_id`. This and `client_secret` must be provided in some fashion to the Node SDK, or no calls to the API will be authorized. No default value. | -| LOOKERSDK_CLIENT_SECRET | API3 credentials `client_secret`. No default value. | +| Variable name | Description | +| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| LOOKERSDK_BASE_URL | A URL like `https://my.looker.com:19999`. No default value. | +| LOOKERSDK_VERIFY_SSL | `true`, `t`, `yes`, `y`, or `1` (case insensitive) to enable SSL verification. Any other value is treated as `false`. Defaults to `true` if not set. | +| LOOKERSDK_TIMEOUT | Request timeout in seconds. Defaults to `120` for most platforms. | +| LOOKERSDK_CLIENT_ID | API credentials `client_id`. This and `client_secret` must be provided in some fashion to the Node SDK, or no calls to the API will be authorized. No default value. | +| LOOKERSDK_CLIENT_SECRET | API credentials `client_secret`. No default value. | ### Configuration variable precedence diff --git a/apix-files/README.md b/apix-files/README.md index 21fc3ad04..381137d16 100644 --- a/apix-files/README.md +++ b/apix-files/README.md @@ -16,6 +16,7 @@ This will start the API Explorer file server at `http://localhost:30000` ## Mining the source code `yarn mine` runs two specific miners: + - `yarn mine:examples` - `yarn mine:declarations` @@ -28,6 +29,7 @@ The source code in this repository is mined to find examples of using the Looker ```sh yarn mine:examples ``` + produces [examplesIndex.json](/examplesIndex.json), which is checked in. ### Declaration mining diff --git a/babel.common.js b/babel.common.js index 5d2fca00f..b3264979c 100644 --- a/babel.common.js +++ b/babel.common.js @@ -27,7 +27,7 @@ // It simply builds a cross-platform (i.e. windows-friendly) negative // lookahead RegExp that will exclude all node modules except those supplied // as its arguments. -const excludeNodeModuleExcept = require('babel-loader-exclude-node-modules-except') +const excludeNodeModuleExcept = require('babel-loader-exclude-node-modules-except'); // Our own modules are built as esm to allow for tree shaking. const ownModules = [ @@ -37,9 +37,9 @@ const ownModules = [ '@looker/design-tokens', 'd3-color', 'uuid', -] +]; -const excludeNodeModulesExceptRegExp = excludeNodeModuleExcept([...ownModules]) +const excludeNodeModulesExceptRegExp = excludeNodeModuleExcept([...ownModules]); // Attach as a property to the exported function object so that we can // conveniently import it in webpack.config.js and jest.config.js without @@ -49,4 +49,4 @@ module.exports.excludeNodeModulesExcept = { regExp: excludeNodeModulesExceptRegExp, // string representation for jest.config.js string: excludeNodeModulesExceptRegExp.toString().slice(1, -2), -} +}; diff --git a/babel.config.js b/babel.config.js index 715faa5d7..9872cce52 100644 --- a/babel.config.js +++ b/babel.config.js @@ -25,8 +25,8 @@ */ module.exports = (api) => { - const isTest = api.env('test') - api.cache(true) + const isTest = api.env('test'); + api.cache(true); const testIgnore = [ '**/*.test.js', @@ -37,9 +37,9 @@ module.exports = (api) => { '**/*.spec.jsx', '**/*.spec.ts', '**/*.spec.tsx', - ] + ]; - const ignore = isTest ? [] : ['node_modules', ...testIgnore] + const ignore = isTest ? [] : ['node_modules', ...testIgnore]; return { sourceType: 'unambiguous', @@ -72,7 +72,8 @@ module.exports = (api) => { esmodules: true, }, useBuiltIns: false, - // modules: process.env.BABEL_ENV === 'build_cjs' ? 'auto' : false, + modules: + isTest || process.env.BABEL_ENV === 'build_cjs' ? 'auto' : false, }, ], [ @@ -86,5 +87,5 @@ module.exports = (api) => { ], '@babel/preset-typescript', ], - } -} + }; +}; diff --git a/bin/args_parser.sh b/bin/args_parser.sh new file mode 100755 index 000000000..0fe0195c4 --- /dev/null +++ b/bin/args_parser.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash + +# Common args parser. Add "source bin/lint_args_parser.sh" then make your script +# do whatever it needs to do based on the flags set below +OTHER_ARGS=() +while [[ "${#}" -gt 0 ]]; do + case "${1}" in + --quick|-q) + ARG_QUICK="true" + shift + ;; + + --fix|-f) + ARG_FIX="true" + shift + ;; + + --no-prettify|-np) + NO_PRETTIFY="true" + shift + ;; + + --junit-reporter|-j) + JUNIT_REPORTER="true" + shift + ;; + + --staged|-st) + ARG_STAGED="true" + shift + ;; + + --help|-h) + cat < = { [ContentType.demo]: @@ -39,4 +39,4 @@ export const contentType: Record = { 'Code that can be consumed as a dependency of other code, usually via a package/module manager', [ContentType.installableCode]: 'Installable code is template or sample code that can also be directly deployed and then modified, often through existing automation such as the Looker Marketplace, without the need to first adapt it.', -} +}; diff --git a/bin/looker-resources-index/src/resource-data/resources.ts b/bin/looker-resources-index/src/resource-data/resources.ts index 9e4230002..17afc4ee0 100644 --- a/bin/looker-resources-index/src/resource-data/resources.ts +++ b/bin/looker-resources-index/src/resource-data/resources.ts @@ -23,8 +23,8 @@ SOFTWARE. */ -import type { Resource } from '../types' -import { ContentType, Language, Persona, PlatformFeature } from '../types' +import type { Resource } from '../types'; +import { ContentType, Language, Persona, PlatformFeature } from '../types'; // Common, unambiguous values for conciseness const { @@ -37,8 +37,8 @@ const { reference, sourceCode, video, -} = ContentType -const { javascript, typescript, python } = Language +} = ContentType; +const { javascript, typescript, python } = Language; const { admin, developer, @@ -47,7 +47,7 @@ const { modeler, analyst, investigator, -} = Persona +} = Persona; const { actions, api, @@ -56,7 +56,7 @@ const { extensions, git, customVisualization, -} = PlatformFeature +} = PlatformFeature; export const resources: Resource[] = [ { @@ -635,4 +635,4 @@ export const resources: Resource[] = [ platformFeatures: [embed], personas: [developer], }, -] +]; diff --git a/bin/looker-resources-index/src/scripts/analyze/cli.ts b/bin/looker-resources-index/src/scripts/analyze/cli.ts index 7070b311c..bca9d5403 100644 --- a/bin/looker-resources-index/src/scripts/analyze/cli.ts +++ b/bin/looker-resources-index/src/scripts/analyze/cli.ts @@ -26,34 +26,34 @@ /* eslint no-console: "off" */ -import { resources } from '../../resource-data/resources' +import { resources } from '../../resource-data/resources'; -import * as analyze from './index' +import * as analyze from './index'; -report() +report(); function report() { - const results: Record = {} + const results: Record = {}; - results.missingLanguages = analyze.missingLanguages(resources) + results.missingLanguages = analyze.missingLanguages(resources); if (results.missingLanguages.actionItems.length > 0) { - console.log('\n### Missing Languages ###\n') - console.log(results.missingLanguages.actionItems.join('\n')) + console.log('\n### Missing Languages ###\n'); + console.log(results.missingLanguages.actionItems.join('\n')); } - results.missingPersonas = analyze.missingPersonas(resources) + results.missingPersonas = analyze.missingPersonas(resources); if (results.missingPersonas.actionItems.length > 0) { - console.log('\n### Missing Personas ###\n') - console.log(results.missingPersonas.actionItems.join('\n')) + console.log('\n### Missing Personas ###\n'); + console.log(results.missingPersonas.actionItems.join('\n')); } - console.log('\n### Platform Feature x Content Type Coverage Matrix ###\n') + console.log('\n### Platform Feature x Content Type Coverage Matrix ###\n'); results.platformFeatureXContentType = - analyze.platformFeatureXContentType(resources) - console.table(results.platformFeatureXContentType.table) + analyze.platformFeatureXContentType(resources); + console.table(results.platformFeatureXContentType.table); - console.log('\n### Summary ###\n') + console.log('\n### Summary ###\n'); Object.values(results) .filter((r) => r.summary) - .forEach((r) => console.log(r.summary)) + .forEach((r) => console.log(r.summary)); } diff --git a/bin/looker-resources-index/src/scripts/analyze/index.ts b/bin/looker-resources-index/src/scripts/analyze/index.ts index ec2650744..c85c594a5 100644 --- a/bin/looker-resources-index/src/scripts/analyze/index.ts +++ b/bin/looker-resources-index/src/scripts/analyze/index.ts @@ -23,6 +23,6 @@ SOFTWARE. */ -export * from './missing-languages' -export * from './missing-personas' -export * from './platform-feature-x-content-type' +export * from './missing-languages'; +export * from './missing-personas'; +export * from './platform-feature-x-content-type'; diff --git a/bin/looker-resources-index/src/scripts/analyze/missing-languages.ts b/bin/looker-resources-index/src/scripts/analyze/missing-languages.ts index 02a164a5d..49847f4ec 100644 --- a/bin/looker-resources-index/src/scripts/analyze/missing-languages.ts +++ b/bin/looker-resources-index/src/scripts/analyze/missing-languages.ts @@ -23,8 +23,8 @@ SOFTWARE. */ -import type { Resource } from '../../types' -import { ContentType } from '../../types' +import type { Resource } from '../../types'; +import { ContentType } from '../../types'; export function missingLanguages(resources: Resource[]) { const isTargetContentType = (c: ContentType) => @@ -33,15 +33,15 @@ export function missingLanguages(resources: Resource[]) { ContentType.sourceCode, ContentType.template, ContentType.library, - ].includes(c) + ].includes(c); - const resourcesRequiringLanguages = resources.filter((r) => - r.contentTypes?.some(isTargetContentType) - ) + const resourcesRequiringLanguages = resources.filter( + (r) => r.contentTypes?.some(isTargetContentType) + ); const resourcesMissingLanguages = resourcesRequiringLanguages.filter( (r) => !r.languages || r.languages.length === 0 - ) + ); return { summary: @@ -54,5 +54,5 @@ export function missingLanguages(resources: Resource[]) { isTargetContentType )}'\tResource ID: ${r.id}` ), - } + }; } diff --git a/bin/looker-resources-index/src/scripts/analyze/missing-personas.ts b/bin/looker-resources-index/src/scripts/analyze/missing-personas.ts index 1ed66f71f..d578f3ea6 100644 --- a/bin/looker-resources-index/src/scripts/analyze/missing-personas.ts +++ b/bin/looker-resources-index/src/scripts/analyze/missing-personas.ts @@ -23,12 +23,12 @@ SOFTWARE. */ -import type { Resource } from '../../types' +import type { Resource } from '../../types'; export function missingPersonas(resources: Resource[]) { const resourcesMissingPersonas = resources.filter( (r) => !r.personas || r.personas.length === 0 - ) + ); return { summary: @@ -38,5 +38,5 @@ export function missingPersonas(resources: Resource[]) { actionItems: resourcesMissingPersonas.map( (r) => `No personas defined. \tResource ID: ${r.id}` ), - } + }; } diff --git a/bin/looker-resources-index/src/scripts/analyze/platform-feature-x-content-type.ts b/bin/looker-resources-index/src/scripts/analyze/platform-feature-x-content-type.ts index c8149d893..c1c72fa46 100644 --- a/bin/looker-resources-index/src/scripts/analyze/platform-feature-x-content-type.ts +++ b/bin/looker-resources-index/src/scripts/analyze/platform-feature-x-content-type.ts @@ -23,25 +23,25 @@ SOFTWARE. */ -import type { Resource } from '../../types' -import { PlatformFeature, ContentType } from '../../types' +import type { Resource } from '../../types'; +import { PlatformFeature, ContentType } from '../../types'; export function platformFeatureXContentType(resources: Resource[]) { - const rows = Object.keys(PlatformFeature) as PlatformFeature[] - const rowField = 'platformFeatures' + const rows = Object.keys(PlatformFeature) as PlatformFeature[]; + const rowField = 'platformFeatures'; const cols = [ ContentType.demo, ContentType.sandbox, ContentType.sampleCode, ContentType.reference, - ] - const colField = 'contentTypes' + ]; + const colField = 'contentTypes'; const table = Object.fromEntries( rows.map((row) => { - const resourcesForRow = resources.filter((rsc) => - rsc[rowField]?.includes(row) - ) + const resourcesForRow = resources.filter( + (rsc) => rsc[rowField]?.includes(row) + ); return [ row, Object.fromEntries( @@ -51,11 +51,11 @@ export function platformFeatureXContentType(resources: Resource[]) { .length || null, ]) ), - ] + ]; }) - ) + ); return { table, - } + }; } diff --git a/bin/looker-resources-index/src/scripts/build.ts b/bin/looker-resources-index/src/scripts/build.ts index c706b1ce4..4e00ed96d 100644 --- a/bin/looker-resources-index/src/scripts/build.ts +++ b/bin/looker-resources-index/src/scripts/build.ts @@ -26,51 +26,54 @@ /* eslint no-console: "off" */ -import * as fs from 'fs' -import * as path from 'path' -import * as crypto from 'crypto' -import { resources } from '../resource-data/resources' -import type { Resource } from '../types' +import * as fs from 'fs'; +import * as path from 'path'; +import * as crypto from 'crypto'; +import { resources } from '../resource-data/resources'; +import type { Resource } from '../types'; -main() +main(); async function main() { // File paths are relative to built JS folder (/tmp/compiled-typesript) - const resourcesPath = '../../../../../docs/resources/resources.json' - const resourceLockPath = '../../../../../docs/resources/resource-lock.json' + const resourcesPath = '../../../../../docs/resources/resources.json'; + const resourceLockPath = '../../../../../docs/resources/resource-lock.json'; - const priorResourcesBundle = tryJsonParse(await readFile(resourcesPath), {}) - const priorResources = (priorResourcesBundle.resources || []) as Resource[] + const priorResourcesBundle = tryJsonParse(await readFile(resourcesPath), {}); + const priorResources = (priorResourcesBundle.resources || []) as Resource[]; const priorResourceLock = tryJsonParse( await readFile(resourceLockPath), undefined - ) + ); if (priorResourceLock) { const modifiedResources = priorResources.filter( (r) => priorResourceLock[r.id] !== resourceDigest(r) - ) + ); if (modifiedResources.length) { console.error( "The output resources.json file seems to have been manually edited. The following id's have unexpected values:" - ) - modifiedResources.forEach((r) => console.error(' > ' + r.id)) + ); + modifiedResources.forEach((r) => console.error(' > ' + r.id)); console.error( 'After ensuring that all manually modified data is reflected in the resource source data, delete the resource-lock.json file and re-build' - ) - process.exit(1) + ); + process.exit(1); } } const resourcesLock = Object.fromEntries( resources.map((r) => [r.id, resourceDigest(r)]) - ) - - console.log('Writing resources.json') - await writeFile(resourcesPath, format(resources)) - console.log('Writing lockfile') - await writeFile(resourceLockPath, JSON.stringify(resourcesLock, undefined, 2)) - console.log('Done!') + ); + + console.log('Writing resources.json'); + await writeFile(resourcesPath, format(resources)); + console.log('Writing lockfile'); + await writeFile( + resourceLockPath, + JSON.stringify(resourcesLock, undefined, 2) + ); + console.log('Done!'); } function writeFile(fp: string, contents: string) { @@ -80,10 +83,10 @@ function writeFile(fp: string, contents: string) { contents, { encoding: 'utf-8' }, (err) => { - err ? reject(err) : resolve() + err ? reject(err) : resolve(); } - ) - }) + ); + }); } function readFile(fp: string) { return new Promise((resolve, reject) => { @@ -91,32 +94,32 @@ function readFile(fp: string) { path.resolve(__dirname, fp), { encoding: 'utf-8' }, (err, str) => { - err ? reject(err) : resolve(str) + err ? reject(err) : resolve(str); } - ) - }) + ); + }); } function format(resources: Resource[]): string { - const sortedResources = resources.sort((a, b) => a.id.localeCompare(b.id)) // Sort by id + const sortedResources = resources.sort((a, b) => a.id.localeCompare(b.id)); // Sort by id return `{ "resources":[ ${sortedResources.map(resourceToJson).join(',\n\t\t')} ] -}` +}`; } function resourceToJson(r: Resource) { - const { id, ...rest } = r - return JSON.stringify({ id, ...rest }) + const { id, ...rest } = r; + return JSON.stringify({ id, ...rest }); } function resourceDigest(r: Resource) { - return crypto.createHash('sha1').update(resourceToJson(r)).digest('hex') + return crypto.createHash('sha1').update(resourceToJson(r)).digest('hex'); } function tryJsonParse(str: string, dft: any) { try { - return JSON.parse(str) + return JSON.parse(str); } catch (e) { - return dft + return dft; } } diff --git a/bin/looker-resources-index/src/types.ts b/bin/looker-resources-index/src/types.ts index 8dd829141..919b8aabb 100644 --- a/bin/looker-resources-index/src/types.ts +++ b/bin/looker-resources-index/src/types.ts @@ -25,15 +25,15 @@ */ export interface Resource { - id: ResourceId - title: LocaleString - description: LocaleString - url: LocaleString + id: ResourceId; + title: LocaleString; + description: LocaleString; + url: LocaleString; // Optional - isGoogleResource?: boolean - isHackathonSpecific?: boolean - thumbnailImageUrl?: LocaleString + isGoogleResource?: boolean; + isHackathonSpecific?: boolean; + thumbnailImageUrl?: LocaleString; // publishDate // lastUpdate // authorNames @@ -41,13 +41,13 @@ export interface Resource { // some form of rating or quality metric? // Optional "tags" - contentTypes?: ContentType[] - platformFeatures?: PlatformFeature[] - languages?: Language[] - licenses?: License[] - relatedResources?: ResourceId[] - personas?: Persona[] - tags?: string[] + contentTypes?: ContentType[]; + platformFeatures?: PlatformFeature[]; + languages?: Language[]; + licenses?: License[]; + relatedResources?: ResourceId[]; + personas?: Persona[]; + tags?: string[]; } export enum ContentType { @@ -116,5 +116,5 @@ export enum Persona { other = 'other', } -export type ResourceId = string -export type LocaleString = string | Record +export type ResourceId = string; +export type LocaleString = string | Record; diff --git a/bin/looker-resources-index/tsconfig.json b/bin/looker-resources-index/tsconfig.json index 5706fb933..b71573c2f 100644 --- a/bin/looker-resources-index/tsconfig.json +++ b/bin/looker-resources-index/tsconfig.json @@ -1,21 +1,17 @@ { - "compilerOptions": { - "module": "commonjs", - "target": "es6", - "noImplicitAny": true, - "moduleResolution": "node", - "sourceMap": true, - "outDir": "tmp/compiled-typescript", - "baseUrl": ".", - "types": ["node"], - "lib":["es2019"], - "paths": { - "*": [ - "node_modules/*" - ] - } - }, - "include": [ - "src/**/*" - ] - } + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "noImplicitAny": true, + "moduleResolution": "node", + "sourceMap": true, + "outDir": "tmp/compiled-typescript", + "baseUrl": ".", + "types": ["node"], + "lib": ["es2019"], + "paths": { + "*": ["node_modules/*"] + } + }, + "include": ["src/**/*"] +} diff --git a/bin/prettify b/bin/prettify new file mode 100755 index 000000000..adecc4e4c --- /dev/null +++ b/bin/prettify @@ -0,0 +1,29 @@ +#!/bin/bash + +source "bin/args_parser.sh" +args=() + +if [[ "${ARG_FIX}" == "false" ]]; then + args+=("--check") +fi + +if [[ "${ARG_FIX}" == "true" ]] && [[ "${ARG_QUICK}" == "false" ]]; then + args+=("--write") +fi + +cd "$(dirname "${0}")/.." || exit 1 + +if [[ "${ARG_QUICK}" == "true" ]]; then + echo "Quick processing changed files supported by prettier" + # This flag is only supported by pretty-quick + if [[ "${ARG_STAGED}" == "true" ]]; then + args+=("--staged") + fi + + echo "Sorry, quick isn't supported yet because pretty-quick is bloated and borked" + # yarn pretty-quick "${args[@]}" +else + echo "👀 Running on your local dev machine? Consider using -q|--quick to check only changed files." + yarn prettier . "${args[@]}" --ignore ../.prettierignore --single-quote --semi --trailing-comma es5 + # When we switch to NPM, use npx --workspaces prettier . "${args[@]}" --single-quote --semi --trailing-comma es5 +fi diff --git a/bin/sdk_gen b/bin/sdk_gen index 5fdbbac57..21e6c294a 100755 --- a/bin/sdk_gen +++ b/bin/sdk_gen @@ -8,67 +8,70 @@ * create pull request https://docs.github.com/en/rest/pulls/pulls#create-a-pull-request * */ -const fs = require('fs') -const path = require('path') -const proc = require('child_process') -const looker = require('@looker/sdk-node') -const utf8 = { encoding: 'utf-8' } +const fs = require('fs'); +const path = require('path'); +const proc = require('child_process'); +const looker = require('@looker/sdk-node'); +const utf8 = { encoding: 'utf-8' }; -const root = path.join(__dirname, '/../') -let sdk = looker.LookerNodeSDK.init40() +const root = path.join(__dirname, '/../'); +let sdk = looker.LookerNodeSDK.init40(); async function sleep(ms) { - return new Promise(resolve => setTimeout(resolve, ms)) + return new Promise((resolve) => setTimeout(resolve, ms)); } /** wait for the Looker CI image to be responsive */ const waitForLooker = async () => { - const max_tries = 90 - const delay = 5 - let alive = false - let tries = 1 + const max_tries = 90; + const delay = 5; + let alive = false; + let tries = 1; while (tries <= max_tries && !alive) { try { - sdk = looker.LookerNodeSDK.init40() // re-init the SDK to make sure it's not a lingering instance - const user = await sdk.ok(sdk.me()) // make any API call - alive = sdk.authSession.isAuthenticated() - console.info(`Hi, ${user.first_name} ${user.last_name}!`) - await sdk.authSession.logout() + sdk = looker.LookerNodeSDK.init40(); // re-init the SDK to make sure it's not a lingering instance + const user = await sdk.ok(sdk.me()); // make any API call + alive = sdk.authSession.isAuthenticated(); + console.info(`Hi, ${user.first_name} ${user.last_name}!`); + await sdk.authSession.logout(); } catch { - await sleep(delay * 1000) - tries++ - console.info(`Waiting ${delay} seconds before attempt ${tries} of ${max_tries} (Total: ${delay * (tries - 1)})`) + await sleep(delay * 1000); + tries++; + console.info( + `Waiting ${delay} seconds before attempt ${tries} of ${max_tries} (Total: ${ + delay * (tries - 1) + })` + ); } } - return alive -} + return alive; +}; /** * Get the CI version for the release * @param release to munge * @returns release version with _ instead of . */ -const ciVersion = (release) => release.replace('.', '_') +const ciVersion = (release) => release.replace('.', '_'); const ok = (result) => { if (typeof result === 'string') { - return true + return true; } - console.error(result) - return false -} + console.error(result); + return false; +}; const run = (command) => { - let result + let result; try { - console.info(`Running ${command} ...`) - result = proc.execSync(command).toString() + console.info(`Running ${command} ...`); + result = proc.execSync(command).toString(); + } catch (error) { + result = error; } - catch (error) { - result = error - } - return result -} + return result; +}; /** * Run multiple commands one after another, returning on first failure @@ -81,29 +84,29 @@ const run = (command) => { * @param release CalVer of release, like 22.14 */ const batch = (commands, release) => { - let result = '' + let result = ''; for (const command of commands) { if (command instanceof Function) { - console.info('running a function ...') - result = command(release) + console.info('running a function ...'); + result = command(release); } else if (typeof command === 'string') { - result = run(command) + result = run(command); } if (!ok(result)) { - console.error(`${command} failed.`) - return result + console.error(`${command} failed.`); + return result; } } - return result -} + return result; +}; /** get the trimmed output of the command as a UTF-8 string */ const execRead = (command) => { - return proc.execSync(command, utf8).trim() -} + return proc.execSync(command, utf8).trim(); +}; /** get this git repository's current branch name */ -const branchActive = () => execRead('git rev-parse --abbrev-ref HEAD') +const branchActive = () => execRead('git rev-parse --abbrev-ref HEAD'); /** * Returns true if the branch exists locally or remote @@ -111,43 +114,43 @@ const branchActive = () => execRead('git rev-parse --abbrev-ref HEAD') * @returns true if it exists */ const branchExists = (branch) => { - const checkRemote = `git ls-remote --heads origin "${branch}" | wc -l ` - let result = execRead(checkRemote) + const checkRemote = `git ls-remote --heads origin "${branch}" | wc -l `; + let result = execRead(checkRemote); if (result !== '1') { - const checkLocal = `git show-ref --verify refs/heads/"${branch}" | wc -l` - result = execRead(checkLocal) + const checkLocal = `git show-ref --verify refs/heads/"${branch}" | wc -l`; + result = execRead(checkLocal); } - return result === '1' -} + return result === '1'; +}; /** * Get the standardized name for this branch * @param release either xx.xx or xx_xx * @returns sdk_ */ -const branchName = (release) => `sdk_${ciVersion(release)}` +const branchName = (release) => `sdk_${ciVersion(release)}`; /** * If currently on main, create or switch to the sdk_release branch * @param release version branch to create */ const branchOffMain = (release) => { - let result = '' - let current = branchActive() + let result = ''; + let current = branchActive(); if (current === 'main') { - const branch = branchName(release) + const branch = branchName(release); if (branchExists(branch)) { - console.log(`Switching to branch ${branch} ...`) - result = run(`git checkout ${branch}`) + console.log(`Switching to branch ${branch} ...`); + result = run(`git checkout ${branch}`); } else { - console.log(`Creating branch ${branch} ...`) - result = run(`git checkout -b ${branch} origin/main`) + console.log(`Creating branch ${branch} ...`); + result = run(`git checkout -b ${branch} origin/main`); } } else { - console.log(`Using branch ${current} to generate SDKs for ${release}`) + console.log(`Using branch ${current} to generate SDKs for ${release}`); } - return result -} + return result; +}; /** * Is the running version the desired release? @@ -156,13 +159,13 @@ const branchOffMain = (release) => { */ const checkVersion = async (release) => { try { - const payload = await sdk.ok(sdk.versions()) - return payload.looker_release_version.startsWith(release) + const payload = await sdk.ok(sdk.versions()); + return payload.looker_release_version.startsWith(release); } catch { // don't care what the error was, it failed - return false + return false; } -} +}; /** * Pull the specified Looker CI image and wait for it to be ready @@ -173,45 +176,50 @@ const pullci = async (release) => { cwd: root, maxBuffer: 1024 * 1024, stdio: 'inherit', - } - if (await checkVersion(release)) return true - const script = path.resolve(root, 'bin/pullci') + }; + if (await checkVersion(release)) return true; + const script = path.resolve(root, 'bin/pullci'); // Throws exception on error, which we want - proc.execFileSync(script, [ciVersion(release)], opts) - return await waitForLooker() -} + proc.execFileSync(script, [ciVersion(release)], opts); + return await waitForLooker(); +}; /** Regen against the specified release and complete flows */ const regen = async (release) => { - console.info(`Generating SDKs for Looker ${release} ...`) + console.info(`Generating SDKs for Looker ${release} ...`); if (ok(branchOffMain(release))) { - const branch = branchActive() + const branch = branchActive(); if (await pullci(release)) { - return batch([ - 'yarn gen', - 'bin/smoke typescript python kotlin', - 'git add -u', - `git commit -m "feat: generate SDKs for Looker ${release}" -m "Release-As: ${release}.0"`, - `git push origin ${branch}`, - /* create PR - */ - ], release) + return batch( + [ + 'yarn gen', + 'yarn fix', // Lint fix typescript + 'pipenv run black python/looker_sdk/sdk/api40/*.py', // Lint fix python + './kotlin/gradlew -p kotlin spotlessApply', // Lint fix kotlin + 'git add -u', + `git commit -m "feat: generate SDKs for Looker ${release}" -m "Release-As: ${release}.0"`, + `git push origin ${branch}`, + /* create PR + */ + ], + release + ); } else { - console.error(`timed out waiting for Looker ${release}`) + console.error(`timed out waiting for Looker ${release}`); } } -} +}; (async () => { - console.info(`${process.argv[1]} `) - console.info(' version: Looker release version, like 22.10') - const args = process.argv.slice(2) + console.info(`${process.argv[1]} `); + console.info(' version: Looker release version, like 22.10'); + const args = process.argv.slice(2); if (args.length >= 1) { - await regen(args[0]) - } else - { - console.error('No release version was specified') + await regen(args[0]); + console.info('If generated SDKs fail CI, run "bin/smoke [language]" locally to verify and debug') + } else { + console.error('No release version was specified'); } -})().catch( e => { - console.error(e) -}) +})().catch((e) => { + console.error(e); +}); diff --git a/config/jest/fileMock.js b/config/jest/fileMock.js index 62e68ce7f..e2dd094e5 100644 --- a/config/jest/fileMock.js +++ b/config/jest/fileMock.js @@ -24,4 +24,4 @@ */ -module.exports = 'test-file-stub' +module.exports = 'test-file-stub'; diff --git a/config/jest/styleMock.js b/config/jest/styleMock.js index 56acda796..39cd8cd23 100644 --- a/config/jest/styleMock.js +++ b/config/jest/styleMock.js @@ -24,4 +24,4 @@ */ -module.exports = {} +module.exports = {}; diff --git a/csharp/README.md b/csharp/README.md index 9f9624f85..6aa486e00 100644 --- a/csharp/README.md +++ b/csharp/README.md @@ -1,6 +1,6 @@ -# Look# +# Look\# -**C# .NET SDK for Looker** +## C# .NET SDK for Looker Look# was developed using the principles in [Build Your Own SDK](/docs/byosdk.md). @@ -9,7 +9,7 @@ Look# has: - C# Runtime library with strong typing for HTTP responses - Uses .NET Core 6.x, an Open Source, cross-platform run-time for macOS, Windows, and Linux - SDK Codegen generates the SDK bindings from the Looker API spec -- Both API 3.1 and API 4.0 methods (SDK calls) and models (SDK types) +- API 4.0 methods (SDK calls) and models (SDK types) - Includes many unit and some functional tests! - nice: `AllDashboardsTests` shows LINQ, which is one of the coolest features of .NET diff --git a/csharp/rtl.Tests/ApiMethodsTests.cs b/csharp/rtl.Tests/ApiMethodsTests.cs index 7c08b88a6..5e247fa59 100644 --- a/csharp/rtl.Tests/ApiMethodsTests.cs +++ b/csharp/rtl.Tests/ApiMethodsTests.cs @@ -25,14 +25,6 @@ private IAuthSession Auth() return new AuthSession(_config.Settings, _transport); } - [Fact] - public void Version31Test() - { - var sdk = new ApiMethods(Auth(), "3.1"); - var agentTag = $"{Constants.AgentPrefix} {Constants.LookerVersion}.3.1"; - Assert.Equal(agentTag,sdk.AuthSession.Settings.AgentTag); - } - [Fact] public void Version40Test() { diff --git a/csharp/rtl/ApiMethods.cs b/csharp/rtl/ApiMethods.cs index b56e2a140..3e7d6433d 100644 --- a/csharp/rtl/ApiMethods.cs +++ b/csharp/rtl/ApiMethods.cs @@ -24,7 +24,7 @@ public ApiMethods() /// Recommended constructor for ApiMethods /// /// AuthSession to manage automatic auth - /// Version of the API. Typically "3.1" or "4.0" + /// Version of the API. Should be "4.0" public ApiMethods(IAuthSession authSession, string apiVersion = Constants.DefaultApiVersion) { _authenticator = request => AuthSession.Authenticate(request); diff --git a/csharp/rtl/Constants.cs b/csharp/rtl/Constants.cs index b8929061f..cee065ba5 100644 --- a/csharp/rtl/Constants.cs +++ b/csharp/rtl/Constants.cs @@ -61,7 +61,7 @@ public struct Constants public const string DefaultApiVersion = "4.0"; public const string AgentPrefix = "CS-SDK"; - public const string LookerVersion = "23.18"; + public const string LookerVersion = "24.2"; public const string Bearer = "Bearer"; public const string LookerAppiId = "x-looker-appid"; diff --git a/csharp/sdk/3.1/methods.cs b/csharp/sdk/3.1/methods.cs deleted file mode 100644 index f79996918..000000000 --- a/csharp/sdk/3.1/methods.cs +++ /dev/null @@ -1,8421 +0,0 @@ -/// MIT License -/// -/// Copyright (c) 2023 Looker Data Sciences, Inc. -/// -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in all -/// copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -/// SOFTWARE. -/// - -/// 382 API methods - -#nullable enable -using System; -using System.Net.Http; -using System.Threading.Tasks; -using Looker.RTL; -// ReSharper disable InconsistentNaming - -/// NOTE: Do not edit this file generated by Looker SDK Codegen for API 3.1 - -namespace Looker.SDK.API31 -{ - - public class Looker31SDK: ApiMethods - { - public Looker31SDK(IAuthSession authSession): base(authSession, "3.1") { } - - #region ApiAuth: API Authentication - - /// ### Present client credentials to obtain an authorization token - /// - /// Looker API implements the OAuth2 [Resource Owner Password Credentials Grant](https://cloud.google.com/looker/docs/r/api/outh2_resource_owner_pc) pattern. - /// The client credentials required for this login must be obtained by creating an API key on a user account - /// in the Looker Admin console. The API key consists of a public `client_id` and a private `client_secret`. - /// - /// The access token returned by `login` must be used in the HTTP Authorization header of subsequent - /// API requests, like this: - /// ``` - /// Authorization: token 4QDkCyCtZzYgj4C2p2cj3csJH7zqS5RzKs2kTnG4 - /// ``` - /// Replace "4QDkCy..." with the `access_token` value returned by `login`. - /// The word `token` is a string literal and must be included exactly as shown. - /// - /// This function can accept `client_id` and `client_secret` parameters as URL query params or as www-form-urlencoded params in the body of the HTTP request. Since there is a small risk that URL parameters may be visible to intermediate nodes on the network route (proxies, routers, etc), passing credentials in the body of the request is considered more secure than URL params. - /// - /// Example of passing credentials in the HTTP request body: - /// ```` - /// POST HTTP /login - /// Content-Type: application/x-www-form-urlencoded - /// - /// client_id=CGc9B7v7J48dQSJvxxx&client_secret=nNVS9cSS3xNpSC9JdsBvvvvv - /// ```` - /// - /// ### Best Practice: - /// Always pass credentials in body params. Pass credentials in URL query params **only** when you cannot pass body params due to application, tool, or other limitations. - /// - /// For more information and detailed examples of Looker API authorization, see [How to Authenticate to Looker API](https://github.com/looker/looker-sdk-ruby/blob/master/authentication.md). - /// - /// POST /login -> AccessToken - /// - /// AccessToken Access token with metadata. (application/json) - /// - /// client_id part of API Key. - /// client_secret part of API Key. - public async Task> login( - string? client_id = null, - string? client_secret = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/login", new Values { - { "client_id", client_id }, - { "client_secret", client_secret }},null,options); - } - - /// ### Create an access token that runs as a given user. - /// - /// This can only be called by an authenticated admin user. It allows that admin to generate a new - /// authentication token for the user with the given user id. That token can then be used for subsequent - /// API calls - which are then performed *as* that target user. - /// - /// The target user does *not* need to have a pre-existing API client_id/client_secret pair. And, no such - /// credentials are created by this call. - /// - /// This allows for building systems where api user authentication for an arbitrary number of users is done - /// outside of Looker and funneled through a single 'service account' with admin permissions. Note that a - /// new access token is generated on each call. If target users are going to be making numerous API - /// calls in a short period then it is wise to cache this authentication token rather than call this before - /// each of those API calls. - /// - /// See 'login' for more detail on the access token and how to use it. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// POST /login/{user_id} -> AccessToken - /// - /// AccessToken Access token with metadata. (application/json) - /// - /// Id of user. - /// When true (default), API calls using the returned access_token are attributed to the admin user who created the access_token. When false, API activity is attributed to the user the access_token runs as. False requires a looker license. - public async Task> login_user( - long user_id, - bool? associative = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, $"/login/{user_id}", new Values { - { "associative", associative }},null,options); - } - - /// ### Logout of the API and invalidate the current access token. - /// - /// DELETE /logout -> string - /// - /// string Logged out successfully. (application/json) - /// - public async Task> logout( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, "/logout", null,null,options); - } - - #endregion ApiAuth: API Authentication - - #region Auth: Manage User Authentication Configuration - - /// ### Create Signed Embed URL - /// - /// Creates a signed embed URL and cryptographically signs it with an embed secret. - /// This signed URL can then be used to instantiate a Looker embed session in a PBL web application. - /// Do not make any modifications to the returned URL - any change may invalidate the signature and - /// cause the URL to fail to load a Looker embed session. - /// - /// A signed embed URL can only be **used once**. After the URL has been used to request a page from the - /// Looker server, it is invalid. Future requests using the same URL will fail. This is to prevent - /// 'replay attacks'. - /// - /// The `target_url` property must be a complete URL of a Looker UI page - scheme, hostname, path and query params. - /// To load a dashboard with id 56 and with a filter of `Date=1 years`, the looker URL would look like `https:/myname.looker.com/dashboards/56?Date=1%20years`. - /// The best way to obtain this `target_url` is to navigate to the desired Looker page in your web browser and use the "Get embed URL" menu option - /// to copy it to your clipboard and paste it into the `target_url` property as a quoted string value in this API request. - /// - /// Permissions for the embed user are defined by the groups in which the embed user is a member (`group_ids` property) - /// and the lists of models and permissions assigned to the embed user. - /// At a minimum, you must provide values for either the `group_ids` property, or **both** the models and permissions properties. - /// These properties are additive; an embed user can be a member of certain groups AND be granted access to models and permissions. - /// - /// The embed user's access is the union of permissions granted by the `group_ids`, `models`, and `permissions` properties. - /// - /// This function does not strictly require all group_ids, user attribute names, or model names to exist at the moment the - /// embed url is created. Unknown group_id, user attribute names or model names will be passed through to the output URL. - /// - /// To diagnose potential problems with an SSO embed URL, you can copy the signed URL into the Embed URI Validator text box in `/admin/embed`. - /// - /// The `secret_id` parameter is optional. If specified, its value must be the id of an active secret defined in the Looker instance. - /// if not specified, the URL will be signed using the most recent active signing secret. If there is no active secret for signing embed urls, - /// a default secret will be created. This default secret is encrypted using HMAC/SHA-256. - /// - /// The `embed_domain` parameter is optional. If specified and valid, the domain will be added to the embed domain allowlist if it is missing. - /// - /// #### Security Note - /// Protect this signed URL as you would an access token or password credentials - do not write - /// it to disk, do not pass it to a third party, and only pass it through a secure HTTPS - /// encrypted transport. - /// - /// - /// Calls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled - /// - /// POST /embed/sso_url -> EmbedUrlResponse - /// - /// EmbedUrlResponse Signed Embed URL (application/json) - /// - public async Task> create_sso_embed_url( - EmbedSsoParams body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/embed/sso_url", null,body,options); - } - - /// ### Get the LDAP configuration. - /// - /// Looker can be optionally configured to authenticate users against an Active Directory or other LDAP directory server. - /// LDAP setup requires coordination with an administrator of that directory server. - /// - /// Only Looker administrators can read and update the LDAP configuration. - /// - /// Configuring LDAP impacts authentication for all users. This configuration should be done carefully. - /// - /// Looker maintains a single LDAP configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). - /// - /// LDAP is enabled or disabled for Looker using the **enabled** field. - /// - /// Looker will never return an **auth_password** field. That value can be set, but never retrieved. - /// - /// See the [Looker LDAP docs](https://cloud.google.com/looker/docs/r/api/ldap_setup) for additional information. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /ldap_config -> LDAPConfig - /// - /// LDAPConfig LDAP Configuration. (application/json) - /// - public async Task> ldap_config( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/ldap_config", null,null,options); - } - - /// ### Update the LDAP configuration. - /// - /// Configuring LDAP impacts authentication for all users. This configuration should be done carefully. - /// - /// Only Looker administrators can read and update the LDAP configuration. - /// - /// LDAP is enabled or disabled for Looker using the **enabled** field. - /// - /// It is **highly** recommended that any LDAP setting changes be tested using the APIs below before being set globally. - /// - /// See the [Looker LDAP docs](https://cloud.google.com/looker/docs/r/api/ldap_setup) for additional information. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// PATCH /ldap_config -> LDAPConfig - /// - /// LDAPConfig New state for LDAP Configuration. (application/json) - /// - public async Task> update_ldap_config( - WriteLDAPConfig body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, "/ldap_config", null,body,options); - } - - /// ### Test the connection settings for an LDAP configuration. - /// - /// This tests that the connection is possible given a connection_host and connection_port. - /// - /// **connection_host** and **connection_port** are required. **connection_tls** is optional. - /// - /// Example: - /// ```json - /// { - /// "connection_host": "ldap.example.com", - /// "connection_port": "636", - /// "connection_tls": true - /// } - /// ``` - /// - /// No authentication to the LDAP server is attempted. - /// - /// The active LDAP settings are not modified. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// PUT /ldap_config/test_connection -> LDAPConfigTestResult - /// - /// LDAPConfigTestResult Result info. (application/json) - /// - public async Task> test_ldap_config_connection( - WriteLDAPConfig body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Put, "/ldap_config/test_connection", null,body,options); - } - - /// ### Test the connection authentication settings for an LDAP configuration. - /// - /// This tests that the connection is possible and that a 'server' account to be used by Looker can authenticate to the LDAP server given connection and authentication information. - /// - /// **connection_host**, **connection_port**, and **auth_username**, are required. **connection_tls** and **auth_password** are optional. - /// - /// Example: - /// ```json - /// { - /// "connection_host": "ldap.example.com", - /// "connection_port": "636", - /// "connection_tls": true, - /// "auth_username": "cn=looker,dc=example,dc=com", - /// "auth_password": "secret" - /// } - /// ``` - /// - /// Looker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test. - /// - /// The active LDAP settings are not modified. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// PUT /ldap_config/test_auth -> LDAPConfigTestResult - /// - /// LDAPConfigTestResult Result info. (application/json) - /// - public async Task> test_ldap_config_auth( - WriteLDAPConfig body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Put, "/ldap_config/test_auth", null,body,options); - } - - /// ### Test the user authentication settings for an LDAP configuration without authenticating the user. - /// - /// This test will let you easily test the mapping for user properties and roles for any user withoutneeding to authenticate as that user. - /// - /// This test accepts a full LDAP configuration along with a username and attempts to find the full infofor the user from the LDAP server without actually authenticating the user. So, user password is notrequired.The configuration is validated before attempting to contact the server. - /// - /// **test_ldap_user** is required. - /// - /// The active LDAP settings are not modified. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// PUT /ldap_config/test_user_info -> LDAPConfigTestResult - /// - /// LDAPConfigTestResult Result info. (application/json) - /// - public async Task> test_ldap_config_user_info( - WriteLDAPConfig body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Put, "/ldap_config/test_user_info", null,body,options); - } - - /// ### Test the user authentication settings for an LDAP configuration. - /// - /// This test accepts a full LDAP configuration along with a username/password pair and attempts to authenticate the user with the LDAP server. The configuration is validated before attempting the authentication. - /// - /// Looker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test. - /// - /// **test_ldap_user** and **test_ldap_password** are required. - /// - /// The active LDAP settings are not modified. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// PUT /ldap_config/test_user_auth -> LDAPConfigTestResult - /// - /// LDAPConfigTestResult Result info. (application/json) - /// - public async Task> test_ldap_config_user_auth( - WriteLDAPConfig body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Put, "/ldap_config/test_user_auth", null,body,options); - } - - /// ### Get the OIDC configuration. - /// - /// Looker can be optionally configured to authenticate users against an OpenID Connect (OIDC) - /// authentication server. OIDC setup requires coordination with an administrator of that server. - /// - /// Only Looker administrators can read and update the OIDC configuration. - /// - /// Configuring OIDC impacts authentication for all users. This configuration should be done carefully. - /// - /// Looker maintains a single OIDC configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). - /// - /// OIDC is enabled or disabled for Looker using the **enabled** field. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /oidc_config -> OIDCConfig - /// - /// OIDCConfig OIDC Configuration. (application/json) - /// - public async Task> oidc_config( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/oidc_config", null,null,options); - } - - /// ### Update the OIDC configuration. - /// - /// Configuring OIDC impacts authentication for all users. This configuration should be done carefully. - /// - /// Only Looker administrators can read and update the OIDC configuration. - /// - /// OIDC is enabled or disabled for Looker using the **enabled** field. - /// - /// It is **highly** recommended that any OIDC setting changes be tested using the APIs below before being set globally. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// PATCH /oidc_config -> OIDCConfig - /// - /// OIDCConfig New state for OIDC Configuration. (application/json) - /// - public async Task> update_oidc_config( - WriteOIDCConfig body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, "/oidc_config", null,body,options); - } - - /// ### Get a OIDC test configuration by test_slug. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /oidc_test_configs/{test_slug} -> OIDCConfig - /// - /// OIDCConfig OIDC test config. (application/json) - /// - /// Slug of test config - public async Task> oidc_test_config( - string test_slug, - ITransportSettings? options = null) -{ - test_slug = SdkUtils.EncodeParam(test_slug); - return await AuthRequest(HttpMethod.Get, $"/oidc_test_configs/{test_slug}", null,null,options); - } - - /// ### Delete a OIDC test configuration. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// DELETE /oidc_test_configs/{test_slug} -> string - /// - /// string Test config succssfully deleted. (application/json) - /// - /// Slug of test config - public async Task> delete_oidc_test_config( - string test_slug, - ITransportSettings? options = null) -{ - test_slug = SdkUtils.EncodeParam(test_slug); - return await AuthRequest(HttpMethod.Delete, $"/oidc_test_configs/{test_slug}", null,null,options); - } - - /// ### Create a OIDC test configuration. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// POST /oidc_test_configs -> OIDCConfig - /// - /// OIDCConfig OIDC test config (application/json) - /// - public async Task> create_oidc_test_config( - WriteOIDCConfig body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/oidc_test_configs", null,body,options); - } - - /// ### Get password config. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /password_config -> PasswordConfig - /// - /// PasswordConfig Password Config (application/json) - /// - public async Task> password_config( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/password_config", null,null,options); - } - - /// ### Update password config. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// PATCH /password_config -> PasswordConfig - /// - /// PasswordConfig Password Config (application/json) - /// - public async Task> update_password_config( - WritePasswordConfig body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, "/password_config", null,body,options); - } - - /// ### Force all credentials_email users to reset their login passwords upon their next login. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// PUT /password_config/force_password_reset_at_next_login_for_all_users -> string - /// - /// string Password Config (application/json) - /// - public async Task> force_password_reset_at_next_login_for_all_users( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Put, "/password_config/force_password_reset_at_next_login_for_all_users", null,null,options); - } - - /// ### Get the SAML configuration. - /// - /// Looker can be optionally configured to authenticate users against a SAML authentication server. - /// SAML setup requires coordination with an administrator of that server. - /// - /// Only Looker administrators can read and update the SAML configuration. - /// - /// Configuring SAML impacts authentication for all users. This configuration should be done carefully. - /// - /// Looker maintains a single SAML configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). - /// - /// SAML is enabled or disabled for Looker using the **enabled** field. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /saml_config -> SamlConfig - /// - /// SamlConfig SAML Configuration. (application/json) - /// - public async Task> saml_config( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/saml_config", null,null,options); - } - - /// ### Update the SAML configuration. - /// - /// Configuring SAML impacts authentication for all users. This configuration should be done carefully. - /// - /// Only Looker administrators can read and update the SAML configuration. - /// - /// SAML is enabled or disabled for Looker using the **enabled** field. - /// - /// It is **highly** recommended that any SAML setting changes be tested using the APIs below before being set globally. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// PATCH /saml_config -> SamlConfig - /// - /// SamlConfig New state for SAML Configuration. (application/json) - /// - public async Task> update_saml_config( - WriteSamlConfig body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, "/saml_config", null,body,options); - } - - /// ### Get a SAML test configuration by test_slug. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /saml_test_configs/{test_slug} -> SamlConfig - /// - /// SamlConfig SAML test config. (application/json) - /// - /// Slug of test config - public async Task> saml_test_config( - string test_slug, - ITransportSettings? options = null) -{ - test_slug = SdkUtils.EncodeParam(test_slug); - return await AuthRequest(HttpMethod.Get, $"/saml_test_configs/{test_slug}", null,null,options); - } - - /// ### Delete a SAML test configuration. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// DELETE /saml_test_configs/{test_slug} -> string - /// - /// string Test config succssfully deleted. (application/json) - /// - /// Slug of test config - public async Task> delete_saml_test_config( - string test_slug, - ITransportSettings? options = null) -{ - test_slug = SdkUtils.EncodeParam(test_slug); - return await AuthRequest(HttpMethod.Delete, $"/saml_test_configs/{test_slug}", null,null,options); - } - - /// ### Create a SAML test configuration. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// POST /saml_test_configs -> SamlConfig - /// - /// SamlConfig SAML test config (application/json) - /// - public async Task> create_saml_test_config( - WriteSamlConfig body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/saml_test_configs", null,body,options); - } - - /// ### Parse the given xml as a SAML IdP metadata document and return the result. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// POST /parse_saml_idp_metadata -> SamlMetadataParseResult - /// - /// SamlMetadataParseResult Parse result (application/json) - /// - public async Task> parse_saml_idp_metadata( - string body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/parse_saml_idp_metadata", null,body,options); - } - - /// ### Fetch the given url and parse it as a SAML IdP metadata document and return the result. - /// Note that this requires that the url be public or at least at a location where the Looker instance - /// can fetch it without requiring any special authentication. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// POST /fetch_and_parse_saml_idp_metadata -> SamlMetadataParseResult - /// - /// SamlMetadataParseResult Parse result (application/json) - /// - public async Task> fetch_and_parse_saml_idp_metadata( - string body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/fetch_and_parse_saml_idp_metadata", null,body,options); - } - - /// ### Get session config. - /// - /// GET /session_config -> SessionConfig - /// - /// SessionConfig Session Config (application/json) - /// - public async Task> session_config( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/session_config", null,null,options); - } - - /// ### Update session config. - /// - /// PATCH /session_config -> SessionConfig - /// - /// SessionConfig Session Config (application/json) - /// - public async Task> update_session_config( - WriteSessionConfig body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, "/session_config", null,body,options); - } - - /// ### Get currently locked-out users. - /// - /// GET /user_login_lockouts -> UserLoginLockout[] - /// - /// UserLoginLockout[] User Login Lockout (application/json) - /// - /// Include only these fields in the response - public async Task> all_user_login_lockouts( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/user_login_lockouts", new Values { - { "fields", fields }},null,options); - } - - /// ### Search currently locked-out users. - /// - /// GET /user_login_lockouts/search -> UserLoginLockout[] - /// - /// UserLoginLockout[] User Login Lockout (application/json) - /// - /// Include only these fields in the response - /// Return only page N of paginated results - /// Return N rows of data per page - /// Fields to sort by. - /// Auth type user is locked out for (email, ldap, totp, api) - /// Match name - /// Match email - /// Match remote LDAP ID - /// Combine given search criteria in a boolean OR expression - public async Task> search_user_login_lockouts( - string? fields = null, - long? page = null, - long? per_page = null, - string? sorts = null, - string? auth_type = null, - string? full_name = null, - string? email = null, - string? remote_id = null, - bool? filter_or = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/user_login_lockouts/search", new Values { - { "fields", fields }, - { "page", page }, - { "per_page", per_page }, - { "sorts", sorts }, - { "auth_type", auth_type }, - { "full_name", full_name }, - { "email", email }, - { "remote_id", remote_id }, - { "filter_or", filter_or }},null,options); - } - - /// ### Removes login lockout for the associated user. - /// - /// DELETE /user_login_lockout/{key} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// The key associated with the locked user - public async Task> delete_user_login_lockout( - string key, - ITransportSettings? options = null) -{ - key = SdkUtils.EncodeParam(key); - return await AuthRequest(HttpMethod.Delete, $"/user_login_lockout/{key}", null,null,options); - } - - #endregion Auth: Manage User Authentication Configuration - - #region ColorCollection: Manage Color Collections - - /// ### Get an array of all existing Color Collections - /// Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) - /// - /// Get all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard) - /// - /// Get all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom) - /// - /// **Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors. - /// - /// GET /color_collections -> ColorCollection[] - /// - /// ColorCollection[] ColorCollections (application/json) - /// - /// Requested fields. - public async Task> all_color_collections( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/color_collections", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a custom color collection with the specified information - /// - /// Creates a new custom color collection object, returning the details, including the created id. - /// - /// **Update** an existing color collection with [Update Color Collection](#!/ColorCollection/update_color_collection) - /// - /// **Permanently delete** an existing custom color collection with [Delete Color Collection](#!/ColorCollection/delete_color_collection) - /// - /// **Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors. - /// - /// POST /color_collections -> ColorCollection - /// - /// ColorCollection ColorCollection (application/json) - /// - public async Task> create_color_collection( - WriteColorCollection body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/color_collections", null,body,options); - } - - /// ### Get an array of all existing **Custom** Color Collections - /// Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) - /// - /// Get all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard) - /// - /// **Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors. - /// - /// GET /color_collections/custom -> ColorCollection[] - /// - /// ColorCollection[] ColorCollections (application/json) - /// - /// Requested fields. - public async Task> color_collections_custom( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/color_collections/custom", new Values { - { "fields", fields }},null,options); - } - - /// ### Get an array of all existing **Standard** Color Collections - /// Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) - /// - /// Get all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom) - /// - /// **Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors. - /// - /// GET /color_collections/standard -> ColorCollection[] - /// - /// ColorCollection[] ColorCollections (application/json) - /// - /// Requested fields. - public async Task> color_collections_standard( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/color_collections/standard", new Values { - { "fields", fields }},null,options); - } - - /// ### Get the default color collection - /// - /// Use this to retrieve the default Color Collection. - /// - /// Set the default color collection with [ColorCollection](#!/ColorCollection/set_default_color_collection) - /// - /// GET /color_collections/default -> ColorCollection - /// - /// ColorCollection ColorCollection (application/json) - /// - public async Task> default_color_collection( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/color_collections/default", null,null,options); - } - - /// ### Set the global default Color Collection by ID - /// - /// Returns the new specified default Color Collection object. - /// **Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors. - /// - /// PUT /color_collections/default -> ColorCollection - /// - /// ColorCollection ColorCollection (application/json) - /// - /// ID of color collection to set as default - public async Task> set_default_color_collection( - string collection_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Put, "/color_collections/default", new Values { - { "collection_id", collection_id }},null,options); - } - - /// ### Get a Color Collection by ID - /// - /// Use this to retrieve a specific Color Collection. - /// Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) - /// - /// Get all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard) - /// - /// Get all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom) - /// - /// **Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors. - /// - /// GET /color_collections/{collection_id} -> ColorCollection - /// - /// ColorCollection ColorCollection (application/json) - /// - /// Id of Color Collection - /// Requested fields. - public async Task> color_collection( - string collection_id, - string? fields = null, - ITransportSettings? options = null) -{ - collection_id = SdkUtils.EncodeParam(collection_id); - return await AuthRequest(HttpMethod.Get, $"/color_collections/{collection_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update a custom color collection by id. - /// **Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors. - /// - /// PATCH /color_collections/{collection_id} -> ColorCollection - /// - /// ColorCollection ColorCollection (application/json) - /// - /// Id of Custom Color Collection - public async Task> update_color_collection( - string collection_id, - WriteColorCollection body, - ITransportSettings? options = null) -{ - collection_id = SdkUtils.EncodeParam(collection_id); - return await AuthRequest(HttpMethod.Patch, $"/color_collections/{collection_id}", null,body,options); - } - - /// ### Delete a custom color collection by id - /// - /// This operation permanently deletes the identified **Custom** color collection. - /// - /// **Standard** color collections cannot be deleted - /// - /// Because multiple color collections can have the same label, they must be deleted by ID, not name. - /// **Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors. - /// - /// DELETE /color_collections/{collection_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of Color Collection - public async Task> delete_color_collection( - string collection_id, - ITransportSettings? options = null) -{ - collection_id = SdkUtils.EncodeParam(collection_id); - return await AuthRequest(HttpMethod.Delete, $"/color_collections/{collection_id}", null,null,options); - } - - #endregion ColorCollection: Manage Color Collections - - #region Config: Manage General Configuration - - /// ### WARNING: The Looker internal database backup function has been deprecated. - /// - /// GET /backup_configuration -> BackupConfiguration - /// - /// BackupConfiguration Current Backup Configuration (application/json) - /// - [Obsolete("Deprecated")] - public async Task> backup_configuration( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/backup_configuration", null,null,options); - } - - /// ### WARNING: The Looker internal database backup function has been deprecated. - /// - /// PATCH /backup_configuration -> BackupConfiguration - /// - /// BackupConfiguration New state for specified model set. (application/json) - /// - [Obsolete("Deprecated")] - public async Task> update_backup_configuration( - WriteBackupConfiguration body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, "/backup_configuration", null,body,options); - } - - /// Get the current Cloud Storage Configuration. - /// - /// GET /cloud_storage -> BackupConfiguration - /// - /// BackupConfiguration Current Cloud Storage Configuration (application/json) - /// - public async Task> cloud_storage_configuration( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/cloud_storage", null,null,options); - } - - /// Update the current Cloud Storage Configuration. - /// - /// PATCH /cloud_storage -> BackupConfiguration - /// - /// BackupConfiguration New state for specified model set. (application/json) - /// - public async Task> update_cloud_storage_configuration( - WriteBackupConfiguration body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, "/cloud_storage", null,body,options); - } - - /// ### Get the current status and content of custom welcome emails - /// - /// GET /custom_welcome_email -> CustomWelcomeEmail - /// - /// CustomWelcomeEmail Custom Welcome Email (application/json) - /// - public async Task> custom_welcome_email( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/custom_welcome_email", null,null,options); - } - - /// Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user. - /// - /// PATCH /custom_welcome_email -> CustomWelcomeEmail - /// - /// CustomWelcomeEmail Custom Welcome Email (application/json) - /// - /// If true a test email with the content from the request will be sent to the current user after saving - public async Task> update_custom_welcome_email( - WriteCustomWelcomeEmail body, - bool? send_test_welcome_email = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, "/custom_welcome_email", new Values { - { "send_test_welcome_email", send_test_welcome_email }},body,options); - } - - /// Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user. - /// - /// PUT /custom_welcome_email_test -> WelcomeEmailTest - /// - /// WelcomeEmailTest Send Test Welcome Email (application/json) - /// - public async Task> update_custom_welcome_email_test( - WelcomeEmailTest body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Put, "/custom_welcome_email_test", null,body,options); - } - - /// ### Retrieve the value for whether or not digest emails is enabled - /// - /// GET /digest_emails_enabled -> DigestEmails - /// - /// DigestEmails Digest_emails (application/json) - /// - public async Task> digest_emails_enabled( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/digest_emails_enabled", null,null,options); - } - - /// ### Update the setting for enabling/disabling digest emails - /// - /// PATCH /digest_emails_enabled -> DigestEmails - /// - /// DigestEmails Digest_emails (application/json) - /// - public async Task> update_digest_emails_enabled( - DigestEmails body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, "/digest_emails_enabled", null,body,options); - } - - /// ### Trigger the generation of digest email records and send them to Looker's internal system. This does not send - /// any actual emails, it generates records containing content which may be of interest for users who have become inactive. - /// Emails will be sent at a later time from Looker's internal system if the Digest Emails feature is enabled in settings. - /// - /// POST /digest_email_send -> DigestEmailSend - /// - /// DigestEmailSend Status of generating and sending the data (application/json) - /// - public async Task> create_digest_email_send( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/digest_email_send", null,null,options); - } - - /// ### Set the menu item name and content for internal help resources - /// - /// GET /internal_help_resources_content -> InternalHelpResourcesContent - /// - /// InternalHelpResourcesContent Internal Help Resources Content (application/json) - /// - public async Task> internal_help_resources_content( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/internal_help_resources_content", null,null,options); - } - - /// Update internal help resources content - /// - /// PATCH /internal_help_resources_content -> InternalHelpResourcesContent - /// - /// InternalHelpResourcesContent Internal Help Resources Content (application/json) - /// - public async Task> update_internal_help_resources_content( - WriteInternalHelpResourcesContent body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, "/internal_help_resources_content", null,body,options); - } - - /// ### Get and set the options for internal help resources - /// - /// GET /internal_help_resources_enabled -> InternalHelpResources - /// - /// InternalHelpResources Internal Help Resources (application/json) - /// - public async Task> internal_help_resources( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/internal_help_resources_enabled", null,null,options); - } - - /// Update internal help resources settings - /// - /// PATCH /internal_help_resources -> InternalHelpResources - /// - /// InternalHelpResources Custom Welcome Email (application/json) - /// - public async Task> update_internal_help_resources( - WriteInternalHelpResources body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, "/internal_help_resources", null,body,options); - } - - /// ### Get all legacy features. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /legacy_features -> LegacyFeature[] - /// - /// LegacyFeature[] Legacy Feature (application/json) - /// - public async Task> all_legacy_features( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/legacy_features", null,null,options); - } - - /// ### Get information about the legacy feature with a specific id. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /legacy_features/{legacy_feature_id} -> LegacyFeature - /// - /// LegacyFeature Legacy Feature (application/json) - /// - /// id of legacy feature - public async Task> legacy_feature( - long legacy_feature_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/legacy_features/{legacy_feature_id}", null,null,options); - } - - /// ### Update information about the legacy feature with a specific id. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// PATCH /legacy_features/{legacy_feature_id} -> LegacyFeature - /// - /// LegacyFeature Legacy Feature (application/json) - /// - /// id of legacy feature - public async Task> update_legacy_feature( - long legacy_feature_id, - WriteLegacyFeature body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/legacy_features/{legacy_feature_id}", null,body,options); - } - - /// ### Get a list of locales that Looker supports. - /// - /// GET /locales -> Locale[] - /// - /// Locale[] Locale (application/json) - /// - public async Task> all_locales( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/locales", null,null,options); - } - - /// ### Configure SMTP Settings - /// This API allows users to configure the SMTP settings on the Looker instance. - /// Only admin users are authorised to call this API. - /// - /// POST /smtp_settings -> void - /// - /// void Successfully updated SMTP settings () - /// - public async Task> set_smtp_settings( - SmtpSettings body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/smtp_settings", null,body,options); - } - - /// ### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks). - /// - /// GET /timezones -> Timezone[] - /// - /// Timezone[] Timezone (application/json) - /// - public async Task> all_timezones( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/timezones", null,null,options); - } - - /// ### Get information about all API versions supported by this Looker instance. - /// - /// GET /versions -> ApiVersion - /// - /// ApiVersion ApiVersion (application/json) - /// - /// Requested fields. - public async Task> versions( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/versions", new Values { - { "fields", fields }},null,options); - } - - /// ### This feature is enabled only by special license. - /// ### Gets the whitelabel configuration, which includes hiding documentation links, custom favicon uploading, etc. - /// - /// GET /whitelabel_configuration -> WhitelabelConfiguration - /// - /// WhitelabelConfiguration Whitelabel configuration (application/json) - /// - /// Requested fields. - public async Task> whitelabel_configuration( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/whitelabel_configuration", new Values { - { "fields", fields }},null,options); - } - - /// ### Update the whitelabel configuration - /// - /// PUT /whitelabel_configuration -> WhitelabelConfiguration - /// - /// WhitelabelConfiguration Whitelabel configuration (application/json) - /// - public async Task> update_whitelabel_configuration( - WriteWhitelabelConfiguration body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Put, "/whitelabel_configuration", null,body,options); - } - - #endregion Config: Manage General Configuration - - #region Connection: Manage Database Connections - - /// ### Get information about all connections. - /// - /// GET /connections -> DBConnection[] - /// - /// DBConnection[] Connection (application/json) - /// - /// Requested fields. - public async Task> all_connections( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/connections", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a connection using the specified configuration. - /// - /// POST /connections -> DBConnection - /// - /// DBConnection Connection (application/json) - /// - public async Task> create_connection( - WriteDBConnection body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/connections", null,body,options); - } - - /// ### Get information about a connection. - /// - /// GET /connections/{connection_name} -> DBConnection - /// - /// DBConnection Connection (application/json) - /// - /// Name of connection - /// Requested fields. - public async Task> connection( - string connection_name, - string? fields = null, - ITransportSettings? options = null) -{ - connection_name = SdkUtils.EncodeParam(connection_name); - return await AuthRequest(HttpMethod.Get, $"/connections/{connection_name}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update a connection using the specified configuration. - /// - /// PATCH /connections/{connection_name} -> DBConnection - /// - /// DBConnection Connection (application/json) - /// - /// Name of connection - public async Task> update_connection( - string connection_name, - WriteDBConnection body, - ITransportSettings? options = null) -{ - connection_name = SdkUtils.EncodeParam(connection_name); - return await AuthRequest(HttpMethod.Patch, $"/connections/{connection_name}", null,body,options); - } - - /// ### Delete a connection. - /// - /// DELETE /connections/{connection_name} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Name of connection - public async Task> delete_connection( - string connection_name, - ITransportSettings? options = null) -{ - connection_name = SdkUtils.EncodeParam(connection_name); - return await AuthRequest(HttpMethod.Delete, $"/connections/{connection_name}", null,null,options); - } - - /// ### Delete a connection override. - /// - /// DELETE /connections/{connection_name}/connection_override/{override_context} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Name of connection - /// Context of connection override - public async Task> delete_connection_override( - string connection_name, - string override_context, - ITransportSettings? options = null) -{ - connection_name = SdkUtils.EncodeParam(connection_name); - override_context = SdkUtils.EncodeParam(override_context); - return await AuthRequest(HttpMethod.Delete, $"/connections/{connection_name}/connection_override/{override_context}", null,null,options); - } - - /// ### Test an existing connection. - /// - /// Note that a connection's 'dialect' property has a 'connection_tests' property that lists the - /// specific types of tests that the connection supports. - /// - /// This API is rate limited. - /// - /// Unsupported tests in the request will be ignored. - /// - /// PUT /connections/{connection_name}/test -> DBConnectionTestResult[] - /// - /// DBConnectionTestResult[] Test results (application/json) - /// - /// Name of connection - /// Array of names of tests to run - public async Task> test_connection( - string connection_name, - DelimArray? tests = null, - ITransportSettings? options = null) -{ - connection_name = SdkUtils.EncodeParam(connection_name); - return await AuthRequest(HttpMethod.Put, $"/connections/{connection_name}/test", new Values { - { "tests", tests }},null,options); - } - - /// ### Test a connection configuration. - /// - /// Note that a connection's 'dialect' property has a 'connection_tests' property that lists the - /// specific types of tests that the connection supports. - /// - /// This API is rate limited. - /// - /// Unsupported tests in the request will be ignored. - /// - /// PUT /connections/test -> DBConnectionTestResult[] - /// - /// DBConnectionTestResult[] Test results (application/json) - /// - /// Array of names of tests to run - public async Task> test_connection_config( - WriteDBConnection body, - DelimArray? tests = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Put, "/connections/test", new Values { - { "tests", tests }},body,options); - } - - /// ### Get information about all dialects. - /// - /// GET /dialect_info -> DialectInfo[] - /// - /// DialectInfo[] Dialect Info (application/json) - /// - /// Requested fields. - public async Task> all_dialect_infos( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/dialect_info", new Values { - { "fields", fields }},null,options); - } - - #endregion Connection: Manage Database Connections - - #region Content: Manage Content - - /// ### Search Favorite Content - /// - /// If multiple search params are given and `filter_or` is FALSE or not specified, - /// search params are combined in a logical AND operation. - /// Only rows that match *all* search param criteria will be returned. - /// - /// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - /// Results will include rows that match **any** of the search criteria. - /// - /// String search params use case-insensitive matching. - /// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - /// example="dan%" will match "danger" and "Danzig" but not "David" - /// example="D_m%" will match "Damage" and "dump" - /// - /// Integer search params can accept a single value or a comma separated list of values. The multiple - /// values will be combined under a logical OR operation - results will match at least one of - /// the given values. - /// - /// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - /// or exclude (respectively) rows where the column is null. - /// - /// Boolean search params accept only "true" and "false" as values. - /// - /// GET /content_favorite/search -> ContentFavorite[] - /// - /// ContentFavorite[] Favorite Content (application/json) - /// - /// Match content favorite id(s) - /// Match user id(s) - /// Match content metadata id(s) - /// Match dashboard id(s) - /// Match look id(s) - /// Number of results to return. (used with offset) - /// Number of results to skip before returning any. (used with limit) - /// Fields to sort by. - /// Requested fields. - /// Combine given search criteria in a boolean OR expression - public async Task> search_content_favorites( - long? id = null, - long? user_id = null, - long? content_metadata_id = null, - long? dashboard_id = null, - long? look_id = null, - long? limit = null, - long? offset = null, - string? sorts = null, - string? fields = null, - bool? filter_or = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/content_favorite/search", new Values { - { "id", id }, - { "user_id", user_id }, - { "content_metadata_id", content_metadata_id }, - { "dashboard_id", dashboard_id }, - { "look_id", look_id }, - { "limit", limit }, - { "offset", offset }, - { "sorts", sorts }, - { "fields", fields }, - { "filter_or", filter_or }},null,options); - } - - /// ### Get favorite content by its id - /// - /// GET /content_favorite/{content_favorite_id} -> ContentFavorite - /// - /// ContentFavorite Favorite Content (application/json) - /// - /// Id of favorite content - /// Requested fields. - public async Task> content_favorite( - long content_favorite_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/content_favorite/{content_favorite_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Delete favorite content - /// - /// DELETE /content_favorite/{content_favorite_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of favorite content - public async Task> delete_content_favorite( - long content_favorite_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/content_favorite/{content_favorite_id}", null,null,options); - } - - /// ### Create favorite content - /// - /// POST /content_favorite -> ContentFavorite - /// - /// ContentFavorite Favorite Content (application/json) - /// - public async Task> create_content_favorite( - WriteContentFavorite body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/content_favorite", null,body,options); - } - - /// ### Get information about all content metadata in a space. - /// - /// GET /content_metadata -> ContentMeta[] - /// - /// ContentMeta[] Content Metadata (application/json) - /// - /// Parent space of content. - /// Requested fields. - public async Task> all_content_metadatas( - long parent_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/content_metadata", new Values { - { "parent_id", parent_id }, - { "fields", fields }},null,options); - } - - /// ### Get information about an individual content metadata record. - /// - /// GET /content_metadata/{content_metadata_id} -> ContentMeta - /// - /// ContentMeta Content Metadata (application/json) - /// - /// Id of content metadata - /// Requested fields. - public async Task> content_metadata( - long content_metadata_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/content_metadata/{content_metadata_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Move a piece of content. - /// - /// PATCH /content_metadata/{content_metadata_id} -> ContentMeta - /// - /// ContentMeta Content Metadata (application/json) - /// - /// Id of content metadata - public async Task> update_content_metadata( - long content_metadata_id, - WriteContentMeta body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/content_metadata/{content_metadata_id}", null,body,options); - } - - /// ### All content metadata access records for a content metadata item. - /// - /// GET /content_metadata_access -> ContentMetaGroupUser[] - /// - /// ContentMetaGroupUser[] Content Metadata Access (application/json) - /// - /// Id of content metadata - /// Requested fields. - public async Task> all_content_metadata_accesses( - long content_metadata_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/content_metadata_access", new Values { - { "content_metadata_id", content_metadata_id }, - { "fields", fields }},null,options); - } - - /// ### Create content metadata access. - /// - /// POST /content_metadata_access -> ContentMetaGroupUser - /// - /// ContentMetaGroupUser Content Metadata Access (application/json) - /// - /// Optionally sends notification email when granting access to a board. - public async Task> create_content_metadata_access( - ContentMetaGroupUser body, - bool? send_boards_notification_email = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/content_metadata_access", new Values { - { "send_boards_notification_email", send_boards_notification_email }},body,options); - } - - /// ### Update type of access for content metadata. - /// - /// PUT /content_metadata_access/{content_metadata_access_id} -> ContentMetaGroupUser - /// - /// ContentMetaGroupUser Content Metadata Access (application/json) - /// - /// Id of content metadata access - public async Task> update_content_metadata_access( - long content_metadata_access_id, - ContentMetaGroupUser body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Put, $"/content_metadata_access/{content_metadata_access_id}", null,body,options); - } - - /// ### Remove content metadata access. - /// - /// DELETE /content_metadata_access/{content_metadata_access_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of content metadata access - public async Task> delete_content_metadata_access( - long content_metadata_access_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/content_metadata_access/{content_metadata_access_id}", null,null,options); - } - - /// ### Get an image representing the contents of a dashboard or look. - /// - /// The returned thumbnail is an abstract representation of the contents of a dashbord or look and does not - /// reflect the actual data displayed in the respective visualizations. - /// - /// GET /content_thumbnail/{type}/{resource_id} -> string - /// - /// **Note**: Binary content may be returned by this method. - /// - /// - /// string Content thumbnail (image/svg+xml) - /// string Content thumbnail (image/png) - /// - /// - /// Either dashboard or look - /// ID of the dashboard or look to render - /// Whether or not to refresh the rendered image with the latest content - /// Light or dark background. Default is "light" - /// A value of png produces a thumbnail in PNG format instead of SVG (default) - /// The width of the image if format is supplied - /// The height of the image if format is supplied - public async Task> content_thumbnail( - string type, - string resource_id, - string? reload = null, - string? theme = null, - string? format = null, - long? width = null, - long? height = null, - ITransportSettings? options = null) where TSuccess : class -{ - type = SdkUtils.EncodeParam(type); - resource_id = SdkUtils.EncodeParam(resource_id); - return await AuthRequest(HttpMethod.Get, $"/content_thumbnail/{type}/{resource_id}", new Values { - { "reload", reload }, - { "theme", theme }, - { "format", format }, - { "width", width }, - { "height", height }},null,options); - } - - /// ### Validate All Content - /// - /// Performs validation of all looks and dashboards - /// Returns a list of errors found as well as metadata about the content validation run. - /// - /// GET /content_validation -> ContentValidation - /// - /// ContentValidation Content validation results (application/json) - /// - /// Requested fields. - public async Task> content_validation( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/content_validation", new Values { - { "fields", fields }},null,options); - } - - /// ### Search Content Views - /// - /// If multiple search params are given and `filter_or` is FALSE or not specified, - /// search params are combined in a logical AND operation. - /// Only rows that match *all* search param criteria will be returned. - /// - /// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - /// Results will include rows that match **any** of the search criteria. - /// - /// String search params use case-insensitive matching. - /// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - /// example="dan%" will match "danger" and "Danzig" but not "David" - /// example="D_m%" will match "Damage" and "dump" - /// - /// Integer search params can accept a single value or a comma separated list of values. The multiple - /// values will be combined under a logical OR operation - results will match at least one of - /// the given values. - /// - /// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - /// or exclude (respectively) rows where the column is null. - /// - /// Boolean search params accept only "true" and "false" as values. - /// - /// GET /content_view/search -> ContentView[] - /// - /// ContentView[] Content View (application/json) - /// - /// Match view count - /// Match Group Id - /// Match look_id - /// Match dashboard_id - /// Match content metadata id - /// Match start of week date (format is "YYYY-MM-DD") - /// True if only all time view records should be returned - /// Match user id - /// Requested fields - /// Number of results to return. Use with `offset` to manage pagination of results - /// Number of results to skip before returning data - /// Fields to sort by - /// Combine given search criteria in a boolean OR expression - public async Task> search_content_views( - long? view_count = null, - long? group_id = null, - string? look_id = null, - string? dashboard_id = null, - long? content_metadata_id = null, - string? start_of_week_date = null, - bool? all_time = null, - long? user_id = null, - string? fields = null, - long? limit = null, - long? offset = null, - string? sorts = null, - bool? filter_or = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/content_view/search", new Values { - { "view_count", view_count }, - { "group_id", group_id }, - { "look_id", look_id }, - { "dashboard_id", dashboard_id }, - { "content_metadata_id", content_metadata_id }, - { "start_of_week_date", start_of_week_date }, - { "all_time", all_time }, - { "user_id", user_id }, - { "fields", fields }, - { "limit", limit }, - { "offset", offset }, - { "sorts", sorts }, - { "filter_or", filter_or }},null,options); - } - - /// ### Get a vector image representing the contents of a dashboard or look. - /// - /// # DEPRECATED: Use [content_thumbnail()](#!/Content/content_thumbnail) - /// - /// The returned thumbnail is an abstract representation of the contents of a dashbord or look and does not - /// reflect the actual data displayed in the respective visualizations. - /// - /// GET /vector_thumbnail/{type}/{resource_id} -> string - /// - /// string Vector thumbnail (image/svg+xml) - /// - /// Either dashboard or look - /// ID of the dashboard or look to render - /// Whether or not to refresh the rendered image with the latest content - [Obsolete("Deprecated")] - public async Task> vector_thumbnail( - string type, - string resource_id, - string? reload = null, - ITransportSettings? options = null) -{ - type = SdkUtils.EncodeParam(type); - resource_id = SdkUtils.EncodeParam(resource_id); - return await AuthRequest(HttpMethod.Get, $"/vector_thumbnail/{type}/{resource_id}", new Values { - { "reload", reload }},null,options); - } - - #endregion Content: Manage Content - - #region Dashboard: Manage Dashboards - - /// ### Get information about all active dashboards. - /// - /// Returns an array of **abbreviated dashboard objects**. Dashboards marked as deleted are excluded from this list. - /// - /// Get the **full details** of a specific dashboard by id with [dashboard()](#!/Dashboard/dashboard) - /// - /// Find **deleted dashboards** with [search_dashboards()](#!/Dashboard/search_dashboards) - /// - /// GET /dashboards -> DashboardBase[] - /// - /// DashboardBase[] dashboards (application/json) - /// - /// Requested fields. - public async Task> all_dashboards( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/dashboards", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a new dashboard - /// - /// Creates a new dashboard object and returns the details of the newly created dashboard. - /// - /// `Title` and `space_id` are required fields. - /// `Space_id` must contain the id of an existing space. - /// A dashboard's `title` must be unique within the space in which it resides. - /// - /// If you receive a 422 error response when creating a dashboard, be sure to look at the - /// response body for information about exactly which fields are missing or contain invalid data. - /// - /// You can **update** an existing dashboard with [update_dashboard()](#!/Dashboard/update_dashboard) - /// - /// You can **permanently delete** an existing dashboard with [delete_dashboard()](#!/Dashboard/delete_dashboard) - /// - /// POST /dashboards -> Dashboard - /// - /// Dashboard Dashboard (application/json) - /// - public async Task> create_dashboard( - WriteDashboard body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/dashboards", null,body,options); - } - - /// ### Search Dashboards - /// - /// Returns an array of **user-defined dashboard** objects that match the specified search criteria. - /// Note, [search_dashboards()](#!/Dashboard/search_dashboards) does not return LookML dashboard objects. - /// - /// If multiple search params are given and `filter_or` is FALSE or not specified, - /// search params are combined in a logical AND operation. - /// Only rows that match *all* search param criteria will be returned. - /// - /// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - /// Results will include rows that match **any** of the search criteria. - /// - /// String search params use case-insensitive matching. - /// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - /// example="dan%" will match "danger" and "Danzig" but not "David" - /// example="D_m%" will match "Damage" and "dump" - /// - /// Integer search params can accept a single value or a comma separated list of values. The multiple - /// values will be combined under a logical OR operation - results will match at least one of - /// the given values. - /// - /// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - /// or exclude (respectively) rows where the column is null. - /// - /// Boolean search params accept only "true" and "false" as values. - /// - /// - /// The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks. - /// - /// Get a **single dashboard** by id with [dashboard()](#!/Dashboard/dashboard) - /// - /// GET /dashboards/search -> Dashboard[] - /// - /// Dashboard[] dashboards (application/json) - /// - /// Match dashboard id. - /// Match dashboard slug. - /// Match Dashboard title. - /// Match Dashboard description. - /// Filter on a content favorite id. - /// Filter on a particular space. - /// Filter on a particular space. - /// Filter on dashboards deleted status. - /// Filter on dashboards created by a particular user. - /// Filter on a particular value of view_count - /// Filter on a content favorite id. - /// Exclude items that exist only in personal spaces other than the users - /// Requested fields. - /// Requested page. - /// Results per page. - /// One or more fields to sort by. Sortable fields: [:title, :user_id, :id, :created_at, :space_id, :folder_id, :description, :view_count, :favorite_count, :slug, :content_favorite_id, :content_metadata_id, :deleted, :deleted_at, :last_viewed_at, :last_accessed_at] - /// Combine given search criteria in a boolean OR expression - public async Task> search_dashboards( - long? id = null, - string? slug = null, - string? title = null, - string? description = null, - long? content_favorite_id = null, - string? space_id = null, - string? folder_id = null, - string? deleted = null, - string? user_id = null, - string? view_count = null, - long? content_metadata_id = null, - bool? curate = null, - string? fields = null, - long? page = null, - long? per_page = null, - string? sorts = null, - bool? filter_or = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/dashboards/search", new Values { - { "id", id }, - { "slug", slug }, - { "title", title }, - { "description", description }, - { "content_favorite_id", content_favorite_id }, - { "space_id", space_id }, - { "folder_id", folder_id }, - { "deleted", deleted }, - { "user_id", user_id }, - { "view_count", view_count }, - { "content_metadata_id", content_metadata_id }, - { "curate", curate }, - { "fields", fields }, - { "page", page }, - { "per_page", per_page }, - { "sorts", sorts }, - { "filter_or", filter_or }},null,options); - } - - /// ### Import a LookML dashboard to a space as a UDD - /// Creates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard - /// and places it in the space specified. The created UDD will have a lookml_link_id which links to the original LookML dashboard. - /// - /// To give the imported dashboard specify a (e.g. title: "my title") in the body of your request, otherwise the imported - /// dashboard will have the same title as the original LookML dashboard. - /// - /// For this operation to succeed the user must have permission to see the LookML dashboard in question, and have permission to - /// create content in the space the dashboard is being imported to. - /// - /// **Sync** a linked UDD with [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard) - /// **Unlink** a linked UDD by setting lookml_link_id to null with [update_dashboard()](#!/Dashboard/update_dashboard) - /// - /// POST /dashboards/{lookml_dashboard_id}/import/{space_id} -> Dashboard - /// - /// Dashboard Dashboard (application/json) - /// - /// Id of LookML dashboard - /// Id of space to import the dashboard to - /// If true, and this dashboard is localized, export it with the raw keys, not localized. - public async Task> import_lookml_dashboard( - string lookml_dashboard_id, - string space_id, - WriteDashboard? body, - bool? raw_locale = null, - ITransportSettings? options = null) -{ - lookml_dashboard_id = SdkUtils.EncodeParam(lookml_dashboard_id); - space_id = SdkUtils.EncodeParam(space_id); - return await AuthRequest(HttpMethod.Post, $"/dashboards/{lookml_dashboard_id}/import/{space_id}", new Values { - { "raw_locale", raw_locale }},body,options); - } - - /// ### Update all linked dashboards to match the specified LookML dashboard. - /// - /// Any UDD (a dashboard which exists in the Looker database rather than as a LookML file) which has a `lookml_link_id` - /// 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. - /// - /// For this operation to succeed the user must have permission to view the LookML dashboard, and only linked dashboards - /// that the user has permission to update will be synced. - /// - /// To **link** or **unlink** a UDD set the `lookml_link_id` property with [update_dashboard()](#!/Dashboard/update_dashboard) - /// - /// PATCH /dashboards/{lookml_dashboard_id}/sync -> long[] - /// - /// long[] Ids of all the dashboards that were updated by this operation (application/json) - /// - /// Id of LookML dashboard, in the form 'model::dashboardname' - /// If true, and this dashboard is localized, export it with the raw keys, not localized. - public async Task> sync_lookml_dashboard( - string lookml_dashboard_id, - WriteDashboard body, - bool? raw_locale = null, - ITransportSettings? options = null) -{ - lookml_dashboard_id = SdkUtils.EncodeParam(lookml_dashboard_id); - return await AuthRequest(HttpMethod.Patch, $"/dashboards/{lookml_dashboard_id}/sync", new Values { - { "raw_locale", raw_locale }},body,options); - } - - /// ### Get information about a dashboard - /// - /// Returns the full details of the identified dashboard object - /// - /// Get a **summary list** of all active dashboards with [all_dashboards()](#!/Dashboard/all_dashboards) - /// - /// You can **Search** for dashboards with [search_dashboards()](#!/Dashboard/search_dashboards) - /// - /// GET /dashboards/{dashboard_id} -> Dashboard - /// - /// Dashboard Dashboard (application/json) - /// - /// Id of dashboard - /// Requested fields. - public async Task> dashboard( - string dashboard_id, - string? fields = null, - ITransportSettings? options = null) -{ - dashboard_id = SdkUtils.EncodeParam(dashboard_id); - return await AuthRequest(HttpMethod.Get, $"/dashboards/{dashboard_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update a dashboard - /// - /// You can use this function to change the string and integer properties of - /// a dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components - /// cannot be modified by this function - use the update functions for the respective - /// nested object types (like [update_dashboard_filter()](#!/3.1/Dashboard/update_dashboard_filter) to change a filter) - /// to modify nested objects referenced by a dashboard. - /// - /// If you receive a 422 error response when updating a dashboard, be sure to look at the - /// response body for information about exactly which fields are missing or contain invalid data. - /// - /// PATCH /dashboards/{dashboard_id} -> Dashboard - /// - /// Dashboard Dashboard (application/json) - /// - /// Id of dashboard - public async Task> update_dashboard( - string dashboard_id, - WriteDashboard body, - ITransportSettings? options = null) -{ - dashboard_id = SdkUtils.EncodeParam(dashboard_id); - return await AuthRequest(HttpMethod.Patch, $"/dashboards/{dashboard_id}", null,body,options); - } - - /// ### Delete the dashboard with the specified id - /// - /// Permanently **deletes** a dashboard. (The dashboard cannot be recovered after this operation.) - /// - /// "Soft" delete or hide a dashboard by setting its `deleted` status to `True` with [update_dashboard()](#!/Dashboard/update_dashboard). - /// - /// Note: When a dashboard is deleted in the UI, it is soft deleted. Use this API call to permanently remove it, if desired. - /// - /// DELETE /dashboards/{dashboard_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of dashboard - public async Task> delete_dashboard( - string dashboard_id, - ITransportSettings? options = null) -{ - dashboard_id = SdkUtils.EncodeParam(dashboard_id); - return await AuthRequest(HttpMethod.Delete, $"/dashboards/{dashboard_id}", null,null,options); - } - - /// ### Get Aggregate Table LookML for Each Query on a Dahboard - /// - /// Returns a JSON object that contains the dashboard id and Aggregate Table lookml - /// - /// GET /dashboards/aggregate_table_lookml/{dashboard_id} -> DashboardAggregateTableLookml - /// - /// DashboardAggregateTableLookml JSON for Aggregate Table LookML (application/json) - /// - /// Id of dashboard - public async Task> dashboard_aggregate_table_lookml( - string dashboard_id, - ITransportSettings? options = null) -{ - dashboard_id = SdkUtils.EncodeParam(dashboard_id); - return await AuthRequest(HttpMethod.Get, $"/dashboards/aggregate_table_lookml/{dashboard_id}", null,null,options); - } - - /// ### Get lookml of a UDD - /// - /// Returns a JSON object that contains the dashboard id and the full lookml - /// - /// GET /dashboards/lookml/{dashboard_id} -> DashboardLookml - /// - /// DashboardLookml json of dashboard (application/json) - /// - /// Id of dashboard - public async Task> dashboard_lookml( - string dashboard_id, - ITransportSettings? options = null) -{ - dashboard_id = SdkUtils.EncodeParam(dashboard_id); - return await AuthRequest(HttpMethod.Get, $"/dashboards/lookml/{dashboard_id}", null,null,options); - } - - /// ### Search Dashboard Elements - /// - /// Returns an **array of DashboardElement objects** that match the specified search criteria. - /// - /// If multiple search params are given and `filter_or` is FALSE or not specified, - /// search params are combined in a logical AND operation. - /// Only rows that match *all* search param criteria will be returned. - /// - /// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - /// Results will include rows that match **any** of the search criteria. - /// - /// String search params use case-insensitive matching. - /// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - /// example="dan%" will match "danger" and "Danzig" but not "David" - /// example="D_m%" will match "Damage" and "dump" - /// - /// Integer search params can accept a single value or a comma separated list of values. The multiple - /// values will be combined under a logical OR operation - results will match at least one of - /// the given values. - /// - /// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - /// or exclude (respectively) rows where the column is null. - /// - /// Boolean search params accept only "true" and "false" as values. - /// - /// GET /dashboard_elements/search -> DashboardElement[] - /// - /// DashboardElement[] Dashboard elements (application/json) - /// - /// Select elements that refer to a given dashboard id - /// Select elements that refer to a given look id - /// Match the title of element - /// Select soft-deleted dashboard elements - /// Requested fields. - /// Combine given search criteria in a boolean OR expression - /// Fields to sort by. Sortable fields: [:look_id, :dashboard_id, :deleted, :title] - public async Task> search_dashboard_elements( - long? dashboard_id = null, - long? look_id = null, - string? title = null, - bool? deleted = null, - string? fields = null, - bool? filter_or = null, - string? sorts = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/dashboard_elements/search", new Values { - { "dashboard_id", dashboard_id }, - { "look_id", look_id }, - { "title", title }, - { "deleted", deleted }, - { "fields", fields }, - { "filter_or", filter_or }, - { "sorts", sorts }},null,options); - } - - /// ### Get information about the dashboard element with a specific id. - /// - /// GET /dashboard_elements/{dashboard_element_id} -> DashboardElement - /// - /// DashboardElement DashboardElement (application/json) - /// - /// Id of dashboard element - /// Requested fields. - public async Task> dashboard_element( - string dashboard_element_id, - string? fields = null, - ITransportSettings? options = null) -{ - dashboard_element_id = SdkUtils.EncodeParam(dashboard_element_id); - return await AuthRequest(HttpMethod.Get, $"/dashboard_elements/{dashboard_element_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update the dashboard element with a specific id. - /// - /// PATCH /dashboard_elements/{dashboard_element_id} -> DashboardElement - /// - /// DashboardElement DashboardElement (application/json) - /// - /// Id of dashboard element - /// Requested fields. - public async Task> update_dashboard_element( - string dashboard_element_id, - WriteDashboardElement body, - string? fields = null, - ITransportSettings? options = null) -{ - dashboard_element_id = SdkUtils.EncodeParam(dashboard_element_id); - return await AuthRequest(HttpMethod.Patch, $"/dashboard_elements/{dashboard_element_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Delete a dashboard element with a specific id. - /// - /// DELETE /dashboard_elements/{dashboard_element_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of dashboard element - public async Task> delete_dashboard_element( - string dashboard_element_id, - ITransportSettings? options = null) -{ - dashboard_element_id = SdkUtils.EncodeParam(dashboard_element_id); - return await AuthRequest(HttpMethod.Delete, $"/dashboard_elements/{dashboard_element_id}", null,null,options); - } - - /// ### Get information about all the dashboard elements on a dashboard with a specific id. - /// - /// GET /dashboards/{dashboard_id}/dashboard_elements -> DashboardElement[] - /// - /// DashboardElement[] DashboardElement (application/json) - /// - /// Id of dashboard - /// Requested fields. - public async Task> dashboard_dashboard_elements( - string dashboard_id, - string? fields = null, - ITransportSettings? options = null) -{ - dashboard_id = SdkUtils.EncodeParam(dashboard_id); - return await AuthRequest(HttpMethod.Get, $"/dashboards/{dashboard_id}/dashboard_elements", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a dashboard element on the dashboard with a specific id. - /// - /// POST /dashboard_elements -> DashboardElement - /// - /// DashboardElement DashboardElement (application/json) - /// - /// Requested fields. - /// Apply relevant filters on dashboard to this tile - public async Task> create_dashboard_element( - WriteDashboardElement body, - string? fields = null, - bool? apply_filters = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/dashboard_elements", new Values { - { "fields", fields }, - { "apply_filters", apply_filters }},body,options); - } - - /// ### Get information about the dashboard filters with a specific id. - /// - /// GET /dashboard_filters/{dashboard_filter_id} -> DashboardFilter - /// - /// DashboardFilter Dashboard Filter (application/json) - /// - /// Id of dashboard filters - /// Requested fields. - public async Task> dashboard_filter( - string dashboard_filter_id, - string? fields = null, - ITransportSettings? options = null) -{ - dashboard_filter_id = SdkUtils.EncodeParam(dashboard_filter_id); - return await AuthRequest(HttpMethod.Get, $"/dashboard_filters/{dashboard_filter_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update the dashboard filter with a specific id. - /// - /// PATCH /dashboard_filters/{dashboard_filter_id} -> DashboardFilter - /// - /// DashboardFilter Dashboard Filter (application/json) - /// - /// Id of dashboard filter - /// Requested fields. - public async Task> update_dashboard_filter( - string dashboard_filter_id, - WriteDashboardFilter body, - string? fields = null, - ITransportSettings? options = null) -{ - dashboard_filter_id = SdkUtils.EncodeParam(dashboard_filter_id); - return await AuthRequest(HttpMethod.Patch, $"/dashboard_filters/{dashboard_filter_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Delete a dashboard filter with a specific id. - /// - /// DELETE /dashboard_filters/{dashboard_filter_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of dashboard filter - public async Task> delete_dashboard_filter( - string dashboard_filter_id, - ITransportSettings? options = null) -{ - dashboard_filter_id = SdkUtils.EncodeParam(dashboard_filter_id); - return await AuthRequest(HttpMethod.Delete, $"/dashboard_filters/{dashboard_filter_id}", null,null,options); - } - - /// ### Get information about all the dashboard filters on a dashboard with a specific id. - /// - /// GET /dashboards/{dashboard_id}/dashboard_filters -> DashboardFilter[] - /// - /// DashboardFilter[] Dashboard Filter (application/json) - /// - /// Id of dashboard - /// Requested fields. - public async Task> dashboard_dashboard_filters( - string dashboard_id, - string? fields = null, - ITransportSettings? options = null) -{ - dashboard_id = SdkUtils.EncodeParam(dashboard_id); - return await AuthRequest(HttpMethod.Get, $"/dashboards/{dashboard_id}/dashboard_filters", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a dashboard filter on the dashboard with a specific id. - /// - /// POST /dashboard_filters -> DashboardFilter - /// - /// DashboardFilter Dashboard Filter (application/json) - /// - /// Requested fields - public async Task> create_dashboard_filter( - WriteCreateDashboardFilter body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/dashboard_filters", new Values { - { "fields", fields }},body,options); - } - - /// ### Get information about the dashboard elements with a specific id. - /// - /// GET /dashboard_layout_components/{dashboard_layout_component_id} -> DashboardLayoutComponent - /// - /// DashboardLayoutComponent DashboardLayoutComponent (application/json) - /// - /// Id of dashboard layout component - /// Requested fields. - public async Task> dashboard_layout_component( - string dashboard_layout_component_id, - string? fields = null, - ITransportSettings? options = null) -{ - dashboard_layout_component_id = SdkUtils.EncodeParam(dashboard_layout_component_id); - return await AuthRequest(HttpMethod.Get, $"/dashboard_layout_components/{dashboard_layout_component_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update the dashboard element with a specific id. - /// - /// PATCH /dashboard_layout_components/{dashboard_layout_component_id} -> DashboardLayoutComponent - /// - /// DashboardLayoutComponent DashboardLayoutComponent (application/json) - /// - /// Id of dashboard layout component - /// Requested fields. - public async Task> update_dashboard_layout_component( - string dashboard_layout_component_id, - WriteDashboardLayoutComponent body, - string? fields = null, - ITransportSettings? options = null) -{ - dashboard_layout_component_id = SdkUtils.EncodeParam(dashboard_layout_component_id); - return await AuthRequest(HttpMethod.Patch, $"/dashboard_layout_components/{dashboard_layout_component_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Get information about all the dashboard layout components for a dashboard layout with a specific id. - /// - /// GET /dashboard_layouts/{dashboard_layout_id}/dashboard_layout_components -> DashboardLayoutComponent[] - /// - /// DashboardLayoutComponent[] DashboardLayoutComponent (application/json) - /// - /// Id of dashboard layout component - /// Requested fields. - public async Task> dashboard_layout_dashboard_layout_components( - string dashboard_layout_id, - string? fields = null, - ITransportSettings? options = null) -{ - dashboard_layout_id = SdkUtils.EncodeParam(dashboard_layout_id); - return await AuthRequest(HttpMethod.Get, $"/dashboard_layouts/{dashboard_layout_id}/dashboard_layout_components", new Values { - { "fields", fields }},null,options); - } - - /// ### Get information about the dashboard layouts with a specific id. - /// - /// GET /dashboard_layouts/{dashboard_layout_id} -> DashboardLayout - /// - /// DashboardLayout DashboardLayout (application/json) - /// - /// Id of dashboard layouts - /// Requested fields. - public async Task> dashboard_layout( - string dashboard_layout_id, - string? fields = null, - ITransportSettings? options = null) -{ - dashboard_layout_id = SdkUtils.EncodeParam(dashboard_layout_id); - return await AuthRequest(HttpMethod.Get, $"/dashboard_layouts/{dashboard_layout_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update the dashboard layout with a specific id. - /// - /// PATCH /dashboard_layouts/{dashboard_layout_id} -> DashboardLayout - /// - /// DashboardLayout DashboardLayout (application/json) - /// - /// Id of dashboard layout - /// Requested fields. - public async Task> update_dashboard_layout( - string dashboard_layout_id, - WriteDashboardLayout body, - string? fields = null, - ITransportSettings? options = null) -{ - dashboard_layout_id = SdkUtils.EncodeParam(dashboard_layout_id); - return await AuthRequest(HttpMethod.Patch, $"/dashboard_layouts/{dashboard_layout_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Delete a dashboard layout with a specific id. - /// - /// DELETE /dashboard_layouts/{dashboard_layout_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of dashboard layout - public async Task> delete_dashboard_layout( - string dashboard_layout_id, - ITransportSettings? options = null) -{ - dashboard_layout_id = SdkUtils.EncodeParam(dashboard_layout_id); - return await AuthRequest(HttpMethod.Delete, $"/dashboard_layouts/{dashboard_layout_id}", null,null,options); - } - - /// ### Get information about all the dashboard elements on a dashboard with a specific id. - /// - /// GET /dashboards/{dashboard_id}/dashboard_layouts -> DashboardLayout[] - /// - /// DashboardLayout[] DashboardLayout (application/json) - /// - /// Id of dashboard - /// Requested fields. - public async Task> dashboard_dashboard_layouts( - string dashboard_id, - string? fields = null, - ITransportSettings? options = null) -{ - dashboard_id = SdkUtils.EncodeParam(dashboard_id); - return await AuthRequest(HttpMethod.Get, $"/dashboards/{dashboard_id}/dashboard_layouts", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a dashboard layout on the dashboard with a specific id. - /// - /// POST /dashboard_layouts -> DashboardLayout - /// - /// DashboardLayout DashboardLayout (application/json) - /// - /// Requested fields. - public async Task> create_dashboard_layout( - WriteDashboardLayout body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/dashboard_layouts", new Values { - { "fields", fields }},body,options); - } - - #endregion Dashboard: Manage Dashboards - - #region DataAction: Run Data Actions - - /// Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action. - /// - /// POST /data_actions -> DataActionResponse - /// - /// DataActionResponse Data Action Response (application/json) - /// - public async Task> perform_data_action( - DataActionRequest body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/data_actions", null,body,options); - } - - /// For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user. - /// - /// POST /data_actions/form -> DataActionForm - /// - /// DataActionForm Data Action Form (application/json) - /// - public async Task> fetch_remote_data_action_form( - StringDictionary body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/data_actions/form", null,body,options); - } - - #endregion DataAction: Run Data Actions - - #region Datagroup: Manage Datagroups - - /// ### Get information about all datagroups. - /// - /// GET /datagroups -> Datagroup[] - /// - /// Datagroup[] Datagroup (application/json) - /// - public async Task> all_datagroups( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/datagroups", null,null,options); - } - - /// ### Get information about a datagroup. - /// - /// GET /datagroups/{datagroup_id} -> Datagroup - /// - /// Datagroup Datagroup (application/json) - /// - /// ID of datagroup. - public async Task> datagroup( - string datagroup_id, - ITransportSettings? options = null) -{ - datagroup_id = SdkUtils.EncodeParam(datagroup_id); - return await AuthRequest(HttpMethod.Get, $"/datagroups/{datagroup_id}", null,null,options); - } - - /// ### Update a datagroup using the specified params. - /// - /// PATCH /datagroups/{datagroup_id} -> Datagroup - /// - /// Datagroup Datagroup (application/json) - /// - /// ID of datagroup. - public async Task> update_datagroup( - string datagroup_id, - WriteDatagroup body, - ITransportSettings? options = null) -{ - datagroup_id = SdkUtils.EncodeParam(datagroup_id); - return await AuthRequest(HttpMethod.Patch, $"/datagroups/{datagroup_id}", null,body,options); - } - - #endregion Datagroup: Manage Datagroups - - #region DerivedTable: View Derived Table graphs - - /// ### Discover information about derived tables - /// - /// GET /derived_table/graph/model/{model} -> DependencyGraph - /// - /// DependencyGraph Derived Table (application/json) - /// - /// The name of the Lookml model. - /// The format of the graph. Valid values are [dot]. Default is `dot` - /// Color denoting the build status of the graph. Grey = not built, green = built, yellow = building, red = error. - public async Task> graph_derived_tables_for_model( - string model, - string? format = null, - string? color = null, - ITransportSettings? options = null) -{ - model = SdkUtils.EncodeParam(model); - return await AuthRequest(HttpMethod.Get, $"/derived_table/graph/model/{model}", new Values { - { "format", format }, - { "color", color }},null,options); - } - - /// ### Get the subgraph representing this derived table and its dependencies. - /// - /// GET /derived_table/graph/view/{view} -> DependencyGraph - /// - /// DependencyGraph Graph of the derived table component, represented in the DOT language. (application/json) - /// - /// The derived table's view name. - /// The models where this derived table is defined. - /// The model directory to look in, either `dev` or `production`. - public async Task> graph_derived_tables_for_view( - string view, - string? models = null, - string? workspace = null, - ITransportSettings? options = null) -{ - view = SdkUtils.EncodeParam(view); - return await AuthRequest(HttpMethod.Get, $"/derived_table/graph/view/{view}", new Values { - { "models", models }, - { "workspace", workspace }},null,options); - } - - /// Enqueue materialization for a PDT with the given model name and view name - /// - /// GET /derived_table/{model_name}/{view_name}/start -> MaterializePDT - /// - /// MaterializePDT Derived Table (application/json) - /// - /// The model of the PDT to start building. - /// The view name of the PDT to start building. - /// Force rebuild of required dependent PDTs, even if they are already materialized. - /// Force involved incremental PDTs to fully re-materialize. - /// Workspace in which to materialize selected PDT ('dev' or default 'production'). - /// The source of this request. - public async Task> start_pdt_build( - string model_name, - string view_name, - string? force_rebuild = null, - string? force_full_incremental = null, - string? workspace = null, - string? source = null, - ITransportSettings? options = null) -{ - model_name = SdkUtils.EncodeParam(model_name); - view_name = SdkUtils.EncodeParam(view_name); - return await AuthRequest(HttpMethod.Get, $"/derived_table/{model_name}/{view_name}/start", new Values { - { "force_rebuild", force_rebuild }, - { "force_full_incremental", force_full_incremental }, - { "workspace", workspace }, - { "source", source }},null,options); - } - - /// Check status of PDT materialization - /// - /// GET /derived_table/{materialization_id}/status -> MaterializePDT - /// - /// MaterializePDT Derived Table (application/json) - /// - /// The materialization id to check status for. - public async Task> check_pdt_build( - string materialization_id, - ITransportSettings? options = null) -{ - materialization_id = SdkUtils.EncodeParam(materialization_id); - return await AuthRequest(HttpMethod.Get, $"/derived_table/{materialization_id}/status", null,null,options); - } - - /// Stop a PDT materialization - /// - /// GET /derived_table/{materialization_id}/stop -> MaterializePDT - /// - /// MaterializePDT Derived Table (application/json) - /// - /// The materialization id to stop. - /// The source of this request. - public async Task> stop_pdt_build( - string materialization_id, - string? source = null, - ITransportSettings? options = null) -{ - materialization_id = SdkUtils.EncodeParam(materialization_id); - return await AuthRequest(HttpMethod.Get, $"/derived_table/{materialization_id}/stop", new Values { - { "source", source }},null,options); - } - - #endregion DerivedTable: View Derived Table graphs - - #region Folder: Manage Folders - - /// Search for folders by creator id, parent id, name, etc - /// - /// GET /folders/search -> Folder[] - /// - /// Folder[] folders (application/json) - /// - /// Requested fields. - /// Return only page N of paginated results - /// Return N rows of data per page - /// Number of results to return. (used with offset and takes priority over page and per_page) - /// Number of results to skip before returning any. (used with limit and takes priority over page and per_page) - /// Fields to sort by. - /// Match Space title. - /// Match Space id - /// Filter on a children of a particular folder. - /// Filter on folder created by a particular user. - /// Combine given search criteria in a boolean OR expression - /// Match is shared root - /// Match is users root - public async Task> search_folders( - string? fields = null, - long? page = null, - long? per_page = null, - long? limit = null, - long? offset = null, - string? sorts = null, - string? name = null, - long? id = null, - string? parent_id = null, - string? creator_id = null, - bool? filter_or = null, - bool? is_shared_root = null, - bool? is_users_root = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/folders/search", new Values { - { "fields", fields }, - { "page", page }, - { "per_page", per_page }, - { "limit", limit }, - { "offset", offset }, - { "sorts", sorts }, - { "name", name }, - { "id", id }, - { "parent_id", parent_id }, - { "creator_id", creator_id }, - { "filter_or", filter_or }, - { "is_shared_root", is_shared_root }, - { "is_users_root", is_users_root }},null,options); - } - - /// ### Get information about the folder with a specific id. - /// - /// GET /folders/{folder_id} -> Folder - /// - /// Folder Folder (application/json) - /// - /// Id of folder - /// Requested fields. - public async Task> folder( - string folder_id, - string? fields = null, - ITransportSettings? options = null) -{ - folder_id = SdkUtils.EncodeParam(folder_id); - return await AuthRequest(HttpMethod.Get, $"/folders/{folder_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update the folder with a specific id. - /// - /// PATCH /folders/{folder_id} -> Folder - /// - /// Folder Folder (application/json) - /// - /// Id of folder - public async Task> update_folder( - string folder_id, - UpdateFolder body, - ITransportSettings? options = null) -{ - folder_id = SdkUtils.EncodeParam(folder_id); - return await AuthRequest(HttpMethod.Patch, $"/folders/{folder_id}", null,body,options); - } - - /// ### Delete the folder with a specific id including any children folders. - /// **DANGER** this will delete all looks and dashboards in the folder. - /// - /// DELETE /folders/{folder_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of folder - public async Task> delete_folder( - string folder_id, - ITransportSettings? options = null) -{ - folder_id = SdkUtils.EncodeParam(folder_id); - return await AuthRequest(HttpMethod.Delete, $"/folders/{folder_id}", null,null,options); - } - - /// ### Get information about all folders. - /// - /// In API 3.x, this will not return empty personal folders, unless they belong to the calling user, - /// or if they contain soft-deleted content. - /// - /// In API 4.0+, all personal folders will be returned. - /// - /// GET /folders -> Folder[] - /// - /// Folder[] Folder (application/json) - /// - /// Requested fields. - public async Task> all_folders( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/folders", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a folder with specified information. - /// - /// Caller must have permission to edit the parent folder and to create folders, otherwise the request - /// returns 404 Not Found. - /// - /// POST /folders -> Folder - /// - /// Folder Folder (application/json) - /// - public async Task> create_folder( - CreateFolder body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/folders", null,body,options); - } - - /// ### Get the children of a folder. - /// - /// GET /folders/{folder_id}/children -> Folder[] - /// - /// Folder[] Folders (application/json) - /// - /// Id of folder - /// Requested fields. - /// Return only page N of paginated results - /// Return N rows of data per page - /// Fields to sort by. - public async Task> folder_children( - string folder_id, - string? fields = null, - long? page = null, - long? per_page = null, - string? sorts = null, - ITransportSettings? options = null) -{ - folder_id = SdkUtils.EncodeParam(folder_id); - return await AuthRequest(HttpMethod.Get, $"/folders/{folder_id}/children", new Values { - { "fields", fields }, - { "page", page }, - { "per_page", per_page }, - { "sorts", sorts }},null,options); - } - - /// ### Search the children of a folder - /// - /// GET /folders/{folder_id}/children/search -> Folder[] - /// - /// Folder[] Folders (application/json) - /// - /// Id of folder - /// Requested fields. - /// Fields to sort by. - /// Match folder name. - public async Task> folder_children_search( - string folder_id, - string? fields = null, - string? sorts = null, - string? name = null, - ITransportSettings? options = null) -{ - folder_id = SdkUtils.EncodeParam(folder_id); - return await AuthRequest(HttpMethod.Get, $"/folders/{folder_id}/children/search", new Values { - { "fields", fields }, - { "sorts", sorts }, - { "name", name }},null,options); - } - - /// ### Get the parent of a folder - /// - /// GET /folders/{folder_id}/parent -> Folder - /// - /// Folder Folder (application/json) - /// - /// Id of folder - /// Requested fields. - public async Task> folder_parent( - string folder_id, - string? fields = null, - ITransportSettings? options = null) -{ - folder_id = SdkUtils.EncodeParam(folder_id); - return await AuthRequest(HttpMethod.Get, $"/folders/{folder_id}/parent", new Values { - { "fields", fields }},null,options); - } - - /// ### Get the ancestors of a folder - /// - /// GET /folders/{folder_id}/ancestors -> Folder[] - /// - /// Folder[] Folders (application/json) - /// - /// Id of folder - /// Requested fields. - public async Task> folder_ancestors( - string folder_id, - string? fields = null, - ITransportSettings? options = null) -{ - folder_id = SdkUtils.EncodeParam(folder_id); - return await AuthRequest(HttpMethod.Get, $"/folders/{folder_id}/ancestors", new Values { - { "fields", fields }},null,options); - } - - /// ### Get all looks in a folder. - /// In API 3.x, this will return all looks in a folder, including looks in the trash. - /// In API 4.0+, all looks in a folder will be returned, excluding looks in the trash. - /// - /// GET /folders/{folder_id}/looks -> LookWithQuery[] - /// - /// LookWithQuery[] Looks (application/json) - /// - /// Id of folder - /// Requested fields. - public async Task> folder_looks( - string folder_id, - string? fields = null, - ITransportSettings? options = null) -{ - folder_id = SdkUtils.EncodeParam(folder_id); - return await AuthRequest(HttpMethod.Get, $"/folders/{folder_id}/looks", new Values { - { "fields", fields }},null,options); - } - - /// ### Get the dashboards in a folder - /// - /// GET /folders/{folder_id}/dashboards -> Dashboard[] - /// - /// Dashboard[] Dashboard (application/json) - /// - /// Id of folder - /// Requested fields. - public async Task> folder_dashboards( - string folder_id, - string? fields = null, - ITransportSettings? options = null) -{ - folder_id = SdkUtils.EncodeParam(folder_id); - return await AuthRequest(HttpMethod.Get, $"/folders/{folder_id}/dashboards", new Values { - { "fields", fields }},null,options); - } - - #endregion Folder: Manage Folders - - #region Group: Manage Groups - - /// ### Get information about all groups. - /// - /// GET /groups -> Group[] - /// - /// Group[] Group (application/json) - /// - /// Requested fields. - /// Return only page N of paginated results - /// Return N rows of data per page - /// Fields to sort by. - /// Optional of ids to get specific groups. - /// Id of content metadata to which groups must have access. - /// Select only groups that either can/cannot be given access to content. - public async Task> all_groups( - string? fields = null, - long? page = null, - long? per_page = null, - string? sorts = null, - DelimArray? ids = null, - long? content_metadata_id = null, - bool? can_add_to_content_metadata = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/groups", new Values { - { "fields", fields }, - { "page", page }, - { "per_page", per_page }, - { "sorts", sorts }, - { "ids", ids }, - { "content_metadata_id", content_metadata_id }, - { "can_add_to_content_metadata", can_add_to_content_metadata }},null,options); - } - - /// ### Creates a new group (admin only). - /// - /// POST /groups -> Group - /// - /// Group Group (application/json) - /// - /// Requested fields. - public async Task> create_group( - WriteGroup body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/groups", new Values { - { "fields", fields }},body,options); - } - - /// ### Search groups - /// - /// Returns all group records that match the given search criteria. - /// - /// If multiple search params are given and `filter_or` is FALSE or not specified, - /// search params are combined in a logical AND operation. - /// Only rows that match *all* search param criteria will be returned. - /// - /// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - /// Results will include rows that match **any** of the search criteria. - /// - /// String search params use case-insensitive matching. - /// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - /// example="dan%" will match "danger" and "Danzig" but not "David" - /// example="D_m%" will match "Damage" and "dump" - /// - /// Integer search params can accept a single value or a comma separated list of values. The multiple - /// values will be combined under a logical OR operation - results will match at least one of - /// the given values. - /// - /// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - /// or exclude (respectively) rows where the column is null. - /// - /// Boolean search params accept only "true" and "false" as values. - /// - /// GET /groups/search -> Group[] - /// - /// Group[] Group (application/json) - /// - /// Requested fields. - /// Number of results to return (used with `offset`). - /// Number of results to skip before returning any (used with `limit`). - /// Fields to sort by. - /// Combine given search criteria in a boolean OR expression - /// Match group id. - /// Match group name. - /// Match group external_group_id. - /// Match group externally_managed. - /// Match group externally_orphaned. - public async Task> search_groups( - string? fields = null, - long? limit = null, - long? offset = null, - string? sorts = null, - bool? filter_or = null, - long? id = null, - string? name = null, - string? external_group_id = null, - bool? externally_managed = null, - bool? externally_orphaned = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/groups/search", new Values { - { "fields", fields }, - { "limit", limit }, - { "offset", offset }, - { "sorts", sorts }, - { "filter_or", filter_or }, - { "id", id }, - { "name", name }, - { "external_group_id", external_group_id }, - { "externally_managed", externally_managed }, - { "externally_orphaned", externally_orphaned }},null,options); - } - - /// ### Get information about a group. - /// - /// GET /groups/{group_id} -> Group - /// - /// Group Group (application/json) - /// - /// Id of group - /// Requested fields. - public async Task> group( - long group_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/groups/{group_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Updates the a group (admin only). - /// - /// PATCH /groups/{group_id} -> Group - /// - /// Group Group (application/json) - /// - /// Id of group - /// Requested fields. - public async Task> update_group( - long group_id, - WriteGroup body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/groups/{group_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Deletes a group (admin only). - /// - /// DELETE /groups/{group_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of group - public async Task> delete_group( - long group_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/groups/{group_id}", null,null,options); - } - - /// ### Get information about all the groups in a group - /// - /// GET /groups/{group_id}/groups -> Group[] - /// - /// Group[] All groups in group. (application/json) - /// - /// Id of group - /// Requested fields. - public async Task> all_group_groups( - long group_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/groups/{group_id}/groups", new Values { - { "fields", fields }},null,options); - } - - /// ### Adds a new group to a group. - /// - /// POST /groups/{group_id}/groups -> Group - /// - /// Group Added group. (application/json) - /// - /// Id of group - public async Task> add_group_group( - long group_id, - GroupIdForGroupInclusion body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, $"/groups/{group_id}/groups", null,body,options); - } - - /// ### Get information about all the users directly included in a group. - /// - /// GET /groups/{group_id}/users -> User[] - /// - /// User[] All users in group. (application/json) - /// - /// Id of group - /// Requested fields. - /// Return only page N of paginated results - /// Return N rows of data per page - /// Fields to sort by. - public async Task> all_group_users( - long group_id, - string? fields = null, - long? page = null, - long? per_page = null, - string? sorts = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/groups/{group_id}/users", new Values { - { "fields", fields }, - { "page", page }, - { "per_page", per_page }, - { "sorts", sorts }},null,options); - } - - /// ### Adds a new user to a group. - /// - /// POST /groups/{group_id}/users -> User - /// - /// User Added user. (application/json) - /// - /// Id of group - public async Task> add_group_user( - long group_id, - GroupIdForGroupUserInclusion body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, $"/groups/{group_id}/users", null,body,options); - } - - /// ### Removes a user from a group. - /// - /// DELETE /groups/{group_id}/users/{user_id} -> void - /// - /// void User successfully removed from group () - /// - /// Id of group - /// Id of user to remove from group - public async Task> delete_group_user( - long group_id, - long user_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/groups/{group_id}/users/{user_id}", null,null,options); - } - - /// ### Removes a group from a group. - /// - /// DELETE /groups/{group_id}/groups/{deleting_group_id} -> void - /// - /// void Group successfully deleted () - /// - /// Id of group - /// Id of group to delete - public async Task> delete_group_from_group( - long group_id, - long deleting_group_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/groups/{group_id}/groups/{deleting_group_id}", null,null,options); - } - - /// ### Set the value of a user attribute for a group. - /// - /// For information about how user attribute values are calculated, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values). - /// - /// PATCH /groups/{group_id}/attribute_values/{user_attribute_id} -> UserAttributeGroupValue - /// - /// UserAttributeGroupValue Group value object. (application/json) - /// - /// Id of group - /// Id of user attribute - public async Task> update_user_attribute_group_value( - long group_id, - long user_attribute_id, - UserAttributeGroupValue body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/groups/{group_id}/attribute_values/{user_attribute_id}", null,body,options); - } - - /// ### Remove a user attribute value from a group. - /// - /// DELETE /groups/{group_id}/attribute_values/{user_attribute_id} -> void - /// - /// void Value successfully unset () - /// - /// Id of group - /// Id of user attribute - public async Task> delete_user_attribute_group_value( - long group_id, - long user_attribute_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/groups/{group_id}/attribute_values/{user_attribute_id}", null,null,options); - } - - #endregion Group: Manage Groups - - #region Homepage: Manage Homepage - - /// ### Get information about all homepages. - /// - /// GET /homepages -> Homepage[] - /// - /// Homepage[] Homepage (application/json) - /// - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> all_homepages( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/homepages", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a new homepage. - /// - /// POST /homepages -> Homepage - /// - /// Homepage Homepage (application/json) - /// - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> create_homepage( - WriteHomepage body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/homepages", new Values { - { "fields", fields }},body,options); - } - - /// ### Search Homepages - /// - /// If multiple search params are given and `filter_or` is FALSE or not specified, - /// search params are combined in a logical AND operation. - /// Only rows that match *all* search param criteria will be returned. - /// - /// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - /// Results will include rows that match **any** of the search criteria. - /// - /// String search params use case-insensitive matching. - /// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - /// example="dan%" will match "danger" and "Danzig" but not "David" - /// example="D_m%" will match "Damage" and "dump" - /// - /// Integer search params can accept a single value or a comma separated list of values. The multiple - /// values will be combined under a logical OR operation - results will match at least one of - /// the given values. - /// - /// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - /// or exclude (respectively) rows where the column is null. - /// - /// Boolean search params accept only "true" and "false" as values. - /// - /// GET /homepages/search -> Homepage[] - /// - /// Homepage[] homepages (application/json) - /// - /// Matches homepage title. - /// Matches the timestamp for when the homepage was created. - /// The first name of the user who created this homepage. - /// The last name of the user who created this homepage. - /// Requested fields. - /// Return favorited homepages when true. - /// Filter on homepages created by a particular user. - /// The page to return. - /// The number of items in the returned page. - /// The number of items to skip before returning any. (used with limit and takes priority over page and per_page) - /// The maximum number of items to return. (used with offset and takes priority over page and per_page) - /// The fields to sort the results by. - /// Combine given search criteria in a boolean OR expression - [Obsolete("Deprecated")] - public async Task> search_homepages( - string? title = null, - string? created_at = null, - string? first_name = null, - string? last_name = null, - string? fields = null, - bool? favorited = null, - string? creator_id = null, - long? page = null, - long? per_page = null, - long? offset = null, - long? limit = null, - string? sorts = null, - bool? filter_or = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/homepages/search", new Values { - { "title", title }, - { "created_at", created_at }, - { "first_name", first_name }, - { "last_name", last_name }, - { "fields", fields }, - { "favorited", favorited }, - { "creator_id", creator_id }, - { "page", page }, - { "per_page", per_page }, - { "offset", offset }, - { "limit", limit }, - { "sorts", sorts }, - { "filter_or", filter_or }},null,options); - } - - /// ### Get information about a homepage. - /// - /// GET /homepages/{homepage_id} -> Homepage - /// - /// Homepage Homepage (application/json) - /// - /// Id of homepage - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> homepage( - long homepage_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/homepages/{homepage_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update a homepage definition. - /// - /// PATCH /homepages/{homepage_id} -> Homepage - /// - /// Homepage Homepage (application/json) - /// - /// Id of homepage - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> update_homepage( - long homepage_id, - WriteHomepage body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/homepages/{homepage_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Delete a homepage. - /// - /// DELETE /homepages/{homepage_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of homepage - [Obsolete("Deprecated")] - public async Task> delete_homepage( - long homepage_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/homepages/{homepage_id}", null,null,options); - } - - /// ### Get information about all homepage items. - /// - /// GET /homepage_items -> HomepageItem[] - /// - /// HomepageItem[] Homepage Item (application/json) - /// - /// Requested fields. - /// Fields to sort by. - /// Filter to a specific homepage section - [Obsolete("Deprecated")] - public async Task> all_homepage_items( - string? fields = null, - string? sorts = null, - string? homepage_section_id = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/homepage_items", new Values { - { "fields", fields }, - { "sorts", sorts }, - { "homepage_section_id", homepage_section_id }},null,options); - } - - /// ### Create a new homepage item. - /// - /// POST /homepage_items -> HomepageItem - /// - /// HomepageItem Homepage Item (application/json) - /// - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> create_homepage_item( - WriteHomepageItem body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/homepage_items", new Values { - { "fields", fields }},body,options); - } - - /// ### Get information about a homepage item. - /// - /// GET /homepage_items/{homepage_item_id} -> HomepageItem - /// - /// HomepageItem Homepage Item (application/json) - /// - /// Id of homepage item - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> homepage_item( - long homepage_item_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/homepage_items/{homepage_item_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update a homepage item definition. - /// - /// PATCH /homepage_items/{homepage_item_id} -> HomepageItem - /// - /// HomepageItem Homepage Item (application/json) - /// - /// Id of homepage item - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> update_homepage_item( - long homepage_item_id, - WriteHomepageItem body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/homepage_items/{homepage_item_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Delete a homepage item. - /// - /// DELETE /homepage_items/{homepage_item_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of homepage item - [Obsolete("Deprecated")] - public async Task> delete_homepage_item( - long homepage_item_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/homepage_items/{homepage_item_id}", null,null,options); - } - - /// ### Get information about all homepage sections. - /// - /// GET /homepage_sections -> HomepageSection[] - /// - /// HomepageSection[] Homepage section (application/json) - /// - /// Requested fields. - /// Fields to sort by. - [Obsolete("Deprecated")] - public async Task> all_homepage_sections( - string? fields = null, - string? sorts = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/homepage_sections", new Values { - { "fields", fields }, - { "sorts", sorts }},null,options); - } - - /// ### Create a new homepage section. - /// - /// POST /homepage_sections -> HomepageSection - /// - /// HomepageSection Homepage section (application/json) - /// - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> create_homepage_section( - WriteHomepageSection body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/homepage_sections", new Values { - { "fields", fields }},body,options); - } - - /// ### Get information about a homepage section. - /// - /// GET /homepage_sections/{homepage_section_id} -> HomepageSection - /// - /// HomepageSection Homepage section (application/json) - /// - /// Id of homepage section - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> homepage_section( - long homepage_section_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/homepage_sections/{homepage_section_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update a homepage section definition. - /// - /// PATCH /homepage_sections/{homepage_section_id} -> HomepageSection - /// - /// HomepageSection Homepage section (application/json) - /// - /// Id of homepage section - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> update_homepage_section( - long homepage_section_id, - WriteHomepageSection body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/homepage_sections/{homepage_section_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Delete a homepage section. - /// - /// DELETE /homepage_sections/{homepage_section_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of homepage section - [Obsolete("Deprecated")] - public async Task> delete_homepage_section( - long homepage_section_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/homepage_sections/{homepage_section_id}", null,null,options); - } - - /// ### Get information about the primary homepage's sections. - /// - /// GET /primary_homepage_sections -> HomepageSection[] - /// - /// HomepageSection[] Primary homepage section (application/json) - /// - /// Requested fields. - public async Task> all_primary_homepage_sections( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/primary_homepage_sections", new Values { - { "fields", fields }},null,options); - } - - #endregion Homepage: Manage Homepage - - #region Integration: Manage Integrations - - /// ### Get information about all Integration Hubs. - /// - /// GET /integration_hubs -> IntegrationHub[] - /// - /// IntegrationHub[] Integration Hub (application/json) - /// - /// Requested fields. - public async Task> all_integration_hubs( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/integration_hubs", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a new Integration Hub. - /// - /// This API is rate limited to prevent it from being used for SSRF attacks - /// - /// POST /integration_hubs -> IntegrationHub - /// - /// IntegrationHub Integration Hub (application/json) - /// - /// Requested fields. - public async Task> create_integration_hub( - WriteIntegrationHub body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/integration_hubs", new Values { - { "fields", fields }},body,options); - } - - /// ### Get information about a Integration Hub. - /// - /// GET /integration_hubs/{integration_hub_id} -> IntegrationHub - /// - /// IntegrationHub Integration Hub (application/json) - /// - /// Id of integration_hub - /// Requested fields. - public async Task> integration_hub( - long integration_hub_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/integration_hubs/{integration_hub_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update a Integration Hub definition. - /// - /// This API is rate limited to prevent it from being used for SSRF attacks - /// - /// PATCH /integration_hubs/{integration_hub_id} -> IntegrationHub - /// - /// IntegrationHub Integration Hub (application/json) - /// - /// Id of integration_hub - /// Requested fields. - public async Task> update_integration_hub( - long integration_hub_id, - WriteIntegrationHub body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/integration_hubs/{integration_hub_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Delete a Integration Hub. - /// - /// DELETE /integration_hubs/{integration_hub_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of integration_hub - public async Task> delete_integration_hub( - long integration_hub_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/integration_hubs/{integration_hub_id}", null,null,options); - } - - /// Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false. - /// - /// POST /integration_hubs/{integration_hub_id}/accept_legal_agreement -> IntegrationHub - /// - /// IntegrationHub Integration hub (application/json) - /// - /// Id of integration_hub - public async Task> accept_integration_hub_legal_agreement( - long integration_hub_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, $"/integration_hubs/{integration_hub_id}/accept_legal_agreement", null,null,options); - } - - /// ### Get information about all Integrations. - /// - /// GET /integrations -> Integration[] - /// - /// Integration[] Integration (application/json) - /// - /// Requested fields. - /// Filter to a specific provider - public async Task> all_integrations( - string? fields = null, - string? integration_hub_id = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/integrations", new Values { - { "fields", fields }, - { "integration_hub_id", integration_hub_id }},null,options); - } - - /// ### Get information about a Integration. - /// - /// GET /integrations/{integration_id} -> Integration - /// - /// Integration Integration (application/json) - /// - /// Id of integration - /// Requested fields. - public async Task> integration( - string integration_id, - string? fields = null, - ITransportSettings? options = null) -{ - integration_id = SdkUtils.EncodeParam(integration_id); - return await AuthRequest(HttpMethod.Get, $"/integrations/{integration_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update parameters on a Integration. - /// - /// PATCH /integrations/{integration_id} -> Integration - /// - /// Integration Integration (application/json) - /// - /// Id of integration - /// Requested fields. - public async Task> update_integration( - string integration_id, - WriteIntegration body, - string? fields = null, - ITransportSettings? options = null) -{ - integration_id = SdkUtils.EncodeParam(integration_id); - return await AuthRequest(HttpMethod.Patch, $"/integrations/{integration_id}", new Values { - { "fields", fields }},body,options); - } - - /// Returns the Integration form for presentation to the user. - /// - /// POST /integrations/{integration_id}/form -> DataActionForm - /// - /// DataActionForm Data Action Form (application/json) - /// - /// Id of integration - public async Task> fetch_integration_form( - string integration_id, - StringDictionary? body = null, - ITransportSettings? options = null) -{ - integration_id = SdkUtils.EncodeParam(integration_id); - return await AuthRequest(HttpMethod.Post, $"/integrations/{integration_id}/form", null,body,options); - } - - /// Tests the integration to make sure all the settings are working. - /// - /// POST /integrations/{integration_id}/test -> IntegrationTestResult - /// - /// IntegrationTestResult Test Result (application/json) - /// - /// Id of integration - public async Task> test_integration( - string integration_id, - ITransportSettings? options = null) -{ - integration_id = SdkUtils.EncodeParam(integration_id); - return await AuthRequest(HttpMethod.Post, $"/integrations/{integration_id}/test", null,null,options); - } - - #endregion Integration: Manage Integrations - - #region Look: Run and Manage Looks - - /// ### Get information about all active Looks - /// - /// Returns an array of **abbreviated Look objects** describing all the looks that the caller has access to. Soft-deleted Looks are **not** included. - /// - /// Get the **full details** of a specific look by id with [look(id)](#!/Look/look) - /// - /// Find **soft-deleted looks** with [search_looks()](#!/Look/search_looks) - /// - /// GET /looks -> Look[] - /// - /// Look[] Look (application/json) - /// - /// Requested fields. - public async Task> all_looks( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/looks", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a Look - /// - /// To create a look to display query data, first create the query with [create_query()](#!/Query/create_query) - /// then assign the query's id to the `query_id` property in the call to `create_look()`. - /// - /// To place the look into a particular space, assign the space's id to the `space_id` property - /// in the call to `create_look()`. - /// - /// POST /looks -> LookWithQuery - /// - /// LookWithQuery Look (application/json) - /// - /// Requested fields. - public async Task> create_look( - WriteLookWithQuery body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/looks", new Values { - { "fields", fields }},body,options); - } - - /// ### Search Looks - /// - /// Returns an **array of Look objects** that match the specified search criteria. - /// - /// If multiple search params are given and `filter_or` is FALSE or not specified, - /// search params are combined in a logical AND operation. - /// Only rows that match *all* search param criteria will be returned. - /// - /// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - /// Results will include rows that match **any** of the search criteria. - /// - /// String search params use case-insensitive matching. - /// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - /// example="dan%" will match "danger" and "Danzig" but not "David" - /// example="D_m%" will match "Damage" and "dump" - /// - /// Integer search params can accept a single value or a comma separated list of values. The multiple - /// values will be combined under a logical OR operation - results will match at least one of - /// the given values. - /// - /// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - /// or exclude (respectively) rows where the column is null. - /// - /// Boolean search params accept only "true" and "false" as values. - /// - /// - /// Get a **single look** by id with [look(id)](#!/Look/look) - /// - /// GET /looks/search -> Look[] - /// - /// Look[] looks (application/json) - /// - /// Match look id. - /// Match Look title. - /// Match Look description. - /// Select looks with a particular content favorite id - /// Select looks in a particular space. - /// Select looks created by a particular user. - /// Select looks with particular view_count value - /// Select soft-deleted looks - /// Select looks that reference a particular query by query_id - /// Exclude items that exist only in personal spaces other than the users - /// Requested fields. - /// Requested page. - /// Results per page. - /// One or more fields to sort results by. Sortable fields: [:title, :user_id, :id, :created_at, :space_id, :folder_id, :description, :updated_at, :last_updater_id, :view_count, :favorite_count, :content_favorite_id, :deleted, :deleted_at, :last_viewed_at, :last_accessed_at, :query_id] - /// Combine given search criteria in a boolean OR expression - public async Task> search_looks( - string? id = null, - string? title = null, - string? description = null, - long? content_favorite_id = null, - string? space_id = null, - string? user_id = null, - string? view_count = null, - bool? deleted = null, - long? query_id = null, - bool? curate = null, - string? fields = null, - long? page = null, - long? per_page = null, - string? sorts = null, - bool? filter_or = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/looks/search", new Values { - { "id", id }, - { "title", title }, - { "description", description }, - { "content_favorite_id", content_favorite_id }, - { "space_id", space_id }, - { "user_id", user_id }, - { "view_count", view_count }, - { "deleted", deleted }, - { "query_id", query_id }, - { "curate", curate }, - { "fields", fields }, - { "page", page }, - { "per_page", per_page }, - { "sorts", sorts }, - { "filter_or", filter_or }},null,options); - } - - /// ### Get a Look. - /// - /// Returns detailed information about a Look and its associated Query. - /// - /// GET /looks/{look_id} -> LookWithQuery - /// - /// LookWithQuery Look (application/json) - /// - /// Id of look - /// Requested fields. - public async Task> look( - long look_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/looks/{look_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Modify a Look - /// - /// Use this function to modify parts of a look. Property values given in a call to `update_look` are - /// applied to the existing look, so there's no need to include properties whose values are not changing. - /// It's best to specify only the properties you want to change and leave everything else out - /// of your `update_look` call. **Look properties marked 'read-only' will be ignored.** - /// - /// When a user deletes a look in the Looker UI, the look data remains in the database but is - /// marked with a deleted flag ("soft-deleted"). Soft-deleted looks can be undeleted (by an admin) - /// if the delete was in error. - /// - /// To soft-delete a look via the API, use [update_look()](#!/Look/update_look) to change the look's `deleted` property to `true`. - /// You can undelete a look by calling `update_look` to change the look's `deleted` property to `false`. - /// - /// Soft-deleted looks are excluded from the results of [all_looks()](#!/Look/all_looks) and [search_looks()](#!/Look/search_looks), so they - /// essentially disappear from view even though they still reside in the db. - /// In API 3.1 and later, you can pass `deleted: true` as a parameter to [search_looks()](#!/3.1/Look/search_looks) to list soft-deleted looks. - /// - /// NOTE: [delete_look()](#!/Look/delete_look) performs a "hard delete" - the look data is removed from the Looker - /// database and destroyed. There is no "undo" for `delete_look()`. - /// - /// PATCH /looks/{look_id} -> LookWithQuery - /// - /// LookWithQuery Look (application/json) - /// - /// Id of look - /// Requested fields. - public async Task> update_look( - long look_id, - WriteLookWithQuery body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/looks/{look_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Permanently Delete a Look - /// - /// This operation **permanently** removes a look from the Looker database. - /// - /// NOTE: There is no "undo" for this kind of delete. - /// - /// For information about soft-delete (which can be undone) see [update_look()](#!/Look/update_look). - /// - /// DELETE /looks/{look_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of look - public async Task> delete_look( - long look_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/looks/{look_id}", null,null,options); - } - - /// ### Run a Look - /// - /// Runs a given look's query and returns the results in the requested format. - /// - /// Supported formats: - /// - /// | result_format | Description - /// | :-----------: | :--- | - /// | json | Plain json - /// | json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query - /// | csv | Comma separated values with a header - /// | txt | Tab separated values with a header - /// | html | Simple html - /// | md | Simple markdown - /// | xlsx | MS Excel spreadsheet - /// | sql | Returns the generated SQL rather than running the query - /// | png | A PNG image of the visualization of the query - /// | jpg | A JPG image of the visualization of the query - /// - /// GET /looks/{look_id}/run/{result_format} -> string - /// - /// **Note**: Binary content may be returned by this method. - /// - /// - /// string Look (text) - /// string Look (application/json) - /// string Look (image/png) - /// string Look (image/jpeg) - /// - /// - /// Id of look - /// Format of result - /// Row limit (may override the limit in the saved query). - /// Apply model-specified formatting to each result. - /// Apply visualization options to results. - /// Get results from cache if available. - /// Render width for image formats. - /// Render height for image formats. - /// Generate drill links (only applicable to 'json_detail' format. - /// Force use of production models even if the user is in development mode. Note that this flag being false does not guarantee development models will be used. - /// Retrieve any results from cache even if the results have expired. - /// Prefix to use for drill links (url encoded). - /// Rebuild PDTS used in query. - /// Perform table calculations on query results - public async Task> run_look( - long look_id, - string result_format, - long? limit = null, - bool? apply_formatting = null, - bool? apply_vis = null, - bool? cache = null, - long? image_width = null, - long? image_height = null, - bool? generate_drill_links = null, - bool? force_production = null, - bool? cache_only = null, - string? path_prefix = null, - bool? rebuild_pdts = null, - bool? server_table_calcs = null, - ITransportSettings? options = null) where TSuccess : class -{ - result_format = SdkUtils.EncodeParam(result_format); - return await AuthRequest(HttpMethod.Get, $"/looks/{look_id}/run/{result_format}", new Values { - { "limit", limit }, - { "apply_formatting", apply_formatting }, - { "apply_vis", apply_vis }, - { "cache", cache }, - { "image_width", image_width }, - { "image_height", image_height }, - { "generate_drill_links", generate_drill_links }, - { "force_production", force_production }, - { "cache_only", cache_only }, - { "path_prefix", path_prefix }, - { "rebuild_pdts", rebuild_pdts }, - { "server_table_calcs", server_table_calcs }},null,options); - } - - #endregion Look: Run and Manage Looks - - #region LookmlModel: Manage LookML Models - - /// ### Get information about all lookml models. - /// - /// GET /lookml_models -> LookmlModel[] - /// - /// LookmlModel[] LookML Model (application/json) - /// - /// Requested fields. - public async Task> all_lookml_models( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/lookml_models", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a lookml model using the specified configuration. - /// - /// POST /lookml_models -> LookmlModel - /// - /// LookmlModel LookML Model (application/json) - /// - public async Task> create_lookml_model( - WriteLookmlModel body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/lookml_models", null,body,options); - } - - /// ### Get information about a lookml model. - /// - /// GET /lookml_models/{lookml_model_name} -> LookmlModel - /// - /// LookmlModel LookML Model (application/json) - /// - /// Name of lookml model. - /// Requested fields. - public async Task> lookml_model( - string lookml_model_name, - string? fields = null, - ITransportSettings? options = null) -{ - lookml_model_name = SdkUtils.EncodeParam(lookml_model_name); - return await AuthRequest(HttpMethod.Get, $"/lookml_models/{lookml_model_name}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update a lookml model using the specified configuration. - /// - /// PATCH /lookml_models/{lookml_model_name} -> LookmlModel - /// - /// LookmlModel LookML Model (application/json) - /// - /// Name of lookml model. - public async Task> update_lookml_model( - string lookml_model_name, - WriteLookmlModel body, - ITransportSettings? options = null) -{ - lookml_model_name = SdkUtils.EncodeParam(lookml_model_name); - return await AuthRequest(HttpMethod.Patch, $"/lookml_models/{lookml_model_name}", null,body,options); - } - - /// ### Delete a lookml model. - /// - /// DELETE /lookml_models/{lookml_model_name} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Name of lookml model. - public async Task> delete_lookml_model( - string lookml_model_name, - ITransportSettings? options = null) -{ - lookml_model_name = SdkUtils.EncodeParam(lookml_model_name); - return await AuthRequest(HttpMethod.Delete, $"/lookml_models/{lookml_model_name}", null,null,options); - } - - /// ### Get information about a lookml model explore. - /// - /// GET /lookml_models/{lookml_model_name}/explores/{explore_name} -> LookmlModelExplore - /// - /// LookmlModelExplore LookML Model Explore (application/json) - /// - /// Name of lookml model. - /// Name of explore. - /// Requested fields. - public async Task> lookml_model_explore( - string lookml_model_name, - string explore_name, - string? fields = null, - ITransportSettings? options = null) -{ - lookml_model_name = SdkUtils.EncodeParam(lookml_model_name); - explore_name = SdkUtils.EncodeParam(explore_name); - return await AuthRequest(HttpMethod.Get, $"/lookml_models/{lookml_model_name}/explores/{explore_name}", new Values { - { "fields", fields }},null,options); - } - - #endregion LookmlModel: Manage LookML Models - - #region Project: Manage Projects - - /// ### Get All Git Branches - /// - /// Returns a list of git branches in the project repository - /// - /// GET /projects/{project_id}/git_branches -> GitBranch[] - /// - /// GitBranch[] Git Branch (application/json) - /// - /// Project Id - public async Task> all_git_branches( - string project_id, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/git_branches", null,null,options); - } - - /// ### Get the Current Git Branch - /// - /// Returns the git branch currently checked out in the given project repository - /// - /// GET /projects/{project_id}/git_branch -> GitBranch - /// - /// GitBranch Git Branch (application/json) - /// - /// Project Id - public async Task> git_branch( - string project_id, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/git_branch", null,null,options); - } - - /// ### Checkout and/or reset --hard an existing Git Branch - /// - /// Only allowed in development mode - /// - Call `update_session` to select the 'dev' workspace. - /// - /// Checkout an existing branch if name field is different from the name of the currently checked out branch. - /// - /// Optionally specify a branch name, tag name or commit SHA to which the branch should be reset. - /// **DANGER** hard reset will be force pushed to the remote. Unsaved changes and commits may be permanently lost. - /// - /// PUT /projects/{project_id}/git_branch -> GitBranch - /// - /// GitBranch Git Branch (application/json) - /// - /// Project Id - public async Task> update_git_branch( - string project_id, - WriteGitBranch body, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Put, $"/projects/{project_id}/git_branch", null,body,options); - } - - /// ### Create and Checkout a Git Branch - /// - /// Creates and checks out a new branch in the given project repository - /// Only allowed in development mode - /// - Call `update_session` to select the 'dev' workspace. - /// - /// Optionally specify a branch name, tag name or commit SHA as the start point in the ref field. - /// If no ref is specified, HEAD of the current branch will be used as the start point for the new branch. - /// - /// POST /projects/{project_id}/git_branch -> GitBranch - /// - /// GitBranch Git Branch (application/json) - /// - /// Project Id - public async Task> create_git_branch( - string project_id, - WriteGitBranch body, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/git_branch", null,body,options); - } - - /// ### Get the specified Git Branch - /// - /// Returns the git branch specified in branch_name path param if it exists in the given project repository - /// - /// GET /projects/{project_id}/git_branch/{branch_name} -> GitBranch - /// - /// GitBranch Git Branch (application/json) - /// - /// Project Id - /// Branch Name - public async Task> find_git_branch( - string project_id, - string branch_name, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - branch_name = SdkUtils.EncodeParam(branch_name); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/git_branch/{branch_name}", null,null,options); - } - - /// ### Delete the specified Git Branch - /// - /// Delete git branch specified in branch_name path param from local and remote of specified project repository - /// - /// DELETE /projects/{project_id}/git_branch/{branch_name} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Project Id - /// Branch Name - public async Task> delete_git_branch( - string project_id, - string branch_name, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - branch_name = SdkUtils.EncodeParam(branch_name); - return await AuthRequest(HttpMethod.Delete, $"/projects/{project_id}/git_branch/{branch_name}", null,null,options); - } - - /// ### Deploy a Remote Branch or Ref to Production - /// - /// Git must have been configured and deploy permission required. - /// - /// Deploy is a one/two step process - /// 1. If this is the first deploy of this project, create the production project with git repository. - /// 2. Pull the branch or ref into the production project. - /// - /// Can only specify either a branch or a ref. - /// - /// POST /projects/{project_id}/deploy_ref_to_production -> string - /// - /// - /// string Project (application/json) - /// void Returns 204 if project was successfully deployed to production, otherwise 400 with an error message () - /// - /// - /// Id of project - /// Branch to deploy to production - /// Ref to deploy to production - public async Task> deploy_ref_to_production( - string project_id, - string? branch = null, - string? @ref = null, - ITransportSettings? options = null) where TSuccess : class -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/deploy_ref_to_production", new Values { - { "branch", branch }, - { "ref", @ref }},null,options); - } - - /// ### Deploy LookML from this Development Mode Project to Production - /// - /// Git must have been configured, must be in dev mode and deploy permission required - /// - /// Deploy is a two / three step process: - /// - /// 1. Push commits in current branch of dev mode project to the production branch (origin/master). - /// Note a. This step is skipped in read-only projects. - /// Note b. If this step is unsuccessful for any reason (e.g. rejected non-fastforward because production branch has - /// commits not in current branch), subsequent steps will be skipped. - /// 2. If this is the first deploy of this project, create the production project with git repository. - /// 3. Pull the production branch into the production project. - /// - /// POST /projects/{project_id}/deploy_to_production -> string - /// - /// - /// string Project (application/json) - /// void Returns 204 if project was successfully deployed to production, otherwise 400 with an error message () - /// - /// - /// Id of project - public async Task> deploy_to_production( - string project_id, - ITransportSettings? options = null) where TSuccess : class -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/deploy_to_production", null,null,options); - } - - /// ### Reset a project to the revision of the project that is in production. - /// - /// **DANGER** this will delete any changes that have not been pushed to a remote repository. - /// - /// POST /projects/{project_id}/reset_to_production -> string - /// - /// - /// string Project (application/json) - /// void Returns 204 if project was successfully reset, otherwise 400 with an error message () - /// - /// - /// Id of project - public async Task> reset_project_to_production( - string project_id, - ITransportSettings? options = null) where TSuccess : class -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/reset_to_production", null,null,options); - } - - /// ### Reset a project development branch to the revision of the project that is on the remote. - /// - /// **DANGER** this will delete any changes that have not been pushed to a remote repository. - /// - /// POST /projects/{project_id}/reset_to_remote -> string - /// - /// - /// string Project (application/json) - /// void Returns 204 if project was successfully reset, otherwise 400 with an error message () - /// - /// - /// Id of project - public async Task> reset_project_to_remote( - string project_id, - ITransportSettings? options = null) where TSuccess : class -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/reset_to_remote", null,null,options); - } - - /// ### Get All Projects - /// - /// Returns all projects visible to the current user - /// - /// GET /projects -> Project[] - /// - /// Project[] Project (application/json) - /// - /// Requested fields - public async Task> all_projects( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/projects", new Values { - { "fields", fields }},null,options); - } - - /// ### Create A Project - /// - /// dev mode required. - /// - Call `update_session` to select the 'dev' workspace. - /// - /// `name` is required. - /// `git_remote_url` is not allowed. To configure Git for the newly created project, follow the instructions in `update_project`. - /// - /// POST /projects -> Project - /// - /// Project Project (application/json) - /// - public async Task> create_project( - WriteProject body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/projects", null,body,options); - } - - /// ### Get A Project - /// - /// Returns the project with the given project id - /// - /// GET /projects/{project_id} -> Project - /// - /// Project Project (application/json) - /// - /// Project Id - /// Requested fields - public async Task> project( - string project_id, - string? fields = null, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update Project Configuration - /// - /// Apply changes to a project's configuration. - /// - /// - /// #### Configuring Git for a Project - /// - /// To set up a Looker project with a remote git repository, follow these steps: - /// - /// 1. Call `update_session` to select the 'dev' workspace. - /// 1. Call `create_git_deploy_key` to create a new deploy key for the project - /// 1. Copy the deploy key text into the remote git repository's ssh key configuration - /// 1. Call `update_project` to set project's `git_remote_url` ()and `git_service_name`, if necessary). - /// - /// When you modify a project's `git_remote_url`, Looker connects to the remote repository to fetch - /// metadata. The remote git repository MUST be configured with the Looker-generated deploy - /// key for this project prior to setting the project's `git_remote_url`. - /// - /// To set up a Looker project with a git repository residing on the Looker server (a 'bare' git repo): - /// - /// 1. Call `update_session` to select the 'dev' workspace. - /// 1. Call `update_project` setting `git_remote_url` to null and `git_service_name` to "bare". - /// - /// PATCH /projects/{project_id} -> Project - /// - /// Project Project (application/json) - /// - /// Project Id - /// Requested fields - public async Task> update_project( - string project_id, - WriteProject body, - string? fields = null, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Patch, $"/projects/{project_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Get A Projects Manifest object - /// - /// Returns the project with the given project id - /// - /// GET /projects/{project_id}/manifest -> Manifest - /// - /// Manifest Manifest (application/json) - /// - /// Project Id - public async Task> manifest( - string project_id, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/manifest", null,null,options); - } - - /// ### Git Deploy Key - /// - /// Returns the ssh public key previously created for a project's git repository. - /// - /// GET /projects/{project_id}/git/deploy_key -> string - /// - /// string The text of the public key portion of the deploy_key (text/plain) - /// - /// Project Id - public async Task> git_deploy_key( - string project_id, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/git/deploy_key", null,null,options); - } - - /// ### Create Git Deploy Key - /// - /// Create a public/private key pair for authenticating ssh git requests from Looker to a remote git repository - /// for a particular Looker project. - /// - /// Returns the public key of the generated ssh key pair. - /// - /// Copy this public key to your remote git repository's ssh keys configuration so that the remote git service can - /// validate and accept git requests from the Looker server. - /// - /// POST /projects/{project_id}/git/deploy_key -> string - /// - /// string Project (text/plain) - /// - /// Project Id - public async Task> create_git_deploy_key( - string project_id, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/git/deploy_key", null,null,options); - } - - /// ### Get Cached Project Validation Results - /// - /// Returns the cached results of a previous project validation calculation, if any. - /// Returns http status 204 No Content if no validation results exist. - /// - /// Validating the content of all the files in a project can be computationally intensive - /// for large projects. Use this API to simply fetch the results of the most recent - /// project validation rather than revalidating the entire project from scratch. - /// - /// A value of `"stale": true` in the response indicates that the project has changed since - /// the cached validation results were computed. The cached validation results may no longer - /// reflect the current state of the project. - /// - /// GET /projects/{project_id}/validate -> ProjectValidationCache - /// - /// - /// ProjectValidationCache Project validation results (application/json) - /// void Deleted () - /// - /// - /// Project Id - /// Requested fields - public async Task> project_validation_results( - string project_id, - string? fields = null, - ITransportSettings? options = null) where TSuccess : class -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/validate", new Values { - { "fields", fields }},null,options); - } - - /// ### Validate Project - /// - /// Performs lint validation of all lookml files in the project. - /// Returns a list of errors found, if any. - /// - /// Validating the content of all the files in a project can be computationally intensive - /// for large projects. For best performance, call `validate_project(project_id)` only - /// when you really want to recompute project validation. To quickly display the results of - /// the most recent project validation (without recomputing), use `project_validation_results(project_id)` - /// - /// POST /projects/{project_id}/validate -> ProjectValidation - /// - /// ProjectValidation Project validation results (application/json) - /// - /// Project Id - /// Requested fields - public async Task> validate_project( - string project_id, - string? fields = null, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/validate", new Values { - { "fields", fields }},null,options); - } - - /// ### Get Project Workspace - /// - /// Returns information about the state of the project files in the currently selected workspace - /// - /// GET /projects/{project_id}/current_workspace -> ProjectWorkspace - /// - /// ProjectWorkspace Project Workspace (application/json) - /// - /// Project Id - /// Requested fields - public async Task> project_workspace( - string project_id, - string? fields = null, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/current_workspace", new Values { - { "fields", fields }},null,options); - } - - /// ### Get All Project Files - /// - /// Returns a list of the files in the project - /// - /// GET /projects/{project_id}/files -> ProjectFile[] - /// - /// ProjectFile[] Project File (application/json) - /// - /// Project Id - /// Requested fields - public async Task> all_project_files( - string project_id, - string? fields = null, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/files", new Values { - { "fields", fields }},null,options); - } - - /// ### Get Project File Info - /// - /// Returns information about a file in the project - /// - /// GET /projects/{project_id}/files/file -> ProjectFile - /// - /// ProjectFile Project File (application/json) - /// - /// Project Id - /// File Id - /// Requested fields - public async Task> project_file( - string project_id, - string file_id, - string? fields = null, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/files/file", new Values { - { "file_id", file_id }, - { "fields", fields }},null,options); - } - - /// ### Get All Git Connection Tests - /// - /// dev mode required. - /// - Call `update_session` to select the 'dev' workspace. - /// - /// Returns a list of tests which can be run against a project's (or the dependency project for the provided remote_url) git connection. Call [Run Git Connection Test](#!/Project/run_git_connection_test) to execute each test in sequence. - /// - /// Tests are ordered by increasing specificity. Tests should be run in the order returned because later tests require functionality tested by tests earlier in the test list. - /// - /// For example, a late-stage test for write access is meaningless if connecting to the git server (an early test) is failing. - /// - /// GET /projects/{project_id}/git_connection_tests -> GitConnectionTest[] - /// - /// GitConnectionTest[] Git Connection Test (application/json) - /// - /// Project Id - /// (Optional: leave blank for root project) The remote url for remote dependency to test. - public async Task> all_git_connection_tests( - string project_id, - string? remote_url = null, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/git_connection_tests", new Values { - { "remote_url", remote_url }},null,options); - } - - /// ### Run a git connection test - /// - /// Run the named test on the git service used by this project (or the dependency project for the provided remote_url) and return the result. This - /// is intended to help debug git connections when things do not work properly, to give - /// more helpful information about why a git url is not working with Looker. - /// - /// Tests should be run in the order they are returned by [Get All Git Connection Tests](#!/Project/all_git_connection_tests). - /// - /// GET /projects/{project_id}/git_connection_tests/{test_id} -> GitConnectionTestResult - /// - /// GitConnectionTestResult Git Connection Test Result (application/json) - /// - /// Project Id - /// Test Id - /// (Optional: leave blank for root project) The remote url for remote dependency to test. - /// (Optional: leave blank for dev credentials) Whether to use git production credentials. - public async Task> run_git_connection_test( - string project_id, - string test_id, - string? remote_url = null, - string? use_production = null, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - test_id = SdkUtils.EncodeParam(test_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/git_connection_tests/{test_id}", new Values { - { "remote_url", remote_url }, - { "use_production", use_production }},null,options); - } - - /// ### Get All LookML Tests - /// - /// Returns a list of tests which can be run to validate a project's LookML code and/or the underlying data, - /// optionally filtered by the file id. - /// Call [Run LookML Test](#!/Project/run_lookml_test) to execute tests. - /// - /// GET /projects/{project_id}/lookml_tests -> LookmlTest[] - /// - /// LookmlTest[] LookML Test (application/json) - /// - /// Project Id - /// File Id - public async Task> all_lookml_tests( - string project_id, - string? file_id = null, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/lookml_tests", new Values { - { "file_id", file_id }},null,options); - } - - /// ### Run LookML Tests - /// - /// Runs all tests in the project, optionally filtered by file, test, and/or model. - /// - /// GET /projects/{project_id}/lookml_tests/run -> LookmlTestResult[] - /// - /// LookmlTestResult[] LookML Test Results (application/json) - /// - /// Project Id - /// File Name - /// Test Name - /// Model Name - public async Task> run_lookml_test( - string project_id, - string? file_id = null, - string? test = null, - string? model = null, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/lookml_tests/run", new Values { - { "file_id", file_id }, - { "test", test }, - { "model", model }},null,options); - } - - /// ### Creates a tag for the most recent commit, or a specific ref is a SHA is provided - /// - /// This is an internal-only, undocumented route. - /// - /// POST /projects/{project_id}/tag -> Project - /// - /// - /// Project Project (application/json) - /// void Returns 204 if tagging a ref was successful, otherwise 400 with an error message () - /// - /// - /// Project Id - /// (Optional): Commit Sha to Tag - /// Tag Name - /// (Optional): Tag Message - public async Task> tag_ref( - string project_id, - WriteProject body, - string? commit_sha = null, - string? tag_name = null, - string? tag_message = null, - ITransportSettings? options = null) where TSuccess : class -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/tag", new Values { - { "commit_sha", commit_sha }, - { "tag_name", tag_name }, - { "tag_message", tag_message }},body,options); - } - - /// ### Configure Repository Credential for a remote dependency - /// - /// Admin required. - /// - /// `root_project_id` is required. - /// `credential_id` is required. - /// - /// PUT /projects/{root_project_id}/credential/{credential_id} -> RepositoryCredential - /// - /// RepositoryCredential Repository Credential (application/json) - /// - /// Root Project Id - /// Credential Id - public async Task> update_repository_credential( - string root_project_id, - string credential_id, - WriteRepositoryCredential body, - ITransportSettings? options = null) -{ - root_project_id = SdkUtils.EncodeParam(root_project_id); - credential_id = SdkUtils.EncodeParam(credential_id); - return await AuthRequest(HttpMethod.Put, $"/projects/{root_project_id}/credential/{credential_id}", null,body,options); - } - - /// ### Repository Credential for a remote dependency - /// - /// Admin required. - /// - /// `root_project_id` is required. - /// `credential_id` is required. - /// - /// DELETE /projects/{root_project_id}/credential/{credential_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Root Project Id - /// Credential Id - public async Task> delete_repository_credential( - string root_project_id, - string credential_id, - ITransportSettings? options = null) -{ - root_project_id = SdkUtils.EncodeParam(root_project_id); - credential_id = SdkUtils.EncodeParam(credential_id); - return await AuthRequest(HttpMethod.Delete, $"/projects/{root_project_id}/credential/{credential_id}", null,null,options); - } - - /// ### Get all Repository Credentials for a project - /// - /// `root_project_id` is required. - /// - /// GET /projects/{root_project_id}/credentials -> RepositoryCredential[] - /// - /// RepositoryCredential[] Repository Credential (application/json) - /// - /// Root Project Id - public async Task> get_all_repository_credentials( - string root_project_id, - ITransportSettings? options = null) -{ - root_project_id = SdkUtils.EncodeParam(root_project_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{root_project_id}/credentials", null,null,options); - } - - #endregion Project: Manage Projects - - #region Query: Run and Manage Queries - - /// ### Create an async query task - /// - /// Creates a query task (job) to run a previously created query asynchronously. Returns a Query Task ID. - /// - /// Use [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task. - /// After the query task status reaches "Complete", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query. - /// - /// POST /query_tasks -> QueryTask - /// - /// QueryTask query_task (application/json) - /// - /// Row limit (may override the limit in the saved query). - /// Apply model-specified formatting to each result. - /// Apply visualization options to results. - /// Get results from cache if available. - /// Generate drill links (only applicable to 'json_detail' format. - /// Force use of production models even if the user is in development mode. Note that this flag being false does not guarantee development models will be used. - /// Retrieve any results from cache even if the results have expired. - /// Prefix to use for drill links (url encoded). - /// Rebuild PDTS used in query. - /// Perform table calculations on query results - /// Render width for image formats. - /// Render height for image formats. - /// Requested fields - public async Task> create_query_task( - WriteCreateQueryTask body, - long? limit = null, - bool? apply_formatting = null, - bool? apply_vis = null, - bool? cache = null, - bool? generate_drill_links = null, - bool? force_production = null, - bool? cache_only = null, - string? path_prefix = null, - bool? rebuild_pdts = null, - bool? server_table_calcs = null, - long? image_width = null, - long? image_height = null, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/query_tasks", new Values { - { "limit", limit }, - { "apply_formatting", apply_formatting }, - { "apply_vis", apply_vis }, - { "cache", cache }, - { "generate_drill_links", generate_drill_links }, - { "force_production", force_production }, - { "cache_only", cache_only }, - { "path_prefix", path_prefix }, - { "rebuild_pdts", rebuild_pdts }, - { "server_table_calcs", server_table_calcs }, - { "image_width", image_width }, - { "image_height", image_height }, - { "fields", fields }},body,options); - } - - /// ### Fetch results of multiple async queries - /// - /// Returns the results of multiple async queries in one request. - /// - /// For Query Tasks that are not completed, the response will include the execution status of the Query Task but will not include query results. - /// Query Tasks whose results have expired will have a status of 'expired'. - /// If the user making the API request does not have sufficient privileges to view a Query Task result, the result will have a status of 'missing' - /// - /// GET /query_tasks/multi_results -> StringDictionary - /// - /// StringDictionary Multiple query results (application/json) - /// - /// List of Query Task IDs - public async Task, Exception>> query_task_multi_results( - DelimArray query_task_ids, - ITransportSettings? options = null) -{ - return await AuthRequest, Exception>(HttpMethod.Get, "/query_tasks/multi_results", new Values { - { "query_task_ids", query_task_ids }},null,options); - } - - /// ### Get Query Task details - /// - /// Use this function to check the status of an async query task. After the status - /// reaches "Complete", you can call [query_task_results(query_task_id)](#!/Query/query_task_results) to - /// retrieve the results of the query. - /// - /// Use [create_query_task()](#!/Query/create_query_task) to create an async query task. - /// - /// GET /query_tasks/{query_task_id} -> QueryTask - /// - /// QueryTask query_task (application/json) - /// - /// ID of the Query Task - /// Requested fields. - public async Task> query_task( - string query_task_id, - string? fields = null, - ITransportSettings? options = null) -{ - query_task_id = SdkUtils.EncodeParam(query_task_id); - return await AuthRequest(HttpMethod.Get, $"/query_tasks/{query_task_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Get Async Query Results - /// - /// Returns the results of an async query task if the query has completed. - /// - /// If the query task is still running or waiting to run, this function returns 204 No Content. - /// - /// If the query task ID is invalid or the cached results of the query task have expired, this function returns 404 Not Found. - /// - /// Use [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task - /// Call query_task_results only after the query task status reaches "Complete". - /// - /// You can also use [query_task_multi_results()](#!/Query/query_task_multi_results) retrieve the - /// results of multiple async query tasks at the same time. - /// - /// #### SQL Error Handling: - /// If the query fails due to a SQL db error, how this is communicated depends on the result_format you requested in `create_query_task()`. - /// - /// For `json_detail` result_format: `query_task_results()` will respond with HTTP status '200 OK' and db SQL error info - /// will be in the `errors` property of the response object. The 'data' property will be empty. - /// - /// For all other result formats: `query_task_results()` will respond with HTTP status `400 Bad Request` and some db SQL error info - /// will be in the message of the 400 error response, but not as detailed as expressed in `json_detail.errors`. - /// These data formats can only carry row data, and error info is not row data. - /// - /// GET /query_tasks/{query_task_id}/results -> string - /// - /// - /// string The query results. (text) - /// string The query results. (application/json) - /// string The query is not finished (text) - /// string The query is not finished (application/json) - /// - /// - /// ID of the Query Task - public async Task> query_task_results( - string query_task_id, - ITransportSettings? options = null) where TSuccess : class -{ - query_task_id = SdkUtils.EncodeParam(query_task_id); - return await AuthRequest(HttpMethod.Get, $"/query_tasks/{query_task_id}/results", null,null,options); - } - - /// ### Get a previously created query by id. - /// - /// A Looker query object includes the various parameters that define a database query that has been run or - /// could be run in the future. These parameters include: model, view, fields, filters, pivots, etc. - /// Query *results* are not part of the query object. - /// - /// Query objects are unique and immutable. Query objects are created automatically in Looker as users explore data. - /// Looker does not delete them; they become part of the query history. When asked to create a query for - /// any given set of parameters, Looker will first try to find an existing query object with matching - /// parameters and will only create a new object when an appropriate object can not be found. - /// - /// This 'get' method is used to get the details about a query for a given id. See the other methods here - /// to 'create' and 'run' queries. - /// - /// Note that some fields like 'filter_config' and 'vis_config' etc are specific to how the Looker UI - /// builds queries and visualizations and are not generally useful for API use. They are not required when - /// creating new queries and can usually just be ignored. - /// - /// GET /queries/{query_id} -> Query - /// - /// Query Query (application/json) - /// - /// Id of query - /// Requested fields. - public async Task> query( - long query_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/queries/{query_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Get the query for a given query slug. - /// - /// This returns the query for the 'slug' in a query share URL. - /// - /// The 'slug' is a randomly chosen short string that is used as an alternative to the query's id value - /// for use in URLs etc. This method exists as a convenience to help you use the API to 'find' queries that - /// have been created using the Looker UI. - /// - /// You can use the Looker explore page to build a query and then choose the 'Share' option to - /// show the share url for the query. Share urls generally look something like 'https://looker.yourcompany/x/vwGSbfc'. - /// The trailing 'vwGSbfc' is the share slug. You can pass that string to this api method to get details about the query. - /// Those details include the 'id' that you can use to run the query. Or, you can copy the query body - /// (perhaps with your own modification) and use that as the basis to make/run new queries. - /// - /// This will also work with slugs from Looker explore urls like - /// 'https://looker.yourcompany/explore/ecommerce/orders?qid=aogBgL6o3cKK1jN3RoZl5s'. In this case - /// 'aogBgL6o3cKK1jN3RoZl5s' is the slug. - /// - /// GET /queries/slug/{slug} -> Query - /// - /// Query Query (application/json) - /// - /// Slug of query - /// Requested fields. - public async Task> query_for_slug( - string slug, - string? fields = null, - ITransportSettings? options = null) -{ - slug = SdkUtils.EncodeParam(slug); - return await AuthRequest(HttpMethod.Get, $"/queries/slug/{slug}", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a query. - /// - /// This allows you to create a new query that you can later run. Looker queries are immutable once created - /// and are not deleted. If you create a query that is exactly like an existing query then the existing query - /// will be returned and no new query will be created. Whether a new query is created or not, you can use - /// the 'id' in the returned query with the 'run' method. - /// - /// The query parameters are passed as json in the body of the request. - /// - /// POST /queries -> Query - /// - /// Query Query (application/json) - /// - /// Requested fields. - public async Task> create_query( - WriteQuery body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/queries", new Values { - { "fields", fields }},body,options); - } - - /// ### Run a saved query. - /// - /// This runs a previously saved query. You can use this on a query that was generated in the Looker UI - /// or one that you have explicitly created using the API. You can also use a query 'id' from a saved 'Look'. - /// - /// The 'result_format' parameter specifies the desired structure and format of the response. - /// - /// Supported formats: - /// - /// | result_format | Description - /// | :-----------: | :--- | - /// | json | Plain json - /// | json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query - /// | csv | Comma separated values with a header - /// | txt | Tab separated values with a header - /// | html | Simple html - /// | md | Simple markdown - /// | xlsx | MS Excel spreadsheet - /// | sql | Returns the generated SQL rather than running the query - /// | png | A PNG image of the visualization of the query - /// | jpg | A JPG image of the visualization of the query - /// - /// GET /queries/{query_id}/run/{result_format} -> string - /// - /// **Note**: Binary content may be returned by this method. - /// - /// - /// string Query (text) - /// string Query (application/json) - /// string Query (image/png) - /// string Query (image/jpeg) - /// - /// - /// Id of query - /// Format of result - /// Row limit (may override the limit in the saved query). - /// Apply model-specified formatting to each result. - /// Apply visualization options to results. - /// Get results from cache if available. - /// Render width for image formats. - /// Render height for image formats. - /// Generate drill links (only applicable to 'json_detail' format. - /// Force use of production models even if the user is in development mode. Note that this flag being false does not guarantee development models will be used. - /// Retrieve any results from cache even if the results have expired. - /// Prefix to use for drill links (url encoded). - /// Rebuild PDTS used in query. - /// Perform table calculations on query results - public async Task> run_query( - long query_id, - string result_format, - long? limit = null, - bool? apply_formatting = null, - bool? apply_vis = null, - bool? cache = null, - long? image_width = null, - long? image_height = null, - bool? generate_drill_links = null, - bool? force_production = null, - bool? cache_only = null, - string? path_prefix = null, - bool? rebuild_pdts = null, - bool? server_table_calcs = null, - ITransportSettings? options = null) where TSuccess : class -{ - result_format = SdkUtils.EncodeParam(result_format); - return await AuthRequest(HttpMethod.Get, $"/queries/{query_id}/run/{result_format}", new Values { - { "limit", limit }, - { "apply_formatting", apply_formatting }, - { "apply_vis", apply_vis }, - { "cache", cache }, - { "image_width", image_width }, - { "image_height", image_height }, - { "generate_drill_links", generate_drill_links }, - { "force_production", force_production }, - { "cache_only", cache_only }, - { "path_prefix", path_prefix }, - { "rebuild_pdts", rebuild_pdts }, - { "server_table_calcs", server_table_calcs }},null,options); - } - - /// ### Run the query that is specified inline in the posted body. - /// - /// This allows running a query as defined in json in the posted body. This combines - /// the two actions of posting & running a query into one step. - /// - /// Here is an example body in json: - /// ``` - /// { - /// "model":"thelook", - /// "view":"inventory_items", - /// "fields":["category.name","inventory_items.days_in_inventory_tier","products.count"], - /// "filters":{"category.name":"socks"}, - /// "sorts":["products.count desc 0"], - /// "limit":"500", - /// "query_timezone":"America/Los_Angeles" - /// } - /// ``` - /// - /// When using the Ruby SDK this would be passed as a Ruby hash like: - /// ``` - /// { - /// :model=>"thelook", - /// :view=>"inventory_items", - /// :fields=> - /// ["category.name", - /// "inventory_items.days_in_inventory_tier", - /// "products.count"], - /// :filters=>{:"category.name"=>"socks"}, - /// :sorts=>["products.count desc 0"], - /// :limit=>"500", - /// :query_timezone=>"America/Los_Angeles", - /// } - /// ``` - /// - /// This will return the result of running the query in the format specified by the 'result_format' parameter. - /// - /// Supported formats: - /// - /// | result_format | Description - /// | :-----------: | :--- | - /// | json | Plain json - /// | json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query - /// | csv | Comma separated values with a header - /// | txt | Tab separated values with a header - /// | html | Simple html - /// | md | Simple markdown - /// | xlsx | MS Excel spreadsheet - /// | sql | Returns the generated SQL rather than running the query - /// | png | A PNG image of the visualization of the query - /// | jpg | A JPG image of the visualization of the query - /// - /// POST /queries/run/{result_format} -> string - /// - /// **Note**: Binary content may be returned by this method. - /// - /// - /// string Query Result (text) - /// string Query Result (application/json) - /// string Query Result (image/png) - /// string Query Result (image/jpeg) - /// - /// - /// Format of result - /// Row limit (may override the limit in the saved query). - /// Apply model-specified formatting to each result. - /// Apply visualization options to results. - /// Get results from cache if available. - /// Render width for image formats. - /// Render height for image formats. - /// Generate drill links (only applicable to 'json_detail' format. - /// Force use of production models even if the user is in development mode. Note that this flag being false does not guarantee development models will be used. - /// Retrieve any results from cache even if the results have expired. - /// Prefix to use for drill links (url encoded). - /// Rebuild PDTS used in query. - /// Perform table calculations on query results - public async Task> run_inline_query( - string result_format, - WriteQuery body, - long? limit = null, - bool? apply_formatting = null, - bool? apply_vis = null, - bool? cache = null, - long? image_width = null, - long? image_height = null, - bool? generate_drill_links = null, - bool? force_production = null, - bool? cache_only = null, - string? path_prefix = null, - bool? rebuild_pdts = null, - bool? server_table_calcs = null, - ITransportSettings? options = null) where TSuccess : class -{ - result_format = SdkUtils.EncodeParam(result_format); - return await AuthRequest(HttpMethod.Post, $"/queries/run/{result_format}", new Values { - { "limit", limit }, - { "apply_formatting", apply_formatting }, - { "apply_vis", apply_vis }, - { "cache", cache }, - { "image_width", image_width }, - { "image_height", image_height }, - { "generate_drill_links", generate_drill_links }, - { "force_production", force_production }, - { "cache_only", cache_only }, - { "path_prefix", path_prefix }, - { "rebuild_pdts", rebuild_pdts }, - { "server_table_calcs", server_table_calcs }},body,options); - } - - /// ### Run an URL encoded query. - /// - /// This requires the caller to encode the specifiers for the query into the URL query part using - /// Looker-specific syntax as explained below. - /// - /// Generally, you would want to use one of the methods that takes the parameters as json in the POST body - /// for creating and/or running queries. This method exists for cases where one really needs to encode the - /// parameters into the URL of a single 'GET' request. This matches the way that the Looker UI formats - /// 'explore' URLs etc. - /// - /// The parameters here are very similar to the json body formatting except that the filter syntax is - /// tricky. Unfortunately, this format makes this method not currently callable via the 'Try it out!' button - /// in this documentation page. But, this is callable when creating URLs manually or when using the Looker SDK. - /// - /// Here is an example inline query URL: - /// - /// ``` - /// https://looker.mycompany.com:19999/api/3.0/queries/models/thelook/views/inventory_items/run/json?fields=category.name,inventory_items.days_in_inventory_tier,products.count&f[category.name]=socks&sorts=products.count+desc+0&limit=500&query_timezone=America/Los_Angeles - /// ``` - /// - /// When invoking this endpoint with the Ruby SDK, pass the query parameter parts as a hash. The hash to match the above would look like: - /// - /// ```ruby - /// query_params = - /// { - /// fields: "category.name,inventory_items.days_in_inventory_tier,products.count", - /// :"f[category.name]" => "socks", - /// sorts: "products.count desc 0", - /// limit: "500", - /// query_timezone: "America/Los_Angeles" - /// } - /// response = ruby_sdk.run_url_encoded_query('thelook','inventory_items','json', query_params) - /// - /// ``` - /// - /// Again, it is generally easier to use the variant of this method that passes the full query in the POST body. - /// This method is available for cases where other alternatives won't fit the need. - /// - /// Supported formats: - /// - /// | result_format | Description - /// | :-----------: | :--- | - /// | json | Plain json - /// | json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query - /// | csv | Comma separated values with a header - /// | txt | Tab separated values with a header - /// | html | Simple html - /// | md | Simple markdown - /// | xlsx | MS Excel spreadsheet - /// | sql | Returns the generated SQL rather than running the query - /// | png | A PNG image of the visualization of the query - /// | jpg | A JPG image of the visualization of the query - /// - /// GET /queries/models/{model_name}/views/{view_name}/run/{result_format} -> string - /// - /// **Note**: Binary content may be returned by this method. - /// - /// - /// string Query (text) - /// string Query (application/json) - /// string Query (image/png) - /// string Query (image/jpeg) - /// - /// - /// Model name - /// View name - /// Format of result - public async Task> run_url_encoded_query( - string model_name, - string view_name, - string result_format, - ITransportSettings? options = null) where TSuccess : class -{ - model_name = SdkUtils.EncodeParam(model_name); - view_name = SdkUtils.EncodeParam(view_name); - result_format = SdkUtils.EncodeParam(result_format); - return await AuthRequest(HttpMethod.Get, $"/queries/models/{model_name}/views/{view_name}/run/{result_format}", null,null,options); - } - - /// ### Get Merge Query - /// - /// Returns a merge query object given its id. - /// - /// GET /merge_queries/{merge_query_id} -> MergeQuery - /// - /// MergeQuery Merge Query (application/json) - /// - /// Merge Query Id - /// Requested fields - public async Task> merge_query( - string merge_query_id, - string? fields = null, - ITransportSettings? options = null) -{ - merge_query_id = SdkUtils.EncodeParam(merge_query_id); - return await AuthRequest(HttpMethod.Get, $"/merge_queries/{merge_query_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Create Merge Query - /// - /// Creates a new merge query object. - /// - /// A merge query takes the results of one or more queries and combines (merges) the results - /// according to field mapping definitions. The result is similar to a SQL left outer join. - /// - /// A merge query can merge results of queries from different SQL databases. - /// - /// The order that queries are defined in the source_queries array property is significant. The - /// first query in the array defines the primary key into which the results of subsequent - /// queries will be merged. - /// - /// Like model/view query objects, merge queries are immutable and have structural identity - if - /// you make a request to create a new merge query that is identical to an existing merge query, - /// the existing merge query will be returned instead of creating a duplicate. Conversely, any - /// change to the contents of a merge query will produce a new object with a new id. - /// - /// POST /merge_queries -> MergeQuery - /// - /// MergeQuery Merge Query (application/json) - /// - /// Requested fields - public async Task> create_merge_query( - WriteMergeQuery? body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/merge_queries", new Values { - { "fields", fields }},body,options); - } - - /// Get information about all running queries. - /// - /// GET /running_queries -> RunningQueries[] - /// - /// RunningQueries[] Running Queries. (application/json) - /// - public async Task> all_running_queries( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/running_queries", null,null,options); - } - - /// Kill a query with a specific query_task_id. - /// - /// DELETE /running_queries/{query_task_id} -> string - /// - /// string Query successfully killed. (application/json) - /// - /// Query task id. - public async Task> kill_query( - string query_task_id, - ITransportSettings? options = null) -{ - query_task_id = SdkUtils.EncodeParam(query_task_id); - return await AuthRequest(HttpMethod.Delete, $"/running_queries/{query_task_id}", null,null,options); - } - - /// Get a SQL Runner query. - /// - /// GET /sql_queries/{slug} -> SqlQuery - /// - /// SqlQuery SQL Runner Query (application/json) - /// - /// slug of query - public async Task> sql_query( - string slug, - ITransportSettings? options = null) -{ - slug = SdkUtils.EncodeParam(slug); - return await AuthRequest(HttpMethod.Get, $"/sql_queries/{slug}", null,null,options); - } - - /// ### Create a SQL Runner Query - /// - /// Either the `connection_name` or `model_name` parameter MUST be provided. - /// - /// POST /sql_queries -> SqlQuery - /// - /// SqlQuery SQL Runner Query (application/json) - /// - public async Task> create_sql_query( - SqlQueryCreate body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/sql_queries", null,body,options); - } - - /// Execute a SQL Runner query in a given result_format. - /// - /// POST /sql_queries/{slug}/run/{result_format} -> string - /// - /// **Note**: Binary content may be returned by this method. - /// - /// - /// string SQL Runner Query (text) - /// string SQL Runner Query (application/json) - /// string SQL Runner Query (image/png) - /// string SQL Runner Query (image/jpeg) - /// - /// - /// slug of query - /// Format of result, options are: ["inline_json", "json", "json_detail", "json_fe", "json_bi", "csv", "html", "md", "txt", "xlsx", "gsxml", "sql", "json_label"] - /// Defaults to false. If set to true, the HTTP response will have content-disposition and other headers set to make the HTTP response behave as a downloadable attachment instead of as inline content. - public async Task> run_sql_query( - string slug, - string result_format, - string? download = null, - ITransportSettings? options = null) where TSuccess : class -{ - slug = SdkUtils.EncodeParam(slug); - result_format = SdkUtils.EncodeParam(result_format); - return await AuthRequest(HttpMethod.Post, $"/sql_queries/{slug}/run/{result_format}", new Values { - { "download", download }},null,options); - } - - #endregion Query: Run and Manage Queries - - #region RenderTask: Manage Render Tasks - - /// ### Create a new task to render a lookml dashboard to a document or image. - /// - /// # DEPRECATED: Use [create_dashboard_render_task()](#!/RenderTask/create_dashboard_render_task) in API 4.0+ - /// - /// Returns a render task object. - /// To check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task). - /// Once the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results). - /// - /// POST /render_tasks/lookml_dashboards/{dashboard_id}/{result_format} -> RenderTask - /// - /// RenderTask Render Task (application/json) - /// - /// Id of lookml dashboard to render - /// Output type: pdf, png, or jpg - /// Output width in pixels - /// Output height in pixels - /// Requested fields. - /// Paper size for pdf. Value can be one of: ["letter","legal","tabloid","a0","a1","a2","a3","a4","a5"] - /// Whether to render pdf in landscape - [Obsolete("Deprecated")] - public async Task> create_lookml_dashboard_render_task( - string dashboard_id, - string result_format, - CreateDashboardRenderTask body, - long width, - long height, - string? fields = null, - string? pdf_paper_size = null, - bool? pdf_landscape = null, - ITransportSettings? options = null) -{ - dashboard_id = SdkUtils.EncodeParam(dashboard_id); - result_format = SdkUtils.EncodeParam(result_format); - return await AuthRequest(HttpMethod.Post, $"/render_tasks/lookml_dashboards/{dashboard_id}/{result_format}", new Values { - { "width", width }, - { "height", height }, - { "fields", fields }, - { "pdf_paper_size", pdf_paper_size }, - { "pdf_landscape", pdf_landscape }},body,options); - } - - /// ### Create a new task to render a look to an image. - /// - /// Returns a render task object. - /// To check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task). - /// Once the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results). - /// - /// POST /render_tasks/looks/{look_id}/{result_format} -> RenderTask - /// - /// RenderTask Render Task (application/json) - /// - /// Id of look to render - /// Output type: png, or jpg - /// Output width in pixels - /// Output height in pixels - /// Requested fields. - public async Task> create_look_render_task( - long look_id, - string result_format, - long width, - long height, - string? fields = null, - ITransportSettings? options = null) -{ - result_format = SdkUtils.EncodeParam(result_format); - return await AuthRequest(HttpMethod.Post, $"/render_tasks/looks/{look_id}/{result_format}", new Values { - { "width", width }, - { "height", height }, - { "fields", fields }},null,options); - } - - /// ### Create a new task to render an existing query to an image. - /// - /// Returns a render task object. - /// To check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task). - /// Once the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results). - /// - /// POST /render_tasks/queries/{query_id}/{result_format} -> RenderTask - /// - /// RenderTask Render Task (application/json) - /// - /// Id of the query to render - /// Output type: png or jpg - /// Output width in pixels - /// Output height in pixels - /// Requested fields. - public async Task> create_query_render_task( - long query_id, - string result_format, - long width, - long height, - string? fields = null, - ITransportSettings? options = null) -{ - result_format = SdkUtils.EncodeParam(result_format); - return await AuthRequest(HttpMethod.Post, $"/render_tasks/queries/{query_id}/{result_format}", new Values { - { "width", width }, - { "height", height }, - { "fields", fields }},null,options); - } - - /// ### Create a new task to render a dashboard to a document or image. - /// - /// Returns a render task object. - /// To check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task). - /// Once the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results). - /// - /// POST /render_tasks/dashboards/{dashboard_id}/{result_format} -> RenderTask - /// - /// RenderTask Render Task (application/json) - /// - /// Id of dashboard to render - /// Output type: pdf, png, or jpg - /// Output width in pixels - /// Output height in pixels - /// Requested fields. - /// Paper size for pdf. Value can be one of: ["letter","legal","tabloid","a0","a1","a2","a3","a4","a5"] - /// Whether to render pdf in landscape paper orientation - public async Task> create_dashboard_render_task( - long dashboard_id, - string result_format, - CreateDashboardRenderTask body, - long width, - long height, - string? fields = null, - string? pdf_paper_size = null, - bool? pdf_landscape = null, - ITransportSettings? options = null) -{ - result_format = SdkUtils.EncodeParam(result_format); - return await AuthRequest(HttpMethod.Post, $"/render_tasks/dashboards/{dashboard_id}/{result_format}", new Values { - { "width", width }, - { "height", height }, - { "fields", fields }, - { "pdf_paper_size", pdf_paper_size }, - { "pdf_landscape", pdf_landscape }},body,options); - } - - /// ### Get information about a render task. - /// - /// Returns a render task object. - /// To check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task). - /// Once the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results). - /// - /// GET /render_tasks/{render_task_id} -> RenderTask - /// - /// RenderTask Render Task (application/json) - /// - /// Id of render task - /// Requested fields. - public async Task> render_task( - string render_task_id, - string? fields = null, - ITransportSettings? options = null) -{ - render_task_id = SdkUtils.EncodeParam(render_task_id); - return await AuthRequest(HttpMethod.Get, $"/render_tasks/{render_task_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Get the document or image produced by a completed render task. - /// - /// Note that the PDF or image result will be a binary blob in the HTTP response, as indicated by the - /// Content-Type in the response headers. This may require specialized (or at least different) handling than text - /// responses such as JSON. You may need to tell your HTTP client that the response is binary so that it does not - /// attempt to parse the binary data as text. - /// - /// If the render task exists but has not finished rendering the results, the response HTTP status will be - /// **202 Accepted**, the response body will be empty, and the response will have a Retry-After header indicating - /// that the caller should repeat the request at a later time. - /// - /// Returns 404 if the render task cannot be found, if the cached result has expired, or if the caller - /// does not have permission to view the results. - /// - /// For detailed information about the status of the render task, use [Render Task](#!/RenderTask/render_task). - /// Polling loops waiting for completion of a render task would be better served by polling **render_task(id)** until - /// the task status reaches completion (or error) instead of polling **render_task_results(id)** alone. - /// - /// GET /render_tasks/{render_task_id}/results -> string - /// - /// **Note**: Binary content is returned by this method. - /// - /// - /// string Document or image (image/jpeg) - /// string Document or image (image/png) - /// string Document or image (application/pdf) - /// - /// - /// Id of render task - public async Task> render_task_results( - string render_task_id, - ITransportSettings? options = null) where TSuccess : class -{ - render_task_id = SdkUtils.EncodeParam(render_task_id); - return await AuthRequest(HttpMethod.Get, $"/render_tasks/{render_task_id}/results", null,null,options); - } - - #endregion RenderTask: Manage Render Tasks - - #region Role: Manage Roles - - /// ### Search model sets - /// Returns all model set records that match the given search criteria. - /// If multiple search params are given and `filter_or` is FALSE or not specified, - /// search params are combined in a logical AND operation. - /// Only rows that match *all* search param criteria will be returned. - /// - /// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - /// Results will include rows that match **any** of the search criteria. - /// - /// String search params use case-insensitive matching. - /// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - /// example="dan%" will match "danger" and "Danzig" but not "David" - /// example="D_m%" will match "Damage" and "dump" - /// - /// Integer search params can accept a single value or a comma separated list of values. The multiple - /// values will be combined under a logical OR operation - results will match at least one of - /// the given values. - /// - /// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - /// or exclude (respectively) rows where the column is null. - /// - /// Boolean search params accept only "true" and "false" as values. - /// - /// GET /model_sets/search -> ModelSet[] - /// - /// ModelSet[] Model Set (application/json) - /// - /// Requested fields. - /// Number of results to return (used with `offset`). - /// Number of results to skip before returning any (used with `limit`). - /// Fields to sort by. - /// Match model set id. - /// Match model set name. - /// Match model sets by all_access status. - /// Match model sets by built_in status. - /// Combine given search criteria in a boolean OR expression. - public async Task> search_model_sets( - string? fields = null, - long? limit = null, - long? offset = null, - string? sorts = null, - long? id = null, - string? name = null, - bool? all_access = null, - bool? built_in = null, - bool? filter_or = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/model_sets/search", new Values { - { "fields", fields }, - { "limit", limit }, - { "offset", offset }, - { "sorts", sorts }, - { "id", id }, - { "name", name }, - { "all_access", all_access }, - { "built_in", built_in }, - { "filter_or", filter_or }},null,options); - } - - /// ### Get information about the model set with a specific id. - /// - /// GET /model_sets/{model_set_id} -> ModelSet - /// - /// ModelSet Specified model set. (application/json) - /// - /// Id of model set - /// Requested fields. - public async Task> model_set( - long model_set_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/model_sets/{model_set_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update information about the model set with a specific id. - /// - /// PATCH /model_sets/{model_set_id} -> ModelSet - /// - /// ModelSet New state for specified model set. (application/json) - /// - /// id of model set - public async Task> update_model_set( - long model_set_id, - WriteModelSet body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/model_sets/{model_set_id}", null,body,options); - } - - /// ### Delete the model set with a specific id. - /// - /// DELETE /model_sets/{model_set_id} -> string - /// - /// string Model set successfully deleted. (application/json) - /// - /// id of model set - public async Task> delete_model_set( - long model_set_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/model_sets/{model_set_id}", null,null,options); - } - - /// ### Get information about all model sets. - /// - /// GET /model_sets -> ModelSet[] - /// - /// ModelSet[] All model sets. (application/json) - /// - /// Requested fields. - public async Task> all_model_sets( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/model_sets", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a model set with the specified information. Model sets are used by Roles. - /// - /// POST /model_sets -> ModelSet - /// - /// ModelSet Newly created ModelSet (application/json) - /// - public async Task> create_model_set( - WriteModelSet body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/model_sets", null,body,options); - } - - /// ### Get all supported permissions. - /// - /// GET /permissions -> Permission[] - /// - /// Permission[] Permission (application/json) - /// - public async Task> all_permissions( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/permissions", null,null,options); - } - - /// ### Search permission sets - /// Returns all permission set records that match the given search criteria. - /// If multiple search params are given and `filter_or` is FALSE or not specified, - /// search params are combined in a logical AND operation. - /// Only rows that match *all* search param criteria will be returned. - /// - /// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - /// Results will include rows that match **any** of the search criteria. - /// - /// String search params use case-insensitive matching. - /// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - /// example="dan%" will match "danger" and "Danzig" but not "David" - /// example="D_m%" will match "Damage" and "dump" - /// - /// Integer search params can accept a single value or a comma separated list of values. The multiple - /// values will be combined under a logical OR operation - results will match at least one of - /// the given values. - /// - /// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - /// or exclude (respectively) rows where the column is null. - /// - /// Boolean search params accept only "true" and "false" as values. - /// - /// GET /permission_sets/search -> PermissionSet[] - /// - /// PermissionSet[] Permission Set (application/json) - /// - /// Requested fields. - /// Number of results to return (used with `offset`). - /// Number of results to skip before returning any (used with `limit`). - /// Fields to sort by. - /// Match permission set id. - /// Match permission set name. - /// Match permission sets by all_access status. - /// Match permission sets by built_in status. - /// Combine given search criteria in a boolean OR expression. - public async Task> search_permission_sets( - string? fields = null, - long? limit = null, - long? offset = null, - string? sorts = null, - long? id = null, - string? name = null, - bool? all_access = null, - bool? built_in = null, - bool? filter_or = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/permission_sets/search", new Values { - { "fields", fields }, - { "limit", limit }, - { "offset", offset }, - { "sorts", sorts }, - { "id", id }, - { "name", name }, - { "all_access", all_access }, - { "built_in", built_in }, - { "filter_or", filter_or }},null,options); - } - - /// ### Get information about the permission set with a specific id. - /// - /// GET /permission_sets/{permission_set_id} -> PermissionSet - /// - /// PermissionSet Permission Set (application/json) - /// - /// Id of permission set - /// Requested fields. - public async Task> permission_set( - long permission_set_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/permission_sets/{permission_set_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update information about the permission set with a specific id. - /// - /// PATCH /permission_sets/{permission_set_id} -> PermissionSet - /// - /// PermissionSet Permission Set (application/json) - /// - /// Id of permission set - public async Task> update_permission_set( - long permission_set_id, - WritePermissionSet body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/permission_sets/{permission_set_id}", null,body,options); - } - - /// ### Delete the permission set with a specific id. - /// - /// DELETE /permission_sets/{permission_set_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of permission set - public async Task> delete_permission_set( - long permission_set_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/permission_sets/{permission_set_id}", null,null,options); - } - - /// ### Get information about all permission sets. - /// - /// GET /permission_sets -> PermissionSet[] - /// - /// PermissionSet[] Permission Set (application/json) - /// - /// Requested fields. - public async Task> all_permission_sets( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/permission_sets", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a permission set with the specified information. Permission sets are used by Roles. - /// - /// POST /permission_sets -> PermissionSet - /// - /// PermissionSet Permission Set (application/json) - /// - public async Task> create_permission_set( - WritePermissionSet body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/permission_sets", null,body,options); - } - - /// ### Get information about all roles. - /// - /// GET /roles -> Role[] - /// - /// Role[] Role (application/json) - /// - /// Requested fields. - /// Optional list of ids to get specific roles. - public async Task> all_roles( - string? fields = null, - DelimArray? ids = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/roles", new Values { - { "fields", fields }, - { "ids", ids }},null,options); - } - - /// ### Create a role with the specified information. - /// - /// POST /roles -> Role - /// - /// Role Role (application/json) - /// - public async Task> create_role( - WriteRole body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/roles", null,body,options); - } - - /// ### Search roles - /// - /// Returns all role records that match the given search criteria. - /// - /// If multiple search params are given and `filter_or` is FALSE or not specified, - /// search params are combined in a logical AND operation. - /// Only rows that match *all* search param criteria will be returned. - /// - /// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - /// Results will include rows that match **any** of the search criteria. - /// - /// String search params use case-insensitive matching. - /// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - /// example="dan%" will match "danger" and "Danzig" but not "David" - /// example="D_m%" will match "Damage" and "dump" - /// - /// Integer search params can accept a single value or a comma separated list of values. The multiple - /// values will be combined under a logical OR operation - results will match at least one of - /// the given values. - /// - /// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - /// or exclude (respectively) rows where the column is null. - /// - /// Boolean search params accept only "true" and "false" as values. - /// - /// GET /roles/search -> Role[] - /// - /// Role[] Role (application/json) - /// - /// Requested fields. - /// Number of results to return (used with `offset`). - /// Number of results to skip before returning any (used with `limit`). - /// Fields to sort by. - /// Match role id. - /// Match role name. - /// Match roles by built_in status. - /// Combine given search criteria in a boolean OR expression. - public async Task> search_roles( - string? fields = null, - long? limit = null, - long? offset = null, - string? sorts = null, - long? id = null, - string? name = null, - bool? built_in = null, - bool? filter_or = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/roles/search", new Values { - { "fields", fields }, - { "limit", limit }, - { "offset", offset }, - { "sorts", sorts }, - { "id", id }, - { "name", name }, - { "built_in", built_in }, - { "filter_or", filter_or }},null,options); - } - - /// ### Get information about the role with a specific id. - /// - /// GET /roles/{role_id} -> Role - /// - /// Role Role (application/json) - /// - /// id of role - public async Task> role( - long role_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/roles/{role_id}", null,null,options); - } - - /// ### Update information about the role with a specific id. - /// - /// PATCH /roles/{role_id} -> Role - /// - /// Role Role (application/json) - /// - /// id of role - public async Task> update_role( - long role_id, - WriteRole body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/roles/{role_id}", null,body,options); - } - - /// ### Delete the role with a specific id. - /// - /// DELETE /roles/{role_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// id of role - public async Task> delete_role( - long role_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/roles/{role_id}", null,null,options); - } - - /// ### Get information about all the groups with the role that has a specific id. - /// - /// GET /roles/{role_id}/groups -> Group[] - /// - /// Group[] Groups with role. (application/json) - /// - /// id of role - /// Requested fields. - public async Task> role_groups( - long role_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/roles/{role_id}/groups", new Values { - { "fields", fields }},null,options); - } - - /// ### Set all groups for a role, removing all existing group associations from that role. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// PUT /roles/{role_id}/groups -> Group[] - /// - /// Group[] Groups with role. (application/json) - /// - /// id of role - public async Task> set_role_groups( - long role_id, - string[] body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Put, $"/roles/{role_id}/groups", null,body,options); - } - - /// ### Get information about all the users with the role that has a specific id. - /// - /// GET /roles/{role_id}/users -> User[] - /// - /// User[] Users with role. (application/json) - /// - /// id of role - /// Requested fields. - /// Get only users associated directly with the role: exclude those only associated through groups. - public async Task> role_users( - long role_id, - string? fields = null, - bool? direct_association_only = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/roles/{role_id}/users", new Values { - { "fields", fields }, - { "direct_association_only", direct_association_only }},null,options); - } - - /// ### Set all the users of the role with a specific id. - /// - /// PUT /roles/{role_id}/users -> User[] - /// - /// User[] Users with role. (application/json) - /// - /// id of role - public async Task> set_role_users( - long role_id, - string[] body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Put, $"/roles/{role_id}/users", null,body,options); - } - - #endregion Role: Manage Roles - - #region ScheduledPlan: Manage Scheduled Plans - - /// ### Get Scheduled Plans for a Space - /// - /// Returns scheduled plans owned by the caller for a given space id. - /// - /// GET /scheduled_plans/space/{space_id} -> ScheduledPlan[] - /// - /// ScheduledPlan[] Scheduled Plan (application/json) - /// - /// Space Id - /// Requested fields. - public async Task> scheduled_plans_for_space( - long space_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/scheduled_plans/space/{space_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Get Information About a Scheduled Plan - /// - /// Admins can fetch information about other users' Scheduled Plans. - /// - /// GET /scheduled_plans/{scheduled_plan_id} -> ScheduledPlan - /// - /// ScheduledPlan Scheduled Plan (application/json) - /// - /// Scheduled Plan Id - /// Requested fields. - public async Task> scheduled_plan( - long scheduled_plan_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/scheduled_plans/{scheduled_plan_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update a Scheduled Plan - /// - /// Admins can update other users' Scheduled Plans. - /// - /// Note: Any scheduled plan destinations specified in an update will **replace** all scheduled plan destinations - /// currently defined for the scheduled plan. - /// - /// For Example: If a scheduled plan has destinations A, B, and C, and you call update on this scheduled plan - /// specifying only B in the destinations, then destinations A and C will be deleted by the update. - /// - /// Updating a scheduled plan to assign null or an empty array to the scheduled_plan_destinations property is an error, as a scheduled plan must always have at least one destination. - /// - /// If you omit the scheduled_plan_destinations property from the object passed to update, then the destinations - /// defined on the original scheduled plan will remain unchanged. - /// - /// #### Email Permissions: - /// - /// For details about permissions required to schedule delivery to email and the safeguards - /// Looker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://cloud.google.com/looker/docs/r/api/embed-permissions). - /// - /// - /// #### Scheduled Plan Destination Formats - /// - /// Scheduled plan destinations must specify the data format to produce and send to the destination. - /// - /// Formats: - /// - /// | format | Description - /// | :-----------: | :--- | - /// | json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata. - /// | json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query - /// | inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination. - /// | csv | Comma separated values with a header - /// | txt | Tab separated values with a header - /// | html | Simple html - /// | xlsx | MS Excel spreadsheet - /// | wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document - /// | assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document - /// | wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image - /// || - /// - /// Valid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example. - /// - /// PATCH /scheduled_plans/{scheduled_plan_id} -> ScheduledPlan - /// - /// ScheduledPlan Scheduled Plan (application/json) - /// - /// Scheduled Plan Id - public async Task> update_scheduled_plan( - long scheduled_plan_id, - WriteScheduledPlan body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/scheduled_plans/{scheduled_plan_id}", null,body,options); - } - - /// ### Delete a Scheduled Plan - /// - /// Normal users can only delete their own scheduled plans. - /// Admins can delete other users' scheduled plans. - /// This delete cannot be undone. - /// - /// DELETE /scheduled_plans/{scheduled_plan_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Scheduled Plan Id - public async Task> delete_scheduled_plan( - long scheduled_plan_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/scheduled_plans/{scheduled_plan_id}", null,null,options); - } - - /// ### List All Scheduled Plans - /// - /// Returns all scheduled plans which belong to the caller or given user. - /// - /// If no user_id is provided, this function returns the scheduled plans owned by the caller. - /// - /// - /// To list all schedules for all users, pass `all_users=true`. - /// - /// - /// The caller must have `see_schedules` permission to see other users' scheduled plans. - /// - /// GET /scheduled_plans -> ScheduledPlan[] - /// - /// ScheduledPlan[] Scheduled Plan (application/json) - /// - /// Return scheduled plans belonging to this user_id. If not provided, returns scheduled plans owned by the caller. - /// Comma delimited list of field names. If provided, only the fields specified will be included in the response - /// Return scheduled plans belonging to all users (caller needs see_schedules permission) - public async Task> all_scheduled_plans( - long? user_id = null, - string? fields = null, - bool? all_users = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/scheduled_plans", new Values { - { "user_id", user_id }, - { "fields", fields }, - { "all_users", all_users }},null,options); - } - - /// ### Create a Scheduled Plan - /// - /// Create a scheduled plan to render a Look or Dashboard on a recurring schedule. - /// - /// To create a scheduled plan, you MUST provide values for the following fields: - /// `name` - /// and - /// `look_id`, `dashboard_id`, `lookml_dashboard_id`, or `query_id` - /// and - /// `cron_tab` or `datagroup` - /// and - /// at least one scheduled_plan_destination - /// - /// A scheduled plan MUST have at least one scheduled_plan_destination defined. - /// - /// When `look_id` is set, `require_no_results`, `require_results`, and `require_change` are all required. - /// - /// If `create_scheduled_plan` fails with a 422 error, be sure to look at the error messages in the response which will explain exactly what fields are missing or values that are incompatible. - /// - /// The queries that provide the data for the look or dashboard are run in the context of user account that owns the scheduled plan. - /// - /// When `run_as_recipient` is `false` or not specified, the queries that provide the data for the - /// look or dashboard are run in the context of user account that owns the scheduled plan. - /// - /// When `run_as_recipient` is `true` and all the email recipients are Looker user accounts, the - /// queries are run in the context of each recipient, so different recipients may see different - /// data from the same scheduled render of a look or dashboard. For more details, see [Run As Recipient](https://cloud.google.com/looker/docs/r/admin/run-as-recipient). - /// - /// Admins can create and modify scheduled plans on behalf of other users by specifying a user id. - /// Non-admin users may not create or modify scheduled plans by or for other users. - /// - /// #### Email Permissions: - /// - /// For details about permissions required to schedule delivery to email and the safeguards - /// Looker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://cloud.google.com/looker/docs/r/api/embed-permissions). - /// - /// - /// #### Scheduled Plan Destination Formats - /// - /// Scheduled plan destinations must specify the data format to produce and send to the destination. - /// - /// Formats: - /// - /// | format | Description - /// | :-----------: | :--- | - /// | json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata. - /// | json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query - /// | inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination. - /// | csv | Comma separated values with a header - /// | txt | Tab separated values with a header - /// | html | Simple html - /// | xlsx | MS Excel spreadsheet - /// | wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document - /// | assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document - /// | wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image - /// || - /// - /// Valid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example. - /// - /// POST /scheduled_plans -> ScheduledPlan - /// - /// ScheduledPlan Scheduled Plan (application/json) - /// - public async Task> create_scheduled_plan( - WriteScheduledPlan body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/scheduled_plans", null,body,options); - } - - /// ### Run a Scheduled Plan Immediately - /// - /// Create a scheduled plan that runs only once, and immediately. - /// - /// This can be useful for testing a Scheduled Plan before committing to a production schedule. - /// - /// Admins can create scheduled plans on behalf of other users by specifying a user id. - /// - /// This API is rate limited to prevent it from being used for relay spam or DoS attacks - /// - /// #### Email Permissions: - /// - /// For details about permissions required to schedule delivery to email and the safeguards - /// Looker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://cloud.google.com/looker/docs/r/api/embed-permissions). - /// - /// - /// #### Scheduled Plan Destination Formats - /// - /// Scheduled plan destinations must specify the data format to produce and send to the destination. - /// - /// Formats: - /// - /// | format | Description - /// | :-----------: | :--- | - /// | json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata. - /// | json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query - /// | inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination. - /// | csv | Comma separated values with a header - /// | txt | Tab separated values with a header - /// | html | Simple html - /// | xlsx | MS Excel spreadsheet - /// | wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document - /// | assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document - /// | wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image - /// || - /// - /// Valid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example. - /// - /// POST /scheduled_plans/run_once -> ScheduledPlan - /// - /// ScheduledPlan Scheduled Plan (application/json) - /// - public async Task> scheduled_plan_run_once( - WriteScheduledPlan body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/scheduled_plans/run_once", null,body,options); - } - - /// ### Get Scheduled Plans for a Look - /// - /// Returns all scheduled plans for a look which belong to the caller or given user. - /// - /// If no user_id is provided, this function returns the scheduled plans owned by the caller. - /// - /// - /// To list all schedules for all users, pass `all_users=true`. - /// - /// - /// The caller must have `see_schedules` permission to see other users' scheduled plans. - /// - /// GET /scheduled_plans/look/{look_id} -> ScheduledPlan[] - /// - /// ScheduledPlan[] Scheduled Plan (application/json) - /// - /// Look Id - /// User Id (default is requesting user if not specified) - /// Requested fields. - /// Return scheduled plans belonging to all users for the look - public async Task> scheduled_plans_for_look( - long look_id, - long? user_id = null, - string? fields = null, - bool? all_users = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/scheduled_plans/look/{look_id}", new Values { - { "user_id", user_id }, - { "fields", fields }, - { "all_users", all_users }},null,options); - } - - /// ### Get Scheduled Plans for a Dashboard - /// - /// Returns all scheduled plans for a dashboard which belong to the caller or given user. - /// - /// If no user_id is provided, this function returns the scheduled plans owned by the caller. - /// - /// - /// To list all schedules for all users, pass `all_users=true`. - /// - /// - /// The caller must have `see_schedules` permission to see other users' scheduled plans. - /// - /// GET /scheduled_plans/dashboard/{dashboard_id} -> ScheduledPlan[] - /// - /// ScheduledPlan[] Scheduled Plan (application/json) - /// - /// Dashboard Id - /// User Id (default is requesting user if not specified) - /// Return scheduled plans belonging to all users for the dashboard - /// Requested fields. - public async Task> scheduled_plans_for_dashboard( - long dashboard_id, - long? user_id = null, - bool? all_users = null, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/scheduled_plans/dashboard/{dashboard_id}", new Values { - { "user_id", user_id }, - { "all_users", all_users }, - { "fields", fields }},null,options); - } - - /// ### Get Scheduled Plans for a LookML Dashboard - /// - /// Returns all scheduled plans for a LookML Dashboard which belong to the caller or given user. - /// - /// If no user_id is provided, this function returns the scheduled plans owned by the caller. - /// - /// - /// To list all schedules for all users, pass `all_users=true`. - /// - /// - /// The caller must have `see_schedules` permission to see other users' scheduled plans. - /// - /// GET /scheduled_plans/lookml_dashboard/{lookml_dashboard_id} -> ScheduledPlan[] - /// - /// ScheduledPlan[] Scheduled Plan (application/json) - /// - /// LookML Dashboard Id - /// User Id (default is requesting user if not specified) - /// Requested fields. - /// Return scheduled plans belonging to all users for the dashboard - public async Task> scheduled_plans_for_lookml_dashboard( - string lookml_dashboard_id, - long? user_id = null, - string? fields = null, - bool? all_users = null, - ITransportSettings? options = null) -{ - lookml_dashboard_id = SdkUtils.EncodeParam(lookml_dashboard_id); - return await AuthRequest(HttpMethod.Get, $"/scheduled_plans/lookml_dashboard/{lookml_dashboard_id}", new Values { - { "user_id", user_id }, - { "fields", fields }, - { "all_users", all_users }},null,options); - } - - /// ### Run a Scheduled Plan By Id Immediately - /// This function creates a run-once schedule plan based on an existing scheduled plan, - /// applies modifications (if any) to the new scheduled plan, and runs the new schedule plan immediately. - /// This can be useful for testing modifications to an existing scheduled plan before committing to a production schedule. - /// - /// This function internally performs the following operations: - /// - /// 1. Copies the properties of the existing scheduled plan into a new scheduled plan - /// 2. Copies any properties passed in the JSON body of this request into the new scheduled plan (replacing the original values) - /// 3. Creates the new scheduled plan - /// 4. Runs the new scheduled plan - /// - /// The original scheduled plan is not modified by this operation. - /// Admins can create, modify, and run scheduled plans on behalf of other users by specifying a user id. - /// Non-admins can only create, modify, and run their own scheduled plans. - /// - /// #### Email Permissions: - /// - /// For details about permissions required to schedule delivery to email and the safeguards - /// Looker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://cloud.google.com/looker/docs/r/api/embed-permissions). - /// - /// - /// #### Scheduled Plan Destination Formats - /// - /// Scheduled plan destinations must specify the data format to produce and send to the destination. - /// - /// Formats: - /// - /// | format | Description - /// | :-----------: | :--- | - /// | json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata. - /// | json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query - /// | inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination. - /// | csv | Comma separated values with a header - /// | txt | Tab separated values with a header - /// | html | Simple html - /// | xlsx | MS Excel spreadsheet - /// | wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document - /// | assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document - /// | wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image - /// || - /// - /// Valid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example. - /// - /// - /// - /// This API is rate limited to prevent it from being used for relay spam or DoS attacks - /// - /// POST /scheduled_plans/{scheduled_plan_id}/run_once -> ScheduledPlan - /// - /// ScheduledPlan Scheduled Plan (application/json) - /// - /// Id of schedule plan to copy and run - public async Task> scheduled_plan_run_once_by_id( - long scheduled_plan_id, - WriteScheduledPlan? body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, $"/scheduled_plans/{scheduled_plan_id}/run_once", null,body,options); - } - - #endregion ScheduledPlan: Manage Scheduled Plans - - #region Session: Session Information - - /// ### Get API Session - /// - /// Returns information about the current API session, such as which workspace is selected for the session. - /// - /// GET /session -> ApiSession - /// - /// ApiSession Auth (application/json) - /// - public async Task> session( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/session", null,null,options); - } - - /// ### Update API Session - /// - /// #### API Session Workspace - /// - /// You can use this endpoint to change the active workspace for the current API session. - /// - /// Only one workspace can be active in a session. The active workspace can be changed - /// any number of times in a session. - /// - /// The default workspace for API sessions is the "production" workspace. - /// - /// All Looker APIs that use projects or lookml models (such as running queries) will - /// use the version of project and model files defined by this workspace for the lifetime of the - /// current API session or until the session workspace is changed again. - /// - /// An API session has the same lifetime as the access_token used to authenticate API requests. Each successful - /// API login generates a new access_token and a new API session. - /// - /// If your Looker API client application needs to work in a dev workspace across multiple - /// API sessions, be sure to select the dev workspace after each login. - /// - /// PATCH /session -> ApiSession - /// - /// ApiSession Auth (application/json) - /// - public async Task> update_session( - WriteApiSession body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, "/session", null,body,options); - } - - #endregion Session: Session Information - - #region Space: Manage Spaces - - /// ### Search Spaces - /// - /// Returns an **array of space objects** that match the given search criteria. - /// - /// If multiple search params are given and `filter_or` is FALSE or not specified, - /// search params are combined in a logical AND operation. - /// Only rows that match *all* search param criteria will be returned. - /// - /// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - /// Results will include rows that match **any** of the search criteria. - /// - /// String search params use case-insensitive matching. - /// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - /// example="dan%" will match "danger" and "Danzig" but not "David" - /// example="D_m%" will match "Damage" and "dump" - /// - /// Integer search params can accept a single value or a comma separated list of values. The multiple - /// values will be combined under a logical OR operation - results will match at least one of - /// the given values. - /// - /// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - /// or exclude (respectively) rows where the column is null. - /// - /// Boolean search params accept only "true" and "false" as values. - /// - /// - /// The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks. - /// - /// Get a **single space** by id with [Space](#!/Space/space) - /// - /// GET /spaces/search -> Space[] - /// - /// Space[] spaces (application/json) - /// - /// Requested fields. - /// Requested page. - /// Results per page. - /// Number of results to return. (used with offset and takes priority over page and per_page) - /// Number of results to skip before returning any. (used with limit and takes priority over page and per_page) - /// Fields to sort by. - /// Match Space title. - /// Match Space id - /// Filter on a children of a particular space. - /// Filter on spaces created by a particular user. - /// Combine given search criteria in a boolean OR expression - /// Match is shared root - /// Match is users root - [Obsolete("Deprecated")] - public async Task> search_spaces( - string? fields = null, - long? page = null, - long? per_page = null, - long? limit = null, - long? offset = null, - string? sorts = null, - string? name = null, - long? id = null, - string? parent_id = null, - string? creator_id = null, - bool? filter_or = null, - bool? is_shared_root = null, - bool? is_users_root = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/spaces/search", new Values { - { "fields", fields }, - { "page", page }, - { "per_page", per_page }, - { "limit", limit }, - { "offset", offset }, - { "sorts", sorts }, - { "name", name }, - { "id", id }, - { "parent_id", parent_id }, - { "creator_id", creator_id }, - { "filter_or", filter_or }, - { "is_shared_root", is_shared_root }, - { "is_users_root", is_users_root }},null,options); - } - - /// ### Get information about the space with a specific id. - /// - /// GET /spaces/{space_id} -> Space - /// - /// Space Space (application/json) - /// - /// Id of space - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> space( - string space_id, - string? fields = null, - ITransportSettings? options = null) -{ - space_id = SdkUtils.EncodeParam(space_id); - return await AuthRequest(HttpMethod.Get, $"/spaces/{space_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update the space with a specific id. - /// - /// PATCH /spaces/{space_id} -> Space - /// - /// Space Space (application/json) - /// - /// Id of space - [Obsolete("Deprecated")] - public async Task> update_space( - string space_id, - UpdateSpace body, - ITransportSettings? options = null) -{ - space_id = SdkUtils.EncodeParam(space_id); - return await AuthRequest(HttpMethod.Patch, $"/spaces/{space_id}", null,body,options); - } - - /// ### Delete the space with a specific id including any children spaces. - /// **DANGER** this will delete all looks and dashboards in the space. - /// - /// DELETE /spaces/{space_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of space - [Obsolete("Deprecated")] - public async Task> delete_space( - string space_id, - ITransportSettings? options = null) -{ - space_id = SdkUtils.EncodeParam(space_id); - return await AuthRequest(HttpMethod.Delete, $"/spaces/{space_id}", null,null,options); - } - - /// ### Get information about all spaces. - /// - /// In API 3.x, this will not return empty personal spaces, unless they belong to the calling user, - /// or if they contain soft-deleted content. - /// - /// In API 4.0+, all personal spaces will be returned. - /// - /// GET /spaces -> SpaceBase[] - /// - /// SpaceBase[] Space (application/json) - /// - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> all_spaces( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/spaces", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a space with specified information. - /// - /// Caller must have permission to edit the parent space and to create spaces, otherwise the request - /// returns 404 Not Found. - /// - /// POST /spaces -> Space - /// - /// Space Space (application/json) - /// - [Obsolete("Deprecated")] - public async Task> create_space( - CreateSpace body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/spaces", null,body,options); - } - - /// ### Get the children of a space. - /// - /// GET /spaces/{space_id}/children -> Space[] - /// - /// Space[] Spaces (application/json) - /// - /// Id of space - /// Requested fields. - /// Requested page. - /// Results per page. - /// Fields to sort by. - [Obsolete("Deprecated")] - public async Task> space_children( - string space_id, - string? fields = null, - long? page = null, - long? per_page = null, - string? sorts = null, - ITransportSettings? options = null) -{ - space_id = SdkUtils.EncodeParam(space_id); - return await AuthRequest(HttpMethod.Get, $"/spaces/{space_id}/children", new Values { - { "fields", fields }, - { "page", page }, - { "per_page", per_page }, - { "sorts", sorts }},null,options); - } - - /// ### Search the children of a space - /// - /// GET /spaces/{space_id}/children/search -> Space[] - /// - /// Space[] Spaces (application/json) - /// - /// Id of space - /// Requested fields. - /// Fields to sort by. - /// Match Space name. - [Obsolete("Deprecated")] - public async Task> space_children_search( - string space_id, - string? fields = null, - string? sorts = null, - string? name = null, - ITransportSettings? options = null) -{ - space_id = SdkUtils.EncodeParam(space_id); - return await AuthRequest(HttpMethod.Get, $"/spaces/{space_id}/children/search", new Values { - { "fields", fields }, - { "sorts", sorts }, - { "name", name }},null,options); - } - - /// ### Get the parent of a space - /// - /// GET /spaces/{space_id}/parent -> Space - /// - /// Space Space (application/json) - /// - /// Id of space - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> space_parent( - string space_id, - string? fields = null, - ITransportSettings? options = null) -{ - space_id = SdkUtils.EncodeParam(space_id); - return await AuthRequest(HttpMethod.Get, $"/spaces/{space_id}/parent", new Values { - { "fields", fields }},null,options); - } - - /// ### Get the ancestors of a space - /// - /// GET /spaces/{space_id}/ancestors -> Space[] - /// - /// Space[] Spaces (application/json) - /// - /// Id of space - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> space_ancestors( - string space_id, - string? fields = null, - ITransportSettings? options = null) -{ - space_id = SdkUtils.EncodeParam(space_id); - return await AuthRequest(HttpMethod.Get, $"/spaces/{space_id}/ancestors", new Values { - { "fields", fields }},null,options); - } - - /// ### Get all looks in a space. - /// In API 3.x, this will return all looks in a space, including looks in the trash. - /// In API 4.0+, all looks in a space will be returned, excluding looks in the trash. - /// - /// GET /spaces/{space_id}/looks -> LookWithQuery[] - /// - /// LookWithQuery[] Looks (application/json) - /// - /// Id of space - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> space_looks( - string space_id, - string? fields = null, - ITransportSettings? options = null) -{ - space_id = SdkUtils.EncodeParam(space_id); - return await AuthRequest(HttpMethod.Get, $"/spaces/{space_id}/looks", new Values { - { "fields", fields }},null,options); - } - - /// ### Get the dashboards in a space - /// - /// GET /spaces/{space_id}/dashboards -> Dashboard[] - /// - /// Dashboard[] Dashboard (application/json) - /// - /// Id of space - /// Requested fields. - [Obsolete("Deprecated")] - public async Task> space_dashboards( - string space_id, - string? fields = null, - ITransportSettings? options = null) -{ - space_id = SdkUtils.EncodeParam(space_id); - return await AuthRequest(HttpMethod.Get, $"/spaces/{space_id}/dashboards", new Values { - { "fields", fields }},null,options); - } - - #endregion Space: Manage Spaces - - #region Theme: Manage Themes - - /// ### Get an array of all existing themes - /// - /// Get a **single theme** by id with [Theme](#!/Theme/theme) - /// - /// This method returns an array of all existing themes. The active time for the theme is not considered. - /// - /// **Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature. - /// - /// GET /themes -> Theme[] - /// - /// Theme[] Themes (application/json) - /// - /// Requested fields. - public async Task> all_themes( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/themes", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a theme - /// - /// Creates a new theme object, returning the theme details, including the created id. - /// - /// If `settings` are not specified, the default theme settings will be copied into the new theme. - /// - /// The theme `name` can only contain alphanumeric characters or underscores. Theme names should not contain any confidential information, such as customer names. - /// - /// **Update** an existing theme with [Update Theme](#!/Theme/update_theme) - /// - /// **Permanently delete** an existing theme with [Delete Theme](#!/Theme/delete_theme) - /// - /// For more information, see [Creating and Applying Themes](https://cloud.google.com/looker/docs/r/admin/themes). - /// - /// **Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature. - /// - /// POST /themes -> Theme - /// - /// Theme Theme (application/json) - /// - public async Task> create_theme( - WriteTheme body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/themes", null,body,options); - } - - /// ### Search all themes for matching criteria. - /// - /// Returns an **array of theme objects** that match the specified search criteria. - /// - /// | Search Parameters | Description - /// | :-------------------: | :------ | - /// | `begin_at` only | Find themes active at or after `begin_at` - /// | `end_at` only | Find themes active at or before `end_at` - /// | both set | Find themes with an active inclusive period between `begin_at` and `end_at` - /// - /// Note: Range matching requires boolean AND logic. - /// When using `begin_at` and `end_at` together, do not use `filter_or`=TRUE - /// - /// If multiple search params are given and `filter_or` is FALSE or not specified, - /// search params are combined in a logical AND operation. - /// Only rows that match *all* search param criteria will be returned. - /// - /// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - /// Results will include rows that match **any** of the search criteria. - /// - /// String search params use case-insensitive matching. - /// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - /// example="dan%" will match "danger" and "Danzig" but not "David" - /// example="D_m%" will match "Damage" and "dump" - /// - /// Integer search params can accept a single value or a comma separated list of values. The multiple - /// values will be combined under a logical OR operation - results will match at least one of - /// the given values. - /// - /// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - /// or exclude (respectively) rows where the column is null. - /// - /// Boolean search params accept only "true" and "false" as values. - /// - /// - /// Get a **single theme** by id with [Theme](#!/Theme/theme) - /// - /// **Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature. - /// - /// GET /themes/search -> Theme[] - /// - /// Theme[] Themes (application/json) - /// - /// Match theme id. - /// Match theme name. - /// Timestamp for activation. - /// Timestamp for expiration. - /// Number of results to return (used with `offset`). - /// Number of results to skip before returning any (used with `limit`). - /// Fields to sort by. - /// Requested fields. - /// Combine given search criteria in a boolean OR expression - public async Task> search_themes( - long? id = null, - string? name = null, - DateTime? begin_at = null, - DateTime? end_at = null, - long? limit = null, - long? offset = null, - string? sorts = null, - string? fields = null, - bool? filter_or = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/themes/search", new Values { - { "id", id }, - { "name", name }, - { "begin_at", begin_at }, - { "end_at", end_at }, - { "limit", limit }, - { "offset", offset }, - { "sorts", sorts }, - { "fields", fields }, - { "filter_or", filter_or }},null,options); - } - - /// ### Get the default theme - /// - /// Returns the active theme object set as the default. - /// - /// The **default** theme name can be set in the UI on the Admin|Theme UI page - /// - /// The optional `ts` parameter can specify a different timestamp than "now." If specified, it returns the default theme at the time indicated. - /// - /// GET /themes/default -> Theme - /// - /// Theme Theme (application/json) - /// - /// Timestamp representing the target datetime for the active period. Defaults to 'now' - public async Task> default_theme( - DateTime? ts = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/themes/default", new Values { - { "ts", ts }},null,options); - } - - /// ### Set the global default theme by theme name - /// - /// Only Admin users can call this function. - /// - /// Only an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default. - /// - /// [Create Theme](#!/Theme/create) has detailed information on rules for default and active themes - /// - /// Returns the new specified default theme object. - /// - /// **Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature. - /// - /// PUT /themes/default -> Theme - /// - /// Theme Theme (application/json) - /// - /// Name of theme to set as default - public async Task> set_default_theme( - string name, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Put, "/themes/default", new Values { - { "name", name }},null,options); - } - - /// ### Get active themes - /// - /// Returns an array of active themes. - /// - /// If the `name` parameter is specified, it will return an array with one theme if it's active and found. - /// - /// The optional `ts` parameter can specify a different timestamp than "now." - /// - /// **Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature. - /// - /// GET /themes/active -> Theme[] - /// - /// Theme[] Themes (application/json) - /// - /// Name of theme - /// Timestamp representing the target datetime for the active period. Defaults to 'now' - /// Requested fields. - public async Task> active_themes( - string? name = null, - DateTime? ts = null, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/themes/active", new Values { - { "name", name }, - { "ts", ts }, - { "fields", fields }},null,options); - } - - /// ### Get the named theme if it's active. Otherwise, return the default theme - /// - /// The optional `ts` parameter can specify a different timestamp than "now." - /// Note: API users with `show` ability can call this function - /// - /// **Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature. - /// - /// GET /themes/theme_or_default -> Theme - /// - /// Theme Theme (application/json) - /// - /// Name of theme - /// Timestamp representing the target datetime for the active period. Defaults to 'now' - public async Task> theme_or_default( - string name, - DateTime? ts = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/themes/theme_or_default", new Values { - { "name", name }, - { "ts", ts }},null,options); - } - - /// ### Validate a theme with the specified information - /// - /// Validates all values set for the theme, returning any errors encountered, or 200 OK if valid - /// - /// See [Create Theme](#!/Theme/create_theme) for constraints - /// - /// **Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature. - /// - /// POST /themes/validate -> ValidationError - /// - /// - /// ValidationError Theme validation results (application/json) - /// string No errors detected with the theme (application/json) - /// - /// - public async Task> validate_theme( - WriteTheme body, - ITransportSettings? options = null) where TSuccess : class -{ - return await AuthRequest(HttpMethod.Post, "/themes/validate", null,body,options); - } - - /// ### Get a theme by ID - /// - /// Use this to retrieve a specific theme, whether or not it's currently active. - /// - /// **Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature. - /// - /// GET /themes/{theme_id} -> Theme - /// - /// Theme Theme (application/json) - /// - /// Id of theme - /// Requested fields. - public async Task> theme( - string theme_id, - string? fields = null, - ITransportSettings? options = null) -{ - theme_id = SdkUtils.EncodeParam(theme_id); - return await AuthRequest(HttpMethod.Get, $"/themes/{theme_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update the theme by id. - /// - /// **Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature. - /// - /// PATCH /themes/{theme_id} -> Theme - /// - /// Theme Theme (application/json) - /// - /// Id of theme - public async Task> update_theme( - string theme_id, - WriteTheme body, - ITransportSettings? options = null) -{ - theme_id = SdkUtils.EncodeParam(theme_id); - return await AuthRequest(HttpMethod.Patch, $"/themes/{theme_id}", null,body,options); - } - - /// ### Delete a specific theme by id - /// - /// This operation permanently deletes the identified theme from the database. - /// - /// Because multiple themes can have the same name (with different activation time spans) themes can only be deleted by ID. - /// - /// All IDs associated with a theme name can be retrieved by searching for the theme name with [Theme Search](#!/Theme/search). - /// - /// **Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature. - /// - /// DELETE /themes/{theme_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of theme - public async Task> delete_theme( - string theme_id, - ITransportSettings? options = null) -{ - theme_id = SdkUtils.EncodeParam(theme_id); - return await AuthRequest(HttpMethod.Delete, $"/themes/{theme_id}", null,null,options); - } - - #endregion Theme: Manage Themes - - #region User: Manage Users - - /// ### Get information about the current user; i.e. the user account currently calling the API. - /// - /// GET /user -> User - /// - /// User Current user. (application/json) - /// - /// Requested fields. - public async Task> me( - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/user", new Values { - { "fields", fields }},null,options); - } - - /// ### Get information about all users. - /// - /// GET /users -> User[] - /// - /// User[] All users. (application/json) - /// - /// Requested fields. - /// Return only page N of paginated results - /// Return N rows of data per page - /// Fields to sort by. - /// Optional list of ids to get specific users. - public async Task> all_users( - string? fields = null, - long? page = null, - long? per_page = null, - string? sorts = null, - DelimArray? ids = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/users", new Values { - { "fields", fields }, - { "page", page }, - { "per_page", per_page }, - { "sorts", sorts }, - { "ids", ids }},null,options); - } - - /// ### Create a user with the specified information. - /// - /// POST /users -> User - /// - /// User Created User (application/json) - /// - /// Requested fields. - public async Task> create_user( - WriteUser? body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/users", new Values { - { "fields", fields }},body,options); - } - - /// ### Search users - /// - /// Returns all* user records that match the given search criteria. - /// - /// If multiple search params are given and `filter_or` is FALSE or not specified, - /// search params are combined in a logical AND operation. - /// Only rows that match *all* search param criteria will be returned. - /// - /// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - /// Results will include rows that match **any** of the search criteria. - /// - /// String search params use case-insensitive matching. - /// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - /// example="dan%" will match "danger" and "Danzig" but not "David" - /// example="D_m%" will match "Damage" and "dump" - /// - /// Integer search params can accept a single value or a comma separated list of values. The multiple - /// values will be combined under a logical OR operation - results will match at least one of - /// the given values. - /// - /// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - /// or exclude (respectively) rows where the column is null. - /// - /// Boolean search params accept only "true" and "false" as values. - /// - /// - /// (*) Results are always filtered to the level of information the caller is permitted to view. - /// Looker admins can see all user details; normal users in an open system can see - /// names of other users but no details; normal users in a closed system can only see - /// names of other users who are members of the same group as the user. - /// - /// GET /users/search -> User[] - /// - /// User[] Matching users. (application/json) - /// - /// Include only these fields in the response - /// Return only page N of paginated results - /// Return N rows of data per page - /// Fields to sort by. - /// Match User Id. - /// Match First name. - /// Match Last name. - /// Search for user accounts associated with Looker employees - /// Search for only embed users - /// Search for the user with this email address - /// Search for disabled user accounts - /// Combine given search criteria in a boolean OR expression - /// Search for users who have access to this content_metadata item - /// Search for users who are direct members of this group - public async Task> search_users( - string? fields = null, - long? page = null, - long? per_page = null, - string? sorts = null, - long? id = null, - string? first_name = null, - string? last_name = null, - bool? verified_looker_employee = null, - bool? embed_user = null, - string? email = null, - bool? is_disabled = null, - bool? filter_or = null, - long? content_metadata_id = null, - long? group_id = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/users/search", new Values { - { "fields", fields }, - { "page", page }, - { "per_page", per_page }, - { "sorts", sorts }, - { "id", id }, - { "first_name", first_name }, - { "last_name", last_name }, - { "verified_looker_employee", verified_looker_employee }, - { "embed_user", embed_user }, - { "email", email }, - { "is_disabled", is_disabled }, - { "filter_or", filter_or }, - { "content_metadata_id", content_metadata_id }, - { "group_id", group_id }},null,options); - } - - /// ### Search for user accounts by name - /// - /// Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. - /// The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. - /// - /// Any additional search params will be combined into a logical AND expression. - /// - /// GET /users/search/names/{pattern} -> User[] - /// - /// User[] Matching users. (application/json) - /// - /// Pattern to match - /// Include only these fields in the response - /// Return only page N of paginated results - /// Return N rows of data per page - /// Fields to sort by - /// Match User Id - /// Match First name - /// Match Last name - /// Match Verified Looker employee - /// Match Email Address - /// Include or exclude disabled accounts in the results - public async Task> search_users_names( - string pattern, - string? fields = null, - long? page = null, - long? per_page = null, - string? sorts = null, - long? id = null, - string? first_name = null, - string? last_name = null, - bool? verified_looker_employee = null, - string? email = null, - bool? is_disabled = null, - ITransportSettings? options = null) -{ - pattern = SdkUtils.EncodeParam(pattern); - return await AuthRequest(HttpMethod.Get, $"/users/search/names/{pattern}", new Values { - { "fields", fields }, - { "page", page }, - { "per_page", per_page }, - { "sorts", sorts }, - { "id", id }, - { "first_name", first_name }, - { "last_name", last_name }, - { "verified_looker_employee", verified_looker_employee }, - { "email", email }, - { "is_disabled", is_disabled }},null,options); - } - - /// ### Get information about the user with a specific id. - /// - /// If the caller is an admin or the caller is the user being specified, then full user information will - /// be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains - /// The user name and avatar url, but no sensitive information. - /// - /// GET /users/{user_id} -> User - /// - /// User Specified user. (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> user( - long user_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update information about the user with a specific id. - /// - /// PATCH /users/{user_id} -> User - /// - /// User New state for specified user. (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> update_user( - long user_id, - WriteUser body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/users/{user_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Delete the user with a specific id. - /// - /// **DANGER** this will delete the user and all looks and other information owned by the user. - /// - /// DELETE /users/{user_id} -> string - /// - /// string User successfully deleted. (application/json) - /// - /// Id of user - public async Task> delete_user( - long user_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}", null,null,options); - } - - /// ### Get information about the user with a credential of given type with specific id. - /// - /// This is used to do things like find users by their embed external_user_id. Or, find the user with - /// a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential - /// types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id - /// for the user and is specific to each type of credential. - /// - /// An example using the Ruby sdk might look like: - /// - /// `sdk.user_for_credential('embed', 'customer-4959425')` - /// - /// This table shows the supported 'Credential Type' strings. The right column is for reference; it shows - /// which field in the given credential type is actually searched when finding a user with the supplied - /// 'credential_id'. - /// - /// | Credential Types | Id Field Matched | - /// | ---------------- | ---------------- | - /// | email | email | - /// | google | google_user_id | - /// | saml | saml_user_id | - /// | oidc | oidc_user_id | - /// | ldap | ldap_id | - /// | api | token | - /// | api3 | client_id | - /// | embed | external_user_id | - /// | looker_openid | email | - /// - /// **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/credential/{credential_type}/{credential_id} -> User - /// - /// User Specified user. (application/json) - /// - /// Type name of credential - /// Id of credential - /// Requested fields. - public async Task> user_for_credential( - string credential_type, - string credential_id, - string? fields = null, - ITransportSettings? options = null) -{ - credential_type = SdkUtils.EncodeParam(credential_type); - credential_id = SdkUtils.EncodeParam(credential_id); - return await AuthRequest(HttpMethod.Get, $"/users/credential/{credential_type}/{credential_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Email/password login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/{user_id}/credentials_email -> CredentialsEmail - /// - /// CredentialsEmail Email/Password Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> user_credentials_email( - long user_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_email", new Values { - { "fields", fields }},null,options); - } - - /// ### Email/password login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// POST /users/{user_id}/credentials_email -> CredentialsEmail - /// - /// CredentialsEmail Email/Password Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> create_user_credentials_email( - long user_id, - WriteCredentialsEmail body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, $"/users/{user_id}/credentials_email", new Values { - { "fields", fields }},body,options); - } - - /// ### Email/password login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// PATCH /users/{user_id}/credentials_email -> CredentialsEmail - /// - /// CredentialsEmail Email/Password Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> update_user_credentials_email( - long user_id, - WriteCredentialsEmail body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/users/{user_id}/credentials_email", new Values { - { "fields", fields }},body,options); - } - - /// ### Email/password login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// DELETE /users/{user_id}/credentials_email -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of user - public async Task> delete_user_credentials_email( - long user_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_email", null,null,options); - } - - /// ### Two-factor login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/{user_id}/credentials_totp -> CredentialsTotp - /// - /// CredentialsTotp Two-Factor Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> user_credentials_totp( - long user_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_totp", new Values { - { "fields", fields }},null,options); - } - - /// ### Two-factor login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// POST /users/{user_id}/credentials_totp -> CredentialsTotp - /// - /// CredentialsTotp Two-Factor Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> create_user_credentials_totp( - long user_id, - CredentialsTotp? body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, $"/users/{user_id}/credentials_totp", new Values { - { "fields", fields }},body,options); - } - - /// ### Two-factor login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// DELETE /users/{user_id}/credentials_totp -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of user - public async Task> delete_user_credentials_totp( - long user_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_totp", null,null,options); - } - - /// ### LDAP login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/{user_id}/credentials_ldap -> CredentialsLDAP - /// - /// CredentialsLDAP LDAP Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> user_credentials_ldap( - long user_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_ldap", new Values { - { "fields", fields }},null,options); - } - - /// ### LDAP login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// DELETE /users/{user_id}/credentials_ldap -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of user - public async Task> delete_user_credentials_ldap( - long user_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_ldap", null,null,options); - } - - /// ### Google authentication login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/{user_id}/credentials_google -> CredentialsGoogle - /// - /// CredentialsGoogle Google Auth Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> user_credentials_google( - long user_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_google", new Values { - { "fields", fields }},null,options); - } - - /// ### Google authentication login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// DELETE /users/{user_id}/credentials_google -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of user - public async Task> delete_user_credentials_google( - long user_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_google", null,null,options); - } - - /// ### Saml authentication login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/{user_id}/credentials_saml -> CredentialsSaml - /// - /// CredentialsSaml Saml Auth Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> user_credentials_saml( - long user_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_saml", new Values { - { "fields", fields }},null,options); - } - - /// ### Saml authentication login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// DELETE /users/{user_id}/credentials_saml -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of user - public async Task> delete_user_credentials_saml( - long user_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_saml", null,null,options); - } - - /// ### OpenID Connect (OIDC) authentication login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/{user_id}/credentials_oidc -> CredentialsOIDC - /// - /// CredentialsOIDC OIDC Auth Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> user_credentials_oidc( - long user_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_oidc", new Values { - { "fields", fields }},null,options); - } - - /// ### OpenID Connect (OIDC) authentication login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// DELETE /users/{user_id}/credentials_oidc -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of user - public async Task> delete_user_credentials_oidc( - long user_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_oidc", null,null,options); - } - - /// ### API login information for the specified user. This is for the newer API keys that can be added for any user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/{user_id}/credentials_api3/{credentials_api3_id} -> CredentialsApi3 - /// - /// CredentialsApi3 API Credential (application/json) - /// - /// Id of user - /// Id of API Credential - /// Requested fields. - public async Task> user_credentials_api3( - long user_id, - long credentials_api3_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_api3/{credentials_api3_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### API login information for the specified user. This is for the newer API keys that can be added for any user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// DELETE /users/{user_id}/credentials_api3/{credentials_api3_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of user - /// Id of API Credential - public async Task> delete_user_credentials_api3( - long user_id, - long credentials_api3_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_api3/{credentials_api3_id}", null,null,options); - } - - /// ### API login information for the specified user. This is for the newer API keys that can be added for any user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/{user_id}/credentials_api3 -> CredentialsApi3[] - /// - /// CredentialsApi3[] API Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> all_user_credentials_api3s( - long user_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_api3", new Values { - { "fields", fields }},null,options); - } - - /// ### API login information for the specified user. This is for the newer API keys that can be added for any user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// POST /users/{user_id}/credentials_api3 -> CredentialsApi3 - /// - /// CredentialsApi3 API Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> create_user_credentials_api3( - long user_id, - CredentialsApi3? body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, $"/users/{user_id}/credentials_api3", new Values { - { "fields", fields }},body,options); - } - - /// ### Embed login information for the specified user. - /// - /// Calls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled - /// - /// GET /users/{user_id}/credentials_embed/{credentials_embed_id} -> CredentialsEmbed - /// - /// CredentialsEmbed Embedding Credential (application/json) - /// - /// Id of user - /// Id of Embedding Credential - /// Requested fields. - public async Task> user_credentials_embed( - long user_id, - long credentials_embed_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_embed/{credentials_embed_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Embed login information for the specified user. - /// - /// Calls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled - /// - /// DELETE /users/{user_id}/credentials_embed/{credentials_embed_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of user - /// Id of Embedding Credential - public async Task> delete_user_credentials_embed( - long user_id, - long credentials_embed_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_embed/{credentials_embed_id}", null,null,options); - } - - /// ### Embed login information for the specified user. - /// - /// Calls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled - /// - /// GET /users/{user_id}/credentials_embed -> CredentialsEmbed[] - /// - /// CredentialsEmbed[] Embedding Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> all_user_credentials_embeds( - long user_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_embed", new Values { - { "fields", fields }},null,options); - } - - /// ### Looker Openid login information for the specified user. Used by Looker Analysts. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/{user_id}/credentials_looker_openid -> CredentialsLookerOpenid - /// - /// CredentialsLookerOpenid Looker OpenId Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> user_credentials_looker_openid( - long user_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_looker_openid", new Values { - { "fields", fields }},null,options); - } - - /// ### Looker Openid login information for the specified user. Used by Looker Analysts. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// DELETE /users/{user_id}/credentials_looker_openid -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of user - public async Task> delete_user_credentials_looker_openid( - long user_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_looker_openid", null,null,options); - } - - /// ### Web login session for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/{user_id}/sessions/{session_id} -> Session - /// - /// Session Web Login Session (application/json) - /// - /// Id of user - /// Id of Web Login Session - /// Requested fields. - public async Task> user_session( - long user_id, - long session_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/sessions/{session_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Web login session for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// DELETE /users/{user_id}/sessions/{session_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of user - /// Id of Web Login Session - public async Task> delete_user_session( - long user_id, - long session_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/sessions/{session_id}", null,null,options); - } - - /// ### Web login session for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/{user_id}/sessions -> Session[] - /// - /// Session[] Web Login Session (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> all_user_sessions( - long user_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/sessions", new Values { - { "fields", fields }},null,options); - } - - /// ### Create a password reset token. - /// This will create a cryptographically secure random password reset token for the user. - /// If the user already has a password reset token then this invalidates the old token and creates a new one. - /// The token is expressed as the 'password_reset_url' of the user's email/password credential object. - /// This takes an optional 'expires' param to indicate if the new token should be an expiring token. - /// Tokens that expire are typically used for self-service password resets for existing users. - /// Invitation emails for new users typically are not set to expire. - /// The expire period is always 60 minutes when expires is enabled. - /// This method can be called with an empty body. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// POST /users/{user_id}/credentials_email/password_reset -> CredentialsEmail - /// - /// CredentialsEmail email/password credential (application/json) - /// - /// Id of user - /// Expiring token. - /// Requested fields. - public async Task> create_user_credentials_email_password_reset( - long user_id, - bool? expires = null, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, $"/users/{user_id}/credentials_email/password_reset", new Values { - { "expires", expires }, - { "fields", fields }},null,options); - } - - /// ### Get information about roles of a given user - /// - /// GET /users/{user_id}/roles -> Role[] - /// - /// Role[] Roles of user. (application/json) - /// - /// Id of user - /// Requested fields. - /// Get only roles associated directly with the user: exclude those only associated through groups. - public async Task> user_roles( - long user_id, - string? fields = null, - bool? direct_association_only = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/roles", new Values { - { "fields", fields }, - { "direct_association_only", direct_association_only }},null,options); - } - - /// ### Set roles of the user with a specific id. - /// - /// PUT /users/{user_id}/roles -> Role[] - /// - /// Role[] Roles of user. (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> set_user_roles( - long user_id, - string[] body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Put, $"/users/{user_id}/roles", new Values { - { "fields", fields }},body,options); - } - - /// ### Get user attribute values for a given user. - /// - /// Returns the values of specified user attributes (or all user attributes) for a certain user. - /// - /// A value for each user attribute is searched for in the following locations, in this order: - /// - /// 1. in the user's account information - /// 1. in groups that the user is a member of - /// 1. the default value of the user attribute - /// - /// If more than one group has a value defined for a user attribute, the group with the lowest rank wins. - /// - /// The response will only include user attributes for which values were found. Use `include_unset=true` to include - /// empty records for user attributes with no value. - /// - /// The value of all hidden user attributes will be blank. - /// - /// GET /users/{user_id}/attribute_values -> UserAttributeWithValue[] - /// - /// UserAttributeWithValue[] Value of user attribute. (application/json) - /// - /// Id of user - /// Requested fields. - /// Specific user attributes to request. Omit or leave blank to request all user attributes. - /// If true, returns all values in the search path instead of just the first value found. Useful for debugging group precedence. - /// If true, returns an empty record for each requested attribute that has no user, group, or default value. - public async Task> user_attribute_user_values( - long user_id, - string? fields = null, - DelimArray? user_attribute_ids = null, - bool? all_values = null, - bool? include_unset = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/attribute_values", new Values { - { "fields", fields }, - { "user_attribute_ids", user_attribute_ids }, - { "all_values", all_values }, - { "include_unset", include_unset }},null,options); - } - - /// ### Store a custom value for a user attribute in a user's account settings. - /// - /// Per-user user attribute values take precedence over group or default values. - /// - /// PATCH /users/{user_id}/attribute_values/{user_attribute_id} -> UserAttributeWithValue - /// - /// UserAttributeWithValue User attribute value. (application/json) - /// - /// Id of user - /// Id of user attribute - public async Task> set_user_attribute_user_value( - long user_id, - long user_attribute_id, - WriteUserAttributeWithValue body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/users/{user_id}/attribute_values/{user_attribute_id}", null,body,options); - } - - /// ### Delete a user attribute value from a user's account settings. - /// - /// After the user attribute value is deleted from the user's account settings, subsequent requests - /// for the user attribute value for this user will draw from the user's groups or the default - /// value of the user attribute. See [Get User Attribute Values](#!/User/user_attribute_user_values) for more - /// information about how user attribute values are resolved. - /// - /// DELETE /users/{user_id}/attribute_values/{user_attribute_id} -> void - /// - /// void Deleted () - /// - /// Id of user - /// Id of user attribute - public async Task> delete_user_attribute_user_value( - long user_id, - long user_attribute_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/attribute_values/{user_attribute_id}", null,null,options); - } - - #endregion User: Manage Users - - #region UserAttribute: Manage User Attributes - - /// ### Get information about all user attributes. - /// - /// GET /user_attributes -> UserAttribute[] - /// - /// UserAttribute[] User Attribute (application/json) - /// - /// Requested fields. - /// Fields to order the results by. Sortable fields include: name, label - public async Task> all_user_attributes( - string? fields = null, - string? sorts = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/user_attributes", new Values { - { "fields", fields }, - { "sorts", sorts }},null,options); - } - - /// ### Create a new user attribute - /// - /// Permission information for a user attribute is conveyed through the `can` and `user_can_edit` fields. - /// The `user_can_edit` field indicates whether an attribute is user-editable _anywhere_ in the application. - /// The `can` field gives more granular access information, with the `set_value` child field indicating whether - /// an attribute's value can be set by [Setting the User Attribute User Value](#!/User/set_user_attribute_user_value). - /// - /// Note: `name` and `label` fields must be unique across all user attributes in the Looker instance. - /// Attempting to create a new user attribute with a name or label that duplicates an existing - /// user attribute will fail with a 422 error. - /// - /// POST /user_attributes -> UserAttribute - /// - /// UserAttribute User Attribute (application/json) - /// - /// Requested fields. - public async Task> create_user_attribute( - WriteUserAttribute body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, "/user_attributes", new Values { - { "fields", fields }},body,options); - } - - /// ### Get information about a user attribute. - /// - /// GET /user_attributes/{user_attribute_id} -> UserAttribute - /// - /// UserAttribute User Attribute (application/json) - /// - /// Id of user attribute - /// Requested fields. - public async Task> user_attribute( - long user_attribute_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/user_attributes/{user_attribute_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update a user attribute definition. - /// - /// PATCH /user_attributes/{user_attribute_id} -> UserAttribute - /// - /// UserAttribute User Attribute (application/json) - /// - /// Id of user attribute - /// Requested fields. - public async Task> update_user_attribute( - long user_attribute_id, - WriteUserAttribute body, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Patch, $"/user_attributes/{user_attribute_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Delete a user attribute (admin only). - /// - /// DELETE /user_attributes/{user_attribute_id} -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of user attribute - public async Task> delete_user_attribute( - long user_attribute_id, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Delete, $"/user_attributes/{user_attribute_id}", null,null,options); - } - - /// ### Returns all values of a user attribute defined by user groups, in precedence order. - /// - /// A user may be a member of multiple groups which define different values for a given user attribute. - /// The order of group-values in the response determines precedence for selecting which group-value applies - /// to a given user. For more information, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values). - /// - /// Results will only include groups that the caller's user account has permission to see. - /// - /// GET /user_attributes/{user_attribute_id}/group_values -> UserAttributeGroupValue[] - /// - /// UserAttributeGroupValue[] All group values for attribute. (application/json) - /// - /// Id of user attribute - /// Requested fields. - public async Task> all_user_attribute_group_values( - long user_attribute_id, - string? fields = null, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, $"/user_attributes/{user_attribute_id}/group_values", new Values { - { "fields", fields }},null,options); - } - - /// ### Define values for a user attribute across a set of groups, in priority order. - /// - /// This function defines all values for a user attribute defined by user groups. This is a global setting, potentially affecting - /// all users in the system. This function replaces any existing group value definitions for the indicated user attribute. - /// - /// The value of a user attribute for a given user is determined by searching the following locations, in this order: - /// - /// 1. the user's account settings - /// 2. the groups that the user is a member of - /// 3. the default value of the user attribute, if any - /// - /// The user may be a member of multiple groups which define different values for that user attribute. The order of items in the group_values parameter - /// determines which group takes priority for that user. Lowest array index wins. - /// - /// An alternate method to indicate the selection precedence of group-values is to assign numbers to the 'rank' property of each - /// group-value object in the array. Lowest 'rank' value wins. If you use this technique, you must assign a - /// rank value to every group-value object in the array. - /// - /// To set a user attribute value for a single user, see [Set User Attribute User Value](#!/User/set_user_attribute_user_value). - /// To set a user attribute value for all members of a group, see [Set User Attribute Group Value](#!/Group/update_user_attribute_group_value). - /// - /// POST /user_attributes/{user_attribute_id}/group_values -> UserAttributeGroupValue[] - /// - /// UserAttributeGroupValue[] Array of group values. (application/json) - /// - /// Id of user attribute - public async Task> set_user_attribute_group_values( - long user_attribute_id, - UserAttributeGroupValue[] body, - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Post, $"/user_attributes/{user_attribute_id}/group_values", null,body,options); - } - - #endregion UserAttribute: Manage User Attributes - - #region Workspace: Manage Workspaces - - /// ### Get All Workspaces - /// - /// Returns all workspaces available to the calling user. - /// - /// GET /workspaces -> Workspace[] - /// - /// Workspace[] Workspace (application/json) - /// - public async Task> all_workspaces( - ITransportSettings? options = null) -{ - return await AuthRequest(HttpMethod.Get, "/workspaces", null,null,options); - } - - /// ### Get A Workspace - /// - /// Returns information about a workspace such as the git status and selected branches - /// of all projects available to the caller's user account. - /// - /// A workspace defines which versions of project files will be used to evaluate expressions - /// and operations that use model definitions - operations such as running queries or rendering dashboards. - /// Each project has its own git repository, and each project in a workspace may be configured to reference - /// particular branch or revision within their respective repositories. - /// - /// There are two predefined workspaces available: "production" and "dev". - /// - /// The production workspace is shared across all Looker users. Models in the production workspace are read-only. - /// Changing files in production is accomplished by modifying files in a git branch and using Pull Requests - /// to merge the changes from the dev branch into the production branch, and then telling - /// Looker to sync with production. - /// - /// The dev workspace is local to each Looker user. Changes made to project/model files in the dev workspace only affect - /// that user, and only when the dev workspace is selected as the active workspace for the API session. - /// (See set_session_workspace()). - /// - /// The dev workspace is NOT unique to an API session. Two applications accessing the Looker API using - /// the same user account will see the same files in the dev workspace. To avoid collisions between - /// API clients it's best to have each client login with API credentials for a different user account. - /// - /// Changes made to files in a dev workspace are persistent across API sessions. It's a good - /// idea to commit any changes you've made to the git repository, but not strictly required. Your modified files - /// reside in a special user-specific directory on the Looker server and will still be there when you login in again - /// later and use update_session(workspace_id: "dev") to select the dev workspace for the new API session. - /// - /// GET /workspaces/{workspace_id} -> Workspace - /// - /// Workspace Workspace (application/json) - /// - /// Id of the workspace - public async Task> workspace( - string workspace_id, - ITransportSettings? options = null) -{ - workspace_id = SdkUtils.EncodeParam(workspace_id); - return await AuthRequest(HttpMethod.Get, $"/workspaces/{workspace_id}", null,null,options); - } - - #endregion Workspace: Manage Workspaces - } -} diff --git a/csharp/sdk/3.1/models.cs b/csharp/sdk/3.1/models.cs deleted file mode 100644 index 966b042e7..000000000 --- a/csharp/sdk/3.1/models.cs +++ /dev/null @@ -1,5723 +0,0 @@ -/// MIT License -/// -/// Copyright (c) 2023 Looker Data Sciences, Inc. -/// -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in all -/// copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -/// SOFTWARE. -/// - -/// 258 API models: 190 Spec, 0 Request, 51 Write, 17 Enum - -#nullable enable -using System; -using System.Runtime.Serialization; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using Looker.RTL; -using Url = System.String; -using Password = System.String; -// ReSharper disable InconsistentNaming - -/// NOTE: Do not edit this file generated by Looker SDK Codegen for API 3.1 - -namespace Looker.SDK.API31 -{ - - -public class AccessToken : SdkModel -{ - /// Access Token used for API calls (read-only) - public string? access_token { get; set; } = null; - /// Type of Token (read-only) - public string? token_type { get; set; } = null; - /// Number of seconds before the token expires (read-only) - public long? expires_in { get; set; } = null; -} - -/// The appropriate horizontal text alignment the values of this field should be displayed in. Valid values are: "left", "right". (Enum defined in LookmlModelExploreField) -public enum Align -{ - [EnumMember(Value = "left")] - left, - [EnumMember(Value = "right")] - right -} - -public class ApiSession : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// The id of active workspace for this session - public string? workspace_id { get; set; } = null; - /// The id of the actual user in the case when this session represents one user sudo'ing as another (read-only) - public long? sudo_user_id { get; set; } = null; -} - -public class ApiVersion : SdkModel -{ - /// Current Looker release version number (read-only) - public string? looker_release_version { get; set; } = null; - public ApiVersionElement? current_version { get; set; } - /// Array of versions supported by this Looker instance (read-only) - public ApiVersionElement[]? supported_versions { get; set; } = null; - /// API server base url (read-only) - public string? api_server_url { get; set; } = null; - /// Web server base url (read-only) - public string? web_server_url { get; set; } = null; -} - -public class ApiVersionElement : SdkModel -{ - /// Version number as it appears in '/api/xxx/' urls (read-only) - public string? version { get; set; } = null; - /// Full version number including minor version (read-only) - public string? full_version { get; set; } = null; - /// Status of this version (read-only) - public string? status { get; set; } = null; - /// Url for swagger.json for this version (read-only) - public Url? swagger_url { get; set; } = null; -} - -public class BackupConfiguration : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Type of backup: looker-s3 or custom-s3 - public string? type { get; set; } = null; - /// Name of bucket for custom-s3 backups - public string? custom_s3_bucket { get; set; } = null; - /// Name of region where the bucket is located - public string? custom_s3_bucket_region { get; set; } = null; - /// (Write-Only) AWS S3 key used for custom-s3 backups - public string? custom_s3_key { get; set; } = null; - /// (Write-Only) AWS S3 secret used for custom-s3 backups - public string? custom_s3_secret { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -/// Field category Valid values are: "parameter", "filter", "measure", "dimension". (Enum defined in LookmlModelExploreField) -public enum Category -{ - [EnumMember(Value = "parameter")] - parameter, - [EnumMember(Value = "filter")] - filter, - [EnumMember(Value = "measure")] - measure, - [EnumMember(Value = "dimension")] - dimension -} - -public class ColorCollection : SdkModel -{ - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Label of color collection - public string? label { get; set; } = null; - /// Array of categorical palette definitions - public DiscretePalette[]? categoricalPalettes { get; set; } = null; - /// Array of discrete palette definitions - public ContinuousPalette[]? sequentialPalettes { get; set; } = null; - /// Array of diverging palette definitions - public ContinuousPalette[]? divergingPalettes { get; set; } = null; -} - -public class ColorStop : SdkModel -{ - /// CSS color string - public string? color { get; set; } = null; - /// Offset in continuous palette (0 to 100) - public long? offset { get; set; } = null; -} - -public class ContentFavorite : SdkModel -{ - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// User Id which owns this ContentFavorite - public long? user_id { get; set; } = null; - /// Content Metadata Id associated with this ContentFavorite - public long? content_metadata_id { get; set; } = null; - /// Id of a look (read-only) - public long? look_id { get; set; } = null; - /// Id of a dashboard (read-only) - public long? dashboard_id { get; set; } = null; - public LookBasic? look { get; set; } - public DashboardBase? dashboard { get; set; } -} - -public class ContentMeta : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Name or title of underlying content (read-only) - public string? name { get; set; } = null; - /// Id of Parent Content (read-only) - public long? parent_id { get; set; } = null; - /// Id of associated dashboard when content_type is "dashboard" (read-only) - public string? dashboard_id { get; set; } = null; - /// Id of associated look when content_type is "look" (read-only) - public long? look_id { get; set; } = null; - /// Id of associated folder when content_type is "space" (read-only) - public string? folder_id { get; set; } = null; - /// Content Type ("dashboard", "look", or "space") (read-only) - public string? content_type { get; set; } = null; - /// Whether content inherits its access levels from parent - public bool? inherits { get; set; } = null; - /// Id of Inherited Content (read-only) - public long? inheriting_id { get; set; } = null; - /// Content Slug (read-only) - public string? slug { get; set; } = null; - /// Id of associated space when content_type is "space" (read-only) - public string? space_id { get; set; } = null; -} - -/// WARNING: no writeable properties found for POST, PUT, or PATCH -public class ContentMetaGroupUser : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Id of associated Content Metadata (read-only) - public string? content_metadata_id { get; set; } = null; - /// Type of permission: "view" or "edit" Valid values are: "view", "edit". (read-only) - [JsonConverter(typeof(StringEnumConverter))] - public PermissionType? permission_type { get; set; } - /// ID of associated group (read-only) - public long? group_id { get; set; } = null; - /// ID of associated user (read-only) - public long? user_id { get; set; } = null; -} - -public class ContentValidation : SdkModel -{ - /// A list of content errors (read-only) - public ContentValidatorError[]? content_with_errors { get; set; } = null; - /// Duration of content validation in seconds (read-only) - public float? computation_time { get; set; } = null; - /// The number of looks validated (read-only) - public long? total_looks_validated { get; set; } = null; - /// The number of dashboard elements validated (read-only) - public long? total_dashboard_elements_validated { get; set; } = null; - /// The number of dashboard filters validated (read-only) - public long? total_dashboard_filters_validated { get; set; } = null; - /// The number of scheduled plans validated (read-only) - public long? total_scheduled_plans_validated { get; set; } = null; - /// The number of alerts validated (read-only) - public long? total_alerts_validated { get; set; } = null; - /// The number of explores used across all content validated (read-only) - public long? total_explores_validated { get; set; } = null; -} - -public class ContentValidationAlert : SdkModel -{ - /// ID of the alert - public long? id { get; set; } = null; - /// ID of the LookML dashboard associated with the alert - public string? lookml_dashboard_id { get; set; } = null; - /// ID of the LookML dashboard element associated with the alert - public string? lookml_link_id { get; set; } = null; - /// Domain for the custom url selected by the alert creator from the admin defined domain allowlist - public string? custom_url_base { get; set; } = null; - /// Parameters and path for the custom url defined by the alert creator - public string? custom_url_params { get; set; } = null; - /// Label for the custom url defined by the alert creator - public string? custom_url_label { get; set; } = null; - /// Boolean to determine if the custom url should be used - public bool? show_custom_url { get; set; } = null; - /// An optional, user-defined title for the alert - public string? custom_title { get; set; } = null; -} - -public class ContentValidationDashboard : SdkModel -{ - /// Description - public string? description { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - public ContentValidationFolder? folder { get; set; } - /// Dashboard Title - public string? title { get; set; } = null; - public ContentValidationSpace? space { get; set; } -} - -public class ContentValidationDashboardElement : SdkModel -{ - /// Text tile body text - public string? body_text { get; set; } = null; - /// Id of Dashboard - public string? dashboard_id { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Id Of Look - public string? look_id { get; set; } = null; - /// Note Display - public string? note_display { get; set; } = null; - /// Note State - public string? note_state { get; set; } = null; - /// Note Text - public string? note_text { get; set; } = null; - /// Note Text as Html (read-only) - public string? note_text_as_html { get; set; } = null; - /// Id Of Query - public long? query_id { get; set; } = null; - /// Text tile subtitle text - public string? subtitle_text { get; set; } = null; - /// Title of dashboard element - public string? title { get; set; } = null; - /// Whether title is hidden - public bool? title_hidden { get; set; } = null; - /// Text tile title - public string? title_text { get; set; } = null; - /// Type - public string? type { get; set; } = null; - /// JSON with all the properties required for rich editor and buttons elements - public string? rich_content_json { get; set; } = null; -} - -public class ContentValidationDashboardFilter : SdkModel -{ - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Id of Dashboard (read-only) - public string? dashboard_id { get; set; } = null; - /// Name of filter - public string? name { get; set; } = null; - /// Title of filter - public string? title { get; set; } = null; - /// Type of filter: one of date, number, string, or field - public string? type { get; set; } = null; - /// Default value of filter - public string? default_value { get; set; } = null; - /// Model of filter (required if type = field) - public string? model { get; set; } = null; - /// Explore of filter (required if type = field) - public string? explore { get; set; } = null; - /// Dimension of filter (required if type = field) - public string? dimension { get; set; } = null; -} - -public class ContentValidationError : SdkModel -{ - /// Error message (read-only) - public string? message { get; set; } = null; - /// Name of the field involved in the error (read-only) - public string? field_name { get; set; } = null; - /// Name of the model involved in the error (read-only) - public string? model_name { get; set; } = null; - /// Name of the explore involved in the error (read-only) - public string? explore_name { get; set; } = null; - /// Whether this validation error is removable (read-only) - public bool? removable { get; set; } = null; -} - -public class ContentValidationFolder : SdkModel -{ - /// Unique Name - public string name { get; set; } = ""; - /// Unique Id (read-only) - public string? id { get; set; } = null; -} - -public class ContentValidationLook : SdkModel -{ - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Look Title - public string? title { get; set; } = null; - /// Short Url (read-only) - public string? short_url { get; set; } = null; - public ContentValidationFolder? folder { get; set; } - public ContentValidationSpace? space { get; set; } -} - -public class ContentValidationLookMLDashboard : SdkModel -{ - /// ID of the LookML Dashboard (read-only) - public string? id { get; set; } = null; - /// Title of the LookML Dashboard (read-only) - public string? title { get; set; } = null; - /// ID of Space (read-only) - public string? space_id { get; set; } = null; - public SpaceBase? space { get; set; } -} - -public class ContentValidationLookMLDashboardElement : SdkModel -{ - /// Link ID of the LookML Dashboard Element (read-only) - public string? lookml_link_id { get; set; } = null; - /// Title of the LookML Dashboard Element (read-only) - public string? title { get; set; } = null; -} - -public class ContentValidationScheduledPlan : SdkModel -{ - /// Name of this scheduled plan - public string? name { get; set; } = null; - /// Id of a look - public long? look_id { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; -} - -public class ContentValidationSpace : SdkModel -{ - /// Unique Name - public string name { get; set; } = ""; - /// Unique Id (read-only) - public string? id { get; set; } = null; -} - -public class ContentValidatorError : SdkModel -{ - public ContentValidationLook? look { get; set; } - public ContentValidationDashboard? dashboard { get; set; } - public ContentValidationDashboardElement? dashboard_element { get; set; } - public ContentValidationDashboardFilter? dashboard_filter { get; set; } - public ContentValidationScheduledPlan? scheduled_plan { get; set; } - public ContentValidationAlert? alert { get; set; } - public ContentValidationLookMLDashboard? lookml_dashboard { get; set; } - public ContentValidationLookMLDashboardElement? lookml_dashboard_element { get; set; } - /// A list of errors found for this piece of content (read-only) - public ContentValidationError[]? errors { get; set; } = null; - /// An id unique to this piece of content for this validation run (read-only) - public string? id { get; set; } = null; -} - -public class ContentView : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Id of viewed Look (read-only) - public long? look_id { get; set; } = null; - /// Id of the viewed Dashboard (read-only) - public long? dashboard_id { get; set; } = null; - /// Name or title of underlying content (read-only) - public string? title { get; set; } = null; - /// Content metadata id of the Look or Dashboard (read-only) - public long? content_metadata_id { get; set; } = null; - /// Id of user content was viewed by (read-only) - public long? user_id { get; set; } = null; - /// Id of group content was viewed by (read-only) - public long? group_id { get; set; } = null; - /// Number of times piece of content was viewed (read-only) - public long? view_count { get; set; } = null; - /// Number of times piece of content was favorited (read-only) - public long? favorite_count { get; set; } = null; - /// Date the piece of content was last viewed (read-only) - public string? last_viewed_at { get; set; } = null; - /// Week start date for the view and favorite count during that given week (read-only) - public string? start_of_week_date { get; set; } = null; -} - -public class ContinuousPalette : SdkModel -{ - /// Unique identity string (read-only) - public string? id { get; set; } = null; - /// Label for palette - public string? label { get; set; } = null; - /// Type of palette - public string? type { get; set; } = null; - /// Array of ColorStops in the palette - public ColorStop[]? stops { get; set; } = null; -} - -public class CreateDashboardFilter : SdkModel -{ - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Id of Dashboard - public string dashboard_id { get; set; } = ""; - /// Name of filter - public string name { get; set; } = ""; - /// Title of filter - public string title { get; set; } = ""; - /// Type of filter: one of date, number, string, or field - public string type { get; set; } = ""; - /// Default value of filter - public string? default_value { get; set; } = null; - /// Model of filter (required if type = field) - public string? model { get; set; } = null; - /// Explore of filter (required if type = field) - public string? explore { get; set; } = null; - /// Dimension of filter (required if type = field) - public string? dimension { get; set; } = null; - /// Field information (read-only) - public StringDictionary? field { get; set; } = null; - /// Display order of this filter relative to other filters - public long? row { get; set; } = null; - /// Array of listeners for faceted filters - public string[]? listens_to_filters { get; set; } = null; - /// Whether the filter allows multiple filter values (deprecated in the latest version of dashboards) - public bool? allow_multiple_values { get; set; } = null; - /// Whether the filter requires a value to run the dashboard - public bool? required { get; set; } = null; - /// The visual configuration for this filter. Used to set up how the UI for this filter should appear. - public StringDictionary? ui_config { get; set; } = null; -} - -public class CreateDashboardRenderTask : SdkModel -{ - /// Filter values to apply to the dashboard queries, in URL query format - public string? dashboard_filters { get; set; } = null; - /// Dashboard layout style: single_column or tiled - public string? dashboard_style { get; set; } = null; -} - -public class CreateFolder : SdkModel -{ - /// Unique Name - public string name { get; set; } = ""; - /// Id of Parent. If the parent id is null, this is a root-level entry - public string parent_id { get; set; } = ""; -} - -public class CreateQueryTask : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Id of query to run - public long query_id { get; set; } - /// Desired async query result format. Valid values are: "inline_json", "json", "json_detail", "json_fe", "json_bi", "csv", "html", "md", "txt", "xlsx", "gsxml", "sql". - [JsonConverter(typeof(StringEnumConverter))] - public ResultFormat result_format { get; set; } - /// Source of query task - public string? source { get; set; } = null; - /// Create the task but defer execution - public bool? deferred { get; set; } = null; - /// Id of look associated with query. - public long? look_id { get; set; } = null; - /// Id of dashboard associated with query. - public string? dashboard_id { get; set; } = null; -} - -public class CreateSpace : SdkModel -{ - /// Unique Name - public string name { get; set; } = ""; - /// Id of Parent. If the parent id is null, this is a root-level entry - public string parent_id { get; set; } = ""; -} - -/// WARNING: no writeable properties found for POST, PUT, or PATCH -public class CredentialsApi3 : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// API key client_id (read-only) - public string? client_id { get; set; } = null; - /// Timestamp for the creation of this credential (read-only) - public string? created_at { get; set; } = null; - /// Has this credential been disabled? (read-only) - public bool? is_disabled { get; set; } = null; - /// Short name for the type of this kind of credential (read-only) - public string? type { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -public class CredentialsEmail : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Timestamp for the creation of this credential (read-only) - public string? created_at { get; set; } = null; - /// EMail address used for user login - public string? email { get; set; } = null; - /// Force the user to change their password upon their next login - public bool? forced_password_reset_at_next_login { get; set; } = null; - /// Unique Id of the user (read-only) - public string? user_id { get; set; } = null; - /// Has this credential been disabled? (read-only) - public bool? is_disabled { get; set; } = null; - /// Timestamp for most recent login using credential (read-only) - public string? logged_in_at { get; set; } = null; - /// Url with one-time use secret token that the user can use to reset password (read-only) - public string? password_reset_url { get; set; } = null; - /// Url with one-time use secret token that the user can use to setup account (read-only) - public string? account_setup_url { get; set; } = null; - /// Short name for the type of this kind of credential (read-only) - public string? type { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; - /// Link to get this user (read-only) - public Url? user_url { get; set; } = null; -} - -public class CredentialsEmbed : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Timestamp for the creation of this credential (read-only) - public string? created_at { get; set; } = null; - /// Embedder's id for a group to which this user was added during the most recent login (read-only) - public string? external_group_id { get; set; } = null; - /// Embedder's unique id for the user (read-only) - public string? external_user_id { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Has this credential been disabled? (read-only) - public bool? is_disabled { get; set; } = null; - /// Timestamp for most recent login using credential (read-only) - public string? logged_in_at { get; set; } = null; - /// Short name for the type of this kind of credential (read-only) - public string? type { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -public class CredentialsGoogle : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Timestamp for the creation of this credential (read-only) - public string? created_at { get; set; } = null; - /// Google domain (read-only) - public string? domain { get; set; } = null; - /// EMail address (read-only) - public string? email { get; set; } = null; - /// Google's Unique ID for this user (read-only) - public string? google_user_id { get; set; } = null; - /// Has this credential been disabled? (read-only) - public bool? is_disabled { get; set; } = null; - /// Timestamp for most recent login using credential (read-only) - public string? logged_in_at { get; set; } = null; - /// Short name for the type of this kind of credential (read-only) - public string? type { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -public class CredentialsLDAP : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Timestamp for the creation of this credential (read-only) - public string? created_at { get; set; } = null; - /// EMail address (read-only) - public string? email { get; set; } = null; - /// Has this credential been disabled? (read-only) - public bool? is_disabled { get; set; } = null; - /// LDAP Distinguished name for this user (as-of the last login) (read-only) - public string? ldap_dn { get; set; } = null; - /// LDAP Unique ID for this user (read-only) - public string? ldap_id { get; set; } = null; - /// Timestamp for most recent login using credential (read-only) - public string? logged_in_at { get; set; } = null; - /// Short name for the type of this kind of credential (read-only) - public string? type { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -public class CredentialsLookerOpenid : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Timestamp for the creation of this credential (read-only) - public string? created_at { get; set; } = null; - /// EMail address used for user login (read-only) - public string? email { get; set; } = null; - /// Has this credential been disabled? (read-only) - public bool? is_disabled { get; set; } = null; - /// Timestamp for most recent login using credential (read-only) - public string? logged_in_at { get; set; } = null; - /// IP address of client for most recent login using credential (read-only) - public string? logged_in_ip { get; set; } = null; - /// Short name for the type of this kind of credential (read-only) - public string? type { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; - /// Link to get this user (read-only) - public Url? user_url { get; set; } = null; -} - -public class CredentialsOIDC : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Timestamp for the creation of this credential (read-only) - public string? created_at { get; set; } = null; - /// EMail address (read-only) - public string? email { get; set; } = null; - /// Has this credential been disabled? (read-only) - public bool? is_disabled { get; set; } = null; - /// Timestamp for most recent login using credential (read-only) - public string? logged_in_at { get; set; } = null; - /// OIDC OP's Unique ID for this user (read-only) - public string? oidc_user_id { get; set; } = null; - /// Short name for the type of this kind of credential (read-only) - public string? type { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -public class CredentialsSaml : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Timestamp for the creation of this credential (read-only) - public string? created_at { get; set; } = null; - /// EMail address (read-only) - public string? email { get; set; } = null; - /// Has this credential been disabled? (read-only) - public bool? is_disabled { get; set; } = null; - /// Timestamp for most recent login using credential (read-only) - public string? logged_in_at { get; set; } = null; - /// Saml IdP's Unique ID for this user (read-only) - public string? saml_user_id { get; set; } = null; - /// Short name for the type of this kind of credential (read-only) - public string? type { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -/// WARNING: no writeable properties found for POST, PUT, or PATCH -public class CredentialsTotp : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Timestamp for the creation of this credential (read-only) - public string? created_at { get; set; } = null; - /// Has this credential been disabled? (read-only) - public bool? is_disabled { get; set; } = null; - /// Short name for the type of this kind of credential (read-only) - public string? type { get; set; } = null; - /// User has verified (read-only) - public bool? verified { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -public class CustomWelcomeEmail : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// If true, custom email content will replace the default body of welcome emails - public bool? enabled { get; set; } = null; - /// The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - public string? content { get; set; } = null; - /// The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. - public string? subject { get; set; } = null; - /// The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. - public string? header { get; set; } = null; -} - -public class Dashboard : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Content Favorite Id (read-only) - public long? content_favorite_id { get; set; } = null; - /// Id of content metadata (read-only) - public long? content_metadata_id { get; set; } = null; - /// Description - public string? description { get; set; } = null; - /// Is Hidden - public bool? hidden { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - public LookModel? model { get; set; } - /// Timezone in which the Dashboard will run by default. - public string? query_timezone { get; set; } = null; - /// Is Read-only (read-only) - public bool? @readonly { get; set; } = null; - /// Refresh Interval, as a time duration phrase like "2 hours 30 minutes". A number with no time units will be interpreted as whole seconds. - public string? refresh_interval { get; set; } = null; - /// Refresh Interval in milliseconds (read-only) - public long? refresh_interval_to_i { get; set; } = null; - public FolderBase? folder { get; set; } - /// Dashboard Title - public string? title { get; set; } = null; - /// Id of User (read-only) - public long? user_id { get; set; } = null; - /// Content Metadata Slug - public string? slug { get; set; } = null; - /// The preferred route for viewing this dashboard (ie: dashboards or dashboards-next) - public string? preferred_viewer { get; set; } = null; - public SpaceBase? space { get; set; } - /// Enables alerts to keep in sync with dashboard filter changes - public bool? alert_sync_with_dashboard_filter_enabled { get; set; } = null; - /// Background color - public string? background_color { get; set; } = null; - /// Time that the Dashboard was created. (read-only) - public DateTime? created_at { get; set; } = null; - /// Enables crossfiltering in dashboards - only available in dashboards-next (beta) - public bool? crossfilter_enabled { get; set; } = null; - /// Elements (read-only) - public DashboardElement[]? dashboard_elements { get; set; } = null; - /// Filters (read-only) - public DashboardFilter[]? dashboard_filters { get; set; } = null; - /// Layouts (read-only) - public DashboardLayout[]? dashboard_layouts { get; set; } = null; - /// Whether or not a dashboard is 'soft' deleted. - public bool? deleted { get; set; } = null; - /// Time that the Dashboard was 'soft' deleted. (read-only) - public DateTime? deleted_at { get; set; } = null; - /// Id of User that 'soft' deleted the dashboard. (read-only) - public long? deleter_id { get; set; } = null; - /// Relative path of URI of LookML file to edit the dashboard (LookML dashboard only). (read-only) - public Url? edit_uri { get; set; } = null; - /// Allow visualizations to be viewed in full screen mode - public bool? enable_viz_full_screen { get; set; } = null; - /// Number of times favorited (read-only) - public long? favorite_count { get; set; } = null; - /// Sets the default state of the filters bar to collapsed or open - public bool? filters_bar_collapsed { get; set; } = null; - /// Sets the default state of the filters location to top(true) or right(false) - public bool? filters_location_top { get; set; } = null; - /// Time the dashboard was last accessed (read-only) - public DateTime? last_accessed_at { get; set; } = null; - /// Time last viewed in the Looker web UI (read-only) - public DateTime? last_viewed_at { get; set; } = null; - /// Time that the Dashboard was most recently updated. (read-only) - public DateTime? updated_at { get; set; } = null; - /// Id of User that most recently updated the dashboard. (read-only) - public long? last_updater_id { get; set; } = null; - /// Name of User that most recently updated the dashboard. (read-only) - public string? last_updater_name { get; set; } = null; - /// Name of User that created the dashboard. (read-only) - public string? user_name { get; set; } = null; - /// configuration option that governs how dashboard loading will happen. - public string? load_configuration { get; set; } = null; - /// Links this dashboard to a particular LookML dashboard such that calling a **sync** operation on that LookML dashboard will update this dashboard to match. - public string? lookml_link_id { get; set; } = null; - /// Show filters bar. **Security Note:** This property only affects the *cosmetic* appearance of the dashboard, not a user's ability to access data. Hiding the filters bar does **NOT** prevent users from changing filters by other means. For information on how to set up secure data access control policies, see [Control User Access to Data](https://cloud.google.com/looker/docs/r/api/control-access) - public bool? show_filters_bar { get; set; } = null; - /// Show title - public bool? show_title { get; set; } = null; - /// Id of Space - public string? space_id { get; set; } = null; - /// Id of folder - public string? folder_id { get; set; } = null; - /// Color of text on text tiles - public string? text_tile_text_color { get; set; } = null; - /// Tile background color - public string? tile_background_color { get; set; } = null; - /// Tile text color - public string? tile_text_color { get; set; } = null; - /// Title color - public string? title_color { get; set; } = null; - /// Number of times viewed in the Looker web UI (read-only) - public long? view_count { get; set; } = null; - public DashboardAppearance? appearance { get; set; } -} - -public class DashboardAggregateTableLookml : SdkModel -{ - /// Dashboard Id (read-only) - public string? dashboard_id { get; set; } = null; - /// Aggregate Table LookML (read-only) - public string? aggregate_table_lookml { get; set; } = null; -} - -public class DashboardAppearance : SdkModel -{ - /// Page margin (side) width - public long? page_side_margins { get; set; } = null; - /// Background color for the dashboard - public string? page_background_color { get; set; } = null; - /// Title alignment on dashboard tiles - public string? tile_title_alignment { get; set; } = null; - /// Space between tiles - public long? tile_space_between { get; set; } = null; - /// Background color for tiles - public string? tile_background_color { get; set; } = null; - /// Tile shadow on/off - public bool? tile_shadow { get; set; } = null; - /// Key color - public string? key_color { get; set; } = null; -} - -public class DashboardBase : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Content Favorite Id (read-only) - public long? content_favorite_id { get; set; } = null; - /// Id of content metadata (read-only) - public long? content_metadata_id { get; set; } = null; - /// Description (read-only) - public string? description { get; set; } = null; - /// Is Hidden (read-only) - public bool? hidden { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - public LookModel? model { get; set; } - /// Timezone in which the Dashboard will run by default. (read-only) - public string? query_timezone { get; set; } = null; - /// Is Read-only (read-only) - public bool? @readonly { get; set; } = null; - /// Refresh Interval, as a time duration phrase like "2 hours 30 minutes". A number with no time units will be interpreted as whole seconds. (read-only) - public string? refresh_interval { get; set; } = null; - /// Refresh Interval in milliseconds (read-only) - public long? refresh_interval_to_i { get; set; } = null; - public FolderBase? folder { get; set; } - /// Dashboard Title (read-only) - public string? title { get; set; } = null; - /// Id of User (read-only) - public long? user_id { get; set; } = null; - /// Content Metadata Slug (read-only) - public string? slug { get; set; } = null; - /// The preferred route for viewing this dashboard (ie: dashboards or dashboards-next) (read-only) - public string? preferred_viewer { get; set; } = null; - public SpaceBase? space { get; set; } -} - -public class DashboardElement : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Text tile body text - public string? body_text { get; set; } = null; - /// Text tile body text as Html (read-only) - public string? body_text_as_html { get; set; } = null; - /// Id of Dashboard - public string? dashboard_id { get; set; } = null; - /// Relative path of URI of LookML file to edit the dashboard element (LookML dashboard only). (read-only) - public Url? edit_uri { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - public LookWithQuery? look { get; set; } - /// Id Of Look - public string? look_id { get; set; } = null; - /// LookML link ID (read-only) - public string? lookml_link_id { get; set; } = null; - /// ID of merge result - public string? merge_result_id { get; set; } = null; - /// Note Display - public string? note_display { get; set; } = null; - /// Note State - public string? note_state { get; set; } = null; - /// Note Text - public string? note_text { get; set; } = null; - /// Note Text as Html (read-only) - public string? note_text_as_html { get; set; } = null; - public Query? query { get; set; } - /// Id Of Query - public long? query_id { get; set; } = null; - /// Refresh Interval - public string? refresh_interval { get; set; } = null; - /// Refresh Interval as integer (read-only) - public long? refresh_interval_to_i { get; set; } = null; - public ResultMakerWithIdVisConfigAndDynamicFields? result_maker { get; set; } - /// ID of the ResultMakerLookup entry. - public long? result_maker_id { get; set; } = null; - /// Text tile subtitle text - public string? subtitle_text { get; set; } = null; - /// Title of dashboard element - public string? title { get; set; } = null; - /// Whether title is hidden - public bool? title_hidden { get; set; } = null; - /// Text tile title - public string? title_text { get; set; } = null; - /// Type - public string? type { get; set; } = null; - /// Count of Alerts associated to a dashboard element (read-only) - public long? alert_count { get; set; } = null; - /// JSON with all the properties required for rich editor and buttons elements - public string? rich_content_json { get; set; } = null; - /// Text tile title text as Html (read-only) - public string? title_text_as_html { get; set; } = null; - /// Text tile subtitle text as Html (read-only) - public string? subtitle_text_as_html { get; set; } = null; -} - -public class DashboardFilter : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Id of Dashboard (read-only) - public string? dashboard_id { get; set; } = null; - /// Name of filter - public string? name { get; set; } = null; - /// Title of filter - public string? title { get; set; } = null; - /// Type of filter: one of date, number, string, or field - public string? type { get; set; } = null; - /// Default value of filter - public string? default_value { get; set; } = null; - /// Model of filter (required if type = field) - public string? model { get; set; } = null; - /// Explore of filter (required if type = field) - public string? explore { get; set; } = null; - /// Dimension of filter (required if type = field) - public string? dimension { get; set; } = null; - /// Field information (read-only) - public StringDictionary? field { get; set; } = null; - /// Display order of this filter relative to other filters - public long? row { get; set; } = null; - /// Array of listeners for faceted filters - public string[]? listens_to_filters { get; set; } = null; - /// Whether the filter allows multiple filter values (deprecated in the latest version of dashboards) - public bool? allow_multiple_values { get; set; } = null; - /// Whether the filter requires a value to run the dashboard - public bool? required { get; set; } = null; - /// The visual configuration for this filter. Used to set up how the UI for this filter should appear. - public StringDictionary? ui_config { get; set; } = null; -} - -public class DashboardLayout : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Id of Dashboard - public string? dashboard_id { get; set; } = null; - /// Type - public string? type { get; set; } = null; - /// Is Active - public bool? active { get; set; } = null; - /// Column Width - public long? column_width { get; set; } = null; - /// Width - public long? width { get; set; } = null; - /// Whether or not the dashboard layout is deleted. (read-only) - public bool? deleted { get; set; } = null; - /// Title extracted from the dashboard this layout represents. (read-only) - public string? dashboard_title { get; set; } = null; - /// Components (read-only) - public DashboardLayoutComponent[]? dashboard_layout_components { get; set; } = null; -} - -public class DashboardLayoutComponent : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Id of Dashboard Layout - public string? dashboard_layout_id { get; set; } = null; - /// Id Of Dashboard Element - public string? dashboard_element_id { get; set; } = null; - /// Row - public long? row { get; set; } = null; - /// Column - public long? column { get; set; } = null; - /// Width - public long? width { get; set; } = null; - /// Height - public long? height { get; set; } = null; - /// Whether or not the dashboard layout component is deleted (read-only) - public bool? deleted { get; set; } = null; - /// Dashboard element title, extracted from the Dashboard Element. (read-only) - public string? element_title { get; set; } = null; - /// Whether or not the dashboard element title is displayed. (read-only) - public bool? element_title_hidden { get; set; } = null; - /// Visualization type, extracted from a query's vis_config (read-only) - public string? vis_type { get; set; } = null; -} - -public class DashboardLookml : SdkModel -{ - /// Id of Dashboard (read-only) - public string? dashboard_id { get; set; } = null; - /// (Write-Only) Id of the folder - public string? folder_id { get; set; } = null; - /// lookml of UDD - public string? lookml { get; set; } = null; -} - -public class DataActionForm : SdkModel -{ - public DataActionUserState? state { get; set; } - /// Array of form fields. (read-only) - public DataActionFormField[]? fields { get; set; } = null; -} - -public class DataActionFormField : SdkModel -{ - /// Name (read-only) - public string? name { get; set; } = null; - /// Human-readable label (read-only) - public string? label { get; set; } = null; - /// Description of field (read-only) - public string? description { get; set; } = null; - /// Type of field. (read-only) - public string? type { get; set; } = null; - /// Default value of the field. (read-only) - public string? @default { get; set; } = null; - /// The URL for an oauth link, if type is 'oauth_link'. (read-only) - public string? oauth_url { get; set; } = null; - /// Whether or not a field supports interactive forms. (read-only) - public bool? interactive { get; set; } = null; - /// Whether or not the field is required. This is a user-interface hint. A user interface displaying this form should not submit it without a value for this field. The action server must also perform this validation. (read-only) - public bool? required { get; set; } = null; - /// If the form type is 'select', a list of options to be selected from. (read-only) - public DataActionFormSelectOption[]? options { get; set; } = null; -} - -public class DataActionFormSelectOption : SdkModel -{ - /// Name (read-only) - public string? name { get; set; } = null; - /// Human-readable label (read-only) - public string? label { get; set; } = null; -} - -public class DataActionRequest : SdkModel -{ - /// The JSON describing the data action. This JSON should be considered opaque and should be passed through unmodified from the query result it came from. - public StringDictionary? action { get; set; } = null; - /// User input for any form values the data action might use. - public StringDictionary? form_values { get; set; } = null; -} - -public class DataActionResponse : SdkModel -{ - /// ID of the webhook event that sent this data action. In some error conditions, this may be null. (read-only) - public string? webhook_id { get; set; } = null; - /// Whether the data action was successful. (read-only) - public bool? success { get; set; } = null; - /// When true, indicates that the client should refresh (rerun) the source query because the data may have been changed by the action. (read-only) - public bool? refresh_query { get; set; } = null; - public ValidationError? validation_errors { get; set; } - /// Optional message returned by the data action server describing the state of the action that took place. This can be used to implement custom failure messages. If a failure is related to a particular form field, the server should send back a validation error instead. The Looker web UI does not currently display any message if the action indicates 'success', but may do so in the future. (read-only) - public string? message { get; set; } = null; -} - -public class DataActionUserState : SdkModel -{ - /// User state data (read-only) - public string? data { get; set; } = null; - /// Time in seconds until the state needs to be refreshed (read-only) - public long? refresh_time { get; set; } = null; -} - -public class Datagroup : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// UNIX timestamp at which this entry was created. (read-only) - public long? created_at { get; set; } = null; - /// Unique ID of the datagroup (read-only) - public long? id { get; set; } = null; - /// Name of the model containing the datagroup. Unique when combined with name. (read-only) - public string? model_name { get; set; } = null; - /// Name of the datagroup. Unique when combined with model_name. (read-only) - public string? name { get; set; } = null; - /// UNIX timestamp before which cache entries are considered stale. Cannot be in the future. - public long? stale_before { get; set; } = null; - /// UNIX timestamp at which this entry trigger was last checked. (read-only) - public long? trigger_check_at { get; set; } = null; - /// The message returned with the error of the last trigger check. (read-only) - public string? trigger_error { get; set; } = null; - /// The value of the trigger when last checked. (read-only) - public string? trigger_value { get; set; } = null; - /// UNIX timestamp at which this entry became triggered. Cannot be in the future. - public long? triggered_at { get; set; } = null; -} - -public class DBConnection : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Name of the connection. Also used as the unique identifier - public string? name { get; set; } = null; - public Dialect? dialect { get; set; } - /// SQL Runner snippets for this connection (read-only) - public Snippet[]? snippets { get; set; } = null; - /// True if PDTs are enabled on this connection (read-only) - public bool? pdts_enabled { get; set; } = null; - /// Host name/address of server; or the string 'localhost' in case of a connection over an SSH tunnel. - public string? host { get; set; } = null; - /// Port number on server. If the connection is over an SSH tunnel, then the local port associated with the SSH tunnel. - public string? port { get; set; } = null; - /// Username for server authentication - public string? username { get; set; } = null; - /// (Write-Only) Password for server authentication - public string? password { get; set; } = null; - /// Whether the connection uses OAuth for authentication. (read-only) - public bool? uses_oauth { get; set; } = null; - /// (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). - public string? certificate { get; set; } = null; - /// (Write-Only) Certificate keyfile type - .json or .p12 - public string? file_type { get; set; } = null; - /// Database name - public string? database { get; set; } = null; - /// Time zone of database - public string? db_timezone { get; set; } = null; - /// Timezone to use in queries - public string? query_timezone { get; set; } = null; - /// Schema name - public string? schema { get; set; } = null; - /// Maximum number of concurrent connection to use - public long? max_connections { get; set; } = null; - /// Maximum size of query in GBs (BigQuery only, can be a user_attribute name) - public string? max_billing_gigabytes { get; set; } = null; - /// Use SSL/TLS when connecting to server - public bool? ssl { get; set; } = null; - /// Verify the SSL - public bool? verify_ssl { get; set; } = null; - /// Name of temporary database (if used) - public string? tmp_db_name { get; set; } = null; - /// Additional params to add to JDBC connection string - public string? jdbc_additional_params { get; set; } = null; - /// Connection Pool Timeout, in seconds - public long? pool_timeout { get; set; } = null; - /// (Read/Write) SQL Dialect name - public string? dialect_name { get; set; } = null; - /// Database connection has the ability to support open data studio from explore (read-only) - public bool? supports_data_studio_link { get; set; } = null; - /// Creation date for this connection (read-only) - public string? created_at { get; set; } = null; - /// Id of user who last modified this connection configuration (read-only) - public string? user_id { get; set; } = null; - /// Is this an example connection? (read-only) - public bool? example { get; set; } = null; - /// (Limited access feature) Are per user db credentials enabled. Enabling will remove previously set username and password - public bool? user_db_credentials { get; set; } = null; - /// Fields whose values map to user attribute names - public string[]? user_attribute_fields { get; set; } = null; - /// Cron string specifying when maintenance such as PDT trigger checks and drops should be performed - public string? maintenance_cron { get; set; } = null; - /// Unix timestamp at start of last completed PDT trigger check process (read-only) - public string? last_regen_at { get; set; } = null; - /// Unix timestamp at start of last completed PDT reap process (read-only) - public string? last_reap_at { get; set; } = null; - /// Precache tables in the SQL Runner - public bool? sql_runner_precache_tables { get; set; } = null; - /// Fetch Information Schema For SQL Writing - public bool? sql_writing_with_info_schema { get; set; } = null; - /// SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature - public string? after_connect_statements { get; set; } = null; - public DBConnectionOverride? pdt_context_override { get; set; } - /// Is this connection created and managed by Looker (read-only) - public bool? managed { get; set; } = null; - /// Enable Transparent Network Substrate (TNS) connections - public bool? uses_tns { get; set; } = null; -} - -public class DBConnectionBase : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Name of the connection. Also used as the unique identifier (read-only) - public string? name { get; set; } = null; - public Dialect? dialect { get; set; } - /// SQL Runner snippets for this connection (read-only) - public Snippet[]? snippets { get; set; } = null; - /// True if PDTs are enabled on this connection (read-only) - public bool? pdts_enabled { get; set; } = null; -} - -public class DBConnectionOverride : SdkModel -{ - /// Context in which to override (`pdt` is the only allowed value) - public string? context { get; set; } = null; - /// Host name/address of server - public string? host { get; set; } = null; - /// Port number on server - public string? port { get; set; } = null; - /// Username for server authentication - public string? username { get; set; } = null; - /// (Write-Only) Password for server authentication - public string? password { get; set; } = null; - /// Whether or not the password is overridden in this context (read-only) - public bool? has_password { get; set; } = null; - /// (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). - public string? certificate { get; set; } = null; - /// (Write-Only) Certificate keyfile type - .json or .p12 - public string? file_type { get; set; } = null; - /// Database name - public string? database { get; set; } = null; - /// Schema name - public string? schema { get; set; } = null; - /// Additional params to add to JDBC connection string - public string? jdbc_additional_params { get; set; } = null; - /// SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature - public string? after_connect_statements { get; set; } = null; -} - -public class DBConnectionTestResult : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// JDBC connection string. (only populated in the 'connect' test) (read-only) - public string? connection_string { get; set; } = null; - /// Result message of test (read-only) - public string? message { get; set; } = null; - /// Name of test (read-only) - public string? name { get; set; } = null; - /// Result code of test (read-only) - public string? status { get; set; } = null; -} - -public class DelegateOauthTest : SdkModel -{ - /// Delegate Oauth Connection Name (read-only) - public string? name { get; set; } = null; - /// The ID of the installation target. For Slack, this would be workspace id. (read-only) - public string? installation_target_id { get; set; } = null; - /// Installation ID (read-only) - public long? installation_id { get; set; } = null; - /// Whether or not the test was successful (read-only) - public bool? success { get; set; } = null; -} - -public class DependencyGraph : SdkModel -{ - /// The graph structure in the dot language that can be rendered into an image. (read-only) - public string? graph_text { get; set; } = null; -} - -/// Status of the dependencies in your project. Valid values are: "lock_optional", "lock_required", "lock_error", "install_none". (Enum defined in ProjectWorkspace) -public enum DependencyStatus -{ - [EnumMember(Value = "lock_optional")] - lock_optional, - [EnumMember(Value = "lock_required")] - lock_required, - [EnumMember(Value = "lock_error")] - lock_error, - [EnumMember(Value = "install_none")] - install_none -} - -public class Dialect : SdkModel -{ - /// The name of the dialect (read-only) - public string? name { get; set; } = null; - /// The human-readable label of the connection (read-only) - public string? label { get; set; } = null; - /// Whether the dialect supports query cost estimates (read-only) - public bool? supports_cost_estimate { get; set; } = null; - /// How the dialect handles cost estimation (read-only) - public string? cost_estimate_style { get; set; } = null; - /// PDT index columns (read-only) - public string? persistent_table_indexes { get; set; } = null; - /// PDT sortkey columns (read-only) - public string? persistent_table_sortkeys { get; set; } = null; - /// PDT distkey column (read-only) - public string? persistent_table_distkey { get; set; } = null; - /// Suports streaming results (read-only) - public bool? supports_streaming { get; set; } = null; - /// Should SQL Runner snippets automatically be run (read-only) - public bool? automatically_run_sql_runner_snippets { get; set; } = null; - /// Array of names of the tests that can be run on a connection using this dialect (read-only) - public string[]? connection_tests { get; set; } = null; - /// Is supported with the inducer (i.e. generate from sql) (read-only) - public bool? supports_inducer { get; set; } = null; - /// Can multiple databases be accessed from a connection using this dialect (read-only) - public bool? supports_multiple_databases { get; set; } = null; - /// Whether the dialect supports allowing Looker to build persistent derived tables (read-only) - public bool? supports_persistent_derived_tables { get; set; } = null; - /// Does the database have client SSL support settable through the JDBC string explicitly? (read-only) - public bool? has_ssl_support { get; set; } = null; -} - -public class DialectInfo : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Default number max connections (read-only) - public string? default_max_connections { get; set; } = null; - /// Default port number (read-only) - public string? default_port { get; set; } = null; - /// Is the supporting driver installed (read-only) - public bool? installed { get; set; } = null; - /// The human-readable label of the connection (read-only) - public string? label { get; set; } = null; - /// What the dialect calls the equivalent of a normal SQL table (read-only) - public string? label_for_database_equivalent { get; set; } = null; - /// The name of the dialect (read-only) - public string? name { get; set; } = null; - public DialectInfoOptions? supported_options { get; set; } -} - -public class DialectInfoOptions : SdkModel -{ - /// Has additional params support (read-only) - public bool? additional_params { get; set; } = null; - /// Has support for issuing statements after connecting to the database (read-only) - public bool? after_connect_statements { get; set; } = null; - /// Has analytical view support (read-only) - public bool? analytical_view_dataset { get; set; } = null; - /// Has auth support (read-only) - public bool? auth { get; set; } = null; - /// Has configurable cost estimation (read-only) - public bool? cost_estimate { get; set; } = null; - /// Can disable query context comments (read-only) - public bool? disable_context_comment { get; set; } = null; - /// Host is required (read-only) - public bool? host { get; set; } = null; - /// Instance name is required (read-only) - public bool? instance_name { get; set; } = null; - /// Has max billing gigabytes support (read-only) - public bool? max_billing_gigabytes { get; set; } = null; - /// Has support for a service account (read-only) - public bool? oauth_credentials { get; set; } = null; - /// Has OAuth for PDT support (read-only) - public bool? pdts_for_oauth { get; set; } = null; - /// Port can be specified (read-only) - public bool? port { get; set; } = null; - /// Has project name support (read-only) - public bool? project_name { get; set; } = null; - /// Schema can be specified (read-only) - public bool? schema { get; set; } = null; - /// Has support for a service account (read-only) - public bool? service_account_credentials { get; set; } = null; - /// Has TLS/SSL support (read-only) - public bool? ssl { get; set; } = null; - /// Has timezone support (read-only) - public bool? timezone { get; set; } = null; - /// Has tmp table support (read-only) - public bool? tmp_table { get; set; } = null; - /// Has Oracle TNS support (read-only) - public bool? tns { get; set; } = null; - /// Username can be specified (read-only) - public bool? username { get; set; } = null; - /// Username is required (read-only) - public bool? username_required { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; -} - -public class DigestEmails : SdkModel -{ - /// Whether or not digest emails are enabled - public bool? is_enabled { get; set; } = null; -} - -public class DigestEmailSend : SdkModel -{ - /// True if content was successfully generated and delivered - public bool? configuration_delivered { get; set; } = null; -} - -public class DiscretePalette : SdkModel -{ - /// Unique identity string (read-only) - public string? id { get; set; } = null; - /// Label for palette - public string? label { get; set; } = null; - /// Type of palette - public string? type { get; set; } = null; - /// Array of colors in the palette - public string[]? colors { get; set; } = null; -} - -public class EmbedSsoParams : SdkModel -{ - /// The complete URL of the Looker UI page to display in the embed context. For example, to display the dashboard with id 34, `target_url` would look like: `https://mycompany.looker.com:9999/dashboards/34`. `target_uri` MUST contain a scheme (HTTPS), domain name, and URL path. Port must be included if it is required to reach the Looker server from browser clients. If the Looker instance is behind a load balancer or other proxy, `target_uri` must be the public-facing domain name and port required to reach the Looker instance, not the actual internal network machine name of the Looker instance. - public Url target_url { get; set; } = ""; - /// Number of seconds the signed embed session will be valid after the embed session is started. Defaults to 300 seconds. Maximum session length accepted is 2592000 seconds (30 days). - public long? session_length { get; set; } = null; - /// When true, the embed session will purge any residual Looker login state (such as in browser cookies) before creating a new login state with the given embed user info. Defaults to true. - public bool? force_logout_login { get; set; } = null; - /// A value from an external system that uniquely identifies the embed user. Since the user_ids of Looker embed users may change with every embed session, external_user_id provides a way to assign a known, stable user identifier across multiple embed sessions. When the same external user id value is used for a new embed session, any existing session is terminated and existing access grants are replaced with the access grants associated with the new embed session. - public string? external_user_id { get; set; } = null; - /// First name of the embed user. Defaults to 'Embed' if not specified - public string? first_name { get; set; } = null; - /// Last name of the embed user. Defaults to 'User' if not specified - public string? last_name { get; set; } = null; - /// Sets the user timezone for the embed user session, if the User Specific Timezones setting is enabled in the Looker admin settings. A value of `null` forces the embed user to use the Looker Application Default Timezone. You MUST omit this property from the request if the User Specific Timezones setting is disabled. Timezone values are validated against the IANA Timezone standard and can be seen in the Application Time Zone dropdown list on the Looker General Settings admin page. - public string? user_timezone { get; set; } = null; - /// List of Looker permission names to grant to the embed user. Requested permissions will be filtered to permissions allowed for embed sessions. - public string[]? permissions { get; set; } = null; - /// List of model names that the embed user may access - public string[]? models { get; set; } = null; - /// List of Looker group ids in which to enroll the embed user - public long[]? group_ids { get; set; } = null; - /// A unique value identifying an embed-exclusive group. Multiple embed users using the same `external_group_id` value will be able to share Looker content with each other. Content and embed users associated with the `external_group_id` will not be accessible to normal Looker users or embed users not associated with this `external_group_id`. - public string? external_group_id { get; set; } = null; - /// A dictionary of name-value pairs associating a Looker user attribute name with a value. - public StringDictionary? user_attributes { get; set; } = null; - /// Id of the embed secret to use to sign this SSO url. If specified, the value must be an id of a valid (active) secret defined in the Looker instance. If not specified, the URL will be signed with the newest active embed secret defined in the Looker instance. - public long? secret_id { get; set; } = null; - /// Optional. URL of the domain hosting the signed embed URL. If provided and valid, the embed_domain will be added to the embed domain allowlist if it is not currently in the list - public string? embed_domain { get; set; } = null; -} - -public class EmbedUrlResponse : SdkModel -{ - /// The embed URL. Any modification to this string will make the URL unusable. (read-only) - public string? url { get; set; } = null; -} - -public class Error : SdkModel -{ - /// Error details (read-only) - public string message { get; set; } = ""; - /// Documentation link (read-only) - public Url documentation_url { get; set; } = ""; -} - -/// The style of dimension fill that is possible for this field. Null if no dimension fill is possible. Valid values are: "enumeration", "range". (Enum defined in LookmlModelExploreField) -public enum FillStyle -{ - [EnumMember(Value = "enumeration")] - enumeration, - [EnumMember(Value = "range")] - range -} - -public class Folder : SdkModel -{ - /// Unique Name - public string name { get; set; } = ""; - /// Id of Parent. If the parent id is null, this is a root-level entry - public string? parent_id { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Id of content metadata (read-only) - public long? content_metadata_id { get; set; } = null; - /// Time the space was created (read-only) - public DateTime? created_at { get; set; } = null; - /// User Id of Creator (read-only) - public long? creator_id { get; set; } = null; - /// Children Count (read-only) - public long? child_count { get; set; } = null; - /// Embedder's Id if this folder was autogenerated as an embedding shared folder via 'external_group_id' in an SSO embed login (read-only) - public string? external_id { get; set; } = null; - /// Folder is an embed folder (read-only) - public bool? is_embed { get; set; } = null; - /// Folder is the root embed shared folder (read-only) - public bool? is_embed_shared_root { get; set; } = null; - /// Folder is the root embed users folder (read-only) - public bool? is_embed_users_root { get; set; } = null; - /// Folder is a user's personal folder (read-only) - public bool? is_personal { get; set; } = null; - /// Folder is descendant of a user's personal folder (read-only) - public bool? is_personal_descendant { get; set; } = null; - /// Folder is the root shared folder (read-only) - public bool? is_shared_root { get; set; } = null; - /// Folder is the root user folder (read-only) - public bool? is_users_root { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Dashboards (read-only) - public DashboardBase[]? dashboards { get; set; } = null; - /// Looks (read-only) - public LookWithDashboards[]? looks { get; set; } = null; -} - -public class FolderBase : SdkModel -{ - /// Unique Name - public string name { get; set; } = ""; - /// Id of Parent. If the parent id is null, this is a root-level entry - public string? parent_id { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Id of content metadata (read-only) - public long? content_metadata_id { get; set; } = null; - /// Time the folder was created (read-only) - public DateTime? created_at { get; set; } = null; - /// User Id of Creator (read-only) - public long? creator_id { get; set; } = null; - /// Children Count (read-only) - public long? child_count { get; set; } = null; - /// Embedder's Id if this folder was autogenerated as an embedding shared folder via 'external_group_id' in an SSO embed login (read-only) - public string? external_id { get; set; } = null; - /// Folder is an embed folder (read-only) - public bool? is_embed { get; set; } = null; - /// Folder is the root embed shared folder (read-only) - public bool? is_embed_shared_root { get; set; } = null; - /// Folder is the root embed users folder (read-only) - public bool? is_embed_users_root { get; set; } = null; - /// Folder is a user's personal folder (read-only) - public bool? is_personal { get; set; } = null; - /// Folder is descendant of a user's personal folder (read-only) - public bool? is_personal_descendant { get; set; } = null; - /// Folder is the root shared folder (read-only) - public bool? is_shared_root { get; set; } = null; - /// Folder is the root user folder (read-only) - public bool? is_users_root { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; -} - -/// Specifies the data format of the region information. Valid values are: "topojson", "vector_tile_region". (Enum defined in LookmlModelExploreFieldMapLayer) -public enum Format -{ - [EnumMember(Value = "topojson")] - topojson, - [EnumMember(Value = "vector_tile_region")] - vector_tile_region -} - -public class GitBranch : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// The short name on the local. Updating `name` results in `git checkout ` - public string? name { get; set; } = null; - /// The name of the remote (read-only) - public string? remote { get; set; } = null; - /// The short name on the remote (read-only) - public string? remote_name { get; set; } = null; - /// Name of error (read-only) - public string? error { get; set; } = null; - /// Message describing an error if present (read-only) - public string? message { get; set; } = null; - /// Name of the owner of a personal branch (read-only) - public string? owner_name { get; set; } = null; - /// Whether or not this branch is readonly (read-only) - public bool? @readonly { get; set; } = null; - /// Whether or not this branch is a personal branch - readonly for all developers except the owner (read-only) - public bool? personal { get; set; } = null; - /// Whether or not a local ref exists for the branch (read-only) - public bool? is_local { get; set; } = null; - /// Whether or not a remote ref exists for the branch (read-only) - public bool? is_remote { get; set; } = null; - /// Whether or not this is the production branch (read-only) - public bool? is_production { get; set; } = null; - /// Number of commits the local branch is ahead of the remote (read-only) - public long? ahead_count { get; set; } = null; - /// Number of commits the local branch is behind the remote (read-only) - public long? behind_count { get; set; } = null; - /// UNIX timestamp at which this branch was last committed. (read-only) - public long? commit_at { get; set; } = null; - /// The resolved ref of this branch. Updating `ref` results in `git reset --hard ``. - public string? @ref { get; set; } = null; - /// The resolved ref of this branch remote. (read-only) - public string? remote_ref { get; set; } = null; -} - -public class GitConnectionTest : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Human readable string describing the test (read-only) - public string? description { get; set; } = null; - /// A short string, uniquely naming this test (read-only) - public string? id { get; set; } = null; -} - -public class GitConnectionTestResult : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// A short string, uniquely naming this test (read-only) - public string? id { get; set; } = null; - /// Additional data from the test (read-only) - public string? message { get; set; } = null; - /// Either 'pass' or 'fail' (read-only) - public string? status { get; set; } = null; -} - -public class GitStatus : SdkModel -{ - /// Git action: add, delete, etc (read-only) - public string? action { get; set; } = null; - /// When true, changes to the local file conflict with the remote repository (read-only) - public bool? conflict { get; set; } = null; - /// When true, the file can be reverted to an earlier state (read-only) - public bool? revertable { get; set; } = null; - /// Git description of the action (read-only) - public string? text { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; -} - -public class Group : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Group can be used in content access controls - public bool? can_add_to_content_metadata { get; set; } = null; - /// Currently logged in user is group member (read-only) - public bool? contains_current_user { get; set; } = null; - /// External Id group if embed group (read-only) - public string? external_group_id { get; set; } = null; - /// Group membership controlled outside of Looker (read-only) - public bool? externally_managed { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// New users are added to this group by default (read-only) - public bool? include_by_default { get; set; } = null; - /// Name of group - public string? name { get; set; } = null; - /// Number of users included in this group (read-only) - public long? user_count { get; set; } = null; -} - -/// WARNING: no writeable properties found for POST, PUT, or PATCH -public class GroupIdForGroupInclusion : SdkModel -{ - /// Id of group (read-only) - public long? group_id { get; set; } = null; -} - -/// WARNING: no writeable properties found for POST, PUT, or PATCH -public class GroupIdForGroupUserInclusion : SdkModel -{ - /// Id of user (read-only) - public long? user_id { get; set; } = null; -} - -public class Homepage : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Id of associated content_metadata record (read-only) - public long? content_metadata_id { get; set; } = null; - /// Date of homepage creation (read-only) - public DateTime? created_at { get; set; } = null; - /// Date of homepage deletion - public DateTime? deleted_at { get; set; } = null; - /// Description of the homepage - public string? description { get; set; } = null; - /// Sections of the homepage (read-only) - public HomepageSection[]? homepage_sections { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// ids of the homepage sections in the order they should be displayed - public long[]? section_order { get; set; } = null; - /// Title of the homepage - public string? title { get; set; } = null; - /// Date of last homepage update (read-only) - public DateTime? updated_at { get; set; } = null; - /// User id of homepage creator (read-only) - public long? user_id { get; set; } = null; - /// Whether the homepage is the primary homepage or not (read-only) - public bool? primary_homepage { get; set; } = null; -} - -public class HomepageItem : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Name of user who created the content this item is based on (read-only) - public string? content_created_by { get; set; } = null; - /// Content favorite id associated with the item this content is based on (read-only) - public long? content_favorite_id { get; set; } = null; - /// Content metadata id associated with the item this content is based on (read-only) - public long? content_metadata_id { get; set; } = null; - /// Last time the content that this item is based on was updated (read-only) - public string? content_updated_at { get; set; } = null; - /// Custom description entered by the user, if present - public string? custom_description { get; set; } = null; - /// (Write-Only) base64 encoded image data - public string? custom_image_data_base64 { get; set; } = null; - /// Custom image_url entered by the user, if present (read-only) - public string? custom_image_url { get; set; } = null; - /// Custom title entered by the user, if present - public string? custom_title { get; set; } = null; - /// Custom url entered by the user, if present - public string? custom_url { get; set; } = null; - /// Dashboard to base this item on - public long? dashboard_id { get; set; } = null; - /// The actual description for display (read-only) - public string? description { get; set; } = null; - /// Number of times content has been favorited, if present (read-only) - public long? favorite_count { get; set; } = null; - /// Associated Homepage Section - public long? homepage_section_id { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// The actual image_url for display (read-only) - public string? image_url { get; set; } = null; - /// The container folder name of the content (read-only) - public string? location { get; set; } = null; - /// Look to base this item on - public long? look_id { get; set; } = null; - /// LookML Dashboard to base this item on - public string? lookml_dashboard_id { get; set; } = null; - /// An arbitrary integer representing the sort order within the section - public long? order { get; set; } = null; - /// Number of seconds it took to fetch the section this item is in (read-only) - public float? section_fetch_time { get; set; } = null; - /// The actual title for display (read-only) - public string? title { get; set; } = null; - /// The actual url for display (read-only) - public string? url { get; set; } = null; - /// Whether the custom description should be used instead of the content description, if the item is associated with content - public bool? use_custom_description { get; set; } = null; - /// Whether the custom image should be used instead of the content image, if the item is associated with content - public bool? use_custom_image { get; set; } = null; - /// Whether the custom title should be used instead of the content title, if the item is associated with content - public bool? use_custom_title { get; set; } = null; - /// Whether the custom url should be used instead of the content url, if the item is associated with content - public bool? use_custom_url { get; set; } = null; - /// Number of times content has been viewed, if present (read-only) - public long? view_count { get; set; } = null; -} - -public class HomepageSection : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Time at which this section was created. (read-only) - public DateTime? created_at { get; set; } = null; - /// Time at which this section was deleted. - public DateTime? deleted_at { get; set; } = null; - /// A URL pointing to a page showing further information about the content in the section. (read-only) - public string? detail_url { get; set; } = null; - /// Id reference to parent homepage - public long? homepage_id { get; set; } = null; - /// Items in the homepage section (read-only) - public HomepageItem[]? homepage_items { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Is this a header section (has no items) (read-only) - public bool? is_header { get; set; } = null; - /// ids of the homepage items in the order they should be displayed - public long[]? item_order { get; set; } = null; - /// Name of row - public string? title { get; set; } = null; - /// Time at which this section was last updated. (read-only) - public DateTime? updated_at { get; set; } = null; - /// Description of the content found in this section. - public string? description { get; set; } = null; - /// ids of the homepage items the user can see in the order they should be displayed (read-only) - public string[]? visible_item_order { get; set; } = null; -} - -public class ImportedProject : SdkModel -{ - /// Dependency name (read-only) - public string? name { get; set; } = null; - /// Url for a remote dependency (read-only) - public string? url { get; set; } = null; - /// Ref for a remote dependency (read-only) - public string? @ref { get; set; } = null; - /// Flag signifying if a dependency is remote or local (read-only) - public bool? is_remote { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; -} - -public class Integration : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// ID of the integration. (read-only) - public string? id { get; set; } = null; - /// ID of the integration hub. (read-only) - public long? integration_hub_id { get; set; } = null; - /// Label for the integration. (read-only) - public string? label { get; set; } = null; - /// Description of the integration. (read-only) - public string? description { get; set; } = null; - /// Whether the integration is available to users. - public bool? enabled { get; set; } = null; - /// Array of params for the integration. - public IntegrationParam[]? @params { get; set; } = null; - /// A list of data formats the integration supports. If unspecified, the default is all data formats. Valid values are: "txt", "csv", "inline_json", "json", "json_label", "json_detail", "json_detail_lite_stream", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png", "csv_zip". (read-only) - public SupportedFormats[]? supported_formats { get; set; } = null; - /// A list of action types the integration supports. Valid values are: "cell", "query", "dashboard", "none". (read-only) - public SupportedActionTypes[]? supported_action_types { get; set; } = null; - /// A list of formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: "formatted", "unformatted". (read-only) - public SupportedFormattings[]? supported_formattings { get; set; } = null; - /// A list of visualization formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: "apply", "noapply". (read-only) - public SupportedVisualizationFormattings[]? supported_visualization_formattings { get; set; } = null; - /// A list of all the download mechanisms the integration supports. The order of values is not significant: Looker will select the most appropriate supported download mechanism for a given query. The integration must ensure it can handle any of the mechanisms it claims to support. If unspecified, this defaults to all download setting values. Valid values are: "push", "url". (read-only) - public SupportedDownloadSettings[]? supported_download_settings { get; set; } = null; - /// URL to an icon for the integration. (read-only) - public string? icon_url { get; set; } = null; - /// Whether the integration uses oauth. (read-only) - public bool? uses_oauth { get; set; } = null; - /// A list of descriptions of required fields that this integration is compatible with. If there are multiple entries in this list, the integration requires more than one field. If unspecified, no fields will be required. (read-only) - public IntegrationRequiredField[]? required_fields { get; set; } = null; - /// Link to privacy policy for destination (read-only) - public string? privacy_link { get; set; } = null; - /// Whether the integration uses delegate oauth, which allows federation between an integration installation scope specific entity (like org, group, and team, etc.) and Looker. (read-only) - public bool? delegate_oauth { get; set; } = null; - /// Whether the integration is available to users. - public long[]? installed_delegate_oauth_targets { get; set; } = null; -} - -public class IntegrationHub : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// ID of the hub. (read-only) - public long? id { get; set; } = null; - /// URL of the hub. - public string? url { get; set; } = null; - /// Label of the hub. (read-only) - public string? label { get; set; } = null; - /// Whether this hub is a first-party integration hub operated by Looker. (read-only) - public bool? official { get; set; } = null; - /// An error message, present if the integration hub metadata could not be fetched. If this is present, the integration hub is unusable. (read-only) - public string? fetch_error_message { get; set; } = null; - /// (Write-Only) An authorization key that will be sent to the integration hub on every request. - public string? authorization_token { get; set; } = null; - /// Whether the authorization_token is set for the hub. (read-only) - public bool? has_authorization_token { get; set; } = null; - /// Whether the legal agreement message has been signed by the user. This only matters if legal_agreement_required is true. (read-only) - public bool? legal_agreement_signed { get; set; } = null; - /// Whether the legal terms for the integration hub are required before use. (read-only) - public bool? legal_agreement_required { get; set; } = null; - /// The legal agreement text for this integration hub. (read-only) - public string? legal_agreement_text { get; set; } = null; -} - -public class IntegrationParam : SdkModel -{ - /// Name of the parameter. - public string? name { get; set; } = null; - /// Label of the parameter. (read-only) - public string? label { get; set; } = null; - /// Short description of the parameter. (read-only) - public string? description { get; set; } = null; - /// Whether the parameter is required to be set to use the destination. If unspecified, this defaults to false. (read-only) - public bool? required { get; set; } = null; - /// Whether the parameter has a value set. (read-only) - public bool? has_value { get; set; } = null; - /// The current value of the parameter. Always null if the value is sensitive. When writing, null values will be ignored. Set the value to an empty string to clear it. - public string? value { get; set; } = null; - /// When present, the param's value comes from this user attribute instead of the 'value' parameter. Set to null to use the 'value'. - public string? user_attribute_name { get; set; } = null; - /// Whether the parameter contains sensitive data like API credentials. If unspecified, this defaults to true. (read-only) - public bool? sensitive { get; set; } = null; - /// When true, this parameter must be assigned to a user attribute in the admin panel (instead of a constant value), and that value may be updated by the user as part of the integration flow. (read-only) - public bool? per_user { get; set; } = null; - /// When present, the param represents the oauth url the user will be taken to. (read-only) - public string? delegate_oauth_url { get; set; } = null; -} - -public class IntegrationRequiredField : SdkModel -{ - /// Matches a field that has this tag. (read-only) - public string? tag { get; set; } = null; - /// If present, supercedes 'tag' and matches a field that has any of the provided tags. (read-only) - public string[]? any_tag { get; set; } = null; - /// If present, supercedes 'tag' and matches a field that has all of the provided tags. (read-only) - public string[]? all_tags { get; set; } = null; -} - -public class IntegrationTestResult : SdkModel -{ - /// Whether or not the test was successful (read-only) - public bool? success { get; set; } = null; - /// A message representing the results of the test. (read-only) - public string? message { get; set; } = null; - /// An array of connection test result for delegate oauth actions. (read-only) - public DelegateOauthTest[]? delegate_oauth_result { get; set; } = null; -} - -public class InternalHelpResources : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// If true and internal help resources content is not blank then the link for internal help resources will be shown in the help menu and the content displayed within Looker - public bool? enabled { get; set; } = null; -} - -public class InternalHelpResourcesContent : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Text to display in the help menu item which will display the internal help resources - public string? organization_name { get; set; } = null; - /// Content to be displayed in the internal help resources page/modal - public string? markdown_content { get; set; } = null; -} - -public class LDAPConfig : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. - public bool? alternate_email_login_allowed { get; set; } = null; - /// (Write-Only) Password for the LDAP account used to access the LDAP server - public string? auth_password { get; set; } = null; - /// Users will not be allowed to login at all unless a role for them is found in LDAP if set to true - public bool? auth_requires_role { get; set; } = null; - /// Distinguished name of LDAP account used to access the LDAP server - public string? auth_username { get; set; } = null; - /// LDAP server hostname - public string? connection_host { get; set; } = null; - /// LDAP host port - public string? connection_port { get; set; } = null; - /// Use Transport Layer Security - public bool? connection_tls { get; set; } = null; - /// Do not verify peer when using TLS - public bool? connection_tls_no_verify { get; set; } = null; - /// (Write-Only) Array of ids of groups that will be applied to new users the first time they login via LDAP - public long[]? default_new_user_group_ids { get; set; } = null; - /// (Read-only) Groups that will be applied to new users the first time they login via LDAP (read-only) - public Group[]? default_new_user_groups { get; set; } = null; - /// (Write-Only) Array of ids of roles that will be applied to new users the first time they login via LDAP - public long[]? default_new_user_role_ids { get; set; } = null; - /// (Read-only) Roles that will be applied to new users the first time they login via LDAP (read-only) - public Role[]? default_new_user_roles { get; set; } = null; - /// Enable/Disable LDAP authentication for the server - public bool? enabled { get; set; } = null; - /// Don't attempt to do LDAP search result paging (RFC 2696) even if the LDAP server claims to support it. - public bool? force_no_page { get; set; } = null; - /// (Read-only) Array of mappings between LDAP Groups and Looker Roles (read-only) - public LDAPGroupRead[]? groups { get; set; } = null; - /// Base dn for finding groups in LDAP searches - public string? groups_base_dn { get; set; } = null; - /// Identifier for a strategy for how Looker will search for groups in the LDAP server - public string? groups_finder_type { get; set; } = null; - /// LDAP Group attribute that signifies the members of the groups. Most commonly 'member' - public string? groups_member_attribute { get; set; } = null; - /// Optional comma-separated list of supported LDAP objectclass for groups when doing groups searches - public string? groups_objectclasses { get; set; } = null; - /// LDAP Group attribute that signifies the user in a group. Most commonly 'dn' - public string? groups_user_attribute { get; set; } = null; - /// (Read/Write) Array of mappings between LDAP Groups and arrays of Looker Role ids - public LDAPGroupWrite[]? groups_with_role_ids { get; set; } = null; - /// (Read-only) Has the password been set for the LDAP account used to access the LDAP server (read-only) - public bool? has_auth_password { get; set; } = null; - /// Merge first-time ldap login to existing user account by email addresses. When a user logs in for the first time via ldap this option will connect this user into their existing account by finding the account with a matching email address. Otherwise a new user account will be created for the user. - public bool? merge_new_users_by_email { get; set; } = null; - /// When this config was last modified (read-only) - public string? modified_at { get; set; } = null; - /// User id of user who last modified this config (read-only) - public string? modified_by { get; set; } = null; - /// Set user roles in Looker based on groups from LDAP - public bool? set_roles_from_groups { get; set; } = null; - /// (Write-Only) Test LDAP user password. For ldap tests only. - public string? test_ldap_password { get; set; } = null; - /// (Write-Only) Test LDAP user login id. For ldap tests only. - public string? test_ldap_user { get; set; } = null; - /// Name of user record attributes used to indicate email address field - public string? user_attribute_map_email { get; set; } = null; - /// Name of user record attributes used to indicate first name - public string? user_attribute_map_first_name { get; set; } = null; - /// Name of user record attributes used to indicate last name - public string? user_attribute_map_last_name { get; set; } = null; - /// Name of user record attributes used to indicate unique record id - public string? user_attribute_map_ldap_id { get; set; } = null; - /// (Read-only) Array of mappings between LDAP User Attributes and Looker User Attributes (read-only) - public LDAPUserAttributeRead[]? user_attributes { get; set; } = null; - /// (Read/Write) Array of mappings between LDAP User Attributes and arrays of Looker User Attribute ids - public LDAPUserAttributeWrite[]? user_attributes_with_ids { get; set; } = null; - /// Distinguished name of LDAP node used as the base for user searches - public string? user_bind_base_dn { get; set; } = null; - /// (Optional) Custom RFC-2254 filter clause for use in finding user during login. Combined via 'and' with the other generated filter clauses. - public string? user_custom_filter { get; set; } = null; - /// Name(s) of user record attributes used for matching user login id (comma separated list) - public string? user_id_attribute_names { get; set; } = null; - /// (Optional) Name of user record objectclass used for finding user during login id - public string? user_objectclass { get; set; } = null; - /// Allow LDAP auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. - public bool? allow_normal_group_membership { get; set; } = null; - /// LDAP auth'd users will be able to inherit roles from non-reflected Looker groups. - public bool? allow_roles_from_normal_groups { get; set; } = null; - /// Allows roles to be directly assigned to LDAP auth'd users. - public bool? allow_direct_roles { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -public class LDAPConfigTestIssue : SdkModel -{ - /// Severity of the issue. Error or Warning (read-only) - public string? severity { get; set; } = null; - /// Message describing the issue (read-only) - public string? message { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; -} - -public class LDAPConfigTestResult : SdkModel -{ - /// Additional details for error cases (read-only) - public string? details { get; set; } = null; - /// Array of issues/considerations about the result (read-only) - public LDAPConfigTestIssue[]? issues { get; set; } = null; - /// Short human readable test about the result (read-only) - public string? message { get; set; } = null; - /// Test status code: always 'success' or 'error' (read-only) - public string? status { get; set; } = null; - /// A more detailed trace of incremental results during auth tests (read-only) - public string? trace { get; set; } = null; - public LDAPUser? user { get; set; } - /// Link to ldap config (read-only) - public Url? url { get; set; } = null; -} - -public class LDAPGroupRead : SdkModel -{ - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Unique Id of group in Looker (read-only) - public long? looker_group_id { get; set; } = null; - /// Name of group in Looker (read-only) - public string? looker_group_name { get; set; } = null; - /// Name of group in LDAP (read-only) - public string? name { get; set; } = null; - /// Looker Roles (read-only) - public Role[]? roles { get; set; } = null; - /// Link to ldap config (read-only) - public Url? url { get; set; } = null; -} - -public class LDAPGroupWrite : SdkModel -{ - /// Unique Id - public long? id { get; set; } = null; - /// Unique Id of group in Looker (read-only) - public long? looker_group_id { get; set; } = null; - /// Name of group in Looker - public string? looker_group_name { get; set; } = null; - /// Name of group in LDAP - public string? name { get; set; } = null; - /// Looker Role Ids - public long[]? role_ids { get; set; } = null; - /// Link to ldap config (read-only) - public Url? url { get; set; } = null; -} - -public class LDAPUser : SdkModel -{ - /// Array of user's email addresses and aliases for use in migration (read-only) - public string[]? all_emails { get; set; } = null; - /// Dictionary of user's attributes (name/value) (read-only) - public StringDictionary? attributes { get; set; } = null; - /// Primary email address (read-only) - public string? email { get; set; } = null; - /// First name (read-only) - public string? first_name { get; set; } = null; - /// Array of user's groups (group names only) (read-only) - public string[]? groups { get; set; } = null; - /// Last Name (read-only) - public string? last_name { get; set; } = null; - /// LDAP's distinguished name for the user record (read-only) - public string? ldap_dn { get; set; } = null; - /// LDAP's Unique ID for the user (read-only) - public string? ldap_id { get; set; } = null; - /// Array of user's roles (role names only) (read-only) - public string[]? roles { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Link to ldap config (read-only) - public Url? url { get; set; } = null; -} - -public class LDAPUserAttributeRead : SdkModel -{ - /// Name of User Attribute in LDAP (read-only) - public string? name { get; set; } = null; - /// Required to be in LDAP assertion for login to be allowed to succeed (read-only) - public bool? required { get; set; } = null; - /// Looker User Attributes (read-only) - public UserAttribute[]? user_attributes { get; set; } = null; - /// Link to ldap config (read-only) - public Url? url { get; set; } = null; -} - -public class LDAPUserAttributeWrite : SdkModel -{ - /// Name of User Attribute in LDAP - public string? name { get; set; } = null; - /// Required to be in LDAP assertion for login to be allowed to succeed - public bool? required { get; set; } = null; - /// Looker User Attribute Ids - public long[]? user_attribute_ids { get; set; } = null; - /// Link to ldap config (read-only) - public Url? url { get; set; } = null; -} - -public class LegacyFeature : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Name (read-only) - public string? name { get; set; } = null; - /// Description (read-only) - public string? description { get; set; } = null; - /// Whether this feature has been enabled by a user - public bool? enabled_locally { get; set; } = null; - /// Whether this feature is currently enabled (read-only) - public bool? enabled { get; set; } = null; - /// Looker version where this feature became a legacy feature (read-only) - public string? disallowed_as_of_version { get; set; } = null; - /// Looker version where this feature will be automatically disabled (read-only) - public string? disable_on_upgrade_to_version { get; set; } = null; - /// Future Looker version where this feature will be removed (read-only) - public string? end_of_life_version { get; set; } = null; - /// URL for documentation about this feature (read-only) - public string? documentation_url { get; set; } = null; - /// Approximate date that this feature will be automatically disabled. (read-only) - public DateTime? approximate_disable_date { get; set; } = null; - /// Approximate date that this feature will be removed. (read-only) - public DateTime? approximate_end_of_life_date { get; set; } = null; - /// Whether this legacy feature may have been automatically disabled when upgrading to the current version. (read-only) - public bool? has_disabled_on_upgrade { get; set; } = null; -} - -public class Locale : SdkModel -{ - /// Code for Locale (read-only) - public string? code { get; set; } = null; - /// Name of Locale in its own language (read-only) - public string? native_name { get; set; } = null; - /// Name of Locale in English (read-only) - public string? english_name { get; set; } = null; -} - -public class LocalizationSettings : SdkModel -{ - /// Default locale for localization (read-only) - public string? default_locale { get; set; } = null; - /// Localization level - strict or permissive (read-only) - public string? localization_level { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; -} - -public class Look : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Id of content metadata (read-only) - public long? content_metadata_id { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Look Title - public string? title { get; set; } = null; - /// Content Favorite Id (read-only) - public long? content_favorite_id { get; set; } = null; - /// Time that the Look was created. (read-only) - public DateTime? created_at { get; set; } = null; - /// Whether or not a look is 'soft' deleted. - public bool? deleted { get; set; } = null; - /// Time that the Look was deleted. (read-only) - public DateTime? deleted_at { get; set; } = null; - /// Id of User that deleted the look. (read-only) - public long? deleter_id { get; set; } = null; - /// Description - public string? description { get; set; } = null; - /// Embed Url (read-only) - public string? embed_url { get; set; } = null; - /// Excel File Url (read-only) - public string? excel_file_url { get; set; } = null; - /// Number of times favorited (read-only) - public long? favorite_count { get; set; } = null; - /// Google Spreadsheet Formula (read-only) - public string? google_spreadsheet_formula { get; set; } = null; - /// Image Embed Url (read-only) - public string? image_embed_url { get; set; } = null; - /// auto-run query when Look viewed - public bool? is_run_on_load { get; set; } = null; - /// Time that the Look was last accessed by any user (read-only) - public DateTime? last_accessed_at { get; set; } = null; - /// Id of User that last updated the look. (read-only) - public long? last_updater_id { get; set; } = null; - /// Time last viewed in the Looker web UI (read-only) - public DateTime? last_viewed_at { get; set; } = null; - public LookModel? model { get; set; } - /// Is Public - public bool? @public { get; set; } = null; - /// Public Slug (read-only) - public string? public_slug { get; set; } = null; - /// Public Url (read-only) - public string? public_url { get; set; } = null; - /// Query Id - public long? query_id { get; set; } = null; - /// Short Url (read-only) - public string? short_url { get; set; } = null; - public FolderBase? folder { get; set; } - /// Folder Id - public string? folder_id { get; set; } = null; - /// Time that the Look was updated. (read-only) - public DateTime? updated_at { get; set; } = null; - /// User Id - public long? user_id { get; set; } = null; - /// Number of times viewed in the Looker web UI (read-only) - public long? view_count { get; set; } = null; - public UserIdOnly? user { get; set; } - /// Space Id - public string? space_id { get; set; } = null; - public SpaceBase? space { get; set; } -} - -public class LookBasic : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Id of content metadata (read-only) - public long? content_metadata_id { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Look Title (read-only) - public string? title { get; set; } = null; -} - -public class LookmlModel : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Array of names of connections this model is allowed to use - public string[]? allowed_db_connection_names { get; set; } = null; - /// Array of explores (if has_content) (read-only) - public LookmlModelNavExplore[]? explores { get; set; } = null; - /// Does this model declaration have have lookml content? (read-only) - public bool? has_content { get; set; } = null; - /// UI-friendly name for this model (read-only) - public string? label { get; set; } = null; - /// Name of the model. Also used as the unique identifier - public string? name { get; set; } = null; - /// Name of project containing the model - public string? project_name { get; set; } = null; - /// Is this model allowed to use all current and future connections - public bool? unlimited_db_connections { get; set; } = null; -} - -public class LookmlModelExplore : SdkModel -{ - /// Fully qualified explore name (model name plus explore name) (read-only) - public string? id { get; set; } = null; - /// Explore name (read-only) - public string? name { get; set; } = null; - /// Description (read-only) - public string? description { get; set; } = null; - /// Label (read-only) - public string? label { get; set; } = null; - /// Scopes (read-only) - public string[]? scopes { get; set; } = null; - /// Can Total (read-only) - public bool? can_total { get; set; } = null; - /// Can Save (read-only) - public bool? can_save { get; set; } = null; - /// Can Explain (read-only) - public bool? can_explain { get; set; } = null; - /// Can pivot in the DB (read-only) - public bool? can_pivot_in_db { get; set; } = null; - /// Can use subtotals (read-only) - public bool? can_subtotal { get; set; } = null; - /// Has timezone support (read-only) - public bool? has_timezone_support { get; set; } = null; - /// Cost estimates supported (read-only) - public bool? supports_cost_estimate { get; set; } = null; - /// Connection name (read-only) - public string? connection_name { get; set; } = null; - /// How nulls are sorted, possible values are "low", "high", "first" and "last" (read-only) - public string? null_sort_treatment { get; set; } = null; - /// List of model source files (read-only) - public string[]? files { get; set; } = null; - /// Primary source_file file (read-only) - public string? source_file { get; set; } = null; - /// Name of project (read-only) - public string? project_name { get; set; } = null; - /// Name of model (read-only) - public string? model_name { get; set; } = null; - /// Name of view (read-only) - public string? view_name { get; set; } = null; - /// Is hidden (read-only) - public bool? hidden { get; set; } = null; - /// A sql_table_name expression that defines what sql table the view/explore maps onto. Example: "prod_orders2 AS orders" in a view named orders. (read-only) - public string? sql_table_name { get; set; } = null; - /// (DEPRECATED) Array of access filter field names (read-only) - public string[]? access_filter_fields { get; set; } = null; - /// Access filters (read-only) - public LookmlModelExploreAccessFilter[]? access_filters { get; set; } = null; - /// Aliases (read-only) - public LookmlModelExploreAlias[]? aliases { get; set; } = null; - /// Always filter (read-only) - public LookmlModelExploreAlwaysFilter[]? always_filter { get; set; } = null; - /// Conditionally filter (read-only) - public LookmlModelExploreConditionallyFilter[]? conditionally_filter { get; set; } = null; - /// Array of index fields (read-only) - public string[]? index_fields { get; set; } = null; - /// Sets (read-only) - public LookmlModelExploreSet[]? sets { get; set; } = null; - /// An array of arbitrary string tags provided in the model for this explore. (read-only) - public string[]? tags { get; set; } = null; - /// Errors (read-only) - public LookmlModelExploreError[]? errors { get; set; } = null; - public LookmlModelExploreFieldset? fields { get; set; } - /// Views joined into this explore (read-only) - public LookmlModelExploreJoins[]? joins { get; set; } = null; - /// Label used to group explores in the navigation menus (read-only) - public string? group_label { get; set; } = null; - /// An array of items describing which custom measure types are supported for creating a custom measure 'based_on' each possible dimension type. (read-only) - public LookmlModelExploreSupportedMeasureType[]? supported_measure_types { get; set; } = null; -} - -public class LookmlModelExploreAccessFilter : SdkModel -{ - /// Field to be filtered (read-only) - public string? field { get; set; } = null; - /// User attribute name (read-only) - public string? user_attribute { get; set; } = null; -} - -public class LookmlModelExploreAlias : SdkModel -{ - /// Name (read-only) - public string? name { get; set; } = null; - /// Value (read-only) - public string? value { get; set; } = null; -} - -public class LookmlModelExploreAlwaysFilter : SdkModel -{ - /// Name (read-only) - public string? name { get; set; } = null; - /// Value (read-only) - public string? value { get; set; } = null; -} - -public class LookmlModelExploreConditionallyFilter : SdkModel -{ - /// Name (read-only) - public string? name { get; set; } = null; - /// Value (read-only) - public string? value { get; set; } = null; -} - -public class LookmlModelExploreError : SdkModel -{ - /// Error Message (read-only) - public string? message { get; set; } = null; - /// Details (read-only) - public object? details { get; set; } = null; - /// Error source location (read-only) - public string? error_pos { get; set; } = null; - /// Is this a field error (read-only) - public bool? field_error { get; set; } = null; -} - -public class LookmlModelExploreField : SdkModel -{ - /// The appropriate horizontal text alignment the values of this field should be displayed in. Valid values are: "left", "right". (read-only) - [JsonConverter(typeof(StringEnumConverter))] - public Align? align { get; set; } - /// Whether it's possible to filter on this field. (read-only) - public bool? can_filter { get; set; } = null; - /// Field category Valid values are: "parameter", "filter", "measure", "dimension". (read-only) - [JsonConverter(typeof(StringEnumConverter))] - public Category? category { get; set; } - /// The default value that this field uses when filtering. Null if there is no default value. (read-only) - public string? default_filter_value { get; set; } = null; - /// Description (read-only) - public string? description { get; set; } = null; - /// Dimension group if this field is part of a dimension group. If not, this will be null. (read-only) - public string? dimension_group { get; set; } = null; - /// An array enumerating all the possible values that this field can contain. When null, there is no limit to the set of possible values this field can contain. (read-only) - public LookmlModelExploreFieldEnumeration[]? enumerations { get; set; } = null; - /// An error message indicating a problem with the definition of this field. If there are no errors, this will be null. (read-only) - public string? error { get; set; } = null; - /// A label creating a grouping of fields. All fields with this label should be presented together when displayed in a UI. (read-only) - public string? field_group_label { get; set; } = null; - /// When presented in a field group via field_group_label, a shorter name of the field to be displayed in that context. (read-only) - public string? field_group_variant { get; set; } = null; - /// The style of dimension fill that is possible for this field. Null if no dimension fill is possible. Valid values are: "enumeration", "range". (read-only) - [JsonConverter(typeof(StringEnumConverter))] - public FillStyle? fill_style { get; set; } - /// An offset (in months) from the calendar start month to the fiscal start month defined in the LookML model this field belongs to. (read-only) - public long? fiscal_month_offset { get; set; } = null; - /// Whether this field has a set of allowed_values specified in LookML. (read-only) - public bool? has_allowed_values { get; set; } = null; - /// Whether this field should be hidden from the user interface. (read-only) - public bool? hidden { get; set; } = null; - /// Whether this field is a filter. (read-only) - public bool? is_filter { get; set; } = null; - /// Whether this field represents a fiscal time value. (read-only) - public bool? is_fiscal { get; set; } = null; - /// Whether this field is of a type that represents a numeric value. (read-only) - public bool? is_numeric { get; set; } = null; - /// Whether this field is of a type that represents a time value. (read-only) - public bool? is_timeframe { get; set; } = null; - /// Whether this field can be time filtered. (read-only) - public bool? can_time_filter { get; set; } = null; - public LookmlModelExploreFieldTimeInterval? time_interval { get; set; } - /// Fully-qualified human-readable label of the field. (read-only) - public string? label { get; set; } = null; - /// The name of the parameter that will provide a parameterized label for this field, if available in the current context. (read-only) - public string? label_from_parameter { get; set; } = null; - /// The human-readable label of the field, without the view label. (read-only) - public string? label_short { get; set; } = null; - /// A URL linking to the definition of this field in the LookML IDE. (read-only) - public string? lookml_link { get; set; } = null; - public LookmlModelExploreFieldMapLayer? map_layer { get; set; } - /// Whether this field is a measure. (read-only) - public bool? measure { get; set; } = null; - /// Fully-qualified name of the field. (read-only) - public string? name { get; set; } = null; - /// If yes, the field will not be localized with the user attribute number_format. Defaults to no (read-only) - public bool? strict_value_format { get; set; } = null; - /// Whether this field is a parameter. (read-only) - public bool? parameter { get; set; } = null; - /// Whether this field can be removed from a query. (read-only) - public bool? permanent { get; set; } = null; - /// Whether or not the field represents a primary key. (read-only) - public bool? primary_key { get; set; } = null; - /// The name of the project this field is defined in. (read-only) - public string? project_name { get; set; } = null; - /// When true, it's not possible to re-sort this field's values without re-running the SQL query, due to database logic that affects the sort. (read-only) - public bool? requires_refresh_on_sort { get; set; } = null; - /// The LookML scope this field belongs to. The scope is typically the field's view. (read-only) - public string? scope { get; set; } = null; - /// Whether this field can be sorted. (read-only) - public bool? sortable { get; set; } = null; - /// The path portion of source_file_path. (read-only) - public string? source_file { get; set; } = null; - /// The fully-qualified path of the project file this field is defined in. (read-only) - public string? source_file_path { get; set; } = null; - /// SQL expression as defined in the LookML model. The SQL syntax shown here is a representation intended for auditability, and is not neccessarily an exact match for what will ultimately be run in the database. It may contain special LookML syntax or annotations that are not valid SQL. This will be null if the current user does not have the see_lookml permission for the field's model. (read-only) - public string? sql { get; set; } = null; - /// An array of conditions and values that make up a SQL Case expression, as defined in the LookML model. The SQL syntax shown here is a representation intended for auditability, and is not neccessarily an exact match for what will ultimately be run in the database. It may contain special LookML syntax or annotations that are not valid SQL. This will be null if the current user does not have the see_lookml permission for the field's model. (read-only) - public LookmlModelExploreFieldSqlCase[]? sql_case { get; set; } = null; - /// Array of filter conditions defined for the measure in LookML. (read-only) - public LookmlModelExploreFieldMeasureFilters[]? filters { get; set; } = null; - /// The name of the dimension to base suggest queries from. (read-only) - public string? suggest_dimension { get; set; } = null; - /// The name of the explore to base suggest queries from. (read-only) - public string? suggest_explore { get; set; } = null; - /// Whether or not suggestions are possible for this field. (read-only) - public bool? suggestable { get; set; } = null; - /// If available, a list of suggestions for this field. For most fields, a suggest query is a more appropriate way to get an up-to-date list of suggestions. Or use enumerations to list all the possible values. (read-only) - public string[]? suggestions { get; set; } = null; - /// An array of arbitrary string tags provided in the model for this field. (read-only) - public string[]? tags { get; set; } = null; - /// The LookML type of the field. (read-only) - public string? type { get; set; } = null; - /// An array of user attribute types that are allowed to be used in filters on this field. Valid values are: "advanced_filter_string", "advanced_filter_number", "advanced_filter_datetime", "string", "number", "datetime", "relative_url", "yesno", "zipcode". (read-only) - public UserAttributeFilterTypes[]? user_attribute_filter_types { get; set; } = null; - /// If specified, the LookML value format string for formatting values of this field. (read-only) - public string? value_format { get; set; } = null; - /// The name of the view this field belongs to. (read-only) - public string? view { get; set; } = null; - /// The human-readable label of the view the field belongs to. (read-only) - public string? view_label { get; set; } = null; - /// Whether this field was specified in "dynamic_fields" and is not part of the model. (read-only) - public bool? dynamic { get; set; } = null; - /// The name of the starting day of the week. Valid values are: "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday". (read-only) - [JsonConverter(typeof(StringEnumConverter))] - public WeekStartDay? week_start_day { get; set; } -} - -public class LookmlModelExploreFieldEnumeration : SdkModel -{ - /// Label (read-only) - public string? label { get; set; } = null; - /// Value (read-only) - public object? value { get; set; } = null; -} - -public class LookmlModelExploreFieldMapLayer : SdkModel -{ - /// URL to the map layer resource. (read-only) - public string? url { get; set; } = null; - /// Name of the map layer, as defined in LookML. (read-only) - public string? name { get; set; } = null; - /// Specifies the name of the TopoJSON object that the map layer references. If not specified, use the first object.. (read-only) - public string? feature_key { get; set; } = null; - /// Selects which property from the TopoJSON data to plot against. TopoJSON supports arbitrary metadata for each region. When null, the first matching property should be used. (read-only) - public string? property_key { get; set; } = null; - /// Which property from the TopoJSON data to use to label the region. When null, property_key should be used. (read-only) - public string? property_label_key { get; set; } = null; - /// The preferred geographic projection of the map layer when displayed in a visualization that supports multiple geographic projections. (read-only) - public string? projection { get; set; } = null; - /// Specifies the data format of the region information. Valid values are: "topojson", "vector_tile_region". (read-only) - [JsonConverter(typeof(StringEnumConverter))] - public Format? format { get; set; } - /// Specifies the URL to a JSON file that defines the geographic extents of each region available in the map layer. This data is used to automatically center the map on the available data for visualization purposes. The JSON file must be a JSON object where the keys are the mapping value of the feature (as specified by property_key) and the values are arrays of four numbers representing the west longitude, south latitude, east longitude, and north latitude extents of the region. The object must include a key for every possible value of property_key. (read-only) - public string? extents_json_url { get; set; } = null; - /// The minimum zoom level that the map layer may be displayed at, for visualizations that support zooming. (read-only) - public long? max_zoom_level { get; set; } = null; - /// The maximum zoom level that the map layer may be displayed at, for visualizations that support zooming. (read-only) - public long? min_zoom_level { get; set; } = null; -} - -public class LookmlModelExploreFieldMeasureFilters : SdkModel -{ - /// Filter field name (read-only) - public string? field { get; set; } = null; - /// Filter condition value (read-only) - public string? condition { get; set; } = null; -} - -public class LookmlModelExploreFieldset : SdkModel -{ - /// Array of dimensions (read-only) - public LookmlModelExploreField[]? dimensions { get; set; } = null; - /// Array of measures (read-only) - public LookmlModelExploreField[]? measures { get; set; } = null; - /// Array of filters (read-only) - public LookmlModelExploreField[]? filters { get; set; } = null; - /// Array of parameters (read-only) - public LookmlModelExploreField[]? parameters { get; set; } = null; -} - -public class LookmlModelExploreFieldSqlCase : SdkModel -{ - /// SQL Case label value (read-only) - public string? value { get; set; } = null; - /// SQL Case condition expression (read-only) - public string? condition { get; set; } = null; -} - -public class LookmlModelExploreFieldTimeInterval : SdkModel -{ - /// The type of time interval this field represents a grouping of. Valid values are: "day", "hour", "minute", "second", "millisecond", "microsecond", "week", "month", "quarter", "year". (read-only) - [JsonConverter(typeof(StringEnumConverter))] - public Name? name { get; set; } - /// The number of intervals this field represents a grouping of. (read-only) - public long? count { get; set; } = null; -} - -public class LookmlModelExploreJoins : SdkModel -{ - /// Name of this join (and name of the view to join) (read-only) - public string? name { get; set; } = null; - /// Fields referenced by the join (read-only) - public string[]? dependent_fields { get; set; } = null; - /// Fields of the joined view to pull into this explore (read-only) - public string[]? fields { get; set; } = null; - /// Name of the dimension in this explore whose value is in the primary key of the joined view (read-only) - public string? foreign_key { get; set; } = null; - /// Name of view to join (read-only) - public string? from { get; set; } = null; - /// Specifies whether all queries must use an outer join (read-only) - public bool? outer_only { get; set; } = null; - /// many_to_one, one_to_one, one_to_many, many_to_many (read-only) - public string? relationship { get; set; } = null; - /// Names of joins that must always be included in SQL queries (read-only) - public string[]? required_joins { get; set; } = null; - /// SQL expression that produces a foreign key (read-only) - public string? sql_foreign_key { get; set; } = null; - /// SQL ON expression describing the join condition (read-only) - public string? sql_on { get; set; } = null; - /// SQL table name to join (read-only) - public string? sql_table_name { get; set; } = null; - /// The join type: left_outer, full_outer, inner, or cross (read-only) - public string? type { get; set; } = null; - /// Label to display in UI selectors (read-only) - public string? view_label { get; set; } = null; -} - -public class LookmlModelExploreSet : SdkModel -{ - /// Name (read-only) - public string? name { get; set; } = null; - /// Value set (read-only) - public string[]? value { get; set; } = null; -} - -public class LookmlModelExploreSupportedMeasureType : SdkModel -{ - /// (read-only) - public string? dimension_type { get; set; } = null; - /// (read-only) - public string[]? measure_types { get; set; } = null; -} - -public class LookmlModelNavExplore : SdkModel -{ - /// Name of the explore (read-only) - public string? name { get; set; } = null; - /// Description for the explore (read-only) - public string? description { get; set; } = null; - /// Label for the explore (read-only) - public string? label { get; set; } = null; - /// Is this explore marked as hidden (read-only) - public bool? hidden { get; set; } = null; - /// Label used to group explores in the navigation menus (read-only) - public string? group_label { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; -} - -public class LookmlTest : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Name of model containing this test. (read-only) - public string? model_name { get; set; } = null; - /// Name of this test. (read-only) - public string? name { get; set; } = null; - /// Name of the explore this test runs a query against (read-only) - public string? explore_name { get; set; } = null; - /// The url parameters that can be used to reproduce this test's query on an explore. (read-only) - public string? query_url_params { get; set; } = null; - /// Name of the LookML file containing this test. (read-only) - public string? file { get; set; } = null; - /// Line number of this test in LookML. (read-only) - public long? line { get; set; } = null; -} - -public class LookmlTestResult : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Name of model containing this test. (read-only) - public string? model_name { get; set; } = null; - /// Name of this test. (read-only) - public string? test_name { get; set; } = null; - /// Number of assertions in this test (read-only) - public long? assertions_count { get; set; } = null; - /// Number of assertions passed in this test (read-only) - public long? assertions_failed { get; set; } = null; - /// A list of any errors encountered by the test. (read-only) - public ProjectError[]? errors { get; set; } = null; - /// A list of any warnings encountered by the test. (read-only) - public ProjectError[]? warnings { get; set; } = null; - /// True if this test passsed without errors. (read-only) - public bool? success { get; set; } = null; -} - -public class LookModel : SdkModel -{ - /// Model Id (read-only) - public string? id { get; set; } = null; - /// Model Label (read-only) - public string? label { get; set; } = null; -} - -public class LookWithDashboards : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Id of content metadata (read-only) - public long? content_metadata_id { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Look Title - public string? title { get; set; } = null; - /// Content Favorite Id (read-only) - public long? content_favorite_id { get; set; } = null; - /// Time that the Look was created. (read-only) - public DateTime? created_at { get; set; } = null; - /// Whether or not a look is 'soft' deleted. - public bool? deleted { get; set; } = null; - /// Time that the Look was deleted. (read-only) - public DateTime? deleted_at { get; set; } = null; - /// Id of User that deleted the look. (read-only) - public long? deleter_id { get; set; } = null; - /// Description - public string? description { get; set; } = null; - /// Embed Url (read-only) - public string? embed_url { get; set; } = null; - /// Excel File Url (read-only) - public string? excel_file_url { get; set; } = null; - /// Number of times favorited (read-only) - public long? favorite_count { get; set; } = null; - /// Google Spreadsheet Formula (read-only) - public string? google_spreadsheet_formula { get; set; } = null; - /// Image Embed Url (read-only) - public string? image_embed_url { get; set; } = null; - /// auto-run query when Look viewed - public bool? is_run_on_load { get; set; } = null; - /// Time that the Look was last accessed by any user (read-only) - public DateTime? last_accessed_at { get; set; } = null; - /// Id of User that last updated the look. (read-only) - public long? last_updater_id { get; set; } = null; - /// Time last viewed in the Looker web UI (read-only) - public DateTime? last_viewed_at { get; set; } = null; - public LookModel? model { get; set; } - /// Is Public - public bool? @public { get; set; } = null; - /// Public Slug (read-only) - public string? public_slug { get; set; } = null; - /// Public Url (read-only) - public string? public_url { get; set; } = null; - /// Query Id - public long? query_id { get; set; } = null; - /// Short Url (read-only) - public string? short_url { get; set; } = null; - public FolderBase? folder { get; set; } - /// Folder Id - public string? folder_id { get; set; } = null; - /// Time that the Look was updated. (read-only) - public DateTime? updated_at { get; set; } = null; - /// User Id - public long? user_id { get; set; } = null; - /// Number of times viewed in the Looker web UI (read-only) - public long? view_count { get; set; } = null; - public UserIdOnly? user { get; set; } - /// Space Id - public string? space_id { get; set; } = null; - public SpaceBase? space { get; set; } - /// Dashboards (read-only) - public DashboardBase[]? dashboards { get; set; } = null; -} - -public class LookWithQuery : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Id of content metadata (read-only) - public long? content_metadata_id { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Look Title - public string? title { get; set; } = null; - /// Content Favorite Id (read-only) - public long? content_favorite_id { get; set; } = null; - /// Time that the Look was created. (read-only) - public DateTime? created_at { get; set; } = null; - /// Whether or not a look is 'soft' deleted. - public bool? deleted { get; set; } = null; - /// Time that the Look was deleted. (read-only) - public DateTime? deleted_at { get; set; } = null; - /// Id of User that deleted the look. (read-only) - public long? deleter_id { get; set; } = null; - /// Description - public string? description { get; set; } = null; - /// Embed Url (read-only) - public string? embed_url { get; set; } = null; - /// Excel File Url (read-only) - public string? excel_file_url { get; set; } = null; - /// Number of times favorited (read-only) - public long? favorite_count { get; set; } = null; - /// Google Spreadsheet Formula (read-only) - public string? google_spreadsheet_formula { get; set; } = null; - /// Image Embed Url (read-only) - public string? image_embed_url { get; set; } = null; - /// auto-run query when Look viewed - public bool? is_run_on_load { get; set; } = null; - /// Time that the Look was last accessed by any user (read-only) - public DateTime? last_accessed_at { get; set; } = null; - /// Id of User that last updated the look. (read-only) - public long? last_updater_id { get; set; } = null; - /// Time last viewed in the Looker web UI (read-only) - public DateTime? last_viewed_at { get; set; } = null; - public LookModel? model { get; set; } - /// Is Public - public bool? @public { get; set; } = null; - /// Public Slug (read-only) - public string? public_slug { get; set; } = null; - /// Public Url (read-only) - public string? public_url { get; set; } = null; - /// Query Id - public long? query_id { get; set; } = null; - /// Short Url (read-only) - public string? short_url { get; set; } = null; - public FolderBase? folder { get; set; } - /// Folder Id - public string? folder_id { get; set; } = null; - /// Time that the Look was updated. (read-only) - public DateTime? updated_at { get; set; } = null; - /// User Id - public long? user_id { get; set; } = null; - /// Number of times viewed in the Looker web UI (read-only) - public long? view_count { get; set; } = null; - public UserIdOnly? user { get; set; } - /// Space Id - public string? space_id { get; set; } = null; - public SpaceBase? space { get; set; } - public Query? query { get; set; } - /// Url (read-only) - public string? url { get; set; } = null; -} - -public class Manifest : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Manifest project name (read-only) - public string? name { get; set; } = null; - /// Imports for a project (read-only) - public ImportedProject[]? imports { get; set; } = null; - public LocalizationSettings? localization_settings { get; set; } -} - -public class MaterializePDT : SdkModel -{ - /// The ID of the enqueued materialization task (read-only) - public string? materialization_id { get; set; } = null; - /// Detailed response in text format (read-only) - public string? resp_text { get; set; } = null; -} - -public class MergeFields : SdkModel -{ - /// Field name to map onto in the merged results - public string? field_name { get; set; } = null; - /// Field name from the source query - public string? source_field_name { get; set; } = null; -} - -public class MergeQuery : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Column Limit - public string? column_limit { get; set; } = null; - /// Dynamic Fields - public string? dynamic_fields { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Pivots - public string[]? pivots { get; set; } = null; - /// Unique to get results (read-only) - public long? result_maker_id { get; set; } = null; - /// Sorts - public string[]? sorts { get; set; } = null; - /// Source Queries defining the results to be merged. - public MergeQuerySourceQuery[]? source_queries { get; set; } = null; - /// Total - public bool? total { get; set; } = null; - /// Visualization Config - public StringDictionary? vis_config { get; set; } = null; -} - -public class MergeQuerySourceQuery : SdkModel -{ - /// An array defining which fields of the source query are mapped onto fields of the merge query - public MergeFields[]? merge_fields { get; set; } = null; - /// Display name - public string? name { get; set; } = null; - /// Id of the query to merge - public long? query_id { get; set; } = null; -} - -public class ModelSet : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// (read-only) - public bool? all_access { get; set; } = null; - /// (read-only) - public bool? built_in { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - public string[]? models { get; set; } = null; - /// Name of ModelSet - public string? name { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -public class ModelsNotValidated : SdkModel -{ - /// Model name (read-only) - public string? name { get; set; } = null; - /// Project file (read-only) - public string? project_file_id { get; set; } = null; -} - -/// The type of time interval this field represents a grouping of. Valid values are: "day", "hour", "minute", "second", "millisecond", "microsecond", "week", "month", "quarter", "year". (Enum defined in LookmlModelExploreFieldTimeInterval) -public enum Name -{ - [EnumMember(Value = "day")] - day, - [EnumMember(Value = "hour")] - hour, - [EnumMember(Value = "minute")] - minute, - [EnumMember(Value = "second")] - second, - [EnumMember(Value = "millisecond")] - millisecond, - [EnumMember(Value = "microsecond")] - microsecond, - [EnumMember(Value = "week")] - week, - [EnumMember(Value = "month")] - month, - [EnumMember(Value = "quarter")] - quarter, - [EnumMember(Value = "year")] - year -} - -public class OIDCConfig : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. - public bool? alternate_email_login_allowed { get; set; } = null; - /// OpenID Provider Audience - public string? audience { get; set; } = null; - /// Users will not be allowed to login at all unless a role for them is found in OIDC if set to true - public bool? auth_requires_role { get; set; } = null; - /// OpenID Provider Authorization Url - public Url? authorization_endpoint { get; set; } = null; - /// (Write-Only) Array of ids of groups that will be applied to new users the first time they login via OIDC - public long[]? default_new_user_group_ids { get; set; } = null; - /// (Read-only) Groups that will be applied to new users the first time they login via OIDC (read-only) - public Group[]? default_new_user_groups { get; set; } = null; - /// (Write-Only) Array of ids of roles that will be applied to new users the first time they login via OIDC - public long[]? default_new_user_role_ids { get; set; } = null; - /// (Read-only) Roles that will be applied to new users the first time they login via OIDC (read-only) - public Role[]? default_new_user_roles { get; set; } = null; - /// Enable/Disable OIDC authentication for the server - public bool? enabled { get; set; } = null; - /// (Read-only) Array of mappings between OIDC Groups and Looker Roles (read-only) - public OIDCGroupRead[]? groups { get; set; } = null; - /// Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values' - public string? groups_attribute { get; set; } = null; - /// (Read/Write) Array of mappings between OIDC Groups and arrays of Looker Role ids - public OIDCGroupWrite[]? groups_with_role_ids { get; set; } = null; - /// Relying Party Identifier (provided by OpenID Provider) - public string? identifier { get; set; } = null; - /// OpenID Provider Issuer - public string? issuer { get; set; } = null; - /// When this config was last modified (read-only) - public DateTime? modified_at { get; set; } = null; - /// User id of user who last modified this config (read-only) - public long? modified_by { get; set; } = null; - /// Merge first-time oidc login to existing user account by email addresses. When a user logs in for the first time via oidc this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google' - public string? new_user_migration_types { get; set; } = null; - /// Array of scopes to request. - public string[]? scopes { get; set; } = null; - /// (Write-Only) Relying Party Secret (provided by OpenID Provider) - public string? secret { get; set; } = null; - /// Set user roles in Looker based on groups from OIDC - public bool? set_roles_from_groups { get; set; } = null; - /// Slug to identify configurations that are created in order to run a OIDC config test (read-only) - public string? test_slug { get; set; } = null; - /// OpenID Provider Token Url - public string? token_endpoint { get; set; } = null; - /// Name of user record attributes used to indicate email address field - public string? user_attribute_map_email { get; set; } = null; - /// Name of user record attributes used to indicate first name - public string? user_attribute_map_first_name { get; set; } = null; - /// Name of user record attributes used to indicate last name - public string? user_attribute_map_last_name { get; set; } = null; - /// (Read-only) Array of mappings between OIDC User Attributes and Looker User Attributes (read-only) - public OIDCUserAttributeRead[]? user_attributes { get; set; } = null; - /// (Read/Write) Array of mappings between OIDC User Attributes and arrays of Looker User Attribute ids - public OIDCUserAttributeWrite[]? user_attributes_with_ids { get; set; } = null; - /// OpenID Provider User Information Url - public Url? userinfo_endpoint { get; set; } = null; - /// Allow OIDC auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. - public bool? allow_normal_group_membership { get; set; } = null; - /// OIDC auth'd users will inherit roles from non-reflected Looker groups. - public bool? allow_roles_from_normal_groups { get; set; } = null; - /// Allows roles to be directly assigned to OIDC auth'd users. - public bool? allow_direct_roles { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -public class OIDCGroupRead : SdkModel -{ - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Unique Id of group in Looker (read-only) - public long? looker_group_id { get; set; } = null; - /// Name of group in Looker (read-only) - public string? looker_group_name { get; set; } = null; - /// Name of group in OIDC (read-only) - public string? name { get; set; } = null; - /// Looker Roles (read-only) - public Role[]? roles { get; set; } = null; -} - -public class OIDCGroupWrite : SdkModel -{ - /// Unique Id - public long? id { get; set; } = null; - /// Unique Id of group in Looker (read-only) - public long? looker_group_id { get; set; } = null; - /// Name of group in Looker - public string? looker_group_name { get; set; } = null; - /// Name of group in OIDC - public string? name { get; set; } = null; - /// Looker Role Ids - public long[]? role_ids { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; -} - -public class OIDCUserAttributeRead : SdkModel -{ - /// Name of User Attribute in OIDC (read-only) - public string? name { get; set; } = null; - /// Required to be in OIDC assertion for login to be allowed to succeed (read-only) - public bool? required { get; set; } = null; - /// Looker User Attributes (read-only) - public UserAttribute[]? user_attributes { get; set; } = null; -} - -public class OIDCUserAttributeWrite : SdkModel -{ - /// Name of User Attribute in OIDC - public string? name { get; set; } = null; - /// Required to be in OIDC assertion for login to be allowed to succeed - public bool? required { get; set; } = null; - /// Looker User Attribute Ids - public long[]? user_attribute_ids { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; -} - -public class PasswordConfig : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Minimum number of characters required for a new password. Must be between 7 and 100 - public long? min_length { get; set; } = null; - /// Require at least one numeric character - public bool? require_numeric { get; set; } = null; - /// Require at least one uppercase and one lowercase letter - public bool? require_upperlower { get; set; } = null; - /// Require at least one special character - public bool? require_special { get; set; } = null; -} - -public class Permission : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Permission symbol (read-only) - public string? permission { get; set; } = null; - /// Dependency parent symbol (read-only) - public string? parent { get; set; } = null; - /// Description (read-only) - public string? description { get; set; } = null; -} - -public class PermissionSet : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// (read-only) - public bool? all_access { get; set; } = null; - /// (read-only) - public bool? built_in { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Name of PermissionSet - public string? name { get; set; } = null; - public string[]? permissions { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -/// Type of permission: "view" or "edit" Valid values are: "view", "edit". (Enum defined in ContentMetaGroupUser) -public enum PermissionType -{ - [EnumMember(Value = "view")] - view, - [EnumMember(Value = "edit")] - edit -} - -public class Project : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Project Id (read-only) - public string? id { get; set; } = null; - /// Project display name - public string? name { get; set; } = null; - /// If true the project is configured with a git repository (read-only) - public bool? uses_git { get; set; } = null; - /// Git remote repository url - public string? git_remote_url { get; set; } = null; - /// Git username for HTTPS authentication. (For production only, if using user attributes.) - public string? git_username { get; set; } = null; - /// (Write-Only) Git password for HTTPS authentication. (For production only, if using user attributes.) - public string? git_password { get; set; } = null; - /// Git production branch name. Defaults to master. Supported only in Looker 21.0 and higher. - public string? git_production_branch_name { get; set; } = null; - /// If true, the project uses a git cookie for authentication. - public bool? use_git_cookie_auth { get; set; } = null; - /// User attribute name for username in per-user HTTPS authentication. - public string? git_username_user_attribute { get; set; } = null; - /// User attribute name for password in per-user HTTPS authentication. - public string? git_password_user_attribute { get; set; } = null; - /// Name of the git service provider - public string? git_service_name { get; set; } = null; - /// Port that HTTP(S) application server is running on (for PRs, file browsing, etc.) - public long? git_application_server_http_port { get; set; } = null; - /// Scheme that is running on application server (for PRs, file browsing, etc.) - public string? git_application_server_http_scheme { get; set; } = null; - /// (Write-Only) Optional secret token with which to authenticate requests to the webhook deploy endpoint. If not set, endpoint is unauthenticated. - public string? deploy_secret { get; set; } = null; - /// (Write-Only) When true, unsets the deploy secret to allow unauthenticated access to the webhook deploy endpoint. - public bool? unset_deploy_secret { get; set; } = null; - /// The git pull request policy for this project. Valid values are: "off", "links", "recommended", "required". - [JsonConverter(typeof(StringEnumConverter))] - public PullRequestMode? pull_request_mode { get; set; } - /// Validation policy: If true, the project must pass validation checks before project changes can be committed to the git repository - public bool? validation_required { get; set; } = null; - /// If true, advanced git release management is enabled for this project - public bool? git_release_mgmt_enabled { get; set; } = null; - /// Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false). - public bool? allow_warnings { get; set; } = null; - /// If true the project is an example project and cannot be modified (read-only) - public bool? is_example { get; set; } = null; -} - -public class ProjectError : SdkModel -{ - /// A stable token that uniquely identifies this class of error, ignoring parameter values. Error message text may vary due to parameters or localization, but error codes do not. For example, a "File not found" error will have the same error code regardless of the filename in question or the user's display language (read-only) - public string? code { get; set; } = null; - /// Severity: fatal, error, warning, info, success (read-only) - public string? severity { get; set; } = null; - /// Error classification: syntax, deprecation, model_configuration, etc (read-only) - public string? kind { get; set; } = null; - /// Error message which may contain information such as dashboard or model names that may be considered sensitive in some use cases. Avoid storing or sending this message outside of Looker (read-only) - public string? message { get; set; } = null; - /// The field associated with this error (read-only) - public string? field_name { get; set; } = null; - /// Name of the file containing this error (read-only) - public string? file_path { get; set; } = null; - /// Line number in the file of this error (read-only) - public long? line_number { get; set; } = null; - /// The model associated with this error (read-only) - public string? model_id { get; set; } = null; - /// The explore associated with this error (read-only) - public string? explore { get; set; } = null; - /// A link to Looker documentation about this error (read-only) - public string? help_url { get; set; } = null; - /// Error parameters (read-only) - public StringDictionary? @params { get; set; } = null; - /// A version of the error message that does not contain potentially sensitive information. Suitable for situations in which messages are stored or sent to consumers outside of Looker, such as external logs. Sanitized messages will display "(?)" where sensitive information would appear in the corresponding non-sanitized message (read-only) - public string? sanitized_message { get; set; } = null; -} - -public class ProjectFile : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// An opaque token uniquely identifying a file within a project. Avoid parsing or decomposing the text of this token. This token is stable within a Looker release but may change between Looker releases (read-only) - public string? id { get; set; } = null; - /// Path, file name, and extension of the file relative to the project root directory (read-only) - public string? path { get; set; } = null; - /// Display name (read-only) - public string? title { get; set; } = null; - /// File type: model, view, etc (read-only) - public string? type { get; set; } = null; - /// The extension of the file: .view.lkml, .model.lkml, etc (read-only) - public string? extension { get; set; } = null; - /// File mime type (read-only) - public string? mime_type { get; set; } = null; - /// State of editability for the file. (read-only) - public bool? editable { get; set; } = null; - public GitStatus? git_status { get; set; } -} - -public class ProjectValidation : SdkModel -{ - /// A list of project errors (read-only) - public ProjectError[]? errors { get; set; } = null; - /// A hash value computed from the project's current state (read-only) - public string? project_digest { get; set; } = null; - /// A list of models which were not fully validated (read-only) - public ModelsNotValidated[]? models_not_validated { get; set; } = null; - /// Duration of project validation in seconds (read-only) - public float? computation_time { get; set; } = null; -} - -public class ProjectValidationCache : SdkModel -{ - /// A list of project errors (read-only) - public ProjectError[]? errors { get; set; } = null; - /// A hash value computed from the project's current state (read-only) - public string? project_digest { get; set; } = null; - /// A list of models which were not fully validated (read-only) - public ModelsNotValidated[]? models_not_validated { get; set; } = null; - /// Duration of project validation in seconds (read-only) - public float? computation_time { get; set; } = null; - /// If true, the cached project validation results are no longer accurate because the project has changed since the cached results were calculated (read-only) - public bool? stale { get; set; } = null; -} - -public class ProjectWorkspace : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// The id of the project (read-only) - public string? project_id { get; set; } = null; - /// The id of the local workspace containing the project files (read-only) - public string? workspace_id { get; set; } = null; - /// The status of the local git directory (read-only) - public string? git_status { get; set; } = null; - /// Git head revision name (read-only) - public string? git_head { get; set; } = null; - /// Status of the dependencies in your project. Valid values are: "lock_optional", "lock_required", "lock_error", "install_none". (read-only) - [JsonConverter(typeof(StringEnumConverter))] - public DependencyStatus? dependency_status { get; set; } - public GitBranch? git_branch { get; set; } - /// The lookml syntax used by all files in this project (read-only) - public string? lookml_type { get; set; } = null; -} - -/// The git pull request policy for this project. Valid values are: "off", "links", "recommended", "required". (Enum defined in Project) -public enum PullRequestMode -{ - [EnumMember(Value = "off")] - off, - [EnumMember(Value = "links")] - links, - [EnumMember(Value = "recommended")] - recommended, - [EnumMember(Value = "required")] - required -} - -public class Query : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Model - public string model { get; set; } = ""; - /// Explore Name - public string view { get; set; } = ""; - /// Fields - public string[]? fields { get; set; } = null; - /// Pivots - public string[]? pivots { get; set; } = null; - /// Fill Fields - public string[]? fill_fields { get; set; } = null; - /// Filters - public StringDictionary? filters { get; set; } = null; - /// Filter Expression - public string? filter_expression { get; set; } = null; - /// Sorting for the query results. Use the format `["view.field", ...]` to sort on fields in ascending order. Use the format `["view.field desc", ...]` to sort on fields in descending order. Use `["__UNSORTED__"]` (2 underscores before and after) to disable sorting entirely. Empty sorts `[]` will trigger a default sort. - public string[]? sorts { get; set; } = null; - /// Limit - public string? limit { get; set; } = null; - /// Column Limit - public string? column_limit { get; set; } = null; - /// Total - public bool? total { get; set; } = null; - /// Raw Total - public string? row_total { get; set; } = null; - /// Fields on which to run subtotals - public string[]? subtotals { get; set; } = null; - /// Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. - public StringDictionary? vis_config { get; set; } = null; - /// The filter_config represents the state of the filter UI on the explore page for a given query. When running a query via the Looker UI, this parameter takes precedence over "filters". When creating a query or modifying an existing query, "filter_config" should be set to null. Setting it to any other value could cause unexpected filtering behavior. The format should be considered opaque. - public StringDictionary? filter_config { get; set; } = null; - /// Visible UI Sections - public string? visible_ui_sections { get; set; } = null; - /// Slug (read-only) - public string? slug { get; set; } = null; - /// Dynamic Fields - public string? dynamic_fields { get; set; } = null; - /// Client Id: used to generate shortened explore URLs. If set by client, must be a unique 22 character alphanumeric string. Otherwise one will be generated. - public string? client_id { get; set; } = null; - /// Share Url (read-only) - public string? share_url { get; set; } = null; - /// Expanded Share Url (read-only) - public string? expanded_share_url { get; set; } = null; - /// Expanded Url (read-only) - public string? url { get; set; } = null; - /// Query Timezone - public string? query_timezone { get; set; } = null; - /// Has Table Calculations (read-only) - public bool? has_table_calculations { get; set; } = null; - /// (DEPRECATED) Runtime (Deprecated) - public double? runtime { get; set; } = null; -} - -public class QueryTask : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Id of query - public long? query_id { get; set; } = null; - public Query? query { get; set; } - /// whether or not to generate links in the query response. - public bool? generate_links { get; set; } = null; - /// Use production models to run query (even is user is in dev mode). - public bool? force_production { get; set; } = null; - /// Prefix to use for drill links. - public string? path_prefix { get; set; } = null; - /// Whether or not to use the cache - public bool? cache { get; set; } = null; - /// Whether or not to run table calculations on the server - public bool? server_table_calcs { get; set; } = null; - /// Retrieve any results from cache even if the results have expired. - public bool? cache_only { get; set; } = null; - /// cache key used to cache query. (read-only) - public string? cache_key { get; set; } = null; - /// Status of query task. - public string? status { get; set; } = null; - /// Source of query task. - public string? source { get; set; } = null; - /// Runtime of prior queries. (read-only) - public float? runtime { get; set; } = null; - /// Rebuild PDTS used in query. - public bool? rebuild_pdts { get; set; } = null; - /// Source of the results of the query. (read-only) - public string? result_source { get; set; } = null; - /// Id of look associated with query. - public long? look_id { get; set; } = null; - /// Id of dashboard associated with query. - public string? dashboard_id { get; set; } = null; - /// The data format of the query results. (read-only) - public string? result_format { get; set; } = null; -} - -public class RenderTask : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Date/Time render task was created (read-only) - public string? created_at { get; set; } = null; - /// Filter values to apply to the dashboard queries, in URL query format (read-only) - public string? dashboard_filters { get; set; } = null; - /// Id of dashboard to render (read-only) - public long? dashboard_id { get; set; } = null; - /// Dashboard layout style: single_column or tiled (read-only) - public string? dashboard_style { get; set; } = null; - /// Date/Time render task was completed (read-only) - public string? finalized_at { get; set; } = null; - /// Output height in pixels. Flowed layouts may ignore this value. (read-only) - public long? height { get; set; } = null; - /// Id of this render task (read-only) - public string? id { get; set; } = null; - /// Id of look to render (read-only) - public long? look_id { get; set; } = null; - /// Id of lookml dashboard to render (read-only) - public string? lookml_dashboard_id { get; set; } = null; - /// Id of query to render (read-only) - public long? query_id { get; set; } = null; - /// Id of dashboard element to render: UDD dashboard element would be numeric and LookML dashboard element would be model_name::dashboard_title::lookml_link_id (read-only) - public string? dashboard_element_id { get; set; } = null; - /// Number of seconds elapsed running queries (read-only) - public double? query_runtime { get; set; } = null; - /// Number of seconds elapsed rendering data (read-only) - public double? render_runtime { get; set; } = null; - /// Output format: pdf, png, or jpg (read-only) - public string? result_format { get; set; } = null; - /// Total seconds elapsed for render task (read-only) - public double? runtime { get; set; } = null; - /// Render task status: enqueued_for_query, querying, enqueued_for_render, rendering, success, failure (read-only) - public string? status { get; set; } = null; - /// Additional information about the current status (read-only) - public string? status_detail { get; set; } = null; - /// The user account permissions in which the render task will execute (read-only) - public long? user_id { get; set; } = null; - /// Output width in pixels (read-only) - public long? width { get; set; } = null; -} - -public class RepositoryCredential : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Root project Id (read-only) - public string? root_project_id { get; set; } = null; - /// Git remote repository url (read-only) - public string? remote_url { get; set; } = null; - /// Git username for HTTPS authentication. - public string? git_username { get; set; } = null; - /// (Write-Only) Git password for HTTPS authentication. - public string? git_password { get; set; } = null; - /// Public deploy key for SSH authentication. - public string? ssh_public_key { get; set; } = null; - /// Whether the credentials have been configured for the Git Repository. (read-only) - public bool? is_configured { get; set; } = null; -} - -/// Desired async query result format. Valid values are: "inline_json", "json", "json_detail", "json_fe", "json_bi", "csv", "html", "md", "txt", "xlsx", "gsxml", "sql". (Enum defined in CreateQueryTask) -public enum ResultFormat -{ - [EnumMember(Value = "inline_json")] - inline_json, - [EnumMember(Value = "json")] - json, - [EnumMember(Value = "json_detail")] - json_detail, - [EnumMember(Value = "json_fe")] - json_fe, - [EnumMember(Value = "json_bi")] - json_bi, - [EnumMember(Value = "csv")] - csv, - [EnumMember(Value = "html")] - html, - [EnumMember(Value = "md")] - md, - [EnumMember(Value = "txt")] - txt, - [EnumMember(Value = "xlsx")] - xlsx, - [EnumMember(Value = "gsxml")] - gsxml, - [EnumMember(Value = "sql")] - sql -} - -public class ResultMakerFilterables : SdkModel -{ - /// The model this filterable comes from (used for field suggestions). (read-only) - public string? model { get; set; } = null; - /// The view this filterable comes from (used for field suggestions). (read-only) - public string? view { get; set; } = null; - /// The name of the filterable thing (Query or Merged Results). (read-only) - public string? name { get; set; } = null; - /// array of dashboard_filter_name: and field: objects. (read-only) - public ResultMakerFilterablesListen[]? listen { get; set; } = null; -} - -public class ResultMakerFilterablesListen : SdkModel -{ - /// The name of a dashboard filter to listen to. - public string? dashboard_filter_name { get; set; } = null; - /// The name of the field in the filterable to filter with the value of the dashboard filter. - public string? field { get; set; } = null; -} - -public class ResultMakerWithIdVisConfigAndDynamicFields : SdkModel -{ - /// Unique Id. (read-only) - public long? id { get; set; } = null; - /// JSON string of dynamic field information. (read-only) - public string? dynamic_fields { get; set; } = null; - /// array of items that can be filtered and information about them. (read-only) - public ResultMakerFilterables[]? filterables { get; set; } = null; - /// Sorts of the constituent Look, Query, or Merge Query (read-only) - public string[]? sorts { get; set; } = null; - /// ID of merge result if this is a merge_result. (read-only) - public string? merge_result_id { get; set; } = null; - /// Total of the constituent Look, Query, or Merge Query (read-only) - public bool? total { get; set; } = null; - /// ID of query if this is a query. (read-only) - public long? query_id { get; set; } = null; - /// ID of SQL Query if this is a SQL Runner Query (read-only) - public string? sql_query_id { get; set; } = null; - public Query? query { get; set; } - /// Vis config of the constituent Query, or Merge Query. (read-only) - public StringDictionary? vis_config { get; set; } = null; -} - -public class Role : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Name of Role - public string? name { get; set; } = null; - public PermissionSet? permission_set { get; set; } - /// (Write-Only) Id of permission set - public long? permission_set_id { get; set; } = null; - public ModelSet? model_set { get; set; } - /// (Write-Only) Id of model set - public long? model_set_id { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; - /// Link to get list of users with this role (read-only) - public Url? users_url { get; set; } = null; -} - -public class RunningQueries : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - public UserPublic? user { get; set; } - public Query? query { get; set; } - public SqlQuery? sql_query { get; set; } - public LookBasic? look { get; set; } - /// Date/Time Query was initiated (read-only) - public string? created_at { get; set; } = null; - /// Date/Time Query was completed (read-only) - public string? completed_at { get; set; } = null; - /// Query Id (read-only) - public string? query_id { get; set; } = null; - /// Source (look, dashboard, queryrunner, explore, etc.) (read-only) - public string? source { get; set; } = null; - /// Node Id (read-only) - public string? node_id { get; set; } = null; - /// Slug (read-only) - public string? slug { get; set; } = null; - /// ID of a Query Task (read-only) - public string? query_task_id { get; set; } = null; - /// Cache Key (read-only) - public string? cache_key { get; set; } = null; - /// Connection (read-only) - public string? connection_name { get; set; } = null; - /// Dialect (read-only) - public string? dialect { get; set; } = null; - /// Connection ID (read-only) - public string? connection_id { get; set; } = null; - /// Additional Information(Error message or verbose status) (read-only) - public string? message { get; set; } = null; - /// Status description (read-only) - public string? status { get; set; } = null; - /// Number of seconds elapsed running the Query (read-only) - public double? runtime { get; set; } = null; - /// SQL text of the query as run (read-only) - public string? sql { get; set; } = null; -} - -public class SamlConfig : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Enable/Disable Saml authentication for the server - public bool? enabled { get; set; } = null; - /// Identity Provider Certificate (provided by IdP) - public string? idp_cert { get; set; } = null; - /// Identity Provider Url (provided by IdP) - public string? idp_url { get; set; } = null; - /// Identity Provider Issuer (provided by IdP) - public string? idp_issuer { get; set; } = null; - /// Identity Provider Audience (set in IdP config). Optional in Looker. Set this only if you want Looker to validate the audience value returned by the IdP. - public string? idp_audience { get; set; } = null; - /// Count of seconds of clock drift to allow when validating timestamps of assertions. - public long? allowed_clock_drift { get; set; } = null; - /// Name of user record attributes used to indicate email address field - public string? user_attribute_map_email { get; set; } = null; - /// Name of user record attributes used to indicate first name - public string? user_attribute_map_first_name { get; set; } = null; - /// Name of user record attributes used to indicate last name - public string? user_attribute_map_last_name { get; set; } = null; - /// Merge first-time saml login to existing user account by email addresses. When a user logs in for the first time via saml this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google' - public string? new_user_migration_types { get; set; } = null; - /// Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. - public bool? alternate_email_login_allowed { get; set; } = null; - /// Slug to identify configurations that are created in order to run a Saml config test (read-only) - public string? test_slug { get; set; } = null; - /// When this config was last modified (read-only) - public string? modified_at { get; set; } = null; - /// User id of user who last modified this config (read-only) - public string? modified_by { get; set; } = null; - /// (Read-only) Roles that will be applied to new users the first time they login via Saml (read-only) - public Role[]? default_new_user_roles { get; set; } = null; - /// (Read-only) Groups that will be applied to new users the first time they login via Saml (read-only) - public Group[]? default_new_user_groups { get; set; } = null; - /// (Write-Only) Array of ids of roles that will be applied to new users the first time they login via Saml - public long[]? default_new_user_role_ids { get; set; } = null; - /// (Write-Only) Array of ids of groups that will be applied to new users the first time they login via Saml - public long[]? default_new_user_group_ids { get; set; } = null; - /// Set user roles in Looker based on groups from Saml - public bool? set_roles_from_groups { get; set; } = null; - /// Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values' - public string? groups_attribute { get; set; } = null; - /// (Read-only) Array of mappings between Saml Groups and Looker Roles (read-only) - public SamlGroupRead[]? groups { get; set; } = null; - /// (Read/Write) Array of mappings between Saml Groups and arrays of Looker Role ids - public SamlGroupWrite[]? groups_with_role_ids { get; set; } = null; - /// Users will not be allowed to login at all unless a role for them is found in Saml if set to true - public bool? auth_requires_role { get; set; } = null; - /// (Read-only) Array of mappings between Saml User Attributes and Looker User Attributes (read-only) - public SamlUserAttributeRead[]? user_attributes { get; set; } = null; - /// (Read/Write) Array of mappings between Saml User Attributes and arrays of Looker User Attribute ids - public SamlUserAttributeWrite[]? user_attributes_with_ids { get; set; } = null; - /// Identifier for a strategy for how Looker will find groups in the SAML response. One of ['grouped_attribute_values', 'individual_attributes'] - public string? groups_finder_type { get; set; } = null; - /// Value for group attribute used to indicate membership. Used when 'groups_finder_type' is set to 'individual_attributes' - public string? groups_member_value { get; set; } = null; - /// Bypass the login page when user authentication is required. Redirect to IdP immediately instead. - public bool? bypass_login_page { get; set; } = null; - /// Allow SAML auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. - public bool? allow_normal_group_membership { get; set; } = null; - /// SAML auth'd users will inherit roles from non-reflected Looker groups. - public bool? allow_roles_from_normal_groups { get; set; } = null; - /// Allows roles to be directly assigned to SAML auth'd users. - public bool? allow_direct_roles { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -public class SamlGroupRead : SdkModel -{ - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Unique Id of group in Looker (read-only) - public long? looker_group_id { get; set; } = null; - /// Name of group in Looker (read-only) - public string? looker_group_name { get; set; } = null; - /// Name of group in Saml (read-only) - public string? name { get; set; } = null; - /// Looker Roles (read-only) - public Role[]? roles { get; set; } = null; - /// Link to saml config (read-only) - public Url? url { get; set; } = null; -} - -public class SamlGroupWrite : SdkModel -{ - /// Unique Id - public long? id { get; set; } = null; - /// Unique Id of group in Looker (read-only) - public long? looker_group_id { get; set; } = null; - /// Name of group in Looker - public string? looker_group_name { get; set; } = null; - /// Name of group in Saml - public string? name { get; set; } = null; - /// Looker Role Ids - public long[]? role_ids { get; set; } = null; - /// Link to saml config (read-only) - public Url? url { get; set; } = null; -} - -public class SamlMetadataParseResult : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Identify Provider Issuer (read-only) - public string? idp_issuer { get; set; } = null; - /// Identify Provider Url (read-only) - public string? idp_url { get; set; } = null; - /// Identify Provider Certificate (read-only) - public string? idp_cert { get; set; } = null; -} - -public class SamlUserAttributeRead : SdkModel -{ - /// Name of User Attribute in Saml (read-only) - public string? name { get; set; } = null; - /// Required to be in Saml assertion for login to be allowed to succeed (read-only) - public bool? required { get; set; } = null; - /// Looker User Attributes (read-only) - public UserAttribute[]? user_attributes { get; set; } = null; - /// Link to saml config (read-only) - public Url? url { get; set; } = null; -} - -public class SamlUserAttributeWrite : SdkModel -{ - /// Name of User Attribute in Saml - public string? name { get; set; } = null; - /// Required to be in Saml assertion for login to be allowed to succeed - public bool? required { get; set; } = null; - /// Looker User Attribute Ids - public long[]? user_attribute_ids { get; set; } = null; - /// Link to saml config (read-only) - public Url? url { get; set; } = null; -} - -public class ScheduledPlan : SdkModel -{ - /// Name of this scheduled plan - public string? name { get; set; } = null; - /// User Id which owns this scheduled plan - public long? user_id { get; set; } = null; - /// Whether schedule is run as recipient (only applicable for email recipients) - public bool? run_as_recipient { get; set; } = null; - /// Whether the ScheduledPlan is enabled - public bool? enabled { get; set; } = null; - /// Id of a look - public long? look_id { get; set; } = null; - /// Id of a dashboard - public long? dashboard_id { get; set; } = null; - /// Id of a LookML dashboard - public string? lookml_dashboard_id { get; set; } = null; - /// Query string to run look or dashboard with - public string? filters_string { get; set; } = null; - /// (DEPRECATED) Alias for filters_string field - public string? dashboard_filters { get; set; } = null; - /// Delivery should occur if running the dashboard or look returns results - public bool? require_results { get; set; } = null; - /// Delivery should occur if the dashboard look does not return results - public bool? require_no_results { get; set; } = null; - /// Delivery should occur if data have changed since the last run - public bool? require_change { get; set; } = null; - /// Will run an unlimited query and send all results. - public bool? send_all_results { get; set; } = null; - /// Vixie-Style crontab specification when to run - public string? crontab { get; set; } = null; - /// Name of a datagroup; if specified will run when datagroup triggered (can't be used with cron string) - public string? datagroup { get; set; } = null; - /// Timezone for interpreting the specified crontab (default is Looker instance timezone) - public string? timezone { get; set; } = null; - /// Query id - public string? query_id { get; set; } = null; - /// Scheduled plan destinations - public ScheduledPlanDestination[]? scheduled_plan_destination { get; set; } = null; - /// Whether the plan in question should only be run once (usually for testing) - public bool? run_once { get; set; } = null; - /// Whether links back to Looker should be included in this ScheduledPlan - public bool? include_links { get; set; } = null; - /// Custom url domain for the scheduled entity - public string? custom_url_base { get; set; } = null; - /// Custom url path and parameters for the scheduled entity - public string? custom_url_params { get; set; } = null; - /// Custom url label for the scheduled entity - public string? custom_url_label { get; set; } = null; - /// Whether to show custom link back instead of standard looker link - public bool? show_custom_url { get; set; } = null; - /// The size of paper the PDF should be formatted to fit. Valid values are: "letter", "legal", "tabloid", "a0", "a1", "a2", "a3", "a4", "a5". - public string? pdf_paper_size { get; set; } = null; - /// Whether the PDF should be formatted for landscape orientation - public bool? pdf_landscape { get; set; } = null; - /// Whether this schedule is in an embed context or not - public bool? embed { get; set; } = null; - /// Color scheme of the dashboard if applicable - public string? color_theme { get; set; } = null; - /// Whether or not to expand table vis to full length - public bool? long_tables { get; set; } = null; - /// The pixel width at which we render the inline table visualizations - public long? inline_table_width { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Date and time when ScheduledPlan was created (read-only) - public DateTime? created_at { get; set; } = null; - /// Date and time when ScheduledPlan was last updated (read-only) - public DateTime? updated_at { get; set; } = null; - /// Title (read-only) - public string? title { get; set; } = null; - public UserPublic? user { get; set; } - /// When the ScheduledPlan will next run (null if running once) (read-only) - public DateTime? next_run_at { get; set; } = null; - /// When the ScheduledPlan was last run (read-only) - public DateTime? last_run_at { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; -} - -public class ScheduledPlanDestination : SdkModel -{ - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Id of a scheduled plan you own - public long? scheduled_plan_id { get; set; } = null; - /// The data format to send to the given destination. Supported formats vary by destination, but include: "txt", "csv", "inline_json", "json", "json_detail", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png" - public string? format { get; set; } = null; - /// Are values formatted? (containing currency symbols, digit separators, etc. - public bool? apply_formatting { get; set; } = null; - /// Whether visualization options are applied to the results. - public bool? apply_vis { get; set; } = null; - /// Address for recipient. For email e.g. 'user@example.com'. For webhooks e.g. 'https://domain/path'. For Amazon S3 e.g. 's3://bucket-name/path/'. For SFTP e.g. 'sftp://host-name/path/'. - public string? address { get; set; } = null; - /// Whether the recipient is a Looker user on the current instance (only applicable for email recipients) (read-only) - public bool? looker_recipient { get; set; } = null; - /// Type of the address ('email', 'webhook', 's3', or 'sftp') - public string? type { get; set; } = null; - /// JSON object containing parameters for external scheduling. For Amazon S3, this requires keys and values for access_key_id and region. For SFTP, this requires a key and value for username. - public string? parameters { get; set; } = null; - /// (Write-Only) JSON object containing secret parameters for external scheduling. For Amazon S3, this requires a key and value for secret_access_key. For SFTP, this requires a key and value for password. - public string? secret_parameters { get; set; } = null; - /// Optional message to be included in scheduled emails - public string? message { get; set; } = null; -} - -public class Session : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// IP address of user when this session was initiated (read-only) - public string? ip_address { get; set; } = null; - /// User's browser type (read-only) - public string? browser { get; set; } = null; - /// User's Operating System (read-only) - public string? operating_system { get; set; } = null; - /// City component of user location (derived from IP address) (read-only) - public string? city { get; set; } = null; - /// State component of user location (derived from IP address) (read-only) - public string? state { get; set; } = null; - /// Country component of user location (derived from IP address) (read-only) - public string? country { get; set; } = null; - /// Type of credentials used for logging in this session (read-only) - public string? credentials_type { get; set; } = null; - /// Time when this session was last extended by the user (read-only) - public string? extended_at { get; set; } = null; - /// Number of times this session was extended (read-only) - public long? extended_count { get; set; } = null; - /// Actual user in the case when this session represents one user sudo'ing as another (read-only) - public long? sudo_user_id { get; set; } = null; - /// Time when this session was initiated (read-only) - public string? created_at { get; set; } = null; - /// Time when this session will expire (read-only) - public string? expires_at { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -public class SessionConfig : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Allow users to have persistent sessions when they login - public bool? allow_persistent_sessions { get; set; } = null; - /// Number of minutes for user sessions. Must be between 5 and 43200 - public long? session_minutes { get; set; } = null; - /// Allow users to have an unbounded number of concurrent sessions (otherwise, users will be limited to only one session at a time). - public bool? unlimited_sessions_per_user { get; set; } = null; - /// Enforce session logout for sessions that are inactive for 15 minutes. - public bool? use_inactivity_based_logout { get; set; } = null; - /// Track location of session when user logs in. - public bool? track_session_location { get; set; } = null; -} - -public class SmtpSettings : SdkModel -{ - /// SMTP Server url - public string? address { get; set; } = null; - /// From e-mail address - public string? from { get; set; } = null; - /// User name - public string? user_name { get; set; } = null; - /// Password - public string? password { get; set; } = null; - /// SMTP Server's port - public long? port { get; set; } = null; - /// Is TLS encryption enabled? - public bool? enable_starttls_auto { get; set; } = null; - /// TLS version selected Valid values are: "TLSv1_1", "SSLv23", "TLSv1_2". - [JsonConverter(typeof(StringEnumConverter))] - public SslVersion? ssl_version { get; set; } - /// Whether to enable built-in Looker SMTP - public bool? default_smtp { get; set; } = null; -} - -public class Snippet : SdkModel -{ - /// Name of the snippet (read-only) - public string? name { get; set; } = null; - /// Label of the snippet (read-only) - public string? label { get; set; } = null; - /// SQL text of the snippet (read-only) - public string? sql { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; -} - -public class Space : SdkModel -{ - /// Unique Name - public string name { get; set; } = ""; - /// Id of Parent. If the parent id is null, this is a root-level entry - public string? parent_id { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Id of content metadata (read-only) - public long? content_metadata_id { get; set; } = null; - /// Time the space was created (read-only) - public DateTime? created_at { get; set; } = null; - /// User Id of Creator (read-only) - public long? creator_id { get; set; } = null; - /// Children Count (read-only) - public long? child_count { get; set; } = null; - /// Embedder's Id if this space was autogenerated as an embedding shared space via 'external_group_id' in an SSO embed login (read-only) - public string? external_id { get; set; } = null; - /// Space is an embed space (read-only) - public bool? is_embed { get; set; } = null; - /// Space is the root embed shared space (read-only) - public bool? is_embed_shared_root { get; set; } = null; - /// Space is the root embed users space (read-only) - public bool? is_embed_users_root { get; set; } = null; - /// Space is a user's personal space (read-only) - public bool? is_personal { get; set; } = null; - /// Space is descendant of a user's personal space (read-only) - public bool? is_personal_descendant { get; set; } = null; - /// Space is the root shared space (read-only) - public bool? is_shared_root { get; set; } = null; - /// Space is the root user space (read-only) - public bool? is_users_root { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Dashboards (read-only) - public DashboardBase[]? dashboards { get; set; } = null; - /// Looks (read-only) - public LookWithDashboards[]? looks { get; set; } = null; -} - -public class SpaceBase : SdkModel -{ - /// Unique Name - public string name { get; set; } = ""; - /// Id of Parent. If the parent id is null, this is a root-level entry - public string? parent_id { get; set; } = null; - /// Unique Id (read-only) - public string? id { get; set; } = null; - /// Id of content metadata (read-only) - public long? content_metadata_id { get; set; } = null; - /// Time the space was created (read-only) - public DateTime? created_at { get; set; } = null; - /// User Id of Creator (read-only) - public long? creator_id { get; set; } = null; - /// Children Count (read-only) - public long? child_count { get; set; } = null; - /// Embedder's Id if this space was autogenerated as an embedding shared space via 'external_group_id' in an SSO embed login (read-only) - public string? external_id { get; set; } = null; - /// Space is an embed space (read-only) - public bool? is_embed { get; set; } = null; - /// Space is the root embed shared space (read-only) - public bool? is_embed_shared_root { get; set; } = null; - /// Space is the root embed users space (read-only) - public bool? is_embed_users_root { get; set; } = null; - /// Space is a user's personal space (read-only) - public bool? is_personal { get; set; } = null; - /// Space is descendant of a user's personal space (read-only) - public bool? is_personal_descendant { get; set; } = null; - /// Space is the root shared space (read-only) - public bool? is_shared_root { get; set; } = null; - /// Space is the root user space (read-only) - public bool? is_users_root { get; set; } = null; - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; -} - -public class SqlQuery : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// The identifier of the SQL query (read-only) - public string? slug { get; set; } = null; - /// Number of seconds this query took to run the most recent time it was run (read-only) - public float? last_runtime { get; set; } = null; - /// Number of times this query has been run (read-only) - public long? run_count { get; set; } = null; - /// Maximum number of rows this query will display on the SQL Runner page (read-only) - public long? browser_limit { get; set; } = null; - /// SQL query text (read-only) - public string? sql { get; set; } = null; - /// The most recent time this query was run (read-only) - public string? last_run_at { get; set; } = null; - public DBConnectionBase? connection { get; set; } - /// Model name this query uses (read-only) - public string? model_name { get; set; } = null; - public UserPublic? creator { get; set; } - /// Explore page URL for this SQL query (read-only) - public string? explore_url { get; set; } = null; - /// Should this query be rendered as plain text (read-only) - public bool? plaintext { get; set; } = null; - /// Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. - public StringDictionary? vis_config { get; set; } = null; - /// ID of the ResultMakerLookup entry. - public long? result_maker_id { get; set; } = null; -} - -public class SqlQueryCreate : SdkModel -{ - /// Name of the db connection on which to run this query - public string? connection_name { get; set; } = null; - /// (DEPRECATED) Use `connection_name` instead - public string? connection_id { get; set; } = null; - /// Name of LookML Model (this or `connection_id` required) - public string? model_name { get; set; } = null; - /// SQL query - public string? sql { get; set; } = null; - /// Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. - public StringDictionary? vis_config { get; set; } = null; -} - -/// TLS version selected Valid values are: "TLSv1_1", "SSLv23", "TLSv1_2". (Enum defined in SmtpSettings) -public enum SslVersion -{ - [EnumMember(Value = "TLSv1_1")] - TLSv1_1, - [EnumMember(Value = "SSLv23")] - SSLv23, - [EnumMember(Value = "TLSv1_2")] - TLSv1_2 -} - -/// A list of action types the integration supports. Valid values are: "cell", "query", "dashboard", "none". (Enum defined in Integration) -public enum SupportedActionTypes -{ - [EnumMember(Value = "cell")] - cell, - [EnumMember(Value = "query")] - query, - [EnumMember(Value = "dashboard")] - dashboard, - [EnumMember(Value = "none")] - none -} - -/// A list of all the download mechanisms the integration supports. The order of values is not significant: Looker will select the most appropriate supported download mechanism for a given query. The integration must ensure it can handle any of the mechanisms it claims to support. If unspecified, this defaults to all download setting values. Valid values are: "push", "url". (Enum defined in Integration) -public enum SupportedDownloadSettings -{ - [EnumMember(Value = "push")] - push, - [EnumMember(Value = "url")] - url -} - -/// A list of data formats the integration supports. If unspecified, the default is all data formats. Valid values are: "txt", "csv", "inline_json", "json", "json_label", "json_detail", "json_detail_lite_stream", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png", "csv_zip". (Enum defined in Integration) -public enum SupportedFormats -{ - [EnumMember(Value = "txt")] - txt, - [EnumMember(Value = "csv")] - csv, - [EnumMember(Value = "inline_json")] - inline_json, - [EnumMember(Value = "json")] - json, - [EnumMember(Value = "json_label")] - json_label, - [EnumMember(Value = "json_detail")] - json_detail, - [EnumMember(Value = "json_detail_lite_stream")] - json_detail_lite_stream, - [EnumMember(Value = "xlsx")] - xlsx, - [EnumMember(Value = "html")] - html, - [EnumMember(Value = "wysiwyg_pdf")] - wysiwyg_pdf, - [EnumMember(Value = "assembled_pdf")] - assembled_pdf, - [EnumMember(Value = "wysiwyg_png")] - wysiwyg_png, - [EnumMember(Value = "csv_zip")] - csv_zip -} - -/// A list of formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: "formatted", "unformatted". (Enum defined in Integration) -public enum SupportedFormattings -{ - [EnumMember(Value = "formatted")] - formatted, - [EnumMember(Value = "unformatted")] - unformatted -} - -/// A list of visualization formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: "apply", "noapply". (Enum defined in Integration) -public enum SupportedVisualizationFormattings -{ - [EnumMember(Value = "apply")] - apply, - [EnumMember(Value = "noapply")] - noapply -} - -public class Theme : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Timestamp for when this theme becomes active. Null=always - public DateTime? begin_at { get; set; } = null; - /// Timestamp for when this theme expires. Null=never - public DateTime? end_at { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Name of theme. Can only be alphanumeric and underscores. - public string? name { get; set; } = null; - public ThemeSettings? settings { get; set; } -} - -public class ThemeSettings : SdkModel -{ - /// Default background color - public string? background_color { get; set; } = null; - /// Base font size for scaling fonts (only supported by legacy dashboards) - public string? base_font_size { get; set; } = null; - /// Optional. ID of color collection to use with the theme. Use an empty string for none. - public string? color_collection_id { get; set; } = null; - /// Default font color - public string? font_color { get; set; } = null; - /// Primary font family - public string? font_family { get; set; } = null; - /// Source specification for font - public string? font_source { get; set; } = null; - /// (DEPRECATED) Info button color - public string? info_button_color { get; set; } = null; - /// Primary button color - public string? primary_button_color { get; set; } = null; - /// Toggle to show filters. Defaults to true. - public bool? show_filters_bar { get; set; } = null; - /// Toggle to show the title. Defaults to true. - public bool? show_title { get; set; } = null; - /// Text color for text tiles - public string? text_tile_text_color { get; set; } = null; - /// Background color for tiles - public string? tile_background_color { get; set; } = null; - /// Background color for text tiles - public string? text_tile_background_color { get; set; } = null; - /// Text color for tiles - public string? tile_text_color { get; set; } = null; - /// Color for titles - public string? title_color { get; set; } = null; - /// (DEPRECATED) Warning button color - public string? warn_button_color { get; set; } = null; - /// The text alignment of tile titles (New Dashboards) - public string? tile_title_alignment { get; set; } = null; - /// Toggles the tile shadow (not supported) - public bool? tile_shadow { get; set; } = null; - /// Toggle to show the dashboard last updated indicator. Defaults to true. - public bool? show_last_updated_indicator { get; set; } = null; - /// Toggle to show reload data icon/button. Defaults to true. - public bool? show_reload_data_icon { get; set; } = null; - /// Toggle to show the dashboard actions menu. Defaults to true. - public bool? show_dashboard_menu { get; set; } = null; - /// Toggle to show the filters icon/toggle. Defaults to true. - public bool? show_filters_toggle { get; set; } = null; - /// Toggle to show the dashboard header. Defaults to true. - public bool? show_dashboard_header { get; set; } = null; - /// Toggle to center the dashboard title. Defaults to false. - public bool? center_dashboard_title { get; set; } = null; - /// Dashboard title font size. - public string? dashboard_title_font_size { get; set; } = null; - /// Default box shadow. - public string? box_shadow { get; set; } = null; - /// Dashboard page margin top. - public string? page_margin_top { get; set; } = null; - /// Dashboard page margin bottom. - public string? page_margin_bottom { get; set; } = null; - /// Dashboard page margin left and right. - public string? page_margin_sides { get; set; } = null; - /// Toggle to show the explore page header. Defaults to true. - public bool? show_explore_header { get; set; } = null; - /// Toggle to show the explore page title. Defaults to true. - public bool? show_explore_title { get; set; } = null; - /// Toggle to show the explore page last run. Defaults to true. - public bool? show_explore_last_run { get; set; } = null; - /// Toggle to show the explore page timezone. Defaults to true. - public bool? show_explore_timezone { get; set; } = null; - /// Toggle to show the explore page run button. Defaults to true. - public bool? show_explore_run_stop_button { get; set; } = null; - /// Toggle to show the explore page actions button. Defaults to true. - public bool? show_explore_actions_button { get; set; } = null; - /// Toggle to show the look page header. Defaults to true. - public bool? show_look_header { get; set; } = null; - /// Toggle to show the look page title. Defaults to true. - public bool? show_look_title { get; set; } = null; - /// Toggle to show the look page last run. Defaults to true. - public bool? show_look_last_run { get; set; } = null; - /// Toggle to show the look page timezone Defaults to true. - public bool? show_look_timezone { get; set; } = null; - /// Toggle to show the look page run button. Defaults to true. - public bool? show_look_run_stop_button { get; set; } = null; - /// Toggle to show the look page actions button. Defaults to true. - public bool? show_look_actions_button { get; set; } = null; - /// Font size for tiles. - public string? tile_title_font_size { get; set; } = null; - /// The vertical gap/gutter size between tiles. - public string? column_gap_size { get; set; } = null; - /// The horizontal gap/gutter size between tiles. - public string? row_gap_size { get; set; } = null; - /// The border radius for tiles. - public string? border_radius { get; set; } = null; -} - -public class Timezone : SdkModel -{ - /// Timezone (read-only) - public string? value { get; set; } = null; - /// Description of timezone (read-only) - public string? label { get; set; } = null; - /// Timezone group (e.g Common, Other, etc.) (read-only) - public string? group { get; set; } = null; -} - -public class UpdateFolder : SdkModel -{ - /// Unique Name - public string? name { get; set; } = null; - /// Id of Parent. If the parent id is null, this is a root-level entry - public string? parent_id { get; set; } = null; -} - -public class UpdateSpace : SdkModel -{ - /// Unique Name - public string? name { get; set; } = null; - /// Id of Parent. If the parent id is null, this is a root-level entry - public string? parent_id { get; set; } = null; -} - -public class User : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// URL for the avatar image (may be generic) (read-only) - public Url? avatar_url { get; set; } = null; - /// URL for the avatar image (may be generic), does not specify size (read-only) - public Url? avatar_url_without_sizing { get; set; } = null; - /// API credentials (read-only) - public CredentialsApi3[]? credentials_api3 { get; set; } = null; - public CredentialsEmail? credentials_email { get; set; } - /// Embed credentials (read-only) - public CredentialsEmbed[]? credentials_embed { get; set; } = null; - public CredentialsGoogle? credentials_google { get; set; } - public CredentialsLDAP? credentials_ldap { get; set; } - public CredentialsLookerOpenid? credentials_looker_openid { get; set; } - public CredentialsOIDC? credentials_oidc { get; set; } - public CredentialsSaml? credentials_saml { get; set; } - public CredentialsTotp? credentials_totp { get; set; } - /// Full name for display (available only if both first_name and last_name are set) (read-only) - public string? display_name { get; set; } = null; - /// EMail address (read-only) - public string? email { get; set; } = null; - /// (Embed only) ID of user's group space based on the external_group_id optionally specified during embed user login (read-only) - public long? embed_group_space_id { get; set; } = null; - /// First name - public string? first_name { get; set; } = null; - /// Array of ids of the groups for this user (read-only) - public long[]? group_ids { get; set; } = null; - /// ID string for user's home space - public string? home_space_id { get; set; } = null; - /// ID string for user's home folder - public string? home_folder_id { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Account has been disabled - public bool? is_disabled { get; set; } = null; - /// Last name - public string? last_name { get; set; } = null; - /// User's preferred locale. User locale takes precedence over Looker's system-wide default locale. Locale determines language of display strings and date and numeric formatting in API responses. Locale string must be a 2 letter language code or a combination of language code and region code: 'en' or 'en-US', for example. - public string? locale { get; set; } = null; - /// Array of strings representing the Looker versions that this user has used (this only goes back as far as '3.54.0') (read-only) - public string[]? looker_versions { get; set; } = null; - /// User's dev workspace has been checked for presence of applicable production projects - public bool? models_dir_validated { get; set; } = null; - /// ID of user's personal space (read-only) - public long? personal_space_id { get; set; } = null; - /// ID of user's personal folder (read-only) - public long? personal_folder_id { get; set; } = null; - /// User is identified as an employee of Looker (read-only) - public bool? presumed_looker_employee { get; set; } = null; - /// Array of ids of the roles for this user (read-only) - public long[]? role_ids { get; set; } = null; - /// Active sessions (read-only) - public Session[]? sessions { get; set; } = null; - /// Per user dictionary of undocumented state information owned by the Looker UI. - public StringDictionary? ui_state { get; set; } = null; - /// User is identified as an employee of Looker who has been verified via Looker corporate authentication (read-only) - public bool? verified_looker_employee { get; set; } = null; - /// User's roles are managed by an external directory like SAML or LDAP and can not be changed directly. (read-only) - public bool? roles_externally_managed { get; set; } = null; - /// User can be directly assigned a role. (read-only) - public bool? allow_direct_roles { get; set; } = null; - /// User can be a direct member of a normal Looker group. (read-only) - public bool? allow_normal_group_membership { get; set; } = null; - /// User can inherit roles from a normal Looker group. (read-only) - public bool? allow_roles_from_normal_groups { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -public class UserAttribute : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Name of user attribute - public string? name { get; set; } = null; - /// Human-friendly label for user attribute - public string? label { get; set; } = null; - /// Type of user attribute ("string", "number", "datetime", "yesno", "zipcode") - public string? type { get; set; } = null; - /// Default value for when no value is set on the user - public string? default_value { get; set; } = null; - /// Attribute is a system default (read-only) - public bool? is_system { get; set; } = null; - /// Attribute is permanent and cannot be deleted (read-only) - public bool? is_permanent { get; set; } = null; - /// If true, users will not be able to view values of this attribute - public bool? value_is_hidden { get; set; } = null; - /// Non-admin users can see the values of their attributes and use them in filters - public bool? user_can_view { get; set; } = null; - /// Users can change the value of this attribute for themselves - public bool? user_can_edit { get; set; } = null; - /// Destinations to which a hidden attribute may be sent. Once set, cannot be edited. - public string? hidden_value_domain_whitelist { get; set; } = null; -} - -/// An array of user attribute types that are allowed to be used in filters on this field. Valid values are: "advanced_filter_string", "advanced_filter_number", "advanced_filter_datetime", "string", "number", "datetime", "relative_url", "yesno", "zipcode". (Enum defined in LookmlModelExploreField) -public enum UserAttributeFilterTypes -{ - [EnumMember(Value = "advanced_filter_string")] - advanced_filter_string, - [EnumMember(Value = "advanced_filter_number")] - advanced_filter_number, - [EnumMember(Value = "advanced_filter_datetime")] - advanced_filter_datetime, - [EnumMember(Value = "string")] - @string, - [EnumMember(Value = "number")] - number, - [EnumMember(Value = "datetime")] - datetime, - [EnumMember(Value = "relative_url")] - relative_url, - [EnumMember(Value = "yesno")] - yesno, - [EnumMember(Value = "zipcode")] - zipcode -} - -/// WARNING: no writeable properties found for POST, PUT, or PATCH -public class UserAttributeGroupValue : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id of this group-attribute relation (read-only) - public long? id { get; set; } = null; - /// Id of group (read-only) - public long? group_id { get; set; } = null; - /// Id of user attribute (read-only) - public long? user_attribute_id { get; set; } = null; - /// If true, the "value" field will be null, because the attribute settings block access to this value (read-only) - public bool? value_is_hidden { get; set; } = null; - /// Precedence for resolving value for user (read-only) - public long? rank { get; set; } = null; - /// Value of user attribute for group (read-only) - public string? value { get; set; } = null; -} - -public class UserAttributeWithValue : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Name of user attribute (read-only) - public string? name { get; set; } = null; - /// Human-friendly label for user attribute (read-only) - public string? label { get; set; } = null; - /// Precedence for setting value on user (lowest wins) (read-only) - public long? rank { get; set; } = null; - /// Value of attribute for user - public string? value { get; set; } = null; - /// Id of User (read-only) - public long? user_id { get; set; } = null; - /// Can the user set this value (read-only) - public bool? user_can_edit { get; set; } = null; - /// If true, the "value" field will be null, because the attribute settings block access to this value (read-only) - public bool? value_is_hidden { get; set; } = null; - /// Id of User Attribute (read-only) - public long? user_attribute_id { get; set; } = null; - /// How user got this value for this attribute (read-only) - public string? source { get; set; } = null; - /// If this user attribute is hidden, allowed list of destinations to which it may be sent. (read-only) - public string? hidden_value_domain_whitelist { get; set; } = null; -} - -public class UserIdOnly : SdkModel -{ - /// Unique Id (read-only) - public long? id { get; set; } = null; -} - -public class UserLoginLockout : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Hash of user's client id (read-only) - public string? key { get; set; } = null; - /// Authentication method for login failures (read-only) - public string? auth_type { get; set; } = null; - /// IP address of most recent failed attempt (read-only) - public string? ip { get; set; } = null; - /// User ID (read-only) - public long? user_id { get; set; } = null; - /// Remote ID of user if using LDAP (read-only) - public string? remote_id { get; set; } = null; - /// User's name (read-only) - public string? full_name { get; set; } = null; - /// Email address associated with the user's account (read-only) - public string? email { get; set; } = null; - /// Number of failures that triggered the lockout (read-only) - public long? fail_count { get; set; } = null; - /// Time when lockout was triggered (read-only) - public DateTime? lockout_at { get; set; } = null; -} - -public class UserPublic : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// First Name (read-only) - public string? first_name { get; set; } = null; - /// Last Name (read-only) - public string? last_name { get; set; } = null; - /// Full name for display (available only if both first_name and last_name are set) (read-only) - public string? display_name { get; set; } = null; - /// URL for the avatar image (may be generic) (read-only) - public Url? avatar_url { get; set; } = null; - /// Link to get this item (read-only) - public Url? url { get; set; } = null; -} - -public class ValidationError : SdkModel -{ - /// Error details (read-only) - public string message { get; set; } = ""; - /// Error detail array (read-only) - public ValidationErrorDetail[]? errors { get; set; } = null; - /// Documentation link (read-only) - public Url documentation_url { get; set; } = ""; -} - -public class ValidationErrorDetail : SdkModel -{ - /// Field with error (read-only) - public string? field { get; set; } = null; - /// Error code (read-only) - public string? code { get; set; } = null; - /// Error info message (read-only) - public string? message { get; set; } = null; - /// Documentation link (read-only) - public Url documentation_url { get; set; } = ""; -} - -/// The name of the starting day of the week. Valid values are: "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday". (Enum defined in LookmlModelExploreField) -public enum WeekStartDay -{ - [EnumMember(Value = "monday")] - monday, - [EnumMember(Value = "tuesday")] - tuesday, - [EnumMember(Value = "wednesday")] - wednesday, - [EnumMember(Value = "thursday")] - thursday, - [EnumMember(Value = "friday")] - friday, - [EnumMember(Value = "saturday")] - saturday, - [EnumMember(Value = "sunday")] - sunday -} - -public class WelcomeEmailTest : SdkModel -{ - /// The content that would be sent in the body of a custom welcome email - public string? content { get; set; } = null; - /// The subject that would be sent for the custom welcome email - public string? subject { get; set; } = null; - /// The header that would be sent in the body of a custom welcome email - public string? header { get; set; } = null; -} - -public class WhitelabelConfiguration : SdkModel -{ - /// Unique Id (read-only) - public long? id { get; set; } = null; - /// Customer logo image. Expected base64 encoded data (write-only) - public string? logo_file { get; set; } = null; - /// Logo image url (read-only) (read-only) - public string? logo_url { get; set; } = null; - /// Custom favicon image. Expected base64 encoded data (write-only) - public string? favicon_file { get; set; } = null; - /// Favicon image url (read-only) (read-only) - public string? favicon_url { get; set; } = null; - /// Default page title - public string? default_title { get; set; } = null; - /// Boolean to toggle showing help menus - public bool? show_help_menu { get; set; } = null; - /// Boolean to toggle showing docs - public bool? show_docs { get; set; } = null; - /// Boolean to toggle showing email subscription options. - public bool? show_email_sub_options { get; set; } = null; - /// Boolean to toggle mentions of Looker in emails - public bool? allow_looker_mentions { get; set; } = null; - /// Boolean to toggle links to Looker in emails - public bool? allow_looker_links { get; set; } = null; - /// Allow subject line and email heading customization in customized emails” - public bool? custom_welcome_email_advanced { get; set; } = null; - /// Remove the word Looker from appearing in the account setup page - public bool? setup_mentions { get; set; } = null; - /// Remove Looker logo from Alerts - public bool? alerts_logo { get; set; } = null; - /// Remove Looker links from Alerts - public bool? alerts_links { get; set; } = null; - /// Remove Looker mentions in home folder page when you don’t have any items saved - public bool? folders_mentions { get; set; } = null; -} - -public class Workspace : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// The unique id of this user workspace. Predefined workspace ids include "production" and "dev" (read-only) - public string? id { get; set; } = null; - /// The local state of each project in the workspace (read-only) - public Project[]? projects { get; set; } = null; -} - -/// Dynamic writeable type for ApiSession removes: -/// can, sudo_user_id -public class WriteApiSession : SdkModel -{ - /// The id of active workspace for this session - public string? workspace_id { get; set; } = null; -} - -/// Dynamic writeable type for BackupConfiguration removes: -/// can, url -public class WriteBackupConfiguration : SdkModel -{ - /// Type of backup: looker-s3 or custom-s3 - public string? type { get; set; } = null; - /// Name of bucket for custom-s3 backups - public string? custom_s3_bucket { get; set; } = null; - /// Name of region where the bucket is located - public string? custom_s3_bucket_region { get; set; } = null; - /// (Write-Only) AWS S3 key used for custom-s3 backups - public string? custom_s3_key { get; set; } = null; - /// (Write-Only) AWS S3 secret used for custom-s3 backups - public string? custom_s3_secret { get; set; } = null; -} - -/// Dynamic writeable type for ColorCollection removes: -/// id -public class WriteColorCollection : SdkModel -{ - /// Label of color collection - public string? label { get; set; } = null; - /// Array of categorical palette definitions - public DiscretePalette[]? categoricalPalettes { get; set; } = null; - /// Array of discrete palette definitions - public ContinuousPalette[]? sequentialPalettes { get; set; } = null; - /// Array of diverging palette definitions - public ContinuousPalette[]? divergingPalettes { get; set; } = null; -} - -/// Dynamic writeable type for ContentFavorite removes: -/// id, look_id, dashboard_id, look -public class WriteContentFavorite : SdkModel -{ - /// User Id which owns this ContentFavorite - public long? user_id { get; set; } = null; - /// Content Metadata Id associated with this ContentFavorite - public long? content_metadata_id { get; set; } = null; - /// - /// Dynamic writeable type for DashboardBase removes: - /// can, content_favorite_id, content_metadata_id, description, hidden, id, model, query_timezone, readonly, refresh_interval, refresh_interval_to_i, title, user_id, slug, preferred_viewer - /// - public WriteDashboardBase? dashboard { get; set; } -} - -/// Dynamic writeable type for ContentMeta removes: -/// can, id, name, parent_id, dashboard_id, look_id, folder_id, content_type, inheriting_id, slug, space_id -public class WriteContentMeta : SdkModel -{ - /// Whether content inherits its access levels from parent - public bool? inherits { get; set; } = null; -} - -/// Dynamic writeable type for CreateDashboardFilter removes: -/// id, field -public class WriteCreateDashboardFilter : SdkModel -{ - /// Id of Dashboard - public string dashboard_id { get; set; } = ""; - /// Name of filter - public string name { get; set; } = ""; - /// Title of filter - public string title { get; set; } = ""; - /// Type of filter: one of date, number, string, or field - public string type { get; set; } = ""; - /// Default value of filter - public string? default_value { get; set; } = null; - /// Model of filter (required if type = field) - public string? model { get; set; } = null; - /// Explore of filter (required if type = field) - public string? explore { get; set; } = null; - /// Dimension of filter (required if type = field) - public string? dimension { get; set; } = null; - /// Display order of this filter relative to other filters - public long? row { get; set; } = null; - /// Array of listeners for faceted filters - public string[]? listens_to_filters { get; set; } = null; - /// Whether the filter allows multiple filter values (deprecated in the latest version of dashboards) - public bool? allow_multiple_values { get; set; } = null; - /// Whether the filter requires a value to run the dashboard - public bool? required { get; set; } = null; - /// The visual configuration for this filter. Used to set up how the UI for this filter should appear. - public StringDictionary? ui_config { get; set; } = null; -} - -/// Dynamic writeable type for CreateQueryTask removes: -/// can -public class WriteCreateQueryTask : SdkModel -{ - /// Id of query to run - public long query_id { get; set; } - /// Desired async query result format. Valid values are: "inline_json", "json", "json_detail", "json_fe", "json_bi", "csv", "html", "md", "txt", "xlsx", "gsxml", "sql". - [JsonConverter(typeof(StringEnumConverter))] - public ResultFormat result_format { get; set; } - /// Source of query task - public string? source { get; set; } = null; - /// Create the task but defer execution - public bool? deferred { get; set; } = null; - /// Id of look associated with query. - public long? look_id { get; set; } = null; - /// Id of dashboard associated with query. - public string? dashboard_id { get; set; } = null; -} - -/// Dynamic writeable type for CredentialsEmail removes: -/// can, created_at, user_id, is_disabled, logged_in_at, password_reset_url, account_setup_url, type, url, user_url -public class WriteCredentialsEmail : SdkModel -{ - /// EMail address used for user login - public string? email { get; set; } = null; - /// Force the user to change their password upon their next login - public bool? forced_password_reset_at_next_login { get; set; } = null; -} - -/// Dynamic writeable type for CustomWelcomeEmail removes: -/// can -public class WriteCustomWelcomeEmail : SdkModel -{ - /// If true, custom email content will replace the default body of welcome emails - public bool? enabled { get; set; } = null; - /// The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. - public string? content { get; set; } = null; - /// The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. - public string? subject { get; set; } = null; - /// The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. - public string? header { get; set; } = null; -} - -/// Dynamic writeable type for Dashboard removes: -/// can, content_favorite_id, content_metadata_id, id, model, readonly, refresh_interval_to_i, user_id, created_at, dashboard_elements, dashboard_filters, dashboard_layouts, deleted_at, deleter_id, edit_uri, favorite_count, last_accessed_at, last_viewed_at, updated_at, last_updater_id, last_updater_name, user_name, view_count -public class WriteDashboard : SdkModel -{ - /// Description - public string? description { get; set; } = null; - /// Is Hidden - public bool? hidden { get; set; } = null; - /// Timezone in which the Dashboard will run by default. - public string? query_timezone { get; set; } = null; - /// Refresh Interval, as a time duration phrase like "2 hours 30 minutes". A number with no time units will be interpreted as whole seconds. - public string? refresh_interval { get; set; } = null; - /// - /// Dynamic writeable type for FolderBase removes: - /// id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - /// - public WriteFolderBase? folder { get; set; } - /// Dashboard Title - public string? title { get; set; } = null; - /// Content Metadata Slug - public string? slug { get; set; } = null; - /// The preferred route for viewing this dashboard (ie: dashboards or dashboards-next) - public string? preferred_viewer { get; set; } = null; - /// - /// Dynamic writeable type for SpaceBase removes: - /// id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - /// - public WriteSpaceBase? space { get; set; } - /// Enables alerts to keep in sync with dashboard filter changes - public bool? alert_sync_with_dashboard_filter_enabled { get; set; } = null; - /// Background color - public string? background_color { get; set; } = null; - /// Enables crossfiltering in dashboards - only available in dashboards-next (beta) - public bool? crossfilter_enabled { get; set; } = null; - /// Whether or not a dashboard is 'soft' deleted. - public bool? deleted { get; set; } = null; - /// Allow visualizations to be viewed in full screen mode - public bool? enable_viz_full_screen { get; set; } = null; - /// Sets the default state of the filters bar to collapsed or open - public bool? filters_bar_collapsed { get; set; } = null; - /// Sets the default state of the filters location to top(true) or right(false) - public bool? filters_location_top { get; set; } = null; - /// configuration option that governs how dashboard loading will happen. - public string? load_configuration { get; set; } = null; - /// Links this dashboard to a particular LookML dashboard such that calling a **sync** operation on that LookML dashboard will update this dashboard to match. - public string? lookml_link_id { get; set; } = null; - /// Show filters bar. **Security Note:** This property only affects the *cosmetic* appearance of the dashboard, not a user's ability to access data. Hiding the filters bar does **NOT** prevent users from changing filters by other means. For information on how to set up secure data access control policies, see [Control User Access to Data](https://cloud.google.com/looker/docs/r/api/control-access) - public bool? show_filters_bar { get; set; } = null; - /// Show title - public bool? show_title { get; set; } = null; - /// Id of Space - public string? space_id { get; set; } = null; - /// Id of folder - public string? folder_id { get; set; } = null; - /// Color of text on text tiles - public string? text_tile_text_color { get; set; } = null; - /// Tile background color - public string? tile_background_color { get; set; } = null; - /// Tile text color - public string? tile_text_color { get; set; } = null; - /// Title color - public string? title_color { get; set; } = null; - public DashboardAppearance? appearance { get; set; } -} - -/// Dynamic writeable type for DashboardBase removes: -/// can, content_favorite_id, content_metadata_id, description, hidden, id, model, query_timezone, readonly, refresh_interval, refresh_interval_to_i, title, user_id, slug, preferred_viewer -public class WriteDashboardBase : SdkModel -{ - /// - /// Dynamic writeable type for FolderBase removes: - /// id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - /// - public WriteFolderBase? folder { get; set; } - /// - /// Dynamic writeable type for SpaceBase removes: - /// id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - /// - public WriteSpaceBase? space { get; set; } -} - -/// Dynamic writeable type for DashboardElement removes: -/// can, body_text_as_html, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html -public class WriteDashboardElement : SdkModel -{ - /// Text tile body text - public string? body_text { get; set; } = null; - /// Id of Dashboard - public string? dashboard_id { get; set; } = null; - /// - /// Dynamic writeable type for LookWithQuery removes: - /// 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, user, url - /// - public WriteLookWithQuery? look { get; set; } - /// Id Of Look - public string? look_id { get; set; } = null; - /// ID of merge result - public string? merge_result_id { get; set; } = null; - /// Note Display - public string? note_display { get; set; } = null; - /// Note State - public string? note_state { get; set; } = null; - /// Note Text - public string? note_text { get; set; } = null; - /// - /// Dynamic writeable type for Query removes: - /// can, id, slug, share_url, expanded_share_url, url, has_table_calculations - /// - public WriteQuery? query { get; set; } - /// Id Of Query - public long? query_id { get; set; } = null; - /// Refresh Interval - public string? refresh_interval { get; set; } = null; - /// - /// Dynamic writeable type for ResultMakerWithIdVisConfigAndDynamicFields removes: - /// id, dynamic_fields, filterables, sorts, merge_result_id, total, query_id, sql_query_id, vis_config - /// - public WriteResultMakerWithIdVisConfigAndDynamicFields? result_maker { get; set; } - /// ID of the ResultMakerLookup entry. - public long? result_maker_id { get; set; } = null; - /// Text tile subtitle text - public string? subtitle_text { get; set; } = null; - /// Title of dashboard element - public string? title { get; set; } = null; - /// Whether title is hidden - public bool? title_hidden { get; set; } = null; - /// Text tile title - public string? title_text { get; set; } = null; - /// Type - public string? type { get; set; } = null; - /// JSON with all the properties required for rich editor and buttons elements - public string? rich_content_json { get; set; } = null; -} - -/// Dynamic writeable type for DashboardFilter removes: -/// can, id, dashboard_id, field -public class WriteDashboardFilter : SdkModel -{ - /// Name of filter - public string? name { get; set; } = null; - /// Title of filter - public string? title { get; set; } = null; - /// Type of filter: one of date, number, string, or field - public string? type { get; set; } = null; - /// Default value of filter - public string? default_value { get; set; } = null; - /// Model of filter (required if type = field) - public string? model { get; set; } = null; - /// Explore of filter (required if type = field) - public string? explore { get; set; } = null; - /// Dimension of filter (required if type = field) - public string? dimension { get; set; } = null; - /// Display order of this filter relative to other filters - public long? row { get; set; } = null; - /// Array of listeners for faceted filters - public string[]? listens_to_filters { get; set; } = null; - /// Whether the filter allows multiple filter values (deprecated in the latest version of dashboards) - public bool? allow_multiple_values { get; set; } = null; - /// Whether the filter requires a value to run the dashboard - public bool? required { get; set; } = null; - /// The visual configuration for this filter. Used to set up how the UI for this filter should appear. - public StringDictionary? ui_config { get; set; } = null; -} - -/// Dynamic writeable type for DashboardLayout removes: -/// can, id, deleted, dashboard_title, dashboard_layout_components -public class WriteDashboardLayout : SdkModel -{ - /// Id of Dashboard - public string? dashboard_id { get; set; } = null; - /// Type - public string? type { get; set; } = null; - /// Is Active - public bool? active { get; set; } = null; - /// Column Width - public long? column_width { get; set; } = null; - /// Width - public long? width { get; set; } = null; -} - -/// Dynamic writeable type for DashboardLayoutComponent removes: -/// can, id, deleted, element_title, element_title_hidden, vis_type -public class WriteDashboardLayoutComponent : SdkModel -{ - /// Id of Dashboard Layout - public string? dashboard_layout_id { get; set; } = null; - /// Id Of Dashboard Element - public string? dashboard_element_id { get; set; } = null; - /// Row - public long? row { get; set; } = null; - /// Column - public long? column { get; set; } = null; - /// Width - public long? width { get; set; } = null; - /// Height - public long? height { get; set; } = null; -} - -/// Dynamic writeable type for Datagroup removes: -/// can, created_at, id, model_name, name, trigger_check_at, trigger_error, trigger_value -public class WriteDatagroup : SdkModel -{ - /// UNIX timestamp before which cache entries are considered stale. Cannot be in the future. - public long? stale_before { get; set; } = null; - /// UNIX timestamp at which this entry became triggered. Cannot be in the future. - public long? triggered_at { get; set; } = null; -} - -/// Dynamic writeable type for DBConnection removes: -/// can, dialect, snippets, pdts_enabled, uses_oauth, supports_data_studio_link, created_at, user_id, example, last_regen_at, last_reap_at, managed -public class WriteDBConnection : SdkModel -{ - /// Name of the connection. Also used as the unique identifier - public string? name { get; set; } = null; - /// Host name/address of server; or the string 'localhost' in case of a connection over an SSH tunnel. - public string? host { get; set; } = null; - /// Port number on server. If the connection is over an SSH tunnel, then the local port associated with the SSH tunnel. - public string? port { get; set; } = null; - /// Username for server authentication - public string? username { get; set; } = null; - /// (Write-Only) Password for server authentication - public string? password { get; set; } = null; - /// (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). - public string? certificate { get; set; } = null; - /// (Write-Only) Certificate keyfile type - .json or .p12 - public string? file_type { get; set; } = null; - /// Database name - public string? database { get; set; } = null; - /// Time zone of database - public string? db_timezone { get; set; } = null; - /// Timezone to use in queries - public string? query_timezone { get; set; } = null; - /// Schema name - public string? schema { get; set; } = null; - /// Maximum number of concurrent connection to use - public long? max_connections { get; set; } = null; - /// Maximum size of query in GBs (BigQuery only, can be a user_attribute name) - public string? max_billing_gigabytes { get; set; } = null; - /// Use SSL/TLS when connecting to server - public bool? ssl { get; set; } = null; - /// Verify the SSL - public bool? verify_ssl { get; set; } = null; - /// Name of temporary database (if used) - public string? tmp_db_name { get; set; } = null; - /// Additional params to add to JDBC connection string - public string? jdbc_additional_params { get; set; } = null; - /// Connection Pool Timeout, in seconds - public long? pool_timeout { get; set; } = null; - /// (Read/Write) SQL Dialect name - public string? dialect_name { get; set; } = null; - /// (Limited access feature) Are per user db credentials enabled. Enabling will remove previously set username and password - public bool? user_db_credentials { get; set; } = null; - /// Fields whose values map to user attribute names - public string[]? user_attribute_fields { get; set; } = null; - /// Cron string specifying when maintenance such as PDT trigger checks and drops should be performed - public string? maintenance_cron { get; set; } = null; - /// Precache tables in the SQL Runner - public bool? sql_runner_precache_tables { get; set; } = null; - /// Fetch Information Schema For SQL Writing - public bool? sql_writing_with_info_schema { get; set; } = null; - /// SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature - public string? after_connect_statements { get; set; } = null; - /// - /// Dynamic writeable type for DBConnectionOverride removes: - /// has_password - /// - public WriteDBConnectionOverride? pdt_context_override { get; set; } - /// Enable Transparent Network Substrate (TNS) connections - public bool? uses_tns { get; set; } = null; -} - -/// Dynamic writeable type for DBConnectionOverride removes: -/// has_password -public class WriteDBConnectionOverride : SdkModel -{ - /// Context in which to override (`pdt` is the only allowed value) - public string? context { get; set; } = null; - /// Host name/address of server - public string? host { get; set; } = null; - /// Port number on server - public string? port { get; set; } = null; - /// Username for server authentication - public string? username { get; set; } = null; - /// (Write-Only) Password for server authentication - public string? password { get; set; } = null; - /// (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). - public string? certificate { get; set; } = null; - /// (Write-Only) Certificate keyfile type - .json or .p12 - public string? file_type { get; set; } = null; - /// Database name - public string? database { get; set; } = null; - /// Schema name - public string? schema { get; set; } = null; - /// Additional params to add to JDBC connection string - public string? jdbc_additional_params { get; set; } = null; - /// SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature - public string? after_connect_statements { get; set; } = null; -} - -/// Dynamic writeable type for FolderBase removes: -/// id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can -public class WriteFolderBase : SdkModel -{ - /// Unique Name - public string name { get; set; } = ""; - /// Id of Parent. If the parent id is null, this is a root-level entry - public string? parent_id { get; set; } = null; -} - -/// Dynamic writeable type for GitBranch removes: -/// can, remote, remote_name, error, message, owner_name, readonly, personal, is_local, is_remote, is_production, ahead_count, behind_count, commit_at, remote_ref -public class WriteGitBranch : SdkModel -{ - /// The short name on the local. Updating `name` results in `git checkout ` - public string? name { get; set; } = null; - /// The resolved ref of this branch. Updating `ref` results in `git reset --hard ``. - public string? @ref { get; set; } = null; -} - -/// Dynamic writeable type for Group removes: -/// can, contains_current_user, external_group_id, externally_managed, id, include_by_default, user_count -public class WriteGroup : SdkModel -{ - /// Group can be used in content access controls - public bool? can_add_to_content_metadata { get; set; } = null; - /// Name of group - public string? name { get; set; } = null; -} - -/// Dynamic writeable type for Homepage removes: -/// can, content_metadata_id, created_at, homepage_sections, id, updated_at, user_id, primary_homepage -public class WriteHomepage : SdkModel -{ - /// Date of homepage deletion - public DateTime? deleted_at { get; set; } = null; - /// Description of the homepage - public string? description { get; set; } = null; - /// ids of the homepage sections in the order they should be displayed - public long[]? section_order { get; set; } = null; - /// Title of the homepage - public string? title { get; set; } = null; -} - -/// Dynamic writeable type for HomepageItem removes: -/// can, content_created_by, content_favorite_id, content_metadata_id, content_updated_at, custom_image_url, description, favorite_count, id, image_url, location, section_fetch_time, title, url, view_count -public class WriteHomepageItem : SdkModel -{ - /// Custom description entered by the user, if present - public string? custom_description { get; set; } = null; - /// (Write-Only) base64 encoded image data - public string? custom_image_data_base64 { get; set; } = null; - /// Custom title entered by the user, if present - public string? custom_title { get; set; } = null; - /// Custom url entered by the user, if present - public string? custom_url { get; set; } = null; - /// Dashboard to base this item on - public long? dashboard_id { get; set; } = null; - /// Associated Homepage Section - public long? homepage_section_id { get; set; } = null; - /// Look to base this item on - public long? look_id { get; set; } = null; - /// LookML Dashboard to base this item on - public string? lookml_dashboard_id { get; set; } = null; - /// An arbitrary integer representing the sort order within the section - public long? order { get; set; } = null; - /// Whether the custom description should be used instead of the content description, if the item is associated with content - public bool? use_custom_description { get; set; } = null; - /// Whether the custom image should be used instead of the content image, if the item is associated with content - public bool? use_custom_image { get; set; } = null; - /// Whether the custom title should be used instead of the content title, if the item is associated with content - public bool? use_custom_title { get; set; } = null; - /// Whether the custom url should be used instead of the content url, if the item is associated with content - public bool? use_custom_url { get; set; } = null; -} - -/// Dynamic writeable type for HomepageSection removes: -/// can, created_at, detail_url, homepage_items, id, is_header, updated_at, visible_item_order -public class WriteHomepageSection : SdkModel -{ - /// Time at which this section was deleted. - public DateTime? deleted_at { get; set; } = null; - /// Id reference to parent homepage - public long? homepage_id { get; set; } = null; - /// ids of the homepage items in the order they should be displayed - public long[]? item_order { get; set; } = null; - /// Name of row - public string? title { get; set; } = null; - /// Description of the content found in this section. - public string? description { get; set; } = null; -} - -/// Dynamic writeable type for Integration removes: -/// can, id, integration_hub_id, label, description, supported_formats, supported_action_types, supported_formattings, supported_visualization_formattings, supported_download_settings, icon_url, uses_oauth, required_fields, privacy_link, delegate_oauth -public class WriteIntegration : SdkModel -{ - /// Whether the integration is available to users. - public bool? enabled { get; set; } = null; - /// Array of params for the integration. - public IntegrationParam[]? @params { get; set; } = null; - /// Whether the integration is available to users. - public long[]? installed_delegate_oauth_targets { get; set; } = null; -} - -/// Dynamic writeable type for IntegrationHub removes: -/// can, id, label, official, fetch_error_message, has_authorization_token, legal_agreement_signed, legal_agreement_required, legal_agreement_text -public class WriteIntegrationHub : SdkModel -{ - /// URL of the hub. - public string? url { get; set; } = null; - /// (Write-Only) An authorization key that will be sent to the integration hub on every request. - public string? authorization_token { get; set; } = null; -} - -/// Dynamic writeable type for InternalHelpResources removes: -/// can -public class WriteInternalHelpResources : SdkModel -{ - /// If true and internal help resources content is not blank then the link for internal help resources will be shown in the help menu and the content displayed within Looker - public bool? enabled { get; set; } = null; -} - -/// Dynamic writeable type for InternalHelpResourcesContent removes: -/// can -public class WriteInternalHelpResourcesContent : SdkModel -{ - /// Text to display in the help menu item which will display the internal help resources - public string? organization_name { get; set; } = null; - /// Content to be displayed in the internal help resources page/modal - public string? markdown_content { get; set; } = null; -} - -/// Dynamic writeable type for LDAPConfig removes: -/// can, default_new_user_groups, default_new_user_roles, groups, has_auth_password, modified_at, modified_by, user_attributes, url -public class WriteLDAPConfig : SdkModel -{ - /// Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. - public bool? alternate_email_login_allowed { get; set; } = null; - /// (Write-Only) Password for the LDAP account used to access the LDAP server - public string? auth_password { get; set; } = null; - /// Users will not be allowed to login at all unless a role for them is found in LDAP if set to true - public bool? auth_requires_role { get; set; } = null; - /// Distinguished name of LDAP account used to access the LDAP server - public string? auth_username { get; set; } = null; - /// LDAP server hostname - public string? connection_host { get; set; } = null; - /// LDAP host port - public string? connection_port { get; set; } = null; - /// Use Transport Layer Security - public bool? connection_tls { get; set; } = null; - /// Do not verify peer when using TLS - public bool? connection_tls_no_verify { get; set; } = null; - /// (Write-Only) Array of ids of groups that will be applied to new users the first time they login via LDAP - public long[]? default_new_user_group_ids { get; set; } = null; - /// (Write-Only) Array of ids of roles that will be applied to new users the first time they login via LDAP - public long[]? default_new_user_role_ids { get; set; } = null; - /// Enable/Disable LDAP authentication for the server - public bool? enabled { get; set; } = null; - /// Don't attempt to do LDAP search result paging (RFC 2696) even if the LDAP server claims to support it. - public bool? force_no_page { get; set; } = null; - /// Base dn for finding groups in LDAP searches - public string? groups_base_dn { get; set; } = null; - /// Identifier for a strategy for how Looker will search for groups in the LDAP server - public string? groups_finder_type { get; set; } = null; - /// LDAP Group attribute that signifies the members of the groups. Most commonly 'member' - public string? groups_member_attribute { get; set; } = null; - /// Optional comma-separated list of supported LDAP objectclass for groups when doing groups searches - public string? groups_objectclasses { get; set; } = null; - /// LDAP Group attribute that signifies the user in a group. Most commonly 'dn' - public string? groups_user_attribute { get; set; } = null; - /// (Read/Write) Array of mappings between LDAP Groups and arrays of Looker Role ids - public LDAPGroupWrite[]? groups_with_role_ids { get; set; } = null; - /// Merge first-time ldap login to existing user account by email addresses. When a user logs in for the first time via ldap this option will connect this user into their existing account by finding the account with a matching email address. Otherwise a new user account will be created for the user. - public bool? merge_new_users_by_email { get; set; } = null; - /// Set user roles in Looker based on groups from LDAP - public bool? set_roles_from_groups { get; set; } = null; - /// (Write-Only) Test LDAP user password. For ldap tests only. - public string? test_ldap_password { get; set; } = null; - /// (Write-Only) Test LDAP user login id. For ldap tests only. - public string? test_ldap_user { get; set; } = null; - /// Name of user record attributes used to indicate email address field - public string? user_attribute_map_email { get; set; } = null; - /// Name of user record attributes used to indicate first name - public string? user_attribute_map_first_name { get; set; } = null; - /// Name of user record attributes used to indicate last name - public string? user_attribute_map_last_name { get; set; } = null; - /// Name of user record attributes used to indicate unique record id - public string? user_attribute_map_ldap_id { get; set; } = null; - /// (Read/Write) Array of mappings between LDAP User Attributes and arrays of Looker User Attribute ids - public LDAPUserAttributeWrite[]? user_attributes_with_ids { get; set; } = null; - /// Distinguished name of LDAP node used as the base for user searches - public string? user_bind_base_dn { get; set; } = null; - /// (Optional) Custom RFC-2254 filter clause for use in finding user during login. Combined via 'and' with the other generated filter clauses. - public string? user_custom_filter { get; set; } = null; - /// Name(s) of user record attributes used for matching user login id (comma separated list) - public string? user_id_attribute_names { get; set; } = null; - /// (Optional) Name of user record objectclass used for finding user during login id - public string? user_objectclass { get; set; } = null; - /// Allow LDAP auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. - public bool? allow_normal_group_membership { get; set; } = null; - /// LDAP auth'd users will be able to inherit roles from non-reflected Looker groups. - public bool? allow_roles_from_normal_groups { get; set; } = null; - /// Allows roles to be directly assigned to LDAP auth'd users. - public bool? allow_direct_roles { get; set; } = null; -} - -/// Dynamic writeable type for LegacyFeature removes: -/// can, id, name, description, enabled, disallowed_as_of_version, disable_on_upgrade_to_version, end_of_life_version, documentation_url, approximate_disable_date, approximate_end_of_life_date, has_disabled_on_upgrade -public class WriteLegacyFeature : SdkModel -{ - /// Whether this feature has been enabled by a user - public bool? enabled_locally { get; set; } = null; -} - -/// Dynamic writeable type for LookmlModel removes: -/// can, explores, has_content, label -public class WriteLookmlModel : SdkModel -{ - /// Array of names of connections this model is allowed to use - public string[]? allowed_db_connection_names { get; set; } = null; - /// Name of the model. Also used as the unique identifier - public string? name { get; set; } = null; - /// Name of project containing the model - public string? project_name { get; set; } = null; - /// Is this model allowed to use all current and future connections - public bool? unlimited_db_connections { get; set; } = null; -} - -/// Dynamic writeable type for LookWithQuery removes: -/// 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, user, url -public class WriteLookWithQuery : SdkModel -{ - /// Look Title - public string? title { get; set; } = null; - /// Whether or not a look is 'soft' deleted. - public bool? deleted { get; set; } = null; - /// Description - public string? description { get; set; } = null; - /// auto-run query when Look viewed - public bool? is_run_on_load { get; set; } = null; - /// Is Public - public bool? @public { get; set; } = null; - /// Query Id - public long? query_id { get; set; } = null; - /// - /// Dynamic writeable type for FolderBase removes: - /// id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - /// - public WriteFolderBase? folder { get; set; } - /// Folder Id - public string? folder_id { get; set; } = null; - /// User Id - public long? user_id { get; set; } = null; - /// Space Id - public string? space_id { get; set; } = null; - /// - /// Dynamic writeable type for SpaceBase removes: - /// id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can - /// - public WriteSpaceBase? space { get; set; } - /// - /// Dynamic writeable type for Query removes: - /// can, id, slug, share_url, expanded_share_url, url, has_table_calculations - /// - public WriteQuery? query { get; set; } -} - -/// Dynamic writeable type for MergeQuery removes: -/// can, id, result_maker_id -public class WriteMergeQuery : SdkModel -{ - /// Column Limit - public string? column_limit { get; set; } = null; - /// Dynamic Fields - public string? dynamic_fields { get; set; } = null; - /// Pivots - public string[]? pivots { get; set; } = null; - /// Sorts - public string[]? sorts { get; set; } = null; - /// Source Queries defining the results to be merged. - public MergeQuerySourceQuery[]? source_queries { get; set; } = null; - /// Total - public bool? total { get; set; } = null; - /// Visualization Config - public StringDictionary? vis_config { get; set; } = null; -} - -/// Dynamic writeable type for ModelSet removes: -/// can, all_access, built_in, id, url -public class WriteModelSet : SdkModel -{ - public string[]? models { get; set; } = null; - /// Name of ModelSet - public string? name { get; set; } = null; -} - -/// Dynamic writeable type for OIDCConfig removes: -/// can, default_new_user_groups, default_new_user_roles, groups, modified_at, modified_by, test_slug, user_attributes, url -public class WriteOIDCConfig : SdkModel -{ - /// Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. - public bool? alternate_email_login_allowed { get; set; } = null; - /// OpenID Provider Audience - public string? audience { get; set; } = null; - /// Users will not be allowed to login at all unless a role for them is found in OIDC if set to true - public bool? auth_requires_role { get; set; } = null; - /// OpenID Provider Authorization Url - public Url? authorization_endpoint { get; set; } = null; - /// (Write-Only) Array of ids of groups that will be applied to new users the first time they login via OIDC - public long[]? default_new_user_group_ids { get; set; } = null; - /// (Write-Only) Array of ids of roles that will be applied to new users the first time they login via OIDC - public long[]? default_new_user_role_ids { get; set; } = null; - /// Enable/Disable OIDC authentication for the server - public bool? enabled { get; set; } = null; - /// Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values' - public string? groups_attribute { get; set; } = null; - /// (Read/Write) Array of mappings between OIDC Groups and arrays of Looker Role ids - public OIDCGroupWrite[]? groups_with_role_ids { get; set; } = null; - /// Relying Party Identifier (provided by OpenID Provider) - public string? identifier { get; set; } = null; - /// OpenID Provider Issuer - public string? issuer { get; set; } = null; - /// Merge first-time oidc login to existing user account by email addresses. When a user logs in for the first time via oidc this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google' - public string? new_user_migration_types { get; set; } = null; - /// Array of scopes to request. - public string[]? scopes { get; set; } = null; - /// (Write-Only) Relying Party Secret (provided by OpenID Provider) - public string? secret { get; set; } = null; - /// Set user roles in Looker based on groups from OIDC - public bool? set_roles_from_groups { get; set; } = null; - /// OpenID Provider Token Url - public string? token_endpoint { get; set; } = null; - /// Name of user record attributes used to indicate email address field - public string? user_attribute_map_email { get; set; } = null; - /// Name of user record attributes used to indicate first name - public string? user_attribute_map_first_name { get; set; } = null; - /// Name of user record attributes used to indicate last name - public string? user_attribute_map_last_name { get; set; } = null; - /// (Read/Write) Array of mappings between OIDC User Attributes and arrays of Looker User Attribute ids - public OIDCUserAttributeWrite[]? user_attributes_with_ids { get; set; } = null; - /// OpenID Provider User Information Url - public Url? userinfo_endpoint { get; set; } = null; - /// Allow OIDC auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. - public bool? allow_normal_group_membership { get; set; } = null; - /// OIDC auth'd users will inherit roles from non-reflected Looker groups. - public bool? allow_roles_from_normal_groups { get; set; } = null; - /// Allows roles to be directly assigned to OIDC auth'd users. - public bool? allow_direct_roles { get; set; } = null; -} - -/// Dynamic writeable type for PasswordConfig removes: -/// can -public class WritePasswordConfig : SdkModel -{ - /// Minimum number of characters required for a new password. Must be between 7 and 100 - public long? min_length { get; set; } = null; - /// Require at least one numeric character - public bool? require_numeric { get; set; } = null; - /// Require at least one uppercase and one lowercase letter - public bool? require_upperlower { get; set; } = null; - /// Require at least one special character - public bool? require_special { get; set; } = null; -} - -/// Dynamic writeable type for PermissionSet removes: -/// can, all_access, built_in, id, url -public class WritePermissionSet : SdkModel -{ - /// Name of PermissionSet - public string? name { get; set; } = null; - public string[]? permissions { get; set; } = null; -} - -/// Dynamic writeable type for Project removes: -/// can, id, uses_git, is_example -public class WriteProject : SdkModel -{ - /// Project display name - public string? name { get; set; } = null; - /// Git remote repository url - public string? git_remote_url { get; set; } = null; - /// Git username for HTTPS authentication. (For production only, if using user attributes.) - public string? git_username { get; set; } = null; - /// (Write-Only) Git password for HTTPS authentication. (For production only, if using user attributes.) - public string? git_password { get; set; } = null; - /// Git production branch name. Defaults to master. Supported only in Looker 21.0 and higher. - public string? git_production_branch_name { get; set; } = null; - /// If true, the project uses a git cookie for authentication. - public bool? use_git_cookie_auth { get; set; } = null; - /// User attribute name for username in per-user HTTPS authentication. - public string? git_username_user_attribute { get; set; } = null; - /// User attribute name for password in per-user HTTPS authentication. - public string? git_password_user_attribute { get; set; } = null; - /// Name of the git service provider - public string? git_service_name { get; set; } = null; - /// Port that HTTP(S) application server is running on (for PRs, file browsing, etc.) - public long? git_application_server_http_port { get; set; } = null; - /// Scheme that is running on application server (for PRs, file browsing, etc.) - public string? git_application_server_http_scheme { get; set; } = null; - /// (Write-Only) Optional secret token with which to authenticate requests to the webhook deploy endpoint. If not set, endpoint is unauthenticated. - public string? deploy_secret { get; set; } = null; - /// (Write-Only) When true, unsets the deploy secret to allow unauthenticated access to the webhook deploy endpoint. - public bool? unset_deploy_secret { get; set; } = null; - /// The git pull request policy for this project. Valid values are: "off", "links", "recommended", "required". - [JsonConverter(typeof(StringEnumConverter))] - public PullRequestMode? pull_request_mode { get; set; } - /// Validation policy: If true, the project must pass validation checks before project changes can be committed to the git repository - public bool? validation_required { get; set; } = null; - /// If true, advanced git release management is enabled for this project - public bool? git_release_mgmt_enabled { get; set; } = null; - /// Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false). - public bool? allow_warnings { get; set; } = null; -} - -/// Dynamic writeable type for Query removes: -/// can, id, slug, share_url, expanded_share_url, url, has_table_calculations -public class WriteQuery : SdkModel -{ - /// Model - public string model { get; set; } = ""; - /// Explore Name - public string view { get; set; } = ""; - /// Fields - public string[]? fields { get; set; } = null; - /// Pivots - public string[]? pivots { get; set; } = null; - /// Fill Fields - public string[]? fill_fields { get; set; } = null; - /// Filters - public StringDictionary? filters { get; set; } = null; - /// Filter Expression - public string? filter_expression { get; set; } = null; - /// Sorting for the query results. Use the format `["view.field", ...]` to sort on fields in ascending order. Use the format `["view.field desc", ...]` to sort on fields in descending order. Use `["__UNSORTED__"]` (2 underscores before and after) to disable sorting entirely. Empty sorts `[]` will trigger a default sort. - public string[]? sorts { get; set; } = null; - /// Limit - public string? limit { get; set; } = null; - /// Column Limit - public string? column_limit { get; set; } = null; - /// Total - public bool? total { get; set; } = null; - /// Raw Total - public string? row_total { get; set; } = null; - /// Fields on which to run subtotals - public string[]? subtotals { get; set; } = null; - /// Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. - public StringDictionary? vis_config { get; set; } = null; - /// The filter_config represents the state of the filter UI on the explore page for a given query. When running a query via the Looker UI, this parameter takes precedence over "filters". When creating a query or modifying an existing query, "filter_config" should be set to null. Setting it to any other value could cause unexpected filtering behavior. The format should be considered opaque. - public StringDictionary? filter_config { get; set; } = null; - /// Visible UI Sections - public string? visible_ui_sections { get; set; } = null; - /// Dynamic Fields - public string? dynamic_fields { get; set; } = null; - /// Client Id: used to generate shortened explore URLs. If set by client, must be a unique 22 character alphanumeric string. Otherwise one will be generated. - public string? client_id { get; set; } = null; - /// Query Timezone - public string? query_timezone { get; set; } = null; - /// (DEPRECATED) Runtime (Deprecated) - public double? runtime { get; set; } = null; -} - -/// Dynamic writeable type for RepositoryCredential removes: -/// can, id, root_project_id, remote_url, is_configured -public class WriteRepositoryCredential : SdkModel -{ - /// Git username for HTTPS authentication. - public string? git_username { get; set; } = null; - /// (Write-Only) Git password for HTTPS authentication. - public string? git_password { get; set; } = null; - /// Public deploy key for SSH authentication. - public string? ssh_public_key { get; set; } = null; -} - -/// Dynamic writeable type for ResultMakerWithIdVisConfigAndDynamicFields removes: -/// id, dynamic_fields, filterables, sorts, merge_result_id, total, query_id, sql_query_id, vis_config -public class WriteResultMakerWithIdVisConfigAndDynamicFields : SdkModel -{ - /// - /// Dynamic writeable type for Query removes: - /// can, id, slug, share_url, expanded_share_url, url, has_table_calculations - /// - public WriteQuery? query { get; set; } -} - -/// Dynamic writeable type for Role removes: -/// can, id, url, users_url -public class WriteRole : SdkModel -{ - /// Name of Role - public string? name { get; set; } = null; - /// - /// Dynamic writeable type for PermissionSet removes: - /// can, all_access, built_in, id, url - /// - public WritePermissionSet? permission_set { get; set; } - /// (Write-Only) Id of permission set - public long? permission_set_id { get; set; } = null; - /// - /// Dynamic writeable type for ModelSet removes: - /// can, all_access, built_in, id, url - /// - public WriteModelSet? model_set { get; set; } - /// (Write-Only) Id of model set - public long? model_set_id { get; set; } = null; -} - -/// Dynamic writeable type for SamlConfig removes: -/// can, test_slug, modified_at, modified_by, default_new_user_roles, default_new_user_groups, groups, user_attributes, url -public class WriteSamlConfig : SdkModel -{ - /// Enable/Disable Saml authentication for the server - public bool? enabled { get; set; } = null; - /// Identity Provider Certificate (provided by IdP) - public string? idp_cert { get; set; } = null; - /// Identity Provider Url (provided by IdP) - public string? idp_url { get; set; } = null; - /// Identity Provider Issuer (provided by IdP) - public string? idp_issuer { get; set; } = null; - /// Identity Provider Audience (set in IdP config). Optional in Looker. Set this only if you want Looker to validate the audience value returned by the IdP. - public string? idp_audience { get; set; } = null; - /// Count of seconds of clock drift to allow when validating timestamps of assertions. - public long? allowed_clock_drift { get; set; } = null; - /// Name of user record attributes used to indicate email address field - public string? user_attribute_map_email { get; set; } = null; - /// Name of user record attributes used to indicate first name - public string? user_attribute_map_first_name { get; set; } = null; - /// Name of user record attributes used to indicate last name - public string? user_attribute_map_last_name { get; set; } = null; - /// Merge first-time saml login to existing user account by email addresses. When a user logs in for the first time via saml this option will connect this user into their existing account by finding the account with a matching email address by testing the given types of credentials for existing users. Otherwise a new user account will be created for the user. This list (if provided) must be a comma separated list of string like 'email,ldap,google' - public string? new_user_migration_types { get; set; } = null; - /// Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. - public bool? alternate_email_login_allowed { get; set; } = null; - /// (Write-Only) Array of ids of roles that will be applied to new users the first time they login via Saml - public long[]? default_new_user_role_ids { get; set; } = null; - /// (Write-Only) Array of ids of groups that will be applied to new users the first time they login via Saml - public long[]? default_new_user_group_ids { get; set; } = null; - /// Set user roles in Looker based on groups from Saml - public bool? set_roles_from_groups { get; set; } = null; - /// Name of user record attributes used to indicate groups. Used when 'groups_finder_type' is set to 'grouped_attribute_values' - public string? groups_attribute { get; set; } = null; - /// (Read/Write) Array of mappings between Saml Groups and arrays of Looker Role ids - public SamlGroupWrite[]? groups_with_role_ids { get; set; } = null; - /// Users will not be allowed to login at all unless a role for them is found in Saml if set to true - public bool? auth_requires_role { get; set; } = null; - /// (Read/Write) Array of mappings between Saml User Attributes and arrays of Looker User Attribute ids - public SamlUserAttributeWrite[]? user_attributes_with_ids { get; set; } = null; - /// Identifier for a strategy for how Looker will find groups in the SAML response. One of ['grouped_attribute_values', 'individual_attributes'] - public string? groups_finder_type { get; set; } = null; - /// Value for group attribute used to indicate membership. Used when 'groups_finder_type' is set to 'individual_attributes' - public string? groups_member_value { get; set; } = null; - /// Bypass the login page when user authentication is required. Redirect to IdP immediately instead. - public bool? bypass_login_page { get; set; } = null; - /// Allow SAML auth'd users to be members of non-reflected Looker groups. If 'false', user will be removed from non-reflected groups on login. - public bool? allow_normal_group_membership { get; set; } = null; - /// SAML auth'd users will inherit roles from non-reflected Looker groups. - public bool? allow_roles_from_normal_groups { get; set; } = null; - /// Allows roles to be directly assigned to SAML auth'd users. - public bool? allow_direct_roles { get; set; } = null; -} - -/// Dynamic writeable type for ScheduledPlan removes: -/// id, created_at, updated_at, title, user, next_run_at, last_run_at, can -public class WriteScheduledPlan : SdkModel -{ - /// Name of this scheduled plan - public string? name { get; set; } = null; - /// User Id which owns this scheduled plan - public long? user_id { get; set; } = null; - /// Whether schedule is run as recipient (only applicable for email recipients) - public bool? run_as_recipient { get; set; } = null; - /// Whether the ScheduledPlan is enabled - public bool? enabled { get; set; } = null; - /// Id of a look - public long? look_id { get; set; } = null; - /// Id of a dashboard - public long? dashboard_id { get; set; } = null; - /// Id of a LookML dashboard - public string? lookml_dashboard_id { get; set; } = null; - /// Query string to run look or dashboard with - public string? filters_string { get; set; } = null; - /// (DEPRECATED) Alias for filters_string field - public string? dashboard_filters { get; set; } = null; - /// Delivery should occur if running the dashboard or look returns results - public bool? require_results { get; set; } = null; - /// Delivery should occur if the dashboard look does not return results - public bool? require_no_results { get; set; } = null; - /// Delivery should occur if data have changed since the last run - public bool? require_change { get; set; } = null; - /// Will run an unlimited query and send all results. - public bool? send_all_results { get; set; } = null; - /// Vixie-Style crontab specification when to run - public string? crontab { get; set; } = null; - /// Name of a datagroup; if specified will run when datagroup triggered (can't be used with cron string) - public string? datagroup { get; set; } = null; - /// Timezone for interpreting the specified crontab (default is Looker instance timezone) - public string? timezone { get; set; } = null; - /// Query id - public string? query_id { get; set; } = null; - /// Scheduled plan destinations - public ScheduledPlanDestination[]? scheduled_plan_destination { get; set; } = null; - /// Whether the plan in question should only be run once (usually for testing) - public bool? run_once { get; set; } = null; - /// Whether links back to Looker should be included in this ScheduledPlan - public bool? include_links { get; set; } = null; - /// Custom url domain for the scheduled entity - public string? custom_url_base { get; set; } = null; - /// Custom url path and parameters for the scheduled entity - public string? custom_url_params { get; set; } = null; - /// Custom url label for the scheduled entity - public string? custom_url_label { get; set; } = null; - /// Whether to show custom link back instead of standard looker link - public bool? show_custom_url { get; set; } = null; - /// The size of paper the PDF should be formatted to fit. Valid values are: "letter", "legal", "tabloid", "a0", "a1", "a2", "a3", "a4", "a5". - public string? pdf_paper_size { get; set; } = null; - /// Whether the PDF should be formatted for landscape orientation - public bool? pdf_landscape { get; set; } = null; - /// Whether this schedule is in an embed context or not - public bool? embed { get; set; } = null; - /// Color scheme of the dashboard if applicable - public string? color_theme { get; set; } = null; - /// Whether or not to expand table vis to full length - public bool? long_tables { get; set; } = null; - /// The pixel width at which we render the inline table visualizations - public long? inline_table_width { get; set; } = null; -} - -/// Dynamic writeable type for SessionConfig removes: -/// can -public class WriteSessionConfig : SdkModel -{ - /// Allow users to have persistent sessions when they login - public bool? allow_persistent_sessions { get; set; } = null; - /// Number of minutes for user sessions. Must be between 5 and 43200 - public long? session_minutes { get; set; } = null; - /// Allow users to have an unbounded number of concurrent sessions (otherwise, users will be limited to only one session at a time). - public bool? unlimited_sessions_per_user { get; set; } = null; - /// Enforce session logout for sessions that are inactive for 15 minutes. - public bool? use_inactivity_based_logout { get; set; } = null; - /// Track location of session when user logs in. - public bool? track_session_location { get; set; } = null; -} - -/// Dynamic writeable type for SpaceBase removes: -/// id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can -public class WriteSpaceBase : SdkModel -{ - /// Unique Name - public string name { get; set; } = ""; - /// Id of Parent. If the parent id is null, this is a root-level entry - public string? parent_id { get; set; } = null; -} - -/// Dynamic writeable type for Theme removes: -/// can, id -public class WriteTheme : SdkModel -{ - /// Timestamp for when this theme becomes active. Null=always - public DateTime? begin_at { get; set; } = null; - /// Timestamp for when this theme expires. Null=never - public DateTime? end_at { get; set; } = null; - /// Name of theme. Can only be alphanumeric and underscores. - public string? name { get; set; } = null; - public ThemeSettings? settings { get; set; } -} - -/// Dynamic writeable type for User removes: -/// 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_space_id, 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, url -public class WriteUser : SdkModel -{ - /// - /// Dynamic writeable type for CredentialsEmail removes: - /// can, created_at, user_id, is_disabled, logged_in_at, password_reset_url, account_setup_url, type, url, user_url - /// - public WriteCredentialsEmail? credentials_email { get; set; } - /// First name - public string? first_name { get; set; } = null; - /// ID string for user's home space - public string? home_space_id { get; set; } = null; - /// ID string for user's home folder - public string? home_folder_id { get; set; } = null; - /// Account has been disabled - public bool? is_disabled { get; set; } = null; - /// Last name - public string? last_name { get; set; } = null; - /// User's preferred locale. User locale takes precedence over Looker's system-wide default locale. Locale determines language of display strings and date and numeric formatting in API responses. Locale string must be a 2 letter language code or a combination of language code and region code: 'en' or 'en-US', for example. - public string? locale { get; set; } = null; - /// User's dev workspace has been checked for presence of applicable production projects - public bool? models_dir_validated { get; set; } = null; - /// Per user dictionary of undocumented state information owned by the Looker UI. - public StringDictionary? ui_state { get; set; } = null; -} - -/// Dynamic writeable type for UserAttribute removes: -/// can, id, is_system, is_permanent -public class WriteUserAttribute : SdkModel -{ - /// Name of user attribute - public string? name { get; set; } = null; - /// Human-friendly label for user attribute - public string? label { get; set; } = null; - /// Type of user attribute ("string", "number", "datetime", "yesno", "zipcode") - public string? type { get; set; } = null; - /// Default value for when no value is set on the user - public string? default_value { get; set; } = null; - /// If true, users will not be able to view values of this attribute - public bool? value_is_hidden { get; set; } = null; - /// Non-admin users can see the values of their attributes and use them in filters - public bool? user_can_view { get; set; } = null; - /// Users can change the value of this attribute for themselves - public bool? user_can_edit { get; set; } = null; - /// Destinations to which a hidden attribute may be sent. Once set, cannot be edited. - public string? hidden_value_domain_whitelist { get; set; } = null; -} - -/// Dynamic writeable type for UserAttributeWithValue removes: -/// can, name, label, rank, user_id, user_can_edit, value_is_hidden, user_attribute_id, source, hidden_value_domain_whitelist -public class WriteUserAttributeWithValue : SdkModel -{ - /// Value of attribute for user - public string? value { get; set; } = null; -} - -/// Dynamic writeable type for WhitelabelConfiguration removes: -/// id, logo_url, favicon_url -public class WriteWhitelabelConfiguration : SdkModel -{ - /// Customer logo image. Expected base64 encoded data (write-only) - public string? logo_file { get; set; } = null; - /// Custom favicon image. Expected base64 encoded data (write-only) - public string? favicon_file { get; set; } = null; - /// Default page title - public string? default_title { get; set; } = null; - /// Boolean to toggle showing help menus - public bool? show_help_menu { get; set; } = null; - /// Boolean to toggle showing docs - public bool? show_docs { get; set; } = null; - /// Boolean to toggle showing email subscription options. - public bool? show_email_sub_options { get; set; } = null; - /// Boolean to toggle mentions of Looker in emails - public bool? allow_looker_mentions { get; set; } = null; - /// Boolean to toggle links to Looker in emails - public bool? allow_looker_links { get; set; } = null; - /// Allow subject line and email heading customization in customized emails” - public bool? custom_welcome_email_advanced { get; set; } = null; - /// Remove the word Looker from appearing in the account setup page - public bool? setup_mentions { get; set; } = null; - /// Remove Looker logo from Alerts - public bool? alerts_logo { get; set; } = null; - /// Remove Looker links from Alerts - public bool? alerts_links { get; set; } = null; - /// Remove Looker mentions in home folder page when you don’t have any items saved - public bool? folders_mentions { get; set; } = null; -} - -} \ No newline at end of file diff --git a/csharp/sdk/4.0/methods.cs b/csharp/sdk/4.0/methods.cs index 99007d41f..0de9a78b2 100644 --- a/csharp/sdk/4.0/methods.cs +++ b/csharp/sdk/4.0/methods.cs @@ -705,7 +705,7 @@ namespace = SdkUtils.EncodeParam(namespace); /// "Powered by Looker" (PBL) web application. /// /// This is similar to Private Embedding (https://cloud.google.com/looker/docs/r/admin/embed/private-embed). Instead of - /// of logging into the Web UI to authenticate, the user has already authenticated against the API to be able to + /// logging into the Web UI to authenticate, the user has already authenticated against the API to be able to /// make this call. However, unlike Private Embed where the user has access to any other part of the Looker UI, /// the embed web session created by requesting the EmbedUrlResponse.url in a browser only has access to /// content visible under the `/embed` context. @@ -771,7 +771,7 @@ namespace = SdkUtils.EncodeParam(namespace); /// If the `session_reference_token` is provided but the session has expired, the token will be ignored and a /// new embed session will be created. Note that the embed user definition will be updated in this scenario. /// - /// If the credentials do not match the credentials associated with an exisiting session_reference_token, a + /// If the credentials do not match the credentials associated with an existing session_reference_token, a /// 404 will be returned. /// /// The endpoint returns the following: @@ -826,6 +826,13 @@ namespace = SdkUtils.EncodeParam(namespace); /// The generate tokens endpoint should be called every time the Looker client asks for a token (except for the /// first time when the tokens returned by the acquire_session endpoint should be used). /// + /// #### Embed session expiration handling + /// + /// This endpoint does NOT return an error when the embed session expires. This is to simplify processing + /// in the caller as errors can happen for non session expiration reasons. Instead the endpoint returns + /// the session time to live in the `session_reference_token_ttl` response property. If this property + /// contains a zero, the embed session has expired. + /// /// Calls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled /// /// PUT /embed/cookieless_session/generate_tokens -> EmbedCookielessSessionGenerateTokensResponse @@ -1245,7 +1252,7 @@ namespace = SdkUtils.EncodeParam(namespace); /// /// Configuring OIDC impacts authentication for all users. This configuration should be done carefully. /// - /// Looker maintains a single OIDC configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). + /// Looker maintains a single OIDC configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). /// /// OIDC is enabled or disabled for Looker using the **enabled** field. /// @@ -1385,7 +1392,7 @@ namespace = SdkUtils.EncodeParam(namespace); /// /// Configuring SAML impacts authentication for all users. This configuration should be done carefully. /// - /// Looker maintains a single SAML configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). + /// Looker maintains a single SAML configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). /// /// SAML is enabled or disabled for Looker using the **enabled** field. /// @@ -3349,7 +3356,7 @@ namespace = SdkUtils.EncodeParam(namespace); /// ### Get an image representing the contents of a dashboard or look. /// - /// The returned thumbnail is an abstract representation of the contents of a dashbord or look and does not + /// The returned thumbnail is an abstract representation of the contents of a dashboard or look and does not /// reflect the actual data displayed in the respective visualizations. /// /// GET /content_thumbnail/{type}/{resource_id} -> string @@ -3482,7 +3489,7 @@ namespace = SdkUtils.EncodeParam(namespace); /// /// # DEPRECATED: Use [content_thumbnail()](#!/Content/content_thumbnail) /// - /// The returned thumbnail is an abstract representation of the contents of a dashbord or look and does not + /// The returned thumbnail is an abstract representation of the contents of a dashboard or look and does not /// reflect the actual data displayed in the respective visualizations. /// /// GET /vector_thumbnail/{type}/{resource_id} -> string @@ -3746,7 +3753,7 @@ namespace = SdkUtils.EncodeParam(namespace); /// You can use this function to change the string and integer properties of /// a dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components /// cannot be modified by this function - use the update functions for the respective - /// nested object types (like [update_dashboard_filter()](#!/3.1/Dashboard/update_dashboard_filter) to change a filter) + /// nested object types (like [update_dashboard_filter()](#!/Dashboard/update_dashboard_filter) to change a filter) /// to modify nested objects referenced by a dashboard. /// /// If you receive a 422 error response when updating a dashboard, be sure to look at the @@ -3787,7 +3794,7 @@ namespace = SdkUtils.EncodeParam(namespace); return await AuthRequest(HttpMethod.Delete, $"/dashboards/{dashboard_id}", null,null,options); } - /// ### Get Aggregate Table LookML for Each Query on a Dahboard + /// ### Get Aggregate Table LookML for Each Query on a Dashboard /// /// Returns a JSON object that contains the dashboard id and Aggregate Table lookml /// @@ -5639,7 +5646,7 @@ namespace = SdkUtils.EncodeParam(namespace); /// | result_format | Description /// | :-----------: | :--- | /// | json | Plain json - /// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query + /// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema /// | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query /// | csv | Comma separated values with a header /// | txt | Tab separated values with a header @@ -5852,16 +5859,19 @@ namespace = SdkUtils.EncodeParam(namespace); /// Name of lookml model. /// Name of explore. /// Requested fields. + /// Whether response should include drill field metadata. public async Task> lookml_model_explore( string lookml_model_name, string explore_name, string? fields = null, + bool? add_drills_metadata = null, ITransportSettings? options = null) { lookml_model_name = SdkUtils.EncodeParam(lookml_model_name); explore_name = SdkUtils.EncodeParam(explore_name); return await AuthRequest(HttpMethod.Get, $"/lookml_models/{lookml_model_name}/explores/{explore_name}", new Values { - { "fields", fields }},null,options); + { "fields", fields }, + { "add_drills_metadata", add_drills_metadata }},null,options); } #endregion LookmlModel: Manage LookML Models @@ -6746,8 +6756,6 @@ namespace = SdkUtils.EncodeParam(namespace); /// ### Creates a tag for the most recent commit, or a specific ref is a SHA is provided /// - /// This is an internal-only, undocumented route. - /// /// POST /projects/{project_id}/tag -> Project /// /// @@ -6863,8 +6871,6 @@ namespace = SdkUtils.EncodeParam(namespace); /// Prefix to use for drill links (url encoded). /// Rebuild PDTS used in query. /// Perform table calculations on query results - /// DEPRECATED. Render width for image formats. Note that this parameter is always ignored by this method. - /// DEPRECATED. Render height for image formats. Note that this parameter is always ignored by this method. /// Requested fields public async Task> create_query_task( WriteCreateQueryTask body, @@ -6878,8 +6884,6 @@ namespace = SdkUtils.EncodeParam(namespace); string? path_prefix = null, bool? rebuild_pdts = null, bool? server_table_calcs = null, - long? image_width = null, - long? image_height = null, string? fields = null, ITransportSettings? options = null) { @@ -6894,8 +6898,6 @@ namespace = SdkUtils.EncodeParam(namespace); { "path_prefix", path_prefix }, { "rebuild_pdts", rebuild_pdts }, { "server_table_calcs", server_table_calcs }, - { "image_width", image_width }, - { "image_height", image_height }, { "fields", fields }},body,options); } @@ -6968,11 +6970,11 @@ namespace = SdkUtils.EncodeParam(namespace); /// will be in the message of the 400 error response, but not as detailed as expressed in `json_detail.errors`. /// These data formats can only carry row data, and error info is not row data. /// - /// GET /query_tasks/{query_task_id}/results -> string + /// GET /query_tasks/{query_task_id}/results -> QueryTask /// /// - /// string The query results. (text) - /// string The query results. (application/json) + /// QueryTask query_task (text) + /// QueryTask query_task (application/json) /// string The query is not finished (text) /// string The query is not finished (application/json) /// @@ -7089,7 +7091,7 @@ namespace = SdkUtils.EncodeParam(namespace); /// | result_format | Description /// | :-----------: | :--- | /// | json | Plain json - /// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query + /// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema /// | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query /// | csv | Comma separated values with a header /// | txt | Tab separated values with a header @@ -7203,7 +7205,7 @@ namespace = SdkUtils.EncodeParam(namespace); /// | result_format | Description /// | :-----------: | :--- | /// | json | Plain json - /// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query + /// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema /// | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query /// | csv | Comma separated values with a header /// | txt | Tab separated values with a header @@ -7314,7 +7316,7 @@ namespace = SdkUtils.EncodeParam(namespace); /// | result_format | Description /// | :-----------: | :--- | /// | json | Plain json - /// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query + /// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema /// | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query /// | csv | Comma separated values with a header /// | txt | Tab separated values with a header @@ -7464,13 +7466,9 @@ namespace = SdkUtils.EncodeParam(namespace); /// /// POST /sql_queries/{slug}/run/{result_format} -> string /// - /// **Note**: Binary content may be returned by this method. - /// /// /// string SQL Runner Query (text) /// string SQL Runner Query (application/json) - /// string SQL Runner Query (image/png) - /// string SQL Runner Query (image/jpeg) /// /// /// slug of query @@ -7920,6 +7918,7 @@ namespace = SdkUtils.EncodeParam(namespace); } /// ### Update information about the permission set with a specific id. + /// Providing save_content permission alone will also provide you the abilities of save_looks and save_dashboards. /// /// PATCH /permission_sets/{permission_set_id} -> PermissionSet /// @@ -7966,6 +7965,7 @@ namespace = SdkUtils.EncodeParam(namespace); } /// ### Create a permission set with the specified information. Permission sets are used by Roles. + /// Providing save_content permission alone will also provide you the abilities of save_looks and save_dashboards. /// /// POST /permission_sets -> PermissionSet /// @@ -8769,18 +8769,12 @@ namespace = SdkUtils.EncodeParam(namespace); /// | md | Simple markdown /// | xlsx | MS Excel spreadsheet /// | sql | Returns the generated SQL rather than running the query - /// | png | A PNG image of the visualization of the query - /// | jpg | A JPG image of the visualization of the query /// - /// GET /sql_interface_queries/{query_id}/run/{result_format} -> string - /// - /// **Note**: Binary content may be returned by this method. + /// GET /sql_interface_queries/{query_id}/run/{result_format} -> QueryFormats /// /// - /// string SQL Interface Query (text) - /// string SQL Interface Query (application/json) - /// string SQL Interface Query (image/png) - /// string SQL Interface Query (image/jpeg) + /// QueryFormats Query Formats (text) + /// QueryFormats Query Formats (application/json) /// /// /// Integer id of query diff --git a/csharp/sdk/4.0/models.cs b/csharp/sdk/4.0/models.cs index 0607d4c92..ce9a92123 100644 --- a/csharp/sdk/4.0/models.cs +++ b/csharp/sdk/4.0/models.cs @@ -21,7 +21,7 @@ /// SOFTWARE. /// -/// 332 API models: 249 Spec, 0 Request, 61 Write, 22 Enum +/// 339 API models: 256 Spec, 0 Request, 61 Write, 22 Enum #nullable enable using System; @@ -1994,7 +1994,7 @@ public class EmbedCookielessSessionAcquireResponse : SdkModel public long? api_token_ttl { get; set; } = null; /// Token referencing the actual embed session. It is used to generate new api, navigation and authentication tokens. api and navigation tokens are short lived and must be refreshed regularly. A new authentication token must be acquired for each IFRAME that is created. The session_reference_token should be kept secure, ideally in the embed hosts application server. public string? session_reference_token { get; set; } = null; - /// Session reference token time to live in seconds. Note that this is the same as actual session. + /// Session reference token time to live in seconds. Note that this is the same as actual embed session. The session is expired when the value is set to zero. It is important to note that the generate token endpoint does NOT return an error when the embed session has expired. If an embedding application needs to monitor expiration of embed sessions, check this property for a value of zero. public long? session_reference_token_ttl { get; set; } = null; } @@ -2487,7 +2487,7 @@ public class Integration : SdkModel public bool? enabled { get; set; } = null; /// Array of params for the integration. public IntegrationParam[]? @params { get; set; } = null; - /// A list of data formats the integration supports. If unspecified, the default is all data formats. Valid values are: "txt", "csv", "inline_json", "json", "json_label", "json_detail", "json_detail_lite_stream", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png", "csv_zip". (read-only) + /// A list of data formats the integration supports. If unspecified, the default is all data formats. Valid values are: "txt", "csv", "inline_json", "json", "json_label", "json_detail", "json_detail_lite_stream", "json_bi", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png", "csv_zip". (read-only) public SupportedFormats[]? supported_formats { get; set; } = null; /// A list of action types the integration supports. Valid values are: "cell", "query", "dashboard", "none". (read-only) public SupportedActionTypes[]? supported_action_types { get; set; } = null; @@ -2606,6 +2606,86 @@ public enum InvestigativeContentType dashboard } +public class JsonBi : SdkModel +{ + public JsonBiBigQueryMetadata big_query_metadata { get; set; } = null; + public JsonBiFields fields { get; set; } = null; + /// Pivots (read-only) + public JsonBiPivots[] pivots { get; set; } = null; + /// If the query has subtotals (read-only) + public bool has_subtotals { get; set; } + /// If the query has totals (read-only) + public bool has_totals { get; set; } + /// If the query results hit the maximum column limit and additional columns were truncated (read-only) + public string columns_truncated { get; set; } = ""; + /// Filter expression applied to the query results (read-only) + public string filter_expression { get; set; } = ""; + /// Filters applied to the query results (read-only) + public StringDictionary filters { get; set; } = null; + /// Raw sql query. Null if user does not have permission to view sql (read-only) + public string sql { get; set; } = ""; + /// Json query results (read-only) + public string[] data { get; set; } = null; +} + +public class JsonBiBigQueryMetadata : SdkModel +{ + /// Total bytes processed by the BigQuery job (read-only) + public long total_bytes_processed { get; set; } + /// Return whether or not query results were served from the BigQuery cache. (read-only) + public bool backend_cache_hit { get; set; } +} + +public class JsonBiField : SdkModel +{ + /// SQL expressions for the field (read-only) + public string sql { get; set; } = ""; + /// Explore name (read-only) + public string view { get; set; } = ""; + /// Which dimension group created this dimension (read-only) + public string dimension_group { get; set; } = ""; + /// Dimension, Measure, etc. (read-only) + public string category { get; set; } = ""; + /// Field Group Label (read-only) + public string field_group_label { get; set; } = ""; + /// Field Name (read-only) + public string name { get; set; } = ""; + /// Field Type (read-only) + public string type { get; set; } = ""; + /// View Label (read-only) + public string view_label { get; set; } = ""; + /// Field Label (read-only) + public string label { get; set; } = ""; + /// Field Group Variant (read-only) + public string field_group_variant { get; set; } = ""; + /// If the field is marked as hidden in the Lookml (read-only) + public bool hidden { get; set; } + /// Field Description (read-only) + public string description { get; set; } = ""; +} + +public class JsonBiFields : SdkModel +{ + /// Dimensions represent a column in a table, or a computed value based on some sort of column manipulation or combination (read-only) + public JsonBiField[] dimensions { get; set; } = null; + /// Measures are similar to aggregate functions in SQL (for example, COUNT, SUM, AVG) and represent information about multiple rows (read-only) + public JsonBiField[] measures { get; set; } = null; + /// Pivots (read-only) + public JsonBiField[] pivots { get; set; } = null; +} + +public class JsonBiPivots : SdkModel +{ + /// Pivot Column Value (read-only) + public string key { get; set; } = ""; + /// Pivot Data (read-only) + public StringDictionary data { get; set; } = null; + /// Pivot Sort Values (read-only) + public StringDictionary sort_values { get; set; } = null; + /// If the value is a total (read-only) + public bool is_total { get; set; } +} + public class LDAPConfig : SdkModel { /// Operations the current user is able to perform on this object (read-only) @@ -2925,6 +3005,16 @@ public class LookBasic : SdkModel public string? user_id { get; set; } = null; } +public class LookmlFieldLink : SdkModel +{ + /// The name of the link as it would appear to users. (read-only) + public string? label { get; set; } = null; + /// URL the link will go to. (read-only) + public string? url { get; set; } = null; + /// A URL containing an image file to display with a link. (read-only) + public string? icon_url { get; set; } = null; +} + public class LookmlModel : SdkModel { /// Operations the current user is able to perform on this object (read-only) @@ -3086,6 +3176,8 @@ public class LookmlModelExploreField : SdkModel public string? description { get; set; } = null; /// Dimension group if this field is part of a dimension group. If not, this will be null. (read-only) public string? dimension_group { get; set; } = null; + /// Drill fields declared for this field in LookML or default drills for certain types. (read-only) + public string[]? drill_fields { get; set; } = null; /// An array enumerating all the possible values that this field can contain. When null, there is no limit to the set of possible values this field can contain. (read-only) public LookmlModelExploreFieldEnumeration[]? enumerations { get; set; } = null; /// An error message indicating a problem with the definition of this field. If there are no errors, this will be null. (read-only) @@ -3101,6 +3193,8 @@ public class LookmlModelExploreField : SdkModel public long? fiscal_month_offset { get; set; } = null; /// Whether this field has a set of allowed_values specified in LookML. (read-only) public bool? has_allowed_values { get; set; } = null; + /// Whether this field has links or drill fields defined. (read-only) + public bool? has_drills_metadata { get; set; } = null; /// Whether this field should be hidden from the user interface. (read-only) public bool? hidden { get; set; } = null; /// Whether this field is a filter. (read-only) @@ -3122,6 +3216,8 @@ public class LookmlModelExploreField : SdkModel public string? label_short { get; set; } = null; /// A URL linking to the definition of this field in the LookML IDE. (read-only) public string? lookml_link { get; set; } = null; + /// Links associated with this field. (read-only) + public LookmlFieldLink[]? links { get; set; } = null; public LookmlModelExploreFieldMapLayer? map_layer { get; set; } /// Whether this field is a measure. (read-only) public bool? measure { get; set; } = null; @@ -3558,6 +3654,8 @@ public class MergeQuerySourceQuery : SdkModel public string? name { get; set; } = null; /// Id of the query to merge public string? query_id { get; set; } = null; + /// Slug of the query to merge + public string? query_slug { get; set; } = null; } public class MobileFeatureFlags : SdkModel @@ -4130,6 +4228,27 @@ public class Query : SdkModel public bool? has_table_calculations { get; set; } = null; } +public class QueryFormats : SdkModel +{ + public JsonBi? json_bi { get; set; } + /// (read-only) + public string? json { get; set; } = null; + /// (read-only) + public string? json_detail { get; set; } = null; + /// (read-only) + public string? csv { get; set; } = null; + /// (read-only) + public string? txt { get; set; } = null; + /// (read-only) + public string? html { get; set; } = null; + /// (read-only) + public string? md { get; set; } = null; + /// (read-only) + public string? xlsx { get; set; } = null; + /// (read-only) + public string? sql { get; set; } = null; +} + public class QueryTask : SdkModel { /// Operations the current user is able to perform on this object (read-only) @@ -4799,6 +4918,10 @@ public class Setting : SdkModel /// True if embedding is enabled https://cloud.google.com/looker/docs/r/looker-core-feature-embed, false otherwise (read-only) public bool? embed_enabled { get; set; } = null; public EmbedConfig? embed_config { get; set; } + /// Login notification enabled (read-only) + public bool? login_notification_enabled { get; set; } = null; + /// Login notification text (read-only) + public string? login_notification_text { get; set; } = null; } public class SmtpNodeStatus : SdkModel @@ -5045,7 +5168,7 @@ public enum SupportedDownloadSettings url } -/// A list of data formats the integration supports. If unspecified, the default is all data formats. Valid values are: "txt", "csv", "inline_json", "json", "json_label", "json_detail", "json_detail_lite_stream", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png", "csv_zip". (Enum defined in Integration) +/// A list of data formats the integration supports. If unspecified, the default is all data formats. Valid values are: "txt", "csv", "inline_json", "json", "json_label", "json_detail", "json_detail_lite_stream", "json_bi", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png", "csv_zip". (Enum defined in Integration) public enum SupportedFormats { [EnumMember(Value = "txt")] @@ -5062,6 +5185,8 @@ public enum SupportedFormats json_detail, [EnumMember(Value = "json_detail_lite_stream")] json_detail_lite_stream, + [EnumMember(Value = "json_bi")] + json_bi, [EnumMember(Value = "xlsx")] xlsx, [EnumMember(Value = "html")] @@ -5314,7 +5439,7 @@ public class UserAttribute : SdkModel public string name { get; set; } = ""; /// Human-friendly label for user attribute public string label { get; set; } = ""; - /// Type of user attribute ("string", "number", "datetime", "yesno", "zipcode") + /// Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") public string type { get; set; } = ""; /// Default value for when no value is set on the user public string? default_value { get; set; } = null; @@ -6766,7 +6891,7 @@ public class WriteSessionConfig : SdkModel } /// Dynamic writeable type for Setting removes: -/// marketplace_site, embed_enabled +/// marketplace_site, embed_enabled, login_notification_enabled, login_notification_text public class WriteSetting : SdkModel { /// Toggle extension framework on or off @@ -6889,7 +7014,7 @@ public class WriteUserAttribute : SdkModel public string name { get; set; } = ""; /// Human-friendly label for user attribute public string label { get; set; } = ""; - /// Type of user attribute ("string", "number", "datetime", "yesno", "zipcode") + /// Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") public string type { get; set; } = ""; /// Default value for when no value is set on the user public string? default_value { get; set; } = null; diff --git a/docker-compose.yml b/docker-compose.yml index ecde642e0..cd4d75630 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,21 +1,20 @@ version: '3' services: + base: + image: base-sdk + build: + context: docker/base/ - base: - image: base-sdk - build: - context: docker/base/ - - python: - environment: - - LOOKERSDK_BASE_URL=${LOOKERSDK_BASE_URL} - - LOOKERSDK_API_VERSION=${LOOKERSDK_API_VERSION} - - LOOKERSDK_VERIFY_SSL=${LOOKERSDK_VERIFY_SSL} - - LOOKERSDK_TIMEOUT=${LOOKERSDK_TIMEOUT} - - LOOKERSDK_CLIENT_ID=${LOOKERSDK_CLIENT_ID} - - LOOKERSDK_CLIENT_SECRET=${LOOKERSDK_CLIENT_SECRET} - build: docker/python/ - stdin_open: true - tty: true - volumes: - - '.:/sdk_codegen' + python: + environment: + - LOOKERSDK_BASE_URL=${LOOKERSDK_BASE_URL} + - LOOKERSDK_API_VERSION=${LOOKERSDK_API_VERSION} + - LOOKERSDK_VERIFY_SSL=${LOOKERSDK_VERIFY_SSL} + - LOOKERSDK_TIMEOUT=${LOOKERSDK_TIMEOUT} + - LOOKERSDK_CLIENT_ID=${LOOKERSDK_CLIENT_ID} + - LOOKERSDK_CLIENT_SECRET=${LOOKERSDK_CLIENT_SECRET} + build: docker/python/ + stdin_open: true + tty: true + volumes: + - '.:/sdk_codegen' diff --git a/docs/byosdk.md b/docs/byosdk.md index 228a9a770..ce3790e11 100644 --- a/docs/byosdk.md +++ b/docs/byosdk.md @@ -74,23 +74,23 @@ export type HttpMethod = | 'DELETE' | 'PATCH' | 'TRACE' - | 'HEAD' + | 'HEAD'; /** Interface for API transport values */ export interface ITransportSettings { - [key: string]: any + [key: string]: any; /** base URL of API REST web service */ - base_url: string + base_url: string; /** standard headers to provide in all transport requests */ - headers?: Headers + headers?: Headers; /** whether to verify ssl certs or not. Defaults to true */ - verify_ssl: boolean + verify_ssl: boolean; /** request timeout in seconds. Default to 30 */ - timeout: number + timeout: number; /** encoding override */ - encoding?: string | null + encoding?: string | null; /** agent tag to use for the SDK requests */ - agentTag: string + agentTag: string; } /** @@ -98,15 +98,15 @@ export interface ITransportSettings { */ export interface IRawResponse { /** ok is `true` if the response is successful, `false` otherwise */ - ok: boolean + ok: boolean; /** HTTP response code */ - statusCode: number + statusCode: number; /** HTTP response status message text */ - statusMessage: string + statusMessage: string; /** MIME type of the response from the HTTP response header */ - contentType: string + contentType: string; /** The body of the HTTP response, without any additional processing */ - body: any + body: any; } /** @@ -133,7 +133,7 @@ export interface ITransport { body?: any, authenticator?: Authenticator, options?: Partial - ): Promise + ): Promise; /** * HTTP request function for atomic, fully downloaded responses @@ -152,7 +152,7 @@ export interface ITransport { body?: any, authenticator?: Authenticator, options?: Partial - ): Promise> + ): Promise>; /** * HTTP request function for a streamable response @@ -174,7 +174,7 @@ export interface ITransport { body?: any, authenticator?: Authenticator, options?: Partial - ): Promise + ): Promise; } ``` @@ -213,6 +213,7 @@ In the `ITransport` function parameters shown above: argument and returns a modified set of request properties that includes authorization information for the request. If an `authenticator` is not provided for a request, no special treatment of the HTTP url is performed. If an `authenticator` **is** specified for a request, the HTTP url for that particular request will be: + - `base_url` (from `ITransportSettings`) `+` - `api_version` (from the SDK method class) `+` - `path` from the request parameter @@ -230,25 +231,28 @@ export const LookerAppId = 'x-looker-appid' this.authSession.settings.agentTag = `${agentPrefix} ${lookerVersion}.${this.apiVersion}` ``` -Where `lookerVersion` is the version of Looker (like 7.10) and `apiVersion` is (currently) either `4.0` or `3.1` ([deprecated](https://developers.looker.com/api/advanced-usage/version-3x-deprecation)). +Where `lookerVersion` is the version of Looker (like 23.18) and `apiVersion` is (currently) `4.0` ([Note: API 3.x has been removed](https://cloud.google.com/looker/docs/api-3x-deprecation)). This results in the agentTag appearing like `TS-SDK 22.6.4.0`. Additional attributes can be added to the agent tag by separating them with semicolons. (`;`) -#### Request processing +#### Processing requests The `rawRequest()` implementation: + - constructs an HTTP request based on the properties passed into it, and returns the result of the response -without any type conversion or error handling + without any type conversion or error handling - sets the `ok` property to `true` if successful or `false` if the request fails. The `request()` implementation: + - sets the error status and data of the SDKResponse structure if an error occurs - sets the success status and data of an SDKResponse structure if the request succeeds - for successful requests, the response body is deserialized into the type indicated for the success value The `stream()` implementation: + - throws an error if a request error occurs - passes the streamable HTTP response to the stream parameter of the method - for successful requests, the response body is deserialized into the type indicated for the success value @@ -256,56 +260,56 @@ The `stream()` implementation: Here's a TypeScript code sample for streaming the download of a query's CSV result: ```ts - const request: IRequestRunInlineQuery = { - body: { - client_id: q.client_id || undefined, - column_limit: q.column_limit || undefined, - dynamic_fields: q.dynamic_fields || undefined, - fields: q.fields || undefined, - fill_fields: q.fill_fields || [], - filter_config: q.filter_config || undefined, - filter_expression: q.filter_expression || undefined, - filters: q.filters, - limit: limit.toString(10), - model: q.model!, - pivots: q.pivots || undefined, - query_timezone: q.query_timezone || undefined, - row_total: q.row_total || undefined, - sorts: q.sorts || [], - subtotals: q.subtotals || undefined, - total: typeof q.total !== 'undefined' ? q.total : false, - view: q.view!, - vis_config: q.vis_config || undefined, - visible_ui_sections: q.visible_ui_sections || undefined, - }, - result_format: 'csv', - } - const csvFile = './query.csv' - const writer = fs.createWriteStream(csvFile) - await sdk.stream.run_inline_query(async (readable: Readable) => { - return new Promise((resolve, reject) => { - readable - .pipe(writer) - .on('error', reject) - .on('finish', resolve) - }) - }, request) +const request: IRequestRunInlineQuery = { + body: { + client_id: q.client_id || undefined, + column_limit: q.column_limit || undefined, + dynamic_fields: q.dynamic_fields || undefined, + fields: q.fields || undefined, + fill_fields: q.fill_fields || [], + filter_config: q.filter_config || undefined, + filter_expression: q.filter_expression || undefined, + filters: q.filters, + limit: limit.toString(10), + model: q.model!, + pivots: q.pivots || undefined, + query_timezone: q.query_timezone || undefined, + row_total: q.row_total || undefined, + sorts: q.sorts || [], + subtotals: q.subtotals || undefined, + total: typeof q.total !== 'undefined' ? q.total : false, + view: q.view!, + vis_config: q.vis_config || undefined, + visible_ui_sections: q.visible_ui_sections || undefined, + }, + result_format: 'csv', +}; +const csvFile = './query.csv'; +const writer = fs.createWriteStream(csvFile); +await sdk.stream.run_inline_query(async (readable: Readable) => { + return new Promise((resolve, reject) => { + readable.pipe(writer).on('error', reject).on('finish', resolve); + }); +}, request); ``` #### Request parameter encoding This section discusses how parameters should be processed by the run-time **before** submitting the HTTP request to the endpoint. -**Path parameters** +#### Path parameters + - include all path parameters - url-encode the values for a path containing variables e.g., `/users/{user_id}` -**Query parameters** +#### Query parameters + - url-encode all values - date values should be formatted in UTC time format like "2020-03-15T13:16:34.692-07:00" - skip `null` or `undefined` values -**Body object** +#### Body object + - include all required properties (this is typically enforced by the declared method's interface) - skip properties that are optional and `null` or `undefined` @@ -411,7 +415,7 @@ be set to `true` in this circumstance. In the [TypeScript generator](../packages the `methodHeaderDeclaration` function has this line: ```ts -const requestType = this.requestTypeName(method) +const requestType = this.requestTypeName(method); ``` If the method requires a request type and `needRequestTypes` is `true`, the [`codeGen.ts`](../packages/sdk-codegen/src/codeGen.ts) @@ -555,7 +559,8 @@ fun asBoolean(value: String?): Boolean? { return null } ``` - - `readConfig()` overrides + +- `readConfig()` overrides - [HTTP parameter encoding](#request-parameter-encoding) @@ -642,6 +647,7 @@ A script or command to deploy to the relevant package manager must be provided f The package versioning information must contain the Looker Release version. The package needs a `README` that: + - introduces the SDK - describes how to get started - links to the SDK-Codegen repository diff --git a/docs/ci-testing.md b/docs/ci-testing.md index ad32a3781..f87fd9a32 100644 --- a/docs/ci-testing.md +++ b/docs/ci-testing.md @@ -1,5 +1,7 @@ # Adding required ci testing + ## Create a test-area-ci workflow + Create a workflow in `.github/workflows/`. The existing workflows can be used as an example. The new workflow should respond to pull requests, pushes, and workflow dispatch events. The @@ -29,36 +31,37 @@ on: workflow_dispatch: ``` + In this example, the API Explorer (APIX for short) is being tested. That name and the particular file paths should be customized for the area you wish to test. -The workflow will probably end with a step to report the results. This is especially +The workflow will probably end with a step to report the results. This is especially with a CI test that uses various combinations of Looker versions, platforms like Windows, Linux, MaxOS, and versions of tools like Node or Python. Each variation of a matrix test -should report a result that is then aggregated into one overall result. That aggregate +should report a result that is then aggregated into one overall result. That aggregate reporting step might look like this... ```yaml - publish-test-results: - needs: [unit] - if: success() || failure() - runs-on: ubuntu-latest - - steps: - - name: Download Artifacts - uses: actions/download-artifact@v2 - with: - path: artifacts - - - name: Publish Unit Test Results - uses: EnricoMi/publish-unit-test-result-action@v1.12 - with: - check_name: APIX Tests - github_token: ${{ secrets.GITHUB_TOKEN }} - report_individual_runs: true - hide_comments: orphaned commits - check_run_annotations_branch: '*' - files: 'artifacts/apix-test-results/*.xml' +publish-test-results: + needs: [unit] + if: success() || failure() + runs-on: ubuntu-latest + + steps: + - name: Download Artifacts + uses: actions/download-artifact@v2 + with: + path: artifacts + + - name: Publish Unit Test Results + uses: EnricoMi/publish-unit-test-result-action@v1.12 + with: + check_name: APIX Tests + github_token: ${{ secrets.GITHUB_TOKEN }} + report_individual_runs: true + hide_comments: orphaned commits + check_run_annotations_branch: '*' + files: 'artifacts/apix-test-results/*.xml' ``` In particular, note the `check_name: APIX Tests`. This will publish a check back to github @@ -70,21 +73,22 @@ That way if someone modifies another part of the project unrelated tests don't n Add a new filter with a unique name under the `changed-file-filter` step. Use the same filter as the `paths:` clause under the `push:` and `pull_requests:` for your new ci workflow. + ```yaml - - uses: tony84727/changed-file-filter@v0.2.0 - id: filter - with: - filters: | - apix: - - packages/code-editor/** - - packages/run-it/** - - packages/api-explorer/** - - packages/extension-api-explorer/** - - packages/extension-utils/** - codegen: - - packages/sdk-codegen/** - - packages/sdk-codegen-utils/** - - packages/sdk-codegen-scripts/** +- uses: tony84727/changed-file-filter@v0.2.0 + id: filter + with: + filters: | + apix: + - packages/code-editor/** + - packages/run-it/** + - packages/api-explorer/** + - packages/extension-api-explorer/** + - packages/extension-utils/** + codegen: + - packages/sdk-codegen/** + - packages/sdk-codegen-utils/** + - packages/sdk-codegen-scripts/** ``` The full set of outputs is also available in the JSON structure under the name `filters`. In @@ -99,26 +103,29 @@ for debugging. You might want to add that as well. Finally create a step with the name `Create Subject Area check` It should have an `if:` for the job so it only runs if the filter is 'false'. The `name` element in the curl data body is the same as the `check_name:` we found earlier. + ```yaml - - name: Create Codegen check - if: steps.filter.outputs.codegen == 'false' - run: | - curl --request POST \ - --url https://api.github.com/repos/looker-open-source/sdk-codegen/check-runs \ - --header "authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ - --header "content-type: application/json" \ - --header "Accept: application/vnd.github.v3+json" \ - --data '{ - "name": "Codegen Tests", - "head_sha": "${{ github.event.pull_request.head.sha || github.sha }}", - "conclusion": "success" - }' \ - --fail +- name: Create Codegen check + if: steps.filter.outputs.codegen == 'false' + run: | + curl --request POST \ + --url https://api.github.com/repos/looker-open-source/sdk-codegen/check-runs \ + --header "authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ + --header "content-type: application/json" \ + --header "Accept: application/vnd.github.v3+json" \ + --data '{ + "name": "Codegen Tests", + "head_sha": "${{ github.event.pull_request.head.sha || github.sha }}", + "conclusion": "success" + }' \ + --fail ``` ## Example + To illustrate this, imagine you are adding a ci workflow for `go`. Your workflow might be named `.github/workflows/go-ci.yml` and start with this: + ```yaml name: Go CI on: @@ -136,71 +143,75 @@ on: ``` The last step might be something like this... + ```yaml - publish-test-results: - needs: [unit] - if: success() || failure() - runs-on: ubuntu-latest - - steps: - - name: Download Artifacts - uses: actions/download-artifact@v2 - with: - path: artifacts - - - name: Publish Unit Test Results - uses: EnricoMi/publish-unit-test-result-action@v1.12 - with: - check_name: Go Tests - github_token: ${{ secrets.GITHUB_TOKEN }} - report_individual_runs: true - hide_comments: orphaned commits - check_run_annotations_branch: '*' - files: 'artifacts/go-test-results/*.xml' +publish-test-results: + needs: [unit] + if: success() || failure() + runs-on: ubuntu-latest + + steps: + - name: Download Artifacts + uses: actions/download-artifact@v2 + with: + path: artifacts + + - name: Publish Unit Test Results + uses: EnricoMi/publish-unit-test-result-action@v1.12 + with: + check_name: Go Tests + github_token: ${{ secrets.GITHUB_TOKEN }} + report_individual_runs: true + hide_comments: orphaned commits + check_run_annotations_branch: '*' + files: 'artifacts/go-test-results/*.xml' ``` Make note of the `paths:` filter `- go/**` and the `check_name:` 'Go Tests`. In `.github/workflows/required-checks-hack-ci.yml` add a `go` filter to the list of defined filters with the same filter. + ```yaml - - uses: tony84727/changed-file-filter@v0.2.0 - id: filter - with: - filters: | - apix: - - packages/code-editor/** - - packages/run-it/** - - packages/api-explorer/** - - packages/extension-api-explorer/** - - packages/extension-utils/** - codegen: - - packages/sdk-codegen/** - - packages/sdk-codegen-utils/** - - packages/sdk-codegen-scripts/** - go: - - go/** - # snipped +- uses: tony84727/changed-file-filter@v0.2.0 + id: filter + with: + filters: | + apix: + - packages/code-editor/** + - packages/run-it/** + - packages/api-explorer/** + - packages/extension-api-explorer/** + - packages/extension-utils/** + codegen: + - packages/sdk-codegen/** + - packages/sdk-codegen-utils/** + - packages/sdk-codegen-scripts/** + go: + - go/** + # snipped ``` + I add them alphabetically because it makes me happier. Finally in `.github/workflows/required-checks-hack-ci.yml` add a step to report a result if the `go-ci.yml` file is never run, making sure that -the name in the json bidy here matches the `check-name:` defined in +the name in the json bidy here matches the `check-name:` defined in the `.github/workflows/go-ci.yml` `publish-test-results:` job. + ```yaml - - name: Create Go check - if: steps.filter.outputs.codegen == 'false' - run: | - curl --request POST \ - --url https://api.github.com/repos/looker-open-source/sdk-codegen/check-runs \ - --header "authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ - --header "content-type: application/json" \ - --header "Accept: application/vnd.github.v3+json" \ - --data '{ - "name": "Go Tests", - "head_sha": "${{ github.event.pull_request.head.sha || github.sha }}", - "conclusion": "success" - }' \ - --fail +- name: Create Go check + if: steps.filter.outputs.codegen == 'false' + run: | + curl --request POST \ + --url https://api.github.com/repos/looker-open-source/sdk-codegen/check-runs \ + --header "authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ + --header "content-type: application/json" \ + --header "Accept: application/vnd.github.v3+json" \ + --data '{ + "name": "Go Tests", + "head_sha": "${{ github.event.pull_request.head.sha || github.sha }}", + "conclusion": "success" + }' \ + --fail ``` diff --git a/docs/cors.md b/docs/cors.md index 0d9c09749..34673230b 100644 --- a/docs/cors.md +++ b/docs/cors.md @@ -23,15 +23,15 @@ Included in this repository are scripts and source code that hopefully reduce th - [OAuth application registration](../packages/sdk-codegen-scripts/scripts/register.ts) is a Node script that can create and update an OAuth app configuration - a sample OAuth application configuration file [`appconfig.json`](../packages/sdk-codegen-scripts/scripts/appconfig.json) has the configuration for the stand-alone [API Explorer](../packages/api-explorer) in this repository -- an [`OAuthConfigProvider`](../packages/extension-utils/src/authUtils.ts) from `@looker/extension-utils` to support OAuth handshakes with the Looker server +- an [`OAuthConfigProvider`](../packages/extension-utils/src/authUtils.ts) from `@looker/extension-utils` to support OAuth handshakes with the Looker server ## SDK support Because the OAuth workflow redirects the browser page to the Looker instance to authenticate, then back to your web application, the Browser's [sessionStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage) is used to persist some variables used by the SDK. -### OAuth requests +### OAuth requests -API Explorer uses a package called "RunIt" to make its API requests. The [`initRunItSDK` function](../packages/run-it/src/utils/RunItSDK.ts) uses the [`OAuthConfigProvider`](../packages/extension-utils/src/authUtils.ts). +API Explorer uses a package called "RunIt" to make its API requests. The [`initRunItSDK` function](../packages/run-it/src/utils/RunItSDK.ts) uses the [`OAuthConfigProvider`](../packages/extension-utils/src/authUtils.ts). This sets up the authentication session for OAuth. ### Automatic login diff --git a/docs/json.md b/docs/json.md index e9bb45815..c6d74ecba 100644 --- a/docs/json.md +++ b/docs/json.md @@ -78,12 +78,12 @@ Given the following TypeScript interface: ```ts interface ITestModel { - string1: string - num1: number - string2: string - num2: number - string3: string - num3: number + string1: string; + num1: number; + string2: string; + num2: number; + string3: string; + num3: number; } ``` @@ -92,15 +92,15 @@ We want the TypeScript SDK to successfully deserialize the payload into `ITestMo This test passes: ```ts -const typed = await sdkOk(xp.parseResponse(resp)) -expect(typed.string1).toBe(1) -expect(typed.num1).toBe(1) -expect(typed.string2).toBe('2') -expect(typed.num2).toBe('2') -expect(typed.string3).toBe('3') -expect(typed.num3).toBe(3) -expect((typed as any).string4).toBe('4') -expect((typed as any).num4).toBe(4) +const typed = await sdkOk(xp.parseResponse(resp)); +expect(typed.string1).toBe(1); +expect(typed.num1).toBe(1); +expect(typed.string2).toBe('2'); +expect(typed.num2).toBe('2'); +expect(typed.string3).toBe('3'); +expect(typed.num3).toBe(3); +expect((typed as any).string4).toBe('4'); +expect((typed as any).num4).toBe(4); ``` ### TypeScript caveats diff --git a/docs/paging.md b/docs/paging.md index 9734a16fe..cc9d7af43 100644 --- a/docs/paging.md +++ b/docs/paging.md @@ -6,7 +6,7 @@ Any endpoint that accepts `limit` and `offset` parameters can support generic pa | Parameter | Description | | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `limit` | If provided, this value sets the number of results to return per _page_ and triggers paging headers to be provided. | +| `limit` | If provided, this value sets the number of results to return per _page_ and triggers paging headers to be provided. | | `offset` | This value sets the starting position of the results to return. A value of `0` (zero) is used for the first result. `offset` defaults to 0 if `limit` is provided and `offset` is not. | Some endpoints have `page` and `per_page` parameters instead of, or in addition to, `limit` and `offset`. The `limit` and `offset` parameters take precedence over the `page` and `per_page` parameters for endpoints that support both. @@ -64,20 +64,23 @@ Results can be retrieved a page at a time with code like this sample: ```ts // "Monolithic" SDK search function -async function dashboardSearchResultsByPage(inTitle: string, limit: number = 100) { - const sdk = new Looker40SDK(session) +async function dashboardSearchResultsByPage( + inTitle: string, + limit: number = 100 +) { + const sdk = new Looker40SDK(session); return await pager(sdk, () => - sdk.search_dashboards({title: inTitle, limit}) - ) + sdk.search_dashboards({ title: inTitle, limit }) + ); } -const pagedDashboards = await dashboardSearchResultsByPage('JOEL') +const pagedDashboards = await dashboardSearchResultsByPage('JOEL'); for (const dash of pagedDashboards.items) { - console.log(dash.title) + console.log(dash.title); } while (pagedDashboards.more()) { for (const dash of await pagedDashboards.nextPage()) { - console.log(dash.title) + console.log(dash.title); } } ``` @@ -86,13 +89,15 @@ For the functional SDK, the syntax is almost identical (the imports will vary). ```ts // Functional SDK search function -async function dashboardSearchResultsByPage(inTitle: string, limit: number = 100) { - const sdk = new Looker40SDK(session) +async function dashboardSearchResultsByPage( + inTitle: string, + limit: number = 100 +) { + const sdk = new Looker40SDK(session); return await pager(sdk, () => - search_dashboards(sdk, {title: inTitle, limit}) - ) + search_dashboards(sdk, { title: inTitle, limit }) + ); } - ``` **Note** The above examples will only work correctly when a Looker release with paging headers for the API 4.0 implementation of `search_dashboards` is available. diff --git a/docs/rationale.md b/docs/rationale.md index 1b4ff5b68..bde0b7ab8 100644 --- a/docs/rationale.md +++ b/docs/rationale.md @@ -57,7 +57,7 @@ me = sdk.me("id, first_name, last_name") Is nearly identical to the TypeScript code: ```typescript -me = await sdk.me("id, first_name, last_name") +me = await sdk.me('id, first_name, last_name'); ``` and that's a good thing. @@ -79,7 +79,17 @@ looks = sdk.search_looks(fields="id, title, description") and the first iteration of the TypeScript implementation looked like this: ```typescript -looks = await sdk.search_looks(undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, "id, title, description") +looks = await sdk.search_looks( + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + 'id, title, description' +); ``` Clearly, this would not be a pleasant way to make SDK calls. @@ -87,7 +97,7 @@ Clearly, this would not be a pleasant way to make SDK calls. To make TypeScript coding more enjoyable, methods that have more than one optional parameter (or two, if the body parameter is also present but optional), a `Request` structure is created that supports the sparse assignment of arguments. Thanks to the `IRequestSearchLooks` interface generated for TypeScript, `search_looks` can be called like this: ```typescript -looks = await sdk.search_looks({fields: 'id,title,description'}) +looks = await sdk.search_looks({ fields: 'id,title,description' }); ``` Which is **just about** as convenient as the Python pattern. @@ -209,31 +219,31 @@ export interface IBackupConfiguration { /** * Type of backup: looker-s3 or custom-s3 */ - type?: string + type?: string; /** * Name of bucket for custom-s3 backups */ - custom_s3_bucket?: string + custom_s3_bucket?: string; /** * Name of region where the bucket is located */ - custom_s3_bucket_region?: string + custom_s3_bucket_region?: string; /** * (Write-Only) AWS S3 key used for custom-s3 backups */ - custom_s3_key?: string + custom_s3_key?: string; /** * (Write-Only) AWS S3 secret used for custom-s3 backups */ - custom_s3_secret?: string + custom_s3_secret?: string; /** * Link to get this item */ - url?: URL + url?: URL; /** * Operations the current user is able to perform on this object */ - can?: IDictionary + can?: IDictionary; } ``` @@ -247,23 +257,23 @@ export interface IWriteBackupConfiguration { /** * Type of backup: looker-s3 or custom-s3 */ - type?: string + type?: string; /** * Name of bucket for custom-s3 backups */ - custom_s3_bucket?: string + custom_s3_bucket?: string; /** * Name of region where the bucket is located */ - custom_s3_bucket_region?: string + custom_s3_bucket_region?: string; /** * (Write-Only) AWS S3 key used for custom-s3 backups */ - custom_s3_key?: string + custom_s3_key?: string; /** * (Write-Only) AWS S3 secret used for custom-s3 backups */ - custom_s3_secret?: string + custom_s3_secret?: string; } ``` @@ -279,11 +289,11 @@ export interface IRequestAllHomepageSections { /** * Requested fields. */ - fields?: string + fields?: string; /** * Fields to sort by. */ - sorts?: string + sorts?: string; } ``` @@ -434,59 +444,59 @@ export interface IRequestCreateQueryTask { /** * body parameter for dynamically created request type */ - body?: Partial + body?: Partial; /** * Row limit (may override the limit in the saved query). */ - limit?: number + limit?: number; /** * Apply model-specified formatting to each result. */ - apply_formatting?: boolean + apply_formatting?: boolean; /** * Apply visualization options to results. */ - apply_vis?: boolean + apply_vis?: boolean; /** * Get results from cache if available. */ - cache?: boolean + cache?: boolean; /** * Render width for image formats. */ - image_width?: number + image_width?: number; /** * Render height for image formats. */ - image_height?: number + image_height?: number; /** * Generate drill links (only applicable to 'json_detail' format. */ - generate_drill_links?: boolean + generate_drill_links?: boolean; /** * Force use of production models even if the user is in development mode. */ - force_production?: boolean + force_production?: boolean; /** * Retrieve any results from cache even if the results have expired. */ - cache_only?: boolean + cache_only?: boolean; /** * Prefix to use for drill links (url encoded). */ - path_prefix?: string + path_prefix?: string; /** * Rebuild PDTS used in query. */ - rebuild_pdts?: boolean + rebuild_pdts?: boolean; /** * Perform table calculations on query results */ - server_table_calcs?: boolean + server_table_calcs?: boolean; /** * Requested fields */ - fields?: string + fields?: string; } ``` diff --git a/env-sample b/env-sample index c5796710f..99340246d 100644 --- a/env-sample +++ b/env-sample @@ -8,5 +8,5 @@ LOOKERSDK_BASE_URL=https://self-signed.looker.com:19999 LOOKERSDK_VERIFY_SSL=false LOOKERSDK_TIMEOUT=120 -LOOKERSDK_CLIENT_ID=YourAPI3ClientID -LOOKERSDK_CLIENT_SECRET=YourAPI3ClientSSecret +LOOKERSDK_CLIENT_ID=YourAPIClientID +LOOKERSDK_CLIENT_SECRET=YourAPIClientSSecret diff --git a/examples/java/example_gradle/README.md b/examples/java/example_gradle/README.md index 44c42b7a9..b14967cb8 100644 --- a/examples/java/example_gradle/README.md +++ b/examples/java/example_gradle/README.md @@ -21,7 +21,7 @@ the Kotlin Looker SDK jar as follows 2. `cd {repolocation}/kotlin` 3. `./gradlew jar` 4. copy `./build/libs/looker-kotlin-sdk.jar` to the `lib` directory of this -project. + project. # Run @@ -30,8 +30,8 @@ the example class. 1. cd to the root of this example project. 2. Create a `.env` in the root of this project. A sample .env_sample file is -provided. You will need to populate the .env file with the Looker client id and -secret obtained earlier. + provided. You will need to populate the .env file with the Looker client id and + secret obtained earlier. 3. `./gradlew run` The run should print out: diff --git a/examples/java/example_maven/README.md b/examples/java/example_maven/README.md index 2acd784f5..4a415fd19 100644 --- a/examples/java/example_maven/README.md +++ b/examples/java/example_maven/README.md @@ -21,7 +21,7 @@ the Kotlin Looker SDK jar as follows 2. `cd {repolocation}/kotlin` 3. `./gradlew jar` 4. copy `./build/libs/looker-kotlin-sdk.jar` to the `lib` directory of this -project. + project. # Run @@ -30,10 +30,10 @@ the example class. 1. cd to the root of this example project. 2. Create a `.env` in the root of this project. A sample .env_sample file is -provided. You will need to populate the .env file with the Looker client id and -secret obtained earlier. + provided. You will need to populate the .env file with the Looker client id and + secret obtained earlier. 3. `./mvnw compile` -3. `./mvnw exec:java` +4. `./mvnw exec:java` The run should print out: diff --git a/examples/python/.gitigore b/examples/python/.gitignore similarity index 100% rename from examples/python/.gitigore rename to examples/python/.gitignore diff --git a/examples/python/.python-version b/examples/python/.python-version index f28071967..a08ffae0c 100644 --- a/examples/python/.python-version +++ b/examples/python/.python-version @@ -1 +1 @@ -3.8.1 +3.8.2 diff --git a/examples/python/README.md b/examples/python/README.md index 3ebfacefc..76dfbcc75 100644 --- a/examples/python/README.md +++ b/examples/python/README.md @@ -1,8 +1,8 @@ # Python Examples for the Looker API -You can find Python language examples in this folder. +You can find Python language examples in this folder. -The full details of all Looker API endpoints are listed in Looker Docs: [Version 3.1](https://docs.looker.com/reference/api-and-integration/api-reference/v3.1), [Version 4.0](https://docs.looker.com/reference/api-and-integration/api-reference/v4.0) +The full details of all Looker API 4.0 endpoints are listed in [Looker Docs](https://cloud.google.com/looker/docs/reference/looker-api/latest). ## Full Applications @@ -25,6 +25,7 @@ The full details of all Looker API endpoints are listed in Looker Docs: [Version - [Soft delete dashboard](soft_delete_dashboard.py) ## Query : Run and Manage Queries + - [Kill all running queries](kill_queries.py) ## RenderTask : Manage Render Tasks @@ -45,5 +46,6 @@ The full details of all Looker API endpoints are listed in Looker Docs: [Version - [Add a list of users to a group from a CSV](add_users_to_group_from_csv.py) ## Project : Manage Projects + - [Update projects to use Main asthe production branch](update_prod_branches_to_main.py) -- [Google Cloud Function: User Creation](cloud-function-user-provision) \ No newline at end of file +- [Google Cloud Function: User Creation](cloud-function-user-provision) diff --git a/examples/python/cloud-function-content-cleanup-automation/README.md b/examples/python/cloud-function-content-cleanup-automation/README.md index 095629d62..792d2a3bc 100644 --- a/examples/python/cloud-function-content-cleanup-automation/README.md +++ b/examples/python/cloud-function-content-cleanup-automation/README.md @@ -211,13 +211,13 @@ The following steps assume deployment using the Google Cloud UI Console. ```python import looker_sdk -from looker_sdk import models40 +from looker_sdk import models40 as models config_file = "looker.ini" sdk = looker_sdk.init40(config_file) def restore_soft_delete_dashboard(dashboard_id): - dashboard = models40.WriteDashboard(deleted=False) + dashboard = models.WriteDashboard(deleted=False) try: sdk.update_dashboard(str(dashboard_id), body=dashboard) print(f"Successfully restored dashboard {dashboard_id}") @@ -225,7 +225,7 @@ def restore_soft_delete_dashboard(dashboard_id): print(f"Error: {e}") def restore_soft_delete_look(look_id): - look = models40.WriteLookWithQuery(deleted=False) + look = models.WriteLookWithQuery(deleted=False) try: sdk.update_look(str(look_id), body=look) print(f"Successfully restored look {look_id}") diff --git a/examples/python/cloud-function-content-cleanup-automation/main.py b/examples/python/cloud-function-content-cleanup-automation/main.py index 321798eb6..89b08959e 100644 --- a/examples/python/cloud-function-content-cleanup-automation/main.py +++ b/examples/python/cloud-function-content-cleanup-automation/main.py @@ -12,11 +12,11 @@ - Update NOTIFICATION_EMAIL_ADDRESS (email address for content deletion notification). - Toggle dry run of automation off/on. -Last modified: March 2023 +Last modified: Feb 27 2024 """ import looker_sdk -from looker_sdk import models40 +from looker_sdk import models40 as models from looker_sdk import error from google.cloud import storage from google.cloud import exceptions @@ -85,7 +85,7 @@ def get_unused_content_query_id(days: int): """ Get a re-useable query ID for a System Activity query which returns all content that hasn't been used in at least 90 (default) days. This query ID can be used to run the query and send a schedule with the query's results. """ - unused_content_query = models40.WriteQuery( + unused_content_query = models.WriteQuery( model="system__activity", view="content_usage", fields=[ @@ -128,7 +128,7 @@ def get_deleted_content_query_id(days: int): """ Get a re-usable query ID for a System Activity query which returns all content that's been soft deleted for 90+ (default) days. This query ID can be used to run the query and send a schedule with the query's results. """ - deleted_query = models40.WriteQuery( + deleted_query = models.WriteQuery( model="system__activity", view="content_usage", fields=[ @@ -180,7 +180,7 @@ def send_content_notification(query_id: str, delete_type: str, address: str): """ created_date = datetime.today().strftime('%Y-%m-%d') - scheduled_plan_destination_body = models40.ScheduledPlanDestination( + scheduled_plan_destination_body = models.ScheduledPlanDestination( format="csv", type="email", address=address, @@ -189,7 +189,7 @@ def send_content_notification(query_id: str, delete_type: str, address: str): apply_formatting=False, apply_vis=False ) - unused_content_notification = models40.WriteScheduledPlan( + unused_content_notification = models.WriteScheduledPlan( name=f"[Looker Automation] {delete_type.capitalize()} deleted content ({created_date}).", query_id=query_id, scheduled_plan_destination=[ @@ -230,8 +230,8 @@ def get_look_ids(content: list): def soft_delete_dashboard(dashboard_id: str): """ Soft delete the given dashboard. """ # todo: to toggle off safe mode and soft delete dashboards, comment out `deleted=False`` line and uncomment `deleted=True` line - dashboard = models40.WriteDashboard(deleted=False) - # dashboard = models40.WriteDashboard(deleted=True) + dashboard = models.WriteDashboard(deleted=False) + # dashboard = models.WriteDashboard(deleted=True) try: sdk.update_dashboard(dashboard_id, body=dashboard) print(f"Successfully soft deleted dashboard: {dashboard_id}") @@ -242,8 +242,8 @@ def soft_delete_dashboard(dashboard_id: str): def soft_delete_look(look_id: str): """ Soft delete the given look. """ # todo: to toggle off safe mode and soft delete Looks, comment out `deleted=False`` line and uncomment `deleted=True` line - look = models40.WriteLookWithQuery(deleted=False) - # look = models40.WriteLookWithQuery(deleted=True) + look = models.WriteLookWithQuery(deleted=False) + # look = models.WriteLookWithQuery(deleted=True) try: sdk.update_look(look_id, body=look) print(f"Successfully soft deleted Look: {look_id}") diff --git a/examples/python/cloud-function-user-provision/README.md b/examples/python/cloud-function-user-provision/README.md index e42a65c30..76ba6f9a5 100644 --- a/examples/python/cloud-function-user-provision/README.md +++ b/examples/python/cloud-function-user-provision/README.md @@ -32,7 +32,7 @@ The following steps assume deployment using Google Cloud UI Console. Check out [ Setting environmental variables in Cloud Function UI

-5. Copy and paste the contents of `main.py` in this repository into the `main.py` file once inside Cloud Function's inline editor. Change the "Entry point" in the top right to the main function. `main.py` is executed once the function is triggered +5. Copy and paste the contents of `main.py` in this repository into the `main.py` file once inside Cloud Function's inline editor. Change the "Entry point" in the top right to the main function. `main.py` is executed once the function is triggered 6. Copy and paste the contents of `requirements.txt` in this repository to the `requirements.txt` file once inside Cloud Function's inline editor. This file is used to install necessary libraries to execute the function diff --git a/examples/python/cloud-function-write-to-bigquery/README.md b/examples/python/cloud-function-write-to-bigquery/README.md index 3d9fd3b46..90de58409 100644 --- a/examples/python/cloud-function-write-to-bigquery/README.md +++ b/examples/python/cloud-function-write-to-bigquery/README.md @@ -10,4 +10,4 @@ Cloud Function is easy to set up and suitable for light-weighted, on-the-fly tas

Setting environmental variables in Cloud Function UI -

\ No newline at end of file +

diff --git a/examples/python/content_validator_comparison.py b/examples/python/content_validator_comparison.py index a6ffb2738..a4e03d42a 100644 --- a/examples/python/content_validator_comparison.py +++ b/examples/python/content_validator_comparison.py @@ -1,5 +1,5 @@ import looker_sdk -from looker_sdk import models +from looker_sdk import models40 as models import configparser import hashlib import csv diff --git a/examples/python/create_db_connections.py b/examples/python/create_db_connections.py index 056bdd939..4422ec41a 100644 --- a/examples/python/create_db_connections.py +++ b/examples/python/create_db_connections.py @@ -1,5 +1,5 @@ import looker_sdk -from looker_sdk import models +from looker_sdk import models40 as models import base64 with open("credentials_file.json", "rb") as f: diff --git a/examples/python/download_dashboard_pdf.py b/examples/python/download_dashboard_pdf.py index 390f4e1b8..239f66ad3 100644 --- a/examples/python/download_dashboard_pdf.py +++ b/examples/python/download_dashboard_pdf.py @@ -8,7 +8,7 @@ $ python download_dashboard_pdf.py "A Test Dashboard" '{"filter1": "value1, value2", "filter2": "value3"}' $ python download_dashboard_pdf.py "A Test Dashboard" {} "single_column" -Last modified: August 25, 2021 +Last modified: Feb 27 2024 """ import json @@ -19,11 +19,10 @@ from typing import cast, Dict, Optional import looker_sdk -from looker_sdk import models +from looker_sdk import models40 as models sdk = looker_sdk.init40("../../looker.ini") - def main(): dashboard_title = sys.argv[1] if len(sys.argv) > 1 else "" filters = json.loads(sys.argv[2]) if len(sys.argv) > 2 else None diff --git a/examples/python/download_look.py b/examples/python/download_look.py index 219004d6e..443a67304 100644 --- a/examples/python/download_look.py +++ b/examples/python/download_look.py @@ -7,7 +7,7 @@ $ python download_look.py "A simple look" $ python download_look.py "A simple look" 545 842 png -Last modified: August 25, 2021 +Last modified: Feb 27 2024 """ import sys @@ -15,7 +15,7 @@ import time import looker_sdk -from looker_sdk import models +from looker_sdk import models40 as models sdk = looker_sdk.init40("../../looker.ini") diff --git a/examples/python/download_tile.py b/examples/python/download_tile.py index 6c8eea113..3bf6437fa 100644 --- a/examples/python/download_tile.py +++ b/examples/python/download_tile.py @@ -2,7 +2,7 @@ import time import looker_sdk -from looker_sdk import models +from looker_sdk import models40 as models from looker_sdk.rtl import transport class MyTransportOptions(transport.PTransportSettings): timeout = 300 diff --git a/examples/python/kill_queries.py b/examples/python/kill_queries.py index e156dc6c9..8181a9199 100644 --- a/examples/python/kill_queries.py +++ b/examples/python/kill_queries.py @@ -9,11 +9,10 @@ Authors: Lan -Last modified: July 18, 2021 +Last modified: Feb 27 2024 """ import looker_sdk -from looker_sdk import models40 sdk = looker_sdk.init40(config_file='../looker.ini', section='Looker') diff --git a/examples/python/logout_all_users.py b/examples/python/logout_all_users.py index 0c4b14c0e..187eef567 100644 --- a/examples/python/logout_all_users.py +++ b/examples/python/logout_all_users.py @@ -1,8 +1,8 @@ from typing import cast, Sequence import looker_sdk -from looker_sdk import models +from looker_sdk import models40 as models sdk = looker_sdk.init40("../../looker.ini") diff --git a/examples/python/lookersdk-flask/README.md b/examples/python/lookersdk-flask/README.md index 673c20cb2..29a211c32 100644 --- a/examples/python/lookersdk-flask/README.md +++ b/examples/python/lookersdk-flask/README.md @@ -5,22 +5,24 @@ This is a small demo Flask application, almost entirely based on the official [F This example is likely not suitable for repurposing to production use cases (Flask is not great in production without tweaks), but it is a very easy way to begin working with and understanding the [Looker Python SDK](https://github.com/looker-open-source/sdk-codegen/tree/main/python) in a real-world application. ## Running + 1. Clone this entire repository and `cd sdk-codegen/examples/python/lookersdk-flask` -2. *Recommended: Set up a virtual environment. I use virtualenv:* ```virtualenv venv && source venv/bin/activate```. -2. Rename `looker.ini.sample` to `looker.ini` and fill in your credentials **OR** set environment variables (see [Python SDK docs](https://github.com/looker-open-source/sdk-codegen/tree/main/python) for more). -3. Make a mental note to not check `looker.ini` into source control, ever. -4. Run the following commands to set Flask environment variables. `export FLASK_APP=app` and `export FLASK_ENV=development`. -5. Install required libraries by running `pip install -r requirements.txt`. -5. Initialize the database by running `flask init-db`. -6. Start the app by running `flask run`. -7. Have fun! +2. _Recommended: Set up a virtual environment. I use virtualenv:_ `virtualenv venv && source venv/bin/activate`. +3. Rename `looker.ini.sample` to `looker.ini` and fill in your credentials **OR** set environment variables (see [Python SDK docs](https://github.com/looker-open-source/sdk-codegen/tree/main/python) for more). +4. Make a mental note to not check `looker.ini` into source control, ever. +5. Run the following commands to set Flask environment variables. `export FLASK_APP=app` and `export FLASK_ENV=development`. +6. Install required libraries by running `pip install -r requirements.txt`. +7. Initialize the database by running `flask init-db`. +8. Start the app by running `flask run`. +9. Have fun! ## What's Next + This is an intentionally "incomplete" application that has room to grow! Often the best way to learn is to dig in and implement new functionality. If you also learn best by doing, try some of these ideas to get you started exploring: + - Allow a user to select between visualization or table when creating a new post. - What happens if a user creates a post with a broken Look? - Why is it so slow to create a new post? Or to just load the /create page in the first place? - Allow a user to view the Looks and Dashboards they've Favorited in Looker, in the app. - Harder: What would it take to add appropriate Looker permissions to this app? - Sky's the limit :) - diff --git a/examples/python/lookersdk-flask/app/looker.py b/examples/python/lookersdk-flask/app/looker.py index 0ca857c00..456f39399 100644 --- a/examples/python/lookersdk-flask/app/looker.py +++ b/examples/python/lookersdk-flask/app/looker.py @@ -9,9 +9,9 @@ # https://github.com/looker-open-source/sdk-codegen/tree/main/python # Rename the looker.ini.sample file in the project root to looker.ini and fill it out -sdk = looker_sdk.init31("app/looker.ini") +sdk = looker_sdk.init40("app/looker.ini") # Or uncomment below to use environment variables instead, if you have set them. -# sdk = looker_sdk.init31('lookersdk-flask/looker.ini') +# sdk = looker_sdk.init40('lookersdk-flask/looker.ini') def get_my_user(): diff --git a/examples/python/lookersdk-flask/app/static/style.css b/examples/python/lookersdk-flask/app/static/style.css index 64b845d01..949d1e0f7 100644 --- a/examples/python/lookersdk-flask/app/static/style.css +++ b/examples/python/lookersdk-flask/app/static/style.css @@ -1,115 +1,118 @@ html { - font-family: Roboto,Arial,Helvetica,sans-serif; - background: white; - padding: 1rem; + font-family: Roboto, Arial, Helvetica, sans-serif; + background: white; + padding: 1rem; } body { - max-width: 960px; - margin: 0 auto; - background: white; - border-radius: 4px; + max-width: 960px; + margin: 0 auto; + background: white; + border-radius: 4px; } h1 { - font-family: Roboto,Arial,Helvetica,sans-serif; - color: #4285F4; - margin: 1rem 0; + font-family: Roboto, Arial, Helvetica, sans-serif; + color: #4285f4; + margin: 1rem 0; } a { - color: #4285F4; + color: #4285f4; } nav { - display: flex; - width: 960px; - justify-content: space-between; - padding: 0 0.5rem; + display: flex; + width: 960px; + justify-content: space-between; + padding: 0 0.5rem; } nav h1 { - flex: auto; - margin: 0; + flex: auto; + margin: 0; } nav h1 a { - text-decoration: none; - padding: 0.25rem 0.5rem; + text-decoration: none; + padding: 0.25rem 0.5rem; } nav ul { - display: flex; - list-style: none; - margin: 0; - padding: 0; + display: flex; + list-style: none; + margin: 0; + padding: 0; } -nav ul li a, nav ul li span, header .action { - display: block; - padding: 0.5rem; +nav ul li a, +nav ul li span, +header .action { + display: block; + padding: 0.5rem; } .content { - padding: 0 1rem 1rem; + padding: 0 1rem 1rem; } .content > header { - border-bottom: 1px solid #E8EAED; - display: flex; - align-items: flex-end; + border-bottom: 1px solid #e8eaed; + display: flex; + align-items: flex-end; } .content > header h1 { - flex: auto; - margin: 1rem 0 0.25rem 0; + flex: auto; + margin: 1rem 0 0.25rem 0; } .flash { - margin: 1em 0; - padding: 1em; - background: #8AB4F8; - border: 1px solid #4285F4; + margin: 1em 0; + padding: 1em; + background: #8ab4f8; + border: 1px solid #4285f4; } .post { - border-radius: 7px; - padding-left: 1em; - padding-right: 1em; - padding-bottom: 1em; - margin: 1em; - box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px; + border-radius: 7px; + padding-left: 1em; + padding-right: 1em; + padding-bottom: 1em; + margin: 1em; + box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px; } .post > header { - display: flex; - align-items: flex-end; - font-size: 0.85em; + display: flex; + align-items: flex-end; + font-size: 0.85em; } .post > header > div:first-of-type { - flex: auto; + flex: auto; } .post > header h1 { - font-size: 1.5em; - color: #202124; - margin-bottom: 0; + font-size: 1.5em; + color: #202124; + margin-bottom: 0; } .post .about { - color: #9AA0A6; - font-style: italic; + color: #9aa0a6; + font-style: italic; } .post .body { - white-space: pre-line; + white-space: pre-line; } .content:last-child { - margin-bottom: 0; + margin-bottom: 0; } .content form { - margin: 1em 0; - display: flex; - flex-direction: column; + margin: 1em 0; + display: flex; + flex-direction: column; } .content label { - font-weight: bold; - margin-bottom: 0.5em; + font-weight: bold; + margin-bottom: 0.5em; } -.content input, .content textarea { - margin-bottom: 1em; +.content input, +.content textarea { + margin-bottom: 1em; } .content textarea { - min-height: 12em; - resize: vertical; + min-height: 12em; + resize: vertical; } input.danger { - color: #EA4335; + color: #ea4335; } -input[type=submit] { - align-self: start; - min-width: 10em; +input[type='submit'] { + align-self: start; + min-width: 10em; } diff --git a/examples/python/lookersdk-flask/app/templates/auth/login.html b/examples/python/lookersdk-flask/app/templates/auth/login.html index b7dd5dc12..fdd4b28e6 100644 --- a/examples/python/lookersdk-flask/app/templates/auth/login.html +++ b/examples/python/lookersdk-flask/app/templates/auth/login.html @@ -1,15 +1,11 @@ -{% extends 'base.html' %} - -{% block header %} -

{% block title %}Log In{% endblock %}

+{% extends 'base.html' %} {% block header %} +

{% block title %}Log In{% endblock %}

+{% endblock %} {% block content %} +
+ + + + + +
{% endblock %} - -{% block content %} -
- - - - - -
-{% endblock %} \ No newline at end of file diff --git a/examples/python/lookersdk-flask/app/templates/auth/register.html b/examples/python/lookersdk-flask/app/templates/auth/register.html index a3c73cc99..e13922ddb 100644 --- a/examples/python/lookersdk-flask/app/templates/auth/register.html +++ b/examples/python/lookersdk-flask/app/templates/auth/register.html @@ -1,15 +1,11 @@ -{% extends 'base.html' %} - -{% block header %} -

{% block title %}Register{% endblock %}

+{% extends 'base.html' %} {% block header %} +

{% block title %}Register{% endblock %}

+{% endblock %} {% block content %} +
+ + + + + +
{% endblock %} - -{% block content %} -
- - - - - -
-{% endblock %} \ No newline at end of file diff --git a/examples/python/lookersdk-flask/app/templates/base.html b/examples/python/lookersdk-flask/app/templates/base.html index eef977ae3..7d873359c 100644 --- a/examples/python/lookersdk-flask/app/templates/base.html +++ b/examples/python/lookersdk-flask/app/templates/base.html @@ -1,42 +1,41 @@ {% block title %}{% endblock %} - Looker SDK Flask Example - +
-
- {% block header %}{% endblock %} -
+
{% block header %}{% endblock %}
{% for message in get_flashed_messages() %} -
{{ message }}
- {% endfor %} - - {% block content %}{% endblock %} -
\ No newline at end of file +
{{ message }}
+ {% endfor %} {% block content %}{% endblock %} + diff --git a/examples/python/lookersdk-flask/app/templates/blog/create.html b/examples/python/lookersdk-flask/app/templates/blog/create.html index 95babfeba..4eb7d2cbd 100644 --- a/examples/python/lookersdk-flask/app/templates/blog/create.html +++ b/examples/python/lookersdk-flask/app/templates/blog/create.html @@ -1,23 +1,18 @@ -{% extends 'base.html' %} - -{% block header %} -

{% block title %}New Post{% endblock %}

+{% extends 'base.html' %} {% block header %} +

{% block title %}New Post{% endblock %}

+{% endblock %} {% block content %} +
+ + + + + + + +
{% endblock %} - -{% block content %} -
- - - - - - - - -
-{% endblock %} \ No newline at end of file diff --git a/examples/python/lookersdk-flask/app/templates/blog/index.html b/examples/python/lookersdk-flask/app/templates/blog/index.html index ae1154064..4c22fce02 100644 --- a/examples/python/lookersdk-flask/app/templates/blog/index.html +++ b/examples/python/lookersdk-flask/app/templates/blog/index.html @@ -1,37 +1,35 @@ -{% extends 'base.html' %} +{% extends 'base.html' %} {% block header %} +

{% block title %}Posts{% endblock %}

+{% if session['user_id'] %} +New +{% endif %} {% endblock %} {% block content %} {% for post in posts %} +
+
+
+

{{ post['title'] }}

+
+ by {{ post['username'] }} on {{ post['created'].strftime('%Y-%m-%d') }} +
+
+ {% if session['user_id'] == post['author_id'] %} +
+
+ Edit +
+ {% endif %} +
+

{{ post['body'] }}

+
+ + +
+ View in Looker +
-{% block header %} -

{% block title %}Posts{% endblock %}

- {% if session['user_id'] %} - New - {% endif %} -{% endblock %} - -{% block content %} - {% for post in posts %} -
-
-
-

{{ post['title'] }}

-
by {{ post['username'] }} on {{ post['created'].strftime('%Y-%m-%d') }}
-
- {% if session['user_id'] == post['author_id'] %} -
-
- Edit -
- {% endif %} -
-

{{ post['body'] }}


- - -
View in Looker -
- - {% endfor %} - {% if posts|length < 1 %} -
-

No posts yet.

-
- {% endif %} -{% endblock %} \ No newline at end of file +{% endfor %} {% if posts|length < 1 %} +
+

No posts yet.

+
+{% endif %} {% endblock %} diff --git a/examples/python/lookersdk-flask/app/templates/blog/update.html b/examples/python/lookersdk-flask/app/templates/blog/update.html index 8fe5d4d90..5f7c27fdf 100644 --- a/examples/python/lookersdk-flask/app/templates/blog/update.html +++ b/examples/python/lookersdk-flask/app/templates/blog/update.html @@ -1,26 +1,33 @@ -{% extends 'base.html' %} - -{% block header %} -

{% block title %}Edit "{{ post['title'] }}"{% endblock %}

+{% extends 'base.html' %} {% block header %} +

{% block title %}Edit "{{ post['title'] }}"{% endblock %}

+{% endblock %} {% block content %} +
+ + + + + + + +
+
+
+ +
{% endblock %} - -{% block content %} -
- - - - - - - -
-
-
- -
-{% endblock %} \ No newline at end of file diff --git a/examples/python/lookml_model_explore.py b/examples/python/lookml_model_explore.py index 97e0b4146..a83a3c1c8 100644 --- a/examples/python/lookml_model_explore.py +++ b/examples/python/lookml_model_explore.py @@ -8,7 +8,7 @@ def get_field_values(model_name, explore_name): - sdk = looker_sdk.init31() + sdk = looker_sdk.init40() # API Call to pull in metadata about fields in a particular explore explore = sdk.lookml_model_explore( diff --git a/examples/python/manage_schedules.py b/examples/python/manage_schedules.py index 5e58fad18..be43f8c00 100644 --- a/examples/python/manage_schedules.py +++ b/examples/python/manage_schedules.py @@ -11,11 +11,11 @@ Authors: Lan -Last modified: July 18, 2021 +Last modified: Feb 27 2024 """ import looker_sdk -from looker_sdk import models40 +from looker_sdk import models40 as models sdk = looker_sdk.init40(config_file='../looker.ini', section='Looker') @@ -41,17 +41,17 @@ def get_schedules(id, content, user_id=None, all_users=True): def resume_schedules(id, content, enabled, user_id=None, all_users=True): - """ Pause or resume all schedules of a Look, or a dashboard - - Args: - id: id of the Looker content containing schedules - content(str): 'look', 'dashboard', or 'lookml_dashboard' - enabled (bool): set "True" to resume schedule, or "False" to pause schedule - - Notes: Schedules with "enabled = False" will disappear from Admin > Schedules in Looker UI but - their data can be retrived in Looker's System Activity. Once schedules are resumed with "enabled = True", - they will be sent once and reappear in Admin > Schedules - """ + """ Pause or resume all schedules of a Look, or a dashboard + + Args: + id: id of the Looker content containing schedules + content(str): 'look', 'dashboard', or 'lookml_dashboard' + enabled (bool): set "True" to resume schedule, or "False" to pause schedule + + Notes: Schedules with "enabled = False" will disappear from Admin > Schedules in Looker UI but + their data can be retrived in Looker's System Activity. Once schedules are resumed with "enabled = True", + they will be sent once and reappear in Admin > Schedules + """ "Get all schedules of a Looker content" schedules = get_schedules(id=id, content=content) @@ -59,7 +59,7 @@ def resume_schedules(id, content, enabled, user_id=None, all_users=True): for i in range(0, len(schedules)): sdk.update_scheduled_plan( scheduled_plan_id=schedules[i]['id'], - body=models40.WriteScheduledPlan( + body=models.WriteScheduledPlan( enabled = enabled )) @@ -70,16 +70,16 @@ def resume_schedules(id, content, enabled, user_id=None, all_users=True): def copy_schedules(from_id, to_id, content, user_id=None, all_users=True): - """ Copy schedules from one Looker content to another content. - This script has only been tested for content of the same type (i.e.: look to look, dashboard to dashboard) + """ Copy schedules from one Looker content to another content. + This script has only been tested for content of the same type (i.e.: look to look, dashboard to dashboard) - Args: - from_id: id of the Looker content containing schedules - to_id: id of the Looker content which schedules will be copied to - content(str): 'look', 'dashboard', or 'lookml_dashboard' - user_id(int, optional): If user_id is None then schedules owned by the user calling the API will be returned - all_users(bool, optional): If all_user is True then return schedules owned by all users - """ + Args: + from_id: id of the Looker content containing schedules + to_id: id of the Looker content which schedules will be copied to + content(str): 'look', 'dashboard', or 'lookml_dashboard' + user_id(int, optional): If user_id is None then schedules owned by the user calling the API will be returned + all_users(bool, optional): If all_user is True then return schedules owned by all users + """ "Get all schedules of a Looker content" schedules = get_schedules(id=from_id, content=content, user_id=user_id, all_users=all_users) @@ -88,7 +88,7 @@ def copy_schedules(from_id, to_id, content, user_id=None, all_users=True): for i in range(0, len(schedules)): # Write the base schedule plans with all required fields - body = models40.WriteScheduledPlan( + body = models.WriteScheduledPlan( # Required fields for all content type name = schedules[i]['name'], @@ -110,7 +110,7 @@ def copy_schedules(from_id, to_id, content, user_id=None, all_users=True): elif content == 'lookml_dashboard': body['lookml_dashboard_id'] = to_id - """Additional parameters can be added in the models40.WriteScheduledPlan() method for 'body', + """Additional parameters can be added in the models.WriteScheduledPlan() method for 'body', or through Python's dictionary syntax: body[parameter] = value """ diff --git a/examples/python/oauth_session.py b/examples/python/oauth_session.py index 7c3b28ea3..d17314930 100644 --- a/examples/python/oauth_session.py +++ b/examples/python/oauth_session.py @@ -5,7 +5,7 @@ import requests from looker_sdk.rtl import api_settings, auth_session, requests_transport -from looker_sdk.sdk.api31 import methods +from looker_sdk.sdk.api40 import methods from looker_sdk.rtl import serialize @@ -20,7 +20,7 @@ def oauth_interactive_roundtrip(): deserialize=serialize.deserialize31, serialize=serialize.serialize, crypto=auth_session.CryptoHash(), - version="3.1", + version="4.0", ) auth_code_request_url = session.create_auth_code_request_url("api", "mystate") with requests.Session() as s: @@ -60,8 +60,8 @@ def oauth_interactive_roundtrip(): params = urllib.parse.parse_qs(qs) assert "code" in params session.redeem_auth_code(params["code"][0]) - sdk = methods.Looker31SDK( - session, serialize.deserialize31, serialize.serialize, transport, "3.1" + sdk = methods.Looker40SDK( + session, serialize.deserialize31, serialize.serialize, transport, "4.0" ) me = sdk.me() print(f"Hi {me.first_name}, your user_id is {me.id}") diff --git a/examples/python/run_look_with_filters.py b/examples/python/run_look_with_filters.py index 4031ad820..67169d1d8 100644 --- a/examples/python/run_look_with_filters.py +++ b/examples/python/run_look_with_filters.py @@ -16,7 +16,7 @@ from typing import cast, Dict, List, Union import looker_sdk -from looker_sdk import models, error +from looker_sdk import models40 as models, error sdk = looker_sdk.init40("../../looker.ini") diff --git a/examples/python/simple_sample.py b/examples/python/simple_sample.py new file mode 100644 index 000000000..7ccdec952 --- /dev/null +++ b/examples/python/simple_sample.py @@ -0,0 +1,8 @@ +import looker_sdk +sdk = looker_sdk.init40(config_file='../../looker.ini') + +instance_url = sdk.get_setting(fields="host_url") +print(instance_url['host_url']) + +my_user = sdk.me() +print(my_user["first_name"]) \ No newline at end of file diff --git a/examples/python/test_connection.py b/examples/python/test_connection.py index 0cd3b46fd..7ab617138 100644 --- a/examples/python/test_connection.py +++ b/examples/python/test_connection.py @@ -7,7 +7,7 @@ Notes: Connections to Looker's internal database cannot be tested. -Last modified: August 25, 2021 +Last modified: Feb 27 2024 """ from functools import reduce @@ -15,7 +15,7 @@ from typing import cast, MutableSequence, Sequence import looker_sdk -from looker_sdk import models +from looker_sdk import models40 as models sdk = looker_sdk.init40("../../looker.ini") diff --git a/examples/ruby/README.md b/examples/ruby/README.md index a36b0ee52..a63e6c344 100644 --- a/examples/ruby/README.md +++ b/examples/ruby/README.md @@ -2,43 +2,51 @@ You can find Ruby language examples in this folder. - -Using Looker docs: https://docs.looker.com/reference/api-and-integration/api-reference +Using Looker docs: https://docs.looker.com/reference/api-and-integration/api-reference Using official Looker Ruby SDK: https://github.com/looker-open-source/looker-sdk-ruby Use cases with Looker API: -___________ + +--- + ### USERS 👤 + - Logout all users on the instance [[link]](logout_all_users.rb) - Disable users in the instance [[link]](disable_users.rb) - Get a list of all users and their auth credentials [[link]](users_list_and_auth_types.rb) - Add all users to a group [[link]](all_users_to_group.rb) +--- -___________ ### CODE 💾 + - Get a list of all the Git branches in the projects [[link]](all_git_branches.rb) - Validates the Looker **Projects** (LookML) [[link]](validate_projects.rb) - Get a list of all files per projects [[link]](list_files_per_project.rb) -___________ +--- + ### DELIVERY 📩 + - Render a Look as in PNG format [[link]](render_look_png.rb) - Create a schedule to run once to Google Cloud Storage [[link]](schedule_once_to_gcs.rb) - Stream results to S3 bucket [[link]](stream_to_s3.rb) - Re-run the failed schedules to email [[link]](rerun_failed_email_schedules.rb) - Download all dashboard tiles as standalone CSV files [[link]](download_dashboard.rb#L12-L33) -- Download all dashboard tiles as tabs in one Excel file [[link]](download_dashboard.rb#L36-L65) +- Download all dashboard tiles as tabs in one Excel file [[link]](download_dashboard.rb#L36-L65) - Test the integrations [[link]](test_integrations.rb) -___________ +--- + ### CONTENT 📊 + - Template to update Look [[link]](update_look.rb) - Automated testing for Look output between Development mode and Production mode [[link]](dev_vs_prod.rb) - Validates the Looker **Content** [[link]](validate_content.rb) - Delete old Looks [[link]](delete_unused_content.rb) -___________ +--- + ### OTHER 🌐 - Kill all running queries in the instance [[link]](kill_all_running_queries.rb) diff --git a/examples/ruby/test.rb b/examples/ruby/test.rb new file mode 100644 index 000000000..7c076b0c1 --- /dev/null +++ b/examples/ruby/test.rb @@ -0,0 +1,14 @@ +require 'looker-sdk' + +puts ENV['LOOKERSDK_CLIENT_ID'] +puts ENV['LOOKERSDK_CLIENT_SECRET'] +puts ENV['LOOKERSDK_BASE_URL'] + +# get API creds from environment variables +sdk = LookerSDK::Client.new( + :client_id => ENV['LOOKERSDK_CLIENT_ID'], + :client_secret => ENV['LOOKERSDK_CLIENT_SECRET'], + :api_endpoint => ENV['LOOKERSDK_BASE_URL'] +) + +puts sdk.me().to_s \ No newline at end of file diff --git a/examples/swift/sample-swift-sdk/README.md b/examples/swift/sample-swift-sdk/README.md index c95758324..b4e704007 100644 --- a/examples/swift/sample-swift-sdk/README.md +++ b/examples/swift/sample-swift-sdk/README.md @@ -1,13 +1,13 @@ -## Sample iOS Swift SDK Example +# Sample iOS Swift SDK Example -### Setting the Looker SDK configuration +## Setting the Looker SDK configuration -There are a couple different ways to configure the SDK for a Looker server. -This example sets them as environment variables. -To set the environment vars go to `Product`>`Scheme`>`Edit Scheme...` +There are a couple different ways to configure the SDK for a Looker server. +This example sets them as environment variables. +To set the environment vars go to `Product`>`Scheme`>`Edit Scheme...` and add - `LOOKERSDK_BASE_URL` for the Looker API server URL, like `https://foo.looker.com:19999` -- `LOOKER_API_VERSION` as `3.1` -- `LOOKERSDK_CLIENT_ID` for the API 3 Client ID -- `LOOKERSDK_CLIENT_SECRET` for the API 3 Client Secret +- `LOOKER_API_VERSION` as `4.0` +- `LOOKERSDK_CLIENT_ID` for the API Client ID +- `LOOKERSDK_CLIENT_SECRET` for the API Client Secret diff --git a/examples/swift/sample-swift-sdk/sample-swift-sdk/AppDelegate.swift b/examples/swift/sample-swift-sdk/sample-swift-sdk/AppDelegate.swift index 1e72dae99..2362e7f0b 100644 --- a/examples/swift/sample-swift-sdk/sample-swift-sdk/AppDelegate.swift +++ b/examples/swift/sample-swift-sdk/sample-swift-sdk/AppDelegate.swift @@ -16,8 +16,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { let config = ApiConfig() // In the scheme make sure to set // LOOKERSDK_BASE_URL to the API server url - // LOOKER_SDK_API_VERSION to 3.1 - // LOOKERSDK_CLIENT_ID to the API3 client id + // LOOKER_SDK_API_VERSION to 4.0 + // LOOKERSDK_CLIENT_ID to the API client id // LOOKERSDK_CLIENT_SECRET to the // as environment variables let xp = BaseTransport(config) diff --git a/examples/swift/sample-swift-sdk/sample-swift-sdk/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/swift/sample-swift-sdk/sample-swift-sdk/Assets.xcassets/AppIcon.appiconset/Contents.json index d8db8d65f..c950192fe 100644 --- a/examples/swift/sample-swift-sdk/sample-swift-sdk/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/examples/swift/sample-swift-sdk/sample-swift-sdk/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,98 +1,98 @@ { - "images" : [ + "images": [ { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" + "idiom": "iphone", + "size": "20x20", + "scale": "2x" }, { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" + "idiom": "iphone", + "size": "20x20", + "scale": "3x" }, { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" + "idiom": "iphone", + "size": "29x29", + "scale": "2x" }, { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" + "idiom": "iphone", + "size": "29x29", + "scale": "3x" }, { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" + "idiom": "iphone", + "size": "40x40", + "scale": "2x" }, { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" + "idiom": "iphone", + "size": "40x40", + "scale": "3x" }, { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" + "idiom": "iphone", + "size": "60x60", + "scale": "2x" }, { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" + "idiom": "iphone", + "size": "60x60", + "scale": "3x" }, { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "1x" + "idiom": "ipad", + "size": "20x20", + "scale": "1x" }, { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "2x" + "idiom": "ipad", + "size": "20x20", + "scale": "2x" }, { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" + "idiom": "ipad", + "size": "29x29", + "scale": "1x" }, { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" + "idiom": "ipad", + "size": "29x29", + "scale": "2x" }, { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" + "idiom": "ipad", + "size": "40x40", + "scale": "1x" }, { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" + "idiom": "ipad", + "size": "40x40", + "scale": "2x" }, { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" + "idiom": "ipad", + "size": "76x76", + "scale": "1x" }, { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" + "idiom": "ipad", + "size": "76x76", + "scale": "2x" }, { - "idiom" : "ipad", - "size" : "83.5x83.5", - "scale" : "2x" + "idiom": "ipad", + "size": "83.5x83.5", + "scale": "2x" }, { - "idiom" : "ios-marketing", - "size" : "1024x1024", - "scale" : "1x" + "idiom": "ios-marketing", + "size": "1024x1024", + "scale": "1x" } ], - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "version": 1, + "author": "xcode" } -} \ No newline at end of file +} diff --git a/examples/swift/sample-swift-sdk/sample-swift-sdk/Assets.xcassets/Contents.json b/examples/swift/sample-swift-sdk/sample-swift-sdk/Assets.xcassets/Contents.json index da4a164c9..97a8662eb 100644 --- a/examples/swift/sample-swift-sdk/sample-swift-sdk/Assets.xcassets/Contents.json +++ b/examples/swift/sample-swift-sdk/sample-swift-sdk/Assets.xcassets/Contents.json @@ -1,6 +1,6 @@ { - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "version": 1, + "author": "xcode" } -} \ No newline at end of file +} diff --git a/examples/swift/sample-swift-sdk/sample-swift-sdk/LookerSwiftSDK/apiSettings.swift b/examples/swift/sample-swift-sdk/sample-swift-sdk/LookerSwiftSDK/apiSettings.swift index 888b31382..af25292a5 100644 --- a/examples/swift/sample-swift-sdk/sample-swift-sdk/LookerSwiftSDK/apiSettings.swift +++ b/examples/swift/sample-swift-sdk/sample-swift-sdk/LookerSwiftSDK/apiSettings.swift @@ -55,7 +55,7 @@ struct DefaultSettings : IApiSettings { return [:] } var base_url: String? = ProcessInfo.processInfo.environment[strLookerBaseUrl] ?? "" - var api_version: String? = ProcessInfo.processInfo.environment[strLookerApiVersion] ?? "3.1" + var api_version: String? = ProcessInfo.processInfo.environment[strLookerApiVersion] ?? "4.0" var verify_ssl: Bool? = true var timeout: Int? = defaultTimeout var headers: Headers? diff --git a/examples/swift/sample-swift-sdk/sample-swift-sdk/LookerSwiftSDK/constants.swift b/examples/swift/sample-swift-sdk/sample-swift-sdk/LookerSwiftSDK/constants.swift index 332859f8f..8cca21424 100644 --- a/examples/swift/sample-swift-sdk/sample-swift-sdk/LookerSwiftSDK/constants.swift +++ b/examples/swift/sample-swift-sdk/sample-swift-sdk/LookerSwiftSDK/constants.swift @@ -59,8 +59,8 @@ extension String { } struct Constants { - static let lookerVersion = "6.23" - static let apiVersion = "3.1" + static let lookerVersion = "23.18" + static let apiVersion = "4.0" static let sdkVersion = #"\#(apiVersion).\#(lookerVersion)"# static let environmentPrefix = "LOOKERSDK" diff --git a/examples/swift/sample-swift-sdk/sample-swift-sdk/Preview Content/Preview Assets.xcassets/Contents.json b/examples/swift/sample-swift-sdk/sample-swift-sdk/Preview Content/Preview Assets.xcassets/Contents.json index da4a164c9..97a8662eb 100644 --- a/examples/swift/sample-swift-sdk/sample-swift-sdk/Preview Content/Preview Assets.xcassets/Contents.json +++ b/examples/swift/sample-swift-sdk/sample-swift-sdk/Preview Content/Preview Assets.xcassets/Contents.json @@ -1,6 +1,6 @@ { - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "version": 1, + "author": "xcode" } -} \ No newline at end of file +} diff --git a/examples/typescript/README.md b/examples/typescript/README.md index 6ccb27e6a..7216bc260 100644 --- a/examples/typescript/README.md +++ b/examples/typescript/README.md @@ -20,7 +20,6 @@ These examples assume that a `looker.ini` has been created in the root of the re 2. Run `yarn` to install the dependencies. 3. Run the examples - `yarn {command} [other command-line options]` - `yarn run-dual` - runs multiple apis example. - - `yarn run-tiny-dual` - runs the compact multiple apis example - `yarn run-config` - runs custom config reader example. - `yarn run-sudo` - runs sudo as user example. - `yarn run-tile` - runs download dashboard tile example. @@ -54,37 +53,36 @@ A very brief descriptions of the examples, and the link to the main example/proj |   Example Topic   | Discussion | | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [multiple APIs](dual.ts) | A simple example that shows how to use multiple versions of the API in the same file. The goal is to make iterative migration from an older API to a newer API in existing SDK code easier. | +| | | [custom configReader](customConfigReader.ts) | Shows how to implement a custom method of reading your configuration settings, including API credentials | | [SDK utilities](utils.ts) | This file has some SDK utility methods tasks like:
  • finding a dashboard by name
  • listing dashboards and ids
  • finding a tile on a dashboard
  • listing queryable tiles for a dashboard
  • a general-purpose `waitForRender` routine with progress ticks
| ### User management -|   Example Topic   | Discussion | -| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [sudo as user](sudoAsUser.ts) | Uses several User management SDK methods and shows how to `sudo` as a different user than the default API credentials user. Once the auth session is set to that user, subsequent SDK requests will be "as user ``" when submitted to the API.| -| [bulk generate api credentials](generateApiCredentials.ts) | Allows an admin to generate api credentials in bulk given a Looker role ID as input (Ex: generate api credentials for all users with the "Developer" role). +|   Example Topic   | Discussion | +| ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [sudo as user](sudoAsUser.ts) | Uses several User management SDK methods and shows how to `sudo` as a different user than the default API credentials user. Once the auth session is set to that user, subsequent SDK requests will be "as user ``" when submitted to the API. | +| [bulk generate api credentials](generateApiCredentials.ts) | Allows an admin to generate api credentials in bulk given a Looker role ID as input (Ex: generate api credentials for all users with the "Developer" role). | ### Schedules -|   Example Topic   | Discussion | -| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [bulk disable schedules](bulkDisableSchedules.ts) | This script allows an admin user to disable all user schedules OR just the schedules of a specific user. | -| [bulk reassign schedules](bulkReassignSchedules.ts) | This script allows allows an admin user to either reassign all user schedules OR a single user's schedules to a specified user. +|   Example Topic   | Discussion | +| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | +| [bulk disable schedules](bulkDisableSchedules.ts) | This script allows an admin user to disable all user schedules OR just the schedules of a specific user. | +| [bulk reassign schedules](bulkReassignSchedules.ts) | This script allows allows an admin user to either reassign all user schedules OR a single user's schedules to a specified user. | ### Git / LookML Project Validation -|   Example Topic   | Discussion | -| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [validate branch](validateBranch.ts) | Allows you to validate a given branch of a specific project in development mode, returning any validation errors that are surfaced. | +|   Example Topic   | Discussion | +| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | +| [validate branch](validateBranch.ts) | Allows you to validate a given branch of a specific project in development mode, returning any validation errors that are surfaced. | ### Connection / PDT -|   Example Topic   | Discussion | -| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [test connections](testDBConnections.ts) | Allows an admin user to run connection tests in bulk outputting a results object with the results of the test for each db connection in Looker. | -| [pdt mapping](dependencyGraph.ts) | This file allows you to map out your pdt dependencies for a given model in an output svg file. - +|   Example Topic   | Discussion | +| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| [test connections](testDBConnections.ts) | Allows an admin user to run connection tests in bulk outputting a results object with the results of the test for each db connection in Looker. | +| [pdt mapping](dependencyGraph.ts) | This file allows you to map out your pdt dependencies for a given model in an output svg file. | ### Downloading diff --git a/examples/typescript/bulkDisableSchedules.ts b/examples/typescript/bulkDisableSchedules.ts index e92d0e914..43e17d8d9 100644 --- a/examples/typescript/bulkDisableSchedules.ts +++ b/examples/typescript/bulkDisableSchedules.ts @@ -1,45 +1,45 @@ -import { LookerNodeSDK } from '@looker/sdk-node' -import { IScheduledPlan } from '@looker/sdk' +import { LookerNodeSDK } from '@looker/sdk-node'; +import { IScheduledPlan } from '@looker/sdk'; -const sdk = LookerNodeSDK.init40() +const sdk = LookerNodeSDK.init40(); // get schedules for all users (will require admin permissions for api caller) or for a specific user by id const getSchedules = async (userID?: number): Promise => { - let schedules: IScheduledPlan[] + let schedules: IScheduledPlan[]; if (userID) { schedules = await sdk.ok( sdk.all_scheduled_plans({ user_id: userID, all_users: false }) - ) + ); } else { - schedules = await sdk.ok(sdk.all_scheduled_plans({ all_users: true })) + schedules = await sdk.ok(sdk.all_scheduled_plans({ all_users: true })); } - return schedules -} + return schedules; +}; const bulkDisableSchedules = async ( userID?: number ): Promise => { - const schedules = await getSchedules(userID) + const schedules = await getSchedules(userID); try { schedules.forEach(async (s) => { if (s.id) { - await sdk.ok(sdk.update_scheduled_plan(s.id, { enabled: false })) + await sdk.ok(sdk.update_scheduled_plan(s.id, { enabled: false })); } - }) + }); // depending on whether userID is included or not we will change what we log to the console console.log( `Successfully disabled all schedules ${ userID ? `for user ${userID}.` : 'for all users.' }` - ) - return true + ); + return true; } catch (e) { throw new Error( `There was an error trying to disable schedules. Full error message: ${e}` - ) + ); } -} +}; // Examples // bulkDisableSchedules() diff --git a/examples/typescript/bulkReassignSchedules.ts b/examples/typescript/bulkReassignSchedules.ts index 3f30743b5..0416f9ff5 100644 --- a/examples/typescript/bulkReassignSchedules.ts +++ b/examples/typescript/bulkReassignSchedules.ts @@ -1,51 +1,51 @@ -import { LookerNodeSDK } from '@looker/sdk-node' -import { IScheduledPlan } from '@looker/sdk' +import { LookerNodeSDK } from '@looker/sdk-node'; +import { IScheduledPlan } from '@looker/sdk'; -const sdk = LookerNodeSDK.init40() +const sdk = LookerNodeSDK.init40(); // schedules will either return for all users or for a specific user id if passed const getSchedules = async (userID?: number): Promise => { - let schedules: IScheduledPlan[] + let schedules: IScheduledPlan[]; if (userID) { schedules = await sdk.ok( sdk.all_scheduled_plans({ user_id: userID, all_users: false }) - ) + ); } else { - schedules = await sdk.ok(sdk.all_scheduled_plans({ all_users: true })) + schedules = await sdk.ok(sdk.all_scheduled_plans({ all_users: true })); } - return schedules -} + return schedules; +}; const bulkReAssignSchedules = async ( newOwner: number, userID?: number ): Promise => { if (newOwner) { - const schedules = await getSchedules(userID) + const schedules = await getSchedules(userID); try { schedules.forEach(async (s) => { if (s.id) { - await sdk.ok(sdk.update_scheduled_plan(s.id, { user_id: newOwner })) + await sdk.ok(sdk.update_scheduled_plan(s.id, { user_id: newOwner })); } - }) + }); // depending on whether userID is included or not we will change what we log to the console console.log( `Successfully reassigned all schedules ${ userID ? `for user ${userID}` : 'for all users' } to ${newOwner}` - ) - return true + ); + return true; } catch (e) { throw new Error( `There was an error trying to disable schedules. Full error message: ${e}` - ) + ); } } else { throw new Error( 'Please specify at least the id of the new owner for schedules.' - ) + ); } -} +}; // Examples // bulkDisableSchedules(200) diff --git a/examples/typescript/customConfigReader.ts b/examples/typescript/customConfigReader.ts index 7079ff1f2..576dccc18 100644 --- a/examples/typescript/customConfigReader.ts +++ b/examples/typescript/customConfigReader.ts @@ -23,8 +23,8 @@ SOFTWARE. */ -import { NodeSettings, LookerNodeSDK } from '@looker/sdk-node' -import { IApiSettings, IApiSection } from '@looker/sdk-rtl' +import { NodeSettings, LookerNodeSDK } from '@looker/sdk-node'; +import { IApiSettings, IApiSection } from '@looker/sdk-rtl'; /** * @class CustomConfigReader @@ -35,7 +35,7 @@ import { IApiSettings, IApiSection } from '@looker/sdk-rtl' */ class CustomConfigReader extends NodeSettings { constructor(settings: IApiSettings) { - super('', settings) + super('', settings); } /** @@ -45,21 +45,21 @@ class CustomConfigReader extends NodeSettings { return { client_id: 'clientId', client_secret: 'clientSecret', - } + }; } } -;(async () => { - const sdk = LookerNodeSDK.init31( +(async () => { + const sdk = LookerNodeSDK.init40( new CustomConfigReader({ base_url: 'https://:19999', } as IApiSettings) - ) + ); const me = await sdk.ok( sdk.me( 'id, first_name, last_name, display_name, email, personal_space_id, home_space_id, group_ids, role_ids' ) - ) - console.log({ me }) -})() + ); + console.log({ me }); +})(); diff --git a/examples/typescript/dependencyGraph.ts b/examples/typescript/dependencyGraph.ts index d1a369578..f7a824786 100644 --- a/examples/typescript/dependencyGraph.ts +++ b/examples/typescript/dependencyGraph.ts @@ -1,27 +1,27 @@ -import { LookerNodeSDK } from '@looker/sdk-node' -import { renderDot } from 'render-dot' -import * as fs from 'fs' +import { LookerNodeSDK } from '@looker/sdk-node'; +import { renderDot } from 'render-dot'; +import * as fs from 'fs'; -const sdk = LookerNodeSDK.init40() +const sdk = LookerNodeSDK.init40(); // returns an svg file with the pdt dependency graph viz const getPDTGraph = async (modelname: string, filename: string) => { if (modelname) { const res = await sdk.ok( sdk.graph_derived_tables_for_model({ model: modelname }) - ) + ); const result = await renderDot({ input: res.graph_text, format: 'svg', - }) - const file = fs.writeFileSync(filename, result, 'binary') - return file + }); + const file = fs.writeFileSync(filename, result, 'binary'); + return file; } else { throw Error( `Model name not specified, please specifiy a model name to pull pdt dependency graph for.` - ) + ); } -} +}; // Example //getPDTGraph('pdtgraph') diff --git a/examples/typescript/downloadDashboard.ts b/examples/typescript/downloadDashboard.ts index 9ab43bf4d..e50afdb0b 100644 --- a/examples/typescript/downloadDashboard.ts +++ b/examples/typescript/downloadDashboard.ts @@ -24,48 +24,48 @@ */ -import * as fs from 'fs' +import * as fs from 'fs'; import { Looker40SDK as LookerSDK, IDashboard, IRequestCreateDashboardRenderTask, -} from '@looker/sdk' -import { NodeSettingsIniFile, NodeSession } from '@looker/sdk-node' -import { getDashboard, rootIni, waitForRender } from './utils' +} from '@looker/sdk'; +import { NodeSettingsIniFile, NodeSession } from '@looker/sdk-node'; +import { getDashboard, rootIni, waitForRender } from './utils'; -const localConfig = rootIni() +const localConfig = rootIni(); /** * * @type {NodeSettingsIniFile} Settings retrieved from the configuration file */ -const settings = new NodeSettingsIniFile('', localConfig, 'Looker') +const settings = new NodeSettingsIniFile('', localConfig, 'Looker'); /** * Automatic authentication support for the Node SDK * @type {NodeSession} Initialized node-based session manager */ -const session = new NodeSession(settings) +const session = new NodeSession(settings); /** * Initialized SDK object * @type {LookerSDK} SDK object configured for use with Node */ -const sdk = new LookerSDK(session) +const sdk = new LookerSDK(session); /** * Read command-line parameters. Still have a bug for png argument * @returns {{dashboardTitle: string, renderFormat: string}} */ const getParams = () => { - const offset = 1 + const offset = 1; return { dashboardTitle: process.argv.length > offset + 1 ? process.argv[offset + 1] : '', outputFormat: process.argv.length > offset + 2 ? process.argv[offset + 2] : 'pdf', - } -} + }; +}; /** * Download a dashboard using a render task @@ -79,7 +79,7 @@ const downloadDashboard = async ( dashboard: IDashboard, format: string ) => { - let fileName + let fileName; try { const req: IRequestCreateDashboardRenderTask = { dashboard_id: dashboard.id!, @@ -87,49 +87,49 @@ const downloadDashboard = async ( body: {}, width: 1920, height: 1080, - } - const task = await sdk.ok(sdk.create_dashboard_render_task(req)) + }; + const task = await sdk.ok(sdk.create_dashboard_render_task(req)); if (!task || !task.id) { - console.error(`Could not create a render task for ${dashboard.title}`) - return + console.error(`Could not create a render task for ${dashboard.title}`); + return; } - const result = await waitForRender(sdk, task.id!) + const result = await waitForRender(sdk, task.id!); if (result) { - fileName = `${dashboard.title}.${format}` + fileName = `${dashboard.title}.${format}`; fs.writeFile(fileName, result, 'binary', (err) => { if (err) { - fileName = undefined - console.error(err) + fileName = undefined; + console.error(err); } - }) + }); } } catch (err) { - console.error(`'${format}' is probably not a valid format`) - console.error(err) + console.error(`'${format}' is probably not a valid format`); + console.error(err); } - return fileName -} -;(async () => { - const { dashboardTitle, outputFormat } = getParams() + return fileName; +}; +(async () => { + const { dashboardTitle, outputFormat } = getParams(); if (!dashboardTitle) { - console.warn('Please provide: []') + console.warn('Please provide: []'); console.warn( ' outputFormat defaults to "pdf". png and jpg are also supported.' - ) - return + ); + return; } - console.log(`Rendering dashboard "${dashboardTitle}" as ${outputFormat} ...`) + console.log(`Rendering dashboard "${dashboardTitle}" as ${outputFormat} ...`); - const dashboard = await getDashboard(sdk, dashboardTitle) + const dashboard = await getDashboard(sdk, dashboardTitle); if (dashboard) { - const fileName = await downloadDashboard(sdk, dashboard, outputFormat) - console.log(`open "${fileName}" to see the download`) + const fileName = await downloadDashboard(sdk, dashboard, outputFormat); + console.log(`open "${fileName}" to see the download`); } - await sdk.authSession.logout() // logout of API session + await sdk.authSession.logout(); // logout of API session if (!sdk.authSession.isAuthenticated()) { - console.log('Logout successful') + console.log('Logout successful'); } -})() +})(); diff --git a/examples/typescript/downloadTile.ts b/examples/typescript/downloadTile.ts index 39f0245b0..7632e6e9a 100644 --- a/examples/typescript/downloadTile.ts +++ b/examples/typescript/downloadTile.ts @@ -24,51 +24,56 @@ */ -import * as fs from 'fs' -import { Readable } from 'stream' +import * as fs from 'fs'; +import { Readable } from 'stream'; import { Looker40SDK as LookerSDK, IDashboardElement, IRequestRunQuery, Looker40SDKStream, -} from '@looker/sdk' -import { NodeSettingsIniFile, NodeSession } from '@looker/sdk-node' -import { getDashboard, getDashboardTile, rootIni, waitForRender } from './utils' +} from '@looker/sdk'; +import { NodeSettingsIniFile, NodeSession } from '@looker/sdk-node'; +import { + getDashboard, + getDashboardTile, + rootIni, + waitForRender, +} from './utils'; -const localConfig = rootIni() +const localConfig = rootIni(); /** * * @type {NodeSettingsIniFile} Settings retrieved from the configuration file */ -const settings = new NodeSettingsIniFile('', localConfig, 'Looker') +const settings = new NodeSettingsIniFile('', localConfig, 'Looker'); /** * Automatic authentication support for the Node SDK * @type {NodeSession} Initialized node-based session manager */ -const session = new NodeSession(settings) +const session = new NodeSession(settings); /** * Initialized SDK object * @type {LookerSDK} SDK object configured for use with Node */ -const sdk = new LookerSDK(session) +const sdk = new LookerSDK(session); /** * Read command-line parameters. Still have a bug for png argument * @returns {{dashboardTitle: string, tileTitle: string, renderFormat: string}} */ const getParams = () => { - const offset = 1 + const offset = 1; return { dashboardTitle: process.argv.length > offset + 1 ? process.argv[offset + 1] : '', tileTitle: process.argv.length > offset + 2 ? process.argv[offset + 2] : '', outputFormat: process.argv.length > offset + 3 ? process.argv[offset + 3] : 'png', - } -} + }; +}; /** * Is this format renderable? @@ -76,9 +81,9 @@ const getParams = () => { * @returns {boolean} true if render_task can be used for this format */ const isRenderable = (format: string) => { - format = format.toLowerCase() - return format === 'png' || format === 'jpg' -} + format = format.toLowerCase(); + return format === 'png' || format === 'jpg'; +}; /** * Renders a dashboard tile's query as PNG or JPG @@ -99,27 +104,27 @@ const renderTile = async ( width = 640, height = 480 ) => { - let fileName + let fileName; const task = await sdk.ok( sdk.create_query_render_task(tile.query_id!, format, width, height) - ) + ); if (!task || !task.id) { - throw new Error(`Could not create a render task for ${tile.title}`) + throw new Error(`Could not create a render task for ${tile.title}`); } - const result = await waitForRender(sdk, task.id!) + const result = await waitForRender(sdk, task.id!); if (result) { - fileName = `${tile.title}.${format}` + fileName = `${tile.title}.${format}`; fs.writeFile(fileName, result, 'binary', (err) => { if (err) { - fileName = undefined // no file was created - throw err + fileName = undefined; // no file was created + throw err; } - }) + }); } - return fileName -} + return fileName; +}; /** * Use the streaming SDK to download a tile's query @@ -133,31 +138,31 @@ const downloadTileAs = async ( tile: IDashboardElement, format: string ) => { - let fileName - fileName = `${tile.title}.${format}` + let fileName; + fileName = `${tile.title}.${format}`; - const writer = fs.createWriteStream(fileName) + const writer = fs.createWriteStream(fileName); const request: IRequestRunQuery = { result_format: format, query_id: tile.query_id!, // apply_formatting: true, // apply_vis: true - } - const sdkStream = new Looker40SDKStream(sdk.authSession) + }; + const sdkStream = new Looker40SDKStream(sdk.authSession); await sdkStream.run_query(async (readable: Readable) => { return new Promise((resolve, reject) => { readable .pipe(writer) .on('error', () => { - fileName = undefined - throw reject + fileName = undefined; + throw reject; }) - .on('finish', resolve) - }) - }, request) + .on('finish', resolve); + }); + }, request); - return fileName -} + return fileName; +}; /** * Download a dashboard tile in any of its supported formats @@ -171,49 +176,51 @@ const downloadTile = async ( tile: IDashboardElement, format: string ) => { - let fileName + let fileName; if (!tile.query_id) { - console.error(`Tile ${tile.title} does not have a query`) - return + console.error(`Tile ${tile.title} does not have a query`); + return; } try { if (isRenderable(format)) { - fileName = await renderTile(sdk, tile, format) + fileName = await renderTile(sdk, tile, format); } else { // just try downloading the query results - fileName = await downloadTileAs(sdk, tile, format) + fileName = await downloadTileAs(sdk, tile, format); } } catch (err) { - console.error(`'${format}' is probably not a valid format`) - console.error(err) + console.error(`'${format}' is probably not a valid format`); + console.error(err); } - return fileName -} -;(async () => { - const { dashboardTitle, tileTitle, outputFormat } = getParams() + return fileName; +}; +(async () => { + const { dashboardTitle, tileTitle, outputFormat } = getParams(); if (!dashboardTitle || !tileTitle) { - console.warn('Please provide: []') + console.warn( + 'Please provide: []' + ); console.warn( ' outputFormat defaults to "png". Many other formats are also supported. Refer to the run_query documentation for options.' - ) - return + ); + return; } - const action = isRenderable(outputFormat) ? 'Rendering' : 'Downloading' + const action = isRenderable(outputFormat) ? 'Rendering' : 'Downloading'; console.log( `${action} dashboard "${dashboardTitle}" tile "${tileTitle}" as ${outputFormat} ...` - ) + ); - const dashboard = await getDashboard(sdk, dashboardTitle) + const dashboard = await getDashboard(sdk, dashboardTitle); if (dashboard) { - const tile = getDashboardTile(dashboard, tileTitle) + const tile = getDashboardTile(dashboard, tileTitle); if (tile) { - const fileName = await downloadTile(sdk, tile, outputFormat) - console.log(`open "${fileName}" to see the download`) + const fileName = await downloadTile(sdk, tile, outputFormat); + console.log(`open "${fileName}" to see the download`); } } - await sdk.authSession.logout() // logout of API session + await sdk.authSession.logout(); // logout of API session if (!sdk.authSession.isAuthenticated()) { - console.log('Logout successful') + console.log('Logout successful'); } -})() +})(); diff --git a/examples/typescript/dual.ts b/examples/typescript/dual.ts deleted file mode 100644 index 6d9bccdf4..000000000 --- a/examples/typescript/dual.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* - - MIT License - - Copyright (c) 2021 Looker Data Sciences, Inc. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - */ - -import { Looker40SDK, Looker31SDK } from '@looker/sdk' -import { NodeSession, NodeSettingsIniFile } from '@looker/sdk-node' -import { rootIni } from './utils' - -const localConfig = rootIni() -const settings = new NodeSettingsIniFile('', localConfig, 'Looker') -const session = new NodeSession(settings) -const sdk = new Looker40SDK(session) -const sdk31 = new Looker31SDK(session) -;(async () => { - const [me40, me31] = await Promise.all([sdk.ok(sdk.me()), sdk.ok(sdk31.me())]) - if (me40.id === me31.id) { - console.log('Congratulations! You are using dual SDKs!') - } -})() diff --git a/examples/typescript/generateApiCredentials.ts b/examples/typescript/generateApiCredentials.ts index b316ac7ff..907584194 100644 --- a/examples/typescript/generateApiCredentials.ts +++ b/examples/typescript/generateApiCredentials.ts @@ -1,11 +1,11 @@ -import { LookerNodeSDK } from '@looker/sdk-node' +import { LookerNodeSDK } from '@looker/sdk-node'; interface Api3SuccessBody { - success: boolean - usersWithNewCredentials: Array + success: boolean; + usersWithNewCredentials: Array; } -const sdk = LookerNodeSDK.init40() +const sdk = LookerNodeSDK.init40(); const generateApiCredentials = async ( roleID: number @@ -13,29 +13,29 @@ const generateApiCredentials = async ( // grab all users and return id, credentials_api3, and role_ids parameters const usersWithoutCredentials = await sdk.ok( sdk.all_users({ fields: 'id, credentials_api3, role_ids' }) - ) + ); // filter those users for those with no api credentials (ie. empty array) and for those that have the role caller specifies const filteredUsers = usersWithoutCredentials.filter( (u) => u.credentials_api3.length == 0 && u.role_ids.includes(roleID) - ) + ); const res: Api3SuccessBody = { success: true, // array holding user with new generated api3 credentials usersWithNewCredentials: [], - } + }; filteredUsers.forEach(async (user: any) => { try { //pass empty body here, patch endpoint requires but is not actually used by the call - res.usersWithNewCredentials.push(user.id) - await sdk.ok(sdk.create_user_credentials_api3(user.id, {})) + res.usersWithNewCredentials.push(user.id); + await sdk.ok(sdk.create_user_credentials_api3(user.id, {})); } catch (e) { throw new Error( `There was an error generating api3 crenetials for user ${user.id}. Full error: ${e}.` - ) + ); } - }) - return res -} + }); + return res; +}; // Example //generateApiCredentials(148) diff --git a/examples/typescript/index.ts b/examples/typescript/index.ts index 248a3642e..19b036602 100644 --- a/examples/typescript/index.ts +++ b/examples/typescript/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -console.log('Please read the README.md') +console.log('Please read the README.md'); diff --git a/examples/typescript/sudoAsUser.ts b/examples/typescript/sudoAsUser.ts index 7a8849efd..19910bdeb 100644 --- a/examples/typescript/sudoAsUser.ts +++ b/examples/typescript/sudoAsUser.ts @@ -24,27 +24,27 @@ */ -import { Looker40SDK as LookerSDK } from '@looker/sdk' -import { IAuthSession } from '@looker/sdk-rtl' -import { NodeSettingsIniFile, NodeSession } from '@looker/sdk-node' -import { rootIni } from './utils' +import { Looker40SDK as LookerSDK } from '@looker/sdk'; +import { IAuthSession } from '@looker/sdk-rtl'; +import { NodeSettingsIniFile, NodeSession } from '@looker/sdk-node'; +import { rootIni } from './utils'; -const localConfig = rootIni() +const localConfig = rootIni(); /** Settings retrieved from the configuration file */ -const settings = new NodeSettingsIniFile('', localConfig, 'Looker') +const settings = new NodeSettingsIniFile('', localConfig, 'Looker'); /** * Automatic authentication support for the Node SDK * Initialized node-based session manager */ -const session = new NodeSession(settings) +const session = new NodeSession(settings); /** Initialized SDK object for the Node runtime */ -const sdk = new LookerSDK(session) +const sdk = new LookerSDK(session); /** email matching pattern for searching users */ -const emailPattern = 'test%' +const emailPattern = 'test%'; /** * Find a different user than the specified user @@ -55,38 +55,38 @@ const emailPattern = 'test%' const anyoneButMe = async (userId: number, emailPattern: string) => { const all = await sdk.ok( sdk.search_users({ email: emailPattern, page: 1, per_page: 2 }) - ) + ); if (!all || all.length === 0) { - console.warn(`No matches for ${emailPattern}`) - return undefined + console.warn(`No matches for ${emailPattern}`); + return undefined; } // find a user who is not the specified user const [other] = all .filter((u) => u.id !== userId && !u.is_disabled) - .slice(0, 1) - return other -} -;(async () => { + .slice(0, 1); + return other; +}; +(async () => { const userFields = - 'id, first_name, last_name, display_name, email, personal_space_id, home_space_id, group_ids, role_ids' + 'id, first_name, last_name, display_name, email, personal_space_id, home_space_id, group_ids, role_ids'; // retrieve your user account to verify correct credentials - const me = await sdk.ok(sdk.me(userFields)) + const me = await sdk.ok(sdk.me(userFields)); if (!me) { - console.warn('API authentication failed') - return + console.warn('API authentication failed'); + return; } - console.log({ me }) - const sudoUser = await anyoneButMe(me.id!, emailPattern) + console.log({ me }); + const sudoUser = await anyoneButMe(me.id!, emailPattern); if (sudoUser) { - const auth = sdk.authSession as IAuthSession - await auth.login(sudoUser.id) - const sudo = await sdk.ok(sdk.me(userFields)) - console.log({ sudo }) - await sdk.authSession.logout() // logout of sudo + const auth = sdk.authSession as IAuthSession; + await auth.login(sudoUser.id); + const sudo = await sdk.ok(sdk.me(userFields)); + console.log({ sudo }); + await sdk.authSession.logout(); // logout of sudo } - await sdk.authSession.logout() // logout of API session + await sdk.authSession.logout(); // logout of API session if (!sdk.authSession.isAuthenticated()) { - console.log('Logout successful') + console.log('Logout successful'); } -})() +})(); diff --git a/examples/typescript/testDBConnections.ts b/examples/typescript/testDBConnections.ts index 9a75a38c5..1c4dbcbe1 100644 --- a/examples/typescript/testDBConnections.ts +++ b/examples/typescript/testDBConnections.ts @@ -1,25 +1,25 @@ -import { LookerNodeSDK } from '@looker/sdk-node' -import { IDBConnection } from '@looker/sdk' -import { DelimArray } from '@looker/sdk-rtl' +import { LookerNodeSDK } from '@looker/sdk-node'; +import { IDBConnection } from '@looker/sdk'; +import { DelimArray } from '@looker/sdk-rtl'; interface ConnectionTestObj { - connectionName: string + connectionName: string; tests: { - name: string - status: string - message: string - }[] + name: string; + status: string; + message: string; + }[]; } -const sdk = LookerNodeSDK.init40() +const sdk = LookerNodeSDK.init40(); const getConnections = async (): Promise => { - const connections = await sdk.ok(sdk.all_connections('name, id, dialect')) - return connections -} + const connections = await sdk.ok(sdk.all_connections('name, id, dialect')); + return connections; +}; const runConnectionTests = async (): Promise => { - const connections = await getConnections() + const connections = await getConnections(); // loop through all connections run connection test and return connection test obj const tests: ConnectionTestObj[] = await Promise.all( connections.map(async (c) => { @@ -29,7 +29,7 @@ const runConnectionTests = async (): Promise => { c.name, new DelimArray(c.dialect.connection_tests) ) - ) + ); // return formmatted connection test object return { connectionName: c.name, @@ -39,20 +39,20 @@ const runConnectionTests = async (): Promise => { name: c.name, status: c.status, message: c.message, - } + }; }), - } + }; } catch (e) { // in case of misconfigured connection settings that cause the test_connection() method to error // log error in console and continue loop console.error( `There was an error running connection test for ${c.name}. Full error: ${e}` - ) + ); } }) - ) - return tests -} + ); + return tests; +}; // Example //runConnectionTests() diff --git a/examples/typescript/tinyDual.ts b/examples/typescript/tinyDual.ts deleted file mode 100644 index cbaaa9b37..000000000 --- a/examples/typescript/tinyDual.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* - - MIT License - - Copyright (c) 2021 Looker Data Sciences, Inc. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - */ - -import { NodeSession, NodeSettingsIniFile } from '@looker/sdk-node' -import { functionalSdk40, functionalSdk31 } from '@looker/sdk' -import { me } from '@looker/sdk/lib/4.0/funcs' -import { me as me31 } from '@looker/sdk/lib/3.1/funcs' -import { rootIni } from './utils' - -const localConfig = rootIni() -const settings = new NodeSettingsIniFile('', localConfig, 'Looker') -const session = new NodeSession(settings) -const sdk = functionalSdk40(session) -const sdk31 = functionalSdk31(session) -;(async () => { - const [resp, resp31] = await Promise.all([ - sdk.ok(me(sdk)), - sdk.ok(me31(sdk31)), - ]) - if (resp.id === resp31.id) { - console.log('Congratulations! You are using dual SDKs!') - console.log({ resp, resp31 }) - } -})() diff --git a/examples/typescript/utils.ts b/examples/typescript/utils.ts index 1f44b9e8b..9fa870a63 100644 --- a/examples/typescript/utils.ts +++ b/examples/typescript/utils.ts @@ -24,25 +24,25 @@ */ -import path from 'path' -import { Looker40SDK as LookerSDK, IDashboard, IRenderTask } from '@looker/sdk' +import path from 'path'; +import { Looker40SDK as LookerSDK, IDashboard, IRenderTask } from '@looker/sdk'; /** * Resolve a file name relative to the root of the repository * @param fileName to path to the root relative to the examples folder */ export const rootFile = (fileName: string) => { - const result = path.join(__dirname, '/../..', fileName) - return result -} + const result = path.join(__dirname, '/../..', fileName); + return result; +}; /** * Path the ini file name to the root folder of the repository * @param fileName name of ini file. defaults to `looker.ini` */ export const rootIni = (fileName = 'looker.ini') => { - return rootFile(fileName) -} + return rootFile(fileName); +}; /** * Find a dashboard by title @@ -51,15 +51,15 @@ export const rootIni = (fileName = 'looker.ini') => { * @returns {Promise} the matched dashboard */ export const getDashboard = async (sdk: LookerSDK, title: string) => { - const [dash] = await sdk.ok(sdk.search_dashboards({ title })) + const [dash] = await sdk.ok(sdk.search_dashboards({ title })); if (!dash) { - console.warn(`No dashboard titled "${title}" was found`) - const all = await sdk.ok(sdk.all_dashboards('id,title')) - const titles = all.map((t) => `${t.id}:${t.title}`) - console.log(`Available dashboards are:\n${titles.join('\n')}\n`) + console.warn(`No dashboard titled "${title}" was found`); + const all = await sdk.ok(sdk.all_dashboards('id,title')); + const titles = all.map((t) => `${t.id}:${t.title}`); + console.log(`Available dashboards are:\n${titles.join('\n')}\n`); } - return dash -} + return dash; +}; /** * Get a tile by title from a dashboard @@ -68,20 +68,22 @@ export const getDashboard = async (sdk: LookerSDK, title: string) => { * @returns {IDashboardElement | undefined} Returns the found tile or undefined */ export const getDashboardTile = (dash: IDashboard, title: string) => { - title = title.toLowerCase() - if (!dash.dashboard_elements) return undefined + title = title.toLowerCase(); + if (!dash.dashboard_elements) return undefined; const [tile] = dash.dashboard_elements.filter( (t) => String(t.title).toLowerCase() === title - ) + ); if (!tile) { - console.warn(`No tile titled "${title}" found on Dashboard "${dash.title}"`) + console.warn( + `No tile titled "${title}" found on Dashboard "${dash.title}"` + ); const tiles = dash.dashboard_elements .filter((t) => typeof t.query_id === 'number') - .map((t) => t.title) - console.log(`Available tiles with queries are:\n${tiles.join('\n')}\n`) + .map((t) => t.title); + console.log(`Available tiles with queries are:\n${tiles.join('\n')}\n`); } - return tile -} + return tile; +}; /** * Wait specified milliseconds @@ -90,9 +92,9 @@ export const getDashboardTile = (dash: IDashboard, title: string) => { */ export const sleep = async (ms: number) => { return new Promise((resolve) => { - setTimeout(resolve, ms) - }) -} + setTimeout(resolve, ms); + }); +}; /** * Progress ticker callback type @@ -100,7 +102,7 @@ export const sleep = async (ms: number) => { export type ProgressTicker = ( elapsed: number, message: string | IRenderTask -) => void +) => void; /** * Default render progress tick reporter @@ -110,22 +112,22 @@ export type ProgressTicker = ( const defaultProgress = (elapsed: number, message: string | IRenderTask) => { if (typeof message === 'string') { if (elapsed >= 0) { - console.log(`${elapsed} seconds elapsed ${message}`) + console.log(`${elapsed} seconds elapsed ${message}`); } else { - console.log(message) + console.log(message); } } else { // expected to be a poll if we got here - const poll = message as IRenderTask + const poll = message as IRenderTask; if (poll.status === 'failure') { - console.error('Render failed. Details:') - console.error({ poll }) - const err = new Error() - err.message = `${poll.status}: ${poll.status_detail} for ${poll.result_format} render by User ID ${poll.user_id}` - throw err + console.error('Render failed. Details:'); + console.error({ poll }); + const err = new Error(); + err.message = `${poll.status}: ${poll.status_detail} for ${poll.result_format} render by User ID ${poll.user_id}`; + throw err; } } -} +}; /** * General-purpose "wait for render task to complete" function @@ -142,19 +144,19 @@ export const waitForRender = async ( pause = 0.5 ) => { // poll the render task until it completes - let elapsed = 0.0 - const delay = pause * 1000 // convert seconds to milliseconds + let elapsed = 0.0; + const delay = pause * 1000; // convert seconds to milliseconds while (true) { - const poll = await sdk.ok(sdk.render_task(taskId)) + const poll = await sdk.ok(sdk.render_task(taskId)); if (poll.status === 'failure') { - progressTick(-1, poll) - return + progressTick(-1, poll); + return; } if (poll.status === 'success') { - break + break; } - await sleep(delay) - progressTick((elapsed += pause), '') + await sleep(delay); + progressTick((elapsed += pause), ''); } - return await sdk.ok(sdk.render_task_results(taskId)) -} + return await sdk.ok(sdk.render_task_results(taskId)); +}; diff --git a/examples/typescript/validateBranch.ts b/examples/typescript/validateBranch.ts index b98eb858f..f653fbe0a 100644 --- a/examples/typescript/validateBranch.ts +++ b/examples/typescript/validateBranch.ts @@ -1,7 +1,7 @@ -import { LookerNodeSDK } from '@looker/sdk-node' -import { IProjectError } from '@looker/sdk' +import { LookerNodeSDK } from '@looker/sdk-node'; +import { IProjectError } from '@looker/sdk'; -const sdk = LookerNodeSDK.init40() +const sdk = LookerNodeSDK.init40(); // this will validate lookml in development mode const validateBranch = async ( @@ -9,33 +9,33 @@ const validateBranch = async ( branch: string ): Promise => { // check current workspace, if prod switch to dev (needed to be able to checkout a different git branch) - const workspace = await sdk.ok(sdk.session()) - console.log(JSON.stringify(workspace)) + const workspace = await sdk.ok(sdk.session()); + console.log(JSON.stringify(workspace)); if (workspace.workspace_id == 'production') { const updatedWorkspace = await sdk.ok( sdk.update_session({ workspace_id: 'dev' }) - ) - console.log(JSON.stringify(updatedWorkspace)) + ); + console.log(JSON.stringify(updatedWorkspace)); } - const currentBranch = await sdk.ok(sdk.git_branch(projectName)) + const currentBranch = await sdk.ok(sdk.git_branch(projectName)); // compare the current branch of the user to that inputted, if different update git branch of user to that which is specified if (currentBranch.name == branch) { try { - const validateResults = await sdk.ok(sdk.validate_project(projectName)) + const validateResults = await sdk.ok(sdk.validate_project(projectName)); if (validateResults.errors.length > 0) { console.log( `There are errors with this lookml project. Errors: ${JSON.stringify( validateResults.errors )}` - ) - return validateResults.errors + ); + return validateResults.errors; } else { - console.log('There are no errors with this lookml project.') + console.log('There are no errors with this lookml project.'); } } catch (e) { throw new Error( `There was an error validating this project. Here is the full message: ${e}.` - ) + ); } } else { try { @@ -43,25 +43,25 @@ const validateBranch = async ( sdk.update_git_branch(projectName, { name: branch, }) - ) + ); } catch (e) { throw new Error( `There was an error checking out ${branch}. Check to make sure the branch inputted is a valid branch in the repo. Error: ${e}.` - ) + ); } - const validateResults = await sdk.ok(sdk.validate_project(projectName)) + const validateResults = await sdk.ok(sdk.validate_project(projectName)); if (validateResults.errors.length > 0) { console.log( `There are errors with this lookml project. Errors: ${JSON.stringify( validateResults.errors )}` - ) - return validateResults.errors + ); + return validateResults.errors; } else { - console.log('There are no errors with this lookml project.') + console.log('There are no errors with this lookml project.'); } } -} +}; // Example //validateBranch('luka_thesis', 'dev-lukas-fontanilla-2z5k') diff --git a/examplesIndex.json b/examplesIndex.json index f61225723..226ecf737 100644 --- a/examplesIndex.json +++ b/examplesIndex.json @@ -1,5 +1,5 @@ { - "commitHash": "23b3dbfa1761d8b5d6abf6bbaf59318b91082393", + "commitHash": "bfed9ee400ccf194e10f554378548d8cbc56bf0b", "remoteOrigin": "https://github.com/looker-open-source/sdk-codegen", "summaries": { "packages/sdk-codegen/src/codeGenerators.ts": { @@ -166,6 +166,10 @@ "summary": "Update projects to use Main asthe production branch", "sourceFile": "examples/python/update_prod_branches_to_main.py" }, + "examples/python/looker_content_cleanup_automation/main.py": { + "summary": "line 32 of main.py", + "sourceFile": "examples/python/looker_content_cleanup_automation/main.py" + }, "examples/ruby/logout_all_users.rb": { "summary": "Logout all users on the instance", "sourceFile": "examples/ruby/logout_all_users.rb" @@ -246,10 +250,6 @@ "summary": "Create Looker Themes for your dashboards", "sourceFile": "examples/ruby/create_themes.rb" }, - "examples/typescript/dual.ts": { - "summary": "multiple APIs", - "sourceFile": "examples/typescript/dual.ts" - }, "examples/typescript/customConfigReader.ts": { "summary": "custom configReader", "sourceFile": "examples/typescript/customConfigReader.ts" @@ -294,6 +294,10 @@ "summary": "download a dashboard by name", "sourceFile": "examples/typescript/downloadDashboard.ts" }, + "go/go/example/main.go": { + "summary": "example code", + "sourceFile": "go/go/example/main.go" + }, "packages/api-explorer/src/components/ExploreType/ExploreType.tsx": { "summary": "`ExploreType`", "sourceFile": "packages/api-explorer/src/components/ExploreType/ExploreType.tsx" @@ -383,7 +387,7 @@ { "sourceFile": "csharp/rtl.Tests/ApiMethodsTests.cs", "column": 31, - "line": 48 + "line": 40 }, { "sourceFile": "csharp/rtl.Tests/SdkMethodsTests.cs", @@ -405,7 +409,7 @@ { "sourceFile": "csharp/rtl.Tests/ApiMethodsTests.cs", "column": 38, - "line": 48 + "line": 40 } ] } @@ -446,12 +450,12 @@ { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 18, - "line": 730 + "line": 728 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 35, - "line": 736 + "line": 734 } ], ".kt": [ @@ -501,6 +505,11 @@ "column": 9, "line": 66 }, + { + "sourceFile": "examples/python/simple_sample.py", + "column": 10, + "line": 7 + }, { "sourceFile": "python/looker_sdk/rtl/transport.py", "column": 9, @@ -562,17 +571,19 @@ "line": 54 } ], + ".rb": [ + { + "sourceFile": "examples/ruby/test.rb", + "column": 5, + "line": 14 + } + ], ".ts": [ { "sourceFile": "examples/typescript/customConfigReader.ts", "column": 4, "line": 60 }, - { - "sourceFile": "examples/typescript/dual.ts", - "column": 49, - "line": 37 - }, { "sourceFile": "examples/typescript/sudoAsUser.ts", "column": 26, @@ -583,70 +594,75 @@ "column": 30, "line": 83 }, + { + "sourceFile": "packages/hackathon/src/data/sheets_client.ts", + "column": 38, + "line": 261 + }, { "sourceFile": "packages/hackathon/src/models/Hacker.ts", "column": 41, - "line": 139 + "line": 151 }, { "sourceFile": "packages/sdk-codegen-scripts/src/exampleMiner.spec.ts", "column": 40, - "line": 192 + "line": 193 }, { "sourceFile": "packages/sdk-codegen-scripts/src/exampleMiner.spec.ts", "column": 81, - "line": 205 + "line": 206 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 34, - "line": 327 + "line": 323 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 34, - "line": 337 + "line": 333 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 37, - "line": 360 + "line": 356 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 34, - "line": 375 + "line": 371 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 30, - "line": 380 + "line": 376 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 34, - "line": 385 + "line": 381 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 30, - "line": 391 + "line": 387 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 30, - "line": 396 + "line": 392 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 32, - "line": 939 + "line": 937 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 30, - "line": 1160 + "line": 1158 } ], ".kt": [ @@ -681,76 +697,51 @@ "operationId": "run_url_encoded_query", "calls": { ".cs": [ - { - "sourceFile": "csharp/sdk/3.1/methods.cs", - "column": 17, - "line": 5227 - }, { "sourceFile": "csharp/sdk/4.0/methods.cs", "column": 17, - "line": 6812 + "line": 7306 } ], ".go": [ { "sourceFile": "go/sdk/v4/methods.go", "column": 14, - "line": 5208 + "line": 5598 } ], ".kt": [ { "sourceFile": "kotlin/src/main/com/looker/sdk/4.0/methods.kt", "column": 18, - "line": 6863 + "line": 7451 }, { "sourceFile": "kotlin/src/main/com/looker/sdk/4.0/streams.kt", "column": 18, - "line": 6862 + "line": 7449 } ], ".ts": [ - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 14, - "line": 7034 - }, - { - "sourceFile": "packages/sdk/src/3.1/methods.ts", - "column": 16, - "line": 6588 - }, - { - "sourceFile": "packages/sdk/src/3.1/methodsInterface.ts", - "column": 16, - "line": 4698 - }, - { - "sourceFile": "packages/sdk/src/3.1/streams.ts", - "column": 16, - "line": 7565 - }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 14, - "line": 9110 + "line": 9707 }, { "sourceFile": "packages/sdk/src/4.0/methods.ts", "column": 16, - "line": 8541 + "line": 9120 }, { "sourceFile": "packages/sdk/src/4.0/methodsInterface.ts", "column": 16, - "line": 6027 + "line": 6474 }, { "sourceFile": "packages/sdk/src/4.0/streams.ts", "column": 16, - "line": 9804 + "line": 10418 }, { "sourceFile": "packages/sdk-codegen/src/python.gen.spec.ts", @@ -759,27 +750,22 @@ } ], ".py": [ - { - "sourceFile": "python/looker_sdk/sdk/api31/methods.py", - "column": 17, - "line": 6445 - }, { "sourceFile": "python/looker_sdk/sdk/api40/methods.py", "column": 17, - "line": 8412 + "line": 9272 } ], ".swift": [ { "sourceFile": "swift/looker/sdk/methods.swift", "column": 18, - "line": 7984 + "line": 8539 }, { "sourceFile": "swift/looker/sdk/streams.swift", "column": 18, - "line": 7982 + "line": 8537 } ] } @@ -788,100 +774,70 @@ "operationId": "user_for_credential", "calls": { ".cs": [ - { - "sourceFile": "csharp/sdk/3.1/methods.cs", - "column": 7, - "line": 7447 - }, { "sourceFile": "csharp/sdk/4.0/methods.cs", "column": 7, - "line": 8885 + "line": 9461 } ], ".go": [ { "sourceFile": "go/sdk/v4/methods.go", "column": 4, - "line": 6730 + "line": 7190 } ], ".kt": [ { "sourceFile": "kotlin/src/main/com/looker/sdk/4.0/methods.kt", "column": 8, - "line": 8940 + "line": 9659 }, { "sourceFile": "kotlin/src/main/com/looker/sdk/4.0/streams.kt", "column": 8, - "line": 8939 + "line": 9657 } ], ".ts": [ - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 4, - "line": 9699 - }, - { - "sourceFile": "packages/sdk/src/3.1/methods.ts", - "column": 6, - "line": 9116 - }, - { - "sourceFile": "packages/sdk/src/3.1/methodsInterface.ts", - "column": 6, - "line": 6555 - }, - { - "sourceFile": "packages/sdk/src/3.1/streams.ts", - "column": 6, - "line": 10462 - }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 4, - "line": 11545 + "line": 12252 }, { "sourceFile": "packages/sdk/src/4.0/methods.ts", "column": 6, - "line": 10854 + "line": 11542 }, { "sourceFile": "packages/sdk/src/4.0/methodsInterface.ts", "column": 6, - "line": 7716 + "line": 8239 }, { "sourceFile": "packages/sdk/src/4.0/streams.ts", "column": 6, - "line": 12441 + "line": 13166 } ], ".py": [ - { - "sourceFile": "python/looker_sdk/sdk/api31/methods.py", - "column": 7, - "line": 9041 - }, { "sourceFile": "python/looker_sdk/sdk/api40/methods.py", "column": 7, - "line": 10808 + "line": 11891 } ], ".swift": [ { "sourceFile": "swift/looker/sdk/methods.swift", "column": 8, - "line": 10377 + "line": 11024 }, { "sourceFile": "swift/looker/sdk/streams.swift", "column": 8, - "line": 10375 + "line": 11022 } ] } @@ -898,7 +854,7 @@ { "sourceFile": "go/integration/integration_test.go", "column": 22, - "line": 569 + "line": 629 } ] } @@ -939,7 +895,7 @@ { "sourceFile": "go/integration/integration_test.go", "column": 16, - "line": 554 + "line": 614 } ] } @@ -1030,7 +986,7 @@ { "sourceFile": "packages/hackathon/src/models/Hacker.ts", "column": 11, - "line": 250 + "line": 263 } ] } @@ -1074,32 +1030,32 @@ { "sourceFile": "packages/hackathon/src/models/Hacker.ts", "column": 11, - "line": 256 + "line": 269 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 8, - "line": 146 + "line": 144 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 10, - "line": 151 + "line": 149 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 8, - "line": 191 + "line": 189 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 10, - "line": 195 + "line": 193 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 8, - "line": 533 + "line": 529 } ], ".kt": [ @@ -1135,114 +1091,120 @@ ] } }, - "send_user_credentials_email_password_reset": { - "operationId": "send_user_credentials_email_password_reset", + "create_query": { + "operationId": "create_query", "calls": { ".py": [ { - "sourceFile": "examples/python/cloud-function-user-provision/main.py", - "column": 4, - "line": 77 + "sourceFile": "examples/python/cloud-function-content-cleanup-automation/main.py", + "column": 27, + "line": 110 }, { - "sourceFile": "examples/python/cloud-function-user-provision/main.py", - "column": 2, - "line": 114 - } - ] - } - }, - "create_user": { - "operationId": "create_user", - "calls": { - ".py": [ + "sourceFile": "examples/python/cloud-function-content-cleanup-automation/main.py", + "column": 28, + "line": 161 + }, { - "sourceFile": "examples/python/cloud-function-user-provision/main.py", - "column": 13, - "line": 94 + "sourceFile": "examples/python/query_task.py", + "column": 12, + "line": 26 }, { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 11, - "line": 28 + "sourceFile": "examples/python/query_task.py", + "column": 12, + "line": 66 }, { "sourceFile": "python/tests/integration/test_methods.py", "column": 15, - "line": 93 + "line": 228 }, { "sourceFile": "python/tests/integration/test_methods.py", - "column": 8, - "line": 197 + "column": 16, + "line": 300 + }, + { + "sourceFile": "python/tests/integration/test_methods.py", + "column": 16, + "line": 350 + }, + { + "sourceFile": "python/tests/integration/test_methods.py", + "column": 21, + "line": 523 + } + ], + ".rb": [ + { + "sourceFile": "examples/ruby/update_look.rb", + "column": 15, + "line": 23 } ], ".kt": [ + { + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 34, + "line": 198 + }, + { + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 34, + "line": 232 + }, { "sourceFile": "kotlin/src/test/TestSmoke.kt", - "column": 19, - "line": 22 + "column": 34, + "line": 123 } ], ".ts": [ + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 37, + "line": 752 + }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 10, - "line": 165 + "line": 872 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 12, - "line": 478 + "line": 946 } ], ".swift": [ + { + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 18, + "line": 114 + }, { "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", "column": 31, - "line": 99 + "line": 124 } ] } }, - "create_user_credentials_email": { - "operationId": "create_user_credentials_email", + "run_query": { + "operationId": "run_query", "calls": { ".py": [ { - "sourceFile": "examples/python/cloud-function-user-provision/main.py", - "column": 2, - "line": 106 - }, - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 4, - "line": 77 + "sourceFile": "examples/python/cloud-function-content-cleanup-automation/main.py", + "column": 32, + "line": 118 }, { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 4, - "line": 136 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 21, - "line": 179 + "sourceFile": "examples/python/cloud-function-content-cleanup-automation/main.py", + "column": 32, + "line": 169 }, - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 12, - "line": 511 - } - ] - } - }, - "run_query": { - "operationId": "run_query", - "calls": { - ".py": [ { "sourceFile": "examples/python/cloud-function-write-to-bigquery/main.py", "column": 10, @@ -1280,27 +1242,27 @@ { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 14, - "line": 760 + "line": 758 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 14, - "line": 770 + "line": 768 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 14, - "line": 773 + "line": 771 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 14, - "line": 888 + "line": 886 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 14, - "line": 891 + "line": 889 } ], ".swift": [ @@ -1327,269 +1289,552 @@ ] } }, - "all_folders": { - "operationId": "all_folders", + "scheduled_plan_run_once": { + "operationId": "scheduled_plan_run_once", "calls": { ".py": [ { - "sourceFile": "examples/python/content_validator_comparison.py", - "column": 18, - "line": 52 - }, - { - "sourceFile": "examples/python/folder_permission_access.py", - "column": 18, - "line": 23 + "sourceFile": "examples/python/cloud-function-content-cleanup-automation/main.py", + "column": 28, + "line": 201 } ], - ".kt": [ + ".rb": [ { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 299 - } - ], - ".swift": [ + "sourceFile": "examples/ruby/rerun_failed_email_schedules.rb", + "column": 11, + "line": 40 + }, { - "sourceFile": "swift/looker/Tests/lookerTests/methodsTests.swift", - "column": 22, - "line": 137 + "sourceFile": "examples/ruby/schedule_once_to_gcs.rb", + "column": 13, + "line": 36 }, { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 262 + "sourceFile": "examples/ruby/stream_to_s3.rb", + "column": 11, + "line": 33 } ] } }, - "content_validation": { - "operationId": "content_validation", + "update_dashboard": { + "operationId": "update_dashboard", "calls": { ".py": [ { - "sourceFile": "examples/python/content_validator_comparison.py", - "column": 21, - "line": 58 - } - ], - ".rb": [ + "sourceFile": "examples/python/cloud-function-content-cleanup-automation/main.py", + "column": 8, + "line": 236 + }, { - "sourceFile": "examples/ruby/validate_content.rb", + "sourceFile": "examples/python/soft_delete_dashboard.py", + "column": 12, + "line": 41 + }, + { + "sourceFile": "python/tests/integration/test_methods.py", + "column": 26, + "line": 567 + }, + { + "sourceFile": "python/tests/integration/test_methods.py", "column": 20, - "line": 15 + "line": 573 + } + ], + ".ts": [ + { + "sourceFile": "packages/sdk-codegen/src/kotlin.gen.spec.ts", + "column": 63, + "line": 340 + }, + { + "sourceFile": "packages/sdk-codegen/src/python.gen.spec.ts", + "column": 76, + "line": 1114 + }, + { + "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", + "column": 28, + "line": 656 + }, + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 12, + "line": 1011 + }, + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 12, + "line": 1019 } ] } }, - "update_session": { - "operationId": "update_session", + "update_look": { + "operationId": "update_look", "calls": { ".py": [ { - "sourceFile": "examples/python/content_validator_comparison.py", - "column": 4, - "line": 140 + "sourceFile": "examples/python/cloud-function-content-cleanup-automation/main.py", + "column": 8, + "line": 248 }, { "sourceFile": "python/tests/integration/test_methods.py", - "column": 4, - "line": 277 + "column": 23, + "line": 377 }, { "sourceFile": "python/tests/integration/test_methods.py", - "column": 22, - "line": 284 + "column": 15, + "line": 381 } ], ".rb": [ { - "sourceFile": "examples/ruby/dev_vs_prod.rb", - "column": 0, - "line": 32 + "sourceFile": "examples/ruby/update_look.rb", + "column": 10, + "line": 27 } ], ".ts": [ { - "sourceFile": "examples/typescript/validateBranch.ts", - "column": 6, - "line": 16 + "sourceFile": "packages/sdk-codegen/src/kotlin.gen.spec.ts", + "column": 67, + "line": 167 + }, + { + "sourceFile": "packages/sdk-codegen/src/python.gen.spec.ts", + "column": 76, + "line": 945 + }, + { + "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", + "column": 28, + "line": 370 } ] } }, - "create_connection": { - "operationId": "create_connection", + "delete_dashboard": { + "operationId": "delete_dashboard", "calls": { ".py": [ { - "sourceFile": "examples/python/create_db_connections.py", - "column": 0, - "line": 16 + "sourceFile": "examples/python/cloud-function-content-cleanup-automation/main.py", + "column": 10, + "line": 258 + } + ], + ".ts": [ + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 23, + "line": 216 } ] } }, - "update_user": { - "operationId": "update_user", + "delete_look": { + "operationId": "delete_look", "calls": { ".py": [ { - "sourceFile": "examples/python/disable_users_by_email.py", - "column": 4, - "line": 20 - }, + "sourceFile": "examples/python/cloud-function-content-cleanup-automation/main.py", + "column": 10, + "line": 268 + } + ], + ".rb": [ { - "sourceFile": "python/tests/integration/test_methods.py", + "sourceFile": "examples/ruby/delete_unused_content.rb", + "column": 3, + "line": 18 + } + ] + } + }, + "dashboard_lookml": { + "operationId": "dashboard_lookml", + "calls": { + ".py": [ + { + "sourceFile": "examples/python/cloud-function-content-cleanup-automation/main.py", + "column": 27, + "line": 281 + } + ] + } + }, + "send_user_credentials_email_password_reset": { + "operationId": "send_user_credentials_email_password_reset", + "calls": { + ".py": [ + { + "sourceFile": "examples/python/cloud-function-user-provision/main.py", "column": 4, - "line": 59 + "line": 77 }, { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 4, - "line": 71 + "sourceFile": "examples/python/cloud-function-user-provision/main.py", + "column": 2, + "line": 114 + } + ] + } + }, + "create_user": { + "operationId": "create_user", + "calls": { + ".py": [ + { + "sourceFile": "examples/python/cloud-function-user-provision/main.py", + "column": 13, + "line": 94 }, { "sourceFile": "python/tests/integration/test_methods.py", - "column": 6, - "line": 120 + "column": 11, + "line": 28 }, { "sourceFile": "python/tests/integration/test_methods.py", - "column": 4, - "line": 121 + "column": 15, + "line": 93 }, { "sourceFile": "python/tests/integration/test_methods.py", - "column": 4, - "line": 130 - } - ], - ".rb": [ - { - "sourceFile": "examples/ruby/disable_users.rb", - "column": 4, - "line": 16 + "column": 8, + "line": 197 } ], ".kt": [ { "sourceFile": "kotlin/src/test/TestSmoke.kt", - "column": 36, - "line": 101 - }, - { - "sourceFile": "kotlin/src/test/TestSmoke.kt", - "column": 35, - "line": 104 + "column": 19, + "line": 22 } ], ".ts": [ { "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 23, - "line": 159 - }, - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 12, - "line": 491 + "column": 10, + "line": 163 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 12, - "line": 502 + "line": 474 } ], ".swift": [ { "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 35, - "line": 437 - }, - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 34, - "line": 440 + "column": 31, + "line": 99 } ] } }, - "search_dashboards": { - "operationId": "search_dashboards", + "create_user_credentials_email": { + "operationId": "create_user_credentials_email", "calls": { ".py": [ { - "sourceFile": "examples/python/download_dashboard_pdf.py", - "column": 26, - "line": 52 - }, - { - "sourceFile": "examples/python/download_tile.py", - "column": 17, - "line": 15 + "sourceFile": "examples/python/cloud-function-user-provision/main.py", + "column": 2, + "line": 106 }, { - "sourceFile": "examples/python/soft_delete_dashboard.py", - "column": 14, - "line": 29 + "sourceFile": "python/tests/integration/test_methods.py", + "column": 4, + "line": 77 }, { "sourceFile": "python/tests/integration/test_methods.py", - "column": 21, - "line": 393 + "column": 4, + "line": 136 } ], ".ts": [ - { - "sourceFile": "examples/typescript/utils.ts", - "column": 30, - "line": 54 - }, - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 36, - "line": 215 - }, - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 42, - "line": 274 - }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 35, - "line": 659 + "column": 21, + "line": 177 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 12, - "line": 661 - }, - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 33, - "line": 679 - }, + "line": 507 + } + ] + } + }, + "all_folders": { + "operationId": "all_folders", + "calls": { + ".py": [ { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "sourceFile": "examples/python/content_validator_comparison.py", "column": 18, - "line": 702 + "line": 52 }, { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 12, - "line": 709 - }, + "sourceFile": "examples/python/folder_permission_access.py", + "column": 18, + "line": 23 + } + ], + ".kt": [ { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 32, - "line": 929 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 299 + } + ], + ".swift": [ + { + "sourceFile": "swift/looker/Tests/lookerTests/methodsTests.swift", + "column": 22, + "line": 137 + }, + { + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 262 + } + ] + } + }, + "content_validation": { + "operationId": "content_validation", + "calls": { + ".py": [ + { + "sourceFile": "examples/python/content_validator_comparison.py", + "column": 21, + "line": 58 + } + ], + ".rb": [ + { + "sourceFile": "examples/ruby/validate_content.rb", + "column": 20, + "line": 15 + } + ] + } + }, + "update_session": { + "operationId": "update_session", + "calls": { + ".py": [ + { + "sourceFile": "examples/python/content_validator_comparison.py", + "column": 4, + "line": 140 + }, + { + "sourceFile": "python/tests/integration/test_methods.py", + "column": 4, + "line": 277 + }, + { + "sourceFile": "python/tests/integration/test_methods.py", + "column": 22, + "line": 284 + } + ], + ".rb": [ + { + "sourceFile": "examples/ruby/dev_vs_prod.rb", + "column": 0, + "line": 32 + } + ], + ".ts": [ + { + "sourceFile": "examples/typescript/validateBranch.ts", + "column": 6, + "line": 16 + } + ] + } + }, + "create_connection": { + "operationId": "create_connection", + "calls": { + ".py": [ + { + "sourceFile": "examples/python/create_db_connections.py", + "column": 0, + "line": 16 + } + ] + } + }, + "update_user": { + "operationId": "update_user", + "calls": { + ".py": [ + { + "sourceFile": "examples/python/disable_users_by_email.py", + "column": 4, + "line": 20 + }, + { + "sourceFile": "python/tests/integration/test_methods.py", + "column": 4, + "line": 59 + }, + { + "sourceFile": "python/tests/integration/test_methods.py", + "column": 4, + "line": 71 + }, + { + "sourceFile": "python/tests/integration/test_methods.py", + "column": 6, + "line": 120 + }, + { + "sourceFile": "python/tests/integration/test_methods.py", + "column": 4, + "line": 121 + }, + { + "sourceFile": "python/tests/integration/test_methods.py", + "column": 4, + "line": 130 + } + ], + ".rb": [ + { + "sourceFile": "examples/ruby/disable_users.rb", + "column": 4, + "line": 16 + } + ], + ".kt": [ + { + "sourceFile": "kotlin/src/test/TestSmoke.kt", + "column": 36, + "line": 100 }, + { + "sourceFile": "kotlin/src/test/TestSmoke.kt", + "column": 35, + "line": 103 + } + ], + ".ts": [ { "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 38, - "line": 954 + "column": 23, + "line": 157 + }, + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 12, + "line": 487 + }, + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 12, + "line": 498 + } + ], + ".swift": [ + { + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 35, + "line": 437 + }, + { + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 34, + "line": 440 + } + ] + } + }, + "search_dashboards": { + "operationId": "search_dashboards", + "calls": { + ".py": [ + { + "sourceFile": "examples/python/download_dashboard_pdf.py", + "column": 26, + "line": 52 + }, + { + "sourceFile": "examples/python/download_tile.py", + "column": 17, + "line": 15 + }, + { + "sourceFile": "examples/python/soft_delete_dashboard.py", + "column": 14, + "line": 29 + }, + { + "sourceFile": "python/tests/integration/test_methods.py", + "column": 21, + "line": 393 + } + ], + ".ts": [ + { + "sourceFile": "examples/typescript/utils.ts", + "column": 30, + "line": 54 + }, + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 36, + "line": 213 + }, + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 42, + "line": 270 + }, + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 35, + "line": 655 + }, + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 12, + "line": 657 + }, + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 12, + "line": 676 + }, + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 18, + "line": 700 + }, + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 12, + "line": 707 + }, + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 32, + "line": 927 + }, + { + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 37, + "line": 952 } ], ".kt": [ @@ -1616,12 +1861,12 @@ { "sourceFile": "kotlin/src/test/TestSmoke.kt", "column": 54, - "line": 71 + "line": 70 }, { "sourceFile": "kotlin/src/test/TestSmoke.kt", "column": 50, - "line": 113 + "line": 112 } ], ".swift": [ @@ -1688,7 +1933,7 @@ { "sourceFile": "examples/typescript/utils.ts", "column": 30, - "line": 148 + "line": 150 } ], ".kt": [ @@ -1731,7 +1976,7 @@ { "sourceFile": "examples/typescript/utils.ts", "column": 22, - "line": 159 + "line": 161 } ], ".kt": [ @@ -1792,29 +2037,29 @@ { "sourceFile": "kotlin/src/test/TestSmoke.kt", "column": 40, - "line": 62 + "line": 61 } ], ".ts": [ { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 35, - "line": 266 + "line": 262 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 34, - "line": 410 + "line": 406 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 8, - "line": 422 + "line": 418 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 10, - "line": 443 + "line": 439 } ], ".swift": [ @@ -1859,7 +2104,7 @@ { "sourceFile": "examples/typescript/downloadTile.ts", "column": 4, - "line": 104 + "line": 109 } ], ".kt": [ @@ -1994,29 +2239,29 @@ "line": 15 }, { - "sourceFile": "packages/sdk-codegen/src/python.gen.spec.ts", - "column": 35, - "line": 980 + "sourceFile": "packages/sdk-codegen/src/kotlin.gen.spec.ts", + "column": 65, + "line": 212 }, { "sourceFile": "packages/sdk-codegen/src/python.gen.spec.ts", - "column": 35, - "line": 991 + "column": 76, + "line": 983 }, { "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", - "column": 52, - "line": 261 + "column": 28, + "line": 442 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 10, - "line": 356 + "line": 352 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 33, - "line": 565 + "line": 561 } ], ".kt": [ @@ -2028,12 +2273,12 @@ { "sourceFile": "kotlin/src/test/TestSmoke.kt", "column": 43, - "line": 159 + "line": 158 }, { "sourceFile": "kotlin/src/test/TestSmoke.kt", "column": 40, - "line": 165 + "line": 164 } ], ".swift": [ @@ -2122,7 +2367,7 @@ { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 35, - "line": 439 + "line": 435 } ], ".swift": [ @@ -2205,17 +2450,17 @@ { "sourceFile": "packages/sdk-codegen/src/python.gen.spec.ts", "column": 35, - "line": 907 + "line": 910 }, { "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", - "column": 52, - "line": 177 + "column": 28, + "line": 317 }, { "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", - "column": 52, - "line": 228 + "column": 28, + "line": 394 } ] } @@ -2321,96 +2566,6 @@ ] } }, - "create_query": { - "operationId": "create_query", - "calls": { - ".py": [ - { - "sourceFile": "examples/python/query_task.py", - "column": 12, - "line": 26 - }, - { - "sourceFile": "examples/python/query_task.py", - "column": 12, - "line": 66 - }, - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 15, - "line": 228 - }, - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 16, - "line": 300 - }, - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 16, - "line": 350 - }, - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 21, - "line": 523 - } - ], - ".rb": [ - { - "sourceFile": "examples/ruby/update_look.rb", - "column": 15, - "line": 23 - } - ], - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 34, - "line": 198 - }, - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 34, - "line": 232 - }, - { - "sourceFile": "kotlin/src/test/TestSmoke.kt", - "column": 34, - "line": 124 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 37, - "line": 754 - }, - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 10, - "line": 874 - }, - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 12, - "line": 948 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 18, - "line": 114 - }, - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 31, - "line": 124 - } - ] - } - }, "create_query_task": { "operationId": "create_query_task", "calls": { @@ -2435,7 +2590,7 @@ { "sourceFile": "kotlin/src/test/TestSmoke.kt", "column": 44, - "line": 131 + "line": 130 } ], ".ts": [ @@ -2446,13 +2601,13 @@ }, { "sourceFile": "packages/sdk-codegen/src/python.gen.spec.ts", - "column": 35, - "line": 966 + "column": 76, + "line": 969 }, { "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", - "column": 52, - "line": 245 + "column": 28, + "line": 420 } ] } @@ -2561,22 +2716,22 @@ { "sourceFile": "packages/sdk-codegen/src/python.gen.spec.ts", "column": 35, - "line": 915 + "line": 918 }, { "sourceFile": "packages/sdk-codegen/src/python.gen.spec.ts", "column": 35, - "line": 923 + "line": 926 }, { "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", - "column": 52, - "line": 185 + "column": 28, + "line": 328 }, { "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", - "column": 52, - "line": 193 + "column": 28, + "line": 340 } ], ".swift": [ @@ -2615,50 +2770,35 @@ "line": 248 } ], + ".tsx": [ + { + "sourceFile": "packages/extension-tile-playground/src/components/DashboardTile/DashboardTile.tsx", + "column": 10, + "line": 66 + } + ], ".ts": [ { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 36, - "line": 828 + "line": 826 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 35, - "line": 839 + "line": 837 } ] } }, - "update_dashboard": { - "operationId": "update_dashboard", + "get_setting": { + "operationId": "get_setting", "calls": { ".py": [ { - "sourceFile": "examples/python/soft_delete_dashboard.py", - "column": 12, - "line": 41 - }, - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 26, - "line": 567 - }, - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 20, - "line": 573 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 12, - "line": 1013 - }, - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 12, - "line": 1021 + "sourceFile": "examples/python/simple_sample.py", + "column": 15, + "line": 4 } ] } @@ -2697,11 +2837,6 @@ "sourceFile": "examples/typescript/testDBConnections.ts", "column": 10, "line": 28 - }, - { - "sourceFile": "packages/sdk-codegen/src/kotlin.gen.spec.ts", - "column": 83, - "line": 212 } ] } @@ -2850,18 +2985,6 @@ ] } }, - "delete_look": { - "operationId": "delete_look", - "calls": { - ".rb": [ - { - "sourceFile": "examples/ruby/delete_unused_content.rb", - "column": 3, - "line": 18 - } - ] - } - }, "user": { "operationId": "user", "calls": { @@ -2888,7 +3011,7 @@ { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 28, - "line": 180 + "line": 178 } ], ".py": [ @@ -2963,28 +3086,6 @@ ] } }, - "scheduled_plan_run_once": { - "operationId": "scheduled_plan_run_once", - "calls": { - ".rb": [ - { - "sourceFile": "examples/ruby/rerun_failed_email_schedules.rb", - "column": 11, - "line": 40 - }, - { - "sourceFile": "examples/ruby/schedule_once_to_gcs.rb", - "column": 13, - "line": 36 - }, - { - "sourceFile": "examples/ruby/stream_to_s3.rb", - "column": 11, - "line": 33 - } - ] - } - }, "all_integrations": { "operationId": "all_integrations", "calls": { @@ -3035,47 +3136,6 @@ ] } }, - "update_look": { - "operationId": "update_look", - "calls": { - ".rb": [ - { - "sourceFile": "examples/ruby/update_look.rb", - "column": 10, - "line": 27 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-codegen/src/kotlin.gen.spec.ts", - "column": 67, - "line": 167 - }, - { - "sourceFile": "packages/sdk-codegen/src/python.gen.spec.ts", - "column": 35, - "line": 942 - }, - { - "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", - "column": 52, - "line": 211 - } - ], - ".py": [ - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 23, - "line": 377 - }, - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 15, - "line": 381 - } - ] - } - }, "validate_project": { "operationId": "validate_project", "calls": { @@ -3136,22 +3196,12 @@ { "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk.spec.ts", "column": 4, - "line": 123 - }, - { - "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk.spec.ts", - "column": 4, - "line": 135 - }, - { - "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk.spec.ts", - "column": 4, - "line": 147 + "line": 125 }, { "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk.spec.ts", "column": 4, - "line": 159 + "line": 137 } ], ".kt": [ @@ -3254,22 +3304,22 @@ { "sourceFile": "go/integration/integration_test.go", "column": 15, - "line": 169 + "line": 229 }, { "sourceFile": "go/integration/integration_test.go", "column": 14, - "line": 181 + "line": 241 }, { "sourceFile": "go/integration/integration_test.go", "column": 11, - "line": 319 + "line": 379 }, { "sourceFile": "go/integration/integration_test.go", "column": 11, - "line": 408 + "line": 468 } ] } @@ -3334,24 +3384,120 @@ ] } }, - "Session": { - "operationId": "Session", + "CreateGroup": { + "operationId": "CreateGroup", "calls": { ".go": [ { "sourceFile": "go/integration/integration_test.go", - "column": 18, - "line": 193 - }, - { - "sourceFile": "go/integration/integration_test.go", - "column": 17, - "line": 213 - }, - { + "column": 16, + "line": 170 + } + ] + } + }, + "Group": { + "operationId": "Group", + "calls": { + ".go": [ + { + "sourceFile": "go/integration/integration_test.go", + "column": 15, + "line": 178 + } + ] + } + }, + "CreateUserAttribute": { + "operationId": "CreateUserAttribute", + "calls": { + ".go": [ + { + "sourceFile": "go/integration/integration_test.go", + "column": 13, + "line": 186 + } + ] + } + }, + "UserAttribute": { + "operationId": "UserAttribute", + "calls": { + ".go": [ + { + "sourceFile": "go/integration/integration_test.go", + "column": 12, + "line": 196 + } + ] + } + }, + "UpdateUserAttributeGroupValue": { + "operationId": "UpdateUserAttributeGroupValue", + "calls": { + ".go": [ + { + "sourceFile": "go/integration/integration_test.go", + "column": 11, + "line": 202 + } + ] + } + }, + "DeleteUserAttributeGroupValue": { + "operationId": "DeleteUserAttributeGroupValue", + "calls": { + ".go": [ + { + "sourceFile": "go/integration/integration_test.go", + "column": 8, + "line": 211 + } + ] + } + }, + "DeleteUserAttribute": { + "operationId": "DeleteUserAttribute", + "calls": { + ".go": [ + { + "sourceFile": "go/integration/integration_test.go", + "column": 11, + "line": 216 + } + ] + } + }, + "DeleteGroup": { + "operationId": "DeleteGroup", + "calls": { + ".go": [ + { + "sourceFile": "go/integration/integration_test.go", + "column": 11, + "line": 221 + } + ] + } + }, + "Session": { + "operationId": "Session", + "calls": { + ".go": [ + { + "sourceFile": "go/integration/integration_test.go", + "column": 18, + "line": 253 + }, + { "sourceFile": "go/integration/integration_test.go", "column": 17, - "line": 233 + "line": 273 + }, + { + "sourceFile": "go/integration/integration_test.go", + "column": 17, + "line": 293 } ] } @@ -3363,12 +3509,12 @@ { "sourceFile": "go/integration/integration_test.go", "column": 11, - "line": 205 + "line": 265 }, { "sourceFile": "go/integration/integration_test.go", "column": 11, - "line": 225 + "line": 285 } ] } @@ -3380,17 +3526,17 @@ { "sourceFile": "go/integration/integration_test.go", "column": 17, - "line": 246 + "line": 306 }, { "sourceFile": "go/integration/integration_test.go", "column": 17, - "line": 322 + "line": 382 }, { "sourceFile": "go/integration/integration_test.go", "column": 17, - "line": 498 + "line": 558 } ] } @@ -3402,17 +3548,17 @@ { "sourceFile": "go/integration/integration_test.go", "column": 15, - "line": 252 + "line": 312 }, { "sourceFile": "go/integration/integration_test.go", "column": 22, - "line": 265 + "line": 325 }, { "sourceFile": "go/integration/integration_test.go", "column": 12, - "line": 284 + "line": 344 } ] } @@ -3424,7 +3570,7 @@ { "sourceFile": "go/integration/integration_test.go", "column": 22, - "line": 297 + "line": 357 } ] } @@ -3436,7 +3582,7 @@ { "sourceFile": "go/integration/integration_test.go", "column": 16, - "line": 329 + "line": 389 } ] } @@ -3448,12 +3594,12 @@ { "sourceFile": "go/integration/integration_test.go", "column": 19, - "line": 360 + "line": 420 }, { "sourceFile": "go/integration/integration_test.go", "column": 18, - "line": 400 + "line": 460 } ] } @@ -3465,7 +3611,7 @@ { "sourceFile": "go/integration/integration_test.go", "column": 23, - "line": 373 + "line": 433 } ] } @@ -3477,7 +3623,7 @@ { "sourceFile": "go/integration/integration_test.go", "column": 13, - "line": 390 + "line": 450 } ] } @@ -3489,7 +3635,7 @@ { "sourceFile": "go/integration/integration_test.go", "column": 21, - "line": 413 + "line": 473 } ] } @@ -3501,12 +3647,12 @@ { "sourceFile": "go/integration/integration_test.go", "column": 24, - "line": 432 + "line": 492 }, { "sourceFile": "go/integration/integration_test.go", "column": 23, - "line": 544 + "line": 604 } ] } @@ -3518,7 +3664,7 @@ { "sourceFile": "go/integration/integration_test.go", "column": 28, - "line": 444 + "line": 504 } ] } @@ -3530,7 +3676,7 @@ { "sourceFile": "go/integration/integration_test.go", "column": 19, - "line": 462 + "line": 522 } ] } @@ -3542,7 +3688,7 @@ { "sourceFile": "go/integration/integration_test.go", "column": 17, - "line": 505 + "line": 565 } ] } @@ -3554,7 +3700,7 @@ { "sourceFile": "go/integration/integration_test.go", "column": 13, - "line": 534 + "line": 594 } ] } @@ -3566,12 +3712,12 @@ { "sourceFile": "go/integration/integration_test.go", "column": 16, - "line": 587 + "line": 647 }, { "sourceFile": "go/integration/integration_test.go", "column": 15, - "line": 604 + "line": 664 } ] } @@ -3583,5265 +3729,3814 @@ { "sourceFile": "kotlin/src/main/com/looker/rtl/ErrorDoc.kt", "column": 19, - "line": 160 + "line": 163 }, { "sourceFile": "kotlin/src/main/com/looker/rtl/ErrorDoc.kt", "column": 52, - "line": 199 + "line": 205 }, { "sourceFile": "kotlin/src/test/TestSmoke.kt", "column": 15, - "line": 200 + "line": 199 } ], ".ts": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 462 + "line": 400 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 666 + "line": 435 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 716 + "line": 612 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 784 + "line": 779 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 860 + "line": 804 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 910 + "line": 834 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1026 + "line": 900 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1067 + "line": 936 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1090 + "line": 1217 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1158 + "line": 1380 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1217 + "line": 1663 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1245 + "line": 1691 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1270 + "line": 1920 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1331 + "line": 1974 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1416 + "line": 2048 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1462 + "line": 2130 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1506 + "line": 2184 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1575 + "line": 2308 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1642 + "line": 2358 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1688 + "line": 2492 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1732 + "line": 2515 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1755 + "line": 2538 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1801 + "line": 2601 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1842 + "line": 2665 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1860 + "line": 2706 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1879 + "line": 2776 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1931 + "line": 2831 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1980 + "line": 2906 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2147 + "line": 2957 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2195 + "line": 3043 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2231 + "line": 3102 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2302 + "line": 3130 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2327 + "line": 3155 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2377 + "line": 3216 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2481 + "line": 3299 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2512 + "line": 3345 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2556 + "line": 3416 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2606 + "line": 3487 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2639 + "line": 3508 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2726 + "line": 3554 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2854 + "line": 3600 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2945 + "line": 3626 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2971 + "line": 3675 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3017 + "line": 3691 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3051 + "line": 3734 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3129 + "line": 3831 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3178 + "line": 3852 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3256 + "line": 3870 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3307 + "line": 3894 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3363 + "line": 3923 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3389 + "line": 3979 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3467 + "line": 4028 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3567 + "line": 4195 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3586 + "line": 4220 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3640 + "line": 4296 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3664 + "line": 4343 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3689 + "line": 4417 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3718 + "line": 4440 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3744 + "line": 4487 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3771 + "line": 4561 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3810 + "line": 4584 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3889 + "line": 4627 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3934 + "line": 4665 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3963 + "line": 4737 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3989 + "line": 4763 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4015 + "line": 4814 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4043 + "line": 4921 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4069 + "line": 4959 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4096 + "line": 4991 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4175 + "line": 5035 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4211 + "line": 5085 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4281 + "line": 5118 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4329 + "line": 5206 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4494 + "line": 5337 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4562 + "line": 5428 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4603 + "line": 5454 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4682 + "line": 5625 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4740 + "line": 5659 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4819 + "line": 5737 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4873 + "line": 5786 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4950 + "line": 5864 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4977 + "line": 5915 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5029 + "line": 5971 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5127 + "line": 5997 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5153 + "line": 6075 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5264 + "line": 6175 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5339 + "line": 6194 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5382 + "line": 6248 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5496 + "line": 6272 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5536 + "line": 6297 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5585 + "line": 6326 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5664 + "line": 6352 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5694 + "line": 6379 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5720 + "line": 6419 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5816 + "line": 6495 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5989 + "line": 6540 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6041 + "line": 6571 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6116 + "line": 6597 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6142 + "line": 6623 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6211 + "line": 6650 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6273 + "line": 6676 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6301 + "line": 6703 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6331 + "line": 6784 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6366 + "line": 6841 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6399 + "line": 6899 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6429 + "line": 6936 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6455 + "line": 7009 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6577 + "line": 7059 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6652 + "line": 7233 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6684 + "line": 7260 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6730 + "line": 7313 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6771 + "line": 7414 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6813 + "line": 7440 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6892 + "line": 7551 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7078 + "line": 7626 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7106 + "line": 7673 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7168 + "line": 7791 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7216 + "line": 7894 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7447 + "line": 7943 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7490 + "line": 8022 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7538 + "line": 8070 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7573 + "line": 8094 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7644 + "line": 8121 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7683 + "line": 8149 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7722 + "line": 8173 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7757 + "line": 8206 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7828 + "line": 8237 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7874 + "line": 8270 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7943 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 7975 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8038 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8086 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8145 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8172 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8298 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8474 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8511 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8549 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8651 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8745 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8786 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8866 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8915 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8946 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8974 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9002 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9032 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9060 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9093 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9185 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9224 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9283 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9313 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9372 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9454 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9472 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9555 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9599 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9639 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9737 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9762 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9864 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9939 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9987 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10035 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10083 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10133 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10183 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10237 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10287 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10312 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10362 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10412 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10466 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10534 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10625 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10684 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10765 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10838 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10885 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 383 + "line": 8364 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 418 + "line": 8390 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 595 + "line": 8486 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 923 + "line": 8659 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1196 + "line": 8711 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1224 + "line": 8786 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1451 + "line": 8812 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1501 + "line": 8881 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1569 + "line": 8943 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1645 + "line": 8971 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1695 + "line": 9001 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1811 + "line": 9036 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1854 + "line": 9069 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1978 + "line": 9099 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2001 + "line": 9125 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2024 + "line": 9247 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2087 + "line": 9320 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2151 + "line": 9352 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2191 + "line": 9398 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2261 + "line": 9440 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2316 + "line": 9482 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2391 + "line": 9563 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2442 + "line": 9752 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2528 + "line": 9780 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2587 + "line": 9842 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2615 + "line": 9915 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2640 + "line": 10089 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2701 + "line": 10132 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2784 + "line": 10217 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2830 + "line": 10253 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2901 + "line": 10326 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2970 + "line": 10365 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2991 + "line": 10404 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3037 + "line": 10440 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3081 + "line": 10513 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3105 + "line": 10559 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3152 + "line": 10628 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3168 + "line": 10684 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3200 + "line": 10717 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3284 + "line": 10783 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3300 + "line": 10835 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3318 + "line": 10896 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3342 + "line": 10924 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3368 + "line": 11052 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3422 + "line": 11229 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3471 + "line": 11267 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3638 + "line": 11305 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3663 + "line": 11408 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3739 + "line": 11472 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3786 + "line": 11516 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3860 + "line": 11579 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3883 + "line": 11671 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3930 + "line": 11710 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4004 + "line": 11769 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4027 + "line": 11799 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4070 + "line": 11858 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4108 + "line": 11966 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4180 + "line": 11998 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4206 + "line": 12016 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4257 + "line": 12101 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4363 + "line": 12147 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4394 + "line": 12190 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4438 + "line": 12292 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4488 + "line": 12320 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4521 + "line": 12434 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4608 + "line": 12518 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4738 + "line": 12572 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4829 + "line": 12626 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4855 + "line": 12680 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5026 + "line": 12737 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5060 + "line": 12794 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5138 + "line": 12853 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5187 + "line": 12910 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5265 + "line": 12938 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5316 + "line": 12995 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5372 + "line": 13052 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5398 + "line": 13110 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5476 + "line": 13180 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5576 + "line": 13369 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5595 + "line": 13429 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5649 + "line": 13513 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5673 + "line": 13587 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5698 + "line": 13634 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 5727 + "sourceFile": "packages/sdk-codegen/src/specConverter.ts", + "column": 32, + "line": 664 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 5753 + "sourceFile": "packages/sdk-codegen/src/specConverter.ts", + "column": 50, + "line": 707 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", + "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", "column": 9, - "line": 5780 + "line": 1155 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", + "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", "column": 9, - "line": 5819 - }, + "line": 1189 + } + ] + } + }, + "create_look": { + "operationId": "create_look", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 5898 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 12, + "line": 80 + } + ], + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 5943 + "sourceFile": "packages/sdk-codegen-scripts/src/exampleMiner.spec.ts", + "column": 37, + "line": 199 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 5974 + "sourceFile": "packages/sdk-rtl/src/apiMethods.ts", + "column": 28, + "line": 79 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6000 + "sourceFile": "packages/sdk-rtl/src/apiMethods.ts", + "column": 28, + "line": 269 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6026 - }, + "sourceFile": "packages/sdk-rtl/src/transport.ts", + "column": 25, + "line": 528 + } + ], + ".py": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6054 - }, + "sourceFile": "python/tests/integration/test_methods.py", + "column": 15, + "line": 352 + } + ] + } + }, + "create_dashboard": { + "operationId": "create_dashboard", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6080 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 12, + "line": 98 + } + ], + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6107 - }, + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 12, + "line": 955 + } + ], + ".py": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6188 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6245 - }, + "sourceFile": "python/tests/integration/test_methods.py", + "column": 20, + "line": 526 + } + ] + } + }, + "all_boards": { + "operationId": "all_boards", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6303 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 41, + "line": 111 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6340 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 335 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6413 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 189 + } + ] + } + }, + "create_board": { + "operationId": "create_board", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6463 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 12, + "line": 117 + } + ] + } + }, + "create_board_section": { + "operationId": "create_board_section", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6637 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 12, + "line": 126 + } + ] + } + }, + "create_board_item": { + "operationId": "create_board_item", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6664 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 12, + "line": 134 + } + ] + } + }, + "delete_scheduled_plan": { + "operationId": "delete_scheduled_plan", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6717 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 32, + "line": 187 + } + ] + } + }, + "all_color_collections": { + "operationId": "all_color_collections", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6818 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 256 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6844 - }, + "sourceFile": "kotlin/src/test/TestSmoke.kt", + "column": 50, + "line": 177 + } + ], + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6955 - }, + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 34, + "line": 301 + } + ], + ".py": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7030 - }, + "sourceFile": "python/tests/integration/test_methods.py", + "column": 24, + "line": 419 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7077 + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 200 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7194 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 31, + "line": 415 + } + ] + } + }, + "color_collection": { + "operationId": "color_collection", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7297 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 28, + "line": 258 + } + ] + } + }, + "all_datagroups": { + "operationId": "all_datagroups", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7346 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 274 + } + ], + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7425 - }, + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 40, + "line": 616 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7473 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 257 + } + ] + } + }, + "datagroup": { + "operationId": "datagroup", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7497 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 23, + "line": 276 + } + ] + } + }, + "all_dialect_infos": { + "operationId": "all_dialect_infos", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7524 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 46, + "line": 292 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7552 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 225 + } + ] + } + }, + "folder": { + "operationId": "folder", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7576 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 28, + "line": 301 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7609 + "sourceFile": "swift/looker/Tests/lookerTests/methodsTests.swift", + "column": 41, + "line": 139 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7640 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7673 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7767 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7793 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7889 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8062 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8114 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8189 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8215 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8284 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8346 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8374 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8404 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8439 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8472 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8502 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8528 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8650 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8725 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8757 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8803 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8845 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8887 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8967 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9154 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9182 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9244 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9292 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9488 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9531 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9616 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9652 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9725 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9764 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9803 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9839 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9912 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9958 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10027 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10083 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10116 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10182 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10232 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10293 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10321 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10449 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10626 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10664 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10702 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10805 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10875 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10967 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11006 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11065 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11095 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11154 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11259 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11291 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11309 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11394 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11440 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11483 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11583 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11609 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11715 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11793 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11843 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11893 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11943 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11996 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12049 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12104 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12157 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12183 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12236 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12289 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12345 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12415 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12593 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12653 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12737 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12811 - }, - { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12858 - }, - { - "sourceFile": "packages/sdk-codegen/src/specConverter.ts", - "column": 32, - "line": 664 - }, - { - "sourceFile": "packages/sdk-codegen/src/specConverter.ts", - "column": 50, - "line": 707 - }, - { - "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", - "column": 9, - "line": 818 - }, - { - "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", - "column": 9, - "line": 852 - } - ] - } - }, - "create_look": { - "operationId": "create_look", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 12, - "line": 80 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-codegen-scripts/src/exampleMiner.spec.ts", - "column": 37, - "line": 198 - }, - { - "sourceFile": "packages/sdk-rtl/src/apiMethods.ts", - "column": 28, - "line": 79 - }, - { - "sourceFile": "packages/sdk-rtl/src/apiMethods.ts", - "column": 28, - "line": 266 - }, - { - "sourceFile": "packages/sdk-rtl/src/transport.ts", - "column": 25, - "line": 520 - } - ], - ".py": [ - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 15, - "line": 352 - } - ] - } - }, - "create_dashboard": { - "operationId": "create_dashboard", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 12, - "line": 98 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 12, - "line": 957 - } - ], - ".py": [ - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 20, - "line": 526 - } - ] - } - }, - "all_boards": { - "operationId": "all_boards", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 41, - "line": 111 - }, - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 335 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 189 - } - ] - } - }, - "create_board": { - "operationId": "create_board", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 12, - "line": 117 - } - ] - } - }, - "create_board_section": { - "operationId": "create_board_section", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 12, - "line": 126 - } - ] - } - }, - "create_board_item": { - "operationId": "create_board_item", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 12, - "line": 134 - } - ] - } - }, - "delete_scheduled_plan": { - "operationId": "delete_scheduled_plan", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 32, - "line": 187 - } - ] - } - }, - "all_color_collections": { - "operationId": "all_color_collections", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 256 - }, - { - "sourceFile": "kotlin/src/test/TestSmoke.kt", - "column": 50, - "line": 178 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 34, - "line": 305 - } - ], - ".py": [ - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 24, - "line": 419 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 200 - }, - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 31, - "line": 415 - } - ] - } - }, - "color_collection": { - "operationId": "color_collection", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 28, - "line": 258 - } - ] - } - }, - "all_datagroups": { - "operationId": "all_datagroups", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 274 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 40, - "line": 620 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 257 - } - ] - } - }, - "datagroup": { - "operationId": "datagroup", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 23, - "line": 276 - } - ] - } - }, - "all_dialect_infos": { - "operationId": "all_dialect_infos", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 46, - "line": 292 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 225 - } - ] - } - }, - "folder": { - "operationId": "folder", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 28, - "line": 301 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/methodsTests.swift", - "column": 41, - "line": 139 - }, - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 38, - "line": 389 - }, - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 35, - "line": 397 - } - ] - } - }, - "group": { - "operationId": "group", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 28, - "line": 310 - } - ] - } - }, - "all_board_items": { - "operationId": "all_board_items", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 318 - } - ] - } - }, - "board_item": { - "operationId": "board_item", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 28, - "line": 320 - } - ] - } - }, - "search_boards": { - "operationId": "search_boards", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 44, - "line": 326 - } - ] - } - }, - "all_board_sections": { - "operationId": "all_board_sections", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 345 - } - ] - } - }, - "board_section": { - "operationId": "board_section", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 28, - "line": 347 - } - ] - } - }, - "all_integration_hubs": { - "operationId": "all_integration_hubs", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 354 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 277 - } - ] - } - }, - "integration_hub": { - "operationId": "integration_hub", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 28, - "line": 356 - } - ] - } - }, - "integration": { - "operationId": "integration", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 28, - "line": 365 - } - ] - } - }, - "all_legacy_features": { - "operationId": "all_legacy_features", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 372 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 210 - } - ] - } - }, - "legacy_feature": { - "operationId": "legacy_feature", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 23, - "line": 374 - } - ] - } - }, - "all_locales": { - "operationId": "all_locales", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 41, - "line": 380 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 205 - } - ] - } - }, - "all_lookml_models": { - "operationId": "all_lookml_models", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 387 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 282 - } - ] - } - }, - "lookml_model": { - "operationId": "lookml_model", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 28, - "line": 389 - } - ] - } - }, - "all_model_sets": { - "operationId": "all_model_sets", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 406 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 332 - } - ] - } - }, - "model_set": { - "operationId": "model_set", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 28, - "line": 408 - } - ] - } - }, - "all_permission_sets": { - "operationId": "all_permission_sets", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 415 - } - ] - } - }, - "permission_set": { - "operationId": "permission_set", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 28, - "line": 417 - } - ] - } - }, - "all_permissions": { - "operationId": "all_permissions", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 45, - "line": 423 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 297 - } - ] - } - }, - "project": { - "operationId": "project", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 28, - "line": 432 - } - ] - } - }, - "all_roles": { - "operationId": "all_roles", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 439 - } - ], - ".ts": [ - { - "sourceFile": "packages/hackathon/src/models/Hacker.ts", - "column": 43, - "line": 312 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 292 - } - ] - } - }, - "role": { - "operationId": "role", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 23, - "line": 441 - } - ] - } - }, - "all_themes": { - "operationId": "all_themes", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 459 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 307 - } - ] - } - }, - "theme": { - "operationId": "theme", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 28, - "line": 461 - } - ] - } - }, - "all_timezones": { - "operationId": "all_timezones", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 43, - "line": 467 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 215 - } - ] - } - }, - "all_user_attributes": { - "operationId": "all_user_attributes", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 474 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 317 - } - ] - } - }, - "user_attribute": { - "operationId": "user_attribute", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 28, - "line": 476 - } - ] - } - }, - "all_user_login_lockouts": { - "operationId": "all_user_login_lockouts", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 51, - "line": 482 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 184 - } - ] - } - }, - "create_user_attribute": { - "operationId": "create_user_attribute", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 47, - "line": 520 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 10, - "line": 239 - } - ] - } - }, - "delete_user_attribute": { - "operationId": "delete_user_attribute", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 19, - "line": 522 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 21, - "line": 251 - } - ] - } - }, - "all_workspaces": { - "operationId": "all_workspaces", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 14, - "line": 533 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 337 - } - ] - } - }, - "workspace": { - "operationId": "workspace", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 23, - "line": 535 - } - ] - } - }, - "validate_theme": { - "operationId": "validate_theme", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestMethods.kt", - "column": 39, - "line": 549 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 8, - "line": 1096 - }, - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 10, - "line": 1114 - } - ] - } - }, - "content_thumbnail": { - "operationId": "content_thumbnail", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestSmoke.kt", - "column": 33, - "line": 83 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 10, - "line": 284 - }, - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 10, - "line": 289 - } - ], - ".py": [ - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 10, - "line": 398 - }, - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 10, - "line": 407 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 30, - "line": 351 - } - ] - } - }, - "delete_user": { - "operationId": "delete_user", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestSmoke.kt", - "column": 25, - "line": 145 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 23, - "line": 204 - }, - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 38, - "line": 514 - } - ], - ".py": [ - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 11, - "line": 85 - }, - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 11, - "line": 141 - }, - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 15, - "line": 205 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 27, - "line": 450 - } - ] - } - }, - "default_color_collection": { - "operationId": "default_color_collection", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestSmoke.kt", - "column": 46, - "line": 176 - }, - { - "sourceFile": "kotlin/src/test/TestSmoke.kt", - "column": 46, - "line": 186 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 37, - "line": 303 - }, - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 39, - "line": 315 - } - ], - ".py": [ - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 15, - "line": 416 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 34, - "line": 413 - }, - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 34, - "line": 422 - } - ] - } - }, - "set_default_color_collection": { - "operationId": "set_default_color_collection", - "calls": { - ".kt": [ - { - "sourceFile": "kotlin/src/test/TestSmoke.kt", - "column": 45, - "line": 183 - }, - { - "sourceFile": "kotlin/src/test/TestSmoke.kt", - "column": 32, - "line": 189 - } - ], - ".ts": [ - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 12, - "line": 311 - }, - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 23, - "line": 317 - } - ], - ".py": [ - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 13, - "line": 424 - }, - { - "sourceFile": "python/tests/integration/test_methods.py", - "column": 14, - "line": 426 - } - ], - ".swift": [ - { - "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 33, - "line": 419 + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 38, + "line": 389 }, { "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", - "column": 24, - "line": 425 + "column": 35, + "line": 397 } ] } }, - "versions": { - "operationId": "versions", + "group": { + "operationId": "group", "calls": { - ".tsx": [ + ".kt": [ { - "sourceFile": "packages/extension-api-explorer/src/ExtensionApiExplorer.tsx", - "column": 34, - "line": 45 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 28, + "line": 310 } ] } }, - "api_spec": { - "operationId": "api_spec", + "all_board_items": { + "operationId": "all_board_items", "calls": { - ".tsx": [ + ".kt": [ { - "sourceFile": "packages/extension-api-explorer/src/ExtensionApiExplorer.tsx", - "column": 13, - "line": 54 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 318 } ] } }, - "createClient": { - "operationId": "createClient", + "board_item": { + "operationId": "board_item", "calls": { - ".ts": [ - { - "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk.spec.ts", - "column": 29, - "line": 103 - }, - { - "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk.ts", - "column": 11, - "line": 43 - }, - { - "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk.ts", - "column": 11, - "line": 54 - }, - { - "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk_31.ts", - "column": 11, - "line": 42 - }, - { - "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk_40.ts", - "column": 11, - "line": 42 - }, - { - "sourceFile": "packages/sdk/src/extensionSdk.ts", - "column": 5, - "line": 44 - }, - { - "sourceFile": "packages/sdk/src/extensionSdk.ts", - "column": 5, - "line": 46 - } - ], - ".tsx": [ + ".kt": [ { - "sourceFile": "packages/extension-sdk-react/src/components/ExtensionProvider2/ExtensionProvider2.tsx", - "column": 16, - "line": 69 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 28, + "line": 320 } ] } }, - "create31Client": { - "operationId": "create31Client", + "search_boards": { + "operationId": "search_boards", "calls": { - ".ts": [ - { - "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk.spec.ts", - "column": 16, - "line": 121 - }, - { - "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk.ts", - "column": 11, - "line": 64 - } - ], - ".tsx": [ + ".kt": [ { - "sourceFile": "packages/extension-sdk-react/src/components/ExtensionProvider/ExtensionProvider.tsx", - "column": 6, - "line": 60 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 44, + "line": 326 } ] } }, - "create40Client": { - "operationId": "create40Client", + "all_board_sections": { + "operationId": "all_board_sections", "calls": { - ".ts": [ - { - "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk.spec.ts", - "column": 16, - "line": 133 - } - ], - ".tsx": [ - { - "sourceFile": "packages/extension-sdk-react/src/components/ExtensionProvider/ExtensionProvider.tsx", - "column": 6, - "line": 62 - }, + ".kt": [ { - "sourceFile": "packages/extension-sdk-react/src/components/ExtensionProvider40/ExtensionProvider40.tsx", - "column": 6, - "line": 63 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 345 } ] } }, - "closeHostPopovers": { - "operationId": "closeHostPopovers", + "board_section": { + "operationId": "board_section", "calls": { - ".ts": [ + ".kt": [ { - "sourceFile": "packages/extension-sdk-react/src/components/utils/setup_close_popovers.ts", - "column": 6, - "line": 32 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 28, + "line": 347 } ] } }, - "clipboardWrite": { - "operationId": "clipboardWrite", + "all_integration_hubs": { + "operationId": "all_integration_hubs", "calls": { - ".ts": [ + ".kt": [ { - "sourceFile": "packages/extension-utils/src/extensionAdaptor.ts", - "column": 17, - "line": 68 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 354 } - ] - } - }, - "localStorageGetItem": { - "operationId": "localStorageGetItem", - "calls": { - ".ts": [ + ], + ".swift": [ { - "sourceFile": "packages/extension-utils/src/extensionAdaptor.ts", - "column": 22, - "line": 77 + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 277 } ] } }, - "localStorageSetItem": { - "operationId": "localStorageSetItem", + "integration_hub": { + "operationId": "integration_hub", "calls": { - ".ts": [ + ".kt": [ { - "sourceFile": "packages/extension-utils/src/extensionAdaptor.ts", - "column": 15, - "line": 81 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 28, + "line": 356 } ] } }, - "localStorageRemoveItem": { - "operationId": "localStorageRemoveItem", + "integration": { + "operationId": "integration", "calls": { - ".ts": [ + ".kt": [ { - "sourceFile": "packages/extension-utils/src/extensionAdaptor.ts", - "column": 15, - "line": 85 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 28, + "line": 365 } ] } }, - "openBrowserWindow": { - "operationId": "openBrowserWindow", + "all_legacy_features": { + "operationId": "all_legacy_features", "calls": { - ".ts": [ + ".kt": [ { - "sourceFile": "packages/extension-utils/src/extensionAdaptor.ts", - "column": 9, - "line": 93 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 372 } ], - ".tsx": [ + ".swift": [ { - "sourceFile": "packages/hackathon/src/components/ExtMarkdown/ExtMarkdown.tsx", - "column": 39, - "line": 45 + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 210 } ] } }, - "error": { - "operationId": "error", + "legacy_feature": { + "operationId": "legacy_feature", "calls": { - ".ts": [ + ".kt": [ { - "sourceFile": "packages/extension-utils/src/extensionAdaptor.ts", - "column": 9, - "line": 97 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 23, + "line": 374 } ] } }, - "fetchProxy": { - "operationId": "fetchProxy", + "all_locales": { + "operationId": "all_locales", "calls": { - ".ts": [ - { - "sourceFile": "packages/hackathon/src/authToken/extensionProxyTransport.ts", - "column": 24, - "line": 118 - }, + ".kt": [ { - "sourceFile": "packages/hackathon/src/authToken/extensionProxyTransport.ts", - "column": 21, - "line": 127 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 41, + "line": 380 } - ] - } - }, - "createSecretKeyTag": { - "operationId": "createSecretKeyTag", - "calls": { - ".ts": [ - { - "sourceFile": "packages/hackathon/src/authToken/gAuthSession.ts", - "column": 22, - "line": 92 - }, + ], + ".swift": [ { - "sourceFile": "packages/hackathon/src/authToken/gAuthSession.ts", - "column": 26, - "line": 93 + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 205 } ] } }, - "serverProxy": { - "operationId": "serverProxy", + "all_lookml_models": { + "operationId": "all_lookml_models", "calls": { - ".ts": [ + ".kt": [ { - "sourceFile": "packages/hackathon/src/authToken/gAuthSession.ts", - "column": 34, - "line": 99 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 387 + } + ], + ".swift": [ + { + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 282 } ] } }, - "userAttributeGetItem": { - "operationId": "userAttributeGetItem", + "lookml_model": { + "operationId": "lookml_model", "calls": { - ".ts": [ - { - "sourceFile": "packages/hackathon/src/data/sheets_client.ts", - "column": 13, - "line": 460 - }, + ".kt": [ { - "sourceFile": "packages/hackathon/src/data/sheets_client.ts", - "column": 27, - "line": 461 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 28, + "line": 389 } ] } }, - "index": { - "operationId": "index", + "all_model_sets": { + "operationId": "all_model_sets", "calls": { - ".ts": [ - { - "sourceFile": "packages/hackathon/src/data/sheets_client.ts", - "column": 22, - "line": 471 - }, - { - "sourceFile": "packages/hackathon/src/models/Judgings.spec.ts", - "column": 16, - "line": 46 - }, + ".kt": [ { - "sourceFile": "packages/hackathon/src/models/SheetData.spec.ts", - "column": 18, - "line": 48 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 406 + } + ], + ".swift": [ { - "sourceFile": "packages/hackathon/src/models/SheetData.ts", - "column": 28, - "line": 135 + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 332 } ] } }, - "user_roles": { - "operationId": "user_roles", + "model_set": { + "operationId": "model_set", "calls": { - ".ts": [ + ".kt": [ { - "sourceFile": "packages/hackathon/src/models/Hacker.ts", - "column": 33, - "line": 116 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 28, + "line": 408 } ] } }, - "user_attribute_user_values": { - "operationId": "user_attribute_user_values", + "all_permission_sets": { + "operationId": "all_permission_sets", "calls": { - ".ts": [ + ".kt": [ { - "sourceFile": "packages/hackathon/src/models/Hacker.ts", - "column": 13, - "line": 142 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 415 } ] } }, - "role_users": { - "operationId": "role_users", + "permission_set": { + "operationId": "permission_set", "calls": { - ".ts": [ - { - "sourceFile": "packages/hackathon/src/models/Hacker.ts", - "column": 15, - "line": 317 - }, - { - "sourceFile": "packages/hackathon/src/models/Hacker.ts", - "column": 15, - "line": 327 - }, + ".kt": [ { - "sourceFile": "packages/hackathon/src/models/Hacker.ts", - "column": 15, - "line": 337 + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 28, + "line": 417 } ] } }, - "post": { - "operationId": "post", + "all_permissions": { + "operationId": "all_permissions", "calls": { - ".ts": [ - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 310 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 350 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 426 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 763 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 957 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 980 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 1005 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 1189 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 1621 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 1821 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 1954 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 2277 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 2402 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 2675 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 2786 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 3152 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 3281 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 3492 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 3519 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 3542 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 3910 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 4129 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 4306 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 4359 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 4516 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 4713 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 4846 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 5004 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 5104 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 5207 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 5231 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 5290 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 5559 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 5787 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 5877 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 5912 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 5938 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 5964 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 6013 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 6174 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 6245 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 6481 - }, + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 6609 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 45, + "line": 423 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 6845 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 297 + } + ] + } + }, + "project": { + "operationId": "project", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 6981 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 28, + "line": 432 + } + ] + } + }, + "all_roles": { + "operationId": "all_roles", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 7147 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 439 + } + ], + ".ts": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 7236 - }, + "sourceFile": "packages/hackathon/src/models/Hacker.ts", + "column": 13, + "line": 350 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 7268 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 292 + } + ] + } + }, + "role": { + "operationId": "role", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 7305 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 23, + "line": 441 + } + ] + } + }, + "all_themes": { + "operationId": "all_themes", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 7347 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 459 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 7383 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 307 + } + ] + } + }, + "theme": { + "operationId": "theme", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 7411 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 28, + "line": 461 + } + ] + } + }, + "all_timezones": { + "operationId": "all_timezones", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 7662 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 43, + "line": 467 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 7851 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 215 + } + ] + } + }, + "all_user_attributes": { + "operationId": "all_user_attributes", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 7897 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 474 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8382 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 317 + } + ] + } + }, + "user_attribute": { + "operationId": "user_attribute", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8441 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 28, + "line": 476 + } + ] + } + }, + "all_user_login_lockouts": { + "operationId": "all_user_login_lockouts", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8624 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 51, + "line": 482 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 8889 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 184 + } + ] + } + }, + "create_user_attribute": { + "operationId": "create_user_attribute", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9125 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 47, + "line": 520 + } + ], + ".ts": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9342 - }, + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 10, + "line": 235 + } + ] + } + }, + "delete_user_attribute": { + "operationId": "delete_user_attribute", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9503 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 19, + "line": 522 + } + ], + ".ts": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9789 - }, + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 21, + "line": 247 + } + ] + } + }, + "all_workspaces": { + "operationId": "all_workspaces", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 9891 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 14, + "line": 533 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10210 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 337 + } + ] + } + }, + "workspace": { + "operationId": "workspace", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10443 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 23, + "line": 535 + } + ] + } + }, + "validate_theme": { + "operationId": "validate_theme", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10659 - }, + "sourceFile": "kotlin/src/test/TestMethods.kt", + "column": 39, + "line": 549 + } + ], + ".ts": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 10811 + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 8, + "line": 1094 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 336 - }, + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 10, + "line": 1112 + } + ], + ".py": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 545 + "sourceFile": "python/tests/integration/test_methods.py", + "column": 27, + "line": 654 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 571 - }, + "sourceFile": "python/tests/integration/test_methods.py", + "column": 8, + "line": 668 + } + ] + } + }, + "content_thumbnail": { + "operationId": "content_thumbnail", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 674 - }, + "sourceFile": "kotlin/src/test/TestSmoke.kt", + "column": 33, + "line": 82 + } + ], + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 715 + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 10, + "line": 280 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 760 - }, + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 10, + "line": 285 + } + ], + ".py": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 840 + "sourceFile": "python/tests/integration/test_methods.py", + "column": 10, + "line": 398 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 887 - }, + "sourceFile": "python/tests/integration/test_methods.py", + "column": 10, + "line": 407 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 1119 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 30, + "line": 351 + } + ] + } + }, + "delete_user": { + "operationId": "delete_user", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 1257 - }, + "sourceFile": "kotlin/src/test/TestSmoke.kt", + "column": 25, + "line": 144 + } + ], + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 1381 + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 23, + "line": 202 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 1548 - }, + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 38, + "line": 510 + } + ], + ".py": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 1742 + "sourceFile": "python/tests/integration/test_methods.py", + "column": 11, + "line": 85 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 1765 + "sourceFile": "python/tests/integration/test_methods.py", + "column": 11, + "line": 141 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 1790 - }, + "sourceFile": "python/tests/integration/test_methods.py", + "column": 15, + "line": 205 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 1881 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 27, + "line": 450 + } + ] + } + }, + "default_color_collection": { + "operationId": "default_color_collection", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 2107 + "sourceFile": "kotlin/src/test/TestSmoke.kt", + "column": 46, + "line": 175 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 2290 - }, + "sourceFile": "kotlin/src/test/TestSmoke.kt", + "column": 46, + "line": 185 + } + ], + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 2416 + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 37, + "line": 299 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 2559 - }, + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 39, + "line": 311 + } + ], + ".py": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 2947 - }, + "sourceFile": "python/tests/integration/test_methods.py", + "column": 15, + "line": 416 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 3261 + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 34, + "line": 413 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 3445 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 34, + "line": 422 + } + ] + } + }, + "set_default_color_collection": { + "operationId": "set_default_color_collection", + "calls": { + ".kt": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 3690 + "sourceFile": "kotlin/src/test/TestSmoke.kt", + "column": 45, + "line": 182 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 3718 - }, + "sourceFile": "kotlin/src/test/TestSmoke.kt", + "column": 32, + "line": 188 + } + ], + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 3762 + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 12, + "line": 307 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 3906 - }, + "sourceFile": "packages/sdk-node/test/methods.spec.ts", + "column": 23, + "line": 313 + } + ], + ".py": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 4155 + "sourceFile": "python/tests/integration/test_methods.py", + "column": 13, + "line": 424 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 4282 - }, + "sourceFile": "python/tests/integration/test_methods.py", + "column": 14, + "line": 426 + } + ], + ".swift": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 4557 + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 33, + "line": 419 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 4670 - }, + "sourceFile": "swift/looker/Tests/lookerTests/smokeTests.swift", + "column": 24, + "line": 425 + } + ] + } + }, + "versions": { + "operationId": "versions", + "calls": { + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 4923 - }, + "sourceFile": "packages/extension-api-explorer/src/ExtensionApiExplorer.tsx", + "column": 34, + "line": 45 + } + ] + } + }, + "api_spec": { + "operationId": "api_spec", + "calls": { + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 4946 - }, + "sourceFile": "packages/extension-api-explorer/src/ExtensionApiExplorer.tsx", + "column": 13, + "line": 54 + } + ] + } + }, + "updateVisData": { + "operationId": "updateVisData", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 4980 + "sourceFile": "packages/extension-sdk/src/connect/extension_host_api.ts", + "column": 13, + "line": 130 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 5161 + "sourceFile": "packages/extension-sdk/src/connect/visualization/visualization_sdk.spec.ts", + "column": 4, + "line": 89 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 5290 + "sourceFile": "packages/extension-sdk/src/connect/visualization/visualization_sdk.spec.ts", + "column": 4, + "line": 152 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 5501 + "sourceFile": "packages/extension-sdk/src/connect/visualization/visualization_sdk.spec.ts", + "column": 4, + "line": 183 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 5528 - }, + "sourceFile": "packages/extension-sdk/src/connect/visualization/visualization_sdk.spec.ts", + "column": 4, + "line": 196 + } + ] + } + }, + "tileHostDataChanged": { + "operationId": "tileHostDataChanged", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 5551 + "sourceFile": "packages/extension-sdk/src/connect/extension_host_api.ts", + "column": 13, + "line": 138 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 5919 + "sourceFile": "packages/extension-sdk/src/connect/tile/tile_sdk.spec.ts", + "column": 4, + "line": 47 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6142 + "sourceFile": "packages/extension-sdk/src/connect/tile/tile_sdk.spec.ts", + "column": 4, + "line": 86 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6439 - }, + "sourceFile": "packages/extension-sdk/src/connect/tile/tile_sdk.spec.ts", + "column": 4, + "line": 113 + } + ], + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6496 - }, + "sourceFile": "packages/extension-sdk-react/src/components/ExtensionConnector/ExtensionConnector.tsx", + "column": 8, + "line": 104 + } + ] + } + }, + "addErrors": { + "operationId": "addErrors", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6691 - }, + "sourceFile": "packages/extension-sdk/src/connect/tile/tile_sdk.spec.ts", + "column": 4, + "line": 138 + } + ], + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6795 - }, + "sourceFile": "packages/extension-tile-playground/src/components/Inspector/components/EventTester/EventTester.tsx", + "column": 4, + "line": 49 + } + ] + } + }, + "clearErrors": { + "operationId": "clearErrors", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6898 - }, + "sourceFile": "packages/extension-sdk/src/connect/tile/tile_sdk.spec.ts", + "column": 4, + "line": 146 + } + ], + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6922 + "sourceFile": "packages/extension-tile-playground/src/components/Inspector/components/EventTester/EventTester.tsx", + "column": 4, + "line": 64 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 6981 - }, + "sourceFile": "packages/extension-tile-playground/src/components/Inspector/components/EventTester/EventTester.tsx", + "column": 4, + "line": 68 + } + ] + } + }, + "openDrillMenu": { + "operationId": "openDrillMenu", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7239 - }, + "sourceFile": "packages/extension-sdk/src/connect/tile/tile_sdk.spec.ts", + "column": 4, + "line": 153 + } + ], + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7320 - }, + "sourceFile": "packages/extension-tile-playground/src/components/Inspector/components/EventTester/EventTester.tsx", + "column": 6, + "line": 82 + } + ] + } + }, + "toggleCrossFilter": { + "operationId": "toggleCrossFilter", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7705 - }, + "sourceFile": "packages/extension-sdk/src/connect/tile/tile_sdk.spec.ts", + "column": 4, + "line": 163 + } + ], + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7741 - }, + "sourceFile": "packages/extension-tile-playground/src/components/Inspector/components/EventTester/EventTester.tsx", + "column": 6, + "line": 74 + } + ] + } + }, + "runDashboard": { + "operationId": "runDashboard", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7860 - }, + "sourceFile": "packages/extension-sdk/src/connect/tile/tile_sdk.spec.ts", + "column": 4, + "line": 172 + } + ], + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7950 - }, + "sourceFile": "packages/extension-tile-playground/src/components/Inspector/components/EventTester/EventTester.tsx", + "column": 4, + "line": 88 + } + ] + } + }, + "stopDashboard": { + "operationId": "stopDashboard", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 7985 - }, + "sourceFile": "packages/extension-sdk/src/connect/tile/tile_sdk.spec.ts", + "column": 4, + "line": 178 + } + ], + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8011 - }, + "sourceFile": "packages/extension-tile-playground/src/components/Inspector/components/EventTester/EventTester.tsx", + "column": 4, + "line": 92 + } + ] + } + }, + "updateFilters": { + "operationId": "updateFilters", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8037 - }, + "sourceFile": "packages/extension-sdk/src/connect/tile/tile_sdk.spec.ts", + "column": 4, + "line": 185 + } + ], + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8086 - }, + "sourceFile": "packages/extension-tile-playground/src/components/Inspector/components/EventTester/EventTester.tsx", + "column": 4, + "line": 106 + } + ] + } + }, + "openScheduleDialog": { + "operationId": "openScheduleDialog", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8247 - }, + "sourceFile": "packages/extension-sdk/src/connect/tile/tile_sdk.spec.ts", + "column": 4, + "line": 194 + } + ], + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8318 - }, + "sourceFile": "packages/extension-tile-playground/src/components/Inspector/components/EventTester/EventTester.tsx", + "column": 4, + "line": 110 + } + ] + } + }, + "createClient": { + "operationId": "createClient", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8554 + "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk.spec.ts", + "column": 29, + "line": 105 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8682 + "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk.ts", + "column": 11, + "line": 42 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 8919 + "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk_40.ts", + "column": 11, + "line": 42 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9057 - }, + "sourceFile": "packages/sdk/src/extensionSdk.ts", + "column": 5, + "line": 44 + } + ], + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9223 - }, + "sourceFile": "packages/extension-sdk-react/src/components/ExtensionProvider2/ExtensionProvider2.tsx", + "column": 16, + "line": 69 + } + ] + } + }, + "create40Client": { + "operationId": "create40Client", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9312 + "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk.spec.ts", + "column": 16, + "line": 123 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9344 - }, + "sourceFile": "packages/extension-sdk/src/sdk/extension_sdk.ts", + "column": 11, + "line": 52 + } + ], + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9385 + "sourceFile": "packages/extension-sdk-react/src/components/ExtensionProvider/ExtensionProvider.tsx", + "column": 6, + "line": 60 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9422 - }, + "sourceFile": "packages/extension-sdk-react/src/components/ExtensionProvider40/ExtensionProvider40.tsx", + "column": 6, + "line": 66 + } + ] + } + }, + "closeHostPopovers": { + "operationId": "closeHostPopovers", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9451 - }, + "sourceFile": "packages/extension-sdk-react/src/components/utils/setup_close_popovers.ts", + "column": 6, + "line": 32 + } + ] + } + }, + "rendered": { + "operationId": "rendered", + "calls": { + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9568 + "sourceFile": "packages/extension-tile-playground/src/components/DashboardTile/DashboardTile.tsx", + "column": 4, + "line": 100 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9743 - }, + "sourceFile": "packages/extension-tile-playground/src/components/VisualizationTile/VisualizationTile.tsx", + "column": 6, + "line": 74 + } + ] + } + }, + "updateTitle": { + "operationId": "updateTitle", + "calls": { + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9935 - }, + "sourceFile": "packages/extension-tile-playground/src/components/Inspector/components/EventTester/EventTester.tsx", + "column": 4, + "line": 114 + } + ] + } + }, + "updateRowLimit": { + "operationId": "updateRowLimit", + "calls": { + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 9981 - }, + "sourceFile": "packages/extension-tile-playground/src/components/Inspector/components/EventTester/EventTester.tsx", + "column": 4, + "line": 118 + } + ] + } + }, + "configureVisualization": { + "operationId": "configureVisualization", + "calls": { + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10533 - }, + "sourceFile": "packages/extension-tile-playground/src/components/VisualizationTile/VisualizationTile.tsx", + "column": 6, + "line": 59 + } + ] + } + }, + "setVisConfig": { + "operationId": "setVisConfig", + "calls": { + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10592 + "sourceFile": "packages/extension-tile-playground/src/components/VisualizationTile/VisualizationTile.tsx", + "column": 6, + "line": 66 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10778 - }, + "sourceFile": "packages/extension-tile-playground/src/components/VisualizationTile/VisualizationTile.tsx", + "column": 6, + "line": 68 + } + ] + } + }, + "openBrowserWindow": { + "operationId": "openBrowserWindow", + "calls": { + ".tsx": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 10907 - }, + "sourceFile": "packages/extension-utils/src/ExtMarkdown.tsx", + "column": 39, + "line": 45 + } + ], + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", + "sourceFile": "packages/extension-utils/src/extensionAdaptor.ts", "column": 9, - "line": 11124 - }, + "line": 96 + } + ] + } + }, + "clipboardWrite": { + "operationId": "clipboardWrite", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11342 - }, + "sourceFile": "packages/extension-utils/src/extensionAdaptor.ts", + "column": 17, + "line": 71 + } + ] + } + }, + "localStorageGetItem": { + "operationId": "localStorageGetItem", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11637 - }, + "sourceFile": "packages/extension-utils/src/extensionAdaptor.ts", + "column": 22, + "line": 80 + } + ] + } + }, + "localStorageSetItem": { + "operationId": "localStorageSetItem", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 11743 - }, + "sourceFile": "packages/extension-utils/src/extensionAdaptor.ts", + "column": 15, + "line": 84 + } + ] + } + }, + "localStorageRemoveItem": { + "operationId": "localStorageRemoveItem", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12075 - }, + "sourceFile": "packages/extension-utils/src/extensionAdaptor.ts", + "column": 15, + "line": 88 + } + ] + } + }, + "error": { + "operationId": "error", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", + "sourceFile": "packages/extension-utils/src/extensionAdaptor.ts", "column": 9, - "line": 12321 - }, + "line": 100 + } + ] + } + }, + "fetchProxy": { + "operationId": "fetchProxy", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12515 + "sourceFile": "packages/hackathon/src/authToken/extensionProxyTransport.ts", + "column": 24, + "line": 121 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12548 - }, + "sourceFile": "packages/hackathon/src/authToken/extensionProxyTransport.ts", + "column": 21, + "line": 130 + } + ] + } + }, + "createSecretKeyTag": { + "operationId": "createSecretKeyTag", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12571 + "sourceFile": "packages/hackathon/src/authToken/gAuthSession.ts", + "column": 22, + "line": 92 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12627 - }, + "sourceFile": "packages/hackathon/src/authToken/gAuthSession.ts", + "column": 26, + "line": 93 + } + ] + } + }, + "serverProxy": { + "operationId": "serverProxy", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", - "column": 9, - "line": 12784 - }, + "sourceFile": "packages/hackathon/src/authToken/gAuthSession.ts", + "column": 34, + "line": 99 + } + ] + } + }, + "user_roles": { + "operationId": "user_roles", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", - "column": 9, - "line": 745 + "sourceFile": "packages/hackathon/src/models/Hacker.ts", + "column": 33, + "line": 128 } ] } }, - "delete": { - "operationId": "delete", + "user_attribute_user_values": { + "operationId": "user_attribute_user_values", "calls": { ".ts": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 371 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 740 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 934 - }, - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 1124 - }, + "sourceFile": "packages/hackathon/src/models/Hacker.ts", + "column": 13, + "line": 154 + } + ] + } + }, + "role_users": { + "operationId": "role_users", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 1389 + "sourceFile": "packages/hackathon/src/models/Hacker.ts", + "column": 15, + "line": 356 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 2030 + "sourceFile": "packages/hackathon/src/models/Hacker.ts", + "column": 15, + "line": 366 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 2057 - }, + "sourceFile": "packages/hackathon/src/models/Hacker.ts", + "column": 15, + "line": 376 + } + ] + } + }, + "index": { + "operationId": "index", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 2254 + "sourceFile": "packages/hackathon/src/models/Judgings.spec.ts", + "column": 19, + "line": 49 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 2450 - }, + "sourceFile": "packages/hackathon/src/models/SheetData.spec.ts", + "column": 21, + "line": 50 + } + ] + } + }, + "post": { + "operationId": "post", + "calls": { + ".ts": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2919 + "line": 353 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3103 + "line": 562 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3230 + "line": 588 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3441 + "line": 691 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3861 + "line": 734 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4261 + "line": 1055 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4384 + "line": 1144 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4409 + "line": 1194 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4465 + "line": 1273 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4657 + "line": 1586 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4794 + "line": 1724 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4927 + "line": 1848 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5081 + "line": 2025 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5457 + "line": 2235 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5635 + "line": 2260 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5845 + "line": 2287 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6551 + "line": 2387 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7192 + "line": 2621 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7621 + "line": 2805 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7805 + "line": 2931 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 8018 + "line": 3074 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 8265 + "line": 3462 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 8841 + "line": 3808 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 9432 + "line": 4002 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 9686 + "line": 4247 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 9839 + "line": 4275 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 9914 + "line": 4319 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 9962 + "line": 4463 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10010 + "line": 4712 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10058 + "line": 4839 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10106 + "line": 5154 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10158 + "line": 5269 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10262 + "line": 5522 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10335 + "line": 5545 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10387 + "line": 5579 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10598 + "line": 5760 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10734 + "line": 5889 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 360 + "line": 6100 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 493 + "line": 6127 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 736 + "line": 6150 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 784 + "line": 6516 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1167 + "line": 6738 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1319 + "line": 7035 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1346 + "line": 7092 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1419 + "line": 7287 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1525 + "line": 7391 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1719 + "line": 7494 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1907 + "line": 7518 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2060 + "line": 7577 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2243 + "line": 7836 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2368 + "line": 7917 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2494 + "line": 8302 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2759 + "line": 8338 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3521 + "line": 8457 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3548 + "line": 8547 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3836 + "line": 8582 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3980 + "line": 8608 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4132 + "line": 8634 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4332 + "line": 8683 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4803 + "line": 8844 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5112 + "line": 8915 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5239 + "line": 9151 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5450 + "line": 9279 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5870 + "line": 9514 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6392 + "line": 9654 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6523 + "line": 9821 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6550 + "line": 9891 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6610 + "line": 9944 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6771 + "line": 9985 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7154 + "line": 10022 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7396 + "line": 10051 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7918 + "line": 10169 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 8624 + "line": 10344 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 9268 + "line": 10536 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 9702 + "line": 10582 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 9889 + "line": 11136 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10161 + "line": 11195 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10416 + "line": 11381 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 11214 + "line": 11546 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 11532 + "line": 11611 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 11689 + "line": 11828 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 11767 + "line": 12049 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 11817 + "line": 12350 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 11867 + "line": 12464 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 11917 + "line": 12822 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 11967 + "line": 13086 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 12023 + "line": 13282 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 12131 + "line": 13317 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 12207 + "line": 13342 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 12263 + "line": 13403 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 12483 + "line": 13560 }, { - "sourceFile": "packages/sdk/src/4.0/funcs.ts", + "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", "column": 9, - "line": 12705 + "line": 1082 } ] } }, - "patch": { - "operationId": "patch", + "delete": { + "operationId": "delete", "calls": { ".ts": [ { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 490 + "line": 377 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 692 + "line": 510 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 807 + "line": 755 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 886 + "line": 860 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1044 + "line": 971 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1358 + "line": 1081 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1441 + "line": 1301 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1485 + "line": 1634 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1531 + "line": 1786 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1598 + "line": 1813 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1667 + "line": 1886 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1711 + "line": 2000 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1780 + "line": 2210 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2006 + "line": 2415 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2352 + "line": 2574 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2822 + "line": 2758 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2889 + "line": 2883 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3079 + "line": 3009 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3206 + "line": 3274 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3337 + "line": 4078 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3417 + "line": 4105 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3612 + "line": 4393 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3836 + "line": 4537 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4238 + "line": 4689 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4440 + "line": 4889 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4632 + "line": 5402 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4769 + "line": 5711 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4902 + "line": 5838 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5058 + "line": 6049 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5181 + "line": 6470 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5428 + "line": 6988 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5611 + "line": 7119 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6090 + "line": 7146 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7598 + "line": 7206 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7782 + "line": 7367 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7995 + "line": 7750 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 8238 + "line": 7993 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 8688 + "line": 8515 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 8814 + "line": 9221 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 9400 + "line": 9866 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 9661 + "line": 10303 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 9816 + "line": 10490 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10568 + "line": 10762 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10711 + "line": 11019 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 469 + "line": 11918 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 620 + "line": 12239 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 951 + "line": 12406 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1143 + "line": 12490 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1287 + "line": 12544 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1477 + "line": 12598 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1592 + "line": 12652 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1671 + "line": 12706 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1829 + "line": 12766 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2219 + "line": 12882 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2344 + "line": 12964 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2470 + "line": 13024 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2728 + "line": 13248 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2807 - }, + "line": 13481 + } + ] + } + }, + "put": { + "operationId": "put", + "calls": { + ".ts": [ { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2857 + "line": 458 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2924 + "line": 1024 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3016 + "line": 1344 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3060 + "line": 1452 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3131 + "line": 1496 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3236 + "line": 1529 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3497 + "line": 1562 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3812 + "line": 2096 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3956 + "line": 2442 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4232 + "line": 2467 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4706 + "line": 3181 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4773 + "line": 3395 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4886 + "line": 3952 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5088 + "line": 4140 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5215 + "line": 4172 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5346 + "line": 4865 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5426 + "line": 8424 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5621 + "line": 9189 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5845 + "line": 10811 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6368 + "line": 10864 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6583 + "line": 11738 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6747 - }, + "line": 13141 + } + ] + } + }, + "patch": { + "operationId": "patch", + "calls": { + ".ts": [ { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6872 + "line": 486 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7124 + "line": 637 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7270 + "line": 1410 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7372 + "line": 1610 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 8163 + "line": 1754 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 9678 + "line": 1948 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 9865 + "line": 2073 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10137 + "line": 2158 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10388 + "line": 2331 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10842 + "line": 2734 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 11182 + "line": 2859 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 11506 + "line": 2985 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 11665 + "line": 3243 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 12451 + "line": 3322 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 12681 - } - ] - } - }, - "put": { - "operationId": "put", - "calls": { - ".ts": [ - { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", - "column": 9, - "line": 530 + "line": 3372 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 572 + "line": 3439 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 603 + "line": 3533 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 634 + "line": 3577 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 828 + "line": 3654 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1296 + "line": 3783 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1554 + "line": 4054 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1904 + "line": 4369 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2092 + "line": 4513 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2124 + "line": 4789 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2427 + "line": 5305 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 5754 + "line": 5372 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 6519 + "line": 5485 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 8063 + "line": 5687 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 8114 + "line": 5814 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 9252 + "line": 5945 }, { - "sourceFile": "packages/sdk/src/3.1/funcs.ts", + "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10496 + "line": 6025 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 441 + "line": 6220 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 991 + "line": 6445 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1033 + "line": 6964 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1064 + "line": 7179 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1095 + "line": 7343 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1613 + "line": 7468 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1932 + "line": 7720 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 1955 + "line": 7867 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2666 + "line": 7969 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 2880 + "line": 8760 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3395 + "line": 10279 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3583 + "line": 10466 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 3615 + "line": 10738 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 4308 + "line": 10991 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 7827 + "line": 11445 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 8592 + "line": 11886 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10208 + "line": 12213 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 10261 + "line": 12380 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 11034 + "line": 13216 }, { "sourceFile": "packages/sdk/src/4.0/funcs.ts", "column": 9, - "line": 12376 + "line": 13457 } ] } @@ -8853,17 +7548,17 @@ { "sourceFile": "packages/sdk-codegen/src/kotlin.gen.spec.ts", "column": 64, - "line": 253 + "line": 247 }, { "sourceFile": "packages/sdk-codegen/src/python.gen.spec.ts", - "column": 35, - "line": 1027 + "column": 76, + "line": 1019 }, { "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", - "column": 52, - "line": 298 + "column": 28, + "line": 515 } ] } @@ -8875,17 +7570,17 @@ { "sourceFile": "packages/sdk-codegen/src/kotlin.gen.spec.ts", "column": 62, - "line": 295 + "line": 289 }, { "sourceFile": "packages/sdk-codegen/src/python.gen.spec.ts", - "column": 35, - "line": 1071 + "column": 76, + "line": 1063 }, { "sourceFile": "packages/sdk-codegen/src/typescript.gen.spec.ts", - "column": 52, - "line": 343 + "column": 28, + "line": 571 } ] } @@ -8933,7 +7628,7 @@ { "sourceFile": "packages/sdk-codegen-scripts/src/exampleMiner.spec.ts", "column": 35, - "line": 205 + "line": 206 } ] } @@ -8950,18 +7645,6 @@ ] } }, - "delete_dashboard": { - "operationId": "delete_dashboard", - "calls": { - ".ts": [ - { - "sourceFile": "packages/sdk-node/test/methods.spec.ts", - "column": 23, - "line": 218 - } - ] - } - }, "search_users_names": { "operationId": "search_users_names", "calls": { @@ -8969,22 +7652,22 @@ { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 10, - "line": 544 + "line": 540 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 10, - "line": 559 + "line": 555 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 10, - "line": 587 + "line": 583 }, { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 10, - "line": 598 + "line": 594 } ], ".py": [ @@ -9023,7 +7706,7 @@ { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 14, - "line": 1028 + "line": 1026 } ], ".py": [ @@ -9042,7 +7725,7 @@ { "sourceFile": "packages/sdk-node/test/methods.spec.ts", "column": 38, - "line": 1078 + "line": 1076 } ], ".py": [ @@ -9061,12 +7744,24 @@ { "sourceFile": "packages/wholly-sheet/src/SheetSDK.ts", "column": 17, - "line": 394 + "line": 397 }, { "sourceFile": "packages/wholly-sheet/src/SheetSDK.ts", "column": 17, - "line": 425 + "line": 428 + } + ] + } + }, + "init31": { + "operationId": "init31", + "calls": { + ".py": [ + { + "sourceFile": "python/tests/conftest.py", + "column": 18, + "line": 130 } ] } @@ -9156,4 +7851,4 @@ } } } -} \ No newline at end of file +} diff --git a/go/README.md b/go/README.md index 142e8148f..c20af3156 100644 --- a/go/README.md +++ b/go/README.md @@ -4,7 +4,7 @@ The Go Looker SDK provides a convenient way to call your Looker instance's [Look ## Basic Usage -Example code snippet below for basic SDK setup and usage. Also `git clone` this sdk-codegen repo and run the [example code](go/example/main.go). +Example code snippet below for basic SDK setup and usage. Also `git clone` this sdk-codegen repo and run the [example code](go/example/main.go). ```go import ( @@ -20,12 +20,12 @@ func main() { // environment cfg, err := rtl.NewSettingsFromEnv() - // Create new auth session with sdk settings. - // The auth session will fetch/refresh the access - // token from your Looker instance's `login` endpoint. + // Create new auth session with sdk settings. + // The auth session will fetch/refresh the access + // token from your Looker instance's `login` endpoint. session := rtl.NewAuthSession(cfg) - // Create new instance of the Go Looker SDK + // Create new instance of the Go Looker SDK sdk := v4.NewLookerSDK(session) // Call the Looker API e.g. get your user's name @@ -38,7 +38,7 @@ func main() { ### Custom headers -You can set custom headers on Looker Go SDK's requests. They can either be applied to all outgoing requests or per outgoing request. +You can set custom headers on Looker Go SDK's requests. They can either be applied to all outgoing requests or per outgoing request. #### Custom headers for all requests @@ -53,7 +53,7 @@ func main() { "HeaderName1": "HeaderValue1", "HeaderName2": "HeaderValue2", } - + session := rtl.NewAuthSession(cfg) sdk := v4.NewLookerSDK(session) } @@ -77,13 +77,14 @@ func main() { } ``` -### Timeout +### Timeout -You can set a custom timeout (in seconds) on Looker Go SDK's requests. The timeout defaults to 120 seconds. A timeout can either be applied to all outgoing requests or per outgoing request. +You can set a custom timeout (in seconds) on Looker Go SDK's requests. The timeout defaults to 120 seconds. A timeout can either be applied to all outgoing requests or per outgoing request. #### Timeout for all requests -Set `timeout` in your sdk's looker.ini file then call `NewSettingsFromFile()`. +Set `timeout` in your sdk's looker.ini file then call `NewSettingsFromFile()`. + ```YAML [Looker] timeout=60 @@ -92,6 +93,7 @@ timeout=60 OR Set `LOOKERSDK_TIMEOUT` environment variable then call `NewSettingsFromEnv()`. + ```bash LOOKERSDK_TIMEOUT=60 ``` diff --git a/go/rtl/auth.go b/go/rtl/auth.go index 94a9f1288..d993bec7f 100644 --- a/go/rtl/auth.go +++ b/go/rtl/auth.go @@ -132,7 +132,7 @@ func (s *AuthSession) Do(result interface{}, method, ver, path string, reqPars m timeoutInSeconds = options.Timeout } - ctx, cncl := context.WithTimeout(context.Background(), time.Second * time.Duration(timeoutInSeconds)) + ctx, cncl := context.WithTimeout(context.Background(), time.Second*time.Duration(timeoutInSeconds)) defer cncl() // create new request diff --git a/go/rtl/auth_test.go b/go/rtl/auth_test.go index 245f2e8d7..c63754e52 100644 --- a/go/rtl/auth_test.go +++ b/go/rtl/auth_test.go @@ -414,7 +414,7 @@ func TestAuthSession_Do_Headers(t *testing.T) { s := NewAuthSession(ApiSettings{ BaseUrl: server.URL, ApiVersion: apiVersion, - Headers: map[string]string{"Key1":"Value1","Key2":"Value2"}, + Headers: map[string]string{"Key1": "Value1", "Key2": "Value2"}, }) var r string @@ -445,11 +445,11 @@ func TestAuthSession_Do_Headers(t *testing.T) { s := NewAuthSession(ApiSettings{ BaseUrl: server.URL, ApiVersion: apiVersion, - Headers: map[string]string{"Key1":"Value1","Key2":"Value2"}, + Headers: map[string]string{"Key1": "Value1", "Key2": "Value2"}, }) options := ApiSettings{ - Headers: map[string]string{"Key1":"Value1","Key2":"OverwriteValue2"}, + Headers: map[string]string{"Key1": "Value1", "Key2": "OverwriteValue2"}, } var r string err := s.Do(&r, "GET", apiVersion, path, nil, nil, &options) @@ -480,9 +480,9 @@ func TestAuthSession_Do_Headers(t *testing.T) { var r string body := struct { - key string + key string }{ - key: "value", + key: "value", } err := session.Do(&r, "GET", apiVersion, path, nil, body, nil) @@ -569,7 +569,7 @@ func TestAuthSession_Do_Headers(t *testing.T) { var r string options := ApiSettings{ - AgentTag: "new-agent-tag", + AgentTag: "new-agent-tag", } err := session.Do(&r, "GET", apiVersion, path, nil, nil, &options) @@ -596,7 +596,7 @@ func TestAuthSession_Do_Timeout(t *testing.T) { session := NewAuthSession(ApiSettings{ BaseUrl: server.URL, ApiVersion: apiVersion, - Timeout: 1, // seconds + Timeout: 1, // seconds }) err := session.Do(nil, "GET", apiVersion, path, nil, nil, nil) @@ -604,8 +604,8 @@ func TestAuthSession_Do_Timeout(t *testing.T) { if err == nil { t.Errorf("Do() call did not error/timeout") } else if !errors.Is(err, context.DeadlineExceeded) { - t.Errorf("Do() call did not error with context.DeadlineExceeded, got=%v", err) - } + t.Errorf("Do() call did not error with context.DeadlineExceeded, got=%v", err) + } }) t.Run("Do() follows Timeout set in Do()'s options", func(t *testing.T) { @@ -632,8 +632,8 @@ func TestAuthSession_Do_Timeout(t *testing.T) { if err == nil { t.Errorf("Do() call did not error/timeout") } else if !errors.Is(err, context.DeadlineExceeded) { - t.Errorf("Do() call did not error with context.DeadlineExceeded, got=%v", err) - } + t.Errorf("Do() call did not error with context.DeadlineExceeded, got=%v", err) + } }) } diff --git a/go/sdk/v4/methods.go b/go/sdk/v4/methods.go index 2d8cd5f0d..52fa786b2 100644 --- a/go/sdk/v4/methods.go +++ b/go/sdk/v4/methods.go @@ -576,7 +576,7 @@ func (l *LookerSDK) CreateSsoEmbedUrl( // "Powered by Looker" (PBL) web application. // // This is similar to Private Embedding (https://cloud.google.com/looker/docs/r/admin/embed/private-embed). Instead of -// of logging into the Web UI to authenticate, the user has already authenticated against the API to be able to +// logging into the Web UI to authenticate, the user has already authenticated against the API to be able to // make this call. However, unlike Private Embed where the user has access to any other part of the Looker UI, // the embed web session created by requesting the EmbedUrlResponse.url in a browser only has access to // content visible under the `/embed` context. @@ -637,7 +637,7 @@ func (l *LookerSDK) ValidateEmbedUrl( // If the `session_reference_token` is provided but the session has expired, the token will be ignored and a // new embed session will be created. Note that the embed user definition will be updated in this scenario. // -// If the credentials do not match the credentials associated with an exisiting session_reference_token, a +// If the credentials do not match the credentials associated with an existing session_reference_token, a // 404 will be returned. // // The endpoint returns the following: @@ -689,6 +689,13 @@ func (l *LookerSDK) DeleteEmbedCookielessSession( // The generate tokens endpoint should be called every time the Looker client asks for a token (except for the // first time when the tokens returned by the acquire_session endpoint should be used). // +// #### Embed session expiration handling +// +// This endpoint does NOT return an error when the embed session expires. This is to simplify processing +// in the caller as errors can happen for non session expiration reasons. Instead the endpoint returns +// the session time to live in the `session_reference_token_ttl` response property. If this property +// contains a zero, the embed session has expired. +// // Calls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled // // PUT /embed/cookieless_session/generate_tokens -> EmbedCookielessSessionGenerateTokensResponse @@ -1067,7 +1074,7 @@ func (l *LookerSDK) DeactivateAppUser( // // Configuring OIDC impacts authentication for all users. This configuration should be done carefully. // -// Looker maintains a single OIDC configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). +// Looker maintains a single OIDC configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). // // OIDC is enabled or disabled for Looker using the **enabled** field. // @@ -1197,7 +1204,7 @@ func (l *LookerSDK) ForcePasswordResetAtNextLoginForAllUsers( // // Configuring SAML impacts authentication for all users. This configuration should be done carefully. // -// Looker maintains a single SAML configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). +// Looker maintains a single SAML configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). // // SAML is enabled or disabled for Looker using the **enabled** field. // @@ -2795,7 +2802,7 @@ func (l *LookerSDK) SearchContent(request RequestSearchContent, // ### Get an image representing the contents of a dashboard or look. // -// The returned thumbnail is an abstract representation of the contents of a dashbord or look and does not +// The returned thumbnail is an abstract representation of the contents of a dashboard or look and does not // reflect the actual data displayed in the respective visualizations. // // GET /content_thumbnail/{type}/{resource_id} -> string @@ -2862,7 +2869,7 @@ func (l *LookerSDK) SearchContentViews(request RequestSearchContentViews, // // # DEPRECATED: Use [content_thumbnail()](#!/Content/content_thumbnail) // -// The returned thumbnail is an abstract representation of the contents of a dashbord or look and does not +// The returned thumbnail is an abstract representation of the contents of a dashboard or look and does not // reflect the actual data displayed in the respective visualizations. // // GET /vector_thumbnail/{type}/{resource_id} -> string @@ -3043,7 +3050,7 @@ func (l *LookerSDK) Dashboard( // You can use this function to change the string and integer properties of // a dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components // cannot be modified by this function - use the update functions for the respective -// nested object types (like [update_dashboard_filter()](#!/3.1/Dashboard/update_dashboard_filter) to change a filter) +// nested object types (like [update_dashboard_filter()](#!/Dashboard/update_dashboard_filter) to change a filter) // to modify nested objects referenced by a dashboard. // // If you receive a 422 error response when updating a dashboard, be sure to look at the @@ -3080,7 +3087,7 @@ func (l *LookerSDK) DeleteDashboard( } -// ### Get Aggregate Table LookML for Each Query on a Dahboard +// ### Get Aggregate Table LookML for Each Query on a Dashboard // // # Returns a JSON object that contains the dashboard id and Aggregate Table lookml // @@ -3865,7 +3872,7 @@ func (l *LookerSDK) SearchGroups(request RequestSearchGroups, // Boolean search params accept only "true" and "false" as values. // // GET /groups/search/with_roles -> []GroupSearch -func (l *LookerSDK) SearchGroupsWithRoles(request RequestSearchGroups, +func (l *LookerSDK) SearchGroupsWithRoles(request RequestSearchGroupsWithRoles, options *rtl.ApiSettings) ([]GroupSearch, error) { var result []GroupSearch err := l.session.Do(&result, "GET", "/4.0", "/groups/search/with_roles", map[string]interface{}{"fields": request.Fields, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts, "filter_or": request.FilterOr, "id": request.Id, "name": request.Name, "external_group_id": request.ExternalGroupId, "externally_managed": request.ExternallyManaged, "externally_orphaned": request.ExternallyOrphaned}, nil, options) @@ -3900,7 +3907,7 @@ func (l *LookerSDK) SearchGroupsWithRoles(request RequestSearchGroups, // Boolean search params accept only "true" and "false" as values. // // GET /groups/search/with_hierarchy -> []GroupHierarchy -func (l *LookerSDK) SearchGroupsWithHierarchy(request RequestSearchGroups, +func (l *LookerSDK) SearchGroupsWithHierarchy(request RequestSearchGroupsWithHierarchy, options *rtl.ApiSettings) ([]GroupHierarchy, error) { var result []GroupHierarchy err := l.session.Do(&result, "GET", "/4.0", "/groups/search/with_hierarchy", map[string]interface{}{"fields": request.Fields, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts, "filter_or": request.FilterOr, "id": request.Id, "name": request.Name, "external_group_id": request.ExternalGroupId, "externally_managed": request.ExternallyManaged, "externally_orphaned": request.ExternallyOrphaned}, nil, options) @@ -4390,7 +4397,7 @@ func (l *LookerSDK) DeleteLook( // | result_format | Description // | :-----------: | :--- | // | json | Plain json -// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query +// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema // | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query // | csv | Comma separated values with a header // | txt | Tab separated values with a header @@ -4460,7 +4467,7 @@ func (l *LookerSDK) MoveLook( // ### Get information about all lookml models. // // GET /lookml_models -> []LookmlModel -func (l *LookerSDK) AllLookmlModels(request RequestArtifactNamespaces, +func (l *LookerSDK) AllLookmlModels(request RequestAllLookmlModels, options *rtl.ApiSettings) ([]LookmlModel, error) { var result []LookmlModel err := l.session.Do(&result, "GET", "/4.0", "/lookml_models", map[string]interface{}{"fields": request.Fields, "limit": request.Limit, "offset": request.Offset}, nil, options) @@ -4524,15 +4531,12 @@ func (l *LookerSDK) DeleteLookmlModel( // ### Get information about a lookml model explore. // // GET /lookml_models/{lookml_model_name}/explores/{explore_name} -> LookmlModelExplore -func (l *LookerSDK) LookmlModelExplore( - lookmlModelName string, - exploreName string, - fields string, +func (l *LookerSDK) LookmlModelExplore(request RequestLookmlModelExplore, options *rtl.ApiSettings) (LookmlModelExplore, error) { - lookmlModelName = url.PathEscape(lookmlModelName) - exploreName = url.PathEscape(exploreName) + request.LookmlModelName = url.PathEscape(request.LookmlModelName) + request.ExploreName = url.PathEscape(request.ExploreName) var result LookmlModelExplore - err := l.session.Do(&result, "GET", "/4.0", fmt.Sprintf("/lookml_models/%v/explores/%v", lookmlModelName, exploreName), map[string]interface{}{"fields": fields}, nil, options) + err := l.session.Do(&result, "GET", "/4.0", fmt.Sprintf("/lookml_models/%v/explores/%v", request.LookmlModelName, request.ExploreName), map[string]interface{}{"fields": request.Fields, "add_drills_metadata": request.AddDrillsMetadata}, nil, options) return result, err } @@ -5210,8 +5214,6 @@ func (l *LookerSDK) RunLookmlTest(request RequestRunLookmlTest, // ### Creates a tag for the most recent commit, or a specific ref is a SHA is provided // -// This is an internal-only, undocumented route. -// // POST /projects/{project_id}/tag -> Project func (l *LookerSDK) TagRef(request RequestTagRef, options *rtl.ApiSettings) (Project, error) { @@ -5293,7 +5295,7 @@ func (l *LookerSDK) GetAllRepositoryCredentials( func (l *LookerSDK) CreateQueryTask(request RequestCreateQueryTask, options *rtl.ApiSettings) (QueryTask, error) { var result QueryTask - err := l.session.Do(&result, "POST", "/4.0", "/query_tasks", map[string]interface{}{"limit": request.Limit, "apply_formatting": request.ApplyFormatting, "apply_vis": request.ApplyVis, "cache": request.Cache, "generate_drill_links": request.GenerateDrillLinks, "force_production": request.ForceProduction, "cache_only": request.CacheOnly, "path_prefix": request.PathPrefix, "rebuild_pdts": request.RebuildPdts, "server_table_calcs": request.ServerTableCalcs, "image_width": request.ImageWidth, "image_height": request.ImageHeight, "fields": request.Fields}, request.Body, options) + err := l.session.Do(&result, "POST", "/4.0", "/query_tasks", map[string]interface{}{"limit": request.Limit, "apply_formatting": request.ApplyFormatting, "apply_vis": request.ApplyVis, "cache": request.Cache, "generate_drill_links": request.GenerateDrillLinks, "force_production": request.ForceProduction, "cache_only": request.CacheOnly, "path_prefix": request.PathPrefix, "rebuild_pdts": request.RebuildPdts, "server_table_calcs": request.ServerTableCalcs, "fields": request.Fields}, request.Body, options) return result, err } @@ -5360,12 +5362,12 @@ func (l *LookerSDK) QueryTask( // will be in the message of the 400 error response, but not as detailed as expressed in `json_detail.errors`. // These data formats can only carry row data, and error info is not row data. // -// GET /query_tasks/{query_task_id}/results -> string +// GET /query_tasks/{query_task_id}/results -> QueryTask func (l *LookerSDK) QueryTaskResults( queryTaskId string, - options *rtl.ApiSettings) (string, error) { + options *rtl.ApiSettings) (QueryTask, error) { queryTaskId = url.PathEscape(queryTaskId) - var result string + var result QueryTask err := l.session.Do(&result, "GET", "/4.0", fmt.Sprintf("/query_tasks/%v/results", queryTaskId), nil, nil, options) return result, err @@ -5463,7 +5465,7 @@ func (l *LookerSDK) CreateQuery( // | result_format | Description // | :-----------: | :--- | // | json | Plain json -// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query +// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema // | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query // | csv | Comma separated values with a header // | txt | Tab separated values with a header @@ -5532,7 +5534,7 @@ func (l *LookerSDK) RunQuery(request RequestRunQuery, // | result_format | Description // | :-----------: | :--- | // | json | Plain json -// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query +// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema // | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query // | csv | Comma separated values with a header // | txt | Tab separated values with a header @@ -5600,7 +5602,7 @@ func (l *LookerSDK) RunInlineQuery(request RequestRunInlineQuery, // | result_format | Description // | :-----------: | :--- | // | json | Plain json -// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query +// | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema // | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query // | csv | Comma separated values with a header // | txt | Tab separated values with a header @@ -5727,8 +5729,6 @@ func (l *LookerSDK) SqlQuery( // Execute a SQL Runner query in a given result_format. // // POST /sql_queries/{slug}/run/{result_format} -> string -// -// **Note**: Binary content may be returned by this method. func (l *LookerSDK) RunSqlQuery( slug string, resultFormat string, @@ -6014,7 +6014,7 @@ func (l *LookerSDK) AllPermissions( // Boolean search params accept only "true" and "false" as values. // // GET /permission_sets/search -> []PermissionSet -func (l *LookerSDK) SearchPermissionSets(request RequestSearchModelSets, +func (l *LookerSDK) SearchPermissionSets(request RequestSearchPermissionSets, options *rtl.ApiSettings) ([]PermissionSet, error) { var result []PermissionSet err := l.session.Do(&result, "GET", "/4.0", "/permission_sets/search", map[string]interface{}{"fields": request.Fields, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts, "id": request.Id, "name": request.Name, "all_access": request.AllAccess, "built_in": request.BuiltIn, "filter_or": request.FilterOr}, nil, options) @@ -6037,6 +6037,7 @@ func (l *LookerSDK) PermissionSet( } // ### Update information about the permission set with a specific id. +// Providing save_content permission alone will also provide you the abilities of save_looks and save_dashboards. // // PATCH /permission_sets/{permission_set_id} -> PermissionSet func (l *LookerSDK) UpdatePermissionSet( @@ -6076,6 +6077,7 @@ func (l *LookerSDK) AllPermissionSets( } // ### Create a permission set with the specified information. Permission sets are used by Roles. +// Providing save_content permission alone will also provide you the abilities of save_looks and save_dashboards. // // POST /permission_sets -> PermissionSet func (l *LookerSDK) CreatePermissionSet( @@ -6171,7 +6173,7 @@ func (l *LookerSDK) SearchRoles(request RequestSearchRoles, // Boolean search params accept only "true" and "false" as values. // // GET /roles/search/with_user_count -> []RoleSearch -func (l *LookerSDK) SearchRolesWithUserCount(request RequestSearchRoles, +func (l *LookerSDK) SearchRolesWithUserCount(request RequestSearchRolesWithUserCount, options *rtl.ApiSettings) ([]RoleSearch, error) { var result []RoleSearch err := l.session.Do(&result, "GET", "/4.0", "/roles/search/with_user_count", map[string]interface{}{"fields": request.Fields, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts, "id": request.Id, "name": request.Name, "built_in": request.BuiltIn, "filter_or": request.FilterOr}, nil, options) @@ -6716,18 +6718,14 @@ func (l *LookerSDK) SqlInterfaceMetadata( // | md | Simple markdown // | xlsx | MS Excel spreadsheet // | sql | Returns the generated SQL rather than running the query -// | png | A PNG image of the visualization of the query -// | jpg | A JPG image of the visualization of the query -// -// GET /sql_interface_queries/{query_id}/run/{result_format} -> string // -// **Note**: Binary content may be returned by this method. +// GET /sql_interface_queries/{query_id}/run/{result_format} -> QueryFormats func (l *LookerSDK) RunSqlInterfaceQuery( queryId int64, resultFormat string, - options *rtl.ApiSettings) (string, error) { + options *rtl.ApiSettings) (QueryFormats, error) { resultFormat = url.PathEscape(resultFormat) - var result string + var result QueryFormats err := l.session.Do(&result, "GET", "/4.0", fmt.Sprintf("/sql_interface_queries/%v/run/%v", queryId, resultFormat), nil, nil, options) return result, err @@ -7837,7 +7835,7 @@ func (l *LookerSDK) CreateEmbedUser( // ### Get information about all user attributes. // // GET /user_attributes -> []UserAttribute -func (l *LookerSDK) AllUserAttributes(request RequestAllBoardSections, +func (l *LookerSDK) AllUserAttributes(request RequestAllUserAttributes, options *rtl.ApiSettings) ([]UserAttribute, error) { var result []UserAttribute err := l.session.Do(&result, "GET", "/4.0", "/user_attributes", map[string]interface{}{"fields": request.Fields, "sorts": request.Sorts}, nil, options) diff --git a/go/sdk/v4/models.go b/go/sdk/v4/models.go index 67dc560a8..806e58692 100644 --- a/go/sdk/v4/models.go +++ b/go/sdk/v4/models.go @@ -26,7 +26,7 @@ SOFTWARE. /* -392 API models: 249 Spec, 60 Request, 61 Write, 22 Enum +405 API models: 256 Spec, 67 Request, 60 Write, 22 Enum */ // NOTE: Do not edit this file generated by Looker SDK Codegen for API v4 @@ -1129,7 +1129,7 @@ type EmbedCookielessSessionAcquireResponse struct { ApiToken *string `json:"api_token,omitempty"` // Token to used to call Looker APIs. ApiTokenTtl *int64 `json:"api_token_ttl,omitempty"` // Api token time to live in seconds. SessionReferenceToken *string `json:"session_reference_token,omitempty"` // Token referencing the actual embed session. It is used to generate new api, navigation and authentication tokens. api and navigation tokens are short lived and must be refreshed regularly. A new authentication token must be acquired for each IFRAME that is created. The session_reference_token should be kept secure, ideally in the embed hosts application server. - SessionReferenceTokenTtl *int64 `json:"session_reference_token_ttl,omitempty"` // Session reference token time to live in seconds. Note that this is the same as actual session. + SessionReferenceTokenTtl *int64 `json:"session_reference_token_ttl,omitempty"` // Session reference token time to live in seconds. Note that this is the same as actual embed session. The session is expired when the value is set to zero. It is important to note that the generate token endpoint does NOT return an error when the embed session has expired. If an embedding application needs to monitor expiration of embed sessions, check this property for a value of zero. } type EmbedCookielessSessionGenerateTokens struct { @@ -1400,7 +1400,7 @@ type Integration struct { Description *string `json:"description,omitempty"` // Description of the integration. Enabled *bool `json:"enabled,omitempty"` // Whether the integration is available to users. Params *[]IntegrationParam `json:"params,omitempty"` // Array of params for the integration. - SupportedFormats *[]SupportedFormats `json:"supported_formats,omitempty"` // A list of data formats the integration supports. If unspecified, the default is all data formats. Valid values are: "txt", "csv", "inline_json", "json", "json_label", "json_detail", "json_detail_lite_stream", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png", "csv_zip". + SupportedFormats *[]SupportedFormats `json:"supported_formats,omitempty"` // A list of data formats the integration supports. If unspecified, the default is all data formats. Valid values are: "txt", "csv", "inline_json", "json", "json_label", "json_detail", "json_detail_lite_stream", "json_bi", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png", "csv_zip". SupportedActionTypes *[]SupportedActionTypes `json:"supported_action_types,omitempty"` // A list of action types the integration supports. Valid values are: "cell", "query", "dashboard", "none". SupportedFormattings *[]SupportedFormattings `json:"supported_formattings,omitempty"` // A list of formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: "formatted", "unformatted". SupportedVisualizationFormattings *[]SupportedVisualizationFormattings `json:"supported_visualization_formattings,omitempty"` // A list of visualization formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: "apply", "noapply". @@ -1467,6 +1467,52 @@ type InvestigativeContentType string const InvestigativeContentType_Dashboard InvestigativeContentType = "dashboard" +type JsonBi struct { + BigQueryMetadata JsonBiBigQueryMetadata `json:"big_query_metadata"` + Fields JsonBiFields `json:"fields"` + Pivots []JsonBiPivots `json:"pivots"` // Pivots + HasSubtotals bool `json:"has_subtotals"` // If the query has subtotals + HasTotals bool `json:"has_totals"` // If the query has totals + ColumnsTruncated string `json:"columns_truncated"` // If the query results hit the maximum column limit and additional columns were truncated + FilterExpression string `json:"filter_expression"` // Filter expression applied to the query results + Filters map[string]interface{} `json:"filters"` // Filters applied to the query results + Sql string `json:"sql"` // Raw sql query. Null if user does not have permission to view sql + Data []string `json:"data"` // Json query results +} + +type JsonBiBigQueryMetadata struct { + TotalBytesProcessed int64 `json:"total_bytes_processed"` // Total bytes processed by the BigQuery job + BackendCacheHit bool `json:"backend_cache_hit"` // Return whether or not query results were served from the BigQuery cache. +} + +type JsonBiField struct { + Sql string `json:"sql"` // SQL expressions for the field + View string `json:"view"` // Explore name + DimensionGroup string `json:"dimension_group"` // Which dimension group created this dimension + Category string `json:"category"` // Dimension, Measure, etc. + FieldGroupLabel string `json:"field_group_label"` // Field Group Label + Name string `json:"name"` // Field Name + Type string `json:"type"` // Field Type + ViewLabel string `json:"view_label"` // View Label + Label string `json:"label"` // Field Label + FieldGroupVariant string `json:"field_group_variant"` // Field Group Variant + Hidden bool `json:"hidden"` // If the field is marked as hidden in the Lookml + Description string `json:"description"` // Field Description +} + +type JsonBiFields struct { + Dimensions []JsonBiField `json:"dimensions"` // Dimensions represent a column in a table, or a computed value based on some sort of column manipulation or combination + Measures []JsonBiField `json:"measures"` // Measures are similar to aggregate functions in SQL (for example, COUNT, SUM, AVG) and represent information about multiple rows + Pivots []JsonBiField `json:"pivots"` // Pivots +} + +type JsonBiPivots struct { + Key string `json:"key"` // Pivot Column Value + Data map[string]interface{} `json:"data"` // Pivot Data + SortValues map[string]interface{} `json:"sort_values"` // Pivot Sort Values + IsTotal bool `json:"is_total"` // If the value is a total +} + type LDAPConfig struct { Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object AlternateEmailLoginAllowed *bool `json:"alternate_email_login_allowed,omitempty"` // Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. @@ -1641,6 +1687,12 @@ type LookBasic struct { UserId *string `json:"user_id,omitempty"` // User Id } +type LookmlFieldLink struct { + Label *string `json:"label,omitempty"` // The name of the link as it would appear to users. + Url *string `json:"url,omitempty"` // URL the link will go to. + IconUrl *string `json:"icon_url,omitempty"` // A URL containing an image file to display with a link. +} + type LookmlModel struct { Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object AllowedDbConnectionNames *[]string `json:"allowed_db_connection_names,omitempty"` // Array of names of connections this model is allowed to use @@ -1728,6 +1780,7 @@ type LookmlModelExploreField struct { DefaultFilterValue *string `json:"default_filter_value,omitempty"` // The default value that this field uses when filtering. Null if there is no default value. Description *string `json:"description,omitempty"` // Description DimensionGroup *string `json:"dimension_group,omitempty"` // Dimension group if this field is part of a dimension group. If not, this will be null. + DrillFields *[]string `json:"drill_fields,omitempty"` // Drill fields declared for this field in LookML or default drills for certain types. Enumerations *[]LookmlModelExploreFieldEnumeration `json:"enumerations,omitempty"` // An array enumerating all the possible values that this field can contain. When null, there is no limit to the set of possible values this field can contain. Error *string `json:"error,omitempty"` // An error message indicating a problem with the definition of this field. If there are no errors, this will be null. FieldGroupLabel *string `json:"field_group_label,omitempty"` // A label creating a grouping of fields. All fields with this label should be presented together when displayed in a UI. @@ -1735,6 +1788,7 @@ type LookmlModelExploreField struct { FillStyle *FillStyle `json:"fill_style,omitempty"` // The style of dimension fill that is possible for this field. Null if no dimension fill is possible. Valid values are: "enumeration", "range". FiscalMonthOffset *int64 `json:"fiscal_month_offset,omitempty"` // An offset (in months) from the calendar start month to the fiscal start month defined in the LookML model this field belongs to. HasAllowedValues *bool `json:"has_allowed_values,omitempty"` // Whether this field has a set of allowed_values specified in LookML. + HasDrillsMetadata *bool `json:"has_drills_metadata,omitempty"` // Whether this field has links or drill fields defined. Hidden *bool `json:"hidden,omitempty"` // Whether this field should be hidden from the user interface. IsFilter *bool `json:"is_filter,omitempty"` // Whether this field is a filter. IsFiscal *bool `json:"is_fiscal,omitempty"` // Whether this field represents a fiscal time value. @@ -1746,6 +1800,7 @@ type LookmlModelExploreField struct { LabelFromParameter *string `json:"label_from_parameter,omitempty"` // The name of the parameter that will provide a parameterized label for this field, if available in the current context. LabelShort *string `json:"label_short,omitempty"` // The human-readable label of the field, without the view label. LookmlLink *string `json:"lookml_link,omitempty"` // A URL linking to the definition of this field in the LookML IDE. + Links *[]LookmlFieldLink `json:"links,omitempty"` // Links associated with this field. MapLayer *LookmlModelExploreFieldMapLayer `json:"map_layer,omitempty"` Measure *bool `json:"measure,omitempty"` // Whether this field is a measure. Name *string `json:"name,omitempty"` // Fully-qualified name of the field. @@ -1987,6 +2042,7 @@ type MergeQuerySourceQuery struct { MergeFields *[]MergeFields `json:"merge_fields,omitempty"` // An array defining which fields of the source query are mapped onto fields of the merge query Name *string `json:"name,omitempty"` // Display name QueryId *string `json:"query_id,omitempty"` // Id of the query to merge + QuerySlug *string `json:"query_slug,omitempty"` // Slug of the query to merge } type MobileFeatureFlags struct { @@ -2302,6 +2358,18 @@ type Query struct { HasTableCalculations *bool `json:"has_table_calculations,omitempty"` // Has Table Calculations } +type QueryFormats struct { + JsonBi *JsonBi `json:"json_bi,omitempty"` + Json *string `json:"json,omitempty"` + JsonDetail *string `json:"json_detail,omitempty"` + Csv *string `json:"csv,omitempty"` + Txt *string `json:"txt,omitempty"` + Html *string `json:"html,omitempty"` + Md *string `json:"md,omitempty"` + Xlsx *string `json:"xlsx,omitempty"` + Sql *string `json:"sql,omitempty"` +} + type QueryTask struct { Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object Id *string `json:"id,omitempty"` // Unique Id @@ -2420,6 +2488,13 @@ type RequestAllIntegrations struct { IntegrationHubId *string `json:"integration_hub_id,omitempty"` // Filter to a specific provider } +// Dynamically generated request type for all_lookml_models +type RequestAllLookmlModels struct { + Fields *string `json:"fields,omitempty"` // Requested fields. + Limit *int64 `json:"limit,omitempty"` // Number of results to return. (can be used with offset) + Offset *int64 `json:"offset,omitempty"` // Number of results to skip before returning any. (Defaults to 0 if not set when limit is used) +} + // Dynamically generated request type for all_roles type RequestAllRoles struct { Fields *string `json:"fields,omitempty"` // Requested fields. @@ -2433,6 +2508,12 @@ type RequestAllScheduledPlans struct { AllUsers *bool `json:"all_users,omitempty"` // Return scheduled plans belonging to all users (caller needs see_schedules permission) } +// Dynamically generated request type for all_user_attributes +type RequestAllUserAttributes struct { + Fields *string `json:"fields,omitempty"` // Requested fields. + Sorts *string `json:"sorts,omitempty"` // Fields to order the results by. Sortable fields include: name, label +} + // Dynamically generated request type for all_users type RequestAllUsers struct { Fields *string `json:"fields,omitempty"` // Requested fields. @@ -2542,8 +2623,6 @@ type RequestCreateQueryTask struct { PathPrefix *string `json:"path_prefix,omitempty"` // Prefix to use for drill links (url encoded). RebuildPdts *bool `json:"rebuild_pdts,omitempty"` // Rebuild PDTS used in query. ServerTableCalcs *bool `json:"server_table_calcs,omitempty"` // Perform table calculations on query results - ImageWidth *int64 `json:"image_width,omitempty"` // DEPRECATED. Render width for image formats. Note that this parameter is always ignored by this method. - ImageHeight *int64 `json:"image_height,omitempty"` // DEPRECATED. Render height for image formats. Note that this parameter is always ignored by this method. Fields *string `json:"fields,omitempty"` // Requested fields } @@ -2600,6 +2679,14 @@ type RequestLogin struct { ClientSecret *string `json:"client_secret,omitempty"` // client_secret part of API Key. } +// Dynamically generated request type for lookml_model_explore +type RequestLookmlModelExplore struct { + LookmlModelName string `json:"lookml_model_name"` // Name of lookml model. + ExploreName string `json:"explore_name"` // Name of explore. + Fields *string `json:"fields,omitempty"` // Requested fields. + AddDrillsMetadata *bool `json:"add_drills_metadata,omitempty"` // Whether response should include drill field metadata. +} + // Dynamically generated request type for model_fieldname_suggestions type RequestModelFieldnameSuggestions struct { ModelName string `json:"model_name"` // Name of model @@ -2876,6 +2963,34 @@ type RequestSearchGroups struct { ExternallyOrphaned *bool `json:"externally_orphaned,omitempty"` // Match group externally_orphaned. } +// Dynamically generated request type for search_groups_with_hierarchy +type RequestSearchGroupsWithHierarchy struct { + Fields *string `json:"fields,omitempty"` // Requested fields. + Limit *int64 `json:"limit,omitempty"` // Number of results to return (used with `offset`). + Offset *int64 `json:"offset,omitempty"` // Number of results to skip before returning any (used with `limit`). + Sorts *string `json:"sorts,omitempty"` // Fields to sort by. + FilterOr *bool `json:"filter_or,omitempty"` // Combine given search criteria in a boolean OR expression + Id *string `json:"id,omitempty"` // Match group id. + Name *string `json:"name,omitempty"` // Match group name. + ExternalGroupId *string `json:"external_group_id,omitempty"` // Match group external_group_id. + ExternallyManaged *bool `json:"externally_managed,omitempty"` // Match group externally_managed. + ExternallyOrphaned *bool `json:"externally_orphaned,omitempty"` // Match group externally_orphaned. +} + +// Dynamically generated request type for search_groups_with_roles +type RequestSearchGroupsWithRoles struct { + Fields *string `json:"fields,omitempty"` // Requested fields. + Limit *int64 `json:"limit,omitempty"` // Number of results to return (used with `offset`). + Offset *int64 `json:"offset,omitempty"` // Number of results to skip before returning any (used with `limit`). + Sorts *string `json:"sorts,omitempty"` // Fields to sort by. + FilterOr *bool `json:"filter_or,omitempty"` // Combine given search criteria in a boolean OR expression + Id *string `json:"id,omitempty"` // Match group id. + Name *string `json:"name,omitempty"` // Match group name. + ExternalGroupId *string `json:"external_group_id,omitempty"` // Match group external_group_id. + ExternallyManaged *bool `json:"externally_managed,omitempty"` // Match group externally_managed. + ExternallyOrphaned *bool `json:"externally_orphaned,omitempty"` // Match group externally_orphaned. +} + // Dynamically generated request type for search_looks type RequestSearchLooks struct { Id *string `json:"id,omitempty"` // Match look id. @@ -2911,6 +3026,19 @@ type RequestSearchModelSets struct { FilterOr *bool `json:"filter_or,omitempty"` // Combine given search criteria in a boolean OR expression. } +// Dynamically generated request type for search_permission_sets +type RequestSearchPermissionSets struct { + Fields *string `json:"fields,omitempty"` // Requested fields. + Limit *int64 `json:"limit,omitempty"` // Number of results to return (used with `offset`). + Offset *int64 `json:"offset,omitempty"` // Number of results to skip before returning any (used with `limit`). + Sorts *string `json:"sorts,omitempty"` // Fields to sort by. + Id *string `json:"id,omitempty"` // Match permission set id. + Name *string `json:"name,omitempty"` // Match permission set name. + AllAccess *bool `json:"all_access,omitempty"` // Match permission sets by all_access status. + BuiltIn *bool `json:"built_in,omitempty"` // Match permission sets by built_in status. + FilterOr *bool `json:"filter_or,omitempty"` // Combine given search criteria in a boolean OR expression. +} + // Dynamically generated request type for search_roles type RequestSearchRoles struct { Fields *string `json:"fields,omitempty"` // Requested fields. @@ -2923,6 +3051,18 @@ type RequestSearchRoles struct { FilterOr *bool `json:"filter_or,omitempty"` // Combine given search criteria in a boolean OR expression. } +// Dynamically generated request type for search_roles_with_user_count +type RequestSearchRolesWithUserCount struct { + Fields *string `json:"fields,omitempty"` // Requested fields. + Limit *int64 `json:"limit,omitempty"` // Number of results to return (used with `offset`). + Offset *int64 `json:"offset,omitempty"` // Number of results to skip before returning any (used with `limit`). + Sorts *string `json:"sorts,omitempty"` // Fields to sort by. + Id *string `json:"id,omitempty"` // Match role id. + Name *string `json:"name,omitempty"` // Match role name. + BuiltIn *bool `json:"built_in,omitempty"` // Match roles by built_in status. + FilterOr *bool `json:"filter_or,omitempty"` // Combine given search criteria in a boolean OR expression. +} + // Dynamically generated request type for search_themes type RequestSearchThemes struct { Id *string `json:"id,omitempty"` // Match theme id. @@ -3334,6 +3474,8 @@ type Setting struct { EmbedCookielessV2 *bool `json:"embed_cookieless_v2,omitempty"` // (DEPRECATED) Use embed_config.embed_cookieless_v2 instead. If embed_config.embed_cookieless_v2 is specified, it overrides this value. EmbedEnabled *bool `json:"embed_enabled,omitempty"` // True if embedding is enabled https://cloud.google.com/looker/docs/r/looker-core-feature-embed, false otherwise EmbedConfig *EmbedConfig `json:"embed_config,omitempty"` + LoginNotificationEnabled *bool `json:"login_notification_enabled,omitempty"` // Login notification enabled + LoginNotificationText *string `json:"login_notification_text,omitempty"` // Login notification text } type SmtpNodeStatus struct { @@ -3485,6 +3627,7 @@ const SupportedFormats_Json SupportedFormats = "json" const SupportedFormats_JsonLabel SupportedFormats = "json_label" const SupportedFormats_JsonDetail SupportedFormats = "json_detail" const SupportedFormats_JsonDetailLiteStream SupportedFormats = "json_detail_lite_stream" +const SupportedFormats_JsonBi SupportedFormats = "json_bi" const SupportedFormats_Xlsx SupportedFormats = "xlsx" const SupportedFormats_Html SupportedFormats = "html" const SupportedFormats_WysiwygPdf SupportedFormats = "wysiwyg_pdf" @@ -3622,7 +3765,7 @@ type UserAttribute struct { Id *string `json:"id,omitempty"` // Unique Id Name string `json:"name"` // Name of user attribute Label string `json:"label"` // Human-friendly label for user attribute - Type string `json:"type"` // Type of user attribute ("string", "number", "datetime", "yesno", "zipcode") + Type string `json:"type"` // Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") DefaultValue *string `json:"default_value,omitempty"` // Default value for when no value is set on the user IsSystem *bool `json:"is_system,omitempty"` // Attribute is a system default IsPermanent *bool `json:"is_permanent,omitempty"` // Attribute is permanent and cannot be deleted @@ -4458,7 +4601,7 @@ type WriteSessionConfig struct { } // Dynamic writeable type for Setting removes: -// marketplace_site, embed_enabled +// marketplace_site, embed_enabled, login_notification_enabled, login_notification_text type WriteSetting struct { ExtensionFrameworkEnabled *bool `json:"extension_framework_enabled,omitempty"` // Toggle extension framework on or off ExtensionLoadUrlEnabled *bool `json:"extension_load_url_enabled,omitempty"` // (DEPRECATED) Toggle extension load url on or off. Do not use. This is temporary setting that will eventually become a noop and subsequently deleted. @@ -4533,7 +4676,7 @@ type WriteUser struct { type WriteUserAttribute struct { Name string `json:"name"` // Name of user attribute Label string `json:"label"` // Human-friendly label for user attribute - Type string `json:"type"` // Type of user attribute ("string", "number", "datetime", "yesno", "zipcode") + Type string `json:"type"` // Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") DefaultValue *string `json:"default_value,omitempty"` // Default value for when no value is set on the user ValueIsHidden *bool `json:"value_is_hidden,omitempty"` // If true, users will not be able to view values of this attribute UserCanView *bool `json:"user_can_view,omitempty"` // Non-admin users can see the values of their attributes and use them in filters diff --git a/jest.config.js b/jest.config.js index 8d421fc83..2291a07ef 100644 --- a/jest.config.js +++ b/jest.config.js @@ -24,9 +24,9 @@ */ -const { excludeNodeModulesExcept } = require('./babel.common') +const { excludeNodeModulesExcept } = require('./babel.common'); -process.env.TZ = 'UTC' +process.env.TZ = 'UTC'; module.exports = { automock: false, @@ -46,7 +46,7 @@ module.exports = { setupFilesAfterEnv: [ // eslint-disable-next-line node/no-path-concat `${__dirname}/jest.setup.js`, - '@testing-library/jest-dom/extend-expect', + '@testing-library/jest-dom', 'regenerator-runtime/runtime', ], setupFiles: ['jest-localstorage-mock'], @@ -66,4 +66,4 @@ module.exports = { diagnostics: false, }, }, -} +}; diff --git a/jest.setup.js b/jest.setup.js index f3d0c9a2e..902d25351 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -25,26 +25,26 @@ */ /* eslint-disable @typescript-eslint/no-var-requires */ -const Adapter = require('enzyme-adapter-react-16') -const { configure } = require('enzyme') -const ResizeObserver = require('resize-observer-polyfill') +const Adapter = require('enzyme-adapter-react-16'); +const { configure } = require('enzyme'); +const ResizeObserver = require('resize-observer-polyfill'); -require('@testing-library/jest-dom/extend-expect') -require('jest-canvas-mock') -require('jest-styled-components') -require('jest-environment-jsdom') +require('@testing-library/jest-dom'); +require('jest-canvas-mock'); +require('jest-styled-components'); +require('jest-environment-jsdom'); -configure({ adapter: new Adapter() }) +configure({ adapter: new Adapter() }); const observeMock = function (cb, config) { - this.observeCallback = cb - this.observeConfig = config - this.disconnect = jest.fn() - this.observe = jest.fn() -} - -globalThis.IntersectionObserver = observeMock -globalThis.ResizeObserver = ResizeObserver + this.observeCallback = cb; + this.observeConfig = config; + this.disconnect = jest.fn(); + this.observe = jest.fn(); +}; + +globalThis.IntersectionObserver = observeMock; +globalThis.ResizeObserver = ResizeObserver; // js-dom doesn't do scrollIntoView // Element.prototype.scrollIntoView = jest.fn() diff --git a/kotlin/README.md b/kotlin/README.md index 2bbd1161c..fb97cd956 100644 --- a/kotlin/README.md +++ b/kotlin/README.md @@ -8,9 +8,9 @@ The Looker SDK for Kotlin provides a convenient way to communicate with the Look The Looker SDK can be used in a Kotlin application in 3 steps: -* configure -* install -* use +- configure +- install +- use ### Configure the SDK for your Looker server diff --git a/kotlin/build.gradle.kts b/kotlin/build.gradle.kts new file mode 100644 index 000000000..de225da65 --- /dev/null +++ b/kotlin/build.gradle.kts @@ -0,0 +1,67 @@ +group = "com.looker.sdk" +defaultTasks = mutableListOf("jar") + +val kotlinVersion = providers.gradleProperty("kotlinVersion").get() +val googleHttpVersion = providers.gradleProperty("googleHttpVersion").get() + +plugins { + kotlin("jvm") + id("com.diffplug.spotless") +} + +sourceSets { + main { + kotlin { + setSrcDirs(listOf("src/main/")) + } + } + test { + kotlin { + setSrcDirs(listOf("src/test")) + } + } +} + +repositories { + mavenCentral() + maven { url = uri("https://dl.bintray.com/kotlin/ktor") } + maven { url = uri("https://dl.bintray.com/kotlin/kotlinx") } + maven { url = uri("https://jitpack.io") } +} + +dependencies { + implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion") + + implementation("io.github.cdimascio:dotenv-kotlin:6.2.2") + implementation("org.ini4j:ini4j:0.5.4") + + implementation("commons-configuration:commons-configuration:1.10") + + implementation(platform("com.google.http-client:google-http-client-bom:$googleHttpVersion")) + implementation("com.google.http-client:google-http-client") + implementation("com.google.http-client:google-http-client-apache-v2") + implementation("com.google.http-client:google-http-client-gson") + + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") + implementation("com.google.code.gson:gson:2.8.5") + + testImplementation("org.junit.jupiter:junit-jupiter-api:5.3.1") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.3.1") + testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion") +} + +spotless { + kotlin { + ktlint("0.50.0").setEditorConfigPath("$projectDir/../.editorconfig") + } +} + +kotlin { + jvmToolchain(17) +} + +tasks.test { + testLogging { + exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL + } +} diff --git a/kotlin/gradle.properties b/kotlin/gradle.properties index d73c586a9..ee71eb3ab 100644 --- a/kotlin/gradle.properties +++ b/kotlin/gradle.properties @@ -1,2 +1,2 @@ -kotlinVersion=1.7.10 +kotlinVersion=1.9.10 googleHttpVersion=1.43.3 diff --git a/kotlin/gradle/wrapper/gradle-wrapper.properties b/kotlin/gradle/wrapper/gradle-wrapper.properties index fae08049a..e411586a5 100644 --- a/kotlin/gradle/wrapper/gradle-wrapper.properties +++ b/kotlin/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/kotlin/settings.gradle b/kotlin/settings.gradle deleted file mode 100644 index 877acadd5..000000000 --- a/kotlin/settings.gradle +++ /dev/null @@ -1,7 +0,0 @@ -pluginManagement { - plugins { - id 'org.jetbrains.kotlin.jvm' version kotlinVersion - } -} - -rootProject.name = 'looker-kotlin-sdk' diff --git a/kotlin/settings.gradle.kts b/kotlin/settings.gradle.kts new file mode 100644 index 000000000..8051056f0 --- /dev/null +++ b/kotlin/settings.gradle.kts @@ -0,0 +1,11 @@ +rootProject.name = "looker-kotlin-sdk" + +pluginManagement { + val kotlinVersion = providers.gradleProperty("kotlinVersion").get() + plugins { + kotlin("jvm") version kotlinVersion + id("com.diffplug.spotless") version "6.20.0" + id("org.gradle.toolchains.foojay-resolver-convention") version "0.7.0" + id("com.github.johnrengelman.shadow") version "8.1.1" + } +} diff --git a/kotlin/src/main/com/looker/rtl/AuthSession.kt b/kotlin/src/main/com/looker/rtl/AuthSession.kt index 491df9745..fa26844da 100644 --- a/kotlin/src/main/com/looker/rtl/AuthSession.kt +++ b/kotlin/src/main/com/looker/rtl/AuthSession.kt @@ -28,7 +28,7 @@ import com.google.api.client.http.UrlEncodedContent open class AuthSession( open val apiSettings: ConfigurationProvider, - open val transport: Transport = Transport(apiSettings) + open val transport: Transport = Transport(apiSettings), ) { var authToken: AuthToken = AuthToken() @@ -145,7 +145,7 @@ open class AuthSession( unQuote(System.getProperty("${apiSettings.environmentPrefix}_CLIENT_SECRET") ?: config[client_secret]) val params = mapOf( client_id to clientId, - client_secret to clientSecret + client_secret to clientSecret, ) val body = UrlEncodedContent(params) val token = ok( @@ -153,8 +153,8 @@ open class AuthSession( HttpMethod.POST, "$apiPath/login", emptyMap(), - body - ) + body, + ), ) authToken = token } @@ -163,7 +163,7 @@ open class AuthSession( val token = activeToken() val sudoToken = transport.request( HttpMethod.POST, - "/login/$newId" + "/login/$newId", ) { requestSettings -> val headers = requestSettings.headers.toMutableMap() if (token.accessToken.isNotBlank()) { diff --git a/kotlin/src/main/com/looker/rtl/AuthToken.kt b/kotlin/src/main/com/looker/rtl/AuthToken.kt index 4a05e51d9..a0a80c7eb 100644 --- a/kotlin/src/main/com/looker/rtl/AuthToken.kt +++ b/kotlin/src/main/com/looker/rtl/AuthToken.kt @@ -40,7 +40,7 @@ data class AuthToken( @SerializedName("expires_in") var expiresIn: Long = 0L, @SerializedName("refresh_token") - var refreshToken: String? = null + var refreshToken: String? = null, ) { var expiresAt: LocalDateTime = LocalDateTime.now() @@ -53,7 +53,7 @@ data class AuthToken( token.access_token!!, token.token_type!!, token.expires_in!!.toLong(), - token.refresh_token + token.refresh_token, ) init { diff --git a/kotlin/src/main/com/looker/rtl/Constants.kt b/kotlin/src/main/com/looker/rtl/Constants.kt index 7365c680e..22db702e8 100644 --- a/kotlin/src/main/com/looker/rtl/Constants.kt +++ b/kotlin/src/main/com/looker/rtl/Constants.kt @@ -96,7 +96,7 @@ fun unQuote(value: String?): String { enum class ResponseMode { String, Binary, - Unknown + Unknown, } fun responseMode(contentType: String): ResponseMode { diff --git a/kotlin/src/main/com/looker/rtl/ErrorDoc.kt b/kotlin/src/main/com/looker/rtl/ErrorDoc.kt index e519dedc8..3b0ceb34a 100644 --- a/kotlin/src/main/com/looker/rtl/ErrorDoc.kt +++ b/kotlin/src/main/com/looker/rtl/ErrorDoc.kt @@ -33,10 +33,13 @@ typealias ErrorCodeIndex = HashMap interface IErrorDocLink { /** base redirector url */ var redirector: String + /** api version of the error link */ var apiVersion: String + /** HTTP status code */ var statusCode: String + /** REST API Path */ var apiPath: String } @@ -143,7 +146,7 @@ class ErrorDoc(val sdk: APIMethods, val cdnUrl: String = ErrorCodesUrl) : IError match.groupValues[1], match.groupValues[2], match.groupValues[3], - match.groupValues[4] + match.groupValues[4], ) } @@ -182,7 +185,10 @@ class ErrorDoc(val sdk: APIMethods, val cdnUrl: String = ErrorCodesUrl) : IError override fun specPath(path: String): String { val rx = Regex("""(:\w+)""") - val result = path.replace(rx) { val x = it.value.substring(1); "{$x}" } + val result = path.replace(rx) { + val x = it.value.substring(1) + "{$x}" + } return result } @@ -220,5 +226,5 @@ class ErrorDocLink( override var redirector: String = "", override var apiVersion: String = "", override var statusCode: String = "", - override var apiPath: String = "" + override var apiPath: String = "", ) : IErrorDocLink diff --git a/kotlin/src/main/com/looker/rtl/OAuthSession.kt b/kotlin/src/main/com/looker/rtl/OAuthSession.kt index e36f22e42..8592c8287 100644 --- a/kotlin/src/main/com/looker/rtl/OAuthSession.kt +++ b/kotlin/src/main/com/looker/rtl/OAuthSession.kt @@ -36,7 +36,7 @@ fun base64UrlEncode(bytes: ByteArray): String { @ExperimentalUnsignedTypes class OAuthSession( override val apiSettings: ConfigurationProvider, - override val transport: Transport = Transport(apiSettings) + override val transport: Transport = Transport(apiSettings), ) : AuthSession(apiSettings, transport) { private var random = SecureRandom() @@ -52,7 +52,7 @@ class OAuthSession( HttpMethod.POST, "/api/token", emptyMap(), - body + body, ) val token = this.ok(response) this.authToken.setToken(token) @@ -69,8 +69,8 @@ class OAuthSession( "grant_type" to "refresh_token", "refresh_token" to this.activeToken().refreshToken, "client_id" to config["client_id"], - "redirect_uri" to config["redirect_uri"] - ) + "redirect_uri" to config["redirect_uri"], + ), ) } } @@ -94,8 +94,8 @@ class OAuthSession( "scope" to scope, "state" to state, "code_challenge_method" to "S256", - "code_challenge" to codeChallenge - ) + "code_challenge" to codeChallenge, + ), ) } @@ -107,7 +107,7 @@ class OAuthSession( "code" to authCode, "code_verifier" to verifier, "client_id" to (config["client_id"] ?: error("")), - "redirect_uri" to (config["redirect_uri"] ?: error("")) + "redirect_uri" to (config["redirect_uri"] ?: error("")), ) } diff --git a/kotlin/src/main/com/looker/rtl/Transport.kt b/kotlin/src/main/com/looker/rtl/Transport.kt index 14de4b777..f5854614f 100644 --- a/kotlin/src/main/com/looker/rtl/Transport.kt +++ b/kotlin/src/main/com/looker/rtl/Transport.kt @@ -105,7 +105,7 @@ enum class HttpMethod { PUT, DELETE, PATCH, - HEAD + HEAD, } enum class HttpTransports(val label: String) { @@ -288,7 +288,7 @@ class Transport(val options: TransportOptions) { ApacheHttpTransport.newDefaultHttpClientBuilder().disableCookieManagement() if (!options.verifySSL) { val sslBuilder = SSLContextBuilder().loadTrustMaterial(null) { - _, _ -> + _, _ -> true } val sslSocketFactory = SSLConnectionSocketFactory(sslBuilder.build()) @@ -350,8 +350,8 @@ class Transport(val options: TransportOptions) { val request: HttpRequest = requestFactory.buildRequest( finalizedRequestSettings.method.toString(), GenericUrl(finalizedRequestSettings.url), - httpContent - ) + httpContent, + ).setSuppressUserAgentSuffix(true) // TODO get overrides parameter to work without causing compilation errors in UserSession // overrides: TransportOptions? = null): SDKResponse { diff --git a/kotlin/src/main/com/looker/sdk/4.0/methods.kt b/kotlin/src/main/com/looker/sdk/4.0/methods.kt index f7b56a5d7..80651e6da 100644 --- a/kotlin/src/main/com/looker/sdk/4.0/methods.kt +++ b/kotlin/src/main/com/looker/sdk/4.0/methods.kt @@ -28,7 +28,6 @@ * 464 API methods */ - // NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 package com.looker.sdk @@ -37,11 +36,10 @@ import java.util.* class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { - val stream by lazy { LookerSDKStream(this.authSession) } + val stream by lazy { LookerSDKStream(this.authSession) } //region Alert: Alert - /** * Follow an alert. * @@ -50,13 +48,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /alerts/{alert_id}/follow -> Void */ fun follow_alert( - alert_id: String - ) : SDKResponse { + alert_id: String, + ): SDKResponse { val path_alert_id = encodeParam(alert_id) return this.post("/alerts/${path_alert_id}/follow", mapOf()) } - /** * Unfollow an alert. * @@ -65,13 +62,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /alerts/{alert_id}/follow -> Void */ fun unfollow_alert( - alert_id: String - ) : SDKResponse { + alert_id: String, + ): SDKResponse { val path_alert_id = encodeParam(alert_id) return this.delete("/alerts/${path_alert_id}/follow", mapOf()) } - /** * ### Search Alerts * @@ -98,22 +94,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { condition_met: Boolean? = null, last_run_start: String? = null, last_run_end: String? = null, - all_owners: Boolean? = null - ) : SDKResponse { - return this.get>("/alerts/search", - mapOf("limit" to limit, - "offset" to offset, - "group_by" to group_by, - "fields" to fields, - "disabled" to disabled, - "frequency" to frequency, - "condition_met" to condition_met, - "last_run_start" to last_run_start, - "last_run_end" to last_run_end, - "all_owners" to all_owners)) + all_owners: Boolean? = null, + ): SDKResponse { + return this.get>( + "/alerts/search", + mapOf( + "limit" to limit, + "offset" to offset, + "group_by" to group_by, + "fields" to fields, + "disabled" to disabled, + "frequency" to frequency, + "condition_met" to condition_met, + "last_run_start" to last_run_start, + "last_run_end" to last_run_end, + "all_owners" to all_owners, + ), + ) } - /** * ### Get an alert by a given alert ID * @@ -122,13 +121,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /alerts/{alert_id} -> Alert */ fun get_alert( - alert_id: String - ) : SDKResponse { + alert_id: String, + ): SDKResponse { val path_alert_id = encodeParam(alert_id) return this.get("/alerts/${path_alert_id}", mapOf()) } - /** * ### Update an alert * # Required fields: `owner_id`, `field`, `destinations`, `comparison_type`, `threshold`, `cron` @@ -141,13 +139,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_alert( alert_id: String, - body: WriteAlert - ) : SDKResponse { + body: WriteAlert, + ): SDKResponse { val path_alert_id = encodeParam(alert_id) return this.put("/alerts/${path_alert_id}", mapOf(), body) } - /** * ### Update select alert fields * # Available fields: `owner_id`, `is_disabled`, `disabled_reason`, `is_public`, `threshold` @@ -160,13 +157,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_alert_field( alert_id: String, - body: AlertPatch - ) : SDKResponse { + body: AlertPatch, + ): SDKResponse { val path_alert_id = encodeParam(alert_id) return this.patch("/alerts/${path_alert_id}", mapOf(), body) } - /** * ### Delete an alert by a given alert ID * @@ -175,13 +171,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /alerts/{alert_id} -> Void */ fun delete_alert( - alert_id: String - ) : SDKResponse { + alert_id: String, + ): SDKResponse { val path_alert_id = encodeParam(alert_id) return this.delete("/alerts/${path_alert_id}", mapOf()) } - /** * ### Create a new alert and return details of the newly created object * @@ -224,12 +219,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /alerts -> Alert */ fun create_alert( - body: WriteAlert - ) : SDKResponse { + body: WriteAlert, + ): SDKResponse { return this.post("/alerts", mapOf(), body) } - /** * ### Enqueue an Alert by ID * @@ -240,14 +234,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun enqueue_alert( alert_id: String, - force: Boolean? = null - ) : SDKResponse { + force: Boolean? = null, + ): SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.post("/alerts/${path_alert_id}/enqueue", - mapOf("force" to force)) + return this.post( + "/alerts/${path_alert_id}/enqueue", + mapOf("force" to force), + ) } - /** * # Alert Notifications. * The endpoint returns all the alert notifications received by the user on email in the past 7 days. It also returns whether the notifications have been read by the user. @@ -259,14 +254,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun alert_notifications( limit: Long? = null, - offset: Long? = null - ) : SDKResponse { - return this.get>("/alert_notifications", - mapOf("limit" to limit, - "offset" to offset)) + offset: Long? = null, + ): SDKResponse { + return this.get>( + "/alert_notifications", + mapOf( + "limit" to limit, + "offset" to offset, + ), + ) } - /** * # Reads a Notification * The endpoint marks a given alert notification as read by the user, in case it wasn't already read. The AlertNotification model is updated for this purpose. It returns the notification as a response. @@ -276,8 +274,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /alert_notifications/{alert_notification_id} -> AlertNotifications */ fun read_alert_notification( - alert_notification_id: String - ) : SDKResponse { + alert_notification_id: String, + ): SDKResponse { val path_alert_notification_id = encodeParam(alert_notification_id) return this.patch("/alert_notifications/${path_alert_notification_id}", mapOf()) } @@ -286,7 +284,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region ApiAuth: API Authentication - /** * ### Present client credentials to obtain an authorization token * @@ -324,14 +321,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun login( client_id: String? = null, - client_secret: String? = null - ) : SDKResponse { - return this.post("/login", - mapOf("client_id" to client_id, - "client_secret" to client_secret)) + client_secret: String? = null, + ): SDKResponse { + return this.post( + "/login", + mapOf( + "client_id" to client_id, + "client_secret" to client_secret, + ), + ) } - /** * ### Create an access token that runs as a given user. * @@ -359,22 +359,21 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun login_user( user_id: String, - associative: Boolean? = null - ) : SDKResponse { + associative: Boolean? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/login/${path_user_id}", - mapOf("associative" to associative)) + return this.post( + "/login/${path_user_id}", + mapOf("associative" to associative), + ) } - /** * ### Logout of the API and invalidate the current access token. * * DELETE /logout -> String */ - fun logout( - - ) : SDKResponse { + fun logout(): SDKResponse { return this.delete("/logout", mapOf()) } @@ -382,7 +381,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Artifact: Artifact Storage - /** * Get the maximum configured size of the entire artifact store, and the currently used storage in bytes. * @@ -393,13 +391,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /artifact/usage -> ArtifactUsage */ @JvmOverloads fun artifact_usage( - fields: String? = null - ) : SDKResponse { - return this.get("/artifact/usage", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/artifact/usage", + mapOf("fields" to fields), + ) } - /** * Get all artifact namespaces and the count of artifacts in each namespace * @@ -414,15 +413,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun artifact_namespaces( fields: String? = null, limit: Long? = null, - offset: Long? = null - ) : SDKResponse { - return this.get>("/artifact/namespaces", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset)) + offset: Long? = null, + ): SDKResponse { + return this.get>( + "/artifact/namespaces", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + ), + ) } - /** * ### Return the value of an artifact * @@ -437,14 +439,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun artifact_value( namespace: String, - key: String? = null - ) : SDKResponse { + key: String? = null, + ): SDKResponse { val path_namespace = encodeParam(namespace) - return this.get("/artifact/${path_namespace}/value", - mapOf("key" to key)) + return this.get( + "/artifact/${path_namespace}/value", + mapOf("key" to key), + ) } - /** * Remove *all* artifacts from a namespace. Purged artifacts are permanently deleted * @@ -455,13 +458,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /artifact/{namespace}/purge -> Void */ fun purge_artifacts( - namespace: String - ) : SDKResponse { + namespace: String, + ): SDKResponse { val path_namespace = encodeParam(namespace) return this.delete("/artifact/${path_namespace}/purge", mapOf()) } - /** * ### Search all key/value pairs in a namespace for matching criteria. * @@ -500,20 +502,23 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { min_size: Long? = null, max_size: Long? = null, limit: Long? = null, - offset: Long? = null - ) : SDKResponse { + offset: Long? = null, + ): SDKResponse { val path_namespace = encodeParam(namespace) - return this.get>("/artifact/${path_namespace}/search", - mapOf("fields" to fields, - "key" to key, - "user_ids" to user_ids, - "min_size" to min_size, - "max_size" to max_size, - "limit" to limit, - "offset" to offset)) + return this.get>( + "/artifact/${path_namespace}/search", + mapOf( + "fields" to fields, + "key" to key, + "user_ids" to user_ids, + "min_size" to min_size, + "max_size" to max_size, + "limit" to limit, + "offset" to offset, + ), + ) } - /** * ### Get one or more artifacts * @@ -534,17 +539,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { key: String, fields: String? = null, limit: Long? = null, - offset: Long? = null - ) : SDKResponse { + offset: Long? = null, + ): SDKResponse { val path_namespace = encodeParam(namespace) - return this.get>("/artifact/${path_namespace}", - mapOf("key" to key, - "fields" to fields, - "limit" to limit, - "offset" to offset)) + return this.get>( + "/artifact/${path_namespace}", + mapOf( + "key" to key, + "fields" to fields, + "limit" to limit, + "offset" to offset, + ), + ) } - /** * ### Delete one or more artifacts * @@ -559,14 +567,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_artifact( namespace: String, - key: String - ) : SDKResponse { + key: String, + ): SDKResponse { val path_namespace = encodeParam(namespace) - return this.delete("/artifact/${path_namespace}", - mapOf("key" to key)) + return this.delete( + "/artifact/${path_namespace}", + mapOf("key" to key), + ) } - /** * ### Create or update one or more artifacts * @@ -604,18 +613,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_artifacts( namespace: String, body: Array, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_namespace = encodeParam(namespace) - return this.put>("/artifacts/${path_namespace}", - mapOf("fields" to fields), body) + return this.put>( + "/artifacts/${path_namespace}", + mapOf("fields" to fields), + body, + ) } //endregion Artifact: Artifact Storage //region Auth: Manage User Authentication Configuration - /** * ### Create an embed secret using the specified information. * @@ -628,12 +639,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /embed_config/secrets -> EmbedSecret */ @JvmOverloads fun create_embed_secret( - body: WriteEmbedSecret? = null - ) : SDKResponse { + body: WriteEmbedSecret? = null, + ): SDKResponse { return this.post("/embed_config/secrets", mapOf(), body) } - /** * ### Delete an embed secret. * @@ -644,13 +654,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /embed_config/secrets/{embed_secret_id} -> String */ fun delete_embed_secret( - embed_secret_id: String - ) : SDKResponse { + embed_secret_id: String, + ): SDKResponse { val path_embed_secret_id = encodeParam(embed_secret_id) return this.delete("/embed_config/secrets/${path_embed_secret_id}", mapOf()) } - /** * ### Create Signed Embed URL * @@ -699,12 +708,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /embed/sso_url -> EmbedUrlResponse */ fun create_sso_embed_url( - body: EmbedSsoParams - ) : SDKResponse { + body: EmbedSsoParams, + ): SDKResponse { return this.post("/embed/sso_url", mapOf(), body) } - /** * ### Create an Embed URL * @@ -713,7 +721,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * "Powered by Looker" (PBL) web application. * * This is similar to Private Embedding (https://cloud.google.com/looker/docs/r/admin/embed/private-embed). Instead of - * of logging into the Web UI to authenticate, the user has already authenticated against the API to be able to + * logging into the Web UI to authenticate, the user has already authenticated against the API to be able to * make this call. However, unlike Private Embed where the user has access to any other part of the Looker UI, * the embed web session created by requesting the EmbedUrlResponse.url in a browser only has access to * content visible under the `/embed` context. @@ -740,12 +748,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /embed/token_url/me -> EmbedUrlResponse */ fun create_embed_url_as_me( - body: EmbedParams - ) : SDKResponse { + body: EmbedParams, + ): SDKResponse { return this.post("/embed/token_url/me", mapOf(), body) } - /** * ### Validate a Signed Embed URL * @@ -754,13 +761,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /embed/sso/validate -> EmbedUrlResponse */ @JvmOverloads fun validate_embed_url( - url: String? = null - ) : SDKResponse { - return this.get("/embed/sso/validate", - mapOf("url" to url)) + url: String? = null, + ): SDKResponse { + return this.get( + "/embed/sso/validate", + mapOf("url" to url), + ) } - /** * ### Acquire a cookieless embed session. * @@ -780,7 +788,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * If the `session_reference_token` is provided but the session has expired, the token will be ignored and a * new embed session will be created. Note that the embed user definition will be updated in this scenario. * - * If the credentials do not match the credentials associated with an exisiting session_reference_token, a + * If the credentials do not match the credentials associated with an existing session_reference_token, a * 404 will be returned. * * The endpoint returns the following: @@ -800,12 +808,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /embed/cookieless_session/acquire -> EmbedCookielessSessionAcquireResponse */ fun acquire_embed_cookieless_session( - body: EmbedCookielessSessionAcquire - ) : SDKResponse { + body: EmbedCookielessSessionAcquire, + ): SDKResponse { return this.post("/embed/cookieless_session/acquire", mapOf(), body) } - /** * ### Delete cookieless embed session * @@ -820,13 +827,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /embed/cookieless_session/{session_reference_token} -> String */ fun delete_embed_cookieless_session( - session_reference_token: String - ) : SDKResponse { + session_reference_token: String, + ): SDKResponse { val path_session_reference_token = encodeParam(session_reference_token) return this.delete("/embed/cookieless_session/${path_session_reference_token}", mapOf()) } - /** * ### Generate api and navigation tokens for a cookieless embed session * @@ -836,6 +842,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * The generate tokens endpoint should be called every time the Looker client asks for a token (except for the * first time when the tokens returned by the acquire_session endpoint should be used). * + * #### Embed session expiration handling + * + * This endpoint does NOT return an error when the embed session expires. This is to simplify processing + * in the caller as errors can happen for non session expiration reasons. Instead the endpoint returns + * the session time to live in the `session_reference_token_ttl` response property. If this property + * contains a zero, the embed session has expired. + * * Calls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled * * @param {EmbedCookielessSessionGenerateTokens} body @@ -843,12 +856,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /embed/cookieless_session/generate_tokens -> EmbedCookielessSessionGenerateTokensResponse */ fun generate_tokens_for_cookieless_session( - body: EmbedCookielessSessionGenerateTokens - ) : SDKResponse { + body: EmbedCookielessSessionGenerateTokens, + ): SDKResponse { return this.put("/embed/cookieless_session/generate_tokens", mapOf(), body) } - /** * ### Get the LDAP configuration. * @@ -871,13 +883,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /ldap_config -> LDAPConfig */ - fun ldap_config( - - ) : SDKResponse { + fun ldap_config(): SDKResponse { return this.get("/ldap_config", mapOf()) } - /** * ### Update the LDAP configuration. * @@ -898,12 +907,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /ldap_config -> LDAPConfig */ fun update_ldap_config( - body: WriteLDAPConfig - ) : SDKResponse { + body: WriteLDAPConfig, + ): SDKResponse { return this.patch("/ldap_config", mapOf(), body) } - /** * ### Test the connection settings for an LDAP configuration. * @@ -931,12 +939,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_connection -> LDAPConfigTestResult */ fun test_ldap_config_connection( - body: WriteLDAPConfig - ) : SDKResponse { + body: WriteLDAPConfig, + ): SDKResponse { return this.put("/ldap_config/test_connection", mapOf(), body) } - /** * ### Test the connection authentication settings for an LDAP configuration. * @@ -966,12 +973,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_auth -> LDAPConfigTestResult */ fun test_ldap_config_auth( - body: WriteLDAPConfig - ) : SDKResponse { + body: WriteLDAPConfig, + ): SDKResponse { return this.put("/ldap_config/test_auth", mapOf(), body) } - /** * ### Test the user authentication settings for an LDAP configuration without authenticating the user. * @@ -990,12 +996,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_user_info -> LDAPConfigTestResult */ fun test_ldap_config_user_info( - body: WriteLDAPConfig - ) : SDKResponse { + body: WriteLDAPConfig, + ): SDKResponse { return this.put("/ldap_config/test_user_info", mapOf(), body) } - /** * ### Test the user authentication settings for an LDAP configuration. * @@ -1014,12 +1019,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_user_auth -> LDAPConfigTestResult */ fun test_ldap_config_user_auth( - body: WriteLDAPConfig - ) : SDKResponse { + body: WriteLDAPConfig, + ): SDKResponse { return this.put("/ldap_config/test_user_auth", mapOf(), body) } - /** * ### Registers a mobile device. * # Required fields: [:device_token, :device_type] @@ -1029,12 +1033,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /mobile/device -> MobileToken */ fun register_mobile_device( - body: WriteMobileToken - ) : SDKResponse { + body: WriteMobileToken, + ): SDKResponse { return this.post("/mobile/device", mapOf(), body) } - /** * ### Updates the mobile device registration * @@ -1043,13 +1046,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /mobile/device/{device_id} -> MobileToken */ fun update_mobile_device_registration( - device_id: String - ) : SDKResponse { + device_id: String, + ): SDKResponse { val path_device_id = encodeParam(device_id) return this.patch("/mobile/device/${path_device_id}", mapOf()) } - /** * ### Deregister a mobile device. * @@ -1058,13 +1060,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /mobile/device/{device_id} -> Void */ fun deregister_mobile_device( - device_id: String - ) : SDKResponse { + device_id: String, + ): SDKResponse { val path_device_id = encodeParam(device_id) return this.delete("/mobile/device/${path_device_id}", mapOf()) } - /** * ### List All OAuth Client Apps * @@ -1079,13 +1080,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /oauth_client_apps -> Array */ @JvmOverloads fun all_oauth_client_apps( - fields: String? = null - ) : SDKResponse { - return this.get>("/oauth_client_apps", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/oauth_client_apps", + mapOf("fields" to fields), + ) } - /** * ### Get Oauth Client App * @@ -1098,14 +1100,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun oauth_client_app( client_guid: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.get("/oauth_client_apps/${path_client_guid}", - mapOf("fields" to fields)) + return this.get( + "/oauth_client_apps/${path_client_guid}", + mapOf("fields" to fields), + ) } - /** * ### Register an OAuth2 Client App * @@ -1123,14 +1126,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun register_oauth_client_app( client_guid: String, body: WriteOauthClientApp, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.post("/oauth_client_apps/${path_client_guid}", - mapOf("fields" to fields), body) + return this.post( + "/oauth_client_apps/${path_client_guid}", + mapOf("fields" to fields), + body, + ) } - /** * ### Update OAuth2 Client App Details * @@ -1145,14 +1150,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_oauth_client_app( client_guid: String, body: WriteOauthClientApp, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.patch("/oauth_client_apps/${path_client_guid}", - mapOf("fields" to fields), body) + return this.patch( + "/oauth_client_apps/${path_client_guid}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete OAuth Client App * @@ -1169,13 +1176,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /oauth_client_apps/{client_guid} -> String */ fun delete_oauth_client_app( - client_guid: String - ) : SDKResponse { + client_guid: String, + ): SDKResponse { val path_client_guid = encodeParam(client_guid) return this.delete("/oauth_client_apps/${path_client_guid}", mapOf()) } - /** * ### Invalidate All Issued Tokens * @@ -1187,13 +1193,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /oauth_client_apps/{client_guid}/tokens -> String */ fun invalidate_tokens( - client_guid: String - ) : SDKResponse { + client_guid: String, + ): SDKResponse { val path_client_guid = encodeParam(client_guid) return this.delete("/oauth_client_apps/${path_client_guid}/tokens", mapOf()) } - /** * ### Activate an app for a user * @@ -1212,15 +1217,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun activate_app_user( client_guid: String, user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_client_guid = encodeParam(client_guid) val path_user_id = encodeParam(user_id) - return this.post("/oauth_client_apps/${path_client_guid}/users/${path_user_id}", - mapOf("fields" to fields)) + return this.post( + "/oauth_client_apps/${path_client_guid}/users/${path_user_id}", + mapOf("fields" to fields), + ) } - /** * ### Deactivate an app for a user * @@ -1242,15 +1248,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun deactivate_app_user( client_guid: String, user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_client_guid = encodeParam(client_guid) val path_user_id = encodeParam(user_id) - return this.delete("/oauth_client_apps/${path_client_guid}/users/${path_user_id}", - mapOf("fields" to fields)) + return this.delete( + "/oauth_client_apps/${path_client_guid}/users/${path_user_id}", + mapOf("fields" to fields), + ) } - /** * ### Get the OIDC configuration. * @@ -1261,7 +1268,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * Configuring OIDC impacts authentication for all users. This configuration should be done carefully. * - * Looker maintains a single OIDC configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). + * Looker maintains a single OIDC configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). * * OIDC is enabled or disabled for Looker using the **enabled** field. * @@ -1269,13 +1276,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /oidc_config -> OIDCConfig */ - fun oidc_config( - - ) : SDKResponse { + fun oidc_config(): SDKResponse { return this.get("/oidc_config", mapOf()) } - /** * ### Update the OIDC configuration. * @@ -1294,12 +1298,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /oidc_config -> OIDCConfig */ fun update_oidc_config( - body: WriteOIDCConfig - ) : SDKResponse { + body: WriteOIDCConfig, + ): SDKResponse { return this.patch("/oidc_config", mapOf(), body) } - /** * ### Get a OIDC test configuration by test_slug. * @@ -1310,13 +1313,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /oidc_test_configs/{test_slug} -> OIDCConfig */ fun oidc_test_config( - test_slug: String - ) : SDKResponse { + test_slug: String, + ): SDKResponse { val path_test_slug = encodeParam(test_slug) return this.get("/oidc_test_configs/${path_test_slug}", mapOf()) } - /** * ### Delete a OIDC test configuration. * @@ -1327,13 +1329,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /oidc_test_configs/{test_slug} -> String */ fun delete_oidc_test_config( - test_slug: String - ) : SDKResponse { + test_slug: String, + ): SDKResponse { val path_test_slug = encodeParam(test_slug) return this.delete("/oidc_test_configs/${path_test_slug}", mapOf()) } - /** * ### Create a OIDC test configuration. * @@ -1344,12 +1345,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /oidc_test_configs -> OIDCConfig */ fun create_oidc_test_config( - body: WriteOIDCConfig - ) : SDKResponse { + body: WriteOIDCConfig, + ): SDKResponse { return this.post("/oidc_test_configs", mapOf(), body) } - /** * ### Get password config. * @@ -1357,13 +1357,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /password_config -> PasswordConfig */ - fun password_config( - - ) : SDKResponse { + fun password_config(): SDKResponse { return this.get("/password_config", mapOf()) } - /** * ### Update password config. * @@ -1374,12 +1371,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /password_config -> PasswordConfig */ fun update_password_config( - body: WritePasswordConfig - ) : SDKResponse { + body: WritePasswordConfig, + ): SDKResponse { return this.patch("/password_config", mapOf(), body) } - /** * ### Force all credentials_email users to reset their login passwords upon their next login. * @@ -1387,13 +1383,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * PUT /password_config/force_password_reset_at_next_login_for_all_users -> String */ - fun force_password_reset_at_next_login_for_all_users( - - ) : SDKResponse { + fun force_password_reset_at_next_login_for_all_users(): SDKResponse { return this.put("/password_config/force_password_reset_at_next_login_for_all_users", mapOf()) } - /** * ### Get the SAML configuration. * @@ -1404,7 +1397,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * Configuring SAML impacts authentication for all users. This configuration should be done carefully. * - * Looker maintains a single SAML configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). + * Looker maintains a single SAML configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). * * SAML is enabled or disabled for Looker using the **enabled** field. * @@ -1412,13 +1405,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /saml_config -> SamlConfig */ - fun saml_config( - - ) : SDKResponse { + fun saml_config(): SDKResponse { return this.get("/saml_config", mapOf()) } - /** * ### Update the SAML configuration. * @@ -1437,12 +1427,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /saml_config -> SamlConfig */ fun update_saml_config( - body: WriteSamlConfig - ) : SDKResponse { + body: WriteSamlConfig, + ): SDKResponse { return this.patch("/saml_config", mapOf(), body) } - /** * ### Get a SAML test configuration by test_slug. * @@ -1453,13 +1442,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /saml_test_configs/{test_slug} -> SamlConfig */ fun saml_test_config( - test_slug: String - ) : SDKResponse { + test_slug: String, + ): SDKResponse { val path_test_slug = encodeParam(test_slug) return this.get("/saml_test_configs/${path_test_slug}", mapOf()) } - /** * ### Delete a SAML test configuration. * @@ -1470,13 +1458,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /saml_test_configs/{test_slug} -> String */ fun delete_saml_test_config( - test_slug: String - ) : SDKResponse { + test_slug: String, + ): SDKResponse { val path_test_slug = encodeParam(test_slug) return this.delete("/saml_test_configs/${path_test_slug}", mapOf()) } - /** * ### Create a SAML test configuration. * @@ -1487,12 +1474,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /saml_test_configs -> SamlConfig */ fun create_saml_test_config( - body: WriteSamlConfig - ) : SDKResponse { + body: WriteSamlConfig, + ): SDKResponse { return this.post("/saml_test_configs", mapOf(), body) } - /** * ### Parse the given xml as a SAML IdP metadata document and return the result. * @@ -1503,12 +1489,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /parse_saml_idp_metadata -> SamlMetadataParseResult */ fun parse_saml_idp_metadata( - body: String - ) : SDKResponse { + body: String, + ): SDKResponse { return this.post("/parse_saml_idp_metadata", mapOf(), body) } - /** * ### Fetch the given url and parse it as a SAML IdP metadata document and return the result. * Note that this requires that the url be public or at least at a location where the Looker instance @@ -1521,24 +1506,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /fetch_and_parse_saml_idp_metadata -> SamlMetadataParseResult */ fun fetch_and_parse_saml_idp_metadata( - body: String - ) : SDKResponse { + body: String, + ): SDKResponse { return this.post("/fetch_and_parse_saml_idp_metadata", mapOf(), body) } - /** * ### Get session config. * * GET /session_config -> SessionConfig */ - fun session_config( - - ) : SDKResponse { + fun session_config(): SDKResponse { return this.get("/session_config", mapOf()) } - /** * ### Update session config. * @@ -1547,12 +1528,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /session_config -> SessionConfig */ fun update_session_config( - body: WriteSessionConfig - ) : SDKResponse { + body: WriteSessionConfig, + ): SDKResponse { return this.patch("/session_config", mapOf(), body) } - /** * ### Get Support Access Allowlist Users * @@ -1565,13 +1545,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /support_access/allowlist -> Array */ @JvmOverloads fun get_support_access_allowlist_entries( - fields: String? = null - ) : SDKResponse { - return this.get>("/support_access/allowlist", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/support_access/allowlist", + mapOf("fields" to fields), + ) } - /** * ### Add Support Access Allowlist Users * @@ -1584,12 +1565,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /support_access/allowlist -> Array */ fun add_support_access_allowlist_entries( - body: SupportAccessAddEntries - ) : SDKResponse { + body: SupportAccessAddEntries, + ): SDKResponse { return this.post>("/support_access/allowlist", mapOf(), body) } - /** * ### Delete Support Access Allowlist User * @@ -1602,13 +1582,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /support_access/allowlist/{entry_id} -> String */ fun delete_support_access_allowlist_entry( - entry_id: String - ) : SDKResponse { + entry_id: String, + ): SDKResponse { val path_entry_id = encodeParam(entry_id) return this.delete("/support_access/allowlist/${path_entry_id}", mapOf()) } - /** * ### Enable Support Access * @@ -1621,12 +1600,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /support_access/enable -> SupportAccessStatus */ fun enable_support_access( - body: SupportAccessEnable - ) : SDKResponse { + body: SupportAccessEnable, + ): SDKResponse { return this.put("/support_access/enable", mapOf(), body) } - /** * ### Disable Support Access * @@ -1636,13 +1614,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * PUT /support_access/disable -> SupportAccessStatus */ - fun disable_support_access( - - ) : SDKResponse { + fun disable_support_access(): SDKResponse { return this.put("/support_access/disable", mapOf()) } - /** * ### Support Access Status * @@ -1652,13 +1627,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /support_access/status -> SupportAccessStatus */ - fun support_access_status( - - ) : SDKResponse { + fun support_access_status(): SDKResponse { return this.get("/support_access/status", mapOf()) } - /** * ### Get currently locked-out users. * @@ -1667,13 +1639,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /user_login_lockouts -> Array */ @JvmOverloads fun all_user_login_lockouts( - fields: String? = null - ) : SDKResponse { - return this.get>("/user_login_lockouts", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/user_login_lockouts", + mapOf("fields" to fields), + ) } - /** * ### Search currently locked-out users. * @@ -1702,23 +1675,26 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { full_name: String? = null, email: String? = null, remote_id: String? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get>("/user_login_lockouts/search", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "auth_type" to auth_type, - "full_name" to full_name, - "email" to email, - "remote_id" to remote_id, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get>( + "/user_login_lockouts/search", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "auth_type" to auth_type, + "full_name" to full_name, + "email" to email, + "remote_id" to remote_id, + "filter_or" to filter_or, + ), + ) } - /** * ### Removes login lockout for the associated user. * @@ -1727,8 +1703,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /user_login_lockout/{key} -> String */ fun delete_user_login_lockout( - key: String - ) : SDKResponse { + key: String, + ): SDKResponse { val path_key = encodeParam(key) return this.delete("/user_login_lockout/${path_key}", mapOf()) } @@ -1737,7 +1713,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Board: Manage Boards - /** * ### Get information about all boards. * @@ -1746,13 +1721,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /boards -> Array */ @JvmOverloads fun all_boards( - fields: String? = null - ) : SDKResponse { - return this.get>("/boards", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/boards", + mapOf("fields" to fields), + ) } - /** * ### Create a new board. * @@ -1763,13 +1739,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_board( body: WriteBoard, - fields: String? = null - ) : SDKResponse { - return this.post("/boards", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/boards", + mapOf("fields" to fields), + body, + ) } - /** * ### Search Boards * @@ -1825,26 +1803,29 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { offset: Long? = null, limit: Long? = null, filter_or: Boolean? = null, - permission: String? = null - ) : SDKResponse { - return this.get>("/boards/search", - mapOf("title" to title, - "created_at" to created_at, - "first_name" to first_name, - "last_name" to last_name, - "fields" to fields, - "favorited" to favorited, - "creator_id" to creator_id, - "sorts" to sorts, - "page" to page, - "per_page" to per_page, - "offset" to offset, - "limit" to limit, - "filter_or" to filter_or, - "permission" to permission)) + permission: String? = null, + ): SDKResponse { + return this.get>( + "/boards/search", + mapOf( + "title" to title, + "created_at" to created_at, + "first_name" to first_name, + "last_name" to last_name, + "fields" to fields, + "favorited" to favorited, + "creator_id" to creator_id, + "sorts" to sorts, + "page" to page, + "per_page" to per_page, + "offset" to offset, + "limit" to limit, + "filter_or" to filter_or, + "permission" to permission, + ), + ) } - /** * ### Get information about a board. * @@ -1855,14 +1836,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun board( board_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_board_id = encodeParam(board_id) - return this.get("/boards/${path_board_id}", - mapOf("fields" to fields)) + return this.get( + "/boards/${path_board_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a board definition. * @@ -1875,14 +1857,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_board( board_id: String, body: WriteBoard, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_board_id = encodeParam(board_id) - return this.patch("/boards/${path_board_id}", - mapOf("fields" to fields), body) + return this.patch( + "/boards/${path_board_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a board. * @@ -1891,13 +1875,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /boards/{board_id} -> String */ fun delete_board( - board_id: String - ) : SDKResponse { + board_id: String, + ): SDKResponse { val path_board_id = encodeParam(board_id) return this.delete("/boards/${path_board_id}", mapOf()) } - /** * ### Get information about all board items. * @@ -1910,15 +1893,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun all_board_items( fields: String? = null, sorts: String? = null, - board_section_id: String? = null - ) : SDKResponse { - return this.get>("/board_items", - mapOf("fields" to fields, - "sorts" to sorts, - "board_section_id" to board_section_id)) + board_section_id: String? = null, + ): SDKResponse { + return this.get>( + "/board_items", + mapOf( + "fields" to fields, + "sorts" to sorts, + "board_section_id" to board_section_id, + ), + ) } - /** * ### Create a new board item. * @@ -1929,13 +1915,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_board_item( body: WriteBoardItem, - fields: String? = null - ) : SDKResponse { - return this.post("/board_items", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/board_items", + mapOf("fields" to fields), + body, + ) } - /** * ### Get information about a board item. * @@ -1946,14 +1934,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun board_item( board_item_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_board_item_id = encodeParam(board_item_id) - return this.get("/board_items/${path_board_item_id}", - mapOf("fields" to fields)) + return this.get( + "/board_items/${path_board_item_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a board item definition. * @@ -1966,14 +1955,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_board_item( board_item_id: String, body: WriteBoardItem, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_board_item_id = encodeParam(board_item_id) - return this.patch("/board_items/${path_board_item_id}", - mapOf("fields" to fields), body) + return this.patch( + "/board_items/${path_board_item_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a board item. * @@ -1982,13 +1973,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /board_items/{board_item_id} -> String */ fun delete_board_item( - board_item_id: String - ) : SDKResponse { + board_item_id: String, + ): SDKResponse { val path_board_item_id = encodeParam(board_item_id) return this.delete("/board_items/${path_board_item_id}", mapOf()) } - /** * ### Get information about all board sections. * @@ -1999,14 +1989,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_board_sections( fields: String? = null, - sorts: String? = null - ) : SDKResponse { - return this.get>("/board_sections", - mapOf("fields" to fields, - "sorts" to sorts)) + sorts: String? = null, + ): SDKResponse { + return this.get>( + "/board_sections", + mapOf( + "fields" to fields, + "sorts" to sorts, + ), + ) } - /** * ### Create a new board section. * @@ -2017,13 +2010,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_board_section( body: WriteBoardSection, - fields: String? = null - ) : SDKResponse { - return this.post("/board_sections", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/board_sections", + mapOf("fields" to fields), + body, + ) } - /** * ### Get information about a board section. * @@ -2034,14 +2029,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun board_section( board_section_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_board_section_id = encodeParam(board_section_id) - return this.get("/board_sections/${path_board_section_id}", - mapOf("fields" to fields)) + return this.get( + "/board_sections/${path_board_section_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a board section definition. * @@ -2054,14 +2050,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_board_section( board_section_id: String, body: WriteBoardSection, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_board_section_id = encodeParam(board_section_id) - return this.patch("/board_sections/${path_board_section_id}", - mapOf("fields" to fields), body) + return this.patch( + "/board_sections/${path_board_section_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a board section. * @@ -2070,8 +2068,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /board_sections/{board_section_id} -> String */ fun delete_board_section( - board_section_id: String - ) : SDKResponse { + board_section_id: String, + ): SDKResponse { val path_board_section_id = encodeParam(board_section_id) return this.delete("/board_sections/${path_board_section_id}", mapOf()) } @@ -2080,7 +2078,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region ColorCollection: Manage Color Collections - /** * ### Get an array of all existing Color Collections * Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) @@ -2096,13 +2093,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /color_collections -> Array */ @JvmOverloads fun all_color_collections( - fields: String? = null - ) : SDKResponse { - return this.get>("/color_collections", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/color_collections", + mapOf("fields" to fields), + ) } - /** * ### Create a custom color collection with the specified information * @@ -2119,12 +2117,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /color_collections -> ColorCollection */ fun create_color_collection( - body: WriteColorCollection - ) : SDKResponse { + body: WriteColorCollection, + ): SDKResponse { return this.post("/color_collections", mapOf(), body) } - /** * ### Get an array of all existing **Custom** Color Collections * Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) @@ -2138,13 +2135,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /color_collections/custom -> Array */ @JvmOverloads fun color_collections_custom( - fields: String? = null - ) : SDKResponse { - return this.get>("/color_collections/custom", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/color_collections/custom", + mapOf("fields" to fields), + ) } - /** * ### Get an array of all existing **Standard** Color Collections * Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) @@ -2158,13 +2156,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /color_collections/standard -> Array */ @JvmOverloads fun color_collections_standard( - fields: String? = null - ) : SDKResponse { - return this.get>("/color_collections/standard", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/color_collections/standard", + mapOf("fields" to fields), + ) } - /** * ### Get the default color collection * @@ -2174,13 +2173,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /color_collections/default -> ColorCollection */ - fun default_color_collection( - - ) : SDKResponse { + fun default_color_collection(): SDKResponse { return this.get("/color_collections/default", mapOf()) } - /** * ### Set the global default Color Collection by ID * @@ -2192,13 +2188,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /color_collections/default -> ColorCollection */ fun set_default_color_collection( - collection_id: String - ) : SDKResponse { - return this.put("/color_collections/default", - mapOf("collection_id" to collection_id)) + collection_id: String, + ): SDKResponse { + return this.put( + "/color_collections/default", + mapOf("collection_id" to collection_id), + ) } - /** * ### Get a Color Collection by ID * @@ -2218,14 +2215,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun color_collection( collection_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_collection_id = encodeParam(collection_id) - return this.get("/color_collections/${path_collection_id}", - mapOf("fields" to fields)) + return this.get( + "/color_collections/${path_collection_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a custom color collection by id. * **Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors. @@ -2237,13 +2235,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_color_collection( collection_id: String, - body: WriteColorCollection - ) : SDKResponse { + body: WriteColorCollection, + ): SDKResponse { val path_collection_id = encodeParam(collection_id) return this.patch("/color_collections/${path_collection_id}", mapOf(), body) } - /** * ### Delete a custom color collection by id * @@ -2259,8 +2256,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /color_collections/{collection_id} -> String */ fun delete_color_collection( - collection_id: String - ) : SDKResponse { + collection_id: String, + ): SDKResponse { val path_collection_id = encodeParam(collection_id) return this.delete("/color_collections/${path_collection_id}", mapOf()) } @@ -2269,19 +2266,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Config: Manage General Configuration - /** * Get the current Cloud Storage Configuration. * * GET /cloud_storage -> BackupConfiguration */ - fun cloud_storage_configuration( - - ) : SDKResponse { + fun cloud_storage_configuration(): SDKResponse { return this.get("/cloud_storage", mapOf()) } - /** * Update the current Cloud Storage Configuration. * @@ -2290,25 +2283,21 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /cloud_storage -> BackupConfiguration */ fun update_cloud_storage_configuration( - body: WriteBackupConfiguration - ) : SDKResponse { + body: WriteBackupConfiguration, + ): SDKResponse { return this.patch("/cloud_storage", mapOf(), body) } - /** * ### Get the current status and content of custom welcome emails * * GET /custom_welcome_email -> CustomWelcomeEmail */ @Deprecated(message = "Deprecated method") - fun custom_welcome_email( - - ) : SDKResponse { + fun custom_welcome_email(): SDKResponse { return this.get("/custom_welcome_email", mapOf()) } - /** * Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user. * @@ -2318,15 +2307,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /custom_welcome_email -> CustomWelcomeEmail */ @Deprecated(message = "Deprecated method") - @JvmOverloads fun update_custom_welcome_email( + @JvmOverloads + fun update_custom_welcome_email( body: CustomWelcomeEmail, - send_test_welcome_email: Boolean? = null - ) : SDKResponse { - return this.patch("/custom_welcome_email", - mapOf("send_test_welcome_email" to send_test_welcome_email), body) + send_test_welcome_email: Boolean? = null, + ): SDKResponse { + return this.patch( + "/custom_welcome_email", + mapOf("send_test_welcome_email" to send_test_welcome_email), + body, + ) } - /** * Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user. * @@ -2335,24 +2327,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /custom_welcome_email_test -> WelcomeEmailTest */ fun update_custom_welcome_email_test( - body: WelcomeEmailTest - ) : SDKResponse { + body: WelcomeEmailTest, + ): SDKResponse { return this.put("/custom_welcome_email_test", mapOf(), body) } - /** * ### Retrieve the value for whether or not digest emails is enabled * * GET /digest_emails_enabled -> DigestEmails */ - fun digest_emails_enabled( - - ) : SDKResponse { + fun digest_emails_enabled(): SDKResponse { return this.get("/digest_emails_enabled", mapOf()) } - /** * ### Update the setting for enabling/disabling digest emails * @@ -2361,12 +2349,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /digest_emails_enabled -> DigestEmails */ fun update_digest_emails_enabled( - body: DigestEmails - ) : SDKResponse { + body: DigestEmails, + ): SDKResponse { return this.patch("/digest_emails_enabled", mapOf(), body) } - /** * ### Trigger the generation of digest email records and send them to Looker's internal system. This does not send * any actual emails, it generates records containing content which may be of interest for users who have become inactive. @@ -2374,13 +2361,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * POST /digest_email_send -> DigestEmailSend */ - fun create_digest_email_send( - - ) : SDKResponse { + fun create_digest_email_send(): SDKResponse { return this.post("/digest_email_send", mapOf()) } - /** * ### Get Egress IP Addresses * @@ -2390,25 +2374,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /public_egress_ip_addresses -> EgressIpAddresses */ - fun public_egress_ip_addresses( - - ) : SDKResponse { + fun public_egress_ip_addresses(): SDKResponse { return this.get("/public_egress_ip_addresses", mapOf()) } - /** * ### Set the menu item name and content for internal help resources * * GET /internal_help_resources_content -> InternalHelpResourcesContent */ - fun internal_help_resources_content( - - ) : SDKResponse { + fun internal_help_resources_content(): SDKResponse { return this.get("/internal_help_resources_content", mapOf()) } - /** * Update internal help resources content * @@ -2417,24 +2395,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /internal_help_resources_content -> InternalHelpResourcesContent */ fun update_internal_help_resources_content( - body: WriteInternalHelpResourcesContent - ) : SDKResponse { + body: WriteInternalHelpResourcesContent, + ): SDKResponse { return this.patch("/internal_help_resources_content", mapOf(), body) } - /** * ### Get and set the options for internal help resources * * GET /internal_help_resources_enabled -> InternalHelpResources */ - fun internal_help_resources( - - ) : SDKResponse { + fun internal_help_resources(): SDKResponse { return this.get("/internal_help_resources_enabled", mapOf()) } - /** * Update internal help resources settings * @@ -2443,12 +2417,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /internal_help_resources -> InternalHelpResources */ fun update_internal_help_resources( - body: WriteInternalHelpResources - ) : SDKResponse { + body: WriteInternalHelpResources, + ): SDKResponse { return this.patch("/internal_help_resources", mapOf(), body) } - /** * ### Get all legacy features. * @@ -2456,13 +2429,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /legacy_features -> Array */ - fun all_legacy_features( - - ) : SDKResponse { + fun all_legacy_features(): SDKResponse { return this.get>("/legacy_features", mapOf()) } - /** * ### Get information about the legacy feature with a specific id. * @@ -2473,13 +2443,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /legacy_features/{legacy_feature_id} -> LegacyFeature */ fun legacy_feature( - legacy_feature_id: String - ) : SDKResponse { + legacy_feature_id: String, + ): SDKResponse { val path_legacy_feature_id = encodeParam(legacy_feature_id) return this.get("/legacy_features/${path_legacy_feature_id}", mapOf()) } - /** * ### Update information about the legacy feature with a specific id. * @@ -2492,37 +2461,30 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_legacy_feature( legacy_feature_id: String, - body: WriteLegacyFeature - ) : SDKResponse { + body: WriteLegacyFeature, + ): SDKResponse { val path_legacy_feature_id = encodeParam(legacy_feature_id) return this.patch("/legacy_features/${path_legacy_feature_id}", mapOf(), body) } - /** * ### Get a list of locales that Looker supports. * * GET /locales -> Array */ - fun all_locales( - - ) : SDKResponse { + fun all_locales(): SDKResponse { return this.get>("/locales", mapOf()) } - /** * ### Get all mobile settings. * * GET /mobile/settings -> MobileSettings */ - fun mobile_settings( - - ) : SDKResponse { + fun mobile_settings(): SDKResponse { return this.get("/mobile/settings", mapOf()) } - /** * ### Get Looker Settings * @@ -2551,13 +2513,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /setting -> Setting */ @JvmOverloads fun get_setting( - fields: String? = null - ) : SDKResponse { - return this.get("/setting", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/setting", + mapOf("fields" to fields), + ) } - /** * ### Configure Looker Settings * @@ -2592,13 +2555,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun set_setting( body: WriteSetting, - fields: String? = null - ) : SDKResponse { - return this.patch("/setting", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.patch( + "/setting", + mapOf("fields" to fields), + body, + ) } - /** * ### Configure SMTP Settings * This API allows users to configure the SMTP settings on the Looker instance. @@ -2609,12 +2574,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /smtp_settings -> Void */ fun set_smtp_settings( - body: SmtpSettings - ) : SDKResponse { + body: SmtpSettings, + ): SDKResponse { return this.post("/smtp_settings", mapOf(), body) } - /** * ### Get current SMTP status. * @@ -2623,25 +2587,23 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /smtp_status -> SmtpStatus */ @JvmOverloads fun smtp_status( - fields: String? = null - ) : SDKResponse { - return this.get("/smtp_status", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/smtp_status", + mapOf("fields" to fields), + ) } - /** * ### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks). * * GET /timezones -> Array */ - fun all_timezones( - - ) : SDKResponse { + fun all_timezones(): SDKResponse { return this.get>("/timezones", mapOf()) } - /** * ### Get information about all API versions supported by this Looker instance. * @@ -2650,13 +2612,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /versions -> ApiVersion */ @JvmOverloads fun versions( - fields: String? = null - ) : SDKResponse { - return this.get("/versions", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/versions", + mapOf("fields" to fields), + ) } - /** * ### Get an API specification for this Looker instance. * @@ -2669,14 +2632,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun api_spec( api_version: String, - specification: String - ) : SDKResponse { + specification: String, + ): SDKResponse { val path_api_version = encodeParam(api_version) val path_specification = encodeParam(specification) return this.get("/api_spec/${path_api_version}/${path_specification}", mapOf()) } - /** * ### This feature is enabled only by special license. * @@ -2689,14 +2651,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /whitelabel_configuration -> WhitelabelConfiguration */ @Deprecated(message = "Deprecated method") - @JvmOverloads fun whitelabel_configuration( - fields: String? = null - ) : SDKResponse { - return this.get("/whitelabel_configuration", - mapOf("fields" to fields)) + @JvmOverloads + fun whitelabel_configuration( + fields: String? = null, + ): SDKResponse { + return this.get( + "/whitelabel_configuration", + mapOf("fields" to fields), + ) } - /** * ### Update the private label configuration * @@ -2708,8 +2672,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @Deprecated(message = "Deprecated method") fun update_whitelabel_configuration( - body: WriteWhitelabelConfiguration - ) : SDKResponse { + body: WriteWhitelabelConfiguration, + ): SDKResponse { return this.put("/whitelabel_configuration", mapOf(), body) } @@ -2717,7 +2681,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Connection: Manage Database Connections - /** * ### Get information about all connections. * @@ -2726,13 +2689,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /connections -> Array */ @JvmOverloads fun all_connections( - fields: String? = null - ) : SDKResponse { - return this.get>("/connections", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/connections", + mapOf("fields" to fields), + ) } - /** * ### Create a connection using the specified configuration. * @@ -2741,12 +2705,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /connections -> DBConnection */ fun create_connection( - body: WriteDBConnection - ) : SDKResponse { + body: WriteDBConnection, + ): SDKResponse { return this.post("/connections", mapOf(), body) } - /** * ### Get information about a connection. * @@ -2757,14 +2720,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun connection( connection_name: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get("/connections/${path_connection_name}", - mapOf("fields" to fields)) + return this.get( + "/connections/${path_connection_name}", + mapOf("fields" to fields), + ) } - /** * ### Update a connection using the specified configuration. * @@ -2775,13 +2739,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_connection( connection_name: String, - body: WriteDBConnection - ) : SDKResponse { + body: WriteDBConnection, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) return this.patch("/connections/${path_connection_name}", mapOf(), body) } - /** * ### Delete a connection. * @@ -2790,13 +2753,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /connections/{connection_name} -> String */ fun delete_connection( - connection_name: String - ) : SDKResponse { + connection_name: String, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) return this.delete("/connections/${path_connection_name}", mapOf()) } - /** * ### Delete a connection override. * @@ -2807,14 +2769,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_connection_override( connection_name: String, - override_context: String - ) : SDKResponse { + override_context: String, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) val path_override_context = encodeParam(override_context) return this.delete("/connections/${path_connection_name}/connection_override/${path_override_context}", mapOf()) } - /** * ### Test an existing connection. * @@ -2832,14 +2793,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun test_connection( connection_name: String, - tests: DelimArray? = null - ) : SDKResponse { + tests: DelimArray? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.put>("/connections/${path_connection_name}/test", - mapOf("tests" to tests)) + return this.put>( + "/connections/${path_connection_name}/test", + mapOf("tests" to tests), + ) } - /** * ### Test a connection configuration. * @@ -2857,13 +2819,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun test_connection_config( body: WriteDBConnection, - tests: DelimArray? = null - ) : SDKResponse { - return this.put>("/connections/test", - mapOf("tests" to tests), body) + tests: DelimArray? = null, + ): SDKResponse { + return this.put>( + "/connections/test", + mapOf("tests" to tests), + body, + ) } - /** * ### Get information about all dialects. * @@ -2872,13 +2836,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /dialect_info -> Array */ @JvmOverloads fun all_dialect_infos( - fields: String? = null - ) : SDKResponse { - return this.get>("/dialect_info", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/dialect_info", + mapOf("fields" to fields), + ) } - /** * ### Get all External OAuth Applications. * @@ -2891,14 +2856,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_external_oauth_applications( name: String? = null, - client_id: String? = null - ) : SDKResponse { - return this.get>("/external_oauth_applications", - mapOf("name" to name, - "client_id" to client_id)) + client_id: String? = null, + ): SDKResponse { + return this.get>( + "/external_oauth_applications", + mapOf( + "name" to name, + "client_id" to client_id, + ), + ) } - /** * ### Create an OAuth Application using the specified configuration. * @@ -2909,12 +2877,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /external_oauth_applications -> ExternalOauthApplication */ fun create_external_oauth_application( - body: WriteExternalOauthApplication - ) : SDKResponse { + body: WriteExternalOauthApplication, + ): SDKResponse { return this.post("/external_oauth_applications", mapOf(), body) } - /** * ### Create OAuth User state. * @@ -2923,12 +2890,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /external_oauth_applications/user_state -> CreateOAuthApplicationUserStateResponse */ fun create_oauth_application_user_state( - body: CreateOAuthApplicationUserStateRequest - ) : SDKResponse { + body: CreateOAuthApplicationUserStateRequest, + ): SDKResponse { return this.post("/external_oauth_applications/user_state", mapOf(), body) } - /** * ### Get information about all SSH Servers. * @@ -2937,13 +2903,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_servers -> Array */ @JvmOverloads fun all_ssh_servers( - fields: String? = null - ) : SDKResponse { - return this.get>("/ssh_servers", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/ssh_servers", + mapOf("fields" to fields), + ) } - /** * ### Create an SSH Server. * @@ -2952,12 +2919,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /ssh_servers -> SshServer */ fun create_ssh_server( - body: WriteSshServer - ) : SDKResponse { + body: WriteSshServer, + ): SDKResponse { return this.post("/ssh_servers", mapOf(), body) } - /** * ### Get information about an SSH Server. * @@ -2966,13 +2932,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_server/{ssh_server_id} -> SshServer */ fun ssh_server( - ssh_server_id: String - ) : SDKResponse { + ssh_server_id: String, + ): SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) return this.get("/ssh_server/${path_ssh_server_id}", mapOf()) } - /** * ### Update an SSH Server. * @@ -2983,13 +2948,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_ssh_server( ssh_server_id: String, - body: WriteSshServer - ) : SDKResponse { + body: WriteSshServer, + ): SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) return this.patch("/ssh_server/${path_ssh_server_id}", mapOf(), body) } - /** * ### Delete an SSH Server. * @@ -2998,13 +2962,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /ssh_server/{ssh_server_id} -> String */ fun delete_ssh_server( - ssh_server_id: String - ) : SDKResponse { + ssh_server_id: String, + ): SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) return this.delete("/ssh_server/${path_ssh_server_id}", mapOf()) } - /** * ### Test the SSH Server * @@ -3013,13 +2976,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_server/{ssh_server_id}/test -> SshServer */ fun test_ssh_server( - ssh_server_id: String - ) : SDKResponse { + ssh_server_id: String, + ): SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) return this.get("/ssh_server/${path_ssh_server_id}/test", mapOf()) } - /** * ### Get information about all SSH Tunnels. * @@ -3028,13 +2990,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_tunnels -> Array */ @JvmOverloads fun all_ssh_tunnels( - fields: String? = null - ) : SDKResponse { - return this.get>("/ssh_tunnels", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/ssh_tunnels", + mapOf("fields" to fields), + ) } - /** * ### Create an SSH Tunnel * @@ -3043,12 +3006,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /ssh_tunnels -> SshTunnel */ fun create_ssh_tunnel( - body: WriteSshTunnel - ) : SDKResponse { + body: WriteSshTunnel, + ): SDKResponse { return this.post("/ssh_tunnels", mapOf(), body) } - /** * ### Get information about an SSH Tunnel. * @@ -3057,13 +3019,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_tunnel/{ssh_tunnel_id} -> SshTunnel */ fun ssh_tunnel( - ssh_tunnel_id: String - ) : SDKResponse { + ssh_tunnel_id: String, + ): SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) return this.get("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf()) } - /** * ### Update an SSH Tunnel * @@ -3074,13 +3035,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_ssh_tunnel( ssh_tunnel_id: String, - body: WriteSshTunnel - ) : SDKResponse { + body: WriteSshTunnel, + ): SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) return this.patch("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf(), body) } - /** * ### Delete an SSH Tunnel * @@ -3089,13 +3049,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /ssh_tunnel/{ssh_tunnel_id} -> String */ fun delete_ssh_tunnel( - ssh_tunnel_id: String - ) : SDKResponse { + ssh_tunnel_id: String, + ): SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) return this.delete("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf()) } - /** * ### Test the SSH Tunnel * @@ -3104,13 +3063,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_tunnel/{ssh_tunnel_id}/test -> SshTunnel */ fun test_ssh_tunnel( - ssh_tunnel_id: String - ) : SDKResponse { + ssh_tunnel_id: String, + ): SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) return this.get("/ssh_tunnel/${path_ssh_tunnel_id}/test", mapOf()) } - /** * ### Get the SSH public key * @@ -3118,9 +3076,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /ssh_public_key -> SshPublicKey */ - fun ssh_public_key( - - ) : SDKResponse { + fun ssh_public_key(): SDKResponse { return this.get("/ssh_public_key", mapOf()) } @@ -3128,7 +3084,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Content: Manage Content - /** * ### Search Favorite Content * @@ -3178,23 +3133,26 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { offset: Long? = null, sorts: String? = null, fields: String? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get>("/content_favorite/search", - mapOf("id" to id, - "user_id" to user_id, - "content_metadata_id" to content_metadata_id, - "dashboard_id" to dashboard_id, - "look_id" to look_id, - "board_id" to board_id, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "fields" to fields, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get>( + "/content_favorite/search", + mapOf( + "id" to id, + "user_id" to user_id, + "content_metadata_id" to content_metadata_id, + "dashboard_id" to dashboard_id, + "look_id" to look_id, + "board_id" to board_id, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "fields" to fields, + "filter_or" to filter_or, + ), + ) } - /** * ### Get favorite content by its id * @@ -3205,14 +3163,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun content_favorite( content_favorite_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_content_favorite_id = encodeParam(content_favorite_id) - return this.get("/content_favorite/${path_content_favorite_id}", - mapOf("fields" to fields)) + return this.get( + "/content_favorite/${path_content_favorite_id}", + mapOf("fields" to fields), + ) } - /** * ### Delete favorite content * @@ -3221,13 +3180,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /content_favorite/{content_favorite_id} -> String */ fun delete_content_favorite( - content_favorite_id: String - ) : SDKResponse { + content_favorite_id: String, + ): SDKResponse { val path_content_favorite_id = encodeParam(content_favorite_id) return this.delete("/content_favorite/${path_content_favorite_id}", mapOf()) } - /** * ### Create favorite content * @@ -3236,12 +3194,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /content_favorite -> ContentFavorite */ fun create_content_favorite( - body: WriteContentFavorite - ) : SDKResponse { + body: WriteContentFavorite, + ): SDKResponse { return this.post("/content_favorite", mapOf(), body) } - /** * ### Get information about all content metadata in a space. * @@ -3252,14 +3209,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_content_metadatas( parent_id: String, - fields: String? = null - ) : SDKResponse { - return this.get>("/content_metadata", - mapOf("parent_id" to parent_id, - "fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/content_metadata", + mapOf( + "parent_id" to parent_id, + "fields" to fields, + ), + ) } - /** * ### Get information about an individual content metadata record. * @@ -3270,14 +3230,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun content_metadata( content_metadata_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_content_metadata_id = encodeParam(content_metadata_id) - return this.get("/content_metadata/${path_content_metadata_id}", - mapOf("fields" to fields)) + return this.get( + "/content_metadata/${path_content_metadata_id}", + mapOf("fields" to fields), + ) } - /** * ### Move a piece of content. * @@ -3288,13 +3249,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_content_metadata( content_metadata_id: String, - body: WriteContentMeta - ) : SDKResponse { + body: WriteContentMeta, + ): SDKResponse { val path_content_metadata_id = encodeParam(content_metadata_id) return this.patch("/content_metadata/${path_content_metadata_id}", mapOf(), body) } - /** * ### All content metadata access records for a content metadata item. * @@ -3305,14 +3265,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_content_metadata_accesses( content_metadata_id: String, - fields: String? = null - ) : SDKResponse { - return this.get>("/content_metadata_access", - mapOf("content_metadata_id" to content_metadata_id, - "fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/content_metadata_access", + mapOf( + "content_metadata_id" to content_metadata_id, + "fields" to fields, + ), + ) } - /** * ### Create content metadata access. * @@ -3323,13 +3286,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_content_metadata_access( body: ContentMetaGroupUser, - send_boards_notification_email: Boolean? = null - ) : SDKResponse { - return this.post("/content_metadata_access", - mapOf("send_boards_notification_email" to send_boards_notification_email), body) + send_boards_notification_email: Boolean? = null, + ): SDKResponse { + return this.post( + "/content_metadata_access", + mapOf("send_boards_notification_email" to send_boards_notification_email), + body, + ) } - /** * ### Update type of access for content metadata. * @@ -3340,13 +3305,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_content_metadata_access( content_metadata_access_id: String, - body: ContentMetaGroupUser - ) : SDKResponse { + body: ContentMetaGroupUser, + ): SDKResponse { val path_content_metadata_access_id = encodeParam(content_metadata_access_id) return this.put("/content_metadata_access/${path_content_metadata_access_id}", mapOf(), body) } - /** * ### Remove content metadata access. * @@ -3355,13 +3319,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /content_metadata_access/{content_metadata_access_id} -> String */ fun delete_content_metadata_access( - content_metadata_access_id: String - ) : SDKResponse { + content_metadata_access_id: String, + ): SDKResponse { val path_content_metadata_access_id = encodeParam(content_metadata_access_id) return this.delete("/content_metadata_access/${path_content_metadata_access_id}", mapOf()) } - /** * ### Search across looks, dashboards, and lookml dashboards. The terms field will be matched against the * title and description of the content and the closest results are returned. Content that has been frequently @@ -3390,23 +3353,26 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, page: Long? = null, - per_page: Long? = null - ) : SDKResponse { + per_page: Long? = null, + ): SDKResponse { val path_terms = encodeParam(terms) - return this.get>("/content/${path_terms}", - mapOf("fields" to fields, - "types" to types, - "limit" to limit, - "offset" to offset, - "page" to page, - "per_page" to per_page)) + return this.get>( + "/content/${path_terms}", + mapOf( + "fields" to fields, + "types" to types, + "limit" to limit, + "offset" to offset, + "page" to page, + "per_page" to per_page, + ), + ) } - /** * ### Get an image representing the contents of a dashboard or look. * - * The returned thumbnail is an abstract representation of the contents of a dashbord or look and does not + * The returned thumbnail is an abstract representation of the contents of a dashboard or look and does not * reflect the actual data displayed in the respective visualizations. * * @param {String} type Either dashboard or look @@ -3428,19 +3394,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { theme: String? = null, format: String? = null, width: Long? = null, - height: Long? = null - ) : SDKResponse { + height: Long? = null, + ): SDKResponse { val path_type = encodeParam(type) val path_resource_id = encodeParam(resource_id) - return this.get("/content_thumbnail/${path_type}/${path_resource_id}", - mapOf("reload" to reload, - "theme" to theme, - "format" to format, - "width" to width, - "height" to height)) + return this.get( + "/content_thumbnail/${path_type}/${path_resource_id}", + mapOf( + "reload" to reload, + "theme" to theme, + "format" to format, + "width" to width, + "height" to height, + ), + ) } - /** * ### Validate All Content * @@ -3452,13 +3421,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /content_validation -> ContentValidation */ @JvmOverloads fun content_validation( - fields: String? = null - ) : SDKResponse { - return this.get("/content_validation", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/content_validation", + mapOf("fields" to fields), + ) } - /** * ### Search Content Views * @@ -3512,31 +3482,34 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, sorts: String? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get>("/content_view/search", - mapOf("view_count" to view_count, - "group_id" to group_id, - "look_id" to look_id, - "dashboard_id" to dashboard_id, - "content_metadata_id" to content_metadata_id, - "start_of_week_date" to start_of_week_date, - "all_time" to all_time, - "user_id" to user_id, - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get>( + "/content_view/search", + mapOf( + "view_count" to view_count, + "group_id" to group_id, + "look_id" to look_id, + "dashboard_id" to dashboard_id, + "content_metadata_id" to content_metadata_id, + "start_of_week_date" to start_of_week_date, + "all_time" to all_time, + "user_id" to user_id, + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + ), + ) } - /** * ### Get a vector image representing the contents of a dashboard or look. * * # DEPRECATED: Use [content_thumbnail()](#!/Content/content_thumbnail) * - * The returned thumbnail is an abstract representation of the contents of a dashbord or look and does not + * The returned thumbnail is an abstract representation of the contents of a dashboard or look and does not * reflect the actual data displayed in the respective visualizations. * * @param {String} type Either dashboard or look @@ -3546,22 +3519,24 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /vector_thumbnail/{type}/{resource_id} -> String */ @Deprecated(message = "Deprecated method") - @JvmOverloads fun vector_thumbnail( + @JvmOverloads + fun vector_thumbnail( type: String, resource_id: String, - reload: String? = null - ) : SDKResponse { + reload: String? = null, + ): SDKResponse { val path_type = encodeParam(type) val path_resource_id = encodeParam(resource_id) - return this.get("/vector_thumbnail/${path_type}/${path_resource_id}", - mapOf("reload" to reload)) + return this.get( + "/vector_thumbnail/${path_type}/${path_resource_id}", + mapOf("reload" to reload), + ) } //endregion Content: Manage Content //region Dashboard: Manage Dashboards - /** * ### Get information about all active dashboards. * @@ -3576,13 +3551,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /dashboards -> Array */ @JvmOverloads fun all_dashboards( - fields: String? = null - ) : SDKResponse { - return this.get>("/dashboards", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/dashboards", + mapOf("fields" to fields), + ) } - /** * ### Create a new dashboard * @@ -3604,12 +3580,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /dashboards -> Dashboard */ fun create_dashboard( - body: WriteDashboard - ) : SDKResponse { + body: WriteDashboard, + ): SDKResponse { return this.post("/dashboards", mapOf(), body) } - /** * ### Search Dashboards * @@ -3685,32 +3660,35 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { offset: Long? = null, sorts: String? = null, filter_or: Boolean? = null, - not_owned_by: Boolean? = null - ) : SDKResponse { - return this.get>("/dashboards/search", - mapOf("id" to id, - "slug" to slug, - "title" to title, - "description" to description, - "content_favorite_id" to content_favorite_id, - "folder_id" to folder_id, - "deleted" to deleted, - "user_id" to user_id, - "view_count" to view_count, - "content_metadata_id" to content_metadata_id, - "curate" to curate, - "last_viewed_at" to last_viewed_at, - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "not_owned_by" to not_owned_by)) + not_owned_by: Boolean? = null, + ): SDKResponse { + return this.get>( + "/dashboards/search", + mapOf( + "id" to id, + "slug" to slug, + "title" to title, + "description" to description, + "content_favorite_id" to content_favorite_id, + "folder_id" to folder_id, + "deleted" to deleted, + "user_id" to user_id, + "view_count" to view_count, + "content_metadata_id" to content_metadata_id, + "curate" to curate, + "last_viewed_at" to last_viewed_at, + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "not_owned_by" to not_owned_by, + ), + ) } - /** * ### Import a LookML dashboard to a space as a UDD * Creates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard @@ -3736,15 +3714,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { lookml_dashboard_id: String, space_id: String, body: WriteDashboard? = null, - raw_locale: Boolean? = null - ) : SDKResponse { + raw_locale: Boolean? = null, + ): SDKResponse { val path_lookml_dashboard_id = encodeParam(lookml_dashboard_id) val path_space_id = encodeParam(space_id) - return this.post("/dashboards/${path_lookml_dashboard_id}/import/${path_space_id}", - mapOf("raw_locale" to raw_locale), body) + return this.post( + "/dashboards/${path_lookml_dashboard_id}/import/${path_space_id}", + mapOf("raw_locale" to raw_locale), + body, + ) } - /** * ### Update all linked dashboards to match the specified LookML dashboard. * @@ -3765,14 +3745,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun sync_lookml_dashboard( lookml_dashboard_id: String, body: WriteDashboard, - raw_locale: Boolean? = null - ) : SDKResponse { + raw_locale: Boolean? = null, + ): SDKResponse { val path_lookml_dashboard_id = encodeParam(lookml_dashboard_id) - return this.patch>("/dashboards/${path_lookml_dashboard_id}/sync", - mapOf("raw_locale" to raw_locale), body) + return this.patch>( + "/dashboards/${path_lookml_dashboard_id}/sync", + mapOf("raw_locale" to raw_locale), + body, + ) } - /** * ### Get information about a dashboard * @@ -3789,21 +3771,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard( dashboard_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get("/dashboards/${path_dashboard_id}", - mapOf("fields" to fields)) + return this.get( + "/dashboards/${path_dashboard_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a dashboard * * You can use this function to change the string and integer properties of * a dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components * cannot be modified by this function - use the update functions for the respective - * nested object types (like [update_dashboard_filter()](#!/3.1/Dashboard/update_dashboard_filter) to change a filter) + * nested object types (like [update_dashboard_filter()](#!/Dashboard/update_dashboard_filter) to change a filter) * to modify nested objects referenced by a dashboard. * * If you receive a 422 error response when updating a dashboard, be sure to look at the @@ -3816,13 +3799,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_dashboard( dashboard_id: String, - body: WriteDashboard - ) : SDKResponse { + body: WriteDashboard, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) return this.patch("/dashboards/${path_dashboard_id}", mapOf(), body) } - /** * ### Delete the dashboard with the specified id * @@ -3837,15 +3819,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboards/{dashboard_id} -> String */ fun delete_dashboard( - dashboard_id: String - ) : SDKResponse { + dashboard_id: String, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) return this.delete("/dashboards/${path_dashboard_id}", mapOf()) } - /** - * ### Get Aggregate Table LookML for Each Query on a Dahboard + * ### Get Aggregate Table LookML for Each Query on a Dashboard * * Returns a JSON object that contains the dashboard id and Aggregate Table lookml * @@ -3854,13 +3835,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /dashboards/aggregate_table_lookml/{dashboard_id} -> DashboardAggregateTableLookml */ fun dashboard_aggregate_table_lookml( - dashboard_id: String - ) : SDKResponse { + dashboard_id: String, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) return this.get("/dashboards/aggregate_table_lookml/${path_dashboard_id}", mapOf()) } - /** * ### Get lookml of a UDD * @@ -3871,13 +3851,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /dashboards/lookml/{dashboard_id} -> DashboardLookml */ fun dashboard_lookml( - dashboard_id: String - ) : SDKResponse { + dashboard_id: String, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) return this.get("/dashboards/lookml/${path_dashboard_id}", mapOf()) } - /** * ### Move an existing dashboard * @@ -3893,14 +3872,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun move_dashboard( dashboard_id: String, - folder_id: String - ) : SDKResponse { + folder_id: String, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.patch("/dashboards/${path_dashboard_id}/move", - mapOf("folder_id" to folder_id)) + return this.patch( + "/dashboards/${path_dashboard_id}/move", + mapOf("folder_id" to folder_id), + ) } - /** * ### Creates a dashboard object based on LookML Dashboard YAML, and returns the details of the newly created dashboard. * @@ -3923,12 +3903,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /dashboards/lookml -> Dashboard */ fun import_dashboard_from_lookml( - body: WriteDashboardLookml - ) : SDKResponse { + body: WriteDashboardLookml, + ): SDKResponse { return this.post("/dashboards/lookml", mapOf(), body) } - /** * # DEPRECATED: Use [import_dashboard_from_lookml()](#!/Dashboard/import_dashboard_from_lookml) * @@ -3937,12 +3916,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /dashboards/from_lookml -> Dashboard */ fun create_dashboard_from_lookml( - body: WriteDashboardLookml - ) : SDKResponse { + body: WriteDashboardLookml, + ): SDKResponse { return this.post("/dashboards/from_lookml", mapOf(), body) } - /** * ### Copy an existing dashboard * @@ -3961,14 +3939,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun copy_dashboard( dashboard_id: String, - folder_id: String? = null - ) : SDKResponse { + folder_id: String? = null, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.post("/dashboards/${path_dashboard_id}/copy", - mapOf("folder_id" to folder_id)) + return this.post( + "/dashboards/${path_dashboard_id}/copy", + mapOf("folder_id" to folder_id), + ) } - /** * ### Search Dashboard Elements * @@ -4012,19 +3991,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { deleted: Boolean? = null, fields: String? = null, filter_or: Boolean? = null, - sorts: String? = null - ) : SDKResponse { - return this.get>("/dashboard_elements/search", - mapOf("dashboard_id" to dashboard_id, - "look_id" to look_id, - "title" to title, - "deleted" to deleted, - "fields" to fields, - "filter_or" to filter_or, - "sorts" to sorts)) + sorts: String? = null, + ): SDKResponse { + return this.get>( + "/dashboard_elements/search", + mapOf( + "dashboard_id" to dashboard_id, + "look_id" to look_id, + "title" to title, + "deleted" to deleted, + "fields" to fields, + "filter_or" to filter_or, + "sorts" to sorts, + ), + ) } - /** * ### Get information about the dashboard element with a specific id. * @@ -4035,14 +4017,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_element( dashboard_element_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) - return this.get("/dashboard_elements/${path_dashboard_element_id}", - mapOf("fields" to fields)) + return this.get( + "/dashboard_elements/${path_dashboard_element_id}", + mapOf("fields" to fields), + ) } - /** * ### Update the dashboard element with a specific id. * @@ -4055,14 +4038,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_element( dashboard_element_id: String, body: WriteDashboardElement, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) - return this.patch("/dashboard_elements/${path_dashboard_element_id}", - mapOf("fields" to fields), body) + return this.patch( + "/dashboard_elements/${path_dashboard_element_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a dashboard element with a specific id. * @@ -4071,13 +4056,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboard_elements/{dashboard_element_id} -> String */ fun delete_dashboard_element( - dashboard_element_id: String - ) : SDKResponse { + dashboard_element_id: String, + ): SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) return this.delete("/dashboard_elements/${path_dashboard_element_id}", mapOf()) } - /** * ### Get information about all the dashboard elements on a dashboard with a specific id. * @@ -4088,14 +4072,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_dashboard_elements( dashboard_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get>("/dashboards/${path_dashboard_id}/dashboard_elements", - mapOf("fields" to fields)) + return this.get>( + "/dashboards/${path_dashboard_id}/dashboard_elements", + mapOf("fields" to fields), + ) } - /** * ### Create a dashboard element on the dashboard with a specific id. * @@ -4108,14 +4093,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_dashboard_element( body: WriteDashboardElement, fields: String? = null, - apply_filters: Boolean? = null - ) : SDKResponse { - return this.post("/dashboard_elements", - mapOf("fields" to fields, - "apply_filters" to apply_filters), body) + apply_filters: Boolean? = null, + ): SDKResponse { + return this.post( + "/dashboard_elements", + mapOf( + "fields" to fields, + "apply_filters" to apply_filters, + ), + body, + ) } - /** * ### Get information about the dashboard filters with a specific id. * @@ -4126,14 +4115,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_filter( dashboard_filter_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_filter_id = encodeParam(dashboard_filter_id) - return this.get("/dashboard_filters/${path_dashboard_filter_id}", - mapOf("fields" to fields)) + return this.get( + "/dashboard_filters/${path_dashboard_filter_id}", + mapOf("fields" to fields), + ) } - /** * ### Update the dashboard filter with a specific id. * @@ -4146,14 +4136,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_filter( dashboard_filter_id: String, body: WriteDashboardFilter, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_filter_id = encodeParam(dashboard_filter_id) - return this.patch("/dashboard_filters/${path_dashboard_filter_id}", - mapOf("fields" to fields), body) + return this.patch( + "/dashboard_filters/${path_dashboard_filter_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a dashboard filter with a specific id. * @@ -4162,13 +4154,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboard_filters/{dashboard_filter_id} -> String */ fun delete_dashboard_filter( - dashboard_filter_id: String - ) : SDKResponse { + dashboard_filter_id: String, + ): SDKResponse { val path_dashboard_filter_id = encodeParam(dashboard_filter_id) return this.delete("/dashboard_filters/${path_dashboard_filter_id}", mapOf()) } - /** * ### Get information about all the dashboard filters on a dashboard with a specific id. * @@ -4179,14 +4170,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_dashboard_filters( dashboard_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get>("/dashboards/${path_dashboard_id}/dashboard_filters", - mapOf("fields" to fields)) + return this.get>( + "/dashboards/${path_dashboard_id}/dashboard_filters", + mapOf("fields" to fields), + ) } - /** * ### Create a dashboard filter on the dashboard with a specific id. * @@ -4197,13 +4189,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_dashboard_filter( body: WriteCreateDashboardFilter, - fields: String? = null - ) : SDKResponse { - return this.post("/dashboard_filters", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/dashboard_filters", + mapOf("fields" to fields), + body, + ) } - /** * ### Get information about the dashboard elements with a specific id. * @@ -4214,14 +4208,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_layout_component( dashboard_layout_component_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_layout_component_id = encodeParam(dashboard_layout_component_id) - return this.get("/dashboard_layout_components/${path_dashboard_layout_component_id}", - mapOf("fields" to fields)) + return this.get( + "/dashboard_layout_components/${path_dashboard_layout_component_id}", + mapOf("fields" to fields), + ) } - /** * ### Update the dashboard element with a specific id. * @@ -4234,14 +4229,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_layout_component( dashboard_layout_component_id: String, body: WriteDashboardLayoutComponent, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_layout_component_id = encodeParam(dashboard_layout_component_id) - return this.patch("/dashboard_layout_components/${path_dashboard_layout_component_id}", - mapOf("fields" to fields), body) + return this.patch( + "/dashboard_layout_components/${path_dashboard_layout_component_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Get information about all the dashboard layout components for a dashboard layout with a specific id. * @@ -4252,14 +4249,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_layout_dashboard_layout_components( dashboard_layout_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) - return this.get>("/dashboard_layouts/${path_dashboard_layout_id}/dashboard_layout_components", - mapOf("fields" to fields)) + return this.get>( + "/dashboard_layouts/${path_dashboard_layout_id}/dashboard_layout_components", + mapOf("fields" to fields), + ) } - /** * ### Get information about the dashboard layouts with a specific id. * @@ -4270,14 +4268,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_layout( dashboard_layout_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) - return this.get("/dashboard_layouts/${path_dashboard_layout_id}", - mapOf("fields" to fields)) + return this.get( + "/dashboard_layouts/${path_dashboard_layout_id}", + mapOf("fields" to fields), + ) } - /** * ### Update the dashboard layout with a specific id. * @@ -4290,14 +4289,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_layout( dashboard_layout_id: String, body: WriteDashboardLayout, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) - return this.patch("/dashboard_layouts/${path_dashboard_layout_id}", - mapOf("fields" to fields), body) + return this.patch( + "/dashboard_layouts/${path_dashboard_layout_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a dashboard layout with a specific id. * @@ -4306,13 +4307,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboard_layouts/{dashboard_layout_id} -> String */ fun delete_dashboard_layout( - dashboard_layout_id: String - ) : SDKResponse { + dashboard_layout_id: String, + ): SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) return this.delete("/dashboard_layouts/${path_dashboard_layout_id}", mapOf()) } - /** * ### Get information about all the dashboard elements on a dashboard with a specific id. * @@ -4323,14 +4323,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_dashboard_layouts( dashboard_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get>("/dashboards/${path_dashboard_id}/dashboard_layouts", - mapOf("fields" to fields)) + return this.get>( + "/dashboards/${path_dashboard_id}/dashboard_layouts", + mapOf("fields" to fields), + ) } - /** * ### Create a dashboard layout on the dashboard with a specific id. * @@ -4341,17 +4342,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_dashboard_layout( body: WriteDashboardLayout, - fields: String? = null - ) : SDKResponse { - return this.post("/dashboard_layouts", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/dashboard_layouts", + mapOf("fields" to fields), + body, + ) } //endregion Dashboard: Manage Dashboards //region DataAction: Run Data Actions - /** * Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action. * @@ -4360,12 +4363,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /data_actions -> DataActionResponse */ fun perform_data_action( - body: DataActionRequest - ) : SDKResponse { + body: DataActionRequest, + ): SDKResponse { return this.post("/data_actions", mapOf(), body) } - /** * For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user. * @@ -4374,8 +4376,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /data_actions/form -> DataActionForm */ fun fetch_remote_data_action_form( - body: Map - ) : SDKResponse { + body: Map, + ): SDKResponse { return this.post("/data_actions/form", mapOf(), body) } @@ -4383,19 +4385,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Datagroup: Manage Datagroups - /** * ### Get information about all datagroups. * * GET /datagroups -> Array */ - fun all_datagroups( - - ) : SDKResponse { + fun all_datagroups(): SDKResponse { return this.get>("/datagroups", mapOf()) } - /** * ### Get information about a datagroup. * @@ -4404,13 +4402,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /datagroups/{datagroup_id} -> Datagroup */ fun datagroup( - datagroup_id: String - ) : SDKResponse { + datagroup_id: String, + ): SDKResponse { val path_datagroup_id = encodeParam(datagroup_id) return this.get("/datagroups/${path_datagroup_id}", mapOf()) } - /** * ### Update a datagroup using the specified params. * @@ -4421,8 +4418,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_datagroup( datagroup_id: String, - body: WriteDatagroup - ) : SDKResponse { + body: WriteDatagroup, + ): SDKResponse { val path_datagroup_id = encodeParam(datagroup_id) return this.patch("/datagroups/${path_datagroup_id}", mapOf(), body) } @@ -4431,7 +4428,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region DerivedTable: View Derived Table graphs - /** * ### Discover information about derived tables * @@ -4444,15 +4440,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun graph_derived_tables_for_model( model: String, format: String? = null, - color: String? = null - ) : SDKResponse { + color: String? = null, + ): SDKResponse { val path_model = encodeParam(model) - return this.get("/derived_table/graph/model/${path_model}", - mapOf("format" to format, - "color" to color)) + return this.get( + "/derived_table/graph/model/${path_model}", + mapOf( + "format" to format, + "color" to color, + ), + ) } - /** * ### Get the subgraph representing this derived table and its dependencies. * @@ -4465,15 +4464,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun graph_derived_tables_for_view( view: String, models: String? = null, - workspace: String? = null - ) : SDKResponse { + workspace: String? = null, + ): SDKResponse { val path_view = encodeParam(view) - return this.get("/derived_table/graph/view/${path_view}", - mapOf("models" to models, - "workspace" to workspace)) + return this.get( + "/derived_table/graph/view/${path_view}", + mapOf( + "models" to models, + "workspace" to workspace, + ), + ) } - /** * Enqueue materialization for a PDT with the given model name and view name * @@ -4492,18 +4494,21 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { force_rebuild: String? = null, force_full_incremental: String? = null, workspace: String? = null, - source: String? = null - ) : SDKResponse { + source: String? = null, + ): SDKResponse { val path_model_name = encodeParam(model_name) val path_view_name = encodeParam(view_name) - return this.get("/derived_table/${path_model_name}/${path_view_name}/start", - mapOf("force_rebuild" to force_rebuild, - "force_full_incremental" to force_full_incremental, - "workspace" to workspace, - "source" to source)) + return this.get( + "/derived_table/${path_model_name}/${path_view_name}/start", + mapOf( + "force_rebuild" to force_rebuild, + "force_full_incremental" to force_full_incremental, + "workspace" to workspace, + "source" to source, + ), + ) } - /** * Check status of PDT materialization * @@ -4512,13 +4517,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /derived_table/{materialization_id}/status -> MaterializePDT */ fun check_pdt_build( - materialization_id: String - ) : SDKResponse { + materialization_id: String, + ): SDKResponse { val path_materialization_id = encodeParam(materialization_id) return this.get("/derived_table/${path_materialization_id}/status", mapOf()) } - /** * Stop a PDT materialization * @@ -4529,18 +4533,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun stop_pdt_build( materialization_id: String, - source: String? = null - ) : SDKResponse { + source: String? = null, + ): SDKResponse { val path_materialization_id = encodeParam(materialization_id) - return this.get("/derived_table/${path_materialization_id}/stop", - mapOf("source" to source)) + return this.get( + "/derived_table/${path_materialization_id}/stop", + mapOf("source" to source), + ) } //endregion DerivedTable: View Derived Table graphs //region Folder: Manage Folders - /** * Search for folders by creator id, parent id, name, etc * @@ -4573,25 +4578,28 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { creator_id: String? = null, filter_or: Boolean? = null, is_shared_root: Boolean? = null, - is_users_root: Boolean? = null - ) : SDKResponse { - return this.get>("/folders/search", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "name" to name, - "id" to id, - "parent_id" to parent_id, - "creator_id" to creator_id, - "filter_or" to filter_or, - "is_shared_root" to is_shared_root, - "is_users_root" to is_users_root)) + is_users_root: Boolean? = null, + ): SDKResponse { + return this.get>( + "/folders/search", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "name" to name, + "id" to id, + "parent_id" to parent_id, + "creator_id" to creator_id, + "filter_or" to filter_or, + "is_shared_root" to is_shared_root, + "is_users_root" to is_users_root, + ), + ) } - /** * ### Get information about the folder with a specific id. * @@ -4602,14 +4610,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder( folder_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get("/folders/${path_folder_id}", - mapOf("fields" to fields)) + return this.get( + "/folders/${path_folder_id}", + mapOf("fields" to fields), + ) } - /** * ### Update the folder with a specific id. * @@ -4620,13 +4629,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_folder( folder_id: String, - body: UpdateFolder - ) : SDKResponse { + body: UpdateFolder, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) return this.patch("/folders/${path_folder_id}", mapOf(), body) } - /** * ### Delete the folder with a specific id including any children folders. * **DANGER** this will delete all looks and dashboards in the folder. @@ -4636,13 +4644,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /folders/{folder_id} -> String */ fun delete_folder( - folder_id: String - ) : SDKResponse { + folder_id: String, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) return this.delete("/folders/${path_folder_id}", mapOf()) } - /** * ### Get information about all folders. * @@ -4653,13 +4660,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /folders -> Array */ @JvmOverloads fun all_folders( - fields: String? = null - ) : SDKResponse { - return this.get>("/folders", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/folders", + mapOf("fields" to fields), + ) } - /** * ### Create a folder with specified information. * @@ -4671,12 +4679,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /folders -> Folder */ fun create_folder( - body: CreateFolder - ) : SDKResponse { + body: CreateFolder, + ): SDKResponse { return this.post("/folders", mapOf(), body) } - /** * ### Get the children of a folder. * @@ -4697,19 +4704,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { per_page: Long? = null, limit: Long? = null, offset: Long? = null, - sorts: String? = null - ) : SDKResponse { + sorts: String? = null, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get>("/folders/${path_folder_id}/children", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts)) + return this.get>( + "/folders/${path_folder_id}/children", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + ), + ) } - /** * ### Search the children of a folder * @@ -4724,16 +4734,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { folder_id: String, fields: String? = null, sorts: String? = null, - name: String? = null - ) : SDKResponse { + name: String? = null, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get>("/folders/${path_folder_id}/children/search", - mapOf("fields" to fields, - "sorts" to sorts, - "name" to name)) + return this.get>( + "/folders/${path_folder_id}/children/search", + mapOf( + "fields" to fields, + "sorts" to sorts, + "name" to name, + ), + ) } - /** * ### Get the parent of a folder * @@ -4744,14 +4757,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_parent( folder_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get("/folders/${path_folder_id}/parent", - mapOf("fields" to fields)) + return this.get( + "/folders/${path_folder_id}/parent", + mapOf("fields" to fields), + ) } - /** * ### Get the ancestors of a folder * @@ -4762,14 +4776,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_ancestors( folder_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get>("/folders/${path_folder_id}/ancestors", - mapOf("fields" to fields)) + return this.get>( + "/folders/${path_folder_id}/ancestors", + mapOf("fields" to fields), + ) } - /** * ### Get all looks in a folder. * In API 4.0+, all looks in a folder will be returned, excluding looks in the trash. @@ -4781,14 +4796,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_looks( folder_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get>("/folders/${path_folder_id}/looks", - mapOf("fields" to fields)) + return this.get>( + "/folders/${path_folder_id}/looks", + mapOf("fields" to fields), + ) } - /** * ### Get the dashboards in a folder * @@ -4799,18 +4815,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_dashboards( folder_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get>("/folders/${path_folder_id}/dashboards", - mapOf("fields" to fields)) + return this.get>( + "/folders/${path_folder_id}/dashboards", + mapOf("fields" to fields), + ) } //endregion Folder: Manage Folders //region Group: Manage Groups - /** * ### Get information about all groups. * @@ -4835,21 +4852,24 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { sorts: String? = null, ids: DelimArray? = null, content_metadata_id: String? = null, - can_add_to_content_metadata: Boolean? = null - ) : SDKResponse { - return this.get>("/groups", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "ids" to ids, - "content_metadata_id" to content_metadata_id, - "can_add_to_content_metadata" to can_add_to_content_metadata)) + can_add_to_content_metadata: Boolean? = null, + ): SDKResponse { + return this.get>( + "/groups", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "ids" to ids, + "content_metadata_id" to content_metadata_id, + "can_add_to_content_metadata" to can_add_to_content_metadata, + ), + ) } - /** * ### Creates a new group (admin only). * @@ -4860,13 +4880,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_group( body: WriteGroup, - fields: String? = null - ) : SDKResponse { - return this.post("/groups", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/groups", + mapOf("fields" to fields), + body, + ) } - /** * ### Search groups * @@ -4916,22 +4938,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, external_group_id: String? = null, externally_managed: Boolean? = null, - externally_orphaned: Boolean? = null - ) : SDKResponse { - return this.get>("/groups/search", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "id" to id, - "name" to name, - "external_group_id" to external_group_id, - "externally_managed" to externally_managed, - "externally_orphaned" to externally_orphaned)) + externally_orphaned: Boolean? = null, + ): SDKResponse { + return this.get>( + "/groups/search", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "id" to id, + "name" to name, + "external_group_id" to external_group_id, + "externally_managed" to externally_managed, + "externally_orphaned" to externally_orphaned, + ), + ) } - /** * ### Search groups include roles * @@ -4981,22 +5006,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, external_group_id: String? = null, externally_managed: Boolean? = null, - externally_orphaned: Boolean? = null - ) : SDKResponse { - return this.get>("/groups/search/with_roles", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "id" to id, - "name" to name, - "external_group_id" to external_group_id, - "externally_managed" to externally_managed, - "externally_orphaned" to externally_orphaned)) + externally_orphaned: Boolean? = null, + ): SDKResponse { + return this.get>( + "/groups/search/with_roles", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "id" to id, + "name" to name, + "external_group_id" to external_group_id, + "externally_managed" to externally_managed, + "externally_orphaned" to externally_orphaned, + ), + ) } - /** * ### Search groups include hierarchy * @@ -5047,22 +5075,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, external_group_id: String? = null, externally_managed: Boolean? = null, - externally_orphaned: Boolean? = null - ) : SDKResponse { - return this.get>("/groups/search/with_hierarchy", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "id" to id, - "name" to name, - "external_group_id" to external_group_id, - "externally_managed" to externally_managed, - "externally_orphaned" to externally_orphaned)) + externally_orphaned: Boolean? = null, + ): SDKResponse { + return this.get>( + "/groups/search/with_hierarchy", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "id" to id, + "name" to name, + "external_group_id" to external_group_id, + "externally_managed" to externally_managed, + "externally_orphaned" to externally_orphaned, + ), + ) } - /** * ### Get information about a group. * @@ -5073,14 +5104,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun group( group_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_group_id = encodeParam(group_id) - return this.get("/groups/${path_group_id}", - mapOf("fields" to fields)) + return this.get( + "/groups/${path_group_id}", + mapOf("fields" to fields), + ) } - /** * ### Updates the a group (admin only). * @@ -5093,14 +5125,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_group( group_id: String, body: WriteGroup, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_group_id = encodeParam(group_id) - return this.patch("/groups/${path_group_id}", - mapOf("fields" to fields), body) + return this.patch( + "/groups/${path_group_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Deletes a group (admin only). * @@ -5109,13 +5143,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /groups/{group_id} -> String */ fun delete_group( - group_id: String - ) : SDKResponse { + group_id: String, + ): SDKResponse { val path_group_id = encodeParam(group_id) return this.delete("/groups/${path_group_id}", mapOf()) } - /** * ### Get information about all the groups in a group * @@ -5126,14 +5159,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_group_groups( group_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_group_id = encodeParam(group_id) - return this.get>("/groups/${path_group_id}/groups", - mapOf("fields" to fields)) + return this.get>( + "/groups/${path_group_id}/groups", + mapOf("fields" to fields), + ) } - /** * ### Adds a new group to a group. * @@ -5144,13 +5178,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun add_group_group( group_id: String, - body: GroupIdForGroupInclusion - ) : SDKResponse { + body: GroupIdForGroupInclusion, + ): SDKResponse { val path_group_id = encodeParam(group_id) return this.post("/groups/${path_group_id}/groups", mapOf(), body) } - /** * ### Get information about all the users directly included in a group. * @@ -5171,19 +5204,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { per_page: Long? = null, limit: Long? = null, offset: Long? = null, - sorts: String? = null - ) : SDKResponse { + sorts: String? = null, + ): SDKResponse { val path_group_id = encodeParam(group_id) - return this.get>("/groups/${path_group_id}/users", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts)) + return this.get>( + "/groups/${path_group_id}/users", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + ), + ) } - /** * ### Adds a new user to a group. * @@ -5194,13 +5230,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun add_group_user( group_id: String, - body: GroupIdForGroupUserInclusion - ) : SDKResponse { + body: GroupIdForGroupUserInclusion, + ): SDKResponse { val path_group_id = encodeParam(group_id) return this.post("/groups/${path_group_id}/users", mapOf(), body) } - /** * ### Removes a user from a group. * @@ -5211,14 +5246,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_group_user( group_id: String, - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_group_id = encodeParam(group_id) val path_user_id = encodeParam(user_id) return this.delete("/groups/${path_group_id}/users/${path_user_id}", mapOf()) } - /** * ### Removes a group from a group. * @@ -5229,14 +5263,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_group_from_group( group_id: String, - deleting_group_id: String - ) : SDKResponse { + deleting_group_id: String, + ): SDKResponse { val path_group_id = encodeParam(group_id) val path_deleting_group_id = encodeParam(deleting_group_id) return this.delete("/groups/${path_group_id}/groups/${path_deleting_group_id}", mapOf()) } - /** * ### Set the value of a user attribute for a group. * @@ -5251,14 +5284,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { fun update_user_attribute_group_value( group_id: String, user_attribute_id: String, - body: UserAttributeGroupValue - ) : SDKResponse { + body: UserAttributeGroupValue, + ): SDKResponse { val path_group_id = encodeParam(group_id) val path_user_attribute_id = encodeParam(user_attribute_id) return this.patch("/groups/${path_group_id}/attribute_values/${path_user_attribute_id}", mapOf(), body) } - /** * ### Remove a user attribute value from a group. * @@ -5269,8 +5301,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_attribute_group_value( group_id: String, - user_attribute_id: String - ) : SDKResponse { + user_attribute_id: String, + ): SDKResponse { val path_group_id = encodeParam(group_id) val path_user_attribute_id = encodeParam(user_attribute_id) return this.delete("/groups/${path_group_id}/attribute_values/${path_user_attribute_id}", mapOf()) @@ -5280,7 +5312,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Homepage: Manage Homepage - /** * ### Get information about the primary homepage's sections. * @@ -5289,17 +5320,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /primary_homepage_sections -> Array */ @JvmOverloads fun all_primary_homepage_sections( - fields: String? = null - ) : SDKResponse { - return this.get>("/primary_homepage_sections", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/primary_homepage_sections", + mapOf("fields" to fields), + ) } //endregion Homepage: Manage Homepage //region Integration: Manage Integrations - /** * ### Get information about all Integration Hubs. * @@ -5308,13 +5340,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /integration_hubs -> Array */ @JvmOverloads fun all_integration_hubs( - fields: String? = null - ) : SDKResponse { - return this.get>("/integration_hubs", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/integration_hubs", + mapOf("fields" to fields), + ) } - /** * ### Create a new Integration Hub. * @@ -5327,13 +5360,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_integration_hub( body: WriteIntegrationHub, - fields: String? = null - ) : SDKResponse { - return this.post("/integration_hubs", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/integration_hubs", + mapOf("fields" to fields), + body, + ) } - /** * ### Get information about a Integration Hub. * @@ -5344,14 +5379,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun integration_hub( integration_hub_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) - return this.get("/integration_hubs/${path_integration_hub_id}", - mapOf("fields" to fields)) + return this.get( + "/integration_hubs/${path_integration_hub_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a Integration Hub definition. * @@ -5366,14 +5402,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_integration_hub( integration_hub_id: String, body: WriteIntegrationHub, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) - return this.patch("/integration_hubs/${path_integration_hub_id}", - mapOf("fields" to fields), body) + return this.patch( + "/integration_hubs/${path_integration_hub_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a Integration Hub. * @@ -5382,13 +5420,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /integration_hubs/{integration_hub_id} -> String */ fun delete_integration_hub( - integration_hub_id: String - ) : SDKResponse { + integration_hub_id: String, + ): SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) return this.delete("/integration_hubs/${path_integration_hub_id}", mapOf()) } - /** * Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false. * @@ -5397,13 +5434,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /integration_hubs/{integration_hub_id}/accept_legal_agreement -> IntegrationHub */ fun accept_integration_hub_legal_agreement( - integration_hub_id: String - ) : SDKResponse { + integration_hub_id: String, + ): SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) return this.post("/integration_hubs/${path_integration_hub_id}/accept_legal_agreement", mapOf()) } - /** * ### Get information about all Integrations. * @@ -5414,14 +5450,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_integrations( fields: String? = null, - integration_hub_id: String? = null - ) : SDKResponse { - return this.get>("/integrations", - mapOf("fields" to fields, - "integration_hub_id" to integration_hub_id)) + integration_hub_id: String? = null, + ): SDKResponse { + return this.get>( + "/integrations", + mapOf( + "fields" to fields, + "integration_hub_id" to integration_hub_id, + ), + ) } - /** * ### Get information about a Integration. * @@ -5432,14 +5471,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun integration( integration_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_integration_id = encodeParam(integration_id) - return this.get("/integrations/${path_integration_id}", - mapOf("fields" to fields)) + return this.get( + "/integrations/${path_integration_id}", + mapOf("fields" to fields), + ) } - /** * ### Update parameters on a Integration. * @@ -5452,14 +5492,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_integration( integration_id: String, body: WriteIntegration, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_integration_id = encodeParam(integration_id) - return this.patch("/integrations/${path_integration_id}", - mapOf("fields" to fields), body) + return this.patch( + "/integrations/${path_integration_id}", + mapOf("fields" to fields), + body, + ) } - /** * Returns the Integration form for presentation to the user. * @@ -5470,13 +5512,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun fetch_integration_form( integration_id: String, - body: Map? = null - ) : SDKResponse { + body: Map? = null, + ): SDKResponse { val path_integration_id = encodeParam(integration_id) return this.post("/integrations/${path_integration_id}/form", mapOf(), body) } - /** * Tests the integration to make sure all the settings are working. * @@ -5485,8 +5526,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /integrations/{integration_id}/test -> IntegrationTestResult */ fun test_integration( - integration_id: String - ) : SDKResponse { + integration_id: String, + ): SDKResponse { val path_integration_id = encodeParam(integration_id) return this.post("/integrations/${path_integration_id}/test", mapOf()) } @@ -5495,7 +5536,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Look: Run and Manage Looks - /** * ### Get information about all active Looks * @@ -5510,13 +5550,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /looks -> Array */ @JvmOverloads fun all_looks( - fields: String? = null - ) : SDKResponse { - return this.get>("/looks", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/looks", + mapOf("fields" to fields), + ) } - /** * ### Create a Look * @@ -5533,13 +5574,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_look( body: WriteLookWithQuery, - fields: String? = null - ) : SDKResponse { - return this.post("/looks", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/looks", + mapOf("fields" to fields), + body, + ) } - /** * ### Search Looks * @@ -5608,30 +5651,33 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, sorts: String? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get>("/looks/search", - mapOf("id" to id, - "title" to title, - "description" to description, - "content_favorite_id" to content_favorite_id, - "folder_id" to folder_id, - "user_id" to user_id, - "view_count" to view_count, - "deleted" to deleted, - "query_id" to query_id, - "curate" to curate, - "last_viewed_at" to last_viewed_at, - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get>( + "/looks/search", + mapOf( + "id" to id, + "title" to title, + "description" to description, + "content_favorite_id" to content_favorite_id, + "folder_id" to folder_id, + "user_id" to user_id, + "view_count" to view_count, + "deleted" to deleted, + "query_id" to query_id, + "curate" to curate, + "last_viewed_at" to last_viewed_at, + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + ), + ) } - /** * ### Get a Look. * @@ -5644,14 +5690,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun look( look_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_look_id = encodeParam(look_id) - return this.get("/looks/${path_look_id}", - mapOf("fields" to fields)) + return this.get( + "/looks/${path_look_id}", + mapOf("fields" to fields), + ) } - /** * ### Modify a Look * @@ -5683,14 +5730,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_look( look_id: String, body: WriteLookWithQuery, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_look_id = encodeParam(look_id) - return this.patch("/looks/${path_look_id}", - mapOf("fields" to fields), body) + return this.patch( + "/looks/${path_look_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Permanently Delete a Look * @@ -5705,13 +5754,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /looks/{look_id} -> String */ fun delete_look( - look_id: String - ) : SDKResponse { + look_id: String, + ): SDKResponse { val path_look_id = encodeParam(look_id) return this.delete("/looks/${path_look_id}", mapOf()) } - /** * ### Run a Look * @@ -5722,7 +5770,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * | result_format | Description * | :-----------: | :--- | * | json | Plain json - * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query + * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema * | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query * | csv | Comma separated values with a header * | txt | Tab separated values with a header @@ -5766,26 +5814,29 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { cache_only: Boolean? = null, path_prefix: String? = null, rebuild_pdts: Boolean? = null, - server_table_calcs: Boolean? = null - ) : SDKResponse { + server_table_calcs: Boolean? = null, + ): SDKResponse { val path_look_id = encodeParam(look_id) val path_result_format = encodeParam(result_format) - return this.get("/looks/${path_look_id}/run/${path_result_format}", - mapOf("limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "image_width" to image_width, - "image_height" to image_height, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs)) + return this.get( + "/looks/${path_look_id}/run/${path_result_format}", + mapOf( + "limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "image_width" to image_width, + "image_height" to image_height, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs, + ), + ) } - /** * ### Copy an existing look * @@ -5802,14 +5853,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun copy_look( look_id: String, - folder_id: String? = null - ) : SDKResponse { + folder_id: String? = null, + ): SDKResponse { val path_look_id = encodeParam(look_id) - return this.post("/looks/${path_look_id}/copy", - mapOf("folder_id" to folder_id)) + return this.post( + "/looks/${path_look_id}/copy", + mapOf("folder_id" to folder_id), + ) } - /** * ### Move an existing look * @@ -5825,18 +5877,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun move_look( look_id: String, - folder_id: String - ) : SDKResponse { + folder_id: String, + ): SDKResponse { val path_look_id = encodeParam(look_id) - return this.patch("/looks/${path_look_id}/move", - mapOf("folder_id" to folder_id)) + return this.patch( + "/looks/${path_look_id}/move", + mapOf("folder_id" to folder_id), + ) } //endregion Look: Run and Manage Looks //region LookmlModel: Manage LookML Models - /** * ### Get information about all lookml models. * @@ -5849,15 +5902,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun all_lookml_models( fields: String? = null, limit: Long? = null, - offset: Long? = null - ) : SDKResponse { - return this.get>("/lookml_models", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset)) + offset: Long? = null, + ): SDKResponse { + return this.get>( + "/lookml_models", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + ), + ) } - /** * ### Create a lookml model using the specified configuration. * @@ -5866,12 +5922,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /lookml_models -> LookmlModel */ fun create_lookml_model( - body: WriteLookmlModel - ) : SDKResponse { + body: WriteLookmlModel, + ): SDKResponse { return this.post("/lookml_models", mapOf(), body) } - /** * ### Get information about a lookml model. * @@ -5882,14 +5937,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun lookml_model( lookml_model_name: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) - return this.get("/lookml_models/${path_lookml_model_name}", - mapOf("fields" to fields)) + return this.get( + "/lookml_models/${path_lookml_model_name}", + mapOf("fields" to fields), + ) } - /** * ### Update a lookml model using the specified configuration. * @@ -5900,13 +5956,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_lookml_model( lookml_model_name: String, - body: WriteLookmlModel - ) : SDKResponse { + body: WriteLookmlModel, + ): SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) return this.patch("/lookml_models/${path_lookml_model_name}", mapOf(), body) } - /** * ### Delete a lookml model. * @@ -5915,38 +5970,43 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /lookml_models/{lookml_model_name} -> String */ fun delete_lookml_model( - lookml_model_name: String - ) : SDKResponse { + lookml_model_name: String, + ): SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) return this.delete("/lookml_models/${path_lookml_model_name}", mapOf()) } - /** * ### Get information about a lookml model explore. * * @param {String} lookml_model_name Name of lookml model. * @param {String} explore_name Name of explore. * @param {String} fields Requested fields. + * @param {Boolean} add_drills_metadata Whether response should include drill field metadata. * * GET /lookml_models/{lookml_model_name}/explores/{explore_name} -> LookmlModelExplore */ @JvmOverloads fun lookml_model_explore( lookml_model_name: String, explore_name: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + add_drills_metadata: Boolean? = null, + ): SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) val path_explore_name = encodeParam(explore_name) - return this.get("/lookml_models/${path_lookml_model_name}/explores/${path_explore_name}", - mapOf("fields" to fields)) + return this.get( + "/lookml_models/${path_lookml_model_name}/explores/${path_explore_name}", + mapOf( + "fields" to fields, + "add_drills_metadata" to add_drills_metadata, + ), + ) } //endregion LookmlModel: Manage LookML Models //region Metadata: Connection Metadata Features - /** * ### Field name suggestions for a model and view * @@ -5981,17 +6041,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { view_name: String, field_name: String, term: String? = null, - filters: Any? = null - ) : SDKResponse { + filters: Any? = null, + ): SDKResponse { val path_model_name = encodeParam(model_name) val path_view_name = encodeParam(view_name) val path_field_name = encodeParam(field_name) - return this.get("/models/${path_model_name}/views/${path_view_name}/fields/${path_field_name}/suggestions", - mapOf("term" to term, - "filters" to filters)) + return this.get( + "/models/${path_model_name}/views/${path_view_name}/fields/${path_field_name}/suggestions", + mapOf( + "term" to term, + "filters" to filters, + ), + ) } - /** * ### Get a single model * @@ -6000,13 +6063,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /models/{model_name} -> Model */ fun get_model( - model_name: String - ) : SDKResponse { + model_name: String, + ): SDKResponse { val path_model_name = encodeParam(model_name) return this.get("/models/${path_model_name}", mapOf()) } - /** * ### List databases available to this connection * @@ -6023,13 +6085,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /connections/{connection_name}/databases -> Array */ fun connection_databases( - connection_name: String - ) : SDKResponse { + connection_name: String, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) return this.get>("/connections/${path_connection_name}/databases", mapOf()) } - /** * ### Retrieve metadata features for this connection * @@ -6042,14 +6103,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun connection_features( connection_name: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get("/connections/${path_connection_name}/features", - mapOf("fields" to fields)) + return this.get( + "/connections/${path_connection_name}/features", + mapOf("fields" to fields), + ) } - /** * ### Get the list of schemas and tables for a connection * @@ -6064,16 +6126,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { connection_name: String, database: String? = null, cache: Boolean? = null, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get>("/connections/${path_connection_name}/schemas", - mapOf("database" to database, - "cache" to cache, - "fields" to fields)) + return this.get>( + "/connections/${path_connection_name}/schemas", + mapOf( + "database" to database, + "cache" to cache, + "fields" to fields, + ), + ) } - /** * ### Get the list of tables for a schema * @@ -6099,19 +6164,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { cache: Boolean? = null, fields: String? = null, table_filter: String? = null, - table_limit: Long? = null - ) : SDKResponse { + table_limit: Long? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get>("/connections/${path_connection_name}/tables", - mapOf("database" to database, - "schema_name" to schema_name, - "cache" to cache, - "fields" to fields, - "table_filter" to table_filter, - "table_limit" to table_limit)) + return this.get>( + "/connections/${path_connection_name}/tables", + mapOf( + "database" to database, + "schema_name" to schema_name, + "cache" to cache, + "fields" to fields, + "table_filter" to table_filter, + "table_limit" to table_limit, + ), + ) } - /** * ### Get the columns (and therefore also the tables) in a specific schema * @@ -6132,19 +6200,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { cache: Boolean? = null, table_limit: Long? = null, table_names: String? = null, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get>("/connections/${path_connection_name}/columns", - mapOf("database" to database, - "schema_name" to schema_name, - "cache" to cache, - "table_limit" to table_limit, - "table_names" to table_names, - "fields" to fields)) + return this.get>( + "/connections/${path_connection_name}/columns", + mapOf( + "database" to database, + "schema_name" to schema_name, + "cache" to cache, + "table_limit" to table_limit, + "table_names" to table_names, + "fields" to fields, + ), + ) } - /** * ### Search a connection for columns matching the specified name * @@ -6159,15 +6230,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun connection_search_columns( connection_name: String, column_name: String? = null, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get>("/connections/${path_connection_name}/search_columns", - mapOf("column_name" to column_name, - "fields" to fields)) + return this.get>( + "/connections/${path_connection_name}/search_columns", + mapOf( + "column_name" to column_name, + "fields" to fields, + ), + ) } - /** * ### Connection cost estimating * @@ -6184,18 +6258,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun connection_cost_estimate( connection_name: String, body: CreateCostEstimate, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.post("/connections/${path_connection_name}/cost_estimate", - mapOf("fields" to fields), body) + return this.post( + "/connections/${path_connection_name}/cost_estimate", + mapOf("fields" to fields), + body, + ) } //endregion Metadata: Connection Metadata Features //region Project: Manage Projects - /** * ### Generate Lockfile for All LookML Dependencies * @@ -6212,14 +6288,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun lock_all( project_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/manifest/lock_all", - mapOf("fields" to fields)) + return this.post( + "/projects/${path_project_id}/manifest/lock_all", + mapOf("fields" to fields), + ) } - /** * ### Get All Git Branches * @@ -6230,13 +6307,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/git_branches -> Array */ fun all_git_branches( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) return this.get>("/projects/${path_project_id}/git_branches", mapOf()) } - /** * ### Get the Current Git Branch * @@ -6247,13 +6323,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/git_branch -> GitBranch */ fun git_branch( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) return this.get("/projects/${path_project_id}/git_branch", mapOf()) } - /** * ### Checkout and/or reset --hard an existing Git Branch * @@ -6272,13 +6347,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_git_branch( project_id: String, - body: WriteGitBranch - ) : SDKResponse { + body: WriteGitBranch, + ): SDKResponse { val path_project_id = encodeParam(project_id) return this.put("/projects/${path_project_id}/git_branch", mapOf(), body) } - /** * ### Create and Checkout a Git Branch * @@ -6296,13 +6370,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun create_git_branch( project_id: String, - body: WriteGitBranch - ) : SDKResponse { + body: WriteGitBranch, + ): SDKResponse { val path_project_id = encodeParam(project_id) return this.post("/projects/${path_project_id}/git_branch", mapOf(), body) } - /** * ### Get the specified Git Branch * @@ -6315,14 +6388,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun find_git_branch( project_id: String, - branch_name: String - ) : SDKResponse { + branch_name: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) val path_branch_name = encodeParam(branch_name) return this.get("/projects/${path_project_id}/git_branch/${path_branch_name}", mapOf()) } - /** * ### Delete the specified Git Branch * @@ -6335,14 +6407,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_git_branch( project_id: String, - branch_name: String - ) : SDKResponse { + branch_name: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) val path_branch_name = encodeParam(branch_name) return this.delete("/projects/${path_project_id}/git_branch/${path_branch_name}", mapOf()) } - /** * ### Deploy a Remote Branch or Ref to Production * @@ -6363,15 +6434,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun deploy_ref_to_production( project_id: String, branch: String? = null, - ref: String? = null - ) : SDKResponse { + ref: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/deploy_ref_to_production", - mapOf("branch" to branch, - "ref" to ref)) + return this.post( + "/projects/${path_project_id}/deploy_ref_to_production", + mapOf( + "branch" to branch, + "ref" to ref, + ), + ) } - /** * ### Deploy LookML from this Development Mode Project to Production * @@ -6391,13 +6465,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/deploy_to_production -> String */ fun deploy_to_production( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) return this.post("/projects/${path_project_id}/deploy_to_production", mapOf()) } - /** * ### Reset a project to the revision of the project that is in production. * @@ -6408,13 +6481,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/reset_to_production -> String */ fun reset_project_to_production( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) return this.post("/projects/${path_project_id}/reset_to_production", mapOf()) } - /** * ### Reset a project development branch to the revision of the project that is on the remote. * @@ -6425,13 +6497,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/reset_to_remote -> String */ fun reset_project_to_remote( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) return this.post("/projects/${path_project_id}/reset_to_remote", mapOf()) } - /** * ### Get All Projects * @@ -6442,13 +6513,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /projects -> Array */ @JvmOverloads fun all_projects( - fields: String? = null - ) : SDKResponse { - return this.get>("/projects", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/projects", + mapOf("fields" to fields), + ) } - /** * ### Create A Project * @@ -6463,12 +6535,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /projects -> Project */ fun create_project( - body: WriteProject - ) : SDKResponse { + body: WriteProject, + ): SDKResponse { return this.post("/projects", mapOf(), body) } - /** * ### Get A Project * @@ -6481,14 +6552,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun project( project_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}", - mapOf("fields" to fields)) + return this.get( + "/projects/${path_project_id}", + mapOf("fields" to fields), + ) } - /** * ### Update Project Configuration * @@ -6522,14 +6594,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_project( project_id: String, body: WriteProject, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.patch("/projects/${path_project_id}", - mapOf("fields" to fields), body) + return this.patch( + "/projects/${path_project_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Get A Projects Manifest object * @@ -6540,13 +6614,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/manifest -> Manifest */ fun manifest( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) return this.get("/projects/${path_project_id}/manifest", mapOf()) } - /** * ### Git Deploy Key * @@ -6557,13 +6630,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/git/deploy_key -> String */ fun git_deploy_key( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) return this.get("/projects/${path_project_id}/git/deploy_key", mapOf()) } - /** * ### Create Git Deploy Key * @@ -6580,13 +6652,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/git/deploy_key -> String */ fun create_git_deploy_key( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) return this.post("/projects/${path_project_id}/git/deploy_key", mapOf()) } - /** * ### Get Cached Project Validation Results * @@ -6608,14 +6679,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun project_validation_results( project_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/validate", - mapOf("fields" to fields)) + return this.get( + "/projects/${path_project_id}/validate", + mapOf("fields" to fields), + ) } - /** * ### Validate Project * @@ -6634,14 +6706,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun validate_project( project_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/validate", - mapOf("fields" to fields)) + return this.post( + "/projects/${path_project_id}/validate", + mapOf("fields" to fields), + ) } - /** * ### Get Project Workspace * @@ -6654,14 +6727,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun project_workspace( project_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/current_workspace", - mapOf("fields" to fields)) + return this.get( + "/projects/${path_project_id}/current_workspace", + mapOf("fields" to fields), + ) } - /** * ### Get All Project Files * @@ -6674,14 +6748,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_project_files( project_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get>("/projects/${path_project_id}/files", - mapOf("fields" to fields)) + return this.get>( + "/projects/${path_project_id}/files", + mapOf("fields" to fields), + ) } - /** * ### Get Project File Info * @@ -6696,15 +6771,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun project_file( project_id: String, file_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/files/file", - mapOf("file_id" to file_id, - "fields" to fields)) + return this.get( + "/projects/${path_project_id}/files/file", + mapOf( + "file_id" to file_id, + "fields" to fields, + ), + ) } - /** * ### Get All Git Connection Tests * @@ -6724,14 +6802,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_git_connection_tests( project_id: String, - remote_url: String? = null - ) : SDKResponse { + remote_url: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get>("/projects/${path_project_id}/git_connection_tests", - mapOf("remote_url" to remote_url)) + return this.get>( + "/projects/${path_project_id}/git_connection_tests", + mapOf("remote_url" to remote_url), + ) } - /** * ### Run a git connection test * @@ -6752,16 +6831,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { project_id: String, test_id: String, remote_url: String? = null, - use_production: String? = null - ) : SDKResponse { + use_production: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) val path_test_id = encodeParam(test_id) - return this.get("/projects/${path_project_id}/git_connection_tests/${path_test_id}", - mapOf("remote_url" to remote_url, - "use_production" to use_production)) + return this.get( + "/projects/${path_project_id}/git_connection_tests/${path_test_id}", + mapOf( + "remote_url" to remote_url, + "use_production" to use_production, + ), + ) } - /** * ### Get All LookML Tests * @@ -6776,14 +6858,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_lookml_tests( project_id: String, - file_id: String? = null - ) : SDKResponse { + file_id: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get>("/projects/${path_project_id}/lookml_tests", - mapOf("file_id" to file_id)) + return this.get>( + "/projects/${path_project_id}/lookml_tests", + mapOf("file_id" to file_id), + ) } - /** * ### Run LookML Tests * @@ -6800,21 +6883,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { project_id: String, file_id: String? = null, test: String? = null, - model: String? = null - ) : SDKResponse { + model: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get>("/projects/${path_project_id}/lookml_tests/run", - mapOf("file_id" to file_id, - "test" to test, - "model" to model)) + return this.get>( + "/projects/${path_project_id}/lookml_tests/run", + mapOf( + "file_id" to file_id, + "test" to test, + "model" to model, + ), + ) } - /** * ### Creates a tag for the most recent commit, or a specific ref is a SHA is provided * - * This is an internal-only, undocumented route. - * * @param {String} project_id Project Id * @param {WriteProject} body * @param {String} commit_sha (Optional): Commit Sha to Tag @@ -6828,16 +6912,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { body: WriteProject, commit_sha: String? = null, tag_name: String? = null, - tag_message: String? = null - ) : SDKResponse { + tag_message: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/tag", - mapOf("commit_sha" to commit_sha, - "tag_name" to tag_name, - "tag_message" to tag_message), body) + return this.post( + "/projects/${path_project_id}/tag", + mapOf( + "commit_sha" to commit_sha, + "tag_name" to tag_name, + "tag_message" to tag_message, + ), + body, + ) } - /** * ### Configure Repository Credential for a remote dependency * @@ -6855,14 +6943,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { fun update_repository_credential( root_project_id: String, credential_id: String, - body: WriteRepositoryCredential - ) : SDKResponse { + body: WriteRepositoryCredential, + ): SDKResponse { val path_root_project_id = encodeParam(root_project_id) val path_credential_id = encodeParam(credential_id) return this.put("/projects/${path_root_project_id}/credential/${path_credential_id}", mapOf(), body) } - /** * ### Repository Credential for a remote dependency * @@ -6878,14 +6965,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_repository_credential( root_project_id: String, - credential_id: String - ) : SDKResponse { + credential_id: String, + ): SDKResponse { val path_root_project_id = encodeParam(root_project_id) val path_credential_id = encodeParam(credential_id) return this.delete("/projects/${path_root_project_id}/credential/${path_credential_id}", mapOf()) } - /** * ### Get all Repository Credentials for a project * @@ -6896,8 +6982,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{root_project_id}/credentials -> Array */ fun get_all_repository_credentials( - root_project_id: String - ) : SDKResponse { + root_project_id: String, + ): SDKResponse { val path_root_project_id = encodeParam(root_project_id) return this.get>("/projects/${path_root_project_id}/credentials", mapOf()) } @@ -6906,7 +6992,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Query: Run and Manage Queries - /** * ### Create an async query task * @@ -6926,8 +7011,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * @param {String} path_prefix Prefix to use for drill links (url encoded). * @param {Boolean} rebuild_pdts Rebuild PDTS used in query. * @param {Boolean} server_table_calcs Perform table calculations on query results - * @param {Long} image_width DEPRECATED. Render width for image formats. Note that this parameter is always ignored by this method. - * @param {Long} image_height DEPRECATED. Render height for image formats. Note that this parameter is always ignored by this method. * @param {String} fields Requested fields * * POST /query_tasks -> QueryTask @@ -6944,27 +7027,27 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { path_prefix: String? = null, rebuild_pdts: Boolean? = null, server_table_calcs: Boolean? = null, - image_width: Long? = null, - image_height: Long? = null, - fields: String? = null - ) : SDKResponse { - return this.post("/query_tasks", - mapOf("limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs, - "image_width" to image_width, - "image_height" to image_height, - "fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/query_tasks", + mapOf( + "limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs, + "fields" to fields, + ), + body, + ) } - /** * ### Fetch results of multiple async queries * @@ -6979,13 +7062,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /query_tasks/multi_results -> Map */ fun query_task_multi_results( - query_task_ids: DelimArray - ) : SDKResponse { - return this.get>("/query_tasks/multi_results", - mapOf("query_task_ids" to query_task_ids)) + query_task_ids: DelimArray, + ): SDKResponse { + return this.get>( + "/query_tasks/multi_results", + mapOf("query_task_ids" to query_task_ids), + ) } - /** * ### Get Query Task details * @@ -7002,14 +7086,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun query_task( query_task_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_query_task_id = encodeParam(query_task_id) - return this.get("/query_tasks/${path_query_task_id}", - mapOf("fields" to fields)) + return this.get( + "/query_tasks/${path_query_task_id}", + mapOf("fields" to fields), + ) } - /** * ### Get Async Query Results * @@ -7037,16 +7122,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * @param {String} query_task_id ID of the Query Task * - * GET /query_tasks/{query_task_id}/results -> String + * GET /query_tasks/{query_task_id}/results -> QueryTask */ fun query_task_results( - query_task_id: String - ) : SDKResponse { + query_task_id: String, + ): SDKResponse { val path_query_task_id = encodeParam(query_task_id) - return this.get("/query_tasks/${path_query_task_id}/results", mapOf()) + return this.get("/query_tasks/${path_query_task_id}/results", mapOf()) } - /** * ### Get a previously created query by id. * @@ -7073,14 +7157,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun query( query_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_query_id = encodeParam(query_id) - return this.get("/queries/${path_query_id}", - mapOf("fields" to fields)) + return this.get( + "/queries/${path_query_id}", + mapOf("fields" to fields), + ) } - /** * ### Get the query for a given query slug. * @@ -7107,14 +7192,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun query_for_slug( slug: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_slug = encodeParam(slug) - return this.get("/queries/slug/${path_slug}", - mapOf("fields" to fields)) + return this.get( + "/queries/slug/${path_slug}", + mapOf("fields" to fields), + ) } - /** * ### Create a query. * @@ -7132,13 +7218,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_query( body: WriteQuery, - fields: String? = null - ) : SDKResponse { - return this.post("/queries", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/queries", + mapOf("fields" to fields), + body, + ) } - /** * ### Run a saved query. * @@ -7152,7 +7240,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * | result_format | Description * | :-----------: | :--- | * | json | Plain json - * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query + * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema * | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query * | csv | Comma separated values with a header * | txt | Tab separated values with a header @@ -7198,27 +7286,30 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { path_prefix: String? = null, rebuild_pdts: Boolean? = null, server_table_calcs: Boolean? = null, - source: String? = null - ) : SDKResponse { + source: String? = null, + ): SDKResponse { val path_query_id = encodeParam(query_id) val path_result_format = encodeParam(result_format) - return this.get("/queries/${path_query_id}/run/${path_result_format}", - mapOf("limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "image_width" to image_width, - "image_height" to image_height, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs, - "source" to source)) + return this.get( + "/queries/${path_query_id}/run/${path_result_format}", + mapOf( + "limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "image_width" to image_width, + "image_height" to image_height, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs, + "source" to source, + ), + ) } - /** * ### Run the query that is specified inline in the posted body. * @@ -7261,7 +7352,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * | result_format | Description * | :-----------: | :--- | * | json | Plain json - * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query + * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema * | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query * | csv | Comma separated values with a header * | txt | Tab separated values with a header @@ -7305,25 +7396,29 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { cache_only: Boolean? = null, path_prefix: String? = null, rebuild_pdts: Boolean? = null, - server_table_calcs: Boolean? = null - ) : SDKResponse { + server_table_calcs: Boolean? = null, + ): SDKResponse { val path_result_format = encodeParam(result_format) - return this.post("/queries/run/${path_result_format}", - mapOf("limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "image_width" to image_width, - "image_height" to image_height, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs), body) + return this.post( + "/queries/run/${path_result_format}", + mapOf( + "limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "image_width" to image_width, + "image_height" to image_height, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs, + ), + body, + ) } - /** * ### Run an URL encoded query. * @@ -7368,7 +7463,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * | result_format | Description * | :-----------: | :--- | * | json | Plain json - * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query + * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema * | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query * | csv | Comma separated values with a header * | txt | Tab separated values with a header @@ -7390,15 +7485,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { fun run_url_encoded_query( model_name: String, view_name: String, - result_format: String - ) : SDKResponse { + result_format: String, + ): SDKResponse { val path_model_name = encodeParam(model_name) val path_view_name = encodeParam(view_name) val path_result_format = encodeParam(result_format) return this.get("/queries/models/${path_model_name}/views/${path_view_name}/run/${path_result_format}", mapOf()) } - /** * ### Get Merge Query * @@ -7411,14 +7505,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun merge_query( merge_query_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_merge_query_id = encodeParam(merge_query_id) - return this.get("/merge_queries/${path_merge_query_id}", - mapOf("fields" to fields)) + return this.get( + "/merge_queries/${path_merge_query_id}", + mapOf("fields" to fields), + ) } - /** * ### Create Merge Query * @@ -7445,25 +7540,24 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_merge_query( body: WriteMergeQuery? = null, - fields: String? = null - ) : SDKResponse { - return this.post("/merge_queries", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/merge_queries", + mapOf("fields" to fields), + body, + ) } - /** * Get information about all running queries. * * GET /running_queries -> Array */ - fun all_running_queries( - - ) : SDKResponse { + fun all_running_queries(): SDKResponse { return this.get>("/running_queries", mapOf()) } - /** * Kill a query with a specific query_task_id. * @@ -7472,13 +7566,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /running_queries/{query_task_id} -> String */ fun kill_query( - query_task_id: String - ) : SDKResponse { + query_task_id: String, + ): SDKResponse { val path_query_task_id = encodeParam(query_task_id) return this.delete("/running_queries/${path_query_task_id}", mapOf()) } - /** * ### Create a SQL Runner Query * @@ -7489,12 +7582,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /sql_queries -> SqlQuery */ fun create_sql_query( - body: SqlQueryCreate - ) : SDKResponse { + body: SqlQueryCreate, + ): SDKResponse { return this.post("/sql_queries", mapOf(), body) } - /** * Get a SQL Runner query. * @@ -7503,13 +7595,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /sql_queries/{slug} -> SqlQuery */ fun sql_query( - slug: String - ) : SDKResponse { + slug: String, + ): SDKResponse { val path_slug = encodeParam(slug) return this.get("/sql_queries/${path_slug}", mapOf()) } - /** * Execute a SQL Runner query in a given result_format. * @@ -7518,25 +7609,24 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * @param {String} download Defaults to false. If set to true, the HTTP response will have content-disposition and other headers set to make the HTTP response behave as a downloadable attachment instead of as inline content. * * POST /sql_queries/{slug}/run/{result_format} -> String - * - * **Note**: Binary content may be returned by this method. */ @JvmOverloads fun run_sql_query( slug: String, result_format: String, - download: String? = null - ) : SDKResponse { + download: String? = null, + ): SDKResponse { val path_slug = encodeParam(slug) val path_result_format = encodeParam(result_format) - return this.post("/sql_queries/${path_slug}/run/${path_result_format}", - mapOf("download" to download)) + return this.post( + "/sql_queries/${path_slug}/run/${path_result_format}", + mapOf("download" to download), + ) } //endregion Query: Run and Manage Queries //region RenderTask: Manage Render Tasks - /** * ### Create a new task to render a look to an image. * @@ -7557,17 +7647,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { result_format: String, width: Long, height: Long, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_look_id = encodeParam(look_id) val path_result_format = encodeParam(result_format) - return this.post("/render_tasks/looks/${path_look_id}/${path_result_format}", - mapOf("width" to width, - "height" to height, - "fields" to fields)) + return this.post( + "/render_tasks/looks/${path_look_id}/${path_result_format}", + mapOf( + "width" to width, + "height" to height, + "fields" to fields, + ), + ) } - /** * ### Create a new task to render an existing query to an image. * @@ -7588,17 +7681,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { result_format: String, width: Long, height: Long, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_query_id = encodeParam(query_id) val path_result_format = encodeParam(result_format) - return this.post("/render_tasks/queries/${path_query_id}/${path_result_format}", - mapOf("width" to width, - "height" to height, - "fields" to fields)) + return this.post( + "/render_tasks/queries/${path_query_id}/${path_result_format}", + mapOf( + "width" to width, + "height" to height, + "fields" to fields, + ), + ) } - /** * ### Create a new task to render a dashboard to a document or image. * @@ -7629,21 +7725,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { pdf_paper_size: String? = null, pdf_landscape: Boolean? = null, long_tables: Boolean? = null, - theme: String? = null - ) : SDKResponse { + theme: String? = null, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) val path_result_format = encodeParam(result_format) - return this.post("/render_tasks/dashboards/${path_dashboard_id}/${path_result_format}", - mapOf("width" to width, - "height" to height, - "fields" to fields, - "pdf_paper_size" to pdf_paper_size, - "pdf_landscape" to pdf_landscape, - "long_tables" to long_tables, - "theme" to theme), body) + return this.post( + "/render_tasks/dashboards/${path_dashboard_id}/${path_result_format}", + mapOf( + "width" to width, + "height" to height, + "fields" to fields, + "pdf_paper_size" to pdf_paper_size, + "pdf_landscape" to pdf_landscape, + "long_tables" to long_tables, + "theme" to theme, + ), + body, + ) } - /** * ### Get information about a render task. * @@ -7658,14 +7758,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun render_task( render_task_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_render_task_id = encodeParam(render_task_id) - return this.get("/render_tasks/${path_render_task_id}", - mapOf("fields" to fields)) + return this.get( + "/render_tasks/${path_render_task_id}", + mapOf("fields" to fields), + ) } - /** * ### Get the document or image produced by a completed render task. * @@ -7692,13 +7793,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * **Note**: Binary content is returned by this method. */ fun render_task_results( - render_task_id: String - ) : SDKResponse { + render_task_id: String, + ): SDKResponse { val path_render_task_id = encodeParam(render_task_id) return this.get("/render_tasks/${path_render_task_id}/results", mapOf()) } - /** * ### Create a new task to render a dashboard element to an image. * @@ -7719,21 +7819,24 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { result_format: String, width: Long, height: Long, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) val path_result_format = encodeParam(result_format) - return this.post("/render_tasks/dashboard_elements/${path_dashboard_element_id}/${path_result_format}", - mapOf("width" to width, - "height" to height, - "fields" to fields)) + return this.post( + "/render_tasks/dashboard_elements/${path_dashboard_element_id}/${path_result_format}", + mapOf( + "width" to width, + "height" to height, + "fields" to fields, + ), + ) } //endregion RenderTask: Manage Render Tasks //region Role: Manage Roles - /** * ### Search model sets * Returns all model set records that match the given search criteria. @@ -7779,21 +7882,24 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, all_access: Boolean? = null, built_in: Boolean? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get>("/model_sets/search", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "name" to name, - "all_access" to all_access, - "built_in" to built_in, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get>( + "/model_sets/search", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "name" to name, + "all_access" to all_access, + "built_in" to built_in, + "filter_or" to filter_or, + ), + ) } - /** * ### Get information about the model set with a specific id. * @@ -7804,14 +7910,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun model_set( model_set_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_model_set_id = encodeParam(model_set_id) - return this.get("/model_sets/${path_model_set_id}", - mapOf("fields" to fields)) + return this.get( + "/model_sets/${path_model_set_id}", + mapOf("fields" to fields), + ) } - /** * ### Update information about the model set with a specific id. * @@ -7822,13 +7929,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_model_set( model_set_id: String, - body: WriteModelSet - ) : SDKResponse { + body: WriteModelSet, + ): SDKResponse { val path_model_set_id = encodeParam(model_set_id) return this.patch("/model_sets/${path_model_set_id}", mapOf(), body) } - /** * ### Delete the model set with a specific id. * @@ -7837,13 +7943,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /model_sets/{model_set_id} -> String */ fun delete_model_set( - model_set_id: String - ) : SDKResponse { + model_set_id: String, + ): SDKResponse { val path_model_set_id = encodeParam(model_set_id) return this.delete("/model_sets/${path_model_set_id}", mapOf()) } - /** * ### Get information about all model sets. * @@ -7852,13 +7957,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /model_sets -> Array */ @JvmOverloads fun all_model_sets( - fields: String? = null - ) : SDKResponse { - return this.get>("/model_sets", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/model_sets", + mapOf("fields" to fields), + ) } - /** * ### Create a model set with the specified information. Model sets are used by Roles. * @@ -7867,24 +7973,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /model_sets -> ModelSet */ fun create_model_set( - body: WriteModelSet - ) : SDKResponse { + body: WriteModelSet, + ): SDKResponse { return this.post("/model_sets", mapOf(), body) } - /** * ### Get all supported permissions. * * GET /permissions -> Array */ - fun all_permissions( - - ) : SDKResponse { + fun all_permissions(): SDKResponse { return this.get>("/permissions", mapOf()) } - /** * ### Search permission sets * Returns all permission set records that match the given search criteria. @@ -7930,21 +8032,24 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, all_access: Boolean? = null, built_in: Boolean? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get>("/permission_sets/search", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "name" to name, - "all_access" to all_access, - "built_in" to built_in, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get>( + "/permission_sets/search", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "name" to name, + "all_access" to all_access, + "built_in" to built_in, + "filter_or" to filter_or, + ), + ) } - /** * ### Get information about the permission set with a specific id. * @@ -7955,16 +8060,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun permission_set( permission_set_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_permission_set_id = encodeParam(permission_set_id) - return this.get("/permission_sets/${path_permission_set_id}", - mapOf("fields" to fields)) + return this.get( + "/permission_sets/${path_permission_set_id}", + mapOf("fields" to fields), + ) } - /** * ### Update information about the permission set with a specific id. + * Providing save_content permission alone will also provide you the abilities of save_looks and save_dashboards. * * @param {String} permission_set_id Id of permission set * @param {WritePermissionSet} body @@ -7973,13 +8080,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_permission_set( permission_set_id: String, - body: WritePermissionSet - ) : SDKResponse { + body: WritePermissionSet, + ): SDKResponse { val path_permission_set_id = encodeParam(permission_set_id) return this.patch("/permission_sets/${path_permission_set_id}", mapOf(), body) } - /** * ### Delete the permission set with a specific id. * @@ -7988,13 +8094,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /permission_sets/{permission_set_id} -> String */ fun delete_permission_set( - permission_set_id: String - ) : SDKResponse { + permission_set_id: String, + ): SDKResponse { val path_permission_set_id = encodeParam(permission_set_id) return this.delete("/permission_sets/${path_permission_set_id}", mapOf()) } - /** * ### Get information about all permission sets. * @@ -8003,27 +8108,28 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /permission_sets -> Array */ @JvmOverloads fun all_permission_sets( - fields: String? = null - ) : SDKResponse { - return this.get>("/permission_sets", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/permission_sets", + mapOf("fields" to fields), + ) } - /** * ### Create a permission set with the specified information. Permission sets are used by Roles. + * Providing save_content permission alone will also provide you the abilities of save_looks and save_dashboards. * * @param {WritePermissionSet} body * * POST /permission_sets -> PermissionSet */ fun create_permission_set( - body: WritePermissionSet - ) : SDKResponse { + body: WritePermissionSet, + ): SDKResponse { return this.post("/permission_sets", mapOf(), body) } - /** * ### Get information about all roles. * @@ -8034,14 +8140,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_roles( fields: String? = null, - ids: DelimArray? = null - ) : SDKResponse { - return this.get>("/roles", - mapOf("fields" to fields, - "ids" to ids)) + ids: DelimArray? = null, + ): SDKResponse { + return this.get>( + "/roles", + mapOf( + "fields" to fields, + "ids" to ids, + ), + ) } - /** * ### Create a role with the specified information. * @@ -8050,12 +8159,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /roles -> Role */ fun create_role( - body: WriteRole - ) : SDKResponse { + body: WriteRole, + ): SDKResponse { return this.post("/roles", mapOf(), body) } - /** * ### Search roles * @@ -8101,20 +8209,23 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { id: String? = null, name: String? = null, built_in: Boolean? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get>("/roles/search", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "name" to name, - "built_in" to built_in, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get>( + "/roles/search", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "name" to name, + "built_in" to built_in, + "filter_or" to filter_or, + ), + ) } - /** * ### Search roles include user count * @@ -8161,20 +8272,23 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { id: String? = null, name: String? = null, built_in: Boolean? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get>("/roles/search/with_user_count", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "name" to name, - "built_in" to built_in, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get>( + "/roles/search/with_user_count", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "name" to name, + "built_in" to built_in, + "filter_or" to filter_or, + ), + ) } - /** * ### Get information about the role with a specific id. * @@ -8183,13 +8297,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /roles/{role_id} -> Role */ fun role( - role_id: String - ) : SDKResponse { + role_id: String, + ): SDKResponse { val path_role_id = encodeParam(role_id) return this.get("/roles/${path_role_id}", mapOf()) } - /** * ### Update information about the role with a specific id. * @@ -8200,13 +8313,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_role( role_id: String, - body: WriteRole - ) : SDKResponse { + body: WriteRole, + ): SDKResponse { val path_role_id = encodeParam(role_id) return this.patch("/roles/${path_role_id}", mapOf(), body) } - /** * ### Delete the role with a specific id. * @@ -8215,13 +8327,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /roles/{role_id} -> String */ fun delete_role( - role_id: String - ) : SDKResponse { + role_id: String, + ): SDKResponse { val path_role_id = encodeParam(role_id) return this.delete("/roles/${path_role_id}", mapOf()) } - /** * ### Get information about all the groups with the role that has a specific id. * @@ -8232,14 +8343,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun role_groups( role_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_role_id = encodeParam(role_id) - return this.get>("/roles/${path_role_id}/groups", - mapOf("fields" to fields)) + return this.get>( + "/roles/${path_role_id}/groups", + mapOf("fields" to fields), + ) } - /** * ### Set all groups for a role, removing all existing group associations from that role. * @@ -8252,13 +8364,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun set_role_groups( role_id: String, - body: Array - ) : SDKResponse { + body: Array, + ): SDKResponse { val path_role_id = encodeParam(role_id) return this.put>("/roles/${path_role_id}/groups", mapOf(), body) } - /** * ### Get information about all the users with the role that has a specific id. * @@ -8271,15 +8382,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun role_users( role_id: String, fields: String? = null, - direct_association_only: Boolean? = null - ) : SDKResponse { + direct_association_only: Boolean? = null, + ): SDKResponse { val path_role_id = encodeParam(role_id) - return this.get>("/roles/${path_role_id}/users", - mapOf("fields" to fields, - "direct_association_only" to direct_association_only)) + return this.get>( + "/roles/${path_role_id}/users", + mapOf( + "fields" to fields, + "direct_association_only" to direct_association_only, + ), + ) } - /** * ### Set all the users of the role with a specific id. * @@ -8290,8 +8404,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun set_role_users( role_id: String, - body: Array - ) : SDKResponse { + body: Array, + ): SDKResponse { val path_role_id = encodeParam(role_id) return this.put>("/roles/${path_role_id}/users", mapOf(), body) } @@ -8300,7 +8414,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region ScheduledPlan: Manage Scheduled Plans - /** * ### Get Scheduled Plans for a Space * @@ -8313,14 +8426,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun scheduled_plans_for_space( space_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_space_id = encodeParam(space_id) - return this.get>("/scheduled_plans/space/${path_space_id}", - mapOf("fields" to fields)) + return this.get>( + "/scheduled_plans/space/${path_space_id}", + mapOf("fields" to fields), + ) } - /** * ### Get Information About a Scheduled Plan * @@ -8333,14 +8447,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun scheduled_plan( scheduled_plan_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) - return this.get("/scheduled_plans/${path_scheduled_plan_id}", - mapOf("fields" to fields)) + return this.get( + "/scheduled_plans/${path_scheduled_plan_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a Scheduled Plan * @@ -8392,13 +8507,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_scheduled_plan( scheduled_plan_id: String, - body: WriteScheduledPlan - ) : SDKResponse { + body: WriteScheduledPlan, + ): SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) return this.patch("/scheduled_plans/${path_scheduled_plan_id}", mapOf(), body) } - /** * ### Delete a Scheduled Plan * @@ -8411,13 +8525,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /scheduled_plans/{scheduled_plan_id} -> String */ fun delete_scheduled_plan( - scheduled_plan_id: String - ) : SDKResponse { + scheduled_plan_id: String, + ): SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) return this.delete("/scheduled_plans/${path_scheduled_plan_id}", mapOf()) } - /** * ### List All Scheduled Plans * @@ -8440,15 +8553,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun all_scheduled_plans( user_id: String? = null, fields: String? = null, - all_users: Boolean? = null - ) : SDKResponse { - return this.get>("/scheduled_plans", - mapOf("user_id" to user_id, - "fields" to fields, - "all_users" to all_users)) + all_users: Boolean? = null, + ): SDKResponse { + return this.get>( + "/scheduled_plans", + mapOf( + "user_id" to user_id, + "fields" to fields, + "all_users" to all_users, + ), + ) } - /** * ### Create a Scheduled Plan * @@ -8514,12 +8630,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /scheduled_plans -> ScheduledPlan */ fun create_scheduled_plan( - body: WriteScheduledPlan - ) : SDKResponse { + body: WriteScheduledPlan, + ): SDKResponse { return this.post("/scheduled_plans", mapOf(), body) } - /** * ### Run a Scheduled Plan Immediately * @@ -8564,12 +8679,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /scheduled_plans/run_once -> ScheduledPlan */ fun scheduled_plan_run_once( - body: WriteScheduledPlan - ) : SDKResponse { + body: WriteScheduledPlan, + ): SDKResponse { return this.post("/scheduled_plans/run_once", mapOf(), body) } - /** * ### Get Scheduled Plans for a Look * @@ -8594,16 +8708,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { look_id: String, user_id: String? = null, fields: String? = null, - all_users: Boolean? = null - ) : SDKResponse { + all_users: Boolean? = null, + ): SDKResponse { val path_look_id = encodeParam(look_id) - return this.get>("/scheduled_plans/look/${path_look_id}", - mapOf("user_id" to user_id, - "fields" to fields, - "all_users" to all_users)) + return this.get>( + "/scheduled_plans/look/${path_look_id}", + mapOf( + "user_id" to user_id, + "fields" to fields, + "all_users" to all_users, + ), + ) } - /** * ### Get Scheduled Plans for a Dashboard * @@ -8628,16 +8745,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { dashboard_id: String, user_id: String? = null, all_users: Boolean? = null, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get>("/scheduled_plans/dashboard/${path_dashboard_id}", - mapOf("user_id" to user_id, - "all_users" to all_users, - "fields" to fields)) + return this.get>( + "/scheduled_plans/dashboard/${path_dashboard_id}", + mapOf( + "user_id" to user_id, + "all_users" to all_users, + "fields" to fields, + ), + ) } - /** * ### Get Scheduled Plans for a LookML Dashboard * @@ -8662,16 +8782,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { lookml_dashboard_id: String, user_id: String? = null, fields: String? = null, - all_users: Boolean? = null - ) : SDKResponse { + all_users: Boolean? = null, + ): SDKResponse { val path_lookml_dashboard_id = encodeParam(lookml_dashboard_id) - return this.get>("/scheduled_plans/lookml_dashboard/${path_lookml_dashboard_id}", - mapOf("user_id" to user_id, - "fields" to fields, - "all_users" to all_users)) + return this.get>( + "/scheduled_plans/lookml_dashboard/${path_lookml_dashboard_id}", + mapOf( + "user_id" to user_id, + "fields" to fields, + "all_users" to all_users, + ), + ) } - /** * ### Run a Scheduled Plan By Id Immediately * This function creates a run-once schedule plan based on an existing scheduled plan, @@ -8728,8 +8851,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun scheduled_plan_run_once_by_id( scheduled_plan_id: String, - body: WriteScheduledPlan? = null - ) : SDKResponse { + body: WriteScheduledPlan? = null, + ): SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) return this.post("/scheduled_plans/${path_scheduled_plan_id}/run_once", mapOf(), body) } @@ -8738,7 +8861,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Session: Session Information - /** * ### Get API Session * @@ -8746,13 +8868,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /session -> ApiSession */ - fun session( - - ) : SDKResponse { + fun session(): SDKResponse { return this.get("/session", mapOf()) } - /** * ### Update API Session * @@ -8780,8 +8899,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /session -> ApiSession */ fun update_session( - body: WriteApiSession - ) : SDKResponse { + body: WriteApiSession, + ): SDKResponse { return this.patch("/session", mapOf(), body) } @@ -8789,7 +8908,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region SqlInterfaceQuery: Run and Manage SQL Interface Queries - /** * ### Handles Avatica RPC metadata requests for SQL Interface queries * @@ -8798,13 +8916,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /sql_interface_queries/metadata -> SqlInterfaceQueryMetadata */ @JvmOverloads fun sql_interface_metadata( - avatica_request: String? = null - ) : SDKResponse { - return this.get("/sql_interface_queries/metadata", - mapOf("avatica_request" to avatica_request)) + avatica_request: String? = null, + ): SDKResponse { + return this.get( + "/sql_interface_queries/metadata", + mapOf("avatica_request" to avatica_request), + ) } - /** * ### Run a saved SQL interface query. * @@ -8825,26 +8944,21 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * | md | Simple markdown * | xlsx | MS Excel spreadsheet * | sql | Returns the generated SQL rather than running the query - * | png | A PNG image of the visualization of the query - * | jpg | A JPG image of the visualization of the query * * @param {Long} query_id Integer id of query * @param {String} result_format Format of result, options are: ["json_bi"] * - * GET /sql_interface_queries/{query_id}/run/{result_format} -> String - * - * **Note**: Binary content may be returned by this method. + * GET /sql_interface_queries/{query_id}/run/{result_format} -> QueryFormats */ fun run_sql_interface_query( query_id: Long, - result_format: String - ) : SDKResponse { + result_format: String, + ): SDKResponse { val path_query_id = encodeParam(query_id) val path_result_format = encodeParam(result_format) - return this.get("/sql_interface_queries/${path_query_id}/run/${path_result_format}", mapOf()) + return this.get("/sql_interface_queries/${path_query_id}/run/${path_result_format}", mapOf()) } - /** * ### Create a SQL interface query. * @@ -8860,8 +8974,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /sql_interface_queries -> SqlInterfaceQuery */ fun create_sql_interface_query( - body: WriteSqlInterfaceQueryCreate - ) : SDKResponse { + body: WriteSqlInterfaceQueryCreate, + ): SDKResponse { return this.post("/sql_interface_queries", mapOf(), body) } @@ -8869,7 +8983,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Theme: Manage Themes - /** * ### Get an array of all existing themes * @@ -8884,13 +8997,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /themes -> Array */ @JvmOverloads fun all_themes( - fields: String? = null - ) : SDKResponse { - return this.get>("/themes", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/themes", + mapOf("fields" to fields), + ) } - /** * ### Create a theme * @@ -8913,12 +9027,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /themes -> Theme */ fun create_theme( - body: WriteTheme - ) : SDKResponse { + body: WriteTheme, + ): SDKResponse { return this.post("/themes", mapOf(), body) } - /** * ### Search all themes for matching criteria. * @@ -8980,21 +9093,24 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { offset: Long? = null, sorts: String? = null, fields: String? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get>("/themes/search", - mapOf("id" to id, - "name" to name, - "begin_at" to begin_at, - "end_at" to end_at, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "fields" to fields, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get>( + "/themes/search", + mapOf( + "id" to id, + "name" to name, + "begin_at" to begin_at, + "end_at" to end_at, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "fields" to fields, + "filter_or" to filter_or, + ), + ) } - /** * ### Get the default theme * @@ -9009,13 +9125,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /themes/default -> Theme */ @JvmOverloads fun default_theme( - ts: Date? = null - ) : SDKResponse { - return this.get("/themes/default", - mapOf("ts" to ts)) + ts: Date? = null, + ): SDKResponse { + return this.get( + "/themes/default", + mapOf("ts" to ts), + ) } - /** * ### Set the global default theme by theme name * @@ -9034,13 +9151,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /themes/default -> Theme */ fun set_default_theme( - name: String - ) : SDKResponse { - return this.put("/themes/default", - mapOf("name" to name)) + name: String, + ): SDKResponse { + return this.put( + "/themes/default", + mapOf("name" to name), + ) } - /** * ### Get active themes * @@ -9061,15 +9179,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun active_themes( name: String? = null, ts: Date? = null, - fields: String? = null - ) : SDKResponse { - return this.get>("/themes/active", - mapOf("name" to name, - "ts" to ts, - "fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get>( + "/themes/active", + mapOf( + "name" to name, + "ts" to ts, + "fields" to fields, + ), + ) } - /** * ### Get the named theme if it's active. Otherwise, return the default theme * @@ -9085,14 +9206,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun theme_or_default( name: String, - ts: Date? = null - ) : SDKResponse { - return this.get("/themes/theme_or_default", - mapOf("name" to name, - "ts" to ts)) + ts: Date? = null, + ): SDKResponse { + return this.get( + "/themes/theme_or_default", + mapOf( + "name" to name, + "ts" to ts, + ), + ) } - /** * ### Validate a theme with the specified information * @@ -9107,12 +9231,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /themes/validate -> ValidationError */ fun validate_theme( - body: WriteTheme - ) : SDKResponse { + body: WriteTheme, + ): SDKResponse { return this.post("/themes/validate", mapOf(), body) } - /** * ### Get a theme by ID * @@ -9127,14 +9250,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun theme( theme_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_theme_id = encodeParam(theme_id) - return this.get("/themes/${path_theme_id}", - mapOf("fields" to fields)) + return this.get( + "/themes/${path_theme_id}", + mapOf("fields" to fields), + ) } - /** * ### Update the theme by id. * @@ -9147,13 +9271,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_theme( theme_id: String, - body: WriteTheme - ) : SDKResponse { + body: WriteTheme, + ): SDKResponse { val path_theme_id = encodeParam(theme_id) return this.patch("/themes/${path_theme_id}", mapOf(), body) } - /** * ### Delete a specific theme by id * @@ -9170,8 +9293,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /themes/{theme_id} -> String */ fun delete_theme( - theme_id: String - ) : SDKResponse { + theme_id: String, + ): SDKResponse { val path_theme_id = encodeParam(theme_id) return this.delete("/themes/${path_theme_id}", mapOf()) } @@ -9180,7 +9303,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region User: Manage Users - /** * ### Search email credentials * @@ -9229,20 +9351,23 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { id: String? = null, email: String? = null, emails: String? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get>("/credentials_email/search", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "email" to email, - "emails" to emails, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get>( + "/credentials_email/search", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "email" to email, + "emails" to emails, + "filter_or" to filter_or, + ), + ) } - /** * ### Get information about the current user; i.e. the user account currently calling the API. * @@ -9251,13 +9376,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /user -> User */ @JvmOverloads fun me( - fields: String? = null - ) : SDKResponse { - return this.get("/user", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/user", + mapOf("fields" to fields), + ) } - /** * ### Get information about all users. * @@ -9278,19 +9404,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, sorts: String? = null, - ids: DelimArray? = null - ) : SDKResponse { - return this.get>("/users", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "ids" to ids)) + ids: DelimArray? = null, + ): SDKResponse { + return this.get>( + "/users", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "ids" to ids, + ), + ) } - /** * ### Create a user with the specified information. * @@ -9301,13 +9430,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_user( body: WriteUser? = null, - fields: String? = null - ) : SDKResponse { - return this.post("/users", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/users", + mapOf("fields" to fields), + body, + ) } - /** * ### Search users * @@ -9375,28 +9506,31 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { is_disabled: Boolean? = null, filter_or: Boolean? = null, content_metadata_id: String? = null, - group_id: String? = null - ) : SDKResponse { - return this.get>("/users/search", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "first_name" to first_name, - "last_name" to last_name, - "verified_looker_employee" to verified_looker_employee, - "embed_user" to embed_user, - "email" to email, - "is_disabled" to is_disabled, - "filter_or" to filter_or, - "content_metadata_id" to content_metadata_id, - "group_id" to group_id)) + group_id: String? = null, + ): SDKResponse { + return this.get>( + "/users/search", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "first_name" to first_name, + "last_name" to last_name, + "verified_looker_employee" to verified_looker_employee, + "embed_user" to embed_user, + "email" to email, + "is_disabled" to is_disabled, + "filter_or" to filter_or, + "content_metadata_id" to content_metadata_id, + "group_id" to group_id, + ), + ) } - /** * ### Search for user accounts by name * @@ -9434,25 +9568,28 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { last_name: String? = null, verified_looker_employee: Boolean? = null, email: String? = null, - is_disabled: Boolean? = null - ) : SDKResponse { + is_disabled: Boolean? = null, + ): SDKResponse { val path_pattern = encodeParam(pattern) - return this.get>("/users/search/names/${path_pattern}", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "first_name" to first_name, - "last_name" to last_name, - "verified_looker_employee" to verified_looker_employee, - "email" to email, - "is_disabled" to is_disabled)) + return this.get>( + "/users/search/names/${path_pattern}", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "first_name" to first_name, + "last_name" to last_name, + "verified_looker_employee" to verified_looker_employee, + "email" to email, + "is_disabled" to is_disabled, + ), + ) } - /** * ### Get information about the user with a specific id. * @@ -9467,14 +9604,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}", + mapOf("fields" to fields), + ) } - /** * ### Update information about the user with a specific id. * @@ -9487,14 +9625,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_user( user_id: String, body: WriteUser, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.patch("/users/${path_user_id}", - mapOf("fields" to fields), body) + return this.patch( + "/users/${path_user_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete the user with a specific id. * @@ -9505,13 +9645,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id} -> String */ fun delete_user( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}", mapOf()) } - /** * ### Get information about the user with a credential of given type with specific id. * @@ -9553,15 +9692,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_for_credential( credential_type: String, credential_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_credential_type = encodeParam(credential_type) val path_credential_id = encodeParam(credential_id) - return this.get("/users/credential/${path_credential_type}/${path_credential_id}", - mapOf("fields" to fields)) + return this.get( + "/users/credential/${path_credential_type}/${path_credential_id}", + mapOf("fields" to fields), + ) } - /** * ### Email/password login information for the specified user. * @@ -9574,14 +9714,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_email( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_email", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), + ) } - /** * ### Email/password login information for the specified user. * @@ -9596,14 +9737,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_user_credentials_email( user_id: String, body: WriteCredentialsEmail, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), body) + return this.post( + "/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), + body, + ) } - /** * ### Email/password login information for the specified user. * @@ -9618,14 +9761,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_user_credentials_email( user_id: String, body: WriteCredentialsEmail, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.patch("/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), body) + return this.patch( + "/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), + body, + ) } - /** * ### Email/password login information for the specified user. * @@ -9636,13 +9781,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_email -> String */ fun delete_user_credentials_email( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}/credentials_email", mapOf()) } - /** * ### Two-factor login information for the specified user. * @@ -9655,14 +9799,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_totp( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_totp", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_totp", + mapOf("fields" to fields), + ) } - /** * ### Two-factor login information for the specified user. * @@ -9677,14 +9822,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_user_credentials_totp( user_id: String, body: CredentialsTotp? = null, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/users/${path_user_id}/credentials_totp", - mapOf("fields" to fields), body) + return this.post( + "/users/${path_user_id}/credentials_totp", + mapOf("fields" to fields), + body, + ) } - /** * ### Two-factor login information for the specified user. * @@ -9695,13 +9842,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_totp -> String */ fun delete_user_credentials_totp( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}/credentials_totp", mapOf()) } - /** * ### LDAP login information for the specified user. * @@ -9714,14 +9860,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_ldap( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_ldap", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_ldap", + mapOf("fields" to fields), + ) } - /** * ### LDAP login information for the specified user. * @@ -9732,13 +9879,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_ldap -> String */ fun delete_user_credentials_ldap( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}/credentials_ldap", mapOf()) } - /** * ### Google authentication login information for the specified user. * @@ -9751,14 +9897,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_google( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_google", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_google", + mapOf("fields" to fields), + ) } - /** * ### Google authentication login information for the specified user. * @@ -9769,13 +9916,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_google -> String */ fun delete_user_credentials_google( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}/credentials_google", mapOf()) } - /** * ### Saml authentication login information for the specified user. * @@ -9788,14 +9934,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_saml( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_saml", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_saml", + mapOf("fields" to fields), + ) } - /** * ### Saml authentication login information for the specified user. * @@ -9806,13 +9953,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_saml -> String */ fun delete_user_credentials_saml( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}/credentials_saml", mapOf()) } - /** * ### OpenID Connect (OIDC) authentication login information for the specified user. * @@ -9825,14 +9971,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_oidc( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_oidc", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_oidc", + mapOf("fields" to fields), + ) } - /** * ### OpenID Connect (OIDC) authentication login information for the specified user. * @@ -9843,13 +9990,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_oidc -> String */ fun delete_user_credentials_oidc( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}/credentials_oidc", mapOf()) } - /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -9864,15 +10010,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_credentials_api3( user_id: String, credentials_api3_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_api3_id = encodeParam(credentials_api3_id) - return this.get("/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", + mapOf("fields" to fields), + ) } - /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -9885,14 +10032,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_credentials_api3( user_id: String, - credentials_api3_id: String - ) : SDKResponse { + credentials_api3_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_api3_id = encodeParam(credentials_api3_id) return this.delete("/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", mapOf()) } - /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -9905,14 +10051,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_credentials_api3s( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get>("/users/${path_user_id}/credentials_api3", - mapOf("fields" to fields)) + return this.get>( + "/users/${path_user_id}/credentials_api3", + mapOf("fields" to fields), + ) } - /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -9925,14 +10072,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_user_credentials_api3( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/users/${path_user_id}/credentials_api3", - mapOf("fields" to fields)) + return this.post( + "/users/${path_user_id}/credentials_api3", + mapOf("fields" to fields), + ) } - /** * ### Embed login information for the specified user. * @@ -9947,15 +10095,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_credentials_embed( user_id: String, credentials_embed_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_embed_id = encodeParam(credentials_embed_id) - return this.get("/users/${path_user_id}/credentials_embed/${path_credentials_embed_id}", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_embed/${path_credentials_embed_id}", + mapOf("fields" to fields), + ) } - /** * ### Embed login information for the specified user. * @@ -9968,14 +10117,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_credentials_embed( user_id: String, - credentials_embed_id: String - ) : SDKResponse { + credentials_embed_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_embed_id = encodeParam(credentials_embed_id) return this.delete("/users/${path_user_id}/credentials_embed/${path_credentials_embed_id}", mapOf()) } - /** * ### Embed login information for the specified user. * @@ -9988,14 +10136,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_credentials_embeds( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get>("/users/${path_user_id}/credentials_embed", - mapOf("fields" to fields)) + return this.get>( + "/users/${path_user_id}/credentials_embed", + mapOf("fields" to fields), + ) } - /** * ### Looker Openid login information for the specified user. Used by Looker Analysts. * @@ -10008,14 +10157,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_looker_openid( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_looker_openid", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_looker_openid", + mapOf("fields" to fields), + ) } - /** * ### Looker Openid login information for the specified user. Used by Looker Analysts. * @@ -10026,13 +10176,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_looker_openid -> String */ fun delete_user_credentials_looker_openid( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}/credentials_looker_openid", mapOf()) } - /** * ### Web login session for the specified user. * @@ -10047,15 +10196,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_session( user_id: String, session_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_session_id = encodeParam(session_id) - return this.get("/users/${path_user_id}/sessions/${path_session_id}", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/sessions/${path_session_id}", + mapOf("fields" to fields), + ) } - /** * ### Web login session for the specified user. * @@ -10068,14 +10218,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_session( user_id: String, - session_id: String - ) : SDKResponse { + session_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_session_id = encodeParam(session_id) return this.delete("/users/${path_user_id}/sessions/${path_session_id}", mapOf()) } - /** * ### Web login session for the specified user. * @@ -10088,14 +10237,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_sessions( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get>("/users/${path_user_id}/sessions", - mapOf("fields" to fields)) + return this.get>( + "/users/${path_user_id}/sessions", + mapOf("fields" to fields), + ) } - /** * ### Create a password reset token. * This will create a cryptographically secure random password reset token for the user. @@ -10118,15 +10268,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_user_credentials_email_password_reset( user_id: String, expires: Boolean? = null, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/users/${path_user_id}/credentials_email/password_reset", - mapOf("expires" to expires, - "fields" to fields)) + return this.post( + "/users/${path_user_id}/credentials_email/password_reset", + mapOf( + "expires" to expires, + "fields" to fields, + ), + ) } - /** * ### Get information about roles of a given user * @@ -10139,15 +10292,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_roles( user_id: String, fields: String? = null, - direct_association_only: Boolean? = null - ) : SDKResponse { + direct_association_only: Boolean? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get>("/users/${path_user_id}/roles", - mapOf("fields" to fields, - "direct_association_only" to direct_association_only)) + return this.get>( + "/users/${path_user_id}/roles", + mapOf( + "fields" to fields, + "direct_association_only" to direct_association_only, + ), + ) } - /** * ### Set roles of the user with a specific id. * @@ -10160,14 +10316,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun set_user_roles( user_id: String, body: Array, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.put>("/users/${path_user_id}/roles", - mapOf("fields" to fields), body) + return this.put>( + "/users/${path_user_id}/roles", + mapOf("fields" to fields), + body, + ) } - /** * ### Get user attribute values for a given user. * @@ -10199,17 +10357,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { fields: String? = null, user_attribute_ids: DelimArray? = null, all_values: Boolean? = null, - include_unset: Boolean? = null - ) : SDKResponse { + include_unset: Boolean? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get>("/users/${path_user_id}/attribute_values", - mapOf("fields" to fields, - "user_attribute_ids" to user_attribute_ids, - "all_values" to all_values, - "include_unset" to include_unset)) + return this.get>( + "/users/${path_user_id}/attribute_values", + mapOf( + "fields" to fields, + "user_attribute_ids" to user_attribute_ids, + "all_values" to all_values, + "include_unset" to include_unset, + ), + ) } - /** * ### Store a custom value for a user attribute in a user's account settings. * @@ -10224,14 +10385,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { fun set_user_attribute_user_value( user_id: String, user_attribute_id: String, - body: WriteUserAttributeWithValue - ) : SDKResponse { + body: WriteUserAttributeWithValue, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_user_attribute_id = encodeParam(user_attribute_id) return this.patch("/users/${path_user_id}/attribute_values/${path_user_attribute_id}", mapOf(), body) } - /** * ### Delete a user attribute value from a user's account settings. * @@ -10247,14 +10407,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_attribute_user_value( user_id: String, - user_attribute_id: String - ) : SDKResponse { + user_attribute_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_user_attribute_id = encodeParam(user_attribute_id) return this.delete("/users/${path_user_id}/attribute_values/${path_user_attribute_id}", mapOf()) } - /** * ### Send a password reset token. * This will send a password reset email to the user. If a password reset token does not already exist @@ -10273,14 +10432,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun send_user_credentials_email_password_reset( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/users/${path_user_id}/credentials_email/send_password_reset", - mapOf("fields" to fields)) + return this.post( + "/users/${path_user_id}/credentials_email/send_password_reset", + mapOf("fields" to fields), + ) } - /** * ### Change a disabled user's email addresses * @@ -10300,14 +10460,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun wipeout_user_emails( user_id: String, body: UserEmailOnly, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/users/${path_user_id}/update_emails", - mapOf("fields" to fields), body) + return this.post( + "/users/${path_user_id}/update_emails", + mapOf("fields" to fields), + body, + ) } - /** * Create an embed user from an external user ID * @@ -10318,8 +10480,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /users/embed_user -> UserPublic */ fun create_embed_user( - body: CreateEmbedUserRequest - ) : SDKResponse { + body: CreateEmbedUserRequest, + ): SDKResponse { return this.post("/users/embed_user", mapOf(), body) } @@ -10327,7 +10489,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region UserAttribute: Manage User Attributes - /** * ### Get information about all user attributes. * @@ -10338,14 +10499,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_attributes( fields: String? = null, - sorts: String? = null - ) : SDKResponse { - return this.get>("/user_attributes", - mapOf("fields" to fields, - "sorts" to sorts)) + sorts: String? = null, + ): SDKResponse { + return this.get>( + "/user_attributes", + mapOf( + "fields" to fields, + "sorts" to sorts, + ), + ) } - /** * ### Create a new user attribute * @@ -10365,13 +10529,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_user_attribute( body: WriteUserAttribute, - fields: String? = null - ) : SDKResponse { - return this.post("/user_attributes", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/user_attributes", + mapOf("fields" to fields), + body, + ) } - /** * ### Get information about a user attribute. * @@ -10382,14 +10548,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_attribute( user_attribute_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.get("/user_attributes/${path_user_attribute_id}", - mapOf("fields" to fields)) + return this.get( + "/user_attributes/${path_user_attribute_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a user attribute definition. * @@ -10402,14 +10569,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_user_attribute( user_attribute_id: String, body: WriteUserAttribute, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.patch("/user_attributes/${path_user_attribute_id}", - mapOf("fields" to fields), body) + return this.patch( + "/user_attributes/${path_user_attribute_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a user attribute (admin only). * @@ -10418,13 +10587,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /user_attributes/{user_attribute_id} -> String */ fun delete_user_attribute( - user_attribute_id: String - ) : SDKResponse { + user_attribute_id: String, + ): SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) return this.delete("/user_attributes/${path_user_attribute_id}", mapOf()) } - /** * ### Returns all values of a user attribute defined by user groups, in precedence order. * @@ -10441,14 +10609,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_attribute_group_values( user_attribute_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.get>("/user_attributes/${path_user_attribute_id}/group_values", - mapOf("fields" to fields)) + return this.get>( + "/user_attributes/${path_user_attribute_id}/group_values", + mapOf("fields" to fields), + ) } - /** * ### Define values for a user attribute across a set of groups, in priority order. * @@ -10478,8 +10647,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun set_user_attribute_group_values( user_attribute_id: String, - body: Array - ) : SDKResponse { + body: Array, + ): SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) return this.post>("/user_attributes/${path_user_attribute_id}/group_values", mapOf(), body) } @@ -10488,7 +10657,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Workspace: Manage Workspaces - /** * ### Get All Workspaces * @@ -10496,13 +10664,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /workspaces -> Array */ - fun all_workspaces( - - ) : SDKResponse { + fun all_workspaces(): SDKResponse { return this.get>("/workspaces", mapOf()) } - /** * ### Get A Workspace * @@ -10539,12 +10704,11 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /workspaces/{workspace_id} -> Workspace */ fun workspace( - workspace_id: String - ) : SDKResponse { + workspace_id: String, + ): SDKResponse { val path_workspace_id = encodeParam(workspace_id) return this.get("/workspaces/${path_workspace_id}", mapOf()) } //endregion Workspace: Manage Workspaces - -} \ No newline at end of file +} diff --git a/kotlin/src/main/com/looker/sdk/4.0/models.kt b/kotlin/src/main/com/looker/sdk/4.0/models.kt index d442d896d..b7af30bdc 100644 --- a/kotlin/src/main/com/looker/sdk/4.0/models.kt +++ b/kotlin/src/main/com/looker/sdk/4.0/models.kt @@ -25,10 +25,9 @@ */ /** - * 332 API models: 249 Spec, 0 Request, 61 Write, 22 Enum + * 339 API models: 256 Spec, 0 Request, 61 Write, 22 Enum */ - // NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 package com.looker.sdk @@ -43,11 +42,11 @@ import java.util.* * @property expires_in Number of seconds before the token expires (read-only) * @property refresh_token Refresh token which can be used to obtain a new access token (read-only) */ -data class AccessToken ( +data class AccessToken( var access_token: String? = null, var token_type: String? = null, var expires_in: Long? = null, - var refresh_token: String? = null + var refresh_token: String? = null, ) : Serializable /** @@ -79,7 +78,7 @@ data class AccessToken ( * @property threshold Value of the alert threshold * @property time_series_condition_state */ -data class Alert ( +data class Alert( var applied_dashboard_filters: Array? = null, var comparison_type: ComparisonType, var cron: String, @@ -106,7 +105,7 @@ data class Alert ( var owner_id: String, var owner_display_name: String? = null, var threshold: Double, - var time_series_condition_state: AlertConditionState? = null + var time_series_condition_state: AlertConditionState? = null, ) : Serializable /** @@ -115,20 +114,20 @@ data class Alert ( * @property filter_value Field Value. [Filter Expressions](https://cloud.google.com/looker/docs/reference/filter-expressions). Example `Los Angeles CA` * @property filter_description Human Readable Filter Description. This may be null or auto-generated. Example `is Los Angeles CA` (read-only) */ -data class AlertAppliedDashboardFilter ( +data class AlertAppliedDashboardFilter( var filter_title: String, var field_name: String, var filter_value: String, - var filter_description: String? = null + var filter_description: String? = null, ) : Serializable /** * @property previous_time_series_id (Write-Only) The second latest time string the alert has seen. * @property latest_time_series_id (Write-Only) Latest time string the alert has seen. */ -data class AlertConditionState ( +data class AlertConditionState( var previous_time_series_id: String? = null, - var latest_time_series_id: String? = null + var latest_time_series_id: String? = null, ) : Serializable /** @@ -137,11 +136,11 @@ data class AlertConditionState ( * @property action_hub_integration_id Action hub integration id for the 'action_hub' type. [Integration](#!/types/Integration) * @property action_hub_form_params_json Action hub form params json for the 'action_hub' type [IntegrationParam](#!/types/IntegrationParam) */ -data class AlertDestination ( +data class AlertDestination( var destination_type: DestinationType, var email_address: String? = null, var action_hub_integration_id: String? = null, - var action_hub_form_params_json: String? = null + var action_hub_form_params_json: String? = null, ) : Serializable /** @@ -149,10 +148,10 @@ data class AlertDestination ( * @property name Field's name. Has the format `.` Refer to [docs](https://cloud.google.com/looker/docs/sharing-and-publishing/creating-alerts) for more details * @property filter (Optional / Advance Use) List of fields filter. This further restricts the alert to certain dashboard element's field values. This can be used on top of dashboard filters `applied_dashboard_filters`. To keep thing simple, it's suggested to just use dashboard filters. Example: `{ 'title': '12 Number on Hand', 'name': 'inventory_items.number_on_hand', 'filter': [{ 'field_name': 'inventory_items.id', 'field_value': 12, 'filter_value': null }] }` */ -data class AlertField ( +data class AlertField( var title: String, var name: String, - var filter: Array? = null + var filter: Array? = null, ) : Serializable /** @@ -160,10 +159,10 @@ data class AlertField ( * @property field_value Field Value. Depends on the type of field - numeric or string. For [location](https://cloud.google.com/looker/docs/reference/field-reference/dimension-type-reference#location) type, it's a list of floats. Example `[1.0, 56.0]` * @property filter_value Filter Value. Usually null except for [location](https://cloud.google.com/looker/docs/reference/field-reference/dimension-type-reference#location) type. It'll be a string of lat,long ie `'1.0,56.0'` */ -data class AlertFieldFilter ( +data class AlertFieldFilter( var field_name: String, var field_value: Any, - var filter_value: String? = null + var filter_value: String? = null, ) : Serializable /** @@ -176,7 +175,7 @@ data class AlertFieldFilter ( * @property ran_at The time at which the alert query ran (read-only) * @property alert */ -data class AlertNotifications ( +data class AlertNotifications( var notification_id: String? = null, var alert_condition_id: String? = null, var user_id: String? = null, @@ -184,7 +183,7 @@ data class AlertNotifications ( var field_value: Double? = null, var threshold_value: Double? = null, var ran_at: String? = null, - var alert: MobilePayload? = null + var alert: MobilePayload? = null, ) : Serializable /** @@ -194,12 +193,12 @@ data class AlertNotifications ( * @property is_public Set alert public or private * @property threshold New threshold value */ -data class AlertPatch ( +data class AlertPatch( var owner_id: String? = null, var is_disabled: Boolean? = null, var disabled_reason: String? = null, var is_public: Boolean? = null, - var threshold: Double? = null + var threshold: Double? = null, ) : Serializable /** @@ -207,7 +206,7 @@ data class AlertPatch ( */ enum class Align : Serializable { left, - right + right, } /** @@ -215,10 +214,10 @@ enum class Align : Serializable { * @property workspace_id The id of active workspace for this session * @property sudo_user_id The id of the actual user in the case when this session represents one user sudo'ing as another (read-only) */ -data class ApiSession ( - var can: Map? = null, +data class ApiSession( + var can: Map? = null, var workspace_id: String? = null, - var sudo_user_id: String? = null + var sudo_user_id: String? = null, ) : Serializable /** @@ -228,12 +227,12 @@ data class ApiSession ( * @property api_server_url API server base url (read-only) * @property web_server_url Web server base url (read-only) */ -data class ApiVersion ( +data class ApiVersion( var looker_release_version: String? = null, var current_version: ApiVersionElement? = null, var supported_versions: Array? = null, var api_server_url: String? = null, - var web_server_url: String? = null + var web_server_url: String? = null, ) : Serializable /** @@ -242,11 +241,11 @@ data class ApiVersion ( * @property status Status of this version (read-only) * @property swagger_url Url for swagger.json for this version (read-only) */ -data class ApiVersionElement ( +data class ApiVersionElement( var version: String? = null, var full_version: String? = null, var status: String? = null, - var swagger_url: String? = null + var swagger_url: String? = null, ) : Serializable /** @@ -261,7 +260,7 @@ data class ApiVersionElement ( * @property created_by_userid User id of the artifact creator. (read-only) * @property updated_by_userid User id of the artifact updater. (read-only) */ -data class Artifact ( +data class Artifact( var key: String, var value: String, var content_type: String? = null, @@ -271,25 +270,25 @@ data class Artifact ( var updated_at: Date, var value_size: Long, var created_by_userid: String, - var updated_by_userid: String + var updated_by_userid: String, ) : Serializable /** * @property namespace Artifact storage namespace. (read-only) * @property count The number of artifacts stored in the namespace. (read-only) */ -data class ArtifactNamespace ( +data class ArtifactNamespace( var namespace: String, - var count: Long + var count: Long, ) : Serializable /** * @property max_size The configured maximum size in bytes of the entire artifact store. (read-only) * @property usage The currently used storage size in bytes of the entire artifact store. (read-only) */ -data class ArtifactUsage ( +data class ArtifactUsage( var max_size: Long, - var usage: Long + var usage: Long, ) : Serializable /** @@ -301,14 +300,14 @@ data class ArtifactUsage ( * @property custom_s3_secret (Write-Only) AWS S3 secret used for custom-s3 backups * @property url Link to get this item (read-only) */ -data class BackupConfiguration ( - var can: Map? = null, +data class BackupConfiguration( + var can: Map? = null, var type: String? = null, var custom_s3_bucket: String? = null, var custom_s3_bucket_region: String? = null, var custom_s3_key: String? = null, var custom_s3_secret: String? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -325,8 +324,8 @@ data class BackupConfiguration ( * @property user_id User id of board creator (read-only) * @property primary_homepage Whether the board is the primary homepage or not (read-only) */ -data class Board ( - var can: Map? = null, +data class Board( + var can: Map? = null, var content_metadata_id: String? = null, var created_at: Date? = null, var deleted_at: Date? = null, @@ -337,7 +336,7 @@ data class Board ( var title: String? = null, var updated_at: Date? = null, var user_id: String? = null, - var primary_homepage: Boolean? = null + var primary_homepage: Boolean? = null, ) : Serializable /** @@ -369,8 +368,8 @@ data class Board ( * @property custom_image_url Custom image_url entered by the user, if present (read-only) * @property use_custom_image Whether the custom image should be used instead of the content image, if the item is associated with content */ -data class BoardItem ( - var can: Map? = null, +data class BoardItem( + var can: Map? = null, var content_created_by: String? = null, var content_favorite_id: String? = null, var content_metadata_id: String? = null, @@ -396,7 +395,7 @@ data class BoardItem ( var view_count: Long? = null, var custom_image_data_base64: String? = null, var custom_image_url: String? = null, - var use_custom_image: Boolean? = null + var use_custom_image: Boolean? = null, ) : Serializable /** @@ -412,8 +411,8 @@ data class BoardItem ( * @property title Name of row * @property updated_at Time at which this section was last updated. (read-only) */ -data class BoardSection ( - var can: Map? = null, +data class BoardSection( + var can: Map? = null, var created_at: Date? = null, var deleted_at: Date? = null, var description: String? = null, @@ -423,7 +422,7 @@ data class BoardSection ( var item_order: Array? = null, var visible_item_order: Array? = null, var title: String? = null, - var updated_at: Date? = null + var updated_at: Date? = null, ) : Serializable /** @@ -433,7 +432,7 @@ enum class Category : Serializable { parameter, filter, measure, - dimension + dimension, } /** @@ -443,21 +442,21 @@ enum class Category : Serializable { * @property sequentialPalettes Array of discrete palette definitions * @property divergingPalettes Array of diverging palette definitions */ -data class ColorCollection ( +data class ColorCollection( var id: String? = null, var label: String? = null, var categoricalPalettes: Array? = null, var sequentialPalettes: Array? = null, - var divergingPalettes: Array? = null + var divergingPalettes: Array? = null, ) : Serializable /** * @property color CSS color string * @property offset Offset in continuous palette (0 to 100) */ -data class ColorStop ( +data class ColorStop( var color: String? = null, - var offset: Long? = null + var offset: Long? = null, ) : Serializable /** @@ -466,11 +465,11 @@ data class ColorStop ( * @property column_name Name of column (read-only) * @property data_type Column data type (read-only) */ -data class ColumnSearch ( +data class ColumnSearch( var schema_name: String? = null, var table_name: String? = null, var column_name: String? = null, - var data_type: String? = null + var data_type: String? = null, ) : Serializable /** @@ -484,7 +483,7 @@ enum class ComparisonType : Serializable { LESS_THAN_OR_EQUAL_TO, INCREASES_BY, DECREASES_BY, - CHANGES_BY + CHANGES_BY, } /** @@ -505,7 +504,7 @@ enum class ComparisonType : Serializable { * @property timezone True for timezone conversion in query support (read-only) * @property connection_pooling True for connection pooling support (read-only) */ -data class ConnectionFeatures ( +data class ConnectionFeatures( var dialect_name: String? = null, var cost_estimate: Boolean? = null, var multiple_databases: Boolean? = null, @@ -521,7 +520,7 @@ data class ConnectionFeatures ( var subtotals: Boolean? = null, var location: Boolean? = null, var timezone: Boolean? = null, - var connection_pooling: Boolean? = null + var connection_pooling: Boolean? = null, ) : Serializable /** @@ -534,7 +533,7 @@ data class ConnectionFeatures ( * @property dashboard * @property board_id Id of a board (read-only) */ -data class ContentFavorite ( +data class ContentFavorite( var id: String? = null, var user_id: String? = null, var content_metadata_id: String? = null, @@ -542,7 +541,7 @@ data class ContentFavorite ( var dashboard_id: String? = null, var look: LookBasic? = null, var dashboard: DashboardBase? = null, - var board_id: String? = null + var board_id: String? = null, ) : Serializable /** @@ -558,8 +557,8 @@ data class ContentFavorite ( * @property inheriting_id Id of Inherited Content (read-only) * @property slug Content Slug (read-only) */ -data class ContentMeta ( - var can: Map? = null, +data class ContentMeta( + var can: Map? = null, var id: String? = null, var name: String? = null, var parent_id: String? = null, @@ -569,7 +568,7 @@ data class ContentMeta ( var content_type: String? = null, var inherits: Boolean? = null, var inheriting_id: String? = null, - var slug: String? = null + var slug: String? = null, ) : Serializable /** @@ -582,13 +581,13 @@ data class ContentMeta ( * @property group_id ID of associated group (read-only) * @property user_id ID of associated user (read-only) */ -data class ContentMetaGroupUser ( - var can: Map? = null, +data class ContentMetaGroupUser( + var can: Map? = null, var id: String? = null, var content_metadata_id: String? = null, var permission_type: PermissionType? = null, var group_id: String? = null, - var user_id: String? = null + var user_id: String? = null, ) : Serializable /** @@ -602,8 +601,8 @@ data class ContentMetaGroupUser ( * @property view_count Number of times the content has been viewed (read-only) * @property preferred_viewer Preferred way of viewing the content (only applies to dashboards) (read-only) */ -data class ContentSearch ( - var can: Map? = null, +data class ContentSearch( + var can: Map? = null, var content_id: String? = null, var type: String? = null, var title: String? = null, @@ -611,7 +610,7 @@ data class ContentSearch ( var folder_id: String? = null, var folder_name: String? = null, var view_count: Long? = null, - var preferred_viewer: String? = null + var preferred_viewer: String? = null, ) : Serializable /** @@ -624,7 +623,7 @@ data class ContentSearch ( * @property total_alerts_validated The number of alerts validated (read-only) * @property total_explores_validated The number of explores used across all content validated (read-only) */ -data class ContentValidation ( +data class ContentValidation( var content_with_errors: Array? = null, var computation_time: Float? = null, var total_looks_validated: Long? = null, @@ -632,7 +631,7 @@ data class ContentValidation ( var total_dashboard_filters_validated: Long? = null, var total_scheduled_plans_validated: Long? = null, var total_alerts_validated: Long? = null, - var total_explores_validated: Long? = null + var total_explores_validated: Long? = null, ) : Serializable /** @@ -645,7 +644,7 @@ data class ContentValidation ( * @property show_custom_url Boolean to determine if the custom url should be used * @property custom_title An optional, user-defined title for the alert */ -data class ContentValidationAlert ( +data class ContentValidationAlert( var id: String? = null, var lookml_dashboard_id: String? = null, var lookml_link_id: String? = null, @@ -653,7 +652,7 @@ data class ContentValidationAlert ( var custom_url_params: String? = null, var custom_url_label: String? = null, var show_custom_url: Boolean? = null, - var custom_title: String? = null + var custom_title: String? = null, ) : Serializable /** @@ -663,12 +662,12 @@ data class ContentValidationAlert ( * @property title Dashboard Title * @property url Relative URL of the dashboard (read-only) */ -data class ContentValidationDashboard ( +data class ContentValidationDashboard( var description: String? = null, var id: String? = null, var folder: ContentValidationFolder? = null, var title: String? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -689,7 +688,7 @@ data class ContentValidationDashboard ( * @property rich_content_json JSON with all the properties required for rich editor and buttons elements * @property extension_id Extension ID */ -data class ContentValidationDashboardElement ( +data class ContentValidationDashboardElement( var body_text: String? = null, var dashboard_id: String? = null, var id: String? = null, @@ -705,7 +704,7 @@ data class ContentValidationDashboardElement ( var title_text: String? = null, var type: String? = null, var rich_content_json: String? = null, - var extension_id: String? = null + var extension_id: String? = null, ) : Serializable /** @@ -719,7 +718,7 @@ data class ContentValidationDashboardElement ( * @property explore Explore of filter (required if type = field) * @property dimension Dimension of filter (required if type = field) */ -data class ContentValidationDashboardFilter ( +data class ContentValidationDashboardFilter( var id: String? = null, var dashboard_id: String? = null, var name: String? = null, @@ -728,7 +727,7 @@ data class ContentValidationDashboardFilter ( var default_value: String? = null, var model: String? = null, var explore: String? = null, - var dimension: String? = null + var dimension: String? = null, ) : Serializable /** @@ -738,21 +737,21 @@ data class ContentValidationDashboardFilter ( * @property explore_name Name of the explore involved in the error (read-only) * @property removable Whether this validation error is removable (read-only) */ -data class ContentValidationError ( +data class ContentValidationError( var message: String? = null, var field_name: String? = null, var model_name: String? = null, var explore_name: String? = null, - var removable: Boolean? = null + var removable: Boolean? = null, ) : Serializable /** * @property name Unique Name * @property id Unique Id (read-only) */ -data class ContentValidationFolder ( +data class ContentValidationFolder( var name: String, - var id: String? = null + var id: String? = null, ) : Serializable /** @@ -761,11 +760,11 @@ data class ContentValidationFolder ( * @property short_url Short Url (read-only) * @property folder */ -data class ContentValidationLook ( +data class ContentValidationLook( var id: String? = null, var title: String? = null, var short_url: String? = null, - var folder: ContentValidationFolder? = null + var folder: ContentValidationFolder? = null, ) : Serializable /** @@ -773,19 +772,19 @@ data class ContentValidationLook ( * @property title Title of the LookML Dashboard (read-only) * @property space_id ID of Space (read-only) */ -data class ContentValidationLookMLDashboard ( +data class ContentValidationLookMLDashboard( var id: String? = null, var title: String? = null, - var space_id: String? = null + var space_id: String? = null, ) : Serializable /** * @property lookml_link_id Link ID of the LookML Dashboard Element (read-only) * @property title Title of the LookML Dashboard Element (read-only) */ -data class ContentValidationLookMLDashboardElement ( +data class ContentValidationLookMLDashboardElement( var lookml_link_id: String? = null, - var title: String? = null + var title: String? = null, ) : Serializable /** @@ -793,10 +792,10 @@ data class ContentValidationLookMLDashboardElement ( * @property look_id Id of a look * @property id Unique Id (read-only) */ -data class ContentValidationScheduledPlan ( +data class ContentValidationScheduledPlan( var name: String? = null, var look_id: String? = null, - var id: String? = null + var id: String? = null, ) : Serializable /** @@ -811,7 +810,7 @@ data class ContentValidationScheduledPlan ( * @property errors A list of errors found for this piece of content (read-only) * @property id An id unique to this piece of content for this validation run (read-only) */ -data class ContentValidatorError ( +data class ContentValidatorError( var look: ContentValidationLook? = null, var dashboard: ContentValidationDashboard? = null, var dashboard_element: ContentValidationDashboardElement? = null, @@ -821,7 +820,7 @@ data class ContentValidatorError ( var lookml_dashboard: ContentValidationLookMLDashboard? = null, var lookml_dashboard_element: ContentValidationLookMLDashboardElement? = null, var errors: Array? = null, - var id: String? = null + var id: String? = null, ) : Serializable /** @@ -838,8 +837,8 @@ data class ContentValidatorError ( * @property last_viewed_at Date the piece of content was last viewed (read-only) * @property start_of_week_date Week start date for the view and favorite count during that given week (read-only) */ -data class ContentView ( - var can: Map? = null, +data class ContentView( + var can: Map? = null, var id: String? = null, var look_id: String? = null, var dashboard_id: String? = null, @@ -850,7 +849,7 @@ data class ContentView ( var view_count: Long? = null, var favorite_count: Long? = null, var last_viewed_at: String? = null, - var start_of_week_date: String? = null + var start_of_week_date: String? = null, ) : Serializable /** @@ -859,11 +858,11 @@ data class ContentView ( * @property type Type of palette * @property stops Array of ColorStops in the palette */ -data class ContinuousPalette ( +data class ContinuousPalette( var id: String? = null, var label: String? = null, var type: String? = null, - var stops: Array? = null + var stops: Array? = null, ) : Serializable /** @@ -872,11 +871,11 @@ data class ContinuousPalette ( * @property cost_unit Cost measurement size (read-only) * @property message Human-friendly message (read-only) */ -data class CostEstimate ( +data class CostEstimate( var cost: Long? = null, var cache_hit: Boolean? = null, var cost_unit: String? = null, - var message: String? = null + var message: String? = null, ) : Serializable /** @@ -884,8 +883,8 @@ data class CostEstimate ( * * @property sql SQL statement to estimate (read-only) */ -data class CreateCostEstimate ( - var sql: String? = null +data class CreateCostEstimate( + var sql: String? = null, ) : Serializable /** @@ -898,15 +897,15 @@ data class CreateCostEstimate ( * @property client_secret API key client_secret (read-only) * @property url Link to get this item (read-only) */ -data class CreateCredentialsApi3 ( - var can: Map? = null, +data class CreateCredentialsApi3( + var can: Map? = null, var id: String? = null, var client_id: String? = null, var created_at: String? = null, var is_disabled: Boolean? = null, var type: String? = null, var client_secret: String? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -926,7 +925,7 @@ data class CreateCredentialsApi3 ( * @property required Whether the filter requires a value to run the dashboard * @property ui_config The visual configuration for this filter. Used to set up how the UI for this filter should appear. */ -data class CreateDashboardFilter ( +data class CreateDashboardFilter( var id: String? = null, var dashboard_id: String, var name: String, @@ -936,37 +935,37 @@ data class CreateDashboardFilter ( var model: String? = null, var explore: String? = null, var dimension: String? = null, - var field: Map? = null, + var field: Map? = null, var row: Long? = null, var listens_to_filters: Array? = null, var allow_multiple_values: Boolean? = null, var required: Boolean? = null, - var ui_config: Map? = null + var ui_config: Map? = null, ) : Serializable /** * @property dashboard_filters Filter values to apply to the dashboard queries, in URL query format * @property dashboard_style Dashboard layout style: single_column or tiled */ -data class CreateDashboardRenderTask ( +data class CreateDashboardRenderTask( var dashboard_filters: String? = null, - var dashboard_style: String? = null + var dashboard_style: String? = null, ) : Serializable /** * @property external_user_id */ -data class CreateEmbedUserRequest ( - var external_user_id: String +data class CreateEmbedUserRequest( + var external_user_id: String, ) : Serializable /** * @property name Unique Name * @property parent_id Id of Parent. If the parent id is null, this is a root-level entry */ -data class CreateFolder ( +data class CreateFolder( var name: String, - var parent_id: String + var parent_id: String, ) : Serializable /** @@ -977,22 +976,22 @@ data class CreateFolder ( * @property refresh_token * @property refresh_token_expires_at */ -data class CreateOAuthApplicationUserStateRequest ( +data class CreateOAuthApplicationUserStateRequest( var user_id: String, var oauth_application_id: String, var access_token: String, var access_token_expires_at: Date, var refresh_token: String? = null, - var refresh_token_expires_at: Date? = null + var refresh_token_expires_at: Date? = null, ) : Serializable /** * @property user_id User Id (read-only) * @property oauth_application_id OAuth Application ID (read-only) */ -data class CreateOAuthApplicationUserStateResponse ( +data class CreateOAuthApplicationUserStateResponse( var user_id: String, - var oauth_application_id: String + var oauth_application_id: String, ) : Serializable /** @@ -1004,14 +1003,14 @@ data class CreateOAuthApplicationUserStateResponse ( * @property look_id Id of look associated with query. * @property dashboard_id Id of dashboard associated with query. */ -data class CreateQueryTask ( - var can: Map? = null, +data class CreateQueryTask( + var can: Map? = null, var query_id: String, var result_format: ResultFormat, var source: String? = null, var deferred: Boolean? = null, var look_id: String? = null, - var dashboard_id: String? = null + var dashboard_id: String? = null, ) : Serializable /** @@ -1023,14 +1022,14 @@ data class CreateQueryTask ( * @property type Short name for the type of this kind of credential (read-only) * @property url Link to get this item (read-only) */ -data class CredentialsApi3 ( - var can: Map? = null, +data class CredentialsApi3( + var can: Map? = null, var id: String? = null, var client_id: String? = null, var created_at: String? = null, var is_disabled: Boolean? = null, var type: String? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -1047,8 +1046,8 @@ data class CredentialsApi3 ( * @property url Link to get this item (read-only) * @property user_url Link to get this user (read-only) */ -data class CredentialsEmail ( - var can: Map? = null, +data class CredentialsEmail( + var can: Map? = null, var created_at: String? = null, var email: String? = null, var forced_password_reset_at_next_login: Boolean? = null, @@ -1059,7 +1058,7 @@ data class CredentialsEmail ( var account_setup_url: String? = null, var type: String? = null, var url: String? = null, - var user_url: String? = null + var user_url: String? = null, ) : Serializable /** @@ -1076,8 +1075,8 @@ data class CredentialsEmail ( * @property url Link to get this item (read-only) * @property user_url Link to get this user (read-only) */ -data class CredentialsEmailSearch ( - var can: Map? = null, +data class CredentialsEmailSearch( + var can: Map? = null, var created_at: String? = null, var email: String? = null, var forced_password_reset_at_next_login: Boolean? = null, @@ -1088,7 +1087,7 @@ data class CredentialsEmailSearch ( var account_setup_url: String? = null, var type: String? = null, var url: String? = null, - var user_url: String? = null + var user_url: String? = null, ) : Serializable /** @@ -1102,8 +1101,8 @@ data class CredentialsEmailSearch ( * @property type Short name for the type of this kind of credential (read-only) * @property url Link to get this item (read-only) */ -data class CredentialsEmbed ( - var can: Map? = null, +data class CredentialsEmbed( + var can: Map? = null, var created_at: String? = null, var external_group_id: String? = null, var external_user_id: String? = null, @@ -1111,7 +1110,7 @@ data class CredentialsEmbed ( var is_disabled: Boolean? = null, var logged_in_at: String? = null, var type: String? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -1125,8 +1124,8 @@ data class CredentialsEmbed ( * @property type Short name for the type of this kind of credential (read-only) * @property url Link to get this item (read-only) */ -data class CredentialsGoogle ( - var can: Map? = null, +data class CredentialsGoogle( + var can: Map? = null, var created_at: String? = null, var domain: String? = null, var email: String? = null, @@ -1134,7 +1133,7 @@ data class CredentialsGoogle ( var is_disabled: Boolean? = null, var logged_in_at: String? = null, var type: String? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -1148,8 +1147,8 @@ data class CredentialsGoogle ( * @property type Short name for the type of this kind of credential (read-only) * @property url Link to get this item (read-only) */ -data class CredentialsLDAP ( - var can: Map? = null, +data class CredentialsLDAP( + var can: Map? = null, var created_at: String? = null, var email: String? = null, var is_disabled: Boolean? = null, @@ -1157,7 +1156,7 @@ data class CredentialsLDAP ( var ldap_id: String? = null, var logged_in_at: String? = null, var type: String? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -1171,8 +1170,8 @@ data class CredentialsLDAP ( * @property url Link to get this item (read-only) * @property user_url Link to get this user (read-only) */ -data class CredentialsLookerOpenid ( - var can: Map? = null, +data class CredentialsLookerOpenid( + var can: Map? = null, var created_at: String? = null, var email: String? = null, var is_disabled: Boolean? = null, @@ -1180,7 +1179,7 @@ data class CredentialsLookerOpenid ( var logged_in_ip: String? = null, var type: String? = null, var url: String? = null, - var user_url: String? = null + var user_url: String? = null, ) : Serializable /** @@ -1193,15 +1192,15 @@ data class CredentialsLookerOpenid ( * @property type Short name for the type of this kind of credential (read-only) * @property url Link to get this item (read-only) */ -data class CredentialsOIDC ( - var can: Map? = null, +data class CredentialsOIDC( + var can: Map? = null, var created_at: String? = null, var email: String? = null, var is_disabled: Boolean? = null, var logged_in_at: String? = null, var oidc_user_id: String? = null, var type: String? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -1214,15 +1213,15 @@ data class CredentialsOIDC ( * @property type Short name for the type of this kind of credential (read-only) * @property url Link to get this item (read-only) */ -data class CredentialsSaml ( - var can: Map? = null, +data class CredentialsSaml( + var can: Map? = null, var created_at: String? = null, var email: String? = null, var is_disabled: Boolean? = null, var logged_in_at: String? = null, var saml_user_id: String? = null, var type: String? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -1235,13 +1234,13 @@ data class CredentialsSaml ( * @property verified User has verified (read-only) * @property url Link to get this item (read-only) */ -data class CredentialsTotp ( - var can: Map? = null, +data class CredentialsTotp( + var can: Map? = null, var created_at: String? = null, var is_disabled: Boolean? = null, var type: String? = null, var verified: Boolean? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -1250,11 +1249,11 @@ data class CredentialsTotp ( * @property subject The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. * @property header The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. */ -data class CustomWelcomeEmail ( +data class CustomWelcomeEmail( var enabled: Boolean? = null, var content: String? = null, var subject: String? = null, - var header: String? = null + var header: String? = null, ) : Serializable /** @@ -1308,8 +1307,8 @@ data class CustomWelcomeEmail ( * @property appearance * @property url Relative URL of the dashboard (read-only) */ -data class Dashboard ( - var can: Map? = null, +data class Dashboard( + var can: Map? = null, var content_favorite_id: String? = null, var content_metadata_id: String? = null, var description: String? = null, @@ -1357,16 +1356,16 @@ data class Dashboard ( var title_color: String? = null, var view_count: Long? = null, var appearance: DashboardAppearance? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** * @property dashboard_id Dashboard Id (read-only) * @property aggregate_table_lookml Aggregate Table LookML (read-only) */ -data class DashboardAggregateTableLookml ( +data class DashboardAggregateTableLookml( var dashboard_id: String? = null, - var aggregate_table_lookml: String? = null + var aggregate_table_lookml: String? = null, ) : Serializable /** @@ -1378,14 +1377,14 @@ data class DashboardAggregateTableLookml ( * @property tile_shadow Tile shadow on/off * @property key_color Key color */ -data class DashboardAppearance ( +data class DashboardAppearance( var page_side_margins: Long? = null, var page_background_color: String? = null, var tile_title_alignment: String? = null, var tile_space_between: Long? = null, var tile_background_color: String? = null, var tile_shadow: Boolean? = null, - var key_color: String? = null + var key_color: String? = null, ) : Serializable /** @@ -1406,8 +1405,8 @@ data class DashboardAppearance ( * @property slug Content Metadata Slug (read-only) * @property preferred_viewer The preferred route for viewing this dashboard (ie: dashboards or dashboards-next) (read-only) */ -data class DashboardBase ( - var can: Map? = null, +data class DashboardBase( + var can: Map? = null, var content_favorite_id: String? = null, var content_metadata_id: String? = null, var description: String? = null, @@ -1422,7 +1421,7 @@ data class DashboardBase ( var title: String? = null, var user_id: String? = null, var slug: String? = null, - var preferred_viewer: String? = null + var preferred_viewer: String? = null, ) : Serializable /** @@ -1457,8 +1456,8 @@ data class DashboardBase ( * @property subtitle_text_as_html Text tile subtitle text as Html (read-only) * @property extension_id Extension ID */ -data class DashboardElement ( - var can: Map? = null, +data class DashboardElement( + var can: Map? = null, var body_text: String? = null, var body_text_as_html: String? = null, var dashboard_id: String? = null, @@ -1487,7 +1486,7 @@ data class DashboardElement ( var rich_content_json: String? = null, var title_text_as_html: String? = null, var subtitle_text_as_html: String? = null, - var extension_id: String? = null + var extension_id: String? = null, ) : Serializable /** @@ -1508,8 +1507,8 @@ data class DashboardElement ( * @property required Whether the filter requires a value to run the dashboard * @property ui_config The visual configuration for this filter. Used to set up how the UI for this filter should appear. */ -data class DashboardFilter ( - var can: Map? = null, +data class DashboardFilter( + var can: Map? = null, var id: String? = null, var dashboard_id: String? = null, var name: String? = null, @@ -1519,12 +1518,12 @@ data class DashboardFilter ( var model: String? = null, var explore: String? = null, var dimension: String? = null, - var field: Map? = null, + var field: Map? = null, var row: Long? = null, var listens_to_filters: Array? = null, var allow_multiple_values: Boolean? = null, var required: Boolean? = null, - var ui_config: Map? = null + var ui_config: Map? = null, ) : Serializable /** @@ -1539,8 +1538,8 @@ data class DashboardFilter ( * @property dashboard_title Title extracted from the dashboard this layout represents. (read-only) * @property dashboard_layout_components Components (read-only) */ -data class DashboardLayout ( - var can: Map? = null, +data class DashboardLayout( + var can: Map? = null, var id: String? = null, var dashboard_id: String? = null, var type: String? = null, @@ -1549,7 +1548,7 @@ data class DashboardLayout ( var width: Long? = null, var deleted: Boolean? = null, var dashboard_title: String? = null, - var dashboard_layout_components: Array? = null + var dashboard_layout_components: Array? = null, ) : Serializable /** @@ -1566,8 +1565,8 @@ data class DashboardLayout ( * @property element_title_hidden Whether or not the dashboard element title is displayed. (read-only) * @property vis_type Visualization type, extracted from a query's vis_config (read-only) */ -data class DashboardLayoutComponent ( - var can: Map? = null, +data class DashboardLayoutComponent( + var can: Map? = null, var id: String? = null, var dashboard_layout_id: String? = null, var dashboard_element_id: String? = null, @@ -1578,7 +1577,7 @@ data class DashboardLayoutComponent ( var deleted: Boolean? = null, var element_title: String? = null, var element_title_hidden: Boolean? = null, - var vis_type: String? = null + var vis_type: String? = null, ) : Serializable /** @@ -1586,19 +1585,19 @@ data class DashboardLayoutComponent ( * @property folder_id (Write-Only) Id of the folder * @property lookml lookml of UDD */ -data class DashboardLookml ( +data class DashboardLookml( var dashboard_id: String? = null, var folder_id: String? = null, - var lookml: String? = null + var lookml: String? = null, ) : Serializable /** * @property state * @property fields Array of form fields. (read-only) */ -data class DataActionForm ( +data class DataActionForm( var state: DataActionUserState? = null, - var fields: Array? = null + var fields: Array? = null, ) : Serializable /** @@ -1612,7 +1611,7 @@ data class DataActionForm ( * @property required Whether or not the field is required. This is a user-interface hint. A user interface displaying this form should not submit it without a value for this field. The action server must also perform this validation. (read-only) * @property options If the form type is 'select', a list of options to be selected from. (read-only) */ -data class DataActionFormField ( +data class DataActionFormField( var name: String? = null, var label: String? = null, var description: String? = null, @@ -1621,25 +1620,25 @@ data class DataActionFormField ( var oauth_url: String? = null, var interactive: Boolean? = null, var required: Boolean? = null, - var options: Array? = null + var options: Array? = null, ) : Serializable /** * @property name Name (read-only) * @property label Human-readable label (read-only) */ -data class DataActionFormSelectOption ( +data class DataActionFormSelectOption( var name: String? = null, - var label: String? = null + var label: String? = null, ) : Serializable /** * @property action The JSON describing the data action. This JSON should be considered opaque and should be passed through unmodified from the query result it came from. * @property form_values User input for any form values the data action might use. */ -data class DataActionRequest ( - var action: Map? = null, - var form_values: Map? = null +data class DataActionRequest( + var action: Map? = null, + var form_values: Map? = null, ) : Serializable /** @@ -1649,21 +1648,21 @@ data class DataActionRequest ( * @property validation_errors * @property message Optional message returned by the data action server describing the state of the action that took place. This can be used to implement custom failure messages. If a failure is related to a particular form field, the server should send back a validation error instead. The Looker web UI does not currently display any message if the action indicates 'success', but may do so in the future. (read-only) */ -data class DataActionResponse ( +data class DataActionResponse( var webhook_id: String? = null, var success: Boolean? = null, var refresh_query: Boolean? = null, var validation_errors: ValidationError? = null, - var message: String? = null + var message: String? = null, ) : Serializable /** * @property data User state data (read-only) * @property refresh_time Time in seconds until the state needs to be refreshed (read-only) */ -data class DataActionUserState ( +data class DataActionUserState( var data: String? = null, - var refresh_time: Long? = null + var refresh_time: Long? = null, ) : Serializable /** @@ -1678,8 +1677,8 @@ data class DataActionUserState ( * @property trigger_value The value of the trigger when last checked. (read-only) * @property triggered_at UNIX timestamp at which this entry became triggered. Cannot be in the future. */ -data class Datagroup ( - var can: Map? = null, +data class Datagroup( + var can: Map? = null, var created_at: Long? = null, var id: String? = null, var model_name: String? = null, @@ -1688,7 +1687,7 @@ data class Datagroup ( var trigger_check_at: Long? = null, var trigger_error: String? = null, var trigger_value: String? = null, - var triggered_at: Long? = null + var triggered_at: Long? = null, ) : Serializable /** @@ -1740,8 +1739,8 @@ data class Datagroup ( * @property cost_estimate_enabled When true, query cost estimate will be displayed in explore. * @property pdt_api_control_enabled PDT builds on this connection can be kicked off and cancelled via API. */ -data class DBConnection ( - var can: Map? = null, +data class DBConnection( + var can: Map? = null, var name: String? = null, var dialect: Dialect? = null, var snippets: Array? = null, @@ -1787,7 +1786,7 @@ data class DBConnection ( var oauth_application_id: String? = null, var always_retry_failed_builds: Boolean? = null, var cost_estimate_enabled: Boolean? = null, - var pdt_api_control_enabled: Boolean? = null + var pdt_api_control_enabled: Boolean? = null, ) : Serializable /** @@ -1797,12 +1796,12 @@ data class DBConnection ( * @property snippets SQL Runner snippets for this connection (read-only) * @property pdts_enabled True if PDTs are enabled on this connection (read-only) */ -data class DBConnectionBase ( - var can: Map? = null, +data class DBConnectionBase( + var can: Map? = null, var name: String? = null, var dialect: Dialect? = null, var snippets: Array? = null, - var pdts_enabled: Boolean? = null + var pdts_enabled: Boolean? = null, ) : Serializable /** @@ -1819,7 +1818,7 @@ data class DBConnectionBase ( * @property jdbc_additional_params Additional params to add to JDBC connection string * @property after_connect_statements SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature */ -data class DBConnectionOverride ( +data class DBConnectionOverride( var context: String? = null, var host: String? = null, var port: String? = null, @@ -1831,7 +1830,7 @@ data class DBConnectionOverride ( var database: String? = null, var schema: String? = null, var jdbc_additional_params: String? = null, - var after_connect_statements: String? = null + var after_connect_statements: String? = null, ) : Serializable /** @@ -1841,12 +1840,12 @@ data class DBConnectionOverride ( * @property name Name of test (read-only) * @property status Result code of test (read-only) */ -data class DBConnectionTestResult ( - var can: Map? = null, +data class DBConnectionTestResult( + var can: Map? = null, var connection_string: String? = null, var message: String? = null, var name: String? = null, - var status: String? = null + var status: String? = null, ) : Serializable /** @@ -1855,18 +1854,18 @@ data class DBConnectionTestResult ( * @property installation_id Installation ID (read-only) * @property success Whether or not the test was successful (read-only) */ -data class DelegateOauthTest ( +data class DelegateOauthTest( var name: String? = null, var installation_target_id: String? = null, var installation_id: String? = null, - var success: Boolean? = null + var success: Boolean? = null, ) : Serializable /** * @property graph_text The graph structure in the dot language that can be rendered into an image. (read-only) */ -data class DependencyGraph ( - var graph_text: String? = null +data class DependencyGraph( + var graph_text: String? = null, ) : Serializable /** @@ -1876,7 +1875,7 @@ enum class DependencyStatus : Serializable { lock_optional, lock_required, lock_error, - install_none + install_none, } /** @@ -1884,7 +1883,7 @@ enum class DependencyStatus : Serializable { */ enum class DestinationType : Serializable { EMAIL, - ACTION_HUB + ACTION_HUB, } /** @@ -1892,7 +1891,7 @@ enum class DestinationType : Serializable { */ enum class DeviceType : Serializable { android, - ios + ios, } /** @@ -1911,7 +1910,7 @@ enum class DeviceType : Serializable { * @property supports_persistent_derived_tables Whether the dialect supports allowing Looker to build persistent derived tables (read-only) * @property has_ssl_support Does the database have client SSL support settable through the JDBC string explicitly? (read-only) */ -data class Dialect ( +data class Dialect( var name: String? = null, var label: String? = null, var supports_cost_estimate: Boolean? = null, @@ -1925,7 +1924,7 @@ data class Dialect ( var supports_inducer: Boolean? = null, var supports_multiple_databases: Boolean? = null, var supports_persistent_derived_tables: Boolean? = null, - var has_ssl_support: Boolean? = null + var has_ssl_support: Boolean? = null, ) : Serializable /** @@ -1938,15 +1937,15 @@ data class Dialect ( * @property name The name of the dialect (read-only) * @property supported_options */ -data class DialectInfo ( - var can: Map? = null, +data class DialectInfo( + var can: Map? = null, var default_max_connections: String? = null, var default_port: String? = null, var installed: Boolean? = null, var label: String? = null, var label_for_database_equivalent: String? = null, var name: String? = null, - var supported_options: DialectInfoOptions? = null + var supported_options: DialectInfoOptions? = null, ) : Serializable /** @@ -1972,7 +1971,7 @@ data class DialectInfo ( * @property username Username can be specified (read-only) * @property username_required Username is required (read-only) */ -data class DialectInfoOptions ( +data class DialectInfoOptions( var additional_params: Boolean? = null, var after_connect_statements: Boolean? = null, var analytical_view_dataset: Boolean? = null, @@ -1993,21 +1992,21 @@ data class DialectInfoOptions ( var tmp_table: Boolean? = null, var tns: Boolean? = null, var username: Boolean? = null, - var username_required: Boolean? = null + var username_required: Boolean? = null, ) : Serializable /** * @property is_enabled Whether or not digest emails are enabled */ -data class DigestEmails ( - var is_enabled: Boolean? = null +data class DigestEmails( + var is_enabled: Boolean? = null, ) : Serializable /** * @property configuration_delivered True if content was successfully generated and delivered */ -data class DigestEmailSend ( - var configuration_delivered: Boolean? = null +data class DigestEmailSend( + var configuration_delivered: Boolean? = null, ) : Serializable /** @@ -2016,18 +2015,18 @@ data class DigestEmailSend ( * @property type Type of palette * @property colors Array of colors in the palette */ -data class DiscretePalette ( +data class DiscretePalette( var id: String? = null, var label: String? = null, var type: String? = null, - var colors: Array? = null + var colors: Array? = null, ) : Serializable /** * @property egress_ip_addresses Egress IP addresses (read-only) */ -data class EgressIpAddresses ( - var egress_ip_addresses: Array? = null +data class EgressIpAddresses( + var egress_ip_addresses: Array? = null, ) : Serializable /** @@ -2043,7 +2042,7 @@ data class EgressIpAddresses ( * @property look_filters When true, filters are enabled on embedded Looks * @property hide_look_navigation When true, removes navigation to Looks from embedded dashboards and explores. */ -data class EmbedConfig ( +data class EmbedConfig( var domain_allowlist: Array? = null, var alert_url_allowlist: Array? = null, var alert_url_param_owner: String? = null, @@ -2054,7 +2053,7 @@ data class EmbedConfig ( var embed_content_management: Boolean? = null, var strict_sameorigin_for_login: Boolean? = null, var look_filters: Boolean? = null, - var hide_look_navigation: Boolean? = null + var hide_look_navigation: Boolean? = null, ) : Serializable /** @@ -2072,7 +2071,7 @@ data class EmbedConfig ( * @property embed_domain The domain of the server embedding the Looker IFRAME. This is an alternative to specifying the domain in the embedded domain allow list in the Looker embed admin page. * @property session_reference_token Token referencing the embed session and is used to generate new authentication, navigation and api tokens. */ -data class EmbedCookielessSessionAcquire ( +data class EmbedCookielessSessionAcquire( var session_length: Long? = null, var force_logout_login: Boolean? = null, var external_user_id: String? = null, @@ -2083,9 +2082,9 @@ data class EmbedCookielessSessionAcquire ( var models: Array? = null, var group_ids: Array? = null, var external_group_id: String? = null, - var user_attributes: Map? = null, + var user_attributes: Map? = null, var embed_domain: String? = null, - var session_reference_token: String? = null + var session_reference_token: String? = null, ) : Serializable /** @@ -2096,9 +2095,9 @@ data class EmbedCookielessSessionAcquire ( * @property api_token Token to used to call Looker APIs. * @property api_token_ttl Api token time to live in seconds. * @property session_reference_token Token referencing the actual embed session. It is used to generate new api, navigation and authentication tokens. api and navigation tokens are short lived and must be refreshed regularly. A new authentication token must be acquired for each IFRAME that is created. The session_reference_token should be kept secure, ideally in the embed hosts application server. - * @property session_reference_token_ttl Session reference token time to live in seconds. Note that this is the same as actual session. + * @property session_reference_token_ttl Session reference token time to live in seconds. Note that this is the same as actual embed session. The session is expired when the value is set to zero. It is important to note that the generate token endpoint does NOT return an error when the embed session has expired. If an embedding application needs to monitor expiration of embed sessions, check this property for a value of zero. */ -data class EmbedCookielessSessionAcquireResponse ( +data class EmbedCookielessSessionAcquireResponse( var authentication_token: String? = null, var authentication_token_ttl: Long? = null, var navigation_token: String? = null, @@ -2106,7 +2105,7 @@ data class EmbedCookielessSessionAcquireResponse ( var api_token: String? = null, var api_token_ttl: Long? = null, var session_reference_token: String? = null, - var session_reference_token_ttl: Long? = null + var session_reference_token_ttl: Long? = null, ) : Serializable /** @@ -2114,10 +2113,10 @@ data class EmbedCookielessSessionAcquireResponse ( * @property navigation_token Token used to load and navigate between Looker pages. * @property api_token Token to used to call Looker APIs. */ -data class EmbedCookielessSessionGenerateTokens ( +data class EmbedCookielessSessionGenerateTokens( var session_reference_token: String, var navigation_token: String? = null, - var api_token: String? = null + var api_token: String? = null, ) : Serializable /** @@ -2128,13 +2127,13 @@ data class EmbedCookielessSessionGenerateTokens ( * @property session_reference_token Token referencing the embed session and is used to generate new authentication, navigation and api tokens. * @property session_reference_token_ttl Session reference token time to live in seconds. Note that this is the same as actual session. */ -data class EmbedCookielessSessionGenerateTokensResponse ( +data class EmbedCookielessSessionGenerateTokensResponse( var navigation_token: String? = null, var navigation_token_ttl: Long? = null, var api_token: String? = null, var api_token_ttl: Long? = null, var session_reference_token: String, - var session_reference_token_ttl: Long? = null + var session_reference_token_ttl: Long? = null, ) : Serializable /** @@ -2142,10 +2141,10 @@ data class EmbedCookielessSessionGenerateTokensResponse ( * @property session_length Number of seconds the signed embed session will be valid after the embed session is started. Defaults to 300 seconds. Maximum session length accepted is 2592000 seconds (30 days). * @property force_logout_login When true, the embed session will purge any residual Looker login state (such as in browser cookies) before creating a new login state with the given embed user info. Defaults to true. */ -data class EmbedParams ( +data class EmbedParams( var target_url: String, var session_length: Long? = null, - var force_logout_login: Boolean? = null + var force_logout_login: Boolean? = null, ) : Serializable /** @@ -2157,14 +2156,14 @@ data class EmbedParams ( * @property user_id Id of user who created this secret (read-only) * @property secret_type Field to distinguish between SSO secrets and JWT secrets Valid values are: "SSO", "JWT". */ -data class EmbedSecret ( +data class EmbedSecret( var algorithm: String? = null, var created_at: String? = null, var enabled: Boolean? = null, var id: String? = null, var secret: String? = null, var user_id: String? = null, - var secret_type: SecretType? = null + var secret_type: SecretType? = null, ) : Serializable /** @@ -2183,7 +2182,7 @@ data class EmbedSecret ( * @property secret_id Id of the embed secret to use to sign this SSO url. If specified, the value must be an id of a valid (active) secret defined in the Looker instance. If not specified, the URL will be signed with the newest active embed secret defined in the Looker instance. * @property embed_domain Optional. URL of the domain hosting the signed embed URL. If provided and valid, the embed_domain will be added to the embed domain allowlist if it is not currently in the list */ -data class EmbedSsoParams ( +data class EmbedSsoParams( var target_url: String, var session_length: Long? = null, var force_logout_login: Boolean? = null, @@ -2195,25 +2194,25 @@ data class EmbedSsoParams ( var models: Array? = null, var group_ids: Array? = null, var external_group_id: String? = null, - var user_attributes: Map? = null, + var user_attributes: Map? = null, var secret_id: String? = null, - var embed_domain: String? = null + var embed_domain: String? = null, ) : Serializable /** * @property url The embed URL. Any modification to this string will make the URL unusable. (read-only) */ -data class EmbedUrlResponse ( - var url: String? = null +data class EmbedUrlResponse( + var url: String? = null, ) : Serializable /** * @property message Error details (read-only) * @property documentation_url Documentation link (read-only) */ -data class Error ( +data class Error( var message: String, - var documentation_url: String + var documentation_url: String, ) : Serializable /** @@ -2225,14 +2224,14 @@ data class Error ( * @property dialect_name The database dialect for this application. * @property created_at Creation time for this application (read-only) */ -data class ExternalOauthApplication ( - var can: Map? = null, +data class ExternalOauthApplication( + var can: Map? = null, var id: String? = null, var name: String? = null, var client_id: String? = null, var client_secret: String? = null, var dialect_name: String? = null, - var created_at: Date? = null + var created_at: Date? = null, ) : Serializable /** @@ -2240,7 +2239,7 @@ data class ExternalOauthApplication ( */ enum class FillStyle : Serializable { enumeration, - range + range, } /** @@ -2263,7 +2262,7 @@ enum class FillStyle : Serializable { * @property dashboards Dashboards (read-only) * @property looks Looks (read-only) */ -data class Folder ( +data class Folder( var name: String, var parent_id: String? = null, var id: String? = null, @@ -2279,9 +2278,9 @@ data class Folder ( var is_personal_descendant: Boolean? = null, var is_shared_root: Boolean? = null, var is_users_root: Boolean? = null, - var can: Map? = null, + var can: Map? = null, var dashboards: Array? = null, - var looks: Array? = null + var looks: Array? = null, ) : Serializable /** @@ -2302,7 +2301,7 @@ data class Folder ( * @property is_users_root Folder is the root user folder (read-only) * @property can Operations the current user is able to perform on this object (read-only) */ -data class FolderBase ( +data class FolderBase( var name: String, var parent_id: String? = null, var id: String? = null, @@ -2318,7 +2317,7 @@ data class FolderBase ( var is_personal_descendant: Boolean? = null, var is_shared_root: Boolean? = null, var is_users_root: Boolean? = null, - var can: Map? = null + var can: Map? = null, ) : Serializable /** @@ -2326,7 +2325,7 @@ data class FolderBase ( */ enum class Format : Serializable { topojson, - vector_tile_region + vector_tile_region, } /** @@ -2348,8 +2347,8 @@ enum class Format : Serializable { * @property ref The resolved ref of this branch. Updating `ref` results in `git reset --hard ``. * @property remote_ref The resolved ref of this branch remote. (read-only) */ -data class GitBranch ( - var can: Map? = null, +data class GitBranch( + var can: Map? = null, var name: String? = null, var remote: String? = null, var remote_name: String? = null, @@ -2365,7 +2364,7 @@ data class GitBranch ( var behind_count: Long? = null, var commit_at: Long? = null, var ref: String? = null, - var remote_ref: String? = null + var remote_ref: String? = null, ) : Serializable /** @@ -2373,10 +2372,10 @@ data class GitBranch ( * @property description Human readable string describing the test (read-only) * @property id A short string, uniquely naming this test (read-only) */ -data class GitConnectionTest ( - var can: Map? = null, +data class GitConnectionTest( + var can: Map? = null, var description: String? = null, - var id: String? = null + var id: String? = null, ) : Serializable /** @@ -2385,11 +2384,11 @@ data class GitConnectionTest ( * @property message Additional data from the test (read-only) * @property status Either 'pass' or 'fail' (read-only) */ -data class GitConnectionTestResult ( - var can: Map? = null, +data class GitConnectionTestResult( + var can: Map? = null, var id: String? = null, var message: String? = null, - var status: String? = null + var status: String? = null, ) : Serializable /** @@ -2398,11 +2397,11 @@ data class GitConnectionTestResult ( * @property revertable When true, the file can be reverted to an earlier state (read-only) * @property text Git description of the action (read-only) */ -data class GitStatus ( +data class GitStatus( var action: String? = null, var conflict: Boolean? = null, var revertable: Boolean? = null, - var text: String? = null + var text: String? = null, ) : Serializable /** @@ -2416,8 +2415,8 @@ data class GitStatus ( * @property name Name of group * @property user_count Number of users included in this group (read-only) */ -data class Group ( - var can: Map? = null, +data class Group( + var can: Map? = null, var can_add_to_content_metadata: Boolean? = null, var contains_current_user: Boolean? = null, var external_group_id: String? = null, @@ -2425,7 +2424,7 @@ data class Group ( var id: String? = null, var include_by_default: Boolean? = null, var name: String? = null, - var user_count: Long? = null + var user_count: Long? = null, ) : Serializable /** @@ -2441,8 +2440,8 @@ data class Group ( * @property parent_group_ids IDs of parents of this group (read-only) * @property role_ids Role IDs assigned to group (read-only) */ -data class GroupHierarchy ( - var can: Map? = null, +data class GroupHierarchy( + var can: Map? = null, var can_add_to_content_metadata: Boolean? = null, var contains_current_user: Boolean? = null, var external_group_id: String? = null, @@ -2452,7 +2451,7 @@ data class GroupHierarchy ( var name: String? = null, var user_count: Long? = null, var parent_group_ids: Array? = null, - var role_ids: Array? = null + var role_ids: Array? = null, ) : Serializable /** @@ -2460,8 +2459,8 @@ data class GroupHierarchy ( * * @property group_id Id of group (read-only) */ -data class GroupIdForGroupInclusion ( - var group_id: String? = null +data class GroupIdForGroupInclusion( + var group_id: String? = null, ) : Serializable /** @@ -2469,8 +2468,8 @@ data class GroupIdForGroupInclusion ( * * @property user_id Id of user (read-only) */ -data class GroupIdForGroupUserInclusion ( - var user_id: String? = null +data class GroupIdForGroupUserInclusion( + var user_id: String? = null, ) : Serializable /** @@ -2485,8 +2484,8 @@ data class GroupIdForGroupUserInclusion ( * @property user_count Number of users included in this group (read-only) * @property roles Roles assigned to group (read-only) */ -data class GroupSearch ( - var can: Map? = null, +data class GroupSearch( + var can: Map? = null, var can_add_to_content_metadata: Boolean? = null, var contains_current_user: Boolean? = null, var external_group_id: String? = null, @@ -2495,7 +2494,7 @@ data class GroupSearch ( var include_by_default: Boolean? = null, var name: String? = null, var user_count: Long? = null, - var roles: Array? = null + var roles: Array? = null, ) : Serializable /** @@ -2528,8 +2527,8 @@ data class GroupSearch ( * @property use_custom_url Whether the custom url should be used instead of the content url, if the item is associated with content * @property view_count Number of times content has been viewed, if present (read-only) */ -data class HomepageItem ( - var can: Map? = null, +data class HomepageItem( + var can: Map? = null, var content_created_by: String? = null, var content_favorite_id: String? = null, var content_metadata_id: String? = null, @@ -2556,7 +2555,7 @@ data class HomepageItem ( var use_custom_image: Boolean? = null, var use_custom_title: Boolean? = null, var use_custom_url: Boolean? = null, - var view_count: Long? = null + var view_count: Long? = null, ) : Serializable /** @@ -2574,8 +2573,8 @@ data class HomepageItem ( * @property description Description of the content found in this section. * @property visible_item_order ids of the homepage items the user can see in the order they should be displayed (read-only) */ -data class HomepageSection ( - var can: Map? = null, +data class HomepageSection( + var can: Map? = null, var created_at: Date? = null, var deleted_at: Date? = null, var detail_url: String? = null, @@ -2587,7 +2586,7 @@ data class HomepageSection ( var title: String? = null, var updated_at: Date? = null, var description: String? = null, - var visible_item_order: Array? = null + var visible_item_order: Array? = null, ) : Serializable /** @@ -2596,11 +2595,11 @@ data class HomepageSection ( * @property ref Ref for a remote dependency (read-only) * @property is_remote Flag signifying if a dependency is remote or local (read-only) */ -data class ImportedProject ( +data class ImportedProject( var name: String? = null, var url: String? = null, var ref: String? = null, - var is_remote: Boolean? = null + var is_remote: Boolean? = null, ) : Serializable /** @@ -2611,7 +2610,7 @@ data class ImportedProject ( * @property description Description of the integration. (read-only) * @property enabled Whether the integration is available to users. * @property params Array of params for the integration. - * @property supported_formats A list of data formats the integration supports. If unspecified, the default is all data formats. Valid values are: "txt", "csv", "inline_json", "json", "json_label", "json_detail", "json_detail_lite_stream", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png", "csv_zip". (read-only) + * @property supported_formats A list of data formats the integration supports. If unspecified, the default is all data formats. Valid values are: "txt", "csv", "inline_json", "json", "json_label", "json_detail", "json_detail_lite_stream", "json_bi", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png", "csv_zip". (read-only) * @property supported_action_types A list of action types the integration supports. Valid values are: "cell", "query", "dashboard", "none". (read-only) * @property supported_formattings A list of formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: "formatted", "unformatted". (read-only) * @property supported_visualization_formattings A list of visualization formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: "apply", "noapply". (read-only) @@ -2623,8 +2622,8 @@ data class ImportedProject ( * @property delegate_oauth Whether the integration uses delegate oauth, which allows federation between an integration installation scope specific entity (like org, group, and team, etc.) and Looker. (read-only) * @property installed_delegate_oauth_targets Whether the integration is available to users. */ -data class Integration ( - var can: Map? = null, +data class Integration( + var can: Map? = null, var id: String? = null, var integration_hub_id: String? = null, var label: String? = null, @@ -2641,7 +2640,7 @@ data class Integration ( var required_fields: Array? = null, var privacy_link: String? = null, var delegate_oauth: Boolean? = null, - var installed_delegate_oauth_targets: Array? = null + var installed_delegate_oauth_targets: Array? = null, ) : Serializable /** @@ -2657,8 +2656,8 @@ data class Integration ( * @property legal_agreement_required Whether the legal terms for the integration hub are required before use. (read-only) * @property legal_agreement_text The legal agreement text for this integration hub. (read-only) */ -data class IntegrationHub ( - var can: Map? = null, +data class IntegrationHub( + var can: Map? = null, var id: String? = null, var url: String? = null, var label: String? = null, @@ -2668,7 +2667,7 @@ data class IntegrationHub ( var has_authorization_token: Boolean? = null, var legal_agreement_signed: Boolean? = null, var legal_agreement_required: Boolean? = null, - var legal_agreement_text: String? = null + var legal_agreement_text: String? = null, ) : Serializable /** @@ -2683,7 +2682,7 @@ data class IntegrationHub ( * @property per_user When true, this parameter must be assigned to a user attribute in the admin panel (instead of a constant value), and that value may be updated by the user as part of the integration flow. (read-only) * @property delegate_oauth_url When present, the param represents the oauth url the user will be taken to. (read-only) */ -data class IntegrationParam ( +data class IntegrationParam( var name: String? = null, var label: String? = null, var description: String? = null, @@ -2693,7 +2692,7 @@ data class IntegrationParam ( var user_attribute_name: String? = null, var sensitive: Boolean? = null, var per_user: Boolean? = null, - var delegate_oauth_url: String? = null + var delegate_oauth_url: String? = null, ) : Serializable /** @@ -2701,10 +2700,10 @@ data class IntegrationParam ( * @property any_tag If present, supersedes 'tag' and matches a field that has any of the provided tags. (read-only) * @property all_tags If present, supersedes 'tag' and matches a field that has all of the provided tags. (read-only) */ -data class IntegrationRequiredField ( +data class IntegrationRequiredField( var tag: String? = null, var any_tag: Array? = null, - var all_tags: Array? = null + var all_tags: Array? = null, ) : Serializable /** @@ -2712,19 +2711,19 @@ data class IntegrationRequiredField ( * @property message A message representing the results of the test. (read-only) * @property delegate_oauth_result An array of connection test result for delegate oauth actions. (read-only) */ -data class IntegrationTestResult ( +data class IntegrationTestResult( var success: Boolean? = null, var message: String? = null, - var delegate_oauth_result: Array? = null + var delegate_oauth_result: Array? = null, ) : Serializable /** * @property can Operations the current user is able to perform on this object (read-only) * @property enabled If true and internal help resources content is not blank then the link for internal help resources will be shown in the help menu and the content displayed within Looker */ -data class InternalHelpResources ( - var can: Map? = null, - var enabled: Boolean? = null +data class InternalHelpResources( + var can: Map? = null, + var enabled: Boolean? = null, ) : Serializable /** @@ -2732,19 +2731,106 @@ data class InternalHelpResources ( * @property organization_name Text to display in the help menu item which will display the internal help resources * @property markdown_content Content to be displayed in the internal help resources page/modal */ -data class InternalHelpResourcesContent ( - var can: Map? = null, +data class InternalHelpResourcesContent( + var can: Map? = null, var organization_name: String? = null, - var markdown_content: String? = null + var markdown_content: String? = null, ) : Serializable /** * The type of the investigative content Valid values are: "dashboard". (Enum defined in Alert) */ enum class InvestigativeContentType : Serializable { - dashboard + dashboard, } +/** + * @property big_query_metadata + * @property fields + * @property pivots Pivots (read-only) + * @property has_subtotals If the query has subtotals (read-only) + * @property has_totals If the query has totals (read-only) + * @property columns_truncated If the query results hit the maximum column limit and additional columns were truncated (read-only) + * @property filter_expression Filter expression applied to the query results (read-only) + * @property filters Filters applied to the query results (read-only) + * @property sql Raw sql query. Null if user does not have permission to view sql (read-only) + * @property data Json query results (read-only) + */ +data class JsonBi( + var big_query_metadata: JsonBiBigQueryMetadata, + var fields: JsonBiFields, + var pivots: Array, + var has_subtotals: Boolean, + var has_totals: Boolean, + var columns_truncated: String, + var filter_expression: String, + var filters: Map, + var sql: String, + var data: Array, +) : Serializable + +/** + * @property total_bytes_processed Total bytes processed by the BigQuery job (read-only) + * @property backend_cache_hit Return whether or not query results were served from the BigQuery cache. (read-only) + */ +data class JsonBiBigQueryMetadata( + var total_bytes_processed: Long, + var backend_cache_hit: Boolean, +) : Serializable + +/** + * @property sql SQL expressions for the field (read-only) + * @property view Explore name (read-only) + * @property dimension_group Which dimension group created this dimension (read-only) + * @property category Dimension, Measure, etc. (read-only) + * @property field_group_label Field Group Label (read-only) + * @property name Field Name (read-only) + * @property type Field Type (read-only) + * @property view_label View Label (read-only) + * @property label Field Label (read-only) + * @property field_group_variant Field Group Variant (read-only) + * @property hidden If the field is marked as hidden in the Lookml (read-only) + * @property description Field Description (read-only) + */ +data class JsonBiField( + var sql: String, + var view: String, + var dimension_group: String, + var category: String, + var field_group_label: String, + var name: String, + var type: String, + var view_label: String, + var label: String, + var field_group_variant: String, + var hidden: Boolean, + var description: String, +) : Serializable + +/** + * @property dimensions Dimensions represent a column in a table, or a computed value based on some sort of column manipulation or combination (read-only) + * @property measures Measures are similar to aggregate functions in SQL (for example, COUNT, SUM, AVG) and represent information about multiple rows (read-only) + * @property pivots Pivots (read-only) + */ +data class JsonBiFields( + var dimensions: Array, + var measures: Array, + var pivots: Array, +) : Serializable + +/** + * @property key Pivot Column Value (read-only) + * @property data Pivot Data (read-only) + * @property sort_values Pivot Sort Values (read-only) + * @property is_total If the value is a total (read-only) + */ +data class JsonBiPivots( + var key: String, + var data: Map, + var sort_values: Map, + var is_total: Boolean, +) : Serializable + /** * @property can Operations the current user is able to perform on this object (read-only) * @property alternate_email_login_allowed Allow alternate email-based login via '/login/email' for admins and for specified users with the 'login_special_email' permission. This option is useful as a fallback during ldap setup, if ldap config problems occur later, or if you need to support some users who are not in your ldap directory. Looker email/password logins are always disabled for regular users when ldap is enabled. @@ -2790,8 +2876,8 @@ enum class InvestigativeContentType : Serializable { * @property allow_direct_roles Allows roles to be directly assigned to LDAP auth'd users. * @property url Link to get this item (read-only) */ -data class LDAPConfig ( - var can: Map? = null, +data class LDAPConfig( + var can: Map? = null, var alternate_email_login_allowed: Boolean? = null, var auth_password: String? = null, var auth_requires_role: Boolean? = null, @@ -2833,16 +2919,16 @@ data class LDAPConfig ( var allow_normal_group_membership: Boolean? = null, var allow_roles_from_normal_groups: Boolean? = null, var allow_direct_roles: Boolean? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** * @property severity Severity of the issue. Error or Warning (read-only) * @property message Message describing the issue (read-only) */ -data class LDAPConfigTestIssue ( +data class LDAPConfigTestIssue( var severity: String? = null, - var message: String? = null + var message: String? = null, ) : Serializable /** @@ -2854,14 +2940,14 @@ data class LDAPConfigTestIssue ( * @property user * @property url Link to ldap config (read-only) */ -data class LDAPConfigTestResult ( +data class LDAPConfigTestResult( var details: String? = null, var issues: Array? = null, var message: String? = null, var status: String? = null, var trace: String? = null, var user: LDAPUser? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -2872,13 +2958,13 @@ data class LDAPConfigTestResult ( * @property roles Looker Roles (read-only) * @property url Link to ldap config (read-only) */ -data class LDAPGroupRead ( +data class LDAPGroupRead( var id: String? = null, var looker_group_id: String? = null, var looker_group_name: String? = null, var name: String? = null, var roles: Array? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -2889,13 +2975,13 @@ data class LDAPGroupRead ( * @property role_ids Looker Role Ids * @property url Link to ldap config (read-only) */ -data class LDAPGroupWrite ( +data class LDAPGroupWrite( var id: String? = null, var looker_group_id: String? = null, var looker_group_name: String? = null, var name: String? = null, var role_ids: Array? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -2910,9 +2996,9 @@ data class LDAPGroupWrite ( * @property roles Array of user's roles (role names only) (read-only) * @property url Link to ldap config (read-only) */ -data class LDAPUser ( +data class LDAPUser( var all_emails: Array? = null, - var attributes: Map? = null, + var attributes: Map? = null, var email: String? = null, var first_name: String? = null, var groups: Array? = null, @@ -2920,7 +3006,7 @@ data class LDAPUser ( var ldap_dn: String? = null, var ldap_id: String? = null, var roles: Array? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -2929,11 +3015,11 @@ data class LDAPUser ( * @property user_attributes Looker User Attributes (read-only) * @property url Link to ldap config (read-only) */ -data class LDAPUserAttributeRead ( +data class LDAPUserAttributeRead( var name: String? = null, var required: Boolean? = null, var user_attributes: Array? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -2942,11 +3028,11 @@ data class LDAPUserAttributeRead ( * @property user_attribute_ids Looker User Attribute Ids * @property url Link to ldap config (read-only) */ -data class LDAPUserAttributeWrite ( +data class LDAPUserAttributeWrite( var name: String? = null, var required: Boolean? = null, var user_attribute_ids: Array? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -2964,8 +3050,8 @@ data class LDAPUserAttributeWrite ( * @property approximate_end_of_life_date Approximate date that this feature will be removed. (read-only) * @property has_disabled_on_upgrade Whether this legacy feature may have been automatically disabled when upgrading to the current version. (read-only) */ -data class LegacyFeature ( - var can: Map? = null, +data class LegacyFeature( + var can: Map? = null, var id: String? = null, var name: String? = null, var description: String? = null, @@ -2977,7 +3063,7 @@ data class LegacyFeature ( var documentation_url: String? = null, var approximate_disable_date: Date? = null, var approximate_end_of_life_date: Date? = null, - var has_disabled_on_upgrade: Boolean? = null + var has_disabled_on_upgrade: Boolean? = null, ) : Serializable /** @@ -2985,19 +3071,19 @@ data class LegacyFeature ( * @property native_name Name of Locale in its own language (read-only) * @property english_name Name of Locale in English (read-only) */ -data class Locale ( +data class Locale( var code: String? = null, var native_name: String? = null, - var english_name: String? = null + var english_name: String? = null, ) : Serializable /** * @property default_locale Default locale for localization (read-only) * @property localization_level Localization level - strict or permissive (read-only) */ -data class LocalizationSettings ( +data class LocalizationSettings( var default_locale: String? = null, - var localization_level: String? = null + var localization_level: String? = null, ) : Serializable /** @@ -3032,8 +3118,8 @@ data class LocalizationSettings ( * @property updated_at Time that the Look was updated. (read-only) * @property view_count Number of times viewed in the Looker web UI (read-only) */ -data class Look ( - var can: Map? = null, +data class Look( + var can: Map? = null, var content_metadata_id: String? = null, var id: String? = null, var title: String? = null, @@ -3062,7 +3148,7 @@ data class Look ( var folder: FolderBase? = null, var folder_id: String? = null, var updated_at: Date? = null, - var view_count: Long? = null + var view_count: Long? = null, ) : Serializable /** @@ -3072,12 +3158,23 @@ data class Look ( * @property title Look Title (read-only) * @property user_id User Id */ -data class LookBasic ( - var can: Map? = null, +data class LookBasic( + var can: Map? = null, var content_metadata_id: String? = null, var id: String? = null, var title: String? = null, - var user_id: String? = null + var user_id: String? = null, +) : Serializable + +/** + * @property label The name of the link as it would appear to users. (read-only) + * @property url URL the link will go to. (read-only) + * @property icon_url A URL containing an image file to display with a link. (read-only) + */ +data class LookmlFieldLink( + var label: String? = null, + var url: String? = null, + var icon_url: String? = null, ) : Serializable /** @@ -3090,15 +3187,15 @@ data class LookBasic ( * @property project_name Name of project containing the model * @property unlimited_db_connections Is this model allowed to use all current and future connections */ -data class LookmlModel ( - var can: Map? = null, +data class LookmlModel( + var can: Map? = null, var allowed_db_connection_names: Array? = null, var explores: Array? = null, var has_content: Boolean? = null, var label: String? = null, var name: String? = null, var project_name: String? = null, - var unlimited_db_connections: Boolean? = null + var unlimited_db_connections: Boolean? = null, ) : Serializable /** @@ -3142,7 +3239,7 @@ data class LookmlModel ( * @property supported_measure_types An array of items describing which custom measure types are supported for creating a custom measure 'based_on' each possible dimension type. (read-only) * @property always_join An array of joins that will always be included in the SQL for this explore, even if the user has not selected a field from the joined view. (read-only) */ -data class LookmlModelExplore ( +data class LookmlModelExplore( var id: String? = null, var name: String? = null, var description: String? = null, @@ -3181,43 +3278,43 @@ data class LookmlModelExplore ( var joins: Array? = null, var group_label: String? = null, var supported_measure_types: Array? = null, - var always_join: Array? = null + var always_join: Array? = null, ) : Serializable /** * @property field Field to be filtered (read-only) * @property user_attribute User attribute name (read-only) */ -data class LookmlModelExploreAccessFilter ( +data class LookmlModelExploreAccessFilter( var field: String? = null, - var user_attribute: String? = null + var user_attribute: String? = null, ) : Serializable /** * @property name Name (read-only) * @property value Value (read-only) */ -data class LookmlModelExploreAlias ( +data class LookmlModelExploreAlias( var name: String? = null, - var value: String? = null + var value: String? = null, ) : Serializable /** * @property name Name (read-only) * @property value Value (read-only) */ -data class LookmlModelExploreAlwaysFilter ( +data class LookmlModelExploreAlwaysFilter( var name: String? = null, - var value: String? = null + var value: String? = null, ) : Serializable /** * @property name Name (read-only) * @property value Value (read-only) */ -data class LookmlModelExploreConditionallyFilter ( +data class LookmlModelExploreConditionallyFilter( var name: String? = null, - var value: String? = null + var value: String? = null, ) : Serializable /** @@ -3226,11 +3323,11 @@ data class LookmlModelExploreConditionallyFilter ( * @property error_pos Error source location (read-only) * @property field_error Is this a field error (read-only) */ -data class LookmlModelExploreError ( +data class LookmlModelExploreError( var message: String? = null, var details: Any? = null, var error_pos: String? = null, - var field_error: Boolean? = null + var field_error: Boolean? = null, ) : Serializable /** @@ -3240,6 +3337,7 @@ data class LookmlModelExploreError ( * @property default_filter_value The default value that this field uses when filtering. Null if there is no default value. (read-only) * @property description Description (read-only) * @property dimension_group Dimension group if this field is part of a dimension group. If not, this will be null. (read-only) + * @property drill_fields Drill fields declared for this field in LookML or default drills for certain types. (read-only) * @property enumerations An array enumerating all the possible values that this field can contain. When null, there is no limit to the set of possible values this field can contain. (read-only) * @property error An error message indicating a problem with the definition of this field. If there are no errors, this will be null. (read-only) * @property field_group_label A label creating a grouping of fields. All fields with this label should be presented together when displayed in a UI. (read-only) @@ -3247,6 +3345,7 @@ data class LookmlModelExploreError ( * @property fill_style The style of dimension fill that is possible for this field. Null if no dimension fill is possible. Valid values are: "enumeration", "range". (read-only) * @property fiscal_month_offset An offset (in months) from the calendar start month to the fiscal start month defined in the LookML model this field belongs to. (read-only) * @property has_allowed_values Whether this field has a set of allowed_values specified in LookML. (read-only) + * @property has_drills_metadata Whether this field has links or drill fields defined. (read-only) * @property hidden Whether this field should be hidden from the user interface. (read-only) * @property is_filter Whether this field is a filter. (read-only) * @property is_fiscal Whether this field represents a fiscal time value. (read-only) @@ -3258,6 +3357,7 @@ data class LookmlModelExploreError ( * @property label_from_parameter The name of the parameter that will provide a parameterized label for this field, if available in the current context. (read-only) * @property label_short The human-readable label of the field, without the view label. (read-only) * @property lookml_link A URL linking to the definition of this field in the LookML IDE. (read-only) + * @property links Links associated with this field. (read-only) * @property map_layer * @property measure Whether this field is a measure. (read-only) * @property name Fully-qualified name of the field. (read-only) @@ -3289,13 +3389,14 @@ data class LookmlModelExploreError ( * @property times_used The number of times this field has been used in queries (read-only) * @property original_view The name of the view this field is defined in. This will be different than "view" when the view has been joined via a different name using the "from" parameter. (read-only) */ -data class LookmlModelExploreField ( +data class LookmlModelExploreField( var align: Align? = null, var can_filter: Boolean? = null, var category: Category? = null, var default_filter_value: String? = null, var description: String? = null, var dimension_group: String? = null, + var drill_fields: Array? = null, var enumerations: Array? = null, var error: String? = null, var field_group_label: String? = null, @@ -3303,6 +3404,7 @@ data class LookmlModelExploreField ( var fill_style: FillStyle? = null, var fiscal_month_offset: Long? = null, var has_allowed_values: Boolean? = null, + var has_drills_metadata: Boolean? = null, var hidden: Boolean? = null, var is_filter: Boolean? = null, var is_fiscal: Boolean? = null, @@ -3314,6 +3416,7 @@ data class LookmlModelExploreField ( var label_from_parameter: String? = null, var label_short: String? = null, var lookml_link: String? = null, + var links: Array? = null, var map_layer: LookmlModelExploreFieldMapLayer? = null, var measure: Boolean? = null, var name: String? = null, @@ -3343,16 +3446,16 @@ data class LookmlModelExploreField ( var dynamic: Boolean? = null, var week_start_day: WeekStartDay? = null, var times_used: Long? = null, - var original_view: String? = null + var original_view: String? = null, ) : Serializable /** * @property label Label (read-only) * @property value Value (read-only) */ -data class LookmlModelExploreFieldEnumeration ( +data class LookmlModelExploreFieldEnumeration( var label: String? = null, - var value: Any? = null + var value: Any? = null, ) : Serializable /** @@ -3367,7 +3470,7 @@ data class LookmlModelExploreFieldEnumeration ( * @property max_zoom_level The minimum zoom level that the map layer may be displayed at, for visualizations that support zooming. (read-only) * @property min_zoom_level The maximum zoom level that the map layer may be displayed at, for visualizations that support zooming. (read-only) */ -data class LookmlModelExploreFieldMapLayer ( +data class LookmlModelExploreFieldMapLayer( var url: String? = null, var name: String? = null, var feature_key: String? = null, @@ -3377,16 +3480,16 @@ data class LookmlModelExploreFieldMapLayer ( var format: Format? = null, var extents_json_url: String? = null, var max_zoom_level: Long? = null, - var min_zoom_level: Long? = null + var min_zoom_level: Long? = null, ) : Serializable /** * @property field Filter field name (read-only) * @property condition Filter condition value (read-only) */ -data class LookmlModelExploreFieldMeasureFilters ( +data class LookmlModelExploreFieldMeasureFilters( var field: String? = null, - var condition: String? = null + var condition: String? = null, ) : Serializable /** @@ -3395,29 +3498,29 @@ data class LookmlModelExploreFieldMeasureFilters ( * @property filters Array of filters (read-only) * @property parameters Array of parameters (read-only) */ -data class LookmlModelExploreFieldset ( +data class LookmlModelExploreFieldset( var dimensions: Array? = null, var measures: Array? = null, var filters: Array? = null, - var parameters: Array? = null + var parameters: Array? = null, ) : Serializable /** * @property value SQL Case label value (read-only) * @property condition SQL Case condition expression (read-only) */ -data class LookmlModelExploreFieldSqlCase ( +data class LookmlModelExploreFieldSqlCase( var value: String? = null, - var condition: String? = null + var condition: String? = null, ) : Serializable /** * @property name The type of time interval this field represents a grouping of. Valid values are: "day", "hour", "minute", "second", "millisecond", "microsecond", "week", "month", "quarter", "year". (read-only) * @property count The number of intervals this field represents a grouping of. (read-only) */ -data class LookmlModelExploreFieldTimeInterval ( +data class LookmlModelExploreFieldTimeInterval( var name: Name? = null, - var count: Long? = null + var count: Long? = null, ) : Serializable /** @@ -3435,7 +3538,7 @@ data class LookmlModelExploreFieldTimeInterval ( * @property type The join type: left_outer, full_outer, inner, or cross (read-only) * @property view_label Label to display in UI selectors (read-only) */ -data class LookmlModelExploreJoins ( +data class LookmlModelExploreJoins( var name: String? = null, var dependent_fields: Array? = null, var fields: Array? = null, @@ -3448,25 +3551,25 @@ data class LookmlModelExploreJoins ( var sql_on: String? = null, var sql_table_name: String? = null, var type: String? = null, - var view_label: String? = null + var view_label: String? = null, ) : Serializable /** * @property name Name (read-only) * @property value Value set (read-only) */ -data class LookmlModelExploreSet ( +data class LookmlModelExploreSet( var name: String? = null, - var value: Array? = null + var value: Array? = null, ) : Serializable /** * @property dimension_type (read-only) * @property measure_types (read-only) */ -data class LookmlModelExploreSupportedMeasureType ( +data class LookmlModelExploreSupportedMeasureType( var dimension_type: String? = null, - var measure_types: Array? = null + var measure_types: Array? = null, ) : Serializable /** @@ -3476,12 +3579,12 @@ data class LookmlModelExploreSupportedMeasureType ( * @property hidden Is this explore marked as hidden (read-only) * @property group_label Label used to group explores in the navigation menus (read-only) */ -data class LookmlModelNavExplore ( +data class LookmlModelNavExplore( var name: String? = null, var description: String? = null, var label: String? = null, var hidden: Boolean? = null, - var group_label: String? = null + var group_label: String? = null, ) : Serializable /** @@ -3493,14 +3596,14 @@ data class LookmlModelNavExplore ( * @property file Name of the LookML file containing this test. (read-only) * @property line Line number of this test in LookML. (read-only) */ -data class LookmlTest ( - var can: Map? = null, +data class LookmlTest( + var can: Map? = null, var model_name: String? = null, var name: String? = null, var explore_name: String? = null, var query_url_params: String? = null, var file: String? = null, - var line: Long? = null + var line: Long? = null, ) : Serializable /** @@ -3513,24 +3616,24 @@ data class LookmlTest ( * @property warnings A list of any warnings encountered by the test. (read-only) * @property success True if this test passsed without errors. (read-only) */ -data class LookmlTestResult ( - var can: Map? = null, +data class LookmlTestResult( + var can: Map? = null, var model_name: String? = null, var test_name: String? = null, var assertions_count: Long? = null, var assertions_failed: Long? = null, var errors: Array? = null, var warnings: Array? = null, - var success: Boolean? = null + var success: Boolean? = null, ) : Serializable /** * @property id Model Id (read-only) * @property label Model Label (read-only) */ -data class LookModel ( +data class LookModel( var id: String? = null, - var label: String? = null + var label: String? = null, ) : Serializable /** @@ -3566,8 +3669,8 @@ data class LookModel ( * @property view_count Number of times viewed in the Looker web UI (read-only) * @property dashboards Dashboards (read-only) */ -data class LookWithDashboards ( - var can: Map? = null, +data class LookWithDashboards( + var can: Map? = null, var content_metadata_id: String? = null, var id: String? = null, var title: String? = null, @@ -3597,7 +3700,7 @@ data class LookWithDashboards ( var folder_id: String? = null, var updated_at: Date? = null, var view_count: Long? = null, - var dashboards: Array? = null + var dashboards: Array? = null, ) : Serializable /** @@ -3634,8 +3737,8 @@ data class LookWithDashboards ( * @property query * @property url Url (read-only) */ -data class LookWithQuery ( - var can: Map? = null, +data class LookWithQuery( + var can: Map? = null, var content_metadata_id: String? = null, var id: String? = null, var title: String? = null, @@ -3666,7 +3769,7 @@ data class LookWithQuery ( var updated_at: Date? = null, var view_count: Long? = null, var query: Query? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -3675,11 +3778,11 @@ data class LookWithQuery ( * @property imports Imports for a project (read-only) * @property localization_settings */ -data class Manifest ( - var can: Map? = null, +data class Manifest( + var can: Map? = null, var name: String? = null, var imports: Array? = null, - var localization_settings: LocalizationSettings? = null + var localization_settings: LocalizationSettings? = null, ) : Serializable /** @@ -3687,28 +3790,28 @@ data class Manifest ( * @property update_looker_enabled Whether marketplace auto update is enabled for looker extensions * @property update_third_party_enabled Whether marketplace auto update is enabled for third party extensions */ -data class MarketplaceAutomation ( +data class MarketplaceAutomation( var install_enabled: Boolean? = null, var update_looker_enabled: Boolean? = null, - var update_third_party_enabled: Boolean? = null + var update_third_party_enabled: Boolean? = null, ) : Serializable /** * @property materialization_id The ID of the enqueued materialization task (read-only) * @property resp_text Detailed response in text format (read-only) */ -data class MaterializePDT ( +data class MaterializePDT( var materialization_id: String? = null, - var resp_text: String? = null + var resp_text: String? = null, ) : Serializable /** * @property field_name Field name to map onto in the merged results * @property source_field_name Field name from the source query */ -data class MergeFields ( +data class MergeFields( var field_name: String? = null, - var source_field_name: String? = null + var source_field_name: String? = null, ) : Serializable /** @@ -3723,8 +3826,8 @@ data class MergeFields ( * @property total Total * @property vis_config Visualization Config */ -data class MergeQuery ( - var can: Map? = null, +data class MergeQuery( + var can: Map? = null, var column_limit: String? = null, var dynamic_fields: String? = null, var id: String? = null, @@ -3733,27 +3836,29 @@ data class MergeQuery ( var sorts: Array? = null, var source_queries: Array? = null, var total: Boolean? = null, - var vis_config: Map? = null + var vis_config: Map? = null, ) : Serializable /** * @property merge_fields An array defining which fields of the source query are mapped onto fields of the merge query * @property name Display name * @property query_id Id of the query to merge + * @property query_slug Slug of the query to merge */ -data class MergeQuerySourceQuery ( +data class MergeQuerySourceQuery( var merge_fields: Array? = null, var name: String? = null, - var query_id: String? = null + var query_id: String? = null, + var query_slug: String? = null, ) : Serializable /** * @property feature_flag_name Specifies the name of feature flag. (read-only) * @property feature_flag_state Specifies the state of feature flag (read-only) */ -data class MobileFeatureFlags ( +data class MobileFeatureFlags( var feature_flag_name: String? = null, - var feature_flag_state: Boolean? = null + var feature_flag_state: Boolean? = null, ) : Serializable /** @@ -3764,13 +3869,13 @@ data class MobileFeatureFlags ( * @property dashboard_id ID of the dashboard on which the alert has been set (read-only) * @property query_slug Slug of the query which runs the alert queries. (read-only) */ -data class MobilePayload ( +data class MobilePayload( var title: String? = null, var alert_id: String, var investigative_content_id: String? = null, var dashboard_name: String? = null, var dashboard_id: String? = null, - var query_slug: String? = null + var query_slug: String? = null, ) : Serializable /** @@ -3778,10 +3883,10 @@ data class MobilePayload ( * @property mobile_app_integration Specifies whether mobile access for this instance is enabled. (read-only) * @property mobile_feature_flags Specifies feature flag and state relevant to mobile. (read-only) */ -data class MobileSettings ( +data class MobileSettings( var mobile_force_authentication: Boolean? = null, var mobile_app_integration: Boolean? = null, - var mobile_feature_flags: Array? = null + var mobile_feature_flags: Array? = null, ) : Serializable /** @@ -3789,10 +3894,10 @@ data class MobileSettings ( * @property device_token Specifies the device token * @property device_type Specifies type of device. Valid values are: "android", "ios". */ -data class MobileToken ( +data class MobileToken( var id: String? = null, var device_token: String, - var device_type: DeviceType + var device_type: DeviceType, ) : Serializable /** @@ -3800,10 +3905,10 @@ data class MobileToken ( * @property name (read-only) * @property value_formats Array of named value formats (read-only) */ -data class Model ( +data class Model( var connection: String? = null, var name: String? = null, - var value_formats: Array? = null + var value_formats: Array? = null, ) : Serializable /** @@ -3813,12 +3918,12 @@ data class Model ( * @property hit_limit True if this was a hit limit (read-only) * @property used_calcite_materialization True if calcite was used (read-only) */ -data class ModelFieldSuggestions ( +data class ModelFieldSuggestions( var suggestions: Array? = null, var error: String? = null, var from_cache: Boolean? = null, var hit_limit: Boolean? = null, - var used_calcite_materialization: Boolean? = null + var used_calcite_materialization: Boolean? = null, ) : Serializable /** @@ -3827,11 +3932,11 @@ data class ModelFieldSuggestions ( * @property name (read-only) * @property strict_value_format (read-only) */ -data class ModelNamedValueFormats ( +data class ModelNamedValueFormats( var format_string: String? = null, var label: String? = null, var name: String? = null, - var strict_value_format: Boolean? = null + var strict_value_format: Boolean? = null, ) : Serializable /** @@ -3843,23 +3948,23 @@ data class ModelNamedValueFormats ( * @property name Name of ModelSet * @property url Link to get this item (read-only) */ -data class ModelSet ( - var can: Map? = null, +data class ModelSet( + var can: Map? = null, var all_access: Boolean? = null, var built_in: Boolean? = null, var id: String? = null, var models: Array? = null, var name: String? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** * @property name Model name (read-only) * @property project_file_id Project file (read-only) */ -data class ModelsNotValidated ( +data class ModelsNotValidated( var name: String? = null, - var project_file_id: String? = null + var project_file_id: String? = null, ) : Serializable /** @@ -3875,7 +3980,7 @@ enum class Name : Serializable { week, month, quarter, - year + year, } /** @@ -3889,8 +3994,8 @@ enum class Name : Serializable { * @property tokens_invalid_before All auth codes, access tokens, and refresh tokens issued for this application prior to this date-time for ALL USERS will be invalid. (read-only) * @property activated_users All users who have been activated to use this app (read-only) */ -data class OauthClientApp ( - var can: Map? = null, +data class OauthClientApp( + var can: Map? = null, var client_guid: String? = null, var redirect_uri: String? = null, var display_name: String? = null, @@ -3898,7 +4003,7 @@ data class OauthClientApp ( var enabled: Boolean? = null, var group_id: String? = null, var tokens_invalid_before: Date? = null, - var activated_users: Array? = null + var activated_users: Array? = null, ) : Serializable /** @@ -3936,8 +4041,8 @@ data class OauthClientApp ( * @property allow_direct_roles Allows roles to be directly assigned to OIDC auth'd users. * @property url Link to get this item (read-only) */ -data class OIDCConfig ( - var can: Map? = null, +data class OIDCConfig( + var can: Map? = null, var alternate_email_login_allowed: Boolean? = null, var audience: String? = null, var auth_requires_role: Boolean? = null, @@ -3969,7 +4074,7 @@ data class OIDCConfig ( var allow_normal_group_membership: Boolean? = null, var allow_roles_from_normal_groups: Boolean? = null, var allow_direct_roles: Boolean? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -3979,12 +4084,12 @@ data class OIDCConfig ( * @property name Name of group in OIDC (read-only) * @property roles Looker Roles (read-only) */ -data class OIDCGroupRead ( +data class OIDCGroupRead( var id: String? = null, var looker_group_id: String? = null, var looker_group_name: String? = null, var name: String? = null, - var roles: Array? = null + var roles: Array? = null, ) : Serializable /** @@ -3994,12 +4099,12 @@ data class OIDCGroupRead ( * @property name Name of group in OIDC * @property role_ids Looker Role Ids */ -data class OIDCGroupWrite ( +data class OIDCGroupWrite( var id: String? = null, var looker_group_id: String? = null, var looker_group_name: String? = null, var name: String? = null, - var role_ids: Array? = null + var role_ids: Array? = null, ) : Serializable /** @@ -4007,10 +4112,10 @@ data class OIDCGroupWrite ( * @property required Required to be in OIDC assertion for login to be allowed to succeed (read-only) * @property user_attributes Looker User Attributes (read-only) */ -data class OIDCUserAttributeRead ( +data class OIDCUserAttributeRead( var name: String? = null, var required: Boolean? = null, - var user_attributes: Array? = null + var user_attributes: Array? = null, ) : Serializable /** @@ -4018,10 +4123,10 @@ data class OIDCUserAttributeRead ( * @property required Required to be in OIDC assertion for login to be allowed to succeed * @property user_attribute_ids Looker User Attribute Ids */ -data class OIDCUserAttributeWrite ( +data class OIDCUserAttributeWrite( var name: String? = null, var required: Boolean? = null, - var user_attribute_ids: Array? = null + var user_attribute_ids: Array? = null, ) : Serializable /** @@ -4031,12 +4136,12 @@ data class OIDCUserAttributeWrite ( * @property require_upperlower Require at least one uppercase and one lowercase letter * @property require_special Require at least one special character */ -data class PasswordConfig ( - var can: Map? = null, +data class PasswordConfig( + var can: Map? = null, var min_length: Long? = null, var require_numeric: Boolean? = null, var require_upperlower: Boolean? = null, - var require_special: Boolean? = null + var require_special: Boolean? = null, ) : Serializable /** @@ -4045,11 +4150,11 @@ data class PasswordConfig ( * @property parent Dependency parent symbol (read-only) * @property description Description (read-only) */ -data class Permission ( - var can: Map? = null, +data class Permission( + var can: Map? = null, var permission: String? = null, var parent: String? = null, - var description: String? = null + var description: String? = null, ) : Serializable /** @@ -4061,14 +4166,14 @@ data class Permission ( * @property permissions * @property url Link to get this item (read-only) */ -data class PermissionSet ( - var can: Map? = null, +data class PermissionSet( + var can: Map? = null, var all_access: Boolean? = null, var built_in: Boolean? = null, var id: String? = null, var name: String? = null, var permissions: Array? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -4076,7 +4181,7 @@ data class PermissionSet ( */ enum class PermissionType : Serializable { view, - edit + edit, } /** @@ -4096,7 +4201,7 @@ enum class PermissionType : Serializable { * @property alerts_links Remove Looker links from Alerts * @property folders_mentions Remove Looker mentions in home folder page when you don’t have any items saved */ -data class PrivatelabelConfiguration ( +data class PrivatelabelConfiguration( var logo_file: String? = null, var logo_url: String? = null, var favicon_file: String? = null, @@ -4111,7 +4216,7 @@ data class PrivatelabelConfiguration ( var setup_mentions: Boolean? = null, var alerts_logo: Boolean? = null, var alerts_links: Boolean? = null, - var folders_mentions: Boolean? = null + var folders_mentions: Boolean? = null, ) : Serializable /** @@ -4138,8 +4243,8 @@ data class PrivatelabelConfiguration ( * @property is_example If true the project is an example project and cannot be modified (read-only) * @property dependency_status Status of dependencies in your manifest & lockfile */ -data class Project ( - var can: Map? = null, +data class Project( + var can: Map? = null, var id: String? = null, var name: String? = null, var uses_git: Boolean? = null, @@ -4160,7 +4265,7 @@ data class Project ( var git_release_mgmt_enabled: Boolean? = null, var allow_warnings: Boolean? = null, var is_example: Boolean? = null, - var dependency_status: String? = null + var dependency_status: String? = null, ) : Serializable /** @@ -4177,7 +4282,7 @@ data class Project ( * @property params Error parameters (read-only) * @property sanitized_message A version of the error message that does not contain potentially sensitive information. Suitable for situations in which messages are stored or sent to consumers outside of Looker, such as external logs. Sanitized messages will display "(?)" where sensitive information would appear in the corresponding non-sanitized message (read-only) */ -data class ProjectError ( +data class ProjectError( var code: String? = null, var severity: String? = null, var kind: String? = null, @@ -4188,8 +4293,8 @@ data class ProjectError ( var model_id: String? = null, var explore: String? = null, var help_url: String? = null, - var params: Map? = null, - var sanitized_message: String? = null + var params: Map? = null, + var sanitized_message: String? = null, ) : Serializable /** @@ -4203,8 +4308,8 @@ data class ProjectError ( * @property editable State of editability for the file. (read-only) * @property git_status */ -data class ProjectFile ( - var can: Map? = null, +data class ProjectFile( + var can: Map? = null, var id: String? = null, var path: String? = null, var title: String? = null, @@ -4212,7 +4317,7 @@ data class ProjectFile ( var extension: String? = null, var mime_type: String? = null, var editable: Boolean? = null, - var git_status: GitStatus? = null + var git_status: GitStatus? = null, ) : Serializable /** @@ -4221,11 +4326,11 @@ data class ProjectFile ( * @property models_not_validated A list of models which were not fully validated (read-only) * @property computation_time Duration of project validation in seconds (read-only) */ -data class ProjectValidation ( +data class ProjectValidation( var errors: Array? = null, var project_digest: String? = null, var models_not_validated: Array? = null, - var computation_time: Float? = null + var computation_time: Float? = null, ) : Serializable /** @@ -4235,12 +4340,12 @@ data class ProjectValidation ( * @property computation_time Duration of project validation in seconds (read-only) * @property stale If true, the cached project validation results are no longer accurate because the project has changed since the cached results were calculated (read-only) */ -data class ProjectValidationCache ( +data class ProjectValidationCache( var errors: Array? = null, var project_digest: String? = null, var models_not_validated: Array? = null, var computation_time: Float? = null, - var stale: Boolean? = null + var stale: Boolean? = null, ) : Serializable /** @@ -4253,15 +4358,15 @@ data class ProjectValidationCache ( * @property git_branch * @property lookml_type The lookml syntax used by all files in this project (read-only) */ -data class ProjectWorkspace ( - var can: Map? = null, +data class ProjectWorkspace( + var can: Map? = null, var project_id: String? = null, var workspace_id: String? = null, var git_status: String? = null, var git_head: String? = null, var dependency_status: DependencyStatus? = null, var git_branch: GitBranch? = null, - var lookml_type: String? = null + var lookml_type: String? = null, ) : Serializable /** @@ -4271,7 +4376,7 @@ enum class PullRequestMode : Serializable { off, links, recommended, - required + required, } /** @@ -4302,15 +4407,15 @@ enum class PullRequestMode : Serializable { * @property query_timezone Query Timezone * @property has_table_calculations Has Table Calculations (read-only) */ -data class Query ( - var can: Map? = null, +data class Query( + var can: Map? = null, var id: String? = null, var model: String, var view: String, var fields: Array? = null, var pivots: Array? = null, var fill_fields: Array? = null, - var filters: Map? = null, + var filters: Map? = null, var filter_expression: String? = null, var sorts: Array? = null, var limit: String? = null, @@ -4318,8 +4423,8 @@ data class Query ( var total: Boolean? = null, var row_total: String? = null, var subtotals: Array? = null, - var vis_config: Map? = null, - var filter_config: Map? = null, + var vis_config: Map? = null, + var filter_config: Map? = null, var visible_ui_sections: String? = null, var slug: String? = null, var dynamic_fields: String? = null, @@ -4328,7 +4433,30 @@ data class Query ( var expanded_share_url: String? = null, var url: String? = null, var query_timezone: String? = null, - var has_table_calculations: Boolean? = null + var has_table_calculations: Boolean? = null, +) : Serializable + +/** + * @property json_bi + * @property json (read-only) + * @property json_detail (read-only) + * @property csv (read-only) + * @property txt (read-only) + * @property html (read-only) + * @property md (read-only) + * @property xlsx (read-only) + * @property sql (read-only) + */ +data class QueryFormats( + var json_bi: JsonBi? = null, + var json: String? = null, + var json_detail: String? = null, + var csv: String? = null, + var txt: String? = null, + var html: String? = null, + var md: String? = null, + var xlsx: String? = null, + var sql: String? = null, ) : Serializable /** @@ -4352,8 +4480,8 @@ data class Query ( * @property dashboard_id Id of dashboard associated with query. * @property result_format The data format of the query results. (read-only) */ -data class QueryTask ( - var can: Map? = null, +data class QueryTask( + var can: Map? = null, var id: String? = null, var query_id: String? = null, var query: Query? = null, @@ -4371,7 +4499,7 @@ data class QueryTask ( var result_source: String? = null, var look_id: String? = null, var dashboard_id: String? = null, - var result_format: String? = null + var result_format: String? = null, ) : Serializable /** @@ -4396,8 +4524,8 @@ data class QueryTask ( * @property user_id The user account permissions in which the render task will execute (read-only) * @property width Output width in pixels (read-only) */ -data class RenderTask ( - var can: Map? = null, +data class RenderTask( + var can: Map? = null, var created_at: String? = null, var dashboard_filters: String? = null, var dashboard_id: String? = null, @@ -4416,7 +4544,7 @@ data class RenderTask ( var status: String? = null, var status_detail: String? = null, var user_id: String? = null, - var width: Long? = null + var width: Long? = null, ) : Serializable /** @@ -4429,15 +4557,15 @@ data class RenderTask ( * @property ssh_public_key Public deploy key for SSH authentication. * @property is_configured Whether the credentials have been configured for the Git Repository. (read-only) */ -data class RepositoryCredential ( - var can: Map? = null, +data class RepositoryCredential( + var can: Map? = null, var id: String? = null, var root_project_id: String? = null, var remote_url: String? = null, var git_username: String? = null, var git_password: String? = null, var ssh_public_key: String? = null, - var is_configured: Boolean? = null + var is_configured: Boolean? = null, ) : Serializable /** @@ -4455,7 +4583,7 @@ enum class ResultFormat : Serializable { txt, xlsx, gsxml, - sql + sql, } /** @@ -4464,20 +4592,20 @@ enum class ResultFormat : Serializable { * @property name The name of the filterable thing (Query or Merged Results). (read-only) * @property listen array of dashboard_filter_name: and field: objects. (read-only) */ -data class ResultMakerFilterables ( +data class ResultMakerFilterables( var model: String? = null, var view: String? = null, var name: String? = null, - var listen: Array? = null + var listen: Array? = null, ) : Serializable /** * @property dashboard_filter_name The name of a dashboard filter to listen to. * @property field The name of the field in the filterable to filter with the value of the dashboard filter. */ -data class ResultMakerFilterablesListen ( +data class ResultMakerFilterablesListen( var dashboard_filter_name: String? = null, - var field: String? = null + var field: String? = null, ) : Serializable /** @@ -4492,7 +4620,7 @@ data class ResultMakerFilterablesListen ( * @property query * @property vis_config Vis config of the constituent Query, or Merge Query. (read-only) */ -data class ResultMakerWithIdVisConfigAndDynamicFields ( +data class ResultMakerWithIdVisConfigAndDynamicFields( var id: String? = null, var dynamic_fields: String? = null, var filterables: Array? = null, @@ -4502,7 +4630,7 @@ data class ResultMakerWithIdVisConfigAndDynamicFields ( var query_id: String? = null, var sql_query_id: String? = null, var query: Query? = null, - var vis_config: Map? = null + var vis_config: Map? = null, ) : Serializable /** @@ -4516,8 +4644,8 @@ data class ResultMakerWithIdVisConfigAndDynamicFields ( * @property url Link to get this item (read-only) * @property users_url Link to get list of users with this role (read-only) */ -data class Role ( - var can: Map? = null, +data class Role( + var can: Map? = null, var id: String? = null, var name: String? = null, var permission_set: PermissionSet? = null, @@ -4525,7 +4653,7 @@ data class Role ( var model_set: ModelSet? = null, var model_set_id: String? = null, var url: String? = null, - var users_url: String? = null + var users_url: String? = null, ) : Serializable /** @@ -4540,8 +4668,8 @@ data class Role ( * @property url Link to get this item (read-only) * @property users_url Link to get list of users with this role (read-only) */ -data class RoleSearch ( - var can: Map? = null, +data class RoleSearch( + var can: Map? = null, var id: String? = null, var name: String? = null, var permission_set: PermissionSet? = null, @@ -4550,7 +4678,7 @@ data class RoleSearch ( var model_set_id: String? = null, var user_count: Long? = null, var url: String? = null, - var users_url: String? = null + var users_url: String? = null, ) : Serializable /** @@ -4576,8 +4704,8 @@ data class RoleSearch ( * @property runtime Number of seconds elapsed running the Query (read-only) * @property sql SQL text of the query as run (read-only) */ -data class RunningQueries ( - var can: Map? = null, +data class RunningQueries( + var can: Map? = null, var id: String? = null, var user: UserPublic? = null, var query: Query? = null, @@ -4597,7 +4725,7 @@ data class RunningQueries ( var message: String? = null, var status: String? = null, var runtime: Double? = null, - var sql: String? = null + var sql: String? = null, ) : Serializable /** @@ -4635,8 +4763,8 @@ data class RunningQueries ( * @property allow_direct_roles Allows roles to be directly assigned to SAML auth'd users. * @property url Link to get this item (read-only) */ -data class SamlConfig ( - var can: Map? = null, +data class SamlConfig( + var can: Map? = null, var enabled: Boolean? = null, var idp_cert: String? = null, var idp_url: String? = null, @@ -4668,7 +4796,7 @@ data class SamlConfig ( var allow_normal_group_membership: Boolean? = null, var allow_roles_from_normal_groups: Boolean? = null, var allow_direct_roles: Boolean? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -4679,13 +4807,13 @@ data class SamlConfig ( * @property roles Looker Roles (read-only) * @property url Link to saml config (read-only) */ -data class SamlGroupRead ( +data class SamlGroupRead( var id: String? = null, var looker_group_id: String? = null, var looker_group_name: String? = null, var name: String? = null, var roles: Array? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -4696,13 +4824,13 @@ data class SamlGroupRead ( * @property role_ids Looker Role Ids * @property url Link to saml config (read-only) */ -data class SamlGroupWrite ( +data class SamlGroupWrite( var id: String? = null, var looker_group_id: String? = null, var looker_group_name: String? = null, var name: String? = null, var role_ids: Array? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -4711,11 +4839,11 @@ data class SamlGroupWrite ( * @property idp_url Identify Provider Url (read-only) * @property idp_cert Identify Provider Certificate (read-only) */ -data class SamlMetadataParseResult ( - var can: Map? = null, +data class SamlMetadataParseResult( + var can: Map? = null, var idp_issuer: String? = null, var idp_url: String? = null, - var idp_cert: String? = null + var idp_cert: String? = null, ) : Serializable /** @@ -4724,11 +4852,11 @@ data class SamlMetadataParseResult ( * @property user_attributes Looker User Attributes (read-only) * @property url Link to saml config (read-only) */ -data class SamlUserAttributeRead ( +data class SamlUserAttributeRead( var name: String? = null, var required: Boolean? = null, var user_attributes: Array? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -4737,11 +4865,11 @@ data class SamlUserAttributeRead ( * @property user_attribute_ids Looker User Attribute Ids * @property url Link to saml config (read-only) */ -data class SamlUserAttributeWrite ( +data class SamlUserAttributeWrite( var name: String? = null, var required: Boolean? = null, var user_attribute_ids: Array? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -4784,7 +4912,7 @@ data class SamlUserAttributeWrite ( * @property last_run_at When the ScheduledPlan was last run (read-only) * @property can Operations the current user is able to perform on this object (read-only) */ -data class ScheduledPlan ( +data class ScheduledPlan( var name: String? = null, var user_id: String? = null, var run_as_recipient: Boolean? = null, @@ -4822,7 +4950,7 @@ data class ScheduledPlan ( var user: UserPublic? = null, var next_run_at: Date? = null, var last_run_at: Date? = null, - var can: Map? = null + var can: Map? = null, ) : Serializable /** @@ -4838,7 +4966,7 @@ data class ScheduledPlan ( * @property secret_parameters (Write-Only) JSON object containing secret parameters for external scheduling. For Amazon S3, this requires a key and value for secret_access_key. For SFTP, this requires a key and value for password. * @property message Optional message to be included in scheduled emails */ -data class ScheduledPlanDestination ( +data class ScheduledPlanDestination( var id: String? = null, var scheduled_plan_id: String? = null, var format: String? = null, @@ -4849,16 +4977,16 @@ data class ScheduledPlanDestination ( var type: String? = null, var parameters: String? = null, var secret_parameters: String? = null, - var message: String? = null + var message: String? = null, ) : Serializable /** * @property name Schema name (read-only) * @property is_default True if this is the default schema (read-only) */ -data class Schema ( +data class Schema( var name: String? = null, - var is_default: Boolean? = null + var is_default: Boolean? = null, ) : Serializable /** @@ -4872,7 +5000,7 @@ data class Schema ( * @property column_size Column data size (read-only) * @property snippets SQL Runner snippets for this connection (read-only) */ -data class SchemaColumn ( +data class SchemaColumn( var name: String? = null, var sql_escaped_name: String? = null, var schema_name: String? = null, @@ -4881,7 +5009,7 @@ data class SchemaColumn ( var data_type_looker: String? = null, var description: String? = null, var column_size: Long? = null, - var snippets: Array? = null + var snippets: Array? = null, ) : Serializable /** @@ -4890,11 +5018,11 @@ data class SchemaColumn ( * @property schema_name Name of schema (read-only) * @property columns Columns for this schema (read-only) */ -data class SchemaColumns ( +data class SchemaColumns( var name: String? = null, var sql_escaped_name: String? = null, var schema_name: String? = null, - var columns: Array? = null + var columns: Array? = null, ) : Serializable /** @@ -4905,13 +5033,13 @@ data class SchemaColumns ( * @property external External reference??? (read-only) * @property snippets SQL Runner snippets for connection (read-only) */ -data class SchemaTable ( +data class SchemaTable( var name: String? = null, var sql_escaped_name: String? = null, var schema_name: String? = null, var rows: Long? = null, var external: String? = null, - var snippets: Array? = null + var snippets: Array? = null, ) : Serializable /** @@ -4920,11 +5048,11 @@ data class SchemaTable ( * @property tables Tables for this schema (read-only) * @property table_limit_hit True if the table limit was hit while retrieving tables in this schema (read-only) */ -data class SchemaTables ( +data class SchemaTables( var name: String? = null, var is_default: Boolean? = null, var tables: Array? = null, - var table_limit_hit: Boolean? = null + var table_limit_hit: Boolean? = null, ) : Serializable /** @@ -4932,7 +5060,7 @@ data class SchemaTables ( */ enum class SecretType : Serializable { SSO, - JWT + JWT, } /** @@ -4952,8 +5080,8 @@ enum class SecretType : Serializable { * @property expires_at Time when this session will expire (read-only) * @property url Link to get this item (read-only) */ -data class Session ( - var can: Map? = null, +data class Session( + var can: Map? = null, var id: String? = null, var ip_address: String? = null, var browser: String? = null, @@ -4967,7 +5095,7 @@ data class Session ( var sudo_user_id: String? = null, var created_at: String? = null, var expires_at: String? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -4978,13 +5106,13 @@ data class Session ( * @property use_inactivity_based_logout Enforce session logout for sessions that are inactive for 15 minutes. * @property track_session_location Track location of session when user logs in. */ -data class SessionConfig ( - var can: Map? = null, +data class SessionConfig( + var can: Map? = null, var allow_persistent_sessions: Boolean? = null, var session_minutes: Long? = null, var unlimited_sessions_per_user: Boolean? = null, var use_inactivity_based_logout: Boolean? = null, - var track_session_location: Boolean? = null + var track_session_location: Boolean? = null, ) : Serializable /** @@ -5007,8 +5135,10 @@ data class SessionConfig ( * @property embed_cookieless_v2 (DEPRECATED) Use embed_config.embed_cookieless_v2 instead. If embed_config.embed_cookieless_v2 is specified, it overrides this value. * @property embed_enabled True if embedding is enabled https://cloud.google.com/looker/docs/r/looker-core-feature-embed, false otherwise (read-only) * @property embed_config + * @property login_notification_enabled Login notification enabled (read-only) + * @property login_notification_text Login notification text (read-only) */ -data class Setting ( +data class Setting( var extension_framework_enabled: Boolean? = null, var extension_load_url_enabled: Boolean? = null, var marketplace_auto_install_enabled: Boolean? = null, @@ -5027,7 +5157,9 @@ data class Setting ( var email_domain_allowlist: Array? = null, var embed_cookieless_v2: Boolean? = null, var embed_enabled: Boolean? = null, - var embed_config: EmbedConfig? = null + var embed_config: EmbedConfig? = null, + var login_notification_enabled: Boolean? = null, + var login_notification_text: String? = null, ) : Serializable /** @@ -5035,10 +5167,10 @@ data class Setting ( * @property message Error message for node (read-only) * @property hostname Host name of node (read-only) */ -data class SmtpNodeStatus ( +data class SmtpNodeStatus( var is_valid: Boolean? = null, var message: String? = null, - var hostname: String? = null + var hostname: String? = null, ) : Serializable /** @@ -5051,7 +5183,7 @@ data class SmtpNodeStatus ( * @property ssl_version TLS version selected Valid values are: "TLSv1_1", "SSLv23", "TLSv1_2". * @property default_smtp Whether to enable built-in Looker SMTP */ -data class SmtpSettings ( +data class SmtpSettings( var address: String? = null, var from: String? = null, var user_name: String? = null, @@ -5059,7 +5191,7 @@ data class SmtpSettings ( var port: Long? = null, var enable_starttls_auto: Boolean? = null, var ssl_version: SslVersion? = null, - var default_smtp: Boolean? = null + var default_smtp: Boolean? = null, ) : Serializable /** @@ -5067,10 +5199,10 @@ data class SmtpSettings ( * @property node_count Total number of nodes in cluster (read-only) * @property node_status array of each node's status containing is_valid, message, hostname (read-only) */ -data class SmtpStatus ( +data class SmtpStatus( var is_valid: Boolean? = null, var node_count: Long? = null, - var node_status: Array? = null + var node_status: Array? = null, ) : Serializable /** @@ -5078,10 +5210,10 @@ data class SmtpStatus ( * @property label Label of the snippet (read-only) * @property sql SQL text of the snippet (read-only) */ -data class Snippet ( +data class Snippet( var name: String? = null, var label: String? = null, - var sql: String? = null + var sql: String? = null, ) : Serializable /** @@ -5089,10 +5221,10 @@ data class Snippet ( * @property id Unique Id (read-only) * @property signature Calcite signature (read-only) */ -data class SqlInterfaceQuery ( - var can: Map? = null, +data class SqlInterfaceQuery( + var can: Map? = null, var id: Long? = null, - var signature: String + var signature: String, ) : Serializable /** @@ -5100,17 +5232,17 @@ data class SqlInterfaceQuery ( * @property sql Original SQL request * @property jdbc_client Whether the query should be run for use in a JDBC Client. This changes the formatting of some datetime based values. */ -data class SqlInterfaceQueryCreate ( - var can: Map? = null, +data class SqlInterfaceQueryCreate( + var can: Map? = null, var sql: String, - var jdbc_client: Boolean? = null + var jdbc_client: Boolean? = null, ) : Serializable /** * @property results JDBC Metadata to inflate Avatica response classes. (read-only) */ -data class SqlInterfaceQueryMetadata ( - var results: String? = null +data class SqlInterfaceQueryMetadata( + var results: String? = null, ) : Serializable /** @@ -5129,8 +5261,8 @@ data class SqlInterfaceQueryMetadata ( * @property vis_config Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. * @property result_maker_id ID of the ResultMakerLookup entry. */ -data class SqlQuery ( - var can: Map? = null, +data class SqlQuery( + var can: Map? = null, var slug: String? = null, var last_runtime: Float? = null, var run_count: Long? = null, @@ -5142,8 +5274,8 @@ data class SqlQuery ( var creator: UserPublic? = null, var explore_url: String? = null, var plaintext: Boolean? = null, - var vis_config: Map? = null, - var result_maker_id: String? = null + var vis_config: Map? = null, + var result_maker_id: String? = null, ) : Serializable /** @@ -5153,19 +5285,19 @@ data class SqlQuery ( * @property sql SQL query * @property vis_config Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. */ -data class SqlQueryCreate ( +data class SqlQueryCreate( var connection_name: String? = null, var connection_id: String? = null, var model_name: String? = null, var sql: String? = null, - var vis_config: Map? = null + var vis_config: Map? = null, ) : Serializable /** * @property public_key The SSH public key created for this instance (read-only) */ -data class SshPublicKey ( - var public_key: String? = null +data class SshPublicKey( + var public_key: String? = null, ) : Serializable /** @@ -5179,7 +5311,7 @@ data class SshPublicKey ( * @property public_key The SSH public key created for this instance (read-only) * @property status The current connection status to this SSH Server (read-only) */ -data class SshServer ( +data class SshServer( var ssh_server_id: String? = null, var ssh_server_name: String? = null, var ssh_server_host: String? = null, @@ -5188,7 +5320,7 @@ data class SshServer ( var finger_print: String? = null, var sha_finger_print: String? = null, var public_key: String? = null, - var status: String? = null + var status: String? = null, ) : Serializable /** @@ -5204,7 +5336,7 @@ data class SshServer ( * @property database_port Port that the Database Server is listening on * @property status Current connection status for this Tunnel (read-only) */ -data class SshTunnel ( +data class SshTunnel( var tunnel_id: String? = null, var ssh_server_id: String? = null, var ssh_server_name: String? = null, @@ -5215,7 +5347,7 @@ data class SshTunnel ( var local_host_port: Long? = null, var database_host: String? = null, var database_port: Long? = null, - var status: String? = null + var status: String? = null, ) : Serializable /** @@ -5224,16 +5356,16 @@ data class SshTunnel ( enum class SslVersion : Serializable { TLSv1_1, SSLv23, - TLSv1_2 + TLSv1_2, } /** * @property emails An array of emails to add to the Allowlist * @property reason Reason for adding emails to the Allowlist */ -data class SupportAccessAddEntries ( +data class SupportAccessAddEntries( var emails: Array? = null, - var reason: String? = null + var reason: String? = null, ) : Serializable /** @@ -5243,28 +5375,28 @@ data class SupportAccessAddEntries ( * @property reason Reason the Email is included in the Allowlist * @property created_date Date the Email was added to the Allowlist (read-only) */ -data class SupportAccessAllowlistEntry ( +data class SupportAccessAllowlistEntry( var id: String? = null, var email: String? = null, var full_name: String? = null, var reason: String? = null, - var created_date: Date? = null + var created_date: Date? = null, ) : Serializable /** * @property duration_in_seconds Duration Support Access will remain enabled */ -data class SupportAccessEnable ( - var duration_in_seconds: Long +data class SupportAccessEnable( + var duration_in_seconds: Long, ) : Serializable /** * @property open Whether or not Support Access is open (read-only) * @property open_until Time that Support Access will expire (read-only) */ -data class SupportAccessStatus ( +data class SupportAccessStatus( var open: Boolean? = null, - var open_until: Date? = null + var open_until: Date? = null, ) : Serializable /** @@ -5274,7 +5406,7 @@ enum class SupportedActionTypes : Serializable { cell, query, dashboard, - none + none, } /** @@ -5282,11 +5414,11 @@ enum class SupportedActionTypes : Serializable { */ enum class SupportedDownloadSettings : Serializable { push, - url + url, } /** - * A list of data formats the integration supports. If unspecified, the default is all data formats. Valid values are: "txt", "csv", "inline_json", "json", "json_label", "json_detail", "json_detail_lite_stream", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png", "csv_zip". (Enum defined in Integration) + * A list of data formats the integration supports. If unspecified, the default is all data formats. Valid values are: "txt", "csv", "inline_json", "json", "json_label", "json_detail", "json_detail_lite_stream", "json_bi", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", "wysiwyg_png", "csv_zip". (Enum defined in Integration) */ enum class SupportedFormats : Serializable { txt, @@ -5296,12 +5428,13 @@ enum class SupportedFormats : Serializable { json_label, json_detail, json_detail_lite_stream, + json_bi, xlsx, html, wysiwyg_pdf, assembled_pdf, wysiwyg_png, - csv_zip + csv_zip, } /** @@ -5309,7 +5442,7 @@ enum class SupportedFormats : Serializable { */ enum class SupportedFormattings : Serializable { formatted, - unformatted + unformatted, } /** @@ -5317,7 +5450,7 @@ enum class SupportedFormattings : Serializable { */ enum class SupportedVisualizationFormattings : Serializable { apply, - noapply + noapply, } /** @@ -5328,13 +5461,13 @@ enum class SupportedVisualizationFormattings : Serializable { * @property name Name of theme. Can only be alphanumeric and underscores. * @property settings */ -data class Theme ( - var can: Map? = null, +data class Theme( + var can: Map? = null, var begin_at: Date? = null, var end_at: Date? = null, var id: String? = null, var name: String? = null, - var settings: ThemeSettings? = null + var settings: ThemeSettings? = null, ) : Serializable /** @@ -5384,7 +5517,7 @@ data class Theme ( * @property row_gap_size The horizontal gap/gutter size between tiles. * @property border_radius The border radius for tiles. */ -data class ThemeSettings ( +data class ThemeSettings( var background_color: String? = null, var base_font_size: String? = null, var color_collection_id: String? = null, @@ -5429,7 +5562,7 @@ data class ThemeSettings ( var tile_title_font_size: String? = null, var column_gap_size: String? = null, var row_gap_size: String? = null, - var border_radius: String? = null + var border_radius: String? = null, ) : Serializable /** @@ -5437,10 +5570,10 @@ data class ThemeSettings ( * @property label Description of timezone (read-only) * @property group Timezone group (e.g Common, Other, etc.) (read-only) */ -data class Timezone ( +data class Timezone( var value: String? = null, var label: String? = null, - var group: String? = null + var group: String? = null, ) : Serializable /** @@ -5449,20 +5582,20 @@ data class Timezone ( * @property content_type MIME type of content. This can only be used to override content that is detected as text/plain. Needed to set application/json content types, which are analyzed as plain text. * @property version Version number of the stored value. The version must be provided for any updates to an existing artifact. (read-only) */ -data class UpdateArtifact ( +data class UpdateArtifact( var key: String, var value: String, var content_type: String? = null, - var version: Long? = null + var version: Long? = null, ) : Serializable /** * @property name Unique Name * @property parent_id Id of Parent. If the parent id is null, this is a root-level entry */ -data class UpdateFolder ( +data class UpdateFolder( var name: String? = null, - var parent_id: String? = null + var parent_id: String? = null, ) : Serializable /** @@ -5504,8 +5637,8 @@ data class UpdateFolder ( * @property is_iam_admin User is an IAM Admin - only available in Looker (Google Cloud core) (read-only) * @property url Link to get this item (read-only) */ -data class User ( - var can: Map? = null, +data class User( + var can: Map? = null, var avatar_url: String? = null, var avatar_url_without_sizing: String? = null, var credentials_api3: Array? = null, @@ -5533,7 +5666,7 @@ data class User ( var presumed_looker_employee: Boolean? = null, var role_ids: Array? = null, var sessions: Array? = null, - var ui_state: Map? = null, + var ui_state: Map? = null, var verified_looker_employee: Boolean? = null, var roles_externally_managed: Boolean? = null, var allow_direct_roles: Boolean? = null, @@ -5541,7 +5674,7 @@ data class User ( var allow_roles_from_normal_groups: Boolean? = null, var embed_group_folder_id: String? = null, var is_iam_admin: Boolean? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -5549,7 +5682,7 @@ data class User ( * @property id Unique Id (read-only) * @property name Name of user attribute * @property label Human-friendly label for user attribute - * @property type Type of user attribute ("string", "number", "datetime", "yesno", "zipcode") + * @property type Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") * @property default_value Default value for when no value is set on the user * @property is_system Attribute is a system default (read-only) * @property is_permanent Attribute is permanent and cannot be deleted (read-only) @@ -5558,8 +5691,8 @@ data class User ( * @property user_can_edit Users can change the value of this attribute for themselves * @property hidden_value_domain_whitelist Destinations to which a hidden attribute may be sent. Once set, cannot be edited. */ -data class UserAttribute ( - var can: Map? = null, +data class UserAttribute( + var can: Map? = null, var id: String? = null, var name: String, var label: String, @@ -5570,7 +5703,7 @@ data class UserAttribute ( var value_is_hidden: Boolean? = null, var user_can_view: Boolean? = null, var user_can_edit: Boolean? = null, - var hidden_value_domain_whitelist: String? = null + var hidden_value_domain_whitelist: String? = null, ) : Serializable /** @@ -5585,7 +5718,7 @@ enum class UserAttributeFilterTypes : Serializable { datetime, relative_url, yesno, - zipcode + zipcode, } /** @@ -5599,14 +5732,14 @@ enum class UserAttributeFilterTypes : Serializable { * @property rank Precedence for resolving value for user (read-only) * @property value Value of user attribute for group (read-only) */ -data class UserAttributeGroupValue ( - var can: Map? = null, +data class UserAttributeGroupValue( + var can: Map? = null, var id: String? = null, var group_id: String? = null, var user_attribute_id: String? = null, var value_is_hidden: Boolean? = null, var rank: Long? = null, - var value: String? = null + var value: String? = null, ) : Serializable /** @@ -5622,8 +5755,8 @@ data class UserAttributeGroupValue ( * @property source How user got this value for this attribute (read-only) * @property hidden_value_domain_whitelist If this user attribute is hidden, allowed list of destinations to which it may be sent. (read-only) */ -data class UserAttributeWithValue ( - var can: Map? = null, +data class UserAttributeWithValue( + var can: Map? = null, var name: String? = null, var label: String? = null, var rank: Long? = null, @@ -5633,14 +5766,14 @@ data class UserAttributeWithValue ( var value_is_hidden: Boolean? = null, var user_attribute_id: String? = null, var source: String? = null, - var hidden_value_domain_whitelist: String? = null + var hidden_value_domain_whitelist: String? = null, ) : Serializable /** * @property email Email Address */ -data class UserEmailOnly ( - var email: String +data class UserEmailOnly( + var email: String, ) : Serializable /** @@ -5655,8 +5788,8 @@ data class UserEmailOnly ( * @property fail_count Number of failures that triggered the lockout (read-only) * @property lockout_at Time when lockout was triggered (read-only) */ -data class UserLoginLockout ( - var can: Map? = null, +data class UserLoginLockout( + var can: Map? = null, var key: String? = null, var auth_type: String? = null, var ip: String? = null, @@ -5665,7 +5798,7 @@ data class UserLoginLockout ( var full_name: String? = null, var email: String? = null, var fail_count: Long? = null, - var lockout_at: Date? = null + var lockout_at: Date? = null, ) : Serializable /** @@ -5677,14 +5810,14 @@ data class UserLoginLockout ( * @property avatar_url URL for the avatar image (may be generic) (read-only) * @property url Link to get this item (read-only) */ -data class UserPublic ( - var can: Map? = null, +data class UserPublic( + var can: Map? = null, var id: String? = null, var first_name: String? = null, var last_name: String? = null, var display_name: String? = null, var avatar_url: String? = null, - var url: String? = null + var url: String? = null, ) : Serializable /** @@ -5692,10 +5825,10 @@ data class UserPublic ( * @property errors Error detail array (read-only) * @property documentation_url Documentation link (read-only) */ -data class ValidationError ( +data class ValidationError( var message: String, var errors: Array? = null, - var documentation_url: String + var documentation_url: String, ) : Serializable /** @@ -5704,11 +5837,11 @@ data class ValidationError ( * @property message Error info message (read-only) * @property documentation_url Documentation link (read-only) */ -data class ValidationErrorDetail ( +data class ValidationErrorDetail( var field: String? = null, var code: String? = null, var message: String? = null, - var documentation_url: String + var documentation_url: String, ) : Serializable /** @@ -5721,7 +5854,7 @@ enum class WeekStartDay : Serializable { thursday, friday, saturday, - sunday + sunday, } /** @@ -5729,10 +5862,10 @@ enum class WeekStartDay : Serializable { * @property subject The subject that would be sent for the custom welcome email * @property header The header that would be sent in the body of a custom welcome email */ -data class WelcomeEmailTest ( +data class WelcomeEmailTest( var content: String? = null, var subject: String? = null, - var header: String? = null + var header: String? = null, ) : Serializable /** @@ -5753,7 +5886,7 @@ data class WelcomeEmailTest ( * @property alerts_links Remove Looker links from Alerts * @property folders_mentions Remove Looker mentions in home folder page when you don’t have any items saved */ -data class WhitelabelConfiguration ( +data class WhitelabelConfiguration( var id: String? = null, var logo_file: String? = null, var logo_url: String? = null, @@ -5769,7 +5902,7 @@ data class WhitelabelConfiguration ( var setup_mentions: Boolean? = null, var alerts_logo: Boolean? = null, var alerts_links: Boolean? = null, - var folders_mentions: Boolean? = null + var folders_mentions: Boolean? = null, ) : Serializable /** @@ -5777,10 +5910,10 @@ data class WhitelabelConfiguration ( * @property id The unique id of this user workspace. Predefined workspace ids include "production" and "dev" (read-only) * @property projects The local state of each project in the workspace (read-only) */ -data class Workspace ( - var can: Map? = null, +data class Workspace( + var can: Map? = null, var id: String? = null, - var projects: Array? = null + var projects: Array? = null, ) : Serializable /** @@ -5810,7 +5943,7 @@ data class Workspace ( * @property threshold Value of the alert threshold * @property time_series_condition_state */ -data class WriteAlert ( +data class WriteAlert( var applied_dashboard_filters: Array? = null, var comparison_type: ComparisonType, var cron: String, @@ -5832,7 +5965,7 @@ data class WriteAlert ( var lookml_link_id: String? = null, var owner_id: String, var threshold: Double, - var time_series_condition_state: AlertConditionState? = null + var time_series_condition_state: AlertConditionState? = null, ) : Serializable /** @@ -5841,8 +5974,8 @@ data class WriteAlert ( * * @property workspace_id The id of active workspace for this session */ -data class WriteApiSession ( - var workspace_id: String? = null +data class WriteApiSession( + var workspace_id: String? = null, ) : Serializable /** @@ -5855,12 +5988,12 @@ data class WriteApiSession ( * @property custom_s3_key (Write-Only) AWS S3 key used for custom-s3 backups * @property custom_s3_secret (Write-Only) AWS S3 secret used for custom-s3 backups */ -data class WriteBackupConfiguration ( +data class WriteBackupConfiguration( var type: String? = null, var custom_s3_bucket: String? = null, var custom_s3_bucket_region: String? = null, var custom_s3_key: String? = null, - var custom_s3_secret: String? = null + var custom_s3_secret: String? = null, ) : Serializable /** @@ -5872,11 +6005,11 @@ data class WriteBackupConfiguration ( * @property section_order ids of the board sections in the order they should be displayed * @property title Title of the board */ -data class WriteBoard ( +data class WriteBoard( var deleted_at: Date? = null, var description: String? = null, var section_order: Array? = null, - var title: String? = null + var title: String? = null, ) : Serializable /** @@ -5897,7 +6030,7 @@ data class WriteBoard ( * @property custom_image_data_base64 (Write-Only) base64 encoded image data * @property use_custom_image Whether the custom image should be used instead of the content image, if the item is associated with content */ -data class WriteBoardItem ( +data class WriteBoardItem( var custom_description: String? = null, var custom_title: String? = null, var custom_url: String? = null, @@ -5910,7 +6043,7 @@ data class WriteBoardItem ( var use_custom_title: Boolean? = null, var use_custom_url: Boolean? = null, var custom_image_data_base64: String? = null, - var use_custom_image: Boolean? = null + var use_custom_image: Boolean? = null, ) : Serializable /** @@ -5923,12 +6056,12 @@ data class WriteBoardItem ( * @property item_order ids of the board items in the order they should be displayed * @property title Name of row */ -data class WriteBoardSection ( +data class WriteBoardSection( var deleted_at: Date? = null, var description: String? = null, var board_id: String? = null, var item_order: Array? = null, - var title: String? = null + var title: String? = null, ) : Serializable /** @@ -5940,11 +6073,11 @@ data class WriteBoardSection ( * @property sequentialPalettes Array of discrete palette definitions * @property divergingPalettes Array of diverging palette definitions */ -data class WriteColorCollection ( +data class WriteColorCollection( var label: String? = null, var categoricalPalettes: Array? = null, var sequentialPalettes: Array? = null, - var divergingPalettes: Array? = null + var divergingPalettes: Array? = null, ) : Serializable /** @@ -5958,11 +6091,11 @@ data class WriteColorCollection ( * @property dashboard Dynamic writeable type for DashboardBase removes: * can, content_favorite_id, content_metadata_id, description, hidden, id, model, query_timezone, readonly, refresh_interval, refresh_interval_to_i, title, user_id, slug, preferred_viewer */ -data class WriteContentFavorite ( +data class WriteContentFavorite( var user_id: String? = null, var content_metadata_id: String? = null, var look: WriteLookBasic? = null, - var dashboard: WriteDashboardBase? = null + var dashboard: WriteDashboardBase? = null, ) : Serializable /** @@ -5971,8 +6104,8 @@ data class WriteContentFavorite ( * * @property inherits Whether content inherits its access levels from parent */ -data class WriteContentMeta ( - var inherits: Boolean? = null +data class WriteContentMeta( + var inherits: Boolean? = null, ) : Serializable /** @@ -5993,7 +6126,7 @@ data class WriteContentMeta ( * @property required Whether the filter requires a value to run the dashboard * @property ui_config The visual configuration for this filter. Used to set up how the UI for this filter should appear. */ -data class WriteCreateDashboardFilter ( +data class WriteCreateDashboardFilter( var dashboard_id: String, var name: String, var title: String, @@ -6006,7 +6139,7 @@ data class WriteCreateDashboardFilter ( var listens_to_filters: Array? = null, var allow_multiple_values: Boolean? = null, var required: Boolean? = null, - var ui_config: Map? = null + var ui_config: Map? = null, ) : Serializable /** @@ -6020,13 +6153,13 @@ data class WriteCreateDashboardFilter ( * @property look_id Id of look associated with query. * @property dashboard_id Id of dashboard associated with query. */ -data class WriteCreateQueryTask ( +data class WriteCreateQueryTask( var query_id: String, var result_format: ResultFormat, var source: String? = null, var deferred: Boolean? = null, var look_id: String? = null, - var dashboard_id: String? = null + var dashboard_id: String? = null, ) : Serializable /** @@ -6036,9 +6169,9 @@ data class WriteCreateQueryTask ( * @property email EMail address used for user login * @property forced_password_reset_at_next_login Force the user to change their password upon their next login */ -data class WriteCredentialsEmail ( +data class WriteCredentialsEmail( var email: String? = null, - var forced_password_reset_at_next_login: Boolean? = null + var forced_password_reset_at_next_login: Boolean? = null, ) : Serializable /** @@ -6072,7 +6205,7 @@ data class WriteCredentialsEmail ( * @property title_color Title color * @property appearance */ -data class WriteDashboard ( +data class WriteDashboard( var description: String? = null, var hidden: Boolean? = null, var query_timezone: String? = null, @@ -6097,7 +6230,7 @@ data class WriteDashboard ( var tile_background_color: String? = null, var tile_text_color: String? = null, var title_color: String? = null, - var appearance: DashboardAppearance? = null + var appearance: DashboardAppearance? = null, ) : Serializable /** @@ -6107,8 +6240,8 @@ data class WriteDashboard ( * @property folder Dynamic writeable type for FolderBase removes: * id, content_metadata_id, created_at, creator_id, child_count, external_id, is_embed, is_embed_shared_root, is_embed_users_root, is_personal, is_personal_descendant, is_shared_root, is_users_root, can */ -data class WriteDashboardBase ( - var folder: WriteFolderBase? = null +data class WriteDashboardBase( + var folder: WriteFolderBase? = null, ) : Serializable /** @@ -6139,7 +6272,7 @@ data class WriteDashboardBase ( * @property rich_content_json JSON with all the properties required for rich editor and buttons elements * @property extension_id Extension ID */ -data class WriteDashboardElement ( +data class WriteDashboardElement( var body_text: String? = null, var dashboard_id: String? = null, var look: WriteLookWithQuery? = null, @@ -6159,7 +6292,7 @@ data class WriteDashboardElement ( var title_text: String? = null, var type: String? = null, var rich_content_json: String? = null, - var extension_id: String? = null + var extension_id: String? = null, ) : Serializable /** @@ -6179,7 +6312,7 @@ data class WriteDashboardElement ( * @property required Whether the filter requires a value to run the dashboard * @property ui_config The visual configuration for this filter. Used to set up how the UI for this filter should appear. */ -data class WriteDashboardFilter ( +data class WriteDashboardFilter( var name: String? = null, var title: String? = null, var type: String? = null, @@ -6191,7 +6324,7 @@ data class WriteDashboardFilter ( var listens_to_filters: Array? = null, var allow_multiple_values: Boolean? = null, var required: Boolean? = null, - var ui_config: Map? = null + var ui_config: Map? = null, ) : Serializable /** @@ -6204,12 +6337,12 @@ data class WriteDashboardFilter ( * @property column_width Column Width * @property width Width */ -data class WriteDashboardLayout ( +data class WriteDashboardLayout( var dashboard_id: String? = null, var type: String? = null, var active: Boolean? = null, var column_width: Long? = null, - var width: Long? = null + var width: Long? = null, ) : Serializable /** @@ -6223,13 +6356,13 @@ data class WriteDashboardLayout ( * @property width Width * @property height Height */ -data class WriteDashboardLayoutComponent ( +data class WriteDashboardLayoutComponent( var dashboard_layout_id: String? = null, var dashboard_element_id: String? = null, var row: Long? = null, var column: Long? = null, var width: Long? = null, - var height: Long? = null + var height: Long? = null, ) : Serializable /** @@ -6239,9 +6372,9 @@ data class WriteDashboardLayoutComponent ( * @property folder_id (Write-Only) Id of the folder * @property lookml lookml of UDD */ -data class WriteDashboardLookml ( +data class WriteDashboardLookml( var folder_id: String? = null, - var lookml: String? = null + var lookml: String? = null, ) : Serializable /** @@ -6251,9 +6384,9 @@ data class WriteDashboardLookml ( * @property stale_before UNIX timestamp before which cache entries are considered stale. Cannot be in the future. * @property triggered_at UNIX timestamp at which this entry became triggered. Cannot be in the future. */ -data class WriteDatagroup ( +data class WriteDatagroup( var stale_before: Long? = null, - var triggered_at: Long? = null + var triggered_at: Long? = null, ) : Serializable /** @@ -6297,7 +6430,7 @@ data class WriteDatagroup ( * @property cost_estimate_enabled When true, query cost estimate will be displayed in explore. * @property pdt_api_control_enabled PDT builds on this connection can be kicked off and cancelled via API. */ -data class WriteDBConnection ( +data class WriteDBConnection( var name: String? = null, var host: String? = null, var port: String? = null, @@ -6332,7 +6465,7 @@ data class WriteDBConnection ( var oauth_application_id: String? = null, var always_retry_failed_builds: Boolean? = null, var cost_estimate_enabled: Boolean? = null, - var pdt_api_control_enabled: Boolean? = null + var pdt_api_control_enabled: Boolean? = null, ) : Serializable /** @@ -6351,7 +6484,7 @@ data class WriteDBConnection ( * @property jdbc_additional_params Additional params to add to JDBC connection string * @property after_connect_statements SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature */ -data class WriteDBConnectionOverride ( +data class WriteDBConnectionOverride( var context: String? = null, var host: String? = null, var port: String? = null, @@ -6362,7 +6495,7 @@ data class WriteDBConnectionOverride ( var database: String? = null, var schema: String? = null, var jdbc_additional_params: String? = null, - var after_connect_statements: String? = null + var after_connect_statements: String? = null, ) : Serializable /** @@ -6373,10 +6506,10 @@ data class WriteDBConnectionOverride ( * @property enabled Is this secret currently enabled * @property secret_type Field to distinguish between SSO secrets and JWT secrets Valid values are: "SSO", "JWT". */ -data class WriteEmbedSecret ( +data class WriteEmbedSecret( var algorithm: String? = null, var enabled: Boolean? = null, - var secret_type: SecretType? = null + var secret_type: SecretType? = null, ) : Serializable /** @@ -6388,11 +6521,11 @@ data class WriteEmbedSecret ( * @property client_secret (Write-Only) The OAuth Client Secret for this application * @property dialect_name The database dialect for this application. */ -data class WriteExternalOauthApplication ( +data class WriteExternalOauthApplication( var name: String? = null, var client_id: String? = null, var client_secret: String? = null, - var dialect_name: String? = null + var dialect_name: String? = null, ) : Serializable /** @@ -6402,9 +6535,9 @@ data class WriteExternalOauthApplication ( * @property name Unique Name * @property parent_id Id of Parent. If the parent id is null, this is a root-level entry */ -data class WriteFolderBase ( +data class WriteFolderBase( var name: String, - var parent_id: String? = null + var parent_id: String? = null, ) : Serializable /** @@ -6414,9 +6547,9 @@ data class WriteFolderBase ( * @property name The short name on the local. Updating `name` results in `git checkout ` * @property ref The resolved ref of this branch. Updating `ref` results in `git reset --hard ``. */ -data class WriteGitBranch ( +data class WriteGitBranch( var name: String? = null, - var ref: String? = null + var ref: String? = null, ) : Serializable /** @@ -6426,9 +6559,9 @@ data class WriteGitBranch ( * @property can_add_to_content_metadata Group can be used in content access controls * @property name Name of group */ -data class WriteGroup ( +data class WriteGroup( var can_add_to_content_metadata: Boolean? = null, - var name: String? = null + var name: String? = null, ) : Serializable /** @@ -6439,10 +6572,10 @@ data class WriteGroup ( * @property params Array of params for the integration. * @property installed_delegate_oauth_targets Whether the integration is available to users. */ -data class WriteIntegration ( +data class WriteIntegration( var enabled: Boolean? = null, var params: Array? = null, - var installed_delegate_oauth_targets: Array? = null + var installed_delegate_oauth_targets: Array? = null, ) : Serializable /** @@ -6452,9 +6585,9 @@ data class WriteIntegration ( * @property url URL of the hub. * @property authorization_token (Write-Only) An authorization key that will be sent to the integration hub on every request. */ -data class WriteIntegrationHub ( +data class WriteIntegrationHub( var url: String? = null, - var authorization_token: String? = null + var authorization_token: String? = null, ) : Serializable /** @@ -6463,8 +6596,8 @@ data class WriteIntegrationHub ( * * @property enabled If true and internal help resources content is not blank then the link for internal help resources will be shown in the help menu and the content displayed within Looker */ -data class WriteInternalHelpResources ( - var enabled: Boolean? = null +data class WriteInternalHelpResources( + var enabled: Boolean? = null, ) : Serializable /** @@ -6474,9 +6607,9 @@ data class WriteInternalHelpResources ( * @property organization_name Text to display in the help menu item which will display the internal help resources * @property markdown_content Content to be displayed in the internal help resources page/modal */ -data class WriteInternalHelpResourcesContent ( +data class WriteInternalHelpResourcesContent( var organization_name: String? = null, - var markdown_content: String? = null + var markdown_content: String? = null, ) : Serializable /** @@ -6518,7 +6651,7 @@ data class WriteInternalHelpResourcesContent ( * @property allow_roles_from_normal_groups LDAP auth'd users will be able to inherit roles from non-reflected Looker groups. * @property allow_direct_roles Allows roles to be directly assigned to LDAP auth'd users. */ -data class WriteLDAPConfig ( +data class WriteLDAPConfig( var alternate_email_login_allowed: Boolean? = null, var auth_password: String? = null, var auth_requires_role: Boolean? = null, @@ -6552,7 +6685,7 @@ data class WriteLDAPConfig ( var user_objectclass: String? = null, var allow_normal_group_membership: Boolean? = null, var allow_roles_from_normal_groups: Boolean? = null, - var allow_direct_roles: Boolean? = null + var allow_direct_roles: Boolean? = null, ) : Serializable /** @@ -6561,8 +6694,8 @@ data class WriteLDAPConfig ( * * @property enabled_locally Whether this feature has been enabled by a user */ -data class WriteLegacyFeature ( - var enabled_locally: Boolean? = null +data class WriteLegacyFeature( + var enabled_locally: Boolean? = null, ) : Serializable /** @@ -6571,8 +6704,8 @@ data class WriteLegacyFeature ( * * @property user_id User Id */ -data class WriteLookBasic ( - var user_id: String? = null +data class WriteLookBasic( + var user_id: String? = null, ) : Serializable /** @@ -6584,11 +6717,11 @@ data class WriteLookBasic ( * @property project_name Name of project containing the model * @property unlimited_db_connections Is this model allowed to use all current and future connections */ -data class WriteLookmlModel ( +data class WriteLookmlModel( var allowed_db_connection_names: Array? = null, var name: String? = null, var project_name: String? = null, - var unlimited_db_connections: Boolean? = null + var unlimited_db_connections: Boolean? = null, ) : Serializable /** @@ -6608,7 +6741,7 @@ data class WriteLookmlModel ( * @property query Dynamic writeable type for Query removes: * can, id, slug, share_url, expanded_share_url, url, has_table_calculations */ -data class WriteLookWithQuery ( +data class WriteLookWithQuery( var title: String? = null, var user_id: String? = null, var deleted: Boolean? = null, @@ -6618,7 +6751,7 @@ data class WriteLookWithQuery ( var query_id: String? = null, var folder: WriteFolderBase? = null, var folder_id: String? = null, - var query: WriteQuery? = null + var query: WriteQuery? = null, ) : Serializable /** @@ -6633,14 +6766,14 @@ data class WriteLookWithQuery ( * @property total Total * @property vis_config Visualization Config */ -data class WriteMergeQuery ( +data class WriteMergeQuery( var column_limit: String? = null, var dynamic_fields: String? = null, var pivots: Array? = null, var sorts: Array? = null, var source_queries: Array? = null, var total: Boolean? = null, - var vis_config: Map? = null + var vis_config: Map? = null, ) : Serializable /** @@ -6650,9 +6783,9 @@ data class WriteMergeQuery ( * @property device_token Specifies the device token * @property device_type Specifies type of device. Valid values are: "android", "ios". */ -data class WriteMobileToken ( +data class WriteMobileToken( var device_token: String, - var device_type: DeviceType + var device_type: DeviceType, ) : Serializable /** @@ -6662,9 +6795,9 @@ data class WriteMobileToken ( * @property models * @property name Name of ModelSet */ -data class WriteModelSet ( +data class WriteModelSet( var models: Array? = null, - var name: String? = null + var name: String? = null, ) : Serializable /** @@ -6677,12 +6810,12 @@ data class WriteModelSet ( * @property enabled When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused. Setting disabled invalidates existing tokens. * @property group_id If set, only Looker users who are members of this group can use this web app with Looker. If group_id is not set, any Looker user may use this app to access this Looker instance */ -data class WriteOauthClientApp ( +data class WriteOauthClientApp( var redirect_uri: String? = null, var display_name: String? = null, var description: String? = null, var enabled: Boolean? = null, - var group_id: String? = null + var group_id: String? = null, ) : Serializable /** @@ -6714,7 +6847,7 @@ data class WriteOauthClientApp ( * @property allow_roles_from_normal_groups OIDC auth'd users will inherit roles from non-reflected Looker groups. * @property allow_direct_roles Allows roles to be directly assigned to OIDC auth'd users. */ -data class WriteOIDCConfig ( +data class WriteOIDCConfig( var alternate_email_login_allowed: Boolean? = null, var audience: String? = null, var auth_requires_role: Boolean? = null, @@ -6738,7 +6871,7 @@ data class WriteOIDCConfig ( var userinfo_endpoint: String? = null, var allow_normal_group_membership: Boolean? = null, var allow_roles_from_normal_groups: Boolean? = null, - var allow_direct_roles: Boolean? = null + var allow_direct_roles: Boolean? = null, ) : Serializable /** @@ -6750,11 +6883,11 @@ data class WriteOIDCConfig ( * @property require_upperlower Require at least one uppercase and one lowercase letter * @property require_special Require at least one special character */ -data class WritePasswordConfig ( +data class WritePasswordConfig( var min_length: Long? = null, var require_numeric: Boolean? = null, var require_upperlower: Boolean? = null, - var require_special: Boolean? = null + var require_special: Boolean? = null, ) : Serializable /** @@ -6764,9 +6897,9 @@ data class WritePasswordConfig ( * @property name Name of PermissionSet * @property permissions */ -data class WritePermissionSet ( +data class WritePermissionSet( var name: String? = null, - var permissions: Array? = null + var permissions: Array? = null, ) : Serializable /** @@ -6787,7 +6920,7 @@ data class WritePermissionSet ( * @property alerts_links Remove Looker links from Alerts * @property folders_mentions Remove Looker mentions in home folder page when you don’t have any items saved */ -data class WritePrivatelabelConfiguration ( +data class WritePrivatelabelConfiguration( var logo_file: String? = null, var favicon_file: String? = null, var default_title: String? = null, @@ -6800,7 +6933,7 @@ data class WritePrivatelabelConfiguration ( var setup_mentions: Boolean? = null, var alerts_logo: Boolean? = null, var alerts_links: Boolean? = null, - var folders_mentions: Boolean? = null + var folders_mentions: Boolean? = null, ) : Serializable /** @@ -6826,7 +6959,7 @@ data class WritePrivatelabelConfiguration ( * @property allow_warnings Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false). * @property dependency_status Status of dependencies in your manifest & lockfile */ -data class WriteProject ( +data class WriteProject( var name: String? = null, var git_remote_url: String? = null, var git_username: String? = null, @@ -6844,7 +6977,7 @@ data class WriteProject ( var validation_required: Boolean? = null, var git_release_mgmt_enabled: Boolean? = null, var allow_warnings: Boolean? = null, - var dependency_status: String? = null + var dependency_status: String? = null, ) : Serializable /** @@ -6871,13 +7004,13 @@ data class WriteProject ( * @property client_id Client Id: used to generate shortened explore URLs. If set by client, must be a unique 22 character alphanumeric string. Otherwise one will be generated. * @property query_timezone Query Timezone */ -data class WriteQuery ( +data class WriteQuery( var model: String, var view: String, var fields: Array? = null, var pivots: Array? = null, var fill_fields: Array? = null, - var filters: Map? = null, + var filters: Map? = null, var filter_expression: String? = null, var sorts: Array? = null, var limit: String? = null, @@ -6885,12 +7018,12 @@ data class WriteQuery ( var total: Boolean? = null, var row_total: String? = null, var subtotals: Array? = null, - var vis_config: Map? = null, - var filter_config: Map? = null, + var vis_config: Map? = null, + var filter_config: Map? = null, var visible_ui_sections: String? = null, var dynamic_fields: String? = null, var client_id: String? = null, - var query_timezone: String? = null + var query_timezone: String? = null, ) : Serializable /** @@ -6901,10 +7034,10 @@ data class WriteQuery ( * @property git_password (Write-Only) Git password for HTTPS authentication. * @property ssh_public_key Public deploy key for SSH authentication. */ -data class WriteRepositoryCredential ( +data class WriteRepositoryCredential( var git_username: String? = null, var git_password: String? = null, - var ssh_public_key: String? = null + var ssh_public_key: String? = null, ) : Serializable /** @@ -6914,8 +7047,8 @@ data class WriteRepositoryCredential ( * @property query Dynamic writeable type for Query removes: * can, id, slug, share_url, expanded_share_url, url, has_table_calculations */ -data class WriteResultMakerWithIdVisConfigAndDynamicFields ( - var query: WriteQuery? = null +data class WriteResultMakerWithIdVisConfigAndDynamicFields( + var query: WriteQuery? = null, ) : Serializable /** @@ -6930,12 +7063,12 @@ data class WriteResultMakerWithIdVisConfigAndDynamicFields ( * can, all_access, built_in, id, url * @property model_set_id (Write-Only) Id of model set */ -data class WriteRole ( +data class WriteRole( var name: String? = null, var permission_set: WritePermissionSet? = null, var permission_set_id: String? = null, var model_set: WriteModelSet? = null, - var model_set_id: String? = null + var model_set_id: String? = null, ) : Serializable /** @@ -6967,7 +7100,7 @@ data class WriteRole ( * @property allow_roles_from_normal_groups SAML auth'd users will inherit roles from non-reflected Looker groups. * @property allow_direct_roles Allows roles to be directly assigned to SAML auth'd users. */ -data class WriteSamlConfig ( +data class WriteSamlConfig( var enabled: Boolean? = null, var idp_cert: String? = null, var idp_url: String? = null, @@ -6991,7 +7124,7 @@ data class WriteSamlConfig ( var bypass_login_page: Boolean? = null, var allow_normal_group_membership: Boolean? = null, var allow_roles_from_normal_groups: Boolean? = null, - var allow_direct_roles: Boolean? = null + var allow_direct_roles: Boolean? = null, ) : Serializable /** @@ -7029,7 +7162,7 @@ data class WriteSamlConfig ( * @property long_tables Whether or not to expand table vis to full length * @property inline_table_width The pixel width at which we render the inline table visualizations */ -data class WriteScheduledPlan ( +data class WriteScheduledPlan( var name: String? = null, var user_id: String? = null, var run_as_recipient: Boolean? = null, @@ -7059,7 +7192,7 @@ data class WriteScheduledPlan ( var embed: Boolean? = null, var color_theme: String? = null, var long_tables: Boolean? = null, - var inline_table_width: Long? = null + var inline_table_width: Long? = null, ) : Serializable /** @@ -7072,17 +7205,17 @@ data class WriteScheduledPlan ( * @property use_inactivity_based_logout Enforce session logout for sessions that are inactive for 15 minutes. * @property track_session_location Track location of session when user logs in. */ -data class WriteSessionConfig ( +data class WriteSessionConfig( var allow_persistent_sessions: Boolean? = null, var session_minutes: Long? = null, var unlimited_sessions_per_user: Boolean? = null, var use_inactivity_based_logout: Boolean? = null, - var track_session_location: Boolean? = null + var track_session_location: Boolean? = null, ) : Serializable /** * Dynamic writeable type for Setting removes: - * marketplace_site, embed_enabled + * marketplace_site, embed_enabled, login_notification_enabled, login_notification_text * * @property extension_framework_enabled Toggle extension framework on or off * @property extension_load_url_enabled (DEPRECATED) Toggle extension load url on or off. Do not use. This is temporary setting that will eventually become a noop and subsequently deleted. @@ -7103,7 +7236,7 @@ data class WriteSessionConfig ( * @property embed_cookieless_v2 (DEPRECATED) Use embed_config.embed_cookieless_v2 instead. If embed_config.embed_cookieless_v2 is specified, it overrides this value. * @property embed_config */ -data class WriteSetting ( +data class WriteSetting( var extension_framework_enabled: Boolean? = null, var extension_load_url_enabled: Boolean? = null, var marketplace_auto_install_enabled: Boolean? = null, @@ -7120,7 +7253,7 @@ data class WriteSetting ( var override_warnings: Boolean? = null, var email_domain_allowlist: Array? = null, var embed_cookieless_v2: Boolean? = null, - var embed_config: EmbedConfig? = null + var embed_config: EmbedConfig? = null, ) : Serializable /** @@ -7130,9 +7263,9 @@ data class WriteSetting ( * @property sql Original SQL request * @property jdbc_client Whether the query should be run for use in a JDBC Client. This changes the formatting of some datetime based values. */ -data class WriteSqlInterfaceQueryCreate ( +data class WriteSqlInterfaceQueryCreate( var sql: String, - var jdbc_client: Boolean? = null + var jdbc_client: Boolean? = null, ) : Serializable /** @@ -7144,11 +7277,11 @@ data class WriteSqlInterfaceQueryCreate ( * @property ssh_server_port The port to connect to on the SSH Server * @property ssh_server_user The username used to connect to the SSH Server */ -data class WriteSshServer ( +data class WriteSshServer( var ssh_server_name: String? = null, var ssh_server_host: String? = null, var ssh_server_port: Long? = null, - var ssh_server_user: String? = null + var ssh_server_user: String? = null, ) : Serializable /** @@ -7160,11 +7293,11 @@ data class WriteSshServer ( * @property database_host Hostname or IP Address of the Database Server * @property database_port Port that the Database Server is listening on */ -data class WriteSshTunnel ( +data class WriteSshTunnel( var ssh_server_id: String? = null, var local_host_port: Long? = null, var database_host: String? = null, - var database_port: Long? = null + var database_port: Long? = null, ) : Serializable /** @@ -7176,11 +7309,11 @@ data class WriteSshTunnel ( * @property name Name of theme. Can only be alphanumeric and underscores. * @property settings */ -data class WriteTheme ( +data class WriteTheme( var begin_at: Date? = null, var end_at: Date? = null, var name: String? = null, - var settings: ThemeSettings? = null + var settings: ThemeSettings? = null, ) : Serializable /** @@ -7197,7 +7330,7 @@ data class WriteTheme ( * @property models_dir_validated User's dev workspace has been checked for presence of applicable production projects * @property ui_state Per user dictionary of undocumented state information owned by the Looker UI. */ -data class WriteUser ( +data class WriteUser( var credentials_email: WriteCredentialsEmail? = null, var first_name: String? = null, var home_folder_id: String? = null, @@ -7205,7 +7338,7 @@ data class WriteUser ( var last_name: String? = null, var locale: String? = null, var models_dir_validated: Boolean? = null, - var ui_state: Map? = null + var ui_state: Map? = null, ) : Serializable /** @@ -7214,14 +7347,14 @@ data class WriteUser ( * * @property name Name of user attribute * @property label Human-friendly label for user attribute - * @property type Type of user attribute ("string", "number", "datetime", "yesno", "zipcode") + * @property type Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") * @property default_value Default value for when no value is set on the user * @property value_is_hidden If true, users will not be able to view values of this attribute * @property user_can_view Non-admin users can see the values of their attributes and use them in filters * @property user_can_edit Users can change the value of this attribute for themselves * @property hidden_value_domain_whitelist Destinations to which a hidden attribute may be sent. Once set, cannot be edited. */ -data class WriteUserAttribute ( +data class WriteUserAttribute( var name: String, var label: String, var type: String, @@ -7229,7 +7362,7 @@ data class WriteUserAttribute ( var value_is_hidden: Boolean? = null, var user_can_view: Boolean? = null, var user_can_edit: Boolean? = null, - var hidden_value_domain_whitelist: String? = null + var hidden_value_domain_whitelist: String? = null, ) : Serializable /** @@ -7238,8 +7371,8 @@ data class WriteUserAttribute ( * * @property value Value of attribute for user */ -data class WriteUserAttributeWithValue ( - var value: String? = null +data class WriteUserAttributeWithValue( + var value: String? = null, ) : Serializable /** @@ -7260,7 +7393,7 @@ data class WriteUserAttributeWithValue ( * @property alerts_links Remove Looker links from Alerts * @property folders_mentions Remove Looker mentions in home folder page when you don’t have any items saved */ -data class WriteWhitelabelConfiguration ( +data class WriteWhitelabelConfiguration( var logo_file: String? = null, var favicon_file: String? = null, var default_title: String? = null, @@ -7273,5 +7406,5 @@ data class WriteWhitelabelConfiguration ( var setup_mentions: Boolean? = null, var alerts_logo: Boolean? = null, var alerts_links: Boolean? = null, - var folders_mentions: Boolean? = null -) : Serializable \ No newline at end of file + var folders_mentions: Boolean? = null, +) : Serializable diff --git a/kotlin/src/main/com/looker/sdk/4.0/streams.kt b/kotlin/src/main/com/looker/sdk/4.0/streams.kt index 0d155df7f..2c3c45a74 100644 --- a/kotlin/src/main/com/looker/sdk/4.0/streams.kt +++ b/kotlin/src/main/com/looker/sdk/4.0/streams.kt @@ -28,7 +28,6 @@ * 464 API methods */ - // NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 package com.looker.sdk @@ -37,10 +36,8 @@ import java.util.* class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { - //region Alert: Alert - /** * Follow an alert. * @@ -49,13 +46,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /alerts/{alert_id}/follow -> ByteArray */ fun follow_alert( - alert_id: String - ) : SDKResponse { + alert_id: String, + ): SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.post("/alerts/${path_alert_id}/follow", mapOf()) + return this.post("/alerts/${path_alert_id}/follow", mapOf()) } - /** * Unfollow an alert. * @@ -64,13 +60,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /alerts/{alert_id}/follow -> ByteArray */ fun unfollow_alert( - alert_id: String - ) : SDKResponse { + alert_id: String, + ): SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.delete("/alerts/${path_alert_id}/follow", mapOf()) + return this.delete("/alerts/${path_alert_id}/follow", mapOf()) } - /** * ### Search Alerts * @@ -97,22 +92,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { condition_met: Boolean? = null, last_run_start: String? = null, last_run_end: String? = null, - all_owners: Boolean? = null - ) : SDKResponse { - return this.get("/alerts/search", - mapOf("limit" to limit, - "offset" to offset, - "group_by" to group_by, - "fields" to fields, - "disabled" to disabled, - "frequency" to frequency, - "condition_met" to condition_met, - "last_run_start" to last_run_start, - "last_run_end" to last_run_end, - "all_owners" to all_owners)) + all_owners: Boolean? = null, + ): SDKResponse { + return this.get( + "/alerts/search", + mapOf( + "limit" to limit, + "offset" to offset, + "group_by" to group_by, + "fields" to fields, + "disabled" to disabled, + "frequency" to frequency, + "condition_met" to condition_met, + "last_run_start" to last_run_start, + "last_run_end" to last_run_end, + "all_owners" to all_owners, + ), + ) } - /** * ### Get an alert by a given alert ID * @@ -121,13 +119,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /alerts/{alert_id} -> ByteArray */ fun get_alert( - alert_id: String - ) : SDKResponse { + alert_id: String, + ): SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.get("/alerts/${path_alert_id}", mapOf()) + return this.get("/alerts/${path_alert_id}", mapOf()) } - /** * ### Update an alert * # Required fields: `owner_id`, `field`, `destinations`, `comparison_type`, `threshold`, `cron` @@ -140,13 +137,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_alert( alert_id: String, - body: WriteAlert - ) : SDKResponse { + body: WriteAlert, + ): SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.put("/alerts/${path_alert_id}", mapOf(), body) + return this.put("/alerts/${path_alert_id}", mapOf(), body) } - /** * ### Update select alert fields * # Available fields: `owner_id`, `is_disabled`, `disabled_reason`, `is_public`, `threshold` @@ -159,13 +155,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_alert_field( alert_id: String, - body: AlertPatch - ) : SDKResponse { + body: AlertPatch, + ): SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.patch("/alerts/${path_alert_id}", mapOf(), body) + return this.patch("/alerts/${path_alert_id}", mapOf(), body) } - /** * ### Delete an alert by a given alert ID * @@ -174,13 +169,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /alerts/{alert_id} -> ByteArray */ fun delete_alert( - alert_id: String - ) : SDKResponse { + alert_id: String, + ): SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.delete("/alerts/${path_alert_id}", mapOf()) + return this.delete("/alerts/${path_alert_id}", mapOf()) } - /** * ### Create a new alert and return details of the newly created object * @@ -223,12 +217,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /alerts -> ByteArray */ fun create_alert( - body: WriteAlert - ) : SDKResponse { - return this.post("/alerts", mapOf(), body) + body: WriteAlert, + ): SDKResponse { + return this.post("/alerts", mapOf(), body) } - /** * ### Enqueue an Alert by ID * @@ -239,14 +232,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun enqueue_alert( alert_id: String, - force: Boolean? = null - ) : SDKResponse { + force: Boolean? = null, + ): SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.post("/alerts/${path_alert_id}/enqueue", - mapOf("force" to force)) + return this.post( + "/alerts/${path_alert_id}/enqueue", + mapOf("force" to force), + ) } - /** * # Alert Notifications. * The endpoint returns all the alert notifications received by the user on email in the past 7 days. It also returns whether the notifications have been read by the user. @@ -258,14 +252,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun alert_notifications( limit: Long? = null, - offset: Long? = null - ) : SDKResponse { - return this.get("/alert_notifications", - mapOf("limit" to limit, - "offset" to offset)) + offset: Long? = null, + ): SDKResponse { + return this.get( + "/alert_notifications", + mapOf( + "limit" to limit, + "offset" to offset, + ), + ) } - /** * # Reads a Notification * The endpoint marks a given alert notification as read by the user, in case it wasn't already read. The AlertNotification model is updated for this purpose. It returns the notification as a response. @@ -275,17 +272,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /alert_notifications/{alert_notification_id} -> ByteArray */ fun read_alert_notification( - alert_notification_id: String - ) : SDKResponse { + alert_notification_id: String, + ): SDKResponse { val path_alert_notification_id = encodeParam(alert_notification_id) - return this.patch("/alert_notifications/${path_alert_notification_id}", mapOf()) + return this.patch("/alert_notifications/${path_alert_notification_id}", mapOf()) } //endregion Alert: Alert //region ApiAuth: API Authentication - /** * ### Present client credentials to obtain an authorization token * @@ -323,14 +319,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun login( client_id: String? = null, - client_secret: String? = null - ) : SDKResponse { - return this.post("/login", - mapOf("client_id" to client_id, - "client_secret" to client_secret)) + client_secret: String? = null, + ): SDKResponse { + return this.post( + "/login", + mapOf( + "client_id" to client_id, + "client_secret" to client_secret, + ), + ) } - /** * ### Create an access token that runs as a given user. * @@ -358,30 +357,28 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun login_user( user_id: String, - associative: Boolean? = null - ) : SDKResponse { + associative: Boolean? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/login/${path_user_id}", - mapOf("associative" to associative)) + return this.post( + "/login/${path_user_id}", + mapOf("associative" to associative), + ) } - /** * ### Logout of the API and invalidate the current access token. * * DELETE /logout -> ByteArray */ - fun logout( - - ) : SDKResponse { - return this.delete("/logout", mapOf()) + fun logout(): SDKResponse { + return this.delete("/logout", mapOf()) } //endregion ApiAuth: API Authentication //region Artifact: Artifact Storage - /** * Get the maximum configured size of the entire artifact store, and the currently used storage in bytes. * @@ -392,13 +389,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /artifact/usage -> ByteArray */ @JvmOverloads fun artifact_usage( - fields: String? = null - ) : SDKResponse { - return this.get("/artifact/usage", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/artifact/usage", + mapOf("fields" to fields), + ) } - /** * Get all artifact namespaces and the count of artifacts in each namespace * @@ -413,15 +411,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun artifact_namespaces( fields: String? = null, limit: Long? = null, - offset: Long? = null - ) : SDKResponse { - return this.get("/artifact/namespaces", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset)) + offset: Long? = null, + ): SDKResponse { + return this.get( + "/artifact/namespaces", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + ), + ) } - /** * ### Return the value of an artifact * @@ -436,14 +437,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun artifact_value( namespace: String, - key: String? = null - ) : SDKResponse { + key: String? = null, + ): SDKResponse { val path_namespace = encodeParam(namespace) - return this.get("/artifact/${path_namespace}/value", - mapOf("key" to key)) + return this.get( + "/artifact/${path_namespace}/value", + mapOf("key" to key), + ) } - /** * Remove *all* artifacts from a namespace. Purged artifacts are permanently deleted * @@ -454,13 +456,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /artifact/{namespace}/purge -> ByteArray */ fun purge_artifacts( - namespace: String - ) : SDKResponse { + namespace: String, + ): SDKResponse { val path_namespace = encodeParam(namespace) - return this.delete("/artifact/${path_namespace}/purge", mapOf()) + return this.delete("/artifact/${path_namespace}/purge", mapOf()) } - /** * ### Search all key/value pairs in a namespace for matching criteria. * @@ -499,20 +500,23 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { min_size: Long? = null, max_size: Long? = null, limit: Long? = null, - offset: Long? = null - ) : SDKResponse { + offset: Long? = null, + ): SDKResponse { val path_namespace = encodeParam(namespace) - return this.get("/artifact/${path_namespace}/search", - mapOf("fields" to fields, - "key" to key, - "user_ids" to user_ids, - "min_size" to min_size, - "max_size" to max_size, - "limit" to limit, - "offset" to offset)) + return this.get( + "/artifact/${path_namespace}/search", + mapOf( + "fields" to fields, + "key" to key, + "user_ids" to user_ids, + "min_size" to min_size, + "max_size" to max_size, + "limit" to limit, + "offset" to offset, + ), + ) } - /** * ### Get one or more artifacts * @@ -533,17 +537,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { key: String, fields: String? = null, limit: Long? = null, - offset: Long? = null - ) : SDKResponse { + offset: Long? = null, + ): SDKResponse { val path_namespace = encodeParam(namespace) - return this.get("/artifact/${path_namespace}", - mapOf("key" to key, - "fields" to fields, - "limit" to limit, - "offset" to offset)) + return this.get( + "/artifact/${path_namespace}", + mapOf( + "key" to key, + "fields" to fields, + "limit" to limit, + "offset" to offset, + ), + ) } - /** * ### Delete one or more artifacts * @@ -558,14 +565,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_artifact( namespace: String, - key: String - ) : SDKResponse { + key: String, + ): SDKResponse { val path_namespace = encodeParam(namespace) - return this.delete("/artifact/${path_namespace}", - mapOf("key" to key)) + return this.delete( + "/artifact/${path_namespace}", + mapOf("key" to key), + ) } - /** * ### Create or update one or more artifacts * @@ -603,18 +611,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_artifacts( namespace: String, body: Array, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_namespace = encodeParam(namespace) - return this.put("/artifacts/${path_namespace}", - mapOf("fields" to fields), body) + return this.put( + "/artifacts/${path_namespace}", + mapOf("fields" to fields), + body, + ) } //endregion Artifact: Artifact Storage //region Auth: Manage User Authentication Configuration - /** * ### Create an embed secret using the specified information. * @@ -627,12 +637,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /embed_config/secrets -> ByteArray */ @JvmOverloads fun create_embed_secret( - body: WriteEmbedSecret? = null - ) : SDKResponse { - return this.post("/embed_config/secrets", mapOf(), body) + body: WriteEmbedSecret? = null, + ): SDKResponse { + return this.post("/embed_config/secrets", mapOf(), body) } - /** * ### Delete an embed secret. * @@ -643,13 +652,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /embed_config/secrets/{embed_secret_id} -> ByteArray */ fun delete_embed_secret( - embed_secret_id: String - ) : SDKResponse { + embed_secret_id: String, + ): SDKResponse { val path_embed_secret_id = encodeParam(embed_secret_id) - return this.delete("/embed_config/secrets/${path_embed_secret_id}", mapOf()) + return this.delete("/embed_config/secrets/${path_embed_secret_id}", mapOf()) } - /** * ### Create Signed Embed URL * @@ -698,12 +706,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /embed/sso_url -> ByteArray */ fun create_sso_embed_url( - body: EmbedSsoParams - ) : SDKResponse { - return this.post("/embed/sso_url", mapOf(), body) + body: EmbedSsoParams, + ): SDKResponse { + return this.post("/embed/sso_url", mapOf(), body) } - /** * ### Create an Embed URL * @@ -712,7 +719,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * "Powered by Looker" (PBL) web application. * * This is similar to Private Embedding (https://cloud.google.com/looker/docs/r/admin/embed/private-embed). Instead of - * of logging into the Web UI to authenticate, the user has already authenticated against the API to be able to + * logging into the Web UI to authenticate, the user has already authenticated against the API to be able to * make this call. However, unlike Private Embed where the user has access to any other part of the Looker UI, * the embed web session created by requesting the EmbedUrlResponse.url in a browser only has access to * content visible under the `/embed` context. @@ -739,12 +746,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /embed/token_url/me -> ByteArray */ fun create_embed_url_as_me( - body: EmbedParams - ) : SDKResponse { - return this.post("/embed/token_url/me", mapOf(), body) + body: EmbedParams, + ): SDKResponse { + return this.post("/embed/token_url/me", mapOf(), body) } - /** * ### Validate a Signed Embed URL * @@ -753,13 +759,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /embed/sso/validate -> ByteArray */ @JvmOverloads fun validate_embed_url( - url: String? = null - ) : SDKResponse { - return this.get("/embed/sso/validate", - mapOf("url" to url)) + url: String? = null, + ): SDKResponse { + return this.get( + "/embed/sso/validate", + mapOf("url" to url), + ) } - /** * ### Acquire a cookieless embed session. * @@ -779,7 +786,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * If the `session_reference_token` is provided but the session has expired, the token will be ignored and a * new embed session will be created. Note that the embed user definition will be updated in this scenario. * - * If the credentials do not match the credentials associated with an exisiting session_reference_token, a + * If the credentials do not match the credentials associated with an existing session_reference_token, a * 404 will be returned. * * The endpoint returns the following: @@ -799,12 +806,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /embed/cookieless_session/acquire -> ByteArray */ fun acquire_embed_cookieless_session( - body: EmbedCookielessSessionAcquire - ) : SDKResponse { - return this.post("/embed/cookieless_session/acquire", mapOf(), body) + body: EmbedCookielessSessionAcquire, + ): SDKResponse { + return this.post("/embed/cookieless_session/acquire", mapOf(), body) } - /** * ### Delete cookieless embed session * @@ -819,13 +825,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /embed/cookieless_session/{session_reference_token} -> ByteArray */ fun delete_embed_cookieless_session( - session_reference_token: String - ) : SDKResponse { + session_reference_token: String, + ): SDKResponse { val path_session_reference_token = encodeParam(session_reference_token) - return this.delete("/embed/cookieless_session/${path_session_reference_token}", mapOf()) + return this.delete("/embed/cookieless_session/${path_session_reference_token}", mapOf()) } - /** * ### Generate api and navigation tokens for a cookieless embed session * @@ -835,6 +840,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * The generate tokens endpoint should be called every time the Looker client asks for a token (except for the * first time when the tokens returned by the acquire_session endpoint should be used). * + * #### Embed session expiration handling + * + * This endpoint does NOT return an error when the embed session expires. This is to simplify processing + * in the caller as errors can happen for non session expiration reasons. Instead the endpoint returns + * the session time to live in the `session_reference_token_ttl` response property. If this property + * contains a zero, the embed session has expired. + * * Calls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled * * @param {EmbedCookielessSessionGenerateTokens} body @@ -842,12 +854,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /embed/cookieless_session/generate_tokens -> ByteArray */ fun generate_tokens_for_cookieless_session( - body: EmbedCookielessSessionGenerateTokens - ) : SDKResponse { - return this.put("/embed/cookieless_session/generate_tokens", mapOf(), body) + body: EmbedCookielessSessionGenerateTokens, + ): SDKResponse { + return this.put("/embed/cookieless_session/generate_tokens", mapOf(), body) } - /** * ### Get the LDAP configuration. * @@ -870,13 +881,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /ldap_config -> ByteArray */ - fun ldap_config( - - ) : SDKResponse { - return this.get("/ldap_config", mapOf()) + fun ldap_config(): SDKResponse { + return this.get("/ldap_config", mapOf()) } - /** * ### Update the LDAP configuration. * @@ -897,12 +905,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /ldap_config -> ByteArray */ fun update_ldap_config( - body: WriteLDAPConfig - ) : SDKResponse { - return this.patch("/ldap_config", mapOf(), body) + body: WriteLDAPConfig, + ): SDKResponse { + return this.patch("/ldap_config", mapOf(), body) } - /** * ### Test the connection settings for an LDAP configuration. * @@ -930,12 +937,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_connection -> ByteArray */ fun test_ldap_config_connection( - body: WriteLDAPConfig - ) : SDKResponse { - return this.put("/ldap_config/test_connection", mapOf(), body) + body: WriteLDAPConfig, + ): SDKResponse { + return this.put("/ldap_config/test_connection", mapOf(), body) } - /** * ### Test the connection authentication settings for an LDAP configuration. * @@ -965,12 +971,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_auth -> ByteArray */ fun test_ldap_config_auth( - body: WriteLDAPConfig - ) : SDKResponse { - return this.put("/ldap_config/test_auth", mapOf(), body) + body: WriteLDAPConfig, + ): SDKResponse { + return this.put("/ldap_config/test_auth", mapOf(), body) } - /** * ### Test the user authentication settings for an LDAP configuration without authenticating the user. * @@ -989,12 +994,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_user_info -> ByteArray */ fun test_ldap_config_user_info( - body: WriteLDAPConfig - ) : SDKResponse { - return this.put("/ldap_config/test_user_info", mapOf(), body) + body: WriteLDAPConfig, + ): SDKResponse { + return this.put("/ldap_config/test_user_info", mapOf(), body) } - /** * ### Test the user authentication settings for an LDAP configuration. * @@ -1013,12 +1017,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_user_auth -> ByteArray */ fun test_ldap_config_user_auth( - body: WriteLDAPConfig - ) : SDKResponse { - return this.put("/ldap_config/test_user_auth", mapOf(), body) + body: WriteLDAPConfig, + ): SDKResponse { + return this.put("/ldap_config/test_user_auth", mapOf(), body) } - /** * ### Registers a mobile device. * # Required fields: [:device_token, :device_type] @@ -1028,12 +1031,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /mobile/device -> ByteArray */ fun register_mobile_device( - body: WriteMobileToken - ) : SDKResponse { - return this.post("/mobile/device", mapOf(), body) + body: WriteMobileToken, + ): SDKResponse { + return this.post("/mobile/device", mapOf(), body) } - /** * ### Updates the mobile device registration * @@ -1042,13 +1044,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /mobile/device/{device_id} -> ByteArray */ fun update_mobile_device_registration( - device_id: String - ) : SDKResponse { + device_id: String, + ): SDKResponse { val path_device_id = encodeParam(device_id) - return this.patch("/mobile/device/${path_device_id}", mapOf()) + return this.patch("/mobile/device/${path_device_id}", mapOf()) } - /** * ### Deregister a mobile device. * @@ -1057,13 +1058,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /mobile/device/{device_id} -> ByteArray */ fun deregister_mobile_device( - device_id: String - ) : SDKResponse { + device_id: String, + ): SDKResponse { val path_device_id = encodeParam(device_id) - return this.delete("/mobile/device/${path_device_id}", mapOf()) + return this.delete("/mobile/device/${path_device_id}", mapOf()) } - /** * ### List All OAuth Client Apps * @@ -1078,13 +1078,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /oauth_client_apps -> ByteArray */ @JvmOverloads fun all_oauth_client_apps( - fields: String? = null - ) : SDKResponse { - return this.get("/oauth_client_apps", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/oauth_client_apps", + mapOf("fields" to fields), + ) } - /** * ### Get Oauth Client App * @@ -1097,14 +1098,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun oauth_client_app( client_guid: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.get("/oauth_client_apps/${path_client_guid}", - mapOf("fields" to fields)) + return this.get( + "/oauth_client_apps/${path_client_guid}", + mapOf("fields" to fields), + ) } - /** * ### Register an OAuth2 Client App * @@ -1122,14 +1124,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun register_oauth_client_app( client_guid: String, body: WriteOauthClientApp, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.post("/oauth_client_apps/${path_client_guid}", - mapOf("fields" to fields), body) + return this.post( + "/oauth_client_apps/${path_client_guid}", + mapOf("fields" to fields), + body, + ) } - /** * ### Update OAuth2 Client App Details * @@ -1144,14 +1148,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_oauth_client_app( client_guid: String, body: WriteOauthClientApp, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.patch("/oauth_client_apps/${path_client_guid}", - mapOf("fields" to fields), body) + return this.patch( + "/oauth_client_apps/${path_client_guid}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete OAuth Client App * @@ -1168,13 +1174,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /oauth_client_apps/{client_guid} -> ByteArray */ fun delete_oauth_client_app( - client_guid: String - ) : SDKResponse { + client_guid: String, + ): SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.delete("/oauth_client_apps/${path_client_guid}", mapOf()) + return this.delete("/oauth_client_apps/${path_client_guid}", mapOf()) } - /** * ### Invalidate All Issued Tokens * @@ -1186,13 +1191,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /oauth_client_apps/{client_guid}/tokens -> ByteArray */ fun invalidate_tokens( - client_guid: String - ) : SDKResponse { + client_guid: String, + ): SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.delete("/oauth_client_apps/${path_client_guid}/tokens", mapOf()) + return this.delete("/oauth_client_apps/${path_client_guid}/tokens", mapOf()) } - /** * ### Activate an app for a user * @@ -1211,15 +1215,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun activate_app_user( client_guid: String, user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_client_guid = encodeParam(client_guid) val path_user_id = encodeParam(user_id) - return this.post("/oauth_client_apps/${path_client_guid}/users/${path_user_id}", - mapOf("fields" to fields)) + return this.post( + "/oauth_client_apps/${path_client_guid}/users/${path_user_id}", + mapOf("fields" to fields), + ) } - /** * ### Deactivate an app for a user * @@ -1241,15 +1246,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun deactivate_app_user( client_guid: String, user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_client_guid = encodeParam(client_guid) val path_user_id = encodeParam(user_id) - return this.delete("/oauth_client_apps/${path_client_guid}/users/${path_user_id}", - mapOf("fields" to fields)) + return this.delete( + "/oauth_client_apps/${path_client_guid}/users/${path_user_id}", + mapOf("fields" to fields), + ) } - /** * ### Get the OIDC configuration. * @@ -1260,7 +1266,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * Configuring OIDC impacts authentication for all users. This configuration should be done carefully. * - * Looker maintains a single OIDC configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). + * Looker maintains a single OIDC configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). * * OIDC is enabled or disabled for Looker using the **enabled** field. * @@ -1268,13 +1274,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /oidc_config -> ByteArray */ - fun oidc_config( - - ) : SDKResponse { - return this.get("/oidc_config", mapOf()) + fun oidc_config(): SDKResponse { + return this.get("/oidc_config", mapOf()) } - /** * ### Update the OIDC configuration. * @@ -1293,12 +1296,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /oidc_config -> ByteArray */ fun update_oidc_config( - body: WriteOIDCConfig - ) : SDKResponse { - return this.patch("/oidc_config", mapOf(), body) + body: WriteOIDCConfig, + ): SDKResponse { + return this.patch("/oidc_config", mapOf(), body) } - /** * ### Get a OIDC test configuration by test_slug. * @@ -1309,13 +1311,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /oidc_test_configs/{test_slug} -> ByteArray */ fun oidc_test_config( - test_slug: String - ) : SDKResponse { + test_slug: String, + ): SDKResponse { val path_test_slug = encodeParam(test_slug) - return this.get("/oidc_test_configs/${path_test_slug}", mapOf()) + return this.get("/oidc_test_configs/${path_test_slug}", mapOf()) } - /** * ### Delete a OIDC test configuration. * @@ -1326,13 +1327,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /oidc_test_configs/{test_slug} -> ByteArray */ fun delete_oidc_test_config( - test_slug: String - ) : SDKResponse { + test_slug: String, + ): SDKResponse { val path_test_slug = encodeParam(test_slug) - return this.delete("/oidc_test_configs/${path_test_slug}", mapOf()) + return this.delete("/oidc_test_configs/${path_test_slug}", mapOf()) } - /** * ### Create a OIDC test configuration. * @@ -1343,12 +1343,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /oidc_test_configs -> ByteArray */ fun create_oidc_test_config( - body: WriteOIDCConfig - ) : SDKResponse { - return this.post("/oidc_test_configs", mapOf(), body) + body: WriteOIDCConfig, + ): SDKResponse { + return this.post("/oidc_test_configs", mapOf(), body) } - /** * ### Get password config. * @@ -1356,13 +1355,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /password_config -> ByteArray */ - fun password_config( - - ) : SDKResponse { - return this.get("/password_config", mapOf()) + fun password_config(): SDKResponse { + return this.get("/password_config", mapOf()) } - /** * ### Update password config. * @@ -1373,12 +1369,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /password_config -> ByteArray */ fun update_password_config( - body: WritePasswordConfig - ) : SDKResponse { - return this.patch("/password_config", mapOf(), body) + body: WritePasswordConfig, + ): SDKResponse { + return this.patch("/password_config", mapOf(), body) } - /** * ### Force all credentials_email users to reset their login passwords upon their next login. * @@ -1386,13 +1381,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * PUT /password_config/force_password_reset_at_next_login_for_all_users -> ByteArray */ - fun force_password_reset_at_next_login_for_all_users( - - ) : SDKResponse { - return this.put("/password_config/force_password_reset_at_next_login_for_all_users", mapOf()) + fun force_password_reset_at_next_login_for_all_users(): SDKResponse { + return this.put("/password_config/force_password_reset_at_next_login_for_all_users", mapOf()) } - /** * ### Get the SAML configuration. * @@ -1403,7 +1395,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * Configuring SAML impacts authentication for all users. This configuration should be done carefully. * - * Looker maintains a single SAML configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). + * Looker maintains a single SAML configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct). * * SAML is enabled or disabled for Looker using the **enabled** field. * @@ -1411,13 +1403,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /saml_config -> ByteArray */ - fun saml_config( - - ) : SDKResponse { - return this.get("/saml_config", mapOf()) + fun saml_config(): SDKResponse { + return this.get("/saml_config", mapOf()) } - /** * ### Update the SAML configuration. * @@ -1436,12 +1425,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /saml_config -> ByteArray */ fun update_saml_config( - body: WriteSamlConfig - ) : SDKResponse { - return this.patch("/saml_config", mapOf(), body) + body: WriteSamlConfig, + ): SDKResponse { + return this.patch("/saml_config", mapOf(), body) } - /** * ### Get a SAML test configuration by test_slug. * @@ -1452,13 +1440,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /saml_test_configs/{test_slug} -> ByteArray */ fun saml_test_config( - test_slug: String - ) : SDKResponse { + test_slug: String, + ): SDKResponse { val path_test_slug = encodeParam(test_slug) - return this.get("/saml_test_configs/${path_test_slug}", mapOf()) + return this.get("/saml_test_configs/${path_test_slug}", mapOf()) } - /** * ### Delete a SAML test configuration. * @@ -1469,13 +1456,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /saml_test_configs/{test_slug} -> ByteArray */ fun delete_saml_test_config( - test_slug: String - ) : SDKResponse { + test_slug: String, + ): SDKResponse { val path_test_slug = encodeParam(test_slug) - return this.delete("/saml_test_configs/${path_test_slug}", mapOf()) + return this.delete("/saml_test_configs/${path_test_slug}", mapOf()) } - /** * ### Create a SAML test configuration. * @@ -1486,12 +1472,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /saml_test_configs -> ByteArray */ fun create_saml_test_config( - body: WriteSamlConfig - ) : SDKResponse { - return this.post("/saml_test_configs", mapOf(), body) + body: WriteSamlConfig, + ): SDKResponse { + return this.post("/saml_test_configs", mapOf(), body) } - /** * ### Parse the given xml as a SAML IdP metadata document and return the result. * @@ -1502,12 +1487,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /parse_saml_idp_metadata -> ByteArray */ fun parse_saml_idp_metadata( - body: String - ) : SDKResponse { - return this.post("/parse_saml_idp_metadata", mapOf(), body) + body: String, + ): SDKResponse { + return this.post("/parse_saml_idp_metadata", mapOf(), body) } - /** * ### Fetch the given url and parse it as a SAML IdP metadata document and return the result. * Note that this requires that the url be public or at least at a location where the Looker instance @@ -1520,24 +1504,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /fetch_and_parse_saml_idp_metadata -> ByteArray */ fun fetch_and_parse_saml_idp_metadata( - body: String - ) : SDKResponse { - return this.post("/fetch_and_parse_saml_idp_metadata", mapOf(), body) + body: String, + ): SDKResponse { + return this.post("/fetch_and_parse_saml_idp_metadata", mapOf(), body) } - /** * ### Get session config. * * GET /session_config -> ByteArray */ - fun session_config( - - ) : SDKResponse { - return this.get("/session_config", mapOf()) + fun session_config(): SDKResponse { + return this.get("/session_config", mapOf()) } - /** * ### Update session config. * @@ -1546,12 +1526,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /session_config -> ByteArray */ fun update_session_config( - body: WriteSessionConfig - ) : SDKResponse { - return this.patch("/session_config", mapOf(), body) + body: WriteSessionConfig, + ): SDKResponse { + return this.patch("/session_config", mapOf(), body) } - /** * ### Get Support Access Allowlist Users * @@ -1564,13 +1543,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /support_access/allowlist -> ByteArray */ @JvmOverloads fun get_support_access_allowlist_entries( - fields: String? = null - ) : SDKResponse { - return this.get("/support_access/allowlist", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/support_access/allowlist", + mapOf("fields" to fields), + ) } - /** * ### Add Support Access Allowlist Users * @@ -1583,12 +1563,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /support_access/allowlist -> ByteArray */ fun add_support_access_allowlist_entries( - body: SupportAccessAddEntries - ) : SDKResponse { - return this.post("/support_access/allowlist", mapOf(), body) + body: SupportAccessAddEntries, + ): SDKResponse { + return this.post("/support_access/allowlist", mapOf(), body) } - /** * ### Delete Support Access Allowlist User * @@ -1601,13 +1580,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /support_access/allowlist/{entry_id} -> ByteArray */ fun delete_support_access_allowlist_entry( - entry_id: String - ) : SDKResponse { + entry_id: String, + ): SDKResponse { val path_entry_id = encodeParam(entry_id) - return this.delete("/support_access/allowlist/${path_entry_id}", mapOf()) + return this.delete("/support_access/allowlist/${path_entry_id}", mapOf()) } - /** * ### Enable Support Access * @@ -1620,12 +1598,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /support_access/enable -> ByteArray */ fun enable_support_access( - body: SupportAccessEnable - ) : SDKResponse { - return this.put("/support_access/enable", mapOf(), body) + body: SupportAccessEnable, + ): SDKResponse { + return this.put("/support_access/enable", mapOf(), body) } - /** * ### Disable Support Access * @@ -1635,13 +1612,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * PUT /support_access/disable -> ByteArray */ - fun disable_support_access( - - ) : SDKResponse { - return this.put("/support_access/disable", mapOf()) + fun disable_support_access(): SDKResponse { + return this.put("/support_access/disable", mapOf()) } - /** * ### Support Access Status * @@ -1651,13 +1625,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /support_access/status -> ByteArray */ - fun support_access_status( - - ) : SDKResponse { - return this.get("/support_access/status", mapOf()) + fun support_access_status(): SDKResponse { + return this.get("/support_access/status", mapOf()) } - /** * ### Get currently locked-out users. * @@ -1666,13 +1637,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /user_login_lockouts -> ByteArray */ @JvmOverloads fun all_user_login_lockouts( - fields: String? = null - ) : SDKResponse { - return this.get("/user_login_lockouts", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/user_login_lockouts", + mapOf("fields" to fields), + ) } - /** * ### Search currently locked-out users. * @@ -1701,23 +1673,26 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { full_name: String? = null, email: String? = null, remote_id: String? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get("/user_login_lockouts/search", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "auth_type" to auth_type, - "full_name" to full_name, - "email" to email, - "remote_id" to remote_id, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get( + "/user_login_lockouts/search", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "auth_type" to auth_type, + "full_name" to full_name, + "email" to email, + "remote_id" to remote_id, + "filter_or" to filter_or, + ), + ) } - /** * ### Removes login lockout for the associated user. * @@ -1726,17 +1701,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /user_login_lockout/{key} -> ByteArray */ fun delete_user_login_lockout( - key: String - ) : SDKResponse { + key: String, + ): SDKResponse { val path_key = encodeParam(key) - return this.delete("/user_login_lockout/${path_key}", mapOf()) + return this.delete("/user_login_lockout/${path_key}", mapOf()) } //endregion Auth: Manage User Authentication Configuration //region Board: Manage Boards - /** * ### Get information about all boards. * @@ -1745,13 +1719,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /boards -> ByteArray */ @JvmOverloads fun all_boards( - fields: String? = null - ) : SDKResponse { - return this.get("/boards", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/boards", + mapOf("fields" to fields), + ) } - /** * ### Create a new board. * @@ -1762,13 +1737,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_board( body: WriteBoard, - fields: String? = null - ) : SDKResponse { - return this.post("/boards", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/boards", + mapOf("fields" to fields), + body, + ) } - /** * ### Search Boards * @@ -1824,26 +1801,29 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { offset: Long? = null, limit: Long? = null, filter_or: Boolean? = null, - permission: String? = null - ) : SDKResponse { - return this.get("/boards/search", - mapOf("title" to title, - "created_at" to created_at, - "first_name" to first_name, - "last_name" to last_name, - "fields" to fields, - "favorited" to favorited, - "creator_id" to creator_id, - "sorts" to sorts, - "page" to page, - "per_page" to per_page, - "offset" to offset, - "limit" to limit, - "filter_or" to filter_or, - "permission" to permission)) + permission: String? = null, + ): SDKResponse { + return this.get( + "/boards/search", + mapOf( + "title" to title, + "created_at" to created_at, + "first_name" to first_name, + "last_name" to last_name, + "fields" to fields, + "favorited" to favorited, + "creator_id" to creator_id, + "sorts" to sorts, + "page" to page, + "per_page" to per_page, + "offset" to offset, + "limit" to limit, + "filter_or" to filter_or, + "permission" to permission, + ), + ) } - /** * ### Get information about a board. * @@ -1854,14 +1834,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun board( board_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_board_id = encodeParam(board_id) - return this.get("/boards/${path_board_id}", - mapOf("fields" to fields)) + return this.get( + "/boards/${path_board_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a board definition. * @@ -1874,14 +1855,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_board( board_id: String, body: WriteBoard, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_board_id = encodeParam(board_id) - return this.patch("/boards/${path_board_id}", - mapOf("fields" to fields), body) + return this.patch( + "/boards/${path_board_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a board. * @@ -1890,13 +1873,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /boards/{board_id} -> ByteArray */ fun delete_board( - board_id: String - ) : SDKResponse { + board_id: String, + ): SDKResponse { val path_board_id = encodeParam(board_id) - return this.delete("/boards/${path_board_id}", mapOf()) + return this.delete("/boards/${path_board_id}", mapOf()) } - /** * ### Get information about all board items. * @@ -1909,15 +1891,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun all_board_items( fields: String? = null, sorts: String? = null, - board_section_id: String? = null - ) : SDKResponse { - return this.get("/board_items", - mapOf("fields" to fields, - "sorts" to sorts, - "board_section_id" to board_section_id)) + board_section_id: String? = null, + ): SDKResponse { + return this.get( + "/board_items", + mapOf( + "fields" to fields, + "sorts" to sorts, + "board_section_id" to board_section_id, + ), + ) } - /** * ### Create a new board item. * @@ -1928,13 +1913,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_board_item( body: WriteBoardItem, - fields: String? = null - ) : SDKResponse { - return this.post("/board_items", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/board_items", + mapOf("fields" to fields), + body, + ) } - /** * ### Get information about a board item. * @@ -1945,14 +1932,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun board_item( board_item_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_board_item_id = encodeParam(board_item_id) - return this.get("/board_items/${path_board_item_id}", - mapOf("fields" to fields)) + return this.get( + "/board_items/${path_board_item_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a board item definition. * @@ -1965,14 +1953,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_board_item( board_item_id: String, body: WriteBoardItem, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_board_item_id = encodeParam(board_item_id) - return this.patch("/board_items/${path_board_item_id}", - mapOf("fields" to fields), body) + return this.patch( + "/board_items/${path_board_item_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a board item. * @@ -1981,13 +1971,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /board_items/{board_item_id} -> ByteArray */ fun delete_board_item( - board_item_id: String - ) : SDKResponse { + board_item_id: String, + ): SDKResponse { val path_board_item_id = encodeParam(board_item_id) - return this.delete("/board_items/${path_board_item_id}", mapOf()) + return this.delete("/board_items/${path_board_item_id}", mapOf()) } - /** * ### Get information about all board sections. * @@ -1998,14 +1987,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_board_sections( fields: String? = null, - sorts: String? = null - ) : SDKResponse { - return this.get("/board_sections", - mapOf("fields" to fields, - "sorts" to sorts)) + sorts: String? = null, + ): SDKResponse { + return this.get( + "/board_sections", + mapOf( + "fields" to fields, + "sorts" to sorts, + ), + ) } - /** * ### Create a new board section. * @@ -2016,13 +2008,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_board_section( body: WriteBoardSection, - fields: String? = null - ) : SDKResponse { - return this.post("/board_sections", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/board_sections", + mapOf("fields" to fields), + body, + ) } - /** * ### Get information about a board section. * @@ -2033,14 +2027,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun board_section( board_section_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_board_section_id = encodeParam(board_section_id) - return this.get("/board_sections/${path_board_section_id}", - mapOf("fields" to fields)) + return this.get( + "/board_sections/${path_board_section_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a board section definition. * @@ -2053,14 +2048,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_board_section( board_section_id: String, body: WriteBoardSection, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_board_section_id = encodeParam(board_section_id) - return this.patch("/board_sections/${path_board_section_id}", - mapOf("fields" to fields), body) + return this.patch( + "/board_sections/${path_board_section_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a board section. * @@ -2069,17 +2066,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /board_sections/{board_section_id} -> ByteArray */ fun delete_board_section( - board_section_id: String - ) : SDKResponse { + board_section_id: String, + ): SDKResponse { val path_board_section_id = encodeParam(board_section_id) - return this.delete("/board_sections/${path_board_section_id}", mapOf()) + return this.delete("/board_sections/${path_board_section_id}", mapOf()) } //endregion Board: Manage Boards //region ColorCollection: Manage Color Collections - /** * ### Get an array of all existing Color Collections * Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) @@ -2095,13 +2091,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /color_collections -> ByteArray */ @JvmOverloads fun all_color_collections( - fields: String? = null - ) : SDKResponse { - return this.get("/color_collections", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/color_collections", + mapOf("fields" to fields), + ) } - /** * ### Create a custom color collection with the specified information * @@ -2118,12 +2115,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /color_collections -> ByteArray */ fun create_color_collection( - body: WriteColorCollection - ) : SDKResponse { - return this.post("/color_collections", mapOf(), body) + body: WriteColorCollection, + ): SDKResponse { + return this.post("/color_collections", mapOf(), body) } - /** * ### Get an array of all existing **Custom** Color Collections * Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) @@ -2137,13 +2133,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /color_collections/custom -> ByteArray */ @JvmOverloads fun color_collections_custom( - fields: String? = null - ) : SDKResponse { - return this.get("/color_collections/custom", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/color_collections/custom", + mapOf("fields" to fields), + ) } - /** * ### Get an array of all existing **Standard** Color Collections * Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) @@ -2157,13 +2154,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /color_collections/standard -> ByteArray */ @JvmOverloads fun color_collections_standard( - fields: String? = null - ) : SDKResponse { - return this.get("/color_collections/standard", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/color_collections/standard", + mapOf("fields" to fields), + ) } - /** * ### Get the default color collection * @@ -2173,13 +2171,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /color_collections/default -> ByteArray */ - fun default_color_collection( - - ) : SDKResponse { - return this.get("/color_collections/default", mapOf()) + fun default_color_collection(): SDKResponse { + return this.get("/color_collections/default", mapOf()) } - /** * ### Set the global default Color Collection by ID * @@ -2191,13 +2186,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /color_collections/default -> ByteArray */ fun set_default_color_collection( - collection_id: String - ) : SDKResponse { - return this.put("/color_collections/default", - mapOf("collection_id" to collection_id)) + collection_id: String, + ): SDKResponse { + return this.put( + "/color_collections/default", + mapOf("collection_id" to collection_id), + ) } - /** * ### Get a Color Collection by ID * @@ -2217,14 +2213,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun color_collection( collection_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_collection_id = encodeParam(collection_id) - return this.get("/color_collections/${path_collection_id}", - mapOf("fields" to fields)) + return this.get( + "/color_collections/${path_collection_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a custom color collection by id. * **Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors. @@ -2236,13 +2233,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_color_collection( collection_id: String, - body: WriteColorCollection - ) : SDKResponse { + body: WriteColorCollection, + ): SDKResponse { val path_collection_id = encodeParam(collection_id) - return this.patch("/color_collections/${path_collection_id}", mapOf(), body) + return this.patch("/color_collections/${path_collection_id}", mapOf(), body) } - /** * ### Delete a custom color collection by id * @@ -2258,29 +2254,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /color_collections/{collection_id} -> ByteArray */ fun delete_color_collection( - collection_id: String - ) : SDKResponse { + collection_id: String, + ): SDKResponse { val path_collection_id = encodeParam(collection_id) - return this.delete("/color_collections/${path_collection_id}", mapOf()) + return this.delete("/color_collections/${path_collection_id}", mapOf()) } //endregion ColorCollection: Manage Color Collections //region Config: Manage General Configuration - /** * Get the current Cloud Storage Configuration. * * GET /cloud_storage -> ByteArray */ - fun cloud_storage_configuration( - - ) : SDKResponse { - return this.get("/cloud_storage", mapOf()) + fun cloud_storage_configuration(): SDKResponse { + return this.get("/cloud_storage", mapOf()) } - /** * Update the current Cloud Storage Configuration. * @@ -2289,25 +2281,21 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /cloud_storage -> ByteArray */ fun update_cloud_storage_configuration( - body: WriteBackupConfiguration - ) : SDKResponse { - return this.patch("/cloud_storage", mapOf(), body) + body: WriteBackupConfiguration, + ): SDKResponse { + return this.patch("/cloud_storage", mapOf(), body) } - /** * ### Get the current status and content of custom welcome emails * * GET /custom_welcome_email -> ByteArray */ @Deprecated(message = "Deprecated method") - fun custom_welcome_email( - - ) : SDKResponse { - return this.get("/custom_welcome_email", mapOf()) + fun custom_welcome_email(): SDKResponse { + return this.get("/custom_welcome_email", mapOf()) } - /** * Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user. * @@ -2317,15 +2305,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /custom_welcome_email -> ByteArray */ @Deprecated(message = "Deprecated method") - @JvmOverloads fun update_custom_welcome_email( + @JvmOverloads + fun update_custom_welcome_email( body: CustomWelcomeEmail, - send_test_welcome_email: Boolean? = null - ) : SDKResponse { - return this.patch("/custom_welcome_email", - mapOf("send_test_welcome_email" to send_test_welcome_email), body) + send_test_welcome_email: Boolean? = null, + ): SDKResponse { + return this.patch( + "/custom_welcome_email", + mapOf("send_test_welcome_email" to send_test_welcome_email), + body, + ) } - /** * Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user. * @@ -2334,24 +2325,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /custom_welcome_email_test -> ByteArray */ fun update_custom_welcome_email_test( - body: WelcomeEmailTest - ) : SDKResponse { - return this.put("/custom_welcome_email_test", mapOf(), body) + body: WelcomeEmailTest, + ): SDKResponse { + return this.put("/custom_welcome_email_test", mapOf(), body) } - /** * ### Retrieve the value for whether or not digest emails is enabled * * GET /digest_emails_enabled -> ByteArray */ - fun digest_emails_enabled( - - ) : SDKResponse { - return this.get("/digest_emails_enabled", mapOf()) + fun digest_emails_enabled(): SDKResponse { + return this.get("/digest_emails_enabled", mapOf()) } - /** * ### Update the setting for enabling/disabling digest emails * @@ -2360,12 +2347,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /digest_emails_enabled -> ByteArray */ fun update_digest_emails_enabled( - body: DigestEmails - ) : SDKResponse { - return this.patch("/digest_emails_enabled", mapOf(), body) + body: DigestEmails, + ): SDKResponse { + return this.patch("/digest_emails_enabled", mapOf(), body) } - /** * ### Trigger the generation of digest email records and send them to Looker's internal system. This does not send * any actual emails, it generates records containing content which may be of interest for users who have become inactive. @@ -2373,13 +2359,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * POST /digest_email_send -> ByteArray */ - fun create_digest_email_send( - - ) : SDKResponse { - return this.post("/digest_email_send", mapOf()) + fun create_digest_email_send(): SDKResponse { + return this.post("/digest_email_send", mapOf()) } - /** * ### Get Egress IP Addresses * @@ -2389,25 +2372,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /public_egress_ip_addresses -> ByteArray */ - fun public_egress_ip_addresses( - - ) : SDKResponse { - return this.get("/public_egress_ip_addresses", mapOf()) + fun public_egress_ip_addresses(): SDKResponse { + return this.get("/public_egress_ip_addresses", mapOf()) } - /** * ### Set the menu item name and content for internal help resources * * GET /internal_help_resources_content -> ByteArray */ - fun internal_help_resources_content( - - ) : SDKResponse { - return this.get("/internal_help_resources_content", mapOf()) + fun internal_help_resources_content(): SDKResponse { + return this.get("/internal_help_resources_content", mapOf()) } - /** * Update internal help resources content * @@ -2416,24 +2393,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /internal_help_resources_content -> ByteArray */ fun update_internal_help_resources_content( - body: WriteInternalHelpResourcesContent - ) : SDKResponse { - return this.patch("/internal_help_resources_content", mapOf(), body) + body: WriteInternalHelpResourcesContent, + ): SDKResponse { + return this.patch("/internal_help_resources_content", mapOf(), body) } - /** * ### Get and set the options for internal help resources * * GET /internal_help_resources_enabled -> ByteArray */ - fun internal_help_resources( - - ) : SDKResponse { - return this.get("/internal_help_resources_enabled", mapOf()) + fun internal_help_resources(): SDKResponse { + return this.get("/internal_help_resources_enabled", mapOf()) } - /** * Update internal help resources settings * @@ -2442,12 +2415,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /internal_help_resources -> ByteArray */ fun update_internal_help_resources( - body: WriteInternalHelpResources - ) : SDKResponse { - return this.patch("/internal_help_resources", mapOf(), body) + body: WriteInternalHelpResources, + ): SDKResponse { + return this.patch("/internal_help_resources", mapOf(), body) } - /** * ### Get all legacy features. * @@ -2455,13 +2427,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /legacy_features -> ByteArray */ - fun all_legacy_features( - - ) : SDKResponse { - return this.get("/legacy_features", mapOf()) + fun all_legacy_features(): SDKResponse { + return this.get("/legacy_features", mapOf()) } - /** * ### Get information about the legacy feature with a specific id. * @@ -2472,13 +2441,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /legacy_features/{legacy_feature_id} -> ByteArray */ fun legacy_feature( - legacy_feature_id: String - ) : SDKResponse { + legacy_feature_id: String, + ): SDKResponse { val path_legacy_feature_id = encodeParam(legacy_feature_id) - return this.get("/legacy_features/${path_legacy_feature_id}", mapOf()) + return this.get("/legacy_features/${path_legacy_feature_id}", mapOf()) } - /** * ### Update information about the legacy feature with a specific id. * @@ -2491,37 +2459,30 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_legacy_feature( legacy_feature_id: String, - body: WriteLegacyFeature - ) : SDKResponse { + body: WriteLegacyFeature, + ): SDKResponse { val path_legacy_feature_id = encodeParam(legacy_feature_id) - return this.patch("/legacy_features/${path_legacy_feature_id}", mapOf(), body) + return this.patch("/legacy_features/${path_legacy_feature_id}", mapOf(), body) } - /** * ### Get a list of locales that Looker supports. * * GET /locales -> ByteArray */ - fun all_locales( - - ) : SDKResponse { - return this.get("/locales", mapOf()) + fun all_locales(): SDKResponse { + return this.get("/locales", mapOf()) } - /** * ### Get all mobile settings. * * GET /mobile/settings -> ByteArray */ - fun mobile_settings( - - ) : SDKResponse { - return this.get("/mobile/settings", mapOf()) + fun mobile_settings(): SDKResponse { + return this.get("/mobile/settings", mapOf()) } - /** * ### Get Looker Settings * @@ -2550,13 +2511,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /setting -> ByteArray */ @JvmOverloads fun get_setting( - fields: String? = null - ) : SDKResponse { - return this.get("/setting", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/setting", + mapOf("fields" to fields), + ) } - /** * ### Configure Looker Settings * @@ -2591,13 +2553,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun set_setting( body: WriteSetting, - fields: String? = null - ) : SDKResponse { - return this.patch("/setting", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.patch( + "/setting", + mapOf("fields" to fields), + body, + ) } - /** * ### Configure SMTP Settings * This API allows users to configure the SMTP settings on the Looker instance. @@ -2608,12 +2572,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /smtp_settings -> ByteArray */ fun set_smtp_settings( - body: SmtpSettings - ) : SDKResponse { - return this.post("/smtp_settings", mapOf(), body) + body: SmtpSettings, + ): SDKResponse { + return this.post("/smtp_settings", mapOf(), body) } - /** * ### Get current SMTP status. * @@ -2622,25 +2585,23 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /smtp_status -> ByteArray */ @JvmOverloads fun smtp_status( - fields: String? = null - ) : SDKResponse { - return this.get("/smtp_status", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/smtp_status", + mapOf("fields" to fields), + ) } - /** * ### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks). * * GET /timezones -> ByteArray */ - fun all_timezones( - - ) : SDKResponse { - return this.get("/timezones", mapOf()) + fun all_timezones(): SDKResponse { + return this.get("/timezones", mapOf()) } - /** * ### Get information about all API versions supported by this Looker instance. * @@ -2649,13 +2610,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /versions -> ByteArray */ @JvmOverloads fun versions( - fields: String? = null - ) : SDKResponse { - return this.get("/versions", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/versions", + mapOf("fields" to fields), + ) } - /** * ### Get an API specification for this Looker instance. * @@ -2668,14 +2630,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun api_spec( api_version: String, - specification: String - ) : SDKResponse { + specification: String, + ): SDKResponse { val path_api_version = encodeParam(api_version) val path_specification = encodeParam(specification) - return this.get("/api_spec/${path_api_version}/${path_specification}", mapOf()) + return this.get("/api_spec/${path_api_version}/${path_specification}", mapOf()) } - /** * ### This feature is enabled only by special license. * @@ -2688,14 +2649,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /whitelabel_configuration -> ByteArray */ @Deprecated(message = "Deprecated method") - @JvmOverloads fun whitelabel_configuration( - fields: String? = null - ) : SDKResponse { - return this.get("/whitelabel_configuration", - mapOf("fields" to fields)) + @JvmOverloads + fun whitelabel_configuration( + fields: String? = null, + ): SDKResponse { + return this.get( + "/whitelabel_configuration", + mapOf("fields" to fields), + ) } - /** * ### Update the private label configuration * @@ -2707,16 +2670,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @Deprecated(message = "Deprecated method") fun update_whitelabel_configuration( - body: WriteWhitelabelConfiguration - ) : SDKResponse { - return this.put("/whitelabel_configuration", mapOf(), body) + body: WriteWhitelabelConfiguration, + ): SDKResponse { + return this.put("/whitelabel_configuration", mapOf(), body) } //endregion Config: Manage General Configuration //region Connection: Manage Database Connections - /** * ### Get information about all connections. * @@ -2725,13 +2687,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /connections -> ByteArray */ @JvmOverloads fun all_connections( - fields: String? = null - ) : SDKResponse { - return this.get("/connections", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/connections", + mapOf("fields" to fields), + ) } - /** * ### Create a connection using the specified configuration. * @@ -2740,12 +2703,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /connections -> ByteArray */ fun create_connection( - body: WriteDBConnection - ) : SDKResponse { - return this.post("/connections", mapOf(), body) + body: WriteDBConnection, + ): SDKResponse { + return this.post("/connections", mapOf(), body) } - /** * ### Get information about a connection. * @@ -2756,14 +2718,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun connection( connection_name: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get("/connections/${path_connection_name}", - mapOf("fields" to fields)) + return this.get( + "/connections/${path_connection_name}", + mapOf("fields" to fields), + ) } - /** * ### Update a connection using the specified configuration. * @@ -2774,13 +2737,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_connection( connection_name: String, - body: WriteDBConnection - ) : SDKResponse { + body: WriteDBConnection, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.patch("/connections/${path_connection_name}", mapOf(), body) + return this.patch("/connections/${path_connection_name}", mapOf(), body) } - /** * ### Delete a connection. * @@ -2789,13 +2751,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /connections/{connection_name} -> ByteArray */ fun delete_connection( - connection_name: String - ) : SDKResponse { + connection_name: String, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.delete("/connections/${path_connection_name}", mapOf()) + return this.delete("/connections/${path_connection_name}", mapOf()) } - /** * ### Delete a connection override. * @@ -2806,14 +2767,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_connection_override( connection_name: String, - override_context: String - ) : SDKResponse { + override_context: String, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) val path_override_context = encodeParam(override_context) - return this.delete("/connections/${path_connection_name}/connection_override/${path_override_context}", mapOf()) + return this.delete("/connections/${path_connection_name}/connection_override/${path_override_context}", mapOf()) } - /** * ### Test an existing connection. * @@ -2831,14 +2791,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun test_connection( connection_name: String, - tests: DelimArray? = null - ) : SDKResponse { + tests: DelimArray? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.put("/connections/${path_connection_name}/test", - mapOf("tests" to tests)) + return this.put( + "/connections/${path_connection_name}/test", + mapOf("tests" to tests), + ) } - /** * ### Test a connection configuration. * @@ -2856,13 +2817,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun test_connection_config( body: WriteDBConnection, - tests: DelimArray? = null - ) : SDKResponse { - return this.put("/connections/test", - mapOf("tests" to tests), body) + tests: DelimArray? = null, + ): SDKResponse { + return this.put( + "/connections/test", + mapOf("tests" to tests), + body, + ) } - /** * ### Get information about all dialects. * @@ -2871,13 +2834,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /dialect_info -> ByteArray */ @JvmOverloads fun all_dialect_infos( - fields: String? = null - ) : SDKResponse { - return this.get("/dialect_info", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/dialect_info", + mapOf("fields" to fields), + ) } - /** * ### Get all External OAuth Applications. * @@ -2890,14 +2854,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_external_oauth_applications( name: String? = null, - client_id: String? = null - ) : SDKResponse { - return this.get("/external_oauth_applications", - mapOf("name" to name, - "client_id" to client_id)) + client_id: String? = null, + ): SDKResponse { + return this.get( + "/external_oauth_applications", + mapOf( + "name" to name, + "client_id" to client_id, + ), + ) } - /** * ### Create an OAuth Application using the specified configuration. * @@ -2908,12 +2875,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /external_oauth_applications -> ByteArray */ fun create_external_oauth_application( - body: WriteExternalOauthApplication - ) : SDKResponse { - return this.post("/external_oauth_applications", mapOf(), body) + body: WriteExternalOauthApplication, + ): SDKResponse { + return this.post("/external_oauth_applications", mapOf(), body) } - /** * ### Create OAuth User state. * @@ -2922,12 +2888,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /external_oauth_applications/user_state -> ByteArray */ fun create_oauth_application_user_state( - body: CreateOAuthApplicationUserStateRequest - ) : SDKResponse { - return this.post("/external_oauth_applications/user_state", mapOf(), body) + body: CreateOAuthApplicationUserStateRequest, + ): SDKResponse { + return this.post("/external_oauth_applications/user_state", mapOf(), body) } - /** * ### Get information about all SSH Servers. * @@ -2936,13 +2901,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_servers -> ByteArray */ @JvmOverloads fun all_ssh_servers( - fields: String? = null - ) : SDKResponse { - return this.get("/ssh_servers", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/ssh_servers", + mapOf("fields" to fields), + ) } - /** * ### Create an SSH Server. * @@ -2951,12 +2917,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /ssh_servers -> ByteArray */ fun create_ssh_server( - body: WriteSshServer - ) : SDKResponse { - return this.post("/ssh_servers", mapOf(), body) + body: WriteSshServer, + ): SDKResponse { + return this.post("/ssh_servers", mapOf(), body) } - /** * ### Get information about an SSH Server. * @@ -2965,13 +2930,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_server/{ssh_server_id} -> ByteArray */ fun ssh_server( - ssh_server_id: String - ) : SDKResponse { + ssh_server_id: String, + ): SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) - return this.get("/ssh_server/${path_ssh_server_id}", mapOf()) + return this.get("/ssh_server/${path_ssh_server_id}", mapOf()) } - /** * ### Update an SSH Server. * @@ -2982,13 +2946,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_ssh_server( ssh_server_id: String, - body: WriteSshServer - ) : SDKResponse { + body: WriteSshServer, + ): SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) - return this.patch("/ssh_server/${path_ssh_server_id}", mapOf(), body) + return this.patch("/ssh_server/${path_ssh_server_id}", mapOf(), body) } - /** * ### Delete an SSH Server. * @@ -2997,13 +2960,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /ssh_server/{ssh_server_id} -> ByteArray */ fun delete_ssh_server( - ssh_server_id: String - ) : SDKResponse { + ssh_server_id: String, + ): SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) - return this.delete("/ssh_server/${path_ssh_server_id}", mapOf()) + return this.delete("/ssh_server/${path_ssh_server_id}", mapOf()) } - /** * ### Test the SSH Server * @@ -3012,13 +2974,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_server/{ssh_server_id}/test -> ByteArray */ fun test_ssh_server( - ssh_server_id: String - ) : SDKResponse { + ssh_server_id: String, + ): SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) - return this.get("/ssh_server/${path_ssh_server_id}/test", mapOf()) + return this.get("/ssh_server/${path_ssh_server_id}/test", mapOf()) } - /** * ### Get information about all SSH Tunnels. * @@ -3027,13 +2988,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_tunnels -> ByteArray */ @JvmOverloads fun all_ssh_tunnels( - fields: String? = null - ) : SDKResponse { - return this.get("/ssh_tunnels", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/ssh_tunnels", + mapOf("fields" to fields), + ) } - /** * ### Create an SSH Tunnel * @@ -3042,12 +3004,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /ssh_tunnels -> ByteArray */ fun create_ssh_tunnel( - body: WriteSshTunnel - ) : SDKResponse { - return this.post("/ssh_tunnels", mapOf(), body) + body: WriteSshTunnel, + ): SDKResponse { + return this.post("/ssh_tunnels", mapOf(), body) } - /** * ### Get information about an SSH Tunnel. * @@ -3056,13 +3017,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_tunnel/{ssh_tunnel_id} -> ByteArray */ fun ssh_tunnel( - ssh_tunnel_id: String - ) : SDKResponse { + ssh_tunnel_id: String, + ): SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) - return this.get("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf()) + return this.get("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf()) } - /** * ### Update an SSH Tunnel * @@ -3073,13 +3033,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_ssh_tunnel( ssh_tunnel_id: String, - body: WriteSshTunnel - ) : SDKResponse { + body: WriteSshTunnel, + ): SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) - return this.patch("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf(), body) + return this.patch("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf(), body) } - /** * ### Delete an SSH Tunnel * @@ -3088,13 +3047,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /ssh_tunnel/{ssh_tunnel_id} -> ByteArray */ fun delete_ssh_tunnel( - ssh_tunnel_id: String - ) : SDKResponse { + ssh_tunnel_id: String, + ): SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) - return this.delete("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf()) + return this.delete("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf()) } - /** * ### Test the SSH Tunnel * @@ -3103,13 +3061,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_tunnel/{ssh_tunnel_id}/test -> ByteArray */ fun test_ssh_tunnel( - ssh_tunnel_id: String - ) : SDKResponse { + ssh_tunnel_id: String, + ): SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) - return this.get("/ssh_tunnel/${path_ssh_tunnel_id}/test", mapOf()) + return this.get("/ssh_tunnel/${path_ssh_tunnel_id}/test", mapOf()) } - /** * ### Get the SSH public key * @@ -3117,17 +3074,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /ssh_public_key -> ByteArray */ - fun ssh_public_key( - - ) : SDKResponse { - return this.get("/ssh_public_key", mapOf()) + fun ssh_public_key(): SDKResponse { + return this.get("/ssh_public_key", mapOf()) } //endregion Connection: Manage Database Connections //region Content: Manage Content - /** * ### Search Favorite Content * @@ -3177,23 +3131,26 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { offset: Long? = null, sorts: String? = null, fields: String? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get("/content_favorite/search", - mapOf("id" to id, - "user_id" to user_id, - "content_metadata_id" to content_metadata_id, - "dashboard_id" to dashboard_id, - "look_id" to look_id, - "board_id" to board_id, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "fields" to fields, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get( + "/content_favorite/search", + mapOf( + "id" to id, + "user_id" to user_id, + "content_metadata_id" to content_metadata_id, + "dashboard_id" to dashboard_id, + "look_id" to look_id, + "board_id" to board_id, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "fields" to fields, + "filter_or" to filter_or, + ), + ) } - /** * ### Get favorite content by its id * @@ -3204,14 +3161,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun content_favorite( content_favorite_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_content_favorite_id = encodeParam(content_favorite_id) - return this.get("/content_favorite/${path_content_favorite_id}", - mapOf("fields" to fields)) + return this.get( + "/content_favorite/${path_content_favorite_id}", + mapOf("fields" to fields), + ) } - /** * ### Delete favorite content * @@ -3220,13 +3178,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /content_favorite/{content_favorite_id} -> ByteArray */ fun delete_content_favorite( - content_favorite_id: String - ) : SDKResponse { + content_favorite_id: String, + ): SDKResponse { val path_content_favorite_id = encodeParam(content_favorite_id) - return this.delete("/content_favorite/${path_content_favorite_id}", mapOf()) + return this.delete("/content_favorite/${path_content_favorite_id}", mapOf()) } - /** * ### Create favorite content * @@ -3235,12 +3192,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /content_favorite -> ByteArray */ fun create_content_favorite( - body: WriteContentFavorite - ) : SDKResponse { - return this.post("/content_favorite", mapOf(), body) + body: WriteContentFavorite, + ): SDKResponse { + return this.post("/content_favorite", mapOf(), body) } - /** * ### Get information about all content metadata in a space. * @@ -3251,14 +3207,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_content_metadatas( parent_id: String, - fields: String? = null - ) : SDKResponse { - return this.get("/content_metadata", - mapOf("parent_id" to parent_id, - "fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/content_metadata", + mapOf( + "parent_id" to parent_id, + "fields" to fields, + ), + ) } - /** * ### Get information about an individual content metadata record. * @@ -3269,14 +3228,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun content_metadata( content_metadata_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_content_metadata_id = encodeParam(content_metadata_id) - return this.get("/content_metadata/${path_content_metadata_id}", - mapOf("fields" to fields)) + return this.get( + "/content_metadata/${path_content_metadata_id}", + mapOf("fields" to fields), + ) } - /** * ### Move a piece of content. * @@ -3287,13 +3247,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_content_metadata( content_metadata_id: String, - body: WriteContentMeta - ) : SDKResponse { + body: WriteContentMeta, + ): SDKResponse { val path_content_metadata_id = encodeParam(content_metadata_id) - return this.patch("/content_metadata/${path_content_metadata_id}", mapOf(), body) + return this.patch("/content_metadata/${path_content_metadata_id}", mapOf(), body) } - /** * ### All content metadata access records for a content metadata item. * @@ -3304,14 +3263,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_content_metadata_accesses( content_metadata_id: String, - fields: String? = null - ) : SDKResponse { - return this.get("/content_metadata_access", - mapOf("content_metadata_id" to content_metadata_id, - "fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/content_metadata_access", + mapOf( + "content_metadata_id" to content_metadata_id, + "fields" to fields, + ), + ) } - /** * ### Create content metadata access. * @@ -3322,13 +3284,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_content_metadata_access( body: ContentMetaGroupUser, - send_boards_notification_email: Boolean? = null - ) : SDKResponse { - return this.post("/content_metadata_access", - mapOf("send_boards_notification_email" to send_boards_notification_email), body) + send_boards_notification_email: Boolean? = null, + ): SDKResponse { + return this.post( + "/content_metadata_access", + mapOf("send_boards_notification_email" to send_boards_notification_email), + body, + ) } - /** * ### Update type of access for content metadata. * @@ -3339,13 +3303,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_content_metadata_access( content_metadata_access_id: String, - body: ContentMetaGroupUser - ) : SDKResponse { + body: ContentMetaGroupUser, + ): SDKResponse { val path_content_metadata_access_id = encodeParam(content_metadata_access_id) - return this.put("/content_metadata_access/${path_content_metadata_access_id}", mapOf(), body) + return this.put("/content_metadata_access/${path_content_metadata_access_id}", mapOf(), body) } - /** * ### Remove content metadata access. * @@ -3354,13 +3317,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /content_metadata_access/{content_metadata_access_id} -> ByteArray */ fun delete_content_metadata_access( - content_metadata_access_id: String - ) : SDKResponse { + content_metadata_access_id: String, + ): SDKResponse { val path_content_metadata_access_id = encodeParam(content_metadata_access_id) - return this.delete("/content_metadata_access/${path_content_metadata_access_id}", mapOf()) + return this.delete("/content_metadata_access/${path_content_metadata_access_id}", mapOf()) } - /** * ### Search across looks, dashboards, and lookml dashboards. The terms field will be matched against the * title and description of the content and the closest results are returned. Content that has been frequently @@ -3389,23 +3351,26 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, page: Long? = null, - per_page: Long? = null - ) : SDKResponse { + per_page: Long? = null, + ): SDKResponse { val path_terms = encodeParam(terms) - return this.get("/content/${path_terms}", - mapOf("fields" to fields, - "types" to types, - "limit" to limit, - "offset" to offset, - "page" to page, - "per_page" to per_page)) + return this.get( + "/content/${path_terms}", + mapOf( + "fields" to fields, + "types" to types, + "limit" to limit, + "offset" to offset, + "page" to page, + "per_page" to per_page, + ), + ) } - /** * ### Get an image representing the contents of a dashboard or look. * - * The returned thumbnail is an abstract representation of the contents of a dashbord or look and does not + * The returned thumbnail is an abstract representation of the contents of a dashboard or look and does not * reflect the actual data displayed in the respective visualizations. * * @param {String} type Either dashboard or look @@ -3427,19 +3392,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { theme: String? = null, format: String? = null, width: Long? = null, - height: Long? = null - ) : SDKResponse { + height: Long? = null, + ): SDKResponse { val path_type = encodeParam(type) val path_resource_id = encodeParam(resource_id) - return this.get("/content_thumbnail/${path_type}/${path_resource_id}", - mapOf("reload" to reload, - "theme" to theme, - "format" to format, - "width" to width, - "height" to height)) + return this.get( + "/content_thumbnail/${path_type}/${path_resource_id}", + mapOf( + "reload" to reload, + "theme" to theme, + "format" to format, + "width" to width, + "height" to height, + ), + ) } - /** * ### Validate All Content * @@ -3451,13 +3419,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /content_validation -> ByteArray */ @JvmOverloads fun content_validation( - fields: String? = null - ) : SDKResponse { - return this.get("/content_validation", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/content_validation", + mapOf("fields" to fields), + ) } - /** * ### Search Content Views * @@ -3511,31 +3480,34 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, sorts: String? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get("/content_view/search", - mapOf("view_count" to view_count, - "group_id" to group_id, - "look_id" to look_id, - "dashboard_id" to dashboard_id, - "content_metadata_id" to content_metadata_id, - "start_of_week_date" to start_of_week_date, - "all_time" to all_time, - "user_id" to user_id, - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get( + "/content_view/search", + mapOf( + "view_count" to view_count, + "group_id" to group_id, + "look_id" to look_id, + "dashboard_id" to dashboard_id, + "content_metadata_id" to content_metadata_id, + "start_of_week_date" to start_of_week_date, + "all_time" to all_time, + "user_id" to user_id, + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + ), + ) } - /** * ### Get a vector image representing the contents of a dashboard or look. * * # DEPRECATED: Use [content_thumbnail()](#!/Content/content_thumbnail) * - * The returned thumbnail is an abstract representation of the contents of a dashbord or look and does not + * The returned thumbnail is an abstract representation of the contents of a dashboard or look and does not * reflect the actual data displayed in the respective visualizations. * * @param {String} type Either dashboard or look @@ -3545,22 +3517,24 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /vector_thumbnail/{type}/{resource_id} -> ByteArray */ @Deprecated(message = "Deprecated method") - @JvmOverloads fun vector_thumbnail( + @JvmOverloads + fun vector_thumbnail( type: String, resource_id: String, - reload: String? = null - ) : SDKResponse { + reload: String? = null, + ): SDKResponse { val path_type = encodeParam(type) val path_resource_id = encodeParam(resource_id) - return this.get("/vector_thumbnail/${path_type}/${path_resource_id}", - mapOf("reload" to reload)) + return this.get( + "/vector_thumbnail/${path_type}/${path_resource_id}", + mapOf("reload" to reload), + ) } //endregion Content: Manage Content //region Dashboard: Manage Dashboards - /** * ### Get information about all active dashboards. * @@ -3575,13 +3549,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /dashboards -> ByteArray */ @JvmOverloads fun all_dashboards( - fields: String? = null - ) : SDKResponse { - return this.get("/dashboards", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/dashboards", + mapOf("fields" to fields), + ) } - /** * ### Create a new dashboard * @@ -3603,12 +3578,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /dashboards -> ByteArray */ fun create_dashboard( - body: WriteDashboard - ) : SDKResponse { - return this.post("/dashboards", mapOf(), body) + body: WriteDashboard, + ): SDKResponse { + return this.post("/dashboards", mapOf(), body) } - /** * ### Search Dashboards * @@ -3684,32 +3658,35 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { offset: Long? = null, sorts: String? = null, filter_or: Boolean? = null, - not_owned_by: Boolean? = null - ) : SDKResponse { - return this.get("/dashboards/search", - mapOf("id" to id, - "slug" to slug, - "title" to title, - "description" to description, - "content_favorite_id" to content_favorite_id, - "folder_id" to folder_id, - "deleted" to deleted, - "user_id" to user_id, - "view_count" to view_count, - "content_metadata_id" to content_metadata_id, - "curate" to curate, - "last_viewed_at" to last_viewed_at, - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "not_owned_by" to not_owned_by)) + not_owned_by: Boolean? = null, + ): SDKResponse { + return this.get( + "/dashboards/search", + mapOf( + "id" to id, + "slug" to slug, + "title" to title, + "description" to description, + "content_favorite_id" to content_favorite_id, + "folder_id" to folder_id, + "deleted" to deleted, + "user_id" to user_id, + "view_count" to view_count, + "content_metadata_id" to content_metadata_id, + "curate" to curate, + "last_viewed_at" to last_viewed_at, + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "not_owned_by" to not_owned_by, + ), + ) } - /** * ### Import a LookML dashboard to a space as a UDD * Creates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard @@ -3735,15 +3712,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { lookml_dashboard_id: String, space_id: String, body: WriteDashboard? = null, - raw_locale: Boolean? = null - ) : SDKResponse { + raw_locale: Boolean? = null, + ): SDKResponse { val path_lookml_dashboard_id = encodeParam(lookml_dashboard_id) val path_space_id = encodeParam(space_id) - return this.post("/dashboards/${path_lookml_dashboard_id}/import/${path_space_id}", - mapOf("raw_locale" to raw_locale), body) + return this.post( + "/dashboards/${path_lookml_dashboard_id}/import/${path_space_id}", + mapOf("raw_locale" to raw_locale), + body, + ) } - /** * ### Update all linked dashboards to match the specified LookML dashboard. * @@ -3764,14 +3743,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun sync_lookml_dashboard( lookml_dashboard_id: String, body: WriteDashboard, - raw_locale: Boolean? = null - ) : SDKResponse { + raw_locale: Boolean? = null, + ): SDKResponse { val path_lookml_dashboard_id = encodeParam(lookml_dashboard_id) - return this.patch("/dashboards/${path_lookml_dashboard_id}/sync", - mapOf("raw_locale" to raw_locale), body) + return this.patch( + "/dashboards/${path_lookml_dashboard_id}/sync", + mapOf("raw_locale" to raw_locale), + body, + ) } - /** * ### Get information about a dashboard * @@ -3788,21 +3769,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard( dashboard_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get("/dashboards/${path_dashboard_id}", - mapOf("fields" to fields)) + return this.get( + "/dashboards/${path_dashboard_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a dashboard * * You can use this function to change the string and integer properties of * a dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components * cannot be modified by this function - use the update functions for the respective - * nested object types (like [update_dashboard_filter()](#!/3.1/Dashboard/update_dashboard_filter) to change a filter) + * nested object types (like [update_dashboard_filter()](#!/Dashboard/update_dashboard_filter) to change a filter) * to modify nested objects referenced by a dashboard. * * If you receive a 422 error response when updating a dashboard, be sure to look at the @@ -3815,13 +3797,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_dashboard( dashboard_id: String, - body: WriteDashboard - ) : SDKResponse { + body: WriteDashboard, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.patch("/dashboards/${path_dashboard_id}", mapOf(), body) + return this.patch("/dashboards/${path_dashboard_id}", mapOf(), body) } - /** * ### Delete the dashboard with the specified id * @@ -3836,15 +3817,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboards/{dashboard_id} -> ByteArray */ fun delete_dashboard( - dashboard_id: String - ) : SDKResponse { + dashboard_id: String, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.delete("/dashboards/${path_dashboard_id}", mapOf()) + return this.delete("/dashboards/${path_dashboard_id}", mapOf()) } - /** - * ### Get Aggregate Table LookML for Each Query on a Dahboard + * ### Get Aggregate Table LookML for Each Query on a Dashboard * * Returns a JSON object that contains the dashboard id and Aggregate Table lookml * @@ -3853,13 +3833,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /dashboards/aggregate_table_lookml/{dashboard_id} -> ByteArray */ fun dashboard_aggregate_table_lookml( - dashboard_id: String - ) : SDKResponse { + dashboard_id: String, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get("/dashboards/aggregate_table_lookml/${path_dashboard_id}", mapOf()) + return this.get("/dashboards/aggregate_table_lookml/${path_dashboard_id}", mapOf()) } - /** * ### Get lookml of a UDD * @@ -3870,13 +3849,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /dashboards/lookml/{dashboard_id} -> ByteArray */ fun dashboard_lookml( - dashboard_id: String - ) : SDKResponse { + dashboard_id: String, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get("/dashboards/lookml/${path_dashboard_id}", mapOf()) + return this.get("/dashboards/lookml/${path_dashboard_id}", mapOf()) } - /** * ### Move an existing dashboard * @@ -3892,14 +3870,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun move_dashboard( dashboard_id: String, - folder_id: String - ) : SDKResponse { + folder_id: String, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.patch("/dashboards/${path_dashboard_id}/move", - mapOf("folder_id" to folder_id)) + return this.patch( + "/dashboards/${path_dashboard_id}/move", + mapOf("folder_id" to folder_id), + ) } - /** * ### Creates a dashboard object based on LookML Dashboard YAML, and returns the details of the newly created dashboard. * @@ -3922,12 +3901,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /dashboards/lookml -> ByteArray */ fun import_dashboard_from_lookml( - body: WriteDashboardLookml - ) : SDKResponse { - return this.post("/dashboards/lookml", mapOf(), body) + body: WriteDashboardLookml, + ): SDKResponse { + return this.post("/dashboards/lookml", mapOf(), body) } - /** * # DEPRECATED: Use [import_dashboard_from_lookml()](#!/Dashboard/import_dashboard_from_lookml) * @@ -3936,12 +3914,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /dashboards/from_lookml -> ByteArray */ fun create_dashboard_from_lookml( - body: WriteDashboardLookml - ) : SDKResponse { - return this.post("/dashboards/from_lookml", mapOf(), body) + body: WriteDashboardLookml, + ): SDKResponse { + return this.post("/dashboards/from_lookml", mapOf(), body) } - /** * ### Copy an existing dashboard * @@ -3960,14 +3937,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun copy_dashboard( dashboard_id: String, - folder_id: String? = null - ) : SDKResponse { + folder_id: String? = null, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.post("/dashboards/${path_dashboard_id}/copy", - mapOf("folder_id" to folder_id)) + return this.post( + "/dashboards/${path_dashboard_id}/copy", + mapOf("folder_id" to folder_id), + ) } - /** * ### Search Dashboard Elements * @@ -4011,19 +3989,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { deleted: Boolean? = null, fields: String? = null, filter_or: Boolean? = null, - sorts: String? = null - ) : SDKResponse { - return this.get("/dashboard_elements/search", - mapOf("dashboard_id" to dashboard_id, - "look_id" to look_id, - "title" to title, - "deleted" to deleted, - "fields" to fields, - "filter_or" to filter_or, - "sorts" to sorts)) + sorts: String? = null, + ): SDKResponse { + return this.get( + "/dashboard_elements/search", + mapOf( + "dashboard_id" to dashboard_id, + "look_id" to look_id, + "title" to title, + "deleted" to deleted, + "fields" to fields, + "filter_or" to filter_or, + "sorts" to sorts, + ), + ) } - /** * ### Get information about the dashboard element with a specific id. * @@ -4034,14 +4015,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_element( dashboard_element_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) - return this.get("/dashboard_elements/${path_dashboard_element_id}", - mapOf("fields" to fields)) + return this.get( + "/dashboard_elements/${path_dashboard_element_id}", + mapOf("fields" to fields), + ) } - /** * ### Update the dashboard element with a specific id. * @@ -4054,14 +4036,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_element( dashboard_element_id: String, body: WriteDashboardElement, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) - return this.patch("/dashboard_elements/${path_dashboard_element_id}", - mapOf("fields" to fields), body) + return this.patch( + "/dashboard_elements/${path_dashboard_element_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a dashboard element with a specific id. * @@ -4070,13 +4054,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboard_elements/{dashboard_element_id} -> ByteArray */ fun delete_dashboard_element( - dashboard_element_id: String - ) : SDKResponse { + dashboard_element_id: String, + ): SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) - return this.delete("/dashboard_elements/${path_dashboard_element_id}", mapOf()) + return this.delete("/dashboard_elements/${path_dashboard_element_id}", mapOf()) } - /** * ### Get information about all the dashboard elements on a dashboard with a specific id. * @@ -4087,14 +4070,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_dashboard_elements( dashboard_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get("/dashboards/${path_dashboard_id}/dashboard_elements", - mapOf("fields" to fields)) + return this.get( + "/dashboards/${path_dashboard_id}/dashboard_elements", + mapOf("fields" to fields), + ) } - /** * ### Create a dashboard element on the dashboard with a specific id. * @@ -4107,14 +4091,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_dashboard_element( body: WriteDashboardElement, fields: String? = null, - apply_filters: Boolean? = null - ) : SDKResponse { - return this.post("/dashboard_elements", - mapOf("fields" to fields, - "apply_filters" to apply_filters), body) + apply_filters: Boolean? = null, + ): SDKResponse { + return this.post( + "/dashboard_elements", + mapOf( + "fields" to fields, + "apply_filters" to apply_filters, + ), + body, + ) } - /** * ### Get information about the dashboard filters with a specific id. * @@ -4125,14 +4113,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_filter( dashboard_filter_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_filter_id = encodeParam(dashboard_filter_id) - return this.get("/dashboard_filters/${path_dashboard_filter_id}", - mapOf("fields" to fields)) + return this.get( + "/dashboard_filters/${path_dashboard_filter_id}", + mapOf("fields" to fields), + ) } - /** * ### Update the dashboard filter with a specific id. * @@ -4145,14 +4134,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_filter( dashboard_filter_id: String, body: WriteDashboardFilter, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_filter_id = encodeParam(dashboard_filter_id) - return this.patch("/dashboard_filters/${path_dashboard_filter_id}", - mapOf("fields" to fields), body) + return this.patch( + "/dashboard_filters/${path_dashboard_filter_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a dashboard filter with a specific id. * @@ -4161,13 +4152,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboard_filters/{dashboard_filter_id} -> ByteArray */ fun delete_dashboard_filter( - dashboard_filter_id: String - ) : SDKResponse { + dashboard_filter_id: String, + ): SDKResponse { val path_dashboard_filter_id = encodeParam(dashboard_filter_id) - return this.delete("/dashboard_filters/${path_dashboard_filter_id}", mapOf()) + return this.delete("/dashboard_filters/${path_dashboard_filter_id}", mapOf()) } - /** * ### Get information about all the dashboard filters on a dashboard with a specific id. * @@ -4178,14 +4168,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_dashboard_filters( dashboard_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get("/dashboards/${path_dashboard_id}/dashboard_filters", - mapOf("fields" to fields)) + return this.get( + "/dashboards/${path_dashboard_id}/dashboard_filters", + mapOf("fields" to fields), + ) } - /** * ### Create a dashboard filter on the dashboard with a specific id. * @@ -4196,13 +4187,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_dashboard_filter( body: WriteCreateDashboardFilter, - fields: String? = null - ) : SDKResponse { - return this.post("/dashboard_filters", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/dashboard_filters", + mapOf("fields" to fields), + body, + ) } - /** * ### Get information about the dashboard elements with a specific id. * @@ -4213,14 +4206,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_layout_component( dashboard_layout_component_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_layout_component_id = encodeParam(dashboard_layout_component_id) - return this.get("/dashboard_layout_components/${path_dashboard_layout_component_id}", - mapOf("fields" to fields)) + return this.get( + "/dashboard_layout_components/${path_dashboard_layout_component_id}", + mapOf("fields" to fields), + ) } - /** * ### Update the dashboard element with a specific id. * @@ -4233,14 +4227,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_layout_component( dashboard_layout_component_id: String, body: WriteDashboardLayoutComponent, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_layout_component_id = encodeParam(dashboard_layout_component_id) - return this.patch("/dashboard_layout_components/${path_dashboard_layout_component_id}", - mapOf("fields" to fields), body) + return this.patch( + "/dashboard_layout_components/${path_dashboard_layout_component_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Get information about all the dashboard layout components for a dashboard layout with a specific id. * @@ -4251,14 +4247,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_layout_dashboard_layout_components( dashboard_layout_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) - return this.get("/dashboard_layouts/${path_dashboard_layout_id}/dashboard_layout_components", - mapOf("fields" to fields)) + return this.get( + "/dashboard_layouts/${path_dashboard_layout_id}/dashboard_layout_components", + mapOf("fields" to fields), + ) } - /** * ### Get information about the dashboard layouts with a specific id. * @@ -4269,14 +4266,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_layout( dashboard_layout_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) - return this.get("/dashboard_layouts/${path_dashboard_layout_id}", - mapOf("fields" to fields)) + return this.get( + "/dashboard_layouts/${path_dashboard_layout_id}", + mapOf("fields" to fields), + ) } - /** * ### Update the dashboard layout with a specific id. * @@ -4289,14 +4287,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_layout( dashboard_layout_id: String, body: WriteDashboardLayout, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) - return this.patch("/dashboard_layouts/${path_dashboard_layout_id}", - mapOf("fields" to fields), body) + return this.patch( + "/dashboard_layouts/${path_dashboard_layout_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a dashboard layout with a specific id. * @@ -4305,13 +4305,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboard_layouts/{dashboard_layout_id} -> ByteArray */ fun delete_dashboard_layout( - dashboard_layout_id: String - ) : SDKResponse { + dashboard_layout_id: String, + ): SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) - return this.delete("/dashboard_layouts/${path_dashboard_layout_id}", mapOf()) + return this.delete("/dashboard_layouts/${path_dashboard_layout_id}", mapOf()) } - /** * ### Get information about all the dashboard elements on a dashboard with a specific id. * @@ -4322,14 +4321,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_dashboard_layouts( dashboard_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get("/dashboards/${path_dashboard_id}/dashboard_layouts", - mapOf("fields" to fields)) + return this.get( + "/dashboards/${path_dashboard_id}/dashboard_layouts", + mapOf("fields" to fields), + ) } - /** * ### Create a dashboard layout on the dashboard with a specific id. * @@ -4340,17 +4340,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_dashboard_layout( body: WriteDashboardLayout, - fields: String? = null - ) : SDKResponse { - return this.post("/dashboard_layouts", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/dashboard_layouts", + mapOf("fields" to fields), + body, + ) } //endregion Dashboard: Manage Dashboards //region DataAction: Run Data Actions - /** * Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action. * @@ -4359,12 +4361,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /data_actions -> ByteArray */ fun perform_data_action( - body: DataActionRequest - ) : SDKResponse { - return this.post("/data_actions", mapOf(), body) + body: DataActionRequest, + ): SDKResponse { + return this.post("/data_actions", mapOf(), body) } - /** * For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user. * @@ -4373,28 +4374,24 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /data_actions/form -> ByteArray */ fun fetch_remote_data_action_form( - body: Map - ) : SDKResponse { - return this.post("/data_actions/form", mapOf(), body) + body: Map, + ): SDKResponse { + return this.post("/data_actions/form", mapOf(), body) } //endregion DataAction: Run Data Actions //region Datagroup: Manage Datagroups - /** * ### Get information about all datagroups. * * GET /datagroups -> ByteArray */ - fun all_datagroups( - - ) : SDKResponse { - return this.get("/datagroups", mapOf()) + fun all_datagroups(): SDKResponse { + return this.get("/datagroups", mapOf()) } - /** * ### Get information about a datagroup. * @@ -4403,13 +4400,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /datagroups/{datagroup_id} -> ByteArray */ fun datagroup( - datagroup_id: String - ) : SDKResponse { + datagroup_id: String, + ): SDKResponse { val path_datagroup_id = encodeParam(datagroup_id) - return this.get("/datagroups/${path_datagroup_id}", mapOf()) + return this.get("/datagroups/${path_datagroup_id}", mapOf()) } - /** * ### Update a datagroup using the specified params. * @@ -4420,17 +4416,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_datagroup( datagroup_id: String, - body: WriteDatagroup - ) : SDKResponse { + body: WriteDatagroup, + ): SDKResponse { val path_datagroup_id = encodeParam(datagroup_id) - return this.patch("/datagroups/${path_datagroup_id}", mapOf(), body) + return this.patch("/datagroups/${path_datagroup_id}", mapOf(), body) } //endregion Datagroup: Manage Datagroups //region DerivedTable: View Derived Table graphs - /** * ### Discover information about derived tables * @@ -4443,15 +4438,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun graph_derived_tables_for_model( model: String, format: String? = null, - color: String? = null - ) : SDKResponse { + color: String? = null, + ): SDKResponse { val path_model = encodeParam(model) - return this.get("/derived_table/graph/model/${path_model}", - mapOf("format" to format, - "color" to color)) + return this.get( + "/derived_table/graph/model/${path_model}", + mapOf( + "format" to format, + "color" to color, + ), + ) } - /** * ### Get the subgraph representing this derived table and its dependencies. * @@ -4464,15 +4462,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun graph_derived_tables_for_view( view: String, models: String? = null, - workspace: String? = null - ) : SDKResponse { + workspace: String? = null, + ): SDKResponse { val path_view = encodeParam(view) - return this.get("/derived_table/graph/view/${path_view}", - mapOf("models" to models, - "workspace" to workspace)) + return this.get( + "/derived_table/graph/view/${path_view}", + mapOf( + "models" to models, + "workspace" to workspace, + ), + ) } - /** * Enqueue materialization for a PDT with the given model name and view name * @@ -4491,18 +4492,21 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { force_rebuild: String? = null, force_full_incremental: String? = null, workspace: String? = null, - source: String? = null - ) : SDKResponse { + source: String? = null, + ): SDKResponse { val path_model_name = encodeParam(model_name) val path_view_name = encodeParam(view_name) - return this.get("/derived_table/${path_model_name}/${path_view_name}/start", - mapOf("force_rebuild" to force_rebuild, - "force_full_incremental" to force_full_incremental, - "workspace" to workspace, - "source" to source)) + return this.get( + "/derived_table/${path_model_name}/${path_view_name}/start", + mapOf( + "force_rebuild" to force_rebuild, + "force_full_incremental" to force_full_incremental, + "workspace" to workspace, + "source" to source, + ), + ) } - /** * Check status of PDT materialization * @@ -4511,13 +4515,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /derived_table/{materialization_id}/status -> ByteArray */ fun check_pdt_build( - materialization_id: String - ) : SDKResponse { + materialization_id: String, + ): SDKResponse { val path_materialization_id = encodeParam(materialization_id) - return this.get("/derived_table/${path_materialization_id}/status", mapOf()) + return this.get("/derived_table/${path_materialization_id}/status", mapOf()) } - /** * Stop a PDT materialization * @@ -4528,18 +4531,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun stop_pdt_build( materialization_id: String, - source: String? = null - ) : SDKResponse { + source: String? = null, + ): SDKResponse { val path_materialization_id = encodeParam(materialization_id) - return this.get("/derived_table/${path_materialization_id}/stop", - mapOf("source" to source)) + return this.get( + "/derived_table/${path_materialization_id}/stop", + mapOf("source" to source), + ) } //endregion DerivedTable: View Derived Table graphs //region Folder: Manage Folders - /** * Search for folders by creator id, parent id, name, etc * @@ -4572,25 +4576,28 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { creator_id: String? = null, filter_or: Boolean? = null, is_shared_root: Boolean? = null, - is_users_root: Boolean? = null - ) : SDKResponse { - return this.get("/folders/search", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "name" to name, - "id" to id, - "parent_id" to parent_id, - "creator_id" to creator_id, - "filter_or" to filter_or, - "is_shared_root" to is_shared_root, - "is_users_root" to is_users_root)) + is_users_root: Boolean? = null, + ): SDKResponse { + return this.get( + "/folders/search", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "name" to name, + "id" to id, + "parent_id" to parent_id, + "creator_id" to creator_id, + "filter_or" to filter_or, + "is_shared_root" to is_shared_root, + "is_users_root" to is_users_root, + ), + ) } - /** * ### Get information about the folder with a specific id. * @@ -4601,14 +4608,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder( folder_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get("/folders/${path_folder_id}", - mapOf("fields" to fields)) + return this.get( + "/folders/${path_folder_id}", + mapOf("fields" to fields), + ) } - /** * ### Update the folder with a specific id. * @@ -4619,13 +4627,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_folder( folder_id: String, - body: UpdateFolder - ) : SDKResponse { + body: UpdateFolder, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.patch("/folders/${path_folder_id}", mapOf(), body) + return this.patch("/folders/${path_folder_id}", mapOf(), body) } - /** * ### Delete the folder with a specific id including any children folders. * **DANGER** this will delete all looks and dashboards in the folder. @@ -4635,13 +4642,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /folders/{folder_id} -> ByteArray */ fun delete_folder( - folder_id: String - ) : SDKResponse { + folder_id: String, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.delete("/folders/${path_folder_id}", mapOf()) + return this.delete("/folders/${path_folder_id}", mapOf()) } - /** * ### Get information about all folders. * @@ -4652,13 +4658,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /folders -> ByteArray */ @JvmOverloads fun all_folders( - fields: String? = null - ) : SDKResponse { - return this.get("/folders", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/folders", + mapOf("fields" to fields), + ) } - /** * ### Create a folder with specified information. * @@ -4670,12 +4677,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /folders -> ByteArray */ fun create_folder( - body: CreateFolder - ) : SDKResponse { - return this.post("/folders", mapOf(), body) + body: CreateFolder, + ): SDKResponse { + return this.post("/folders", mapOf(), body) } - /** * ### Get the children of a folder. * @@ -4696,19 +4702,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { per_page: Long? = null, limit: Long? = null, offset: Long? = null, - sorts: String? = null - ) : SDKResponse { + sorts: String? = null, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get("/folders/${path_folder_id}/children", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts)) + return this.get( + "/folders/${path_folder_id}/children", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + ), + ) } - /** * ### Search the children of a folder * @@ -4723,16 +4732,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { folder_id: String, fields: String? = null, sorts: String? = null, - name: String? = null - ) : SDKResponse { + name: String? = null, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get("/folders/${path_folder_id}/children/search", - mapOf("fields" to fields, - "sorts" to sorts, - "name" to name)) + return this.get( + "/folders/${path_folder_id}/children/search", + mapOf( + "fields" to fields, + "sorts" to sorts, + "name" to name, + ), + ) } - /** * ### Get the parent of a folder * @@ -4743,14 +4755,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_parent( folder_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get("/folders/${path_folder_id}/parent", - mapOf("fields" to fields)) + return this.get( + "/folders/${path_folder_id}/parent", + mapOf("fields" to fields), + ) } - /** * ### Get the ancestors of a folder * @@ -4761,14 +4774,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_ancestors( folder_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get("/folders/${path_folder_id}/ancestors", - mapOf("fields" to fields)) + return this.get( + "/folders/${path_folder_id}/ancestors", + mapOf("fields" to fields), + ) } - /** * ### Get all looks in a folder. * In API 4.0+, all looks in a folder will be returned, excluding looks in the trash. @@ -4780,14 +4794,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_looks( folder_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get("/folders/${path_folder_id}/looks", - mapOf("fields" to fields)) + return this.get( + "/folders/${path_folder_id}/looks", + mapOf("fields" to fields), + ) } - /** * ### Get the dashboards in a folder * @@ -4798,18 +4813,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_dashboards( folder_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get("/folders/${path_folder_id}/dashboards", - mapOf("fields" to fields)) + return this.get( + "/folders/${path_folder_id}/dashboards", + mapOf("fields" to fields), + ) } //endregion Folder: Manage Folders //region Group: Manage Groups - /** * ### Get information about all groups. * @@ -4834,21 +4850,24 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { sorts: String? = null, ids: DelimArray? = null, content_metadata_id: String? = null, - can_add_to_content_metadata: Boolean? = null - ) : SDKResponse { - return this.get("/groups", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "ids" to ids, - "content_metadata_id" to content_metadata_id, - "can_add_to_content_metadata" to can_add_to_content_metadata)) + can_add_to_content_metadata: Boolean? = null, + ): SDKResponse { + return this.get( + "/groups", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "ids" to ids, + "content_metadata_id" to content_metadata_id, + "can_add_to_content_metadata" to can_add_to_content_metadata, + ), + ) } - /** * ### Creates a new group (admin only). * @@ -4859,13 +4878,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_group( body: WriteGroup, - fields: String? = null - ) : SDKResponse { - return this.post("/groups", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/groups", + mapOf("fields" to fields), + body, + ) } - /** * ### Search groups * @@ -4915,22 +4936,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, external_group_id: String? = null, externally_managed: Boolean? = null, - externally_orphaned: Boolean? = null - ) : SDKResponse { - return this.get("/groups/search", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "id" to id, - "name" to name, - "external_group_id" to external_group_id, - "externally_managed" to externally_managed, - "externally_orphaned" to externally_orphaned)) + externally_orphaned: Boolean? = null, + ): SDKResponse { + return this.get( + "/groups/search", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "id" to id, + "name" to name, + "external_group_id" to external_group_id, + "externally_managed" to externally_managed, + "externally_orphaned" to externally_orphaned, + ), + ) } - /** * ### Search groups include roles * @@ -4980,22 +5004,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, external_group_id: String? = null, externally_managed: Boolean? = null, - externally_orphaned: Boolean? = null - ) : SDKResponse { - return this.get("/groups/search/with_roles", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "id" to id, - "name" to name, - "external_group_id" to external_group_id, - "externally_managed" to externally_managed, - "externally_orphaned" to externally_orphaned)) + externally_orphaned: Boolean? = null, + ): SDKResponse { + return this.get( + "/groups/search/with_roles", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "id" to id, + "name" to name, + "external_group_id" to external_group_id, + "externally_managed" to externally_managed, + "externally_orphaned" to externally_orphaned, + ), + ) } - /** * ### Search groups include hierarchy * @@ -5046,22 +5073,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, external_group_id: String? = null, externally_managed: Boolean? = null, - externally_orphaned: Boolean? = null - ) : SDKResponse { - return this.get("/groups/search/with_hierarchy", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "id" to id, - "name" to name, - "external_group_id" to external_group_id, - "externally_managed" to externally_managed, - "externally_orphaned" to externally_orphaned)) + externally_orphaned: Boolean? = null, + ): SDKResponse { + return this.get( + "/groups/search/with_hierarchy", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "id" to id, + "name" to name, + "external_group_id" to external_group_id, + "externally_managed" to externally_managed, + "externally_orphaned" to externally_orphaned, + ), + ) } - /** * ### Get information about a group. * @@ -5072,14 +5102,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun group( group_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_group_id = encodeParam(group_id) - return this.get("/groups/${path_group_id}", - mapOf("fields" to fields)) + return this.get( + "/groups/${path_group_id}", + mapOf("fields" to fields), + ) } - /** * ### Updates the a group (admin only). * @@ -5092,14 +5123,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_group( group_id: String, body: WriteGroup, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_group_id = encodeParam(group_id) - return this.patch("/groups/${path_group_id}", - mapOf("fields" to fields), body) + return this.patch( + "/groups/${path_group_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Deletes a group (admin only). * @@ -5108,13 +5141,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /groups/{group_id} -> ByteArray */ fun delete_group( - group_id: String - ) : SDKResponse { + group_id: String, + ): SDKResponse { val path_group_id = encodeParam(group_id) - return this.delete("/groups/${path_group_id}", mapOf()) + return this.delete("/groups/${path_group_id}", mapOf()) } - /** * ### Get information about all the groups in a group * @@ -5125,14 +5157,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_group_groups( group_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_group_id = encodeParam(group_id) - return this.get("/groups/${path_group_id}/groups", - mapOf("fields" to fields)) + return this.get( + "/groups/${path_group_id}/groups", + mapOf("fields" to fields), + ) } - /** * ### Adds a new group to a group. * @@ -5143,13 +5176,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun add_group_group( group_id: String, - body: GroupIdForGroupInclusion - ) : SDKResponse { + body: GroupIdForGroupInclusion, + ): SDKResponse { val path_group_id = encodeParam(group_id) - return this.post("/groups/${path_group_id}/groups", mapOf(), body) + return this.post("/groups/${path_group_id}/groups", mapOf(), body) } - /** * ### Get information about all the users directly included in a group. * @@ -5170,19 +5202,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { per_page: Long? = null, limit: Long? = null, offset: Long? = null, - sorts: String? = null - ) : SDKResponse { + sorts: String? = null, + ): SDKResponse { val path_group_id = encodeParam(group_id) - return this.get("/groups/${path_group_id}/users", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts)) + return this.get( + "/groups/${path_group_id}/users", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + ), + ) } - /** * ### Adds a new user to a group. * @@ -5193,13 +5228,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun add_group_user( group_id: String, - body: GroupIdForGroupUserInclusion - ) : SDKResponse { + body: GroupIdForGroupUserInclusion, + ): SDKResponse { val path_group_id = encodeParam(group_id) - return this.post("/groups/${path_group_id}/users", mapOf(), body) + return this.post("/groups/${path_group_id}/users", mapOf(), body) } - /** * ### Removes a user from a group. * @@ -5210,14 +5244,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_group_user( group_id: String, - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_group_id = encodeParam(group_id) val path_user_id = encodeParam(user_id) - return this.delete("/groups/${path_group_id}/users/${path_user_id}", mapOf()) + return this.delete("/groups/${path_group_id}/users/${path_user_id}", mapOf()) } - /** * ### Removes a group from a group. * @@ -5228,14 +5261,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_group_from_group( group_id: String, - deleting_group_id: String - ) : SDKResponse { + deleting_group_id: String, + ): SDKResponse { val path_group_id = encodeParam(group_id) val path_deleting_group_id = encodeParam(deleting_group_id) - return this.delete("/groups/${path_group_id}/groups/${path_deleting_group_id}", mapOf()) + return this.delete("/groups/${path_group_id}/groups/${path_deleting_group_id}", mapOf()) } - /** * ### Set the value of a user attribute for a group. * @@ -5250,14 +5282,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { fun update_user_attribute_group_value( group_id: String, user_attribute_id: String, - body: UserAttributeGroupValue - ) : SDKResponse { + body: UserAttributeGroupValue, + ): SDKResponse { val path_group_id = encodeParam(group_id) val path_user_attribute_id = encodeParam(user_attribute_id) - return this.patch("/groups/${path_group_id}/attribute_values/${path_user_attribute_id}", mapOf(), body) + return this.patch("/groups/${path_group_id}/attribute_values/${path_user_attribute_id}", mapOf(), body) } - /** * ### Remove a user attribute value from a group. * @@ -5268,18 +5299,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_attribute_group_value( group_id: String, - user_attribute_id: String - ) : SDKResponse { + user_attribute_id: String, + ): SDKResponse { val path_group_id = encodeParam(group_id) val path_user_attribute_id = encodeParam(user_attribute_id) - return this.delete("/groups/${path_group_id}/attribute_values/${path_user_attribute_id}", mapOf()) + return this.delete("/groups/${path_group_id}/attribute_values/${path_user_attribute_id}", mapOf()) } //endregion Group: Manage Groups //region Homepage: Manage Homepage - /** * ### Get information about the primary homepage's sections. * @@ -5288,17 +5318,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /primary_homepage_sections -> ByteArray */ @JvmOverloads fun all_primary_homepage_sections( - fields: String? = null - ) : SDKResponse { - return this.get("/primary_homepage_sections", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/primary_homepage_sections", + mapOf("fields" to fields), + ) } //endregion Homepage: Manage Homepage //region Integration: Manage Integrations - /** * ### Get information about all Integration Hubs. * @@ -5307,13 +5338,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /integration_hubs -> ByteArray */ @JvmOverloads fun all_integration_hubs( - fields: String? = null - ) : SDKResponse { - return this.get("/integration_hubs", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/integration_hubs", + mapOf("fields" to fields), + ) } - /** * ### Create a new Integration Hub. * @@ -5326,13 +5358,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_integration_hub( body: WriteIntegrationHub, - fields: String? = null - ) : SDKResponse { - return this.post("/integration_hubs", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/integration_hubs", + mapOf("fields" to fields), + body, + ) } - /** * ### Get information about a Integration Hub. * @@ -5343,14 +5377,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun integration_hub( integration_hub_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) - return this.get("/integration_hubs/${path_integration_hub_id}", - mapOf("fields" to fields)) + return this.get( + "/integration_hubs/${path_integration_hub_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a Integration Hub definition. * @@ -5365,14 +5400,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_integration_hub( integration_hub_id: String, body: WriteIntegrationHub, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) - return this.patch("/integration_hubs/${path_integration_hub_id}", - mapOf("fields" to fields), body) + return this.patch( + "/integration_hubs/${path_integration_hub_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a Integration Hub. * @@ -5381,13 +5418,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /integration_hubs/{integration_hub_id} -> ByteArray */ fun delete_integration_hub( - integration_hub_id: String - ) : SDKResponse { + integration_hub_id: String, + ): SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) - return this.delete("/integration_hubs/${path_integration_hub_id}", mapOf()) + return this.delete("/integration_hubs/${path_integration_hub_id}", mapOf()) } - /** * Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false. * @@ -5396,13 +5432,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /integration_hubs/{integration_hub_id}/accept_legal_agreement -> ByteArray */ fun accept_integration_hub_legal_agreement( - integration_hub_id: String - ) : SDKResponse { + integration_hub_id: String, + ): SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) - return this.post("/integration_hubs/${path_integration_hub_id}/accept_legal_agreement", mapOf()) + return this.post("/integration_hubs/${path_integration_hub_id}/accept_legal_agreement", mapOf()) } - /** * ### Get information about all Integrations. * @@ -5413,14 +5448,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_integrations( fields: String? = null, - integration_hub_id: String? = null - ) : SDKResponse { - return this.get("/integrations", - mapOf("fields" to fields, - "integration_hub_id" to integration_hub_id)) + integration_hub_id: String? = null, + ): SDKResponse { + return this.get( + "/integrations", + mapOf( + "fields" to fields, + "integration_hub_id" to integration_hub_id, + ), + ) } - /** * ### Get information about a Integration. * @@ -5431,14 +5469,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun integration( integration_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_integration_id = encodeParam(integration_id) - return this.get("/integrations/${path_integration_id}", - mapOf("fields" to fields)) + return this.get( + "/integrations/${path_integration_id}", + mapOf("fields" to fields), + ) } - /** * ### Update parameters on a Integration. * @@ -5451,14 +5490,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_integration( integration_id: String, body: WriteIntegration, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_integration_id = encodeParam(integration_id) - return this.patch("/integrations/${path_integration_id}", - mapOf("fields" to fields), body) + return this.patch( + "/integrations/${path_integration_id}", + mapOf("fields" to fields), + body, + ) } - /** * Returns the Integration form for presentation to the user. * @@ -5469,13 +5510,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun fetch_integration_form( integration_id: String, - body: Map? = null - ) : SDKResponse { + body: Map? = null, + ): SDKResponse { val path_integration_id = encodeParam(integration_id) - return this.post("/integrations/${path_integration_id}/form", mapOf(), body) + return this.post("/integrations/${path_integration_id}/form", mapOf(), body) } - /** * Tests the integration to make sure all the settings are working. * @@ -5484,17 +5524,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /integrations/{integration_id}/test -> ByteArray */ fun test_integration( - integration_id: String - ) : SDKResponse { + integration_id: String, + ): SDKResponse { val path_integration_id = encodeParam(integration_id) - return this.post("/integrations/${path_integration_id}/test", mapOf()) + return this.post("/integrations/${path_integration_id}/test", mapOf()) } //endregion Integration: Manage Integrations //region Look: Run and Manage Looks - /** * ### Get information about all active Looks * @@ -5509,13 +5548,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /looks -> ByteArray */ @JvmOverloads fun all_looks( - fields: String? = null - ) : SDKResponse { - return this.get("/looks", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/looks", + mapOf("fields" to fields), + ) } - /** * ### Create a Look * @@ -5532,13 +5572,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_look( body: WriteLookWithQuery, - fields: String? = null - ) : SDKResponse { - return this.post("/looks", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/looks", + mapOf("fields" to fields), + body, + ) } - /** * ### Search Looks * @@ -5607,30 +5649,33 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, sorts: String? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get("/looks/search", - mapOf("id" to id, - "title" to title, - "description" to description, - "content_favorite_id" to content_favorite_id, - "folder_id" to folder_id, - "user_id" to user_id, - "view_count" to view_count, - "deleted" to deleted, - "query_id" to query_id, - "curate" to curate, - "last_viewed_at" to last_viewed_at, - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get( + "/looks/search", + mapOf( + "id" to id, + "title" to title, + "description" to description, + "content_favorite_id" to content_favorite_id, + "folder_id" to folder_id, + "user_id" to user_id, + "view_count" to view_count, + "deleted" to deleted, + "query_id" to query_id, + "curate" to curate, + "last_viewed_at" to last_viewed_at, + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + ), + ) } - /** * ### Get a Look. * @@ -5643,14 +5688,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun look( look_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_look_id = encodeParam(look_id) - return this.get("/looks/${path_look_id}", - mapOf("fields" to fields)) + return this.get( + "/looks/${path_look_id}", + mapOf("fields" to fields), + ) } - /** * ### Modify a Look * @@ -5682,14 +5728,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_look( look_id: String, body: WriteLookWithQuery, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_look_id = encodeParam(look_id) - return this.patch("/looks/${path_look_id}", - mapOf("fields" to fields), body) + return this.patch( + "/looks/${path_look_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Permanently Delete a Look * @@ -5704,13 +5752,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /looks/{look_id} -> ByteArray */ fun delete_look( - look_id: String - ) : SDKResponse { + look_id: String, + ): SDKResponse { val path_look_id = encodeParam(look_id) - return this.delete("/looks/${path_look_id}", mapOf()) + return this.delete("/looks/${path_look_id}", mapOf()) } - /** * ### Run a Look * @@ -5721,7 +5768,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * | result_format | Description * | :-----------: | :--- | * | json | Plain json - * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query + * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema * | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query * | csv | Comma separated values with a header * | txt | Tab separated values with a header @@ -5765,26 +5812,29 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { cache_only: Boolean? = null, path_prefix: String? = null, rebuild_pdts: Boolean? = null, - server_table_calcs: Boolean? = null - ) : SDKResponse { + server_table_calcs: Boolean? = null, + ): SDKResponse { val path_look_id = encodeParam(look_id) val path_result_format = encodeParam(result_format) - return this.get("/looks/${path_look_id}/run/${path_result_format}", - mapOf("limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "image_width" to image_width, - "image_height" to image_height, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs)) + return this.get( + "/looks/${path_look_id}/run/${path_result_format}", + mapOf( + "limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "image_width" to image_width, + "image_height" to image_height, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs, + ), + ) } - /** * ### Copy an existing look * @@ -5801,14 +5851,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun copy_look( look_id: String, - folder_id: String? = null - ) : SDKResponse { + folder_id: String? = null, + ): SDKResponse { val path_look_id = encodeParam(look_id) - return this.post("/looks/${path_look_id}/copy", - mapOf("folder_id" to folder_id)) + return this.post( + "/looks/${path_look_id}/copy", + mapOf("folder_id" to folder_id), + ) } - /** * ### Move an existing look * @@ -5824,18 +5875,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun move_look( look_id: String, - folder_id: String - ) : SDKResponse { + folder_id: String, + ): SDKResponse { val path_look_id = encodeParam(look_id) - return this.patch("/looks/${path_look_id}/move", - mapOf("folder_id" to folder_id)) + return this.patch( + "/looks/${path_look_id}/move", + mapOf("folder_id" to folder_id), + ) } //endregion Look: Run and Manage Looks //region LookmlModel: Manage LookML Models - /** * ### Get information about all lookml models. * @@ -5848,15 +5900,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun all_lookml_models( fields: String? = null, limit: Long? = null, - offset: Long? = null - ) : SDKResponse { - return this.get("/lookml_models", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset)) + offset: Long? = null, + ): SDKResponse { + return this.get( + "/lookml_models", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + ), + ) } - /** * ### Create a lookml model using the specified configuration. * @@ -5865,12 +5920,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /lookml_models -> ByteArray */ fun create_lookml_model( - body: WriteLookmlModel - ) : SDKResponse { - return this.post("/lookml_models", mapOf(), body) + body: WriteLookmlModel, + ): SDKResponse { + return this.post("/lookml_models", mapOf(), body) } - /** * ### Get information about a lookml model. * @@ -5881,14 +5935,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun lookml_model( lookml_model_name: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) - return this.get("/lookml_models/${path_lookml_model_name}", - mapOf("fields" to fields)) + return this.get( + "/lookml_models/${path_lookml_model_name}", + mapOf("fields" to fields), + ) } - /** * ### Update a lookml model using the specified configuration. * @@ -5899,13 +5954,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_lookml_model( lookml_model_name: String, - body: WriteLookmlModel - ) : SDKResponse { + body: WriteLookmlModel, + ): SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) - return this.patch("/lookml_models/${path_lookml_model_name}", mapOf(), body) + return this.patch("/lookml_models/${path_lookml_model_name}", mapOf(), body) } - /** * ### Delete a lookml model. * @@ -5914,38 +5968,43 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /lookml_models/{lookml_model_name} -> ByteArray */ fun delete_lookml_model( - lookml_model_name: String - ) : SDKResponse { + lookml_model_name: String, + ): SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) - return this.delete("/lookml_models/${path_lookml_model_name}", mapOf()) + return this.delete("/lookml_models/${path_lookml_model_name}", mapOf()) } - /** * ### Get information about a lookml model explore. * * @param {String} lookml_model_name Name of lookml model. * @param {String} explore_name Name of explore. * @param {String} fields Requested fields. + * @param {Boolean} add_drills_metadata Whether response should include drill field metadata. * * GET /lookml_models/{lookml_model_name}/explores/{explore_name} -> ByteArray */ @JvmOverloads fun lookml_model_explore( lookml_model_name: String, explore_name: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + add_drills_metadata: Boolean? = null, + ): SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) val path_explore_name = encodeParam(explore_name) - return this.get("/lookml_models/${path_lookml_model_name}/explores/${path_explore_name}", - mapOf("fields" to fields)) + return this.get( + "/lookml_models/${path_lookml_model_name}/explores/${path_explore_name}", + mapOf( + "fields" to fields, + "add_drills_metadata" to add_drills_metadata, + ), + ) } //endregion LookmlModel: Manage LookML Models //region Metadata: Connection Metadata Features - /** * ### Field name suggestions for a model and view * @@ -5980,17 +6039,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { view_name: String, field_name: String, term: String? = null, - filters: Any? = null - ) : SDKResponse { + filters: Any? = null, + ): SDKResponse { val path_model_name = encodeParam(model_name) val path_view_name = encodeParam(view_name) val path_field_name = encodeParam(field_name) - return this.get("/models/${path_model_name}/views/${path_view_name}/fields/${path_field_name}/suggestions", - mapOf("term" to term, - "filters" to filters)) + return this.get( + "/models/${path_model_name}/views/${path_view_name}/fields/${path_field_name}/suggestions", + mapOf( + "term" to term, + "filters" to filters, + ), + ) } - /** * ### Get a single model * @@ -5999,13 +6061,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /models/{model_name} -> ByteArray */ fun get_model( - model_name: String - ) : SDKResponse { + model_name: String, + ): SDKResponse { val path_model_name = encodeParam(model_name) - return this.get("/models/${path_model_name}", mapOf()) + return this.get("/models/${path_model_name}", mapOf()) } - /** * ### List databases available to this connection * @@ -6022,13 +6083,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /connections/{connection_name}/databases -> ByteArray */ fun connection_databases( - connection_name: String - ) : SDKResponse { + connection_name: String, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get("/connections/${path_connection_name}/databases", mapOf()) + return this.get("/connections/${path_connection_name}/databases", mapOf()) } - /** * ### Retrieve metadata features for this connection * @@ -6041,14 +6101,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun connection_features( connection_name: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get("/connections/${path_connection_name}/features", - mapOf("fields" to fields)) + return this.get( + "/connections/${path_connection_name}/features", + mapOf("fields" to fields), + ) } - /** * ### Get the list of schemas and tables for a connection * @@ -6063,16 +6124,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { connection_name: String, database: String? = null, cache: Boolean? = null, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get("/connections/${path_connection_name}/schemas", - mapOf("database" to database, - "cache" to cache, - "fields" to fields)) + return this.get( + "/connections/${path_connection_name}/schemas", + mapOf( + "database" to database, + "cache" to cache, + "fields" to fields, + ), + ) } - /** * ### Get the list of tables for a schema * @@ -6098,19 +6162,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { cache: Boolean? = null, fields: String? = null, table_filter: String? = null, - table_limit: Long? = null - ) : SDKResponse { + table_limit: Long? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get("/connections/${path_connection_name}/tables", - mapOf("database" to database, - "schema_name" to schema_name, - "cache" to cache, - "fields" to fields, - "table_filter" to table_filter, - "table_limit" to table_limit)) + return this.get( + "/connections/${path_connection_name}/tables", + mapOf( + "database" to database, + "schema_name" to schema_name, + "cache" to cache, + "fields" to fields, + "table_filter" to table_filter, + "table_limit" to table_limit, + ), + ) } - /** * ### Get the columns (and therefore also the tables) in a specific schema * @@ -6131,19 +6198,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { cache: Boolean? = null, table_limit: Long? = null, table_names: String? = null, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get("/connections/${path_connection_name}/columns", - mapOf("database" to database, - "schema_name" to schema_name, - "cache" to cache, - "table_limit" to table_limit, - "table_names" to table_names, - "fields" to fields)) + return this.get( + "/connections/${path_connection_name}/columns", + mapOf( + "database" to database, + "schema_name" to schema_name, + "cache" to cache, + "table_limit" to table_limit, + "table_names" to table_names, + "fields" to fields, + ), + ) } - /** * ### Search a connection for columns matching the specified name * @@ -6158,15 +6228,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun connection_search_columns( connection_name: String, column_name: String? = null, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get("/connections/${path_connection_name}/search_columns", - mapOf("column_name" to column_name, - "fields" to fields)) + return this.get( + "/connections/${path_connection_name}/search_columns", + mapOf( + "column_name" to column_name, + "fields" to fields, + ), + ) } - /** * ### Connection cost estimating * @@ -6183,18 +6256,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun connection_cost_estimate( connection_name: String, body: CreateCostEstimate, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.post("/connections/${path_connection_name}/cost_estimate", - mapOf("fields" to fields), body) + return this.post( + "/connections/${path_connection_name}/cost_estimate", + mapOf("fields" to fields), + body, + ) } //endregion Metadata: Connection Metadata Features //region Project: Manage Projects - /** * ### Generate Lockfile for All LookML Dependencies * @@ -6211,14 +6286,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun lock_all( project_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/manifest/lock_all", - mapOf("fields" to fields)) + return this.post( + "/projects/${path_project_id}/manifest/lock_all", + mapOf("fields" to fields), + ) } - /** * ### Get All Git Branches * @@ -6229,13 +6305,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/git_branches -> ByteArray */ fun all_git_branches( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/git_branches", mapOf()) + return this.get("/projects/${path_project_id}/git_branches", mapOf()) } - /** * ### Get the Current Git Branch * @@ -6246,13 +6321,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/git_branch -> ByteArray */ fun git_branch( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/git_branch", mapOf()) + return this.get("/projects/${path_project_id}/git_branch", mapOf()) } - /** * ### Checkout and/or reset --hard an existing Git Branch * @@ -6271,13 +6345,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_git_branch( project_id: String, - body: WriteGitBranch - ) : SDKResponse { + body: WriteGitBranch, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.put("/projects/${path_project_id}/git_branch", mapOf(), body) + return this.put("/projects/${path_project_id}/git_branch", mapOf(), body) } - /** * ### Create and Checkout a Git Branch * @@ -6295,13 +6368,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun create_git_branch( project_id: String, - body: WriteGitBranch - ) : SDKResponse { + body: WriteGitBranch, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/git_branch", mapOf(), body) + return this.post("/projects/${path_project_id}/git_branch", mapOf(), body) } - /** * ### Get the specified Git Branch * @@ -6314,14 +6386,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun find_git_branch( project_id: String, - branch_name: String - ) : SDKResponse { + branch_name: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) val path_branch_name = encodeParam(branch_name) - return this.get("/projects/${path_project_id}/git_branch/${path_branch_name}", mapOf()) + return this.get("/projects/${path_project_id}/git_branch/${path_branch_name}", mapOf()) } - /** * ### Delete the specified Git Branch * @@ -6334,14 +6405,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_git_branch( project_id: String, - branch_name: String - ) : SDKResponse { + branch_name: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) val path_branch_name = encodeParam(branch_name) - return this.delete("/projects/${path_project_id}/git_branch/${path_branch_name}", mapOf()) + return this.delete("/projects/${path_project_id}/git_branch/${path_branch_name}", mapOf()) } - /** * ### Deploy a Remote Branch or Ref to Production * @@ -6362,15 +6432,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun deploy_ref_to_production( project_id: String, branch: String? = null, - ref: String? = null - ) : SDKResponse { + ref: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/deploy_ref_to_production", - mapOf("branch" to branch, - "ref" to ref)) + return this.post( + "/projects/${path_project_id}/deploy_ref_to_production", + mapOf( + "branch" to branch, + "ref" to ref, + ), + ) } - /** * ### Deploy LookML from this Development Mode Project to Production * @@ -6390,13 +6463,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/deploy_to_production -> ByteArray */ fun deploy_to_production( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/deploy_to_production", mapOf()) + return this.post("/projects/${path_project_id}/deploy_to_production", mapOf()) } - /** * ### Reset a project to the revision of the project that is in production. * @@ -6407,13 +6479,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/reset_to_production -> ByteArray */ fun reset_project_to_production( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/reset_to_production", mapOf()) + return this.post("/projects/${path_project_id}/reset_to_production", mapOf()) } - /** * ### Reset a project development branch to the revision of the project that is on the remote. * @@ -6424,13 +6495,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/reset_to_remote -> ByteArray */ fun reset_project_to_remote( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/reset_to_remote", mapOf()) + return this.post("/projects/${path_project_id}/reset_to_remote", mapOf()) } - /** * ### Get All Projects * @@ -6441,13 +6511,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /projects -> ByteArray */ @JvmOverloads fun all_projects( - fields: String? = null - ) : SDKResponse { - return this.get("/projects", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/projects", + mapOf("fields" to fields), + ) } - /** * ### Create A Project * @@ -6462,12 +6533,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /projects -> ByteArray */ fun create_project( - body: WriteProject - ) : SDKResponse { - return this.post("/projects", mapOf(), body) + body: WriteProject, + ): SDKResponse { + return this.post("/projects", mapOf(), body) } - /** * ### Get A Project * @@ -6480,14 +6550,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun project( project_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}", - mapOf("fields" to fields)) + return this.get( + "/projects/${path_project_id}", + mapOf("fields" to fields), + ) } - /** * ### Update Project Configuration * @@ -6521,14 +6592,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_project( project_id: String, body: WriteProject, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.patch("/projects/${path_project_id}", - mapOf("fields" to fields), body) + return this.patch( + "/projects/${path_project_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Get A Projects Manifest object * @@ -6539,13 +6612,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/manifest -> ByteArray */ fun manifest( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/manifest", mapOf()) + return this.get("/projects/${path_project_id}/manifest", mapOf()) } - /** * ### Git Deploy Key * @@ -6556,13 +6628,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/git/deploy_key -> ByteArray */ fun git_deploy_key( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/git/deploy_key", mapOf()) + return this.get("/projects/${path_project_id}/git/deploy_key", mapOf()) } - /** * ### Create Git Deploy Key * @@ -6579,13 +6650,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/git/deploy_key -> ByteArray */ fun create_git_deploy_key( - project_id: String - ) : SDKResponse { + project_id: String, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/git/deploy_key", mapOf()) + return this.post("/projects/${path_project_id}/git/deploy_key", mapOf()) } - /** * ### Get Cached Project Validation Results * @@ -6607,14 +6677,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun project_validation_results( project_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/validate", - mapOf("fields" to fields)) + return this.get( + "/projects/${path_project_id}/validate", + mapOf("fields" to fields), + ) } - /** * ### Validate Project * @@ -6633,14 +6704,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun validate_project( project_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/validate", - mapOf("fields" to fields)) + return this.post( + "/projects/${path_project_id}/validate", + mapOf("fields" to fields), + ) } - /** * ### Get Project Workspace * @@ -6653,14 +6725,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun project_workspace( project_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/current_workspace", - mapOf("fields" to fields)) + return this.get( + "/projects/${path_project_id}/current_workspace", + mapOf("fields" to fields), + ) } - /** * ### Get All Project Files * @@ -6673,14 +6746,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_project_files( project_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/files", - mapOf("fields" to fields)) + return this.get( + "/projects/${path_project_id}/files", + mapOf("fields" to fields), + ) } - /** * ### Get Project File Info * @@ -6695,15 +6769,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun project_file( project_id: String, file_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/files/file", - mapOf("file_id" to file_id, - "fields" to fields)) + return this.get( + "/projects/${path_project_id}/files/file", + mapOf( + "file_id" to file_id, + "fields" to fields, + ), + ) } - /** * ### Get All Git Connection Tests * @@ -6723,14 +6800,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_git_connection_tests( project_id: String, - remote_url: String? = null - ) : SDKResponse { + remote_url: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/git_connection_tests", - mapOf("remote_url" to remote_url)) + return this.get( + "/projects/${path_project_id}/git_connection_tests", + mapOf("remote_url" to remote_url), + ) } - /** * ### Run a git connection test * @@ -6751,16 +6829,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { project_id: String, test_id: String, remote_url: String? = null, - use_production: String? = null - ) : SDKResponse { + use_production: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) val path_test_id = encodeParam(test_id) - return this.get("/projects/${path_project_id}/git_connection_tests/${path_test_id}", - mapOf("remote_url" to remote_url, - "use_production" to use_production)) + return this.get( + "/projects/${path_project_id}/git_connection_tests/${path_test_id}", + mapOf( + "remote_url" to remote_url, + "use_production" to use_production, + ), + ) } - /** * ### Get All LookML Tests * @@ -6775,14 +6856,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_lookml_tests( project_id: String, - file_id: String? = null - ) : SDKResponse { + file_id: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/lookml_tests", - mapOf("file_id" to file_id)) + return this.get( + "/projects/${path_project_id}/lookml_tests", + mapOf("file_id" to file_id), + ) } - /** * ### Run LookML Tests * @@ -6799,21 +6881,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { project_id: String, file_id: String? = null, test: String? = null, - model: String? = null - ) : SDKResponse { + model: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/lookml_tests/run", - mapOf("file_id" to file_id, - "test" to test, - "model" to model)) + return this.get( + "/projects/${path_project_id}/lookml_tests/run", + mapOf( + "file_id" to file_id, + "test" to test, + "model" to model, + ), + ) } - /** * ### Creates a tag for the most recent commit, or a specific ref is a SHA is provided * - * This is an internal-only, undocumented route. - * * @param {String} project_id Project Id * @param {WriteProject} body * @param {String} commit_sha (Optional): Commit Sha to Tag @@ -6827,16 +6910,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { body: WriteProject, commit_sha: String? = null, tag_name: String? = null, - tag_message: String? = null - ) : SDKResponse { + tag_message: String? = null, + ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/tag", - mapOf("commit_sha" to commit_sha, - "tag_name" to tag_name, - "tag_message" to tag_message), body) + return this.post( + "/projects/${path_project_id}/tag", + mapOf( + "commit_sha" to commit_sha, + "tag_name" to tag_name, + "tag_message" to tag_message, + ), + body, + ) } - /** * ### Configure Repository Credential for a remote dependency * @@ -6854,14 +6941,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { fun update_repository_credential( root_project_id: String, credential_id: String, - body: WriteRepositoryCredential - ) : SDKResponse { + body: WriteRepositoryCredential, + ): SDKResponse { val path_root_project_id = encodeParam(root_project_id) val path_credential_id = encodeParam(credential_id) - return this.put("/projects/${path_root_project_id}/credential/${path_credential_id}", mapOf(), body) + return this.put("/projects/${path_root_project_id}/credential/${path_credential_id}", mapOf(), body) } - /** * ### Repository Credential for a remote dependency * @@ -6877,14 +6963,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_repository_credential( root_project_id: String, - credential_id: String - ) : SDKResponse { + credential_id: String, + ): SDKResponse { val path_root_project_id = encodeParam(root_project_id) val path_credential_id = encodeParam(credential_id) - return this.delete("/projects/${path_root_project_id}/credential/${path_credential_id}", mapOf()) + return this.delete("/projects/${path_root_project_id}/credential/${path_credential_id}", mapOf()) } - /** * ### Get all Repository Credentials for a project * @@ -6895,17 +6980,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{root_project_id}/credentials -> ByteArray */ fun get_all_repository_credentials( - root_project_id: String - ) : SDKResponse { + root_project_id: String, + ): SDKResponse { val path_root_project_id = encodeParam(root_project_id) - return this.get("/projects/${path_root_project_id}/credentials", mapOf()) + return this.get("/projects/${path_root_project_id}/credentials", mapOf()) } //endregion Project: Manage Projects //region Query: Run and Manage Queries - /** * ### Create an async query task * @@ -6925,8 +7009,6 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * @param {String} path_prefix Prefix to use for drill links (url encoded). * @param {Boolean} rebuild_pdts Rebuild PDTS used in query. * @param {Boolean} server_table_calcs Perform table calculations on query results - * @param {Long} image_width DEPRECATED. Render width for image formats. Note that this parameter is always ignored by this method. - * @param {Long} image_height DEPRECATED. Render height for image formats. Note that this parameter is always ignored by this method. * @param {String} fields Requested fields * * POST /query_tasks -> ByteArray @@ -6943,27 +7025,27 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { path_prefix: String? = null, rebuild_pdts: Boolean? = null, server_table_calcs: Boolean? = null, - image_width: Long? = null, - image_height: Long? = null, - fields: String? = null - ) : SDKResponse { - return this.post("/query_tasks", - mapOf("limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs, - "image_width" to image_width, - "image_height" to image_height, - "fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/query_tasks", + mapOf( + "limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs, + "fields" to fields, + ), + body, + ) } - /** * ### Fetch results of multiple async queries * @@ -6978,13 +7060,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /query_tasks/multi_results -> ByteArray */ fun query_task_multi_results( - query_task_ids: DelimArray - ) : SDKResponse { - return this.get("/query_tasks/multi_results", - mapOf("query_task_ids" to query_task_ids)) + query_task_ids: DelimArray, + ): SDKResponse { + return this.get( + "/query_tasks/multi_results", + mapOf("query_task_ids" to query_task_ids), + ) } - /** * ### Get Query Task details * @@ -7001,14 +7084,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun query_task( query_task_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_query_task_id = encodeParam(query_task_id) - return this.get("/query_tasks/${path_query_task_id}", - mapOf("fields" to fields)) + return this.get( + "/query_tasks/${path_query_task_id}", + mapOf("fields" to fields), + ) } - /** * ### Get Async Query Results * @@ -7039,13 +7123,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /query_tasks/{query_task_id}/results -> ByteArray */ fun query_task_results( - query_task_id: String - ) : SDKResponse { + query_task_id: String, + ): SDKResponse { val path_query_task_id = encodeParam(query_task_id) - return this.get("/query_tasks/${path_query_task_id}/results", mapOf()) + return this.get("/query_tasks/${path_query_task_id}/results", mapOf()) } - /** * ### Get a previously created query by id. * @@ -7072,14 +7155,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun query( query_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_query_id = encodeParam(query_id) - return this.get("/queries/${path_query_id}", - mapOf("fields" to fields)) + return this.get( + "/queries/${path_query_id}", + mapOf("fields" to fields), + ) } - /** * ### Get the query for a given query slug. * @@ -7106,14 +7190,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun query_for_slug( slug: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_slug = encodeParam(slug) - return this.get("/queries/slug/${path_slug}", - mapOf("fields" to fields)) + return this.get( + "/queries/slug/${path_slug}", + mapOf("fields" to fields), + ) } - /** * ### Create a query. * @@ -7131,13 +7216,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_query( body: WriteQuery, - fields: String? = null - ) : SDKResponse { - return this.post("/queries", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/queries", + mapOf("fields" to fields), + body, + ) } - /** * ### Run a saved query. * @@ -7151,7 +7238,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * | result_format | Description * | :-----------: | :--- | * | json | Plain json - * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query + * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema * | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query * | csv | Comma separated values with a header * | txt | Tab separated values with a header @@ -7197,27 +7284,30 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { path_prefix: String? = null, rebuild_pdts: Boolean? = null, server_table_calcs: Boolean? = null, - source: String? = null - ) : SDKResponse { + source: String? = null, + ): SDKResponse { val path_query_id = encodeParam(query_id) val path_result_format = encodeParam(result_format) - return this.get("/queries/${path_query_id}/run/${path_result_format}", - mapOf("limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "image_width" to image_width, - "image_height" to image_height, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs, - "source" to source)) + return this.get( + "/queries/${path_query_id}/run/${path_result_format}", + mapOf( + "limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "image_width" to image_width, + "image_height" to image_height, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs, + "source" to source, + ), + ) } - /** * ### Run the query that is specified inline in the posted body. * @@ -7260,7 +7350,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * | result_format | Description * | :-----------: | :--- | * | json | Plain json - * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query + * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema * | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query * | csv | Comma separated values with a header * | txt | Tab separated values with a header @@ -7304,25 +7394,29 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { cache_only: Boolean? = null, path_prefix: String? = null, rebuild_pdts: Boolean? = null, - server_table_calcs: Boolean? = null - ) : SDKResponse { + server_table_calcs: Boolean? = null, + ): SDKResponse { val path_result_format = encodeParam(result_format) - return this.post("/queries/run/${path_result_format}", - mapOf("limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "image_width" to image_width, - "image_height" to image_height, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs), body) + return this.post( + "/queries/run/${path_result_format}", + mapOf( + "limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "image_width" to image_width, + "image_height" to image_height, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs, + ), + body, + ) } - /** * ### Run an URL encoded query. * @@ -7367,7 +7461,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * | result_format | Description * | :-----------: | :--- | * | json | Plain json - * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query + * | json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema * | json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query * | csv | Comma separated values with a header * | txt | Tab separated values with a header @@ -7389,15 +7483,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { fun run_url_encoded_query( model_name: String, view_name: String, - result_format: String - ) : SDKResponse { + result_format: String, + ): SDKResponse { val path_model_name = encodeParam(model_name) val path_view_name = encodeParam(view_name) val path_result_format = encodeParam(result_format) - return this.get("/queries/models/${path_model_name}/views/${path_view_name}/run/${path_result_format}", mapOf()) + return this.get("/queries/models/${path_model_name}/views/${path_view_name}/run/${path_result_format}", mapOf()) } - /** * ### Get Merge Query * @@ -7410,14 +7503,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun merge_query( merge_query_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_merge_query_id = encodeParam(merge_query_id) - return this.get("/merge_queries/${path_merge_query_id}", - mapOf("fields" to fields)) + return this.get( + "/merge_queries/${path_merge_query_id}", + mapOf("fields" to fields), + ) } - /** * ### Create Merge Query * @@ -7444,25 +7538,24 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_merge_query( body: WriteMergeQuery? = null, - fields: String? = null - ) : SDKResponse { - return this.post("/merge_queries", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/merge_queries", + mapOf("fields" to fields), + body, + ) } - /** * Get information about all running queries. * * GET /running_queries -> ByteArray */ - fun all_running_queries( - - ) : SDKResponse { - return this.get("/running_queries", mapOf()) + fun all_running_queries(): SDKResponse { + return this.get("/running_queries", mapOf()) } - /** * Kill a query with a specific query_task_id. * @@ -7471,13 +7564,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /running_queries/{query_task_id} -> ByteArray */ fun kill_query( - query_task_id: String - ) : SDKResponse { + query_task_id: String, + ): SDKResponse { val path_query_task_id = encodeParam(query_task_id) - return this.delete("/running_queries/${path_query_task_id}", mapOf()) + return this.delete("/running_queries/${path_query_task_id}", mapOf()) } - /** * ### Create a SQL Runner Query * @@ -7488,12 +7580,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /sql_queries -> ByteArray */ fun create_sql_query( - body: SqlQueryCreate - ) : SDKResponse { - return this.post("/sql_queries", mapOf(), body) + body: SqlQueryCreate, + ): SDKResponse { + return this.post("/sql_queries", mapOf(), body) } - /** * Get a SQL Runner query. * @@ -7502,13 +7593,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /sql_queries/{slug} -> ByteArray */ fun sql_query( - slug: String - ) : SDKResponse { + slug: String, + ): SDKResponse { val path_slug = encodeParam(slug) - return this.get("/sql_queries/${path_slug}", mapOf()) + return this.get("/sql_queries/${path_slug}", mapOf()) } - /** * Execute a SQL Runner query in a given result_format. * @@ -7517,25 +7607,24 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * @param {String} download Defaults to false. If set to true, the HTTP response will have content-disposition and other headers set to make the HTTP response behave as a downloadable attachment instead of as inline content. * * POST /sql_queries/{slug}/run/{result_format} -> ByteArray - * - * **Note**: Binary content may be returned by this method. */ @JvmOverloads fun run_sql_query( slug: String, result_format: String, - download: String? = null - ) : SDKResponse { + download: String? = null, + ): SDKResponse { val path_slug = encodeParam(slug) val path_result_format = encodeParam(result_format) - return this.post("/sql_queries/${path_slug}/run/${path_result_format}", - mapOf("download" to download)) + return this.post( + "/sql_queries/${path_slug}/run/${path_result_format}", + mapOf("download" to download), + ) } //endregion Query: Run and Manage Queries //region RenderTask: Manage Render Tasks - /** * ### Create a new task to render a look to an image. * @@ -7556,17 +7645,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { result_format: String, width: Long, height: Long, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_look_id = encodeParam(look_id) val path_result_format = encodeParam(result_format) - return this.post("/render_tasks/looks/${path_look_id}/${path_result_format}", - mapOf("width" to width, - "height" to height, - "fields" to fields)) + return this.post( + "/render_tasks/looks/${path_look_id}/${path_result_format}", + mapOf( + "width" to width, + "height" to height, + "fields" to fields, + ), + ) } - /** * ### Create a new task to render an existing query to an image. * @@ -7587,17 +7679,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { result_format: String, width: Long, height: Long, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_query_id = encodeParam(query_id) val path_result_format = encodeParam(result_format) - return this.post("/render_tasks/queries/${path_query_id}/${path_result_format}", - mapOf("width" to width, - "height" to height, - "fields" to fields)) + return this.post( + "/render_tasks/queries/${path_query_id}/${path_result_format}", + mapOf( + "width" to width, + "height" to height, + "fields" to fields, + ), + ) } - /** * ### Create a new task to render a dashboard to a document or image. * @@ -7628,21 +7723,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { pdf_paper_size: String? = null, pdf_landscape: Boolean? = null, long_tables: Boolean? = null, - theme: String? = null - ) : SDKResponse { + theme: String? = null, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) val path_result_format = encodeParam(result_format) - return this.post("/render_tasks/dashboards/${path_dashboard_id}/${path_result_format}", - mapOf("width" to width, - "height" to height, - "fields" to fields, - "pdf_paper_size" to pdf_paper_size, - "pdf_landscape" to pdf_landscape, - "long_tables" to long_tables, - "theme" to theme), body) + return this.post( + "/render_tasks/dashboards/${path_dashboard_id}/${path_result_format}", + mapOf( + "width" to width, + "height" to height, + "fields" to fields, + "pdf_paper_size" to pdf_paper_size, + "pdf_landscape" to pdf_landscape, + "long_tables" to long_tables, + "theme" to theme, + ), + body, + ) } - /** * ### Get information about a render task. * @@ -7657,14 +7756,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun render_task( render_task_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_render_task_id = encodeParam(render_task_id) - return this.get("/render_tasks/${path_render_task_id}", - mapOf("fields" to fields)) + return this.get( + "/render_tasks/${path_render_task_id}", + mapOf("fields" to fields), + ) } - /** * ### Get the document or image produced by a completed render task. * @@ -7691,13 +7791,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * **Note**: Binary content is returned by this method. */ fun render_task_results( - render_task_id: String - ) : SDKResponse { + render_task_id: String, + ): SDKResponse { val path_render_task_id = encodeParam(render_task_id) - return this.get("/render_tasks/${path_render_task_id}/results", mapOf()) + return this.get("/render_tasks/${path_render_task_id}/results", mapOf()) } - /** * ### Create a new task to render a dashboard element to an image. * @@ -7718,21 +7817,24 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { result_format: String, width: Long, height: Long, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) val path_result_format = encodeParam(result_format) - return this.post("/render_tasks/dashboard_elements/${path_dashboard_element_id}/${path_result_format}", - mapOf("width" to width, - "height" to height, - "fields" to fields)) + return this.post( + "/render_tasks/dashboard_elements/${path_dashboard_element_id}/${path_result_format}", + mapOf( + "width" to width, + "height" to height, + "fields" to fields, + ), + ) } //endregion RenderTask: Manage Render Tasks //region Role: Manage Roles - /** * ### Search model sets * Returns all model set records that match the given search criteria. @@ -7778,21 +7880,24 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, all_access: Boolean? = null, built_in: Boolean? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get("/model_sets/search", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "name" to name, - "all_access" to all_access, - "built_in" to built_in, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get( + "/model_sets/search", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "name" to name, + "all_access" to all_access, + "built_in" to built_in, + "filter_or" to filter_or, + ), + ) } - /** * ### Get information about the model set with a specific id. * @@ -7803,14 +7908,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun model_set( model_set_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_model_set_id = encodeParam(model_set_id) - return this.get("/model_sets/${path_model_set_id}", - mapOf("fields" to fields)) + return this.get( + "/model_sets/${path_model_set_id}", + mapOf("fields" to fields), + ) } - /** * ### Update information about the model set with a specific id. * @@ -7821,13 +7927,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_model_set( model_set_id: String, - body: WriteModelSet - ) : SDKResponse { + body: WriteModelSet, + ): SDKResponse { val path_model_set_id = encodeParam(model_set_id) - return this.patch("/model_sets/${path_model_set_id}", mapOf(), body) + return this.patch("/model_sets/${path_model_set_id}", mapOf(), body) } - /** * ### Delete the model set with a specific id. * @@ -7836,13 +7941,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /model_sets/{model_set_id} -> ByteArray */ fun delete_model_set( - model_set_id: String - ) : SDKResponse { + model_set_id: String, + ): SDKResponse { val path_model_set_id = encodeParam(model_set_id) - return this.delete("/model_sets/${path_model_set_id}", mapOf()) + return this.delete("/model_sets/${path_model_set_id}", mapOf()) } - /** * ### Get information about all model sets. * @@ -7851,13 +7955,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /model_sets -> ByteArray */ @JvmOverloads fun all_model_sets( - fields: String? = null - ) : SDKResponse { - return this.get("/model_sets", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/model_sets", + mapOf("fields" to fields), + ) } - /** * ### Create a model set with the specified information. Model sets are used by Roles. * @@ -7866,24 +7971,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /model_sets -> ByteArray */ fun create_model_set( - body: WriteModelSet - ) : SDKResponse { - return this.post("/model_sets", mapOf(), body) + body: WriteModelSet, + ): SDKResponse { + return this.post("/model_sets", mapOf(), body) } - /** * ### Get all supported permissions. * * GET /permissions -> ByteArray */ - fun all_permissions( - - ) : SDKResponse { - return this.get("/permissions", mapOf()) + fun all_permissions(): SDKResponse { + return this.get("/permissions", mapOf()) } - /** * ### Search permission sets * Returns all permission set records that match the given search criteria. @@ -7929,21 +8030,24 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, all_access: Boolean? = null, built_in: Boolean? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get("/permission_sets/search", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "name" to name, - "all_access" to all_access, - "built_in" to built_in, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get( + "/permission_sets/search", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "name" to name, + "all_access" to all_access, + "built_in" to built_in, + "filter_or" to filter_or, + ), + ) } - /** * ### Get information about the permission set with a specific id. * @@ -7954,16 +8058,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun permission_set( permission_set_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_permission_set_id = encodeParam(permission_set_id) - return this.get("/permission_sets/${path_permission_set_id}", - mapOf("fields" to fields)) + return this.get( + "/permission_sets/${path_permission_set_id}", + mapOf("fields" to fields), + ) } - /** * ### Update information about the permission set with a specific id. + * Providing save_content permission alone will also provide you the abilities of save_looks and save_dashboards. * * @param {String} permission_set_id Id of permission set * @param {WritePermissionSet} body @@ -7972,13 +8078,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_permission_set( permission_set_id: String, - body: WritePermissionSet - ) : SDKResponse { + body: WritePermissionSet, + ): SDKResponse { val path_permission_set_id = encodeParam(permission_set_id) - return this.patch("/permission_sets/${path_permission_set_id}", mapOf(), body) + return this.patch("/permission_sets/${path_permission_set_id}", mapOf(), body) } - /** * ### Delete the permission set with a specific id. * @@ -7987,13 +8092,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /permission_sets/{permission_set_id} -> ByteArray */ fun delete_permission_set( - permission_set_id: String - ) : SDKResponse { + permission_set_id: String, + ): SDKResponse { val path_permission_set_id = encodeParam(permission_set_id) - return this.delete("/permission_sets/${path_permission_set_id}", mapOf()) + return this.delete("/permission_sets/${path_permission_set_id}", mapOf()) } - /** * ### Get information about all permission sets. * @@ -8002,27 +8106,28 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /permission_sets -> ByteArray */ @JvmOverloads fun all_permission_sets( - fields: String? = null - ) : SDKResponse { - return this.get("/permission_sets", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/permission_sets", + mapOf("fields" to fields), + ) } - /** * ### Create a permission set with the specified information. Permission sets are used by Roles. + * Providing save_content permission alone will also provide you the abilities of save_looks and save_dashboards. * * @param {WritePermissionSet} body * * POST /permission_sets -> ByteArray */ fun create_permission_set( - body: WritePermissionSet - ) : SDKResponse { - return this.post("/permission_sets", mapOf(), body) + body: WritePermissionSet, + ): SDKResponse { + return this.post("/permission_sets", mapOf(), body) } - /** * ### Get information about all roles. * @@ -8033,14 +8138,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_roles( fields: String? = null, - ids: DelimArray? = null - ) : SDKResponse { - return this.get("/roles", - mapOf("fields" to fields, - "ids" to ids)) + ids: DelimArray? = null, + ): SDKResponse { + return this.get( + "/roles", + mapOf( + "fields" to fields, + "ids" to ids, + ), + ) } - /** * ### Create a role with the specified information. * @@ -8049,12 +8157,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /roles -> ByteArray */ fun create_role( - body: WriteRole - ) : SDKResponse { - return this.post("/roles", mapOf(), body) + body: WriteRole, + ): SDKResponse { + return this.post("/roles", mapOf(), body) } - /** * ### Search roles * @@ -8100,20 +8207,23 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { id: String? = null, name: String? = null, built_in: Boolean? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get("/roles/search", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "name" to name, - "built_in" to built_in, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get( + "/roles/search", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "name" to name, + "built_in" to built_in, + "filter_or" to filter_or, + ), + ) } - /** * ### Search roles include user count * @@ -8160,20 +8270,23 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { id: String? = null, name: String? = null, built_in: Boolean? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get("/roles/search/with_user_count", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "name" to name, - "built_in" to built_in, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get( + "/roles/search/with_user_count", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "name" to name, + "built_in" to built_in, + "filter_or" to filter_or, + ), + ) } - /** * ### Get information about the role with a specific id. * @@ -8182,13 +8295,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /roles/{role_id} -> ByteArray */ fun role( - role_id: String - ) : SDKResponse { + role_id: String, + ): SDKResponse { val path_role_id = encodeParam(role_id) - return this.get("/roles/${path_role_id}", mapOf()) + return this.get("/roles/${path_role_id}", mapOf()) } - /** * ### Update information about the role with a specific id. * @@ -8199,13 +8311,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_role( role_id: String, - body: WriteRole - ) : SDKResponse { + body: WriteRole, + ): SDKResponse { val path_role_id = encodeParam(role_id) - return this.patch("/roles/${path_role_id}", mapOf(), body) + return this.patch("/roles/${path_role_id}", mapOf(), body) } - /** * ### Delete the role with a specific id. * @@ -8214,13 +8325,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /roles/{role_id} -> ByteArray */ fun delete_role( - role_id: String - ) : SDKResponse { + role_id: String, + ): SDKResponse { val path_role_id = encodeParam(role_id) - return this.delete("/roles/${path_role_id}", mapOf()) + return this.delete("/roles/${path_role_id}", mapOf()) } - /** * ### Get information about all the groups with the role that has a specific id. * @@ -8231,14 +8341,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun role_groups( role_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_role_id = encodeParam(role_id) - return this.get("/roles/${path_role_id}/groups", - mapOf("fields" to fields)) + return this.get( + "/roles/${path_role_id}/groups", + mapOf("fields" to fields), + ) } - /** * ### Set all groups for a role, removing all existing group associations from that role. * @@ -8251,13 +8362,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun set_role_groups( role_id: String, - body: Array - ) : SDKResponse { + body: Array, + ): SDKResponse { val path_role_id = encodeParam(role_id) - return this.put("/roles/${path_role_id}/groups", mapOf(), body) + return this.put("/roles/${path_role_id}/groups", mapOf(), body) } - /** * ### Get information about all the users with the role that has a specific id. * @@ -8270,15 +8380,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun role_users( role_id: String, fields: String? = null, - direct_association_only: Boolean? = null - ) : SDKResponse { + direct_association_only: Boolean? = null, + ): SDKResponse { val path_role_id = encodeParam(role_id) - return this.get("/roles/${path_role_id}/users", - mapOf("fields" to fields, - "direct_association_only" to direct_association_only)) + return this.get( + "/roles/${path_role_id}/users", + mapOf( + "fields" to fields, + "direct_association_only" to direct_association_only, + ), + ) } - /** * ### Set all the users of the role with a specific id. * @@ -8289,17 +8402,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun set_role_users( role_id: String, - body: Array - ) : SDKResponse { + body: Array, + ): SDKResponse { val path_role_id = encodeParam(role_id) - return this.put("/roles/${path_role_id}/users", mapOf(), body) + return this.put("/roles/${path_role_id}/users", mapOf(), body) } //endregion Role: Manage Roles //region ScheduledPlan: Manage Scheduled Plans - /** * ### Get Scheduled Plans for a Space * @@ -8312,14 +8424,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun scheduled_plans_for_space( space_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_space_id = encodeParam(space_id) - return this.get("/scheduled_plans/space/${path_space_id}", - mapOf("fields" to fields)) + return this.get( + "/scheduled_plans/space/${path_space_id}", + mapOf("fields" to fields), + ) } - /** * ### Get Information About a Scheduled Plan * @@ -8332,14 +8445,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun scheduled_plan( scheduled_plan_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) - return this.get("/scheduled_plans/${path_scheduled_plan_id}", - mapOf("fields" to fields)) + return this.get( + "/scheduled_plans/${path_scheduled_plan_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a Scheduled Plan * @@ -8391,13 +8505,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_scheduled_plan( scheduled_plan_id: String, - body: WriteScheduledPlan - ) : SDKResponse { + body: WriteScheduledPlan, + ): SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) - return this.patch("/scheduled_plans/${path_scheduled_plan_id}", mapOf(), body) + return this.patch("/scheduled_plans/${path_scheduled_plan_id}", mapOf(), body) } - /** * ### Delete a Scheduled Plan * @@ -8410,13 +8523,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /scheduled_plans/{scheduled_plan_id} -> ByteArray */ fun delete_scheduled_plan( - scheduled_plan_id: String - ) : SDKResponse { + scheduled_plan_id: String, + ): SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) - return this.delete("/scheduled_plans/${path_scheduled_plan_id}", mapOf()) + return this.delete("/scheduled_plans/${path_scheduled_plan_id}", mapOf()) } - /** * ### List All Scheduled Plans * @@ -8439,15 +8551,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun all_scheduled_plans( user_id: String? = null, fields: String? = null, - all_users: Boolean? = null - ) : SDKResponse { - return this.get("/scheduled_plans", - mapOf("user_id" to user_id, - "fields" to fields, - "all_users" to all_users)) + all_users: Boolean? = null, + ): SDKResponse { + return this.get( + "/scheduled_plans", + mapOf( + "user_id" to user_id, + "fields" to fields, + "all_users" to all_users, + ), + ) } - /** * ### Create a Scheduled Plan * @@ -8513,12 +8628,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /scheduled_plans -> ByteArray */ fun create_scheduled_plan( - body: WriteScheduledPlan - ) : SDKResponse { - return this.post("/scheduled_plans", mapOf(), body) + body: WriteScheduledPlan, + ): SDKResponse { + return this.post("/scheduled_plans", mapOf(), body) } - /** * ### Run a Scheduled Plan Immediately * @@ -8563,12 +8677,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /scheduled_plans/run_once -> ByteArray */ fun scheduled_plan_run_once( - body: WriteScheduledPlan - ) : SDKResponse { - return this.post("/scheduled_plans/run_once", mapOf(), body) + body: WriteScheduledPlan, + ): SDKResponse { + return this.post("/scheduled_plans/run_once", mapOf(), body) } - /** * ### Get Scheduled Plans for a Look * @@ -8593,16 +8706,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { look_id: String, user_id: String? = null, fields: String? = null, - all_users: Boolean? = null - ) : SDKResponse { + all_users: Boolean? = null, + ): SDKResponse { val path_look_id = encodeParam(look_id) - return this.get("/scheduled_plans/look/${path_look_id}", - mapOf("user_id" to user_id, - "fields" to fields, - "all_users" to all_users)) + return this.get( + "/scheduled_plans/look/${path_look_id}", + mapOf( + "user_id" to user_id, + "fields" to fields, + "all_users" to all_users, + ), + ) } - /** * ### Get Scheduled Plans for a Dashboard * @@ -8627,16 +8743,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { dashboard_id: String, user_id: String? = null, all_users: Boolean? = null, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get("/scheduled_plans/dashboard/${path_dashboard_id}", - mapOf("user_id" to user_id, - "all_users" to all_users, - "fields" to fields)) + return this.get( + "/scheduled_plans/dashboard/${path_dashboard_id}", + mapOf( + "user_id" to user_id, + "all_users" to all_users, + "fields" to fields, + ), + ) } - /** * ### Get Scheduled Plans for a LookML Dashboard * @@ -8661,16 +8780,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { lookml_dashboard_id: String, user_id: String? = null, fields: String? = null, - all_users: Boolean? = null - ) : SDKResponse { + all_users: Boolean? = null, + ): SDKResponse { val path_lookml_dashboard_id = encodeParam(lookml_dashboard_id) - return this.get("/scheduled_plans/lookml_dashboard/${path_lookml_dashboard_id}", - mapOf("user_id" to user_id, - "fields" to fields, - "all_users" to all_users)) + return this.get( + "/scheduled_plans/lookml_dashboard/${path_lookml_dashboard_id}", + mapOf( + "user_id" to user_id, + "fields" to fields, + "all_users" to all_users, + ), + ) } - /** * ### Run a Scheduled Plan By Id Immediately * This function creates a run-once schedule plan based on an existing scheduled plan, @@ -8727,17 +8849,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun scheduled_plan_run_once_by_id( scheduled_plan_id: String, - body: WriteScheduledPlan? = null - ) : SDKResponse { + body: WriteScheduledPlan? = null, + ): SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) - return this.post("/scheduled_plans/${path_scheduled_plan_id}/run_once", mapOf(), body) + return this.post("/scheduled_plans/${path_scheduled_plan_id}/run_once", mapOf(), body) } //endregion ScheduledPlan: Manage Scheduled Plans //region Session: Session Information - /** * ### Get API Session * @@ -8745,13 +8866,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /session -> ByteArray */ - fun session( - - ) : SDKResponse { - return this.get("/session", mapOf()) + fun session(): SDKResponse { + return this.get("/session", mapOf()) } - /** * ### Update API Session * @@ -8779,16 +8897,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /session -> ByteArray */ fun update_session( - body: WriteApiSession - ) : SDKResponse { - return this.patch("/session", mapOf(), body) + body: WriteApiSession, + ): SDKResponse { + return this.patch("/session", mapOf(), body) } //endregion Session: Session Information //region SqlInterfaceQuery: Run and Manage SQL Interface Queries - /** * ### Handles Avatica RPC metadata requests for SQL Interface queries * @@ -8797,13 +8914,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /sql_interface_queries/metadata -> ByteArray */ @JvmOverloads fun sql_interface_metadata( - avatica_request: String? = null - ) : SDKResponse { - return this.get("/sql_interface_queries/metadata", - mapOf("avatica_request" to avatica_request)) + avatica_request: String? = null, + ): SDKResponse { + return this.get( + "/sql_interface_queries/metadata", + mapOf("avatica_request" to avatica_request), + ) } - /** * ### Run a saved SQL interface query. * @@ -8824,26 +8942,21 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * | md | Simple markdown * | xlsx | MS Excel spreadsheet * | sql | Returns the generated SQL rather than running the query - * | png | A PNG image of the visualization of the query - * | jpg | A JPG image of the visualization of the query * * @param {Long} query_id Integer id of query * @param {String} result_format Format of result, options are: ["json_bi"] * * GET /sql_interface_queries/{query_id}/run/{result_format} -> ByteArray - * - * **Note**: Binary content may be returned by this method. */ fun run_sql_interface_query( query_id: Long, - result_format: String - ) : SDKResponse { + result_format: String, + ): SDKResponse { val path_query_id = encodeParam(query_id) val path_result_format = encodeParam(result_format) - return this.get("/sql_interface_queries/${path_query_id}/run/${path_result_format}", mapOf()) + return this.get("/sql_interface_queries/${path_query_id}/run/${path_result_format}", mapOf()) } - /** * ### Create a SQL interface query. * @@ -8859,16 +8972,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /sql_interface_queries -> ByteArray */ fun create_sql_interface_query( - body: WriteSqlInterfaceQueryCreate - ) : SDKResponse { - return this.post("/sql_interface_queries", mapOf(), body) + body: WriteSqlInterfaceQueryCreate, + ): SDKResponse { + return this.post("/sql_interface_queries", mapOf(), body) } //endregion SqlInterfaceQuery: Run and Manage SQL Interface Queries //region Theme: Manage Themes - /** * ### Get an array of all existing themes * @@ -8883,13 +8995,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /themes -> ByteArray */ @JvmOverloads fun all_themes( - fields: String? = null - ) : SDKResponse { - return this.get("/themes", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/themes", + mapOf("fields" to fields), + ) } - /** * ### Create a theme * @@ -8912,12 +9025,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /themes -> ByteArray */ fun create_theme( - body: WriteTheme - ) : SDKResponse { - return this.post("/themes", mapOf(), body) + body: WriteTheme, + ): SDKResponse { + return this.post("/themes", mapOf(), body) } - /** * ### Search all themes for matching criteria. * @@ -8979,21 +9091,24 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { offset: Long? = null, sorts: String? = null, fields: String? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get("/themes/search", - mapOf("id" to id, - "name" to name, - "begin_at" to begin_at, - "end_at" to end_at, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "fields" to fields, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get( + "/themes/search", + mapOf( + "id" to id, + "name" to name, + "begin_at" to begin_at, + "end_at" to end_at, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "fields" to fields, + "filter_or" to filter_or, + ), + ) } - /** * ### Get the default theme * @@ -9008,13 +9123,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /themes/default -> ByteArray */ @JvmOverloads fun default_theme( - ts: Date? = null - ) : SDKResponse { - return this.get("/themes/default", - mapOf("ts" to ts)) + ts: Date? = null, + ): SDKResponse { + return this.get( + "/themes/default", + mapOf("ts" to ts), + ) } - /** * ### Set the global default theme by theme name * @@ -9033,13 +9149,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /themes/default -> ByteArray */ fun set_default_theme( - name: String - ) : SDKResponse { - return this.put("/themes/default", - mapOf("name" to name)) + name: String, + ): SDKResponse { + return this.put( + "/themes/default", + mapOf("name" to name), + ) } - /** * ### Get active themes * @@ -9060,15 +9177,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun active_themes( name: String? = null, ts: Date? = null, - fields: String? = null - ) : SDKResponse { - return this.get("/themes/active", - mapOf("name" to name, - "ts" to ts, - "fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/themes/active", + mapOf( + "name" to name, + "ts" to ts, + "fields" to fields, + ), + ) } - /** * ### Get the named theme if it's active. Otherwise, return the default theme * @@ -9084,14 +9204,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun theme_or_default( name: String, - ts: Date? = null - ) : SDKResponse { - return this.get("/themes/theme_or_default", - mapOf("name" to name, - "ts" to ts)) + ts: Date? = null, + ): SDKResponse { + return this.get( + "/themes/theme_or_default", + mapOf( + "name" to name, + "ts" to ts, + ), + ) } - /** * ### Validate a theme with the specified information * @@ -9106,12 +9229,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /themes/validate -> ByteArray */ fun validate_theme( - body: WriteTheme - ) : SDKResponse { - return this.post("/themes/validate", mapOf(), body) + body: WriteTheme, + ): SDKResponse { + return this.post("/themes/validate", mapOf(), body) } - /** * ### Get a theme by ID * @@ -9126,14 +9248,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun theme( theme_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_theme_id = encodeParam(theme_id) - return this.get("/themes/${path_theme_id}", - mapOf("fields" to fields)) + return this.get( + "/themes/${path_theme_id}", + mapOf("fields" to fields), + ) } - /** * ### Update the theme by id. * @@ -9146,13 +9269,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_theme( theme_id: String, - body: WriteTheme - ) : SDKResponse { + body: WriteTheme, + ): SDKResponse { val path_theme_id = encodeParam(theme_id) - return this.patch("/themes/${path_theme_id}", mapOf(), body) + return this.patch("/themes/${path_theme_id}", mapOf(), body) } - /** * ### Delete a specific theme by id * @@ -9169,17 +9291,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /themes/{theme_id} -> ByteArray */ fun delete_theme( - theme_id: String - ) : SDKResponse { + theme_id: String, + ): SDKResponse { val path_theme_id = encodeParam(theme_id) - return this.delete("/themes/${path_theme_id}", mapOf()) + return this.delete("/themes/${path_theme_id}", mapOf()) } //endregion Theme: Manage Themes //region User: Manage Users - /** * ### Search email credentials * @@ -9228,20 +9349,23 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { id: String? = null, email: String? = null, emails: String? = null, - filter_or: Boolean? = null - ) : SDKResponse { - return this.get("/credentials_email/search", - mapOf("fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "email" to email, - "emails" to emails, - "filter_or" to filter_or)) + filter_or: Boolean? = null, + ): SDKResponse { + return this.get( + "/credentials_email/search", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "email" to email, + "emails" to emails, + "filter_or" to filter_or, + ), + ) } - /** * ### Get information about the current user; i.e. the user account currently calling the API. * @@ -9250,13 +9374,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /user -> ByteArray */ @JvmOverloads fun me( - fields: String? = null - ) : SDKResponse { - return this.get("/user", - mapOf("fields" to fields)) + fields: String? = null, + ): SDKResponse { + return this.get( + "/user", + mapOf("fields" to fields), + ) } - /** * ### Get information about all users. * @@ -9277,19 +9402,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, sorts: String? = null, - ids: DelimArray? = null - ) : SDKResponse { - return this.get("/users", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "ids" to ids)) + ids: DelimArray? = null, + ): SDKResponse { + return this.get( + "/users", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "ids" to ids, + ), + ) } - /** * ### Create a user with the specified information. * @@ -9300,13 +9428,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_user( body: WriteUser? = null, - fields: String? = null - ) : SDKResponse { - return this.post("/users", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/users", + mapOf("fields" to fields), + body, + ) } - /** * ### Search users * @@ -9374,28 +9504,31 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { is_disabled: Boolean? = null, filter_or: Boolean? = null, content_metadata_id: String? = null, - group_id: String? = null - ) : SDKResponse { - return this.get("/users/search", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "first_name" to first_name, - "last_name" to last_name, - "verified_looker_employee" to verified_looker_employee, - "embed_user" to embed_user, - "email" to email, - "is_disabled" to is_disabled, - "filter_or" to filter_or, - "content_metadata_id" to content_metadata_id, - "group_id" to group_id)) + group_id: String? = null, + ): SDKResponse { + return this.get( + "/users/search", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "first_name" to first_name, + "last_name" to last_name, + "verified_looker_employee" to verified_looker_employee, + "embed_user" to embed_user, + "email" to email, + "is_disabled" to is_disabled, + "filter_or" to filter_or, + "content_metadata_id" to content_metadata_id, + "group_id" to group_id, + ), + ) } - /** * ### Search for user accounts by name * @@ -9433,25 +9566,28 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { last_name: String? = null, verified_looker_employee: Boolean? = null, email: String? = null, - is_disabled: Boolean? = null - ) : SDKResponse { + is_disabled: Boolean? = null, + ): SDKResponse { val path_pattern = encodeParam(pattern) - return this.get("/users/search/names/${path_pattern}", - mapOf("fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "first_name" to first_name, - "last_name" to last_name, - "verified_looker_employee" to verified_looker_employee, - "email" to email, - "is_disabled" to is_disabled)) + return this.get( + "/users/search/names/${path_pattern}", + mapOf( + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "first_name" to first_name, + "last_name" to last_name, + "verified_looker_employee" to verified_looker_employee, + "email" to email, + "is_disabled" to is_disabled, + ), + ) } - /** * ### Get information about the user with a specific id. * @@ -9466,14 +9602,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}", + mapOf("fields" to fields), + ) } - /** * ### Update information about the user with a specific id. * @@ -9486,14 +9623,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_user( user_id: String, body: WriteUser, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.patch("/users/${path_user_id}", - mapOf("fields" to fields), body) + return this.patch( + "/users/${path_user_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete the user with a specific id. * @@ -9504,13 +9643,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id} -> ByteArray */ fun delete_user( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}", mapOf()) + return this.delete("/users/${path_user_id}", mapOf()) } - /** * ### Get information about the user with a credential of given type with specific id. * @@ -9552,15 +9690,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_for_credential( credential_type: String, credential_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_credential_type = encodeParam(credential_type) val path_credential_id = encodeParam(credential_id) - return this.get("/users/credential/${path_credential_type}/${path_credential_id}", - mapOf("fields" to fields)) + return this.get( + "/users/credential/${path_credential_type}/${path_credential_id}", + mapOf("fields" to fields), + ) } - /** * ### Email/password login information for the specified user. * @@ -9573,14 +9712,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_email( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_email", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), + ) } - /** * ### Email/password login information for the specified user. * @@ -9595,14 +9735,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_user_credentials_email( user_id: String, body: WriteCredentialsEmail, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), body) + return this.post( + "/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), + body, + ) } - /** * ### Email/password login information for the specified user. * @@ -9617,14 +9759,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_user_credentials_email( user_id: String, body: WriteCredentialsEmail, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.patch("/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), body) + return this.patch( + "/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), + body, + ) } - /** * ### Email/password login information for the specified user. * @@ -9635,13 +9779,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_email -> ByteArray */ fun delete_user_credentials_email( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_email", mapOf()) + return this.delete("/users/${path_user_id}/credentials_email", mapOf()) } - /** * ### Two-factor login information for the specified user. * @@ -9654,14 +9797,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_totp( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_totp", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_totp", + mapOf("fields" to fields), + ) } - /** * ### Two-factor login information for the specified user. * @@ -9676,14 +9820,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_user_credentials_totp( user_id: String, body: CredentialsTotp? = null, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/users/${path_user_id}/credentials_totp", - mapOf("fields" to fields), body) + return this.post( + "/users/${path_user_id}/credentials_totp", + mapOf("fields" to fields), + body, + ) } - /** * ### Two-factor login information for the specified user. * @@ -9694,13 +9840,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_totp -> ByteArray */ fun delete_user_credentials_totp( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_totp", mapOf()) + return this.delete("/users/${path_user_id}/credentials_totp", mapOf()) } - /** * ### LDAP login information for the specified user. * @@ -9713,14 +9858,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_ldap( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_ldap", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_ldap", + mapOf("fields" to fields), + ) } - /** * ### LDAP login information for the specified user. * @@ -9731,13 +9877,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_ldap -> ByteArray */ fun delete_user_credentials_ldap( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_ldap", mapOf()) + return this.delete("/users/${path_user_id}/credentials_ldap", mapOf()) } - /** * ### Google authentication login information for the specified user. * @@ -9750,14 +9895,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_google( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_google", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_google", + mapOf("fields" to fields), + ) } - /** * ### Google authentication login information for the specified user. * @@ -9768,13 +9914,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_google -> ByteArray */ fun delete_user_credentials_google( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_google", mapOf()) + return this.delete("/users/${path_user_id}/credentials_google", mapOf()) } - /** * ### Saml authentication login information for the specified user. * @@ -9787,14 +9932,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_saml( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_saml", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_saml", + mapOf("fields" to fields), + ) } - /** * ### Saml authentication login information for the specified user. * @@ -9805,13 +9951,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_saml -> ByteArray */ fun delete_user_credentials_saml( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_saml", mapOf()) + return this.delete("/users/${path_user_id}/credentials_saml", mapOf()) } - /** * ### OpenID Connect (OIDC) authentication login information for the specified user. * @@ -9824,14 +9969,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_oidc( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_oidc", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_oidc", + mapOf("fields" to fields), + ) } - /** * ### OpenID Connect (OIDC) authentication login information for the specified user. * @@ -9842,13 +9988,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_oidc -> ByteArray */ fun delete_user_credentials_oidc( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_oidc", mapOf()) + return this.delete("/users/${path_user_id}/credentials_oidc", mapOf()) } - /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -9863,15 +10008,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_credentials_api3( user_id: String, credentials_api3_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_api3_id = encodeParam(credentials_api3_id) - return this.get("/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", + mapOf("fields" to fields), + ) } - /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -9884,14 +10030,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_credentials_api3( user_id: String, - credentials_api3_id: String - ) : SDKResponse { + credentials_api3_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_api3_id = encodeParam(credentials_api3_id) - return this.delete("/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", mapOf()) + return this.delete("/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", mapOf()) } - /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -9904,14 +10049,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_credentials_api3s( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_api3", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_api3", + mapOf("fields" to fields), + ) } - /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -9924,14 +10070,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_user_credentials_api3( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/users/${path_user_id}/credentials_api3", - mapOf("fields" to fields)) + return this.post( + "/users/${path_user_id}/credentials_api3", + mapOf("fields" to fields), + ) } - /** * ### Embed login information for the specified user. * @@ -9946,15 +10093,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_credentials_embed( user_id: String, credentials_embed_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_embed_id = encodeParam(credentials_embed_id) - return this.get("/users/${path_user_id}/credentials_embed/${path_credentials_embed_id}", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_embed/${path_credentials_embed_id}", + mapOf("fields" to fields), + ) } - /** * ### Embed login information for the specified user. * @@ -9967,14 +10115,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_credentials_embed( user_id: String, - credentials_embed_id: String - ) : SDKResponse { + credentials_embed_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_embed_id = encodeParam(credentials_embed_id) - return this.delete("/users/${path_user_id}/credentials_embed/${path_credentials_embed_id}", mapOf()) + return this.delete("/users/${path_user_id}/credentials_embed/${path_credentials_embed_id}", mapOf()) } - /** * ### Embed login information for the specified user. * @@ -9987,14 +10134,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_credentials_embeds( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_embed", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_embed", + mapOf("fields" to fields), + ) } - /** * ### Looker Openid login information for the specified user. Used by Looker Analysts. * @@ -10007,14 +10155,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_looker_openid( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/credentials_looker_openid", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/credentials_looker_openid", + mapOf("fields" to fields), + ) } - /** * ### Looker Openid login information for the specified user. Used by Looker Analysts. * @@ -10025,13 +10174,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_looker_openid -> ByteArray */ fun delete_user_credentials_looker_openid( - user_id: String - ) : SDKResponse { + user_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_looker_openid", mapOf()) + return this.delete("/users/${path_user_id}/credentials_looker_openid", mapOf()) } - /** * ### Web login session for the specified user. * @@ -10046,15 +10194,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_session( user_id: String, session_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_session_id = encodeParam(session_id) - return this.get("/users/${path_user_id}/sessions/${path_session_id}", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/sessions/${path_session_id}", + mapOf("fields" to fields), + ) } - /** * ### Web login session for the specified user. * @@ -10067,14 +10216,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_session( user_id: String, - session_id: String - ) : SDKResponse { + session_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_session_id = encodeParam(session_id) - return this.delete("/users/${path_user_id}/sessions/${path_session_id}", mapOf()) + return this.delete("/users/${path_user_id}/sessions/${path_session_id}", mapOf()) } - /** * ### Web login session for the specified user. * @@ -10087,14 +10235,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_sessions( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/sessions", - mapOf("fields" to fields)) + return this.get( + "/users/${path_user_id}/sessions", + mapOf("fields" to fields), + ) } - /** * ### Create a password reset token. * This will create a cryptographically secure random password reset token for the user. @@ -10117,15 +10266,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_user_credentials_email_password_reset( user_id: String, expires: Boolean? = null, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/users/${path_user_id}/credentials_email/password_reset", - mapOf("expires" to expires, - "fields" to fields)) + return this.post( + "/users/${path_user_id}/credentials_email/password_reset", + mapOf( + "expires" to expires, + "fields" to fields, + ), + ) } - /** * ### Get information about roles of a given user * @@ -10138,15 +10290,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_roles( user_id: String, fields: String? = null, - direct_association_only: Boolean? = null - ) : SDKResponse { + direct_association_only: Boolean? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/roles", - mapOf("fields" to fields, - "direct_association_only" to direct_association_only)) + return this.get( + "/users/${path_user_id}/roles", + mapOf( + "fields" to fields, + "direct_association_only" to direct_association_only, + ), + ) } - /** * ### Set roles of the user with a specific id. * @@ -10159,14 +10314,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun set_user_roles( user_id: String, body: Array, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.put("/users/${path_user_id}/roles", - mapOf("fields" to fields), body) + return this.put( + "/users/${path_user_id}/roles", + mapOf("fields" to fields), + body, + ) } - /** * ### Get user attribute values for a given user. * @@ -10198,17 +10355,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { fields: String? = null, user_attribute_ids: DelimArray? = null, all_values: Boolean? = null, - include_unset: Boolean? = null - ) : SDKResponse { + include_unset: Boolean? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get("/users/${path_user_id}/attribute_values", - mapOf("fields" to fields, - "user_attribute_ids" to user_attribute_ids, - "all_values" to all_values, - "include_unset" to include_unset)) + return this.get( + "/users/${path_user_id}/attribute_values", + mapOf( + "fields" to fields, + "user_attribute_ids" to user_attribute_ids, + "all_values" to all_values, + "include_unset" to include_unset, + ), + ) } - /** * ### Store a custom value for a user attribute in a user's account settings. * @@ -10223,14 +10383,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { fun set_user_attribute_user_value( user_id: String, user_attribute_id: String, - body: WriteUserAttributeWithValue - ) : SDKResponse { + body: WriteUserAttributeWithValue, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_user_attribute_id = encodeParam(user_attribute_id) - return this.patch("/users/${path_user_id}/attribute_values/${path_user_attribute_id}", mapOf(), body) + return this.patch("/users/${path_user_id}/attribute_values/${path_user_attribute_id}", mapOf(), body) } - /** * ### Delete a user attribute value from a user's account settings. * @@ -10246,14 +10405,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_attribute_user_value( user_id: String, - user_attribute_id: String - ) : SDKResponse { + user_attribute_id: String, + ): SDKResponse { val path_user_id = encodeParam(user_id) val path_user_attribute_id = encodeParam(user_attribute_id) - return this.delete("/users/${path_user_id}/attribute_values/${path_user_attribute_id}", mapOf()) + return this.delete("/users/${path_user_id}/attribute_values/${path_user_attribute_id}", mapOf()) } - /** * ### Send a password reset token. * This will send a password reset email to the user. If a password reset token does not already exist @@ -10272,14 +10430,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun send_user_credentials_email_password_reset( user_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/users/${path_user_id}/credentials_email/send_password_reset", - mapOf("fields" to fields)) + return this.post( + "/users/${path_user_id}/credentials_email/send_password_reset", + mapOf("fields" to fields), + ) } - /** * ### Change a disabled user's email addresses * @@ -10299,14 +10458,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun wipeout_user_emails( user_id: String, body: UserEmailOnly, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/users/${path_user_id}/update_emails", - mapOf("fields" to fields), body) + return this.post( + "/users/${path_user_id}/update_emails", + mapOf("fields" to fields), + body, + ) } - /** * Create an embed user from an external user ID * @@ -10317,16 +10478,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /users/embed_user -> ByteArray */ fun create_embed_user( - body: CreateEmbedUserRequest - ) : SDKResponse { - return this.post("/users/embed_user", mapOf(), body) + body: CreateEmbedUserRequest, + ): SDKResponse { + return this.post("/users/embed_user", mapOf(), body) } //endregion User: Manage Users //region UserAttribute: Manage User Attributes - /** * ### Get information about all user attributes. * @@ -10337,14 +10497,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_attributes( fields: String? = null, - sorts: String? = null - ) : SDKResponse { - return this.get("/user_attributes", - mapOf("fields" to fields, - "sorts" to sorts)) + sorts: String? = null, + ): SDKResponse { + return this.get( + "/user_attributes", + mapOf( + "fields" to fields, + "sorts" to sorts, + ), + ) } - /** * ### Create a new user attribute * @@ -10364,13 +10527,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_user_attribute( body: WriteUserAttribute, - fields: String? = null - ) : SDKResponse { - return this.post("/user_attributes", - mapOf("fields" to fields), body) + fields: String? = null, + ): SDKResponse { + return this.post( + "/user_attributes", + mapOf("fields" to fields), + body, + ) } - /** * ### Get information about a user attribute. * @@ -10381,14 +10546,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_attribute( user_attribute_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.get("/user_attributes/${path_user_attribute_id}", - mapOf("fields" to fields)) + return this.get( + "/user_attributes/${path_user_attribute_id}", + mapOf("fields" to fields), + ) } - /** * ### Update a user attribute definition. * @@ -10401,14 +10567,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_user_attribute( user_attribute_id: String, body: WriteUserAttribute, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.patch("/user_attributes/${path_user_attribute_id}", - mapOf("fields" to fields), body) + return this.patch( + "/user_attributes/${path_user_attribute_id}", + mapOf("fields" to fields), + body, + ) } - /** * ### Delete a user attribute (admin only). * @@ -10417,13 +10585,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /user_attributes/{user_attribute_id} -> ByteArray */ fun delete_user_attribute( - user_attribute_id: String - ) : SDKResponse { + user_attribute_id: String, + ): SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.delete("/user_attributes/${path_user_attribute_id}", mapOf()) + return this.delete("/user_attributes/${path_user_attribute_id}", mapOf()) } - /** * ### Returns all values of a user attribute defined by user groups, in precedence order. * @@ -10440,14 +10607,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_attribute_group_values( user_attribute_id: String, - fields: String? = null - ) : SDKResponse { + fields: String? = null, + ): SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.get("/user_attributes/${path_user_attribute_id}/group_values", - mapOf("fields" to fields)) + return this.get( + "/user_attributes/${path_user_attribute_id}/group_values", + mapOf("fields" to fields), + ) } - /** * ### Define values for a user attribute across a set of groups, in priority order. * @@ -10477,17 +10645,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun set_user_attribute_group_values( user_attribute_id: String, - body: Array - ) : SDKResponse { + body: Array, + ): SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.post("/user_attributes/${path_user_attribute_id}/group_values", mapOf(), body) + return this.post("/user_attributes/${path_user_attribute_id}/group_values", mapOf(), body) } //endregion UserAttribute: Manage User Attributes //region Workspace: Manage Workspaces - /** * ### Get All Workspaces * @@ -10495,13 +10662,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /workspaces -> ByteArray */ - fun all_workspaces( - - ) : SDKResponse { - return this.get("/workspaces", mapOf()) + fun all_workspaces(): SDKResponse { + return this.get("/workspaces", mapOf()) } - /** * ### Get A Workspace * @@ -10538,12 +10702,11 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /workspaces/{workspace_id} -> ByteArray */ fun workspace( - workspace_id: String - ) : SDKResponse { + workspace_id: String, + ): SDKResponse { val path_workspace_id = encodeParam(workspace_id) - return this.get("/workspaces/${path_workspace_id}", mapOf()) + return this.get("/workspaces/${path_workspace_id}", mapOf()) } //endregion Workspace: Manage Workspaces - -} \ No newline at end of file +} diff --git a/kotlin/src/main/com/looker/sdk/ApiSettings.kt b/kotlin/src/main/com/looker/sdk/ApiSettings.kt index 36fe8b376..ae74ecaae 100644 --- a/kotlin/src/main/com/looker/sdk/ApiSettings.kt +++ b/kotlin/src/main/com/looker/sdk/ApiSettings.kt @@ -29,9 +29,9 @@ import com.looker.rtl.DEFAULT_HTTP_TRANSPORT import com.looker.rtl.DEFAULT_TIMEOUT import com.looker.rtl.asBoolean import com.looker.rtl.unQuote -import org.ini4j.Ini -import java.io.ByteArrayInputStream +import org.apache.commons.configuration.HierarchicalINIConfiguration import java.io.File +import java.io.StringReader /** Structure read from an .INI file */ typealias ApiSections = Map> @@ -40,14 +40,20 @@ typealias ApiSections = Map> * Parse and cleanup something that looks like an .INI file, stripping outermost quotes for values */ fun apiConfig(contents: String): ApiSections { - val iniParser = Ini(ByteArrayInputStream(contents.toByteArray())) - - val ret = mutableMapOf>() - iniParser.forEach { (section, values) -> - ret[section] = values.map { it.key to unQuote(it.value) }.toMap() + val iniParser = HierarchicalINIConfiguration() + iniParser.load(StringReader(contents)) + + return mutableMapOf>().also { mapToReturn -> + iniParser.sections.forEach { section -> + mapToReturn[section] = mutableMapOf().also { sectionMap -> + iniParser.getKeys(section).forEach { key -> + // `key` is fully scoped (e.g. `Looker.`) but we just want the key so + // remove the section prefix before adding to the map. + sectionMap[key.removePrefix("$section.")] = unQuote(iniParser.getString(key)) + } + } + } } - - return ret } // TODO why no @JvmOverloads here? @@ -144,7 +150,7 @@ open class ApiSettings(val rawReadConfig: () -> Map) : Configura keyEnvironmentPrefix to environmentPrefix, keyVerifySSL to verifySSL.toString(), keyTimeout to timeout.toString(), - "headers" to headers.toString() + "headers" to headers.toString(), ).plus(rawMap) } diff --git a/kotlin/src/main/com/looker/sdk/Constants.kt b/kotlin/src/main/com/looker/sdk/Constants.kt index 107da5f50..8df7a73bc 100644 --- a/kotlin/src/main/com/looker/sdk/Constants.kt +++ b/kotlin/src/main/com/looker/sdk/Constants.kt @@ -28,7 +28,7 @@ package com.looker.sdk const val ENVIRONMENT_PREFIX = "LOOKERSDK" const val SDK_TAG = "KT-SDK" -const val LOOKER_VERSION = "23.18" +const val LOOKER_VERSION = "24.2" const val API_VERSION = "4.0" const val AGENT_TAG = "$SDK_TAG $LOOKER_VERSION" const val LOOKER_APPID = "x-looker-appid" diff --git a/kotlin/src/test/TestAuthToken.kt b/kotlin/src/test/TestAuthToken.kt index b994ee21d..0d20b649c 100644 --- a/kotlin/src/test/TestAuthToken.kt +++ b/kotlin/src/test/TestAuthToken.kt @@ -44,7 +44,7 @@ class TestAuthToken { accessToken = "all-access", tokenType = "backstage", expiresIn = 3600, - refreshToken = "refresh" + refreshToken = "refresh", ) assertEquals(testToken.accessToken, "all-access") @@ -59,7 +59,7 @@ class TestAuthToken { var actual = AuthToken( accessToken = "all-access", tokenType = "backstage", - expiresIn = 9 + expiresIn = 9, ) assertEquals(actual.accessToken, "all-access") @@ -69,7 +69,7 @@ class TestAuthToken { actual = AuthToken( accessToken = "all-access", tokenType = "backstage", - expiresIn = 11 + expiresIn = 11, ) assertEquals(actual.expiresIn, 11) diff --git a/kotlin/src/test/TestMethods.kt b/kotlin/src/test/TestMethods.kt index 80accd3d0..f331cb38c 100644 --- a/kotlin/src/test/TestMethods.kt +++ b/kotlin/src/test/TestMethods.kt @@ -12,7 +12,7 @@ class TestMethods { getId: (item: TAll) -> TId, getEntity: (id: TId, fields: String?) -> SDKResponse, fields: String? = null, - maxErrors: Int = 3 + maxErrors: Int = 3, ): String { val entityName = TEntity::class.simpleName!! val list = sdk.ok>(lister()) @@ -46,7 +46,7 @@ class TestMethods { getId: (item: TAll) -> TId, getEntity: (id: TId, fields: String?) -> SDKResponse, fields: String? = null, - maxErrors: Int = 3 + maxErrors: Int = 3, ) { val entityName = TEntity::class.simpleName!! var result = listGetter(lister, getId, getEntity, null, maxErrors) @@ -64,7 +64,7 @@ class TestMethods { "system__activity", "dashboard", arrayOf("dashboard.id", "dashboard.title", "dashboard.count"), - limit = "100" + limit = "100", ) } @@ -80,9 +80,9 @@ class TestMethods { sdk.create_look( WriteLookWithQuery( description = "SDK Look", - query = simpleQuery() - ) - ) + query = simpleQuery(), + ), + ), ) print("Prepared Look ${look.id}") return look @@ -99,9 +99,9 @@ class TestMethods { WriteDashboard( description = "SDK Dashboard", title = "SDK Dashboard Title", - show_title = true - ) - ) + show_title = true, + ), + ), ) print("Prepared Dashboard ${dashboard.id}") return dashboard @@ -117,26 +117,26 @@ class TestMethods { sdk.create_board( WriteBoard( description = "SDK board description", - title = "SDK Board" - ) - ) + title = "SDK Board", + ), + ), ) val section = sdk.ok( sdk.create_board_section( WriteBoardSection( board_id = board.id!!, - description = "SDK section" - ) - ) + description = "SDK section", + ), + ), ) val item = sdk.ok( sdk.create_board_item( WriteBoardItem( board_section_id = section.id, - look_id = look.id - ) - ) + look_id = look.id, + ), + ), ) print("Prepared Board ${board.id} Section ${section.id} Item ${item.id} with Look ${look.id}") return board @@ -156,8 +156,8 @@ class TestMethods { format = "csv", address = "sftp://example", secret_parameters = "{\"password\":\"secret\"}", - parameters = "{\"username\":\"name\"}" - ) + parameters = "{\"username\":\"name\"}", + ), ) val plan = sdk.ok( @@ -171,9 +171,9 @@ class TestMethods { timezone = "America/Los_Angeles", crontab = "*/1440 * * * *", enabled = true, // Plan must be enabled to be retrieved by `all_scheduled_plans` - scheduled_plan_destination = destinations - ) - ) + scheduled_plan_destination = destinations, + ), + ), ) print("Prepared scheduled plan ${plan.id}") return plan @@ -245,7 +245,7 @@ class TestMethods { @Test fun testRunInlineQuery() { val result = sdk.ok( - sdk.run_inline_query("csv", simpleQuery()) + sdk.run_inline_query("csv", simpleQuery()), ) assertTrue(result.contains("Dashboard ID")) } @@ -255,7 +255,7 @@ class TestMethods { listGetter( { sdk.all_color_collections() }, { item -> item.id!! }, - { id, fields -> sdk.color_collection(id, fields) } + { id, fields -> sdk.color_collection(id, fields) }, ) } @@ -264,7 +264,7 @@ class TestMethods { listGetter( { sdk.all_connections() }, { item -> item.name!! }, - { id, fields -> sdk.connection(id, fields) } + { id, fields -> sdk.connection(id, fields) }, ) } @@ -273,7 +273,7 @@ class TestMethods { listGetter( { sdk.all_datagroups() }, { item -> item.id!! }, - { id, _ -> sdk.datagroup(id) } + { id, _ -> sdk.datagroup(id) }, ) } @@ -283,7 +283,7 @@ class TestMethods { testAll( { sdk.all_dashboards() }, { item -> item.id!! }, - { id, fields -> sdk.dashboard(id, fields) } + { id, fields -> sdk.dashboard(id, fields) }, ) } @@ -298,7 +298,7 @@ class TestMethods { testAll( { sdk.all_folders() }, { item -> item.id!! }, - { id, fields -> sdk.folder(id, fields) } + { id, fields -> sdk.folder(id, fields) }, ) } @@ -307,7 +307,7 @@ class TestMethods { listGetter( { sdk.all_groups() }, { item -> item.id!! }, - { id, fields -> sdk.group(id, fields) } + { id, fields -> sdk.group(id, fields) }, ) } @@ -317,7 +317,7 @@ class TestMethods { listGetter( { sdk.all_board_items() }, { item -> item.id!! }, - { id, fields -> sdk.board_item(id, fields) } + { id, fields -> sdk.board_item(id, fields) }, ) } @@ -334,7 +334,7 @@ class TestMethods { listGetter( { sdk.all_boards() }, { item -> item.id!! }, - { id, fields -> sdk.board(id, fields) } + { id, fields -> sdk.board(id, fields) }, ) } @@ -344,7 +344,7 @@ class TestMethods { listGetter( { sdk.all_board_sections() }, { item -> item.id!! }, - { id, fields -> sdk.board_section(id, fields) } + { id, fields -> sdk.board_section(id, fields) }, ) } @@ -353,7 +353,7 @@ class TestMethods { listGetter( { sdk.all_integration_hubs() }, { item -> item.id!! }, - { id, fields -> sdk.integration_hub(id, fields) } + { id, fields -> sdk.integration_hub(id, fields) }, ) } @@ -362,7 +362,7 @@ class TestMethods { listGetter( { sdk.all_integrations() }, { item -> item.id!! }, - { id, fields -> sdk.integration(id, fields) } + { id, fields -> sdk.integration(id, fields) }, ) } @@ -371,7 +371,7 @@ class TestMethods { listGetter( { sdk.all_legacy_features() }, { item -> item.id!! }, - { id, _ -> sdk.legacy_feature(id) } + { id, _ -> sdk.legacy_feature(id) }, ) } @@ -386,7 +386,7 @@ class TestMethods { testAll( { sdk.all_lookml_models() }, { item -> item.name!! }, - { id, fields -> sdk.lookml_model(id, fields) } + { id, fields -> sdk.lookml_model(id, fields) }, ) } @@ -396,7 +396,7 @@ class TestMethods { testAll( { sdk.all_looks() }, { item -> item.id!! }, - { id, fields -> sdk.look(id, fields) } + { id, fields -> sdk.look(id, fields) }, ) } @@ -405,7 +405,7 @@ class TestMethods { testAll( { sdk.all_model_sets() }, { item -> item.id!! }, - { id, fields -> sdk.model_set(id, fields) } + { id, fields -> sdk.model_set(id, fields) }, ) } @@ -414,7 +414,7 @@ class TestMethods { testAll( { sdk.all_permission_sets() }, { item -> item.id!! }, - { id, fields -> sdk.permission_set(id, fields) } + { id, fields -> sdk.permission_set(id, fields) }, ) } @@ -429,7 +429,7 @@ class TestMethods { testAll( { sdk.all_projects() }, { item -> item.id!! }, - { id, fields -> sdk.project(id, fields) } + { id, fields -> sdk.project(id, fields) }, ) } @@ -438,7 +438,7 @@ class TestMethods { testAll( { sdk.all_roles() }, { item -> item.id!! }, - { id, _ -> sdk.role(id) } + { id, _ -> sdk.role(id) }, ) } @@ -448,7 +448,7 @@ class TestMethods { testAll( { sdk.all_scheduled_plans() }, { item -> item.id!! }, - { id, fields -> sdk.scheduled_plan(id, fields) } + { id, fields -> sdk.scheduled_plan(id, fields) }, ) clearScheduledPlan() } @@ -458,7 +458,7 @@ class TestMethods { testAll( { sdk.all_themes() }, { item -> item.id!! }, - { id, fields -> sdk.theme(id, fields) } + { id, fields -> sdk.theme(id, fields) }, ) } @@ -473,7 +473,7 @@ class TestMethods { testAll( { sdk.all_user_attributes() }, { item -> item.id!! }, - { id, fields -> sdk.user_attribute(id, fields) } + { id, fields -> sdk.user_attribute(id, fields) }, ) } @@ -490,7 +490,7 @@ class TestMethods { testAll( { sdk.all_users() }, { item -> item.id!! }, - { id, fields -> sdk.user(id, fields) } + { id, fields -> sdk.user(id, fields) }, ) } @@ -515,7 +515,7 @@ class TestMethods { user_can_view = true, user_can_edit = true, // Now that Transport.kt uses GSon, this null property will be stripped from the request payload - hidden_value_domain_whitelist = null + hidden_value_domain_whitelist = null, ) val actual = sdk.ok(sdk.create_user_attribute(body)) // We won't get here when there's an error @@ -532,7 +532,7 @@ class TestMethods { testAll( { sdk.all_workspaces() }, { item -> item.id!! }, - { id, _ -> sdk.workspace(id) } + { id, _ -> sdk.workspace(id) }, ) } @@ -540,11 +540,11 @@ class TestMethods { fun testErrorReporting() { try { val props = ThemeSettings( - background_color = "invalid" + background_color = "invalid", ) val theme = WriteTheme( name = "'bogus!", - settings = props + settings = props, ) val actual = sdk.ok(sdk.validate_theme(theme)) assertNull(actual) // test should never get here diff --git a/kotlin/src/test/TestSmoke.kt b/kotlin/src/test/TestSmoke.kt index bc4f045c8..201f96fcc 100644 --- a/kotlin/src/test/TestSmoke.kt +++ b/kotlin/src/test/TestSmoke.kt @@ -30,13 +30,12 @@ class TestSmoke { "system__activity", "dashboard", arrayOf("dashboard.id", "dashboard.title", "dashboard.count"), - limit = "100" + limit = "100", ) } @ExperimentalUnsignedTypes fun mimeType(data: UByteArray): String { - val b = data[0] val n = b.toUInt().toInt() return when (n) { @@ -73,7 +72,7 @@ class TestSmoke { if (dashboards.isNotEmpty()) { type = "dashboard" dashboards[0].id?.let { - dashId -> + dashId -> id = dashId } } @@ -126,7 +125,7 @@ class TestSmoke { val task = WriteCreateQueryTask( query_id = id, source = "test", - result_format = ResultFormat.csv + result_format = ResultFormat.csv, ) val created = sdk.ok(sdk.create_query_task(task)) assertEquals(id, created.query_id, "Query id matches") @@ -222,5 +221,5 @@ data class DummyUser( var id: Long? = null, var credentials_api3: Array? = null, var display_name: String? = null, - var email: String? = null + var email: String? = null, ) : Serializable diff --git a/kotlin/src/test/TestTransport.kt b/kotlin/src/test/TestTransport.kt index 7cc30b45f..a06cfa9a5 100644 --- a/kotlin/src/test/TestTransport.kt +++ b/kotlin/src/test/TestTransport.kt @@ -35,7 +35,7 @@ import kotlin.test.assertTrue class TestTransport { val fullPath = "https://github.com/looker-open-source/sdk-codegen/" val base = "https://my.looker.com:19999" - val apiVersion = "3.1" + val apiVersion = "4.0" val userPath = "/user" val headers = mapOf(LOOKER_APPID to AGENT_TAG, "User-Agent" to AGENT_TAG) diff --git a/kotlin/src/test/Utils.kt b/kotlin/src/test/Utils.kt index 369b33af9..3e15f5249 100644 --- a/kotlin/src/test/Utils.kt +++ b/kotlin/src/test/Utils.kt @@ -37,15 +37,15 @@ val jsonDictType = object : TypeToken() {}.type class TestSettingsIniFile( filename: String = "./looker.ini", section: String = "", - private val base: ConfigurationProvider = ApiSettings.fromIniFile(filename, section) + private val base: ConfigurationProvider = ApiSettings.fromIniFile(filename, section), ) : ConfigurationProvider by base { override fun readConfig(): Map { return base.readConfig().plus( mapOf( "client_id" to "test_client_id", - "redirect_uri" to "looker://" - ) + "redirect_uri" to "looker://", + ), ) } } diff --git a/lerna.json b/lerna.json index 3a60d401d..bcdca0415 100644 --- a/lerna.json +++ b/lerna.json @@ -1,7 +1,5 @@ { - "packages": [ - "packages/*" - ], + "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, "version": "independent" diff --git a/looker-sample.ini b/looker-sample.ini index 9f5b318a0..0e52eb3d0 100644 --- a/looker-sample.ini +++ b/looker-sample.ini @@ -1,13 +1,10 @@ [Looker] -# NOTE: api_versions is ONLY used by the code generator and is NOT required by your SDK's looker.ini -# if api_versions is not defined, it defaults to "3.1,4.0" -api_versions=3.1,4.0 # Base URL for API. Do not include /api/* in the url base_url=https://:19999 -# API 3 client id. You can instead customize how this is provided by overriding readConfig() -client_id=your_API3_client_id -# API 3 client secret. You can instead customize how this is provided by overriding readConfig() -client_secret=your_API3_client_secret +# API client id. You can instead customize how this is provided by overriding readConfig() +client_id=your_API_client_id +# API client secret. You can instead customize how this is provided by overriding readConfig() +client_secret=your_API_client_secret # Set to false only if testing locally against self-signed certs. Defaults to true if not specified verify_ssl=true # Timeout in seconds for HTTP requests. Defaults to 2 minutes (120) seconds if not specified. diff --git a/package.json b/package.json index cbeaa95d7..d4721978d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "license": "MIT", "name": "sdk-codegen-all", - "version": "23.16.0", + "version": "24.3.0", "description": "All workspaces for SDK code generation", "author": "Looker", "private": true, @@ -19,7 +19,7 @@ "url": "https://github.com/looker-open-source/sdk-codegen/issues" }, "engines": { - "node": ">=14", + "node": ">=18", "yarn": ">=1.22.0" }, "scripts": { @@ -73,11 +73,13 @@ "test:jest": "DOT_ENV_FILE=.env.test jest", "test:ext": "yarn jest packages/extension-sdk packages/extension-sdk-react", "test:hack": "yarn jest packages/wholly-artifact/src packages/hackathon", + "sync": "yarn syncpack fix-mismatches && yarn install && yarn dedupe:dev", "bootstrap": "lerna clean -y && lerna bootstrap", "watch": "lerna run --parallel watch", "watch:cjs": "lerna run --parallel watch:cjs" }, "devDependencies": { + "@babel/eslint-parser": "7.23.3", "@babel/cli": "^7.13.16", "@babel/core": "^7.14.0", "@babel/plugin-proposal-class-properties": "^7.13.0", @@ -89,61 +91,79 @@ "@babel/preset-typescript": "^7.13.0", "@babel/runtime": "^7.14.0", "@babel/runtime-corejs3": "^7.14.0", - "@looker/eslint-config-oss": "1.7.14", - "@testing-library/jest-dom": "^5.16.5", + "@looker/eslint-plugin": "~1.0.0", + "@looker/eslint-config-oss": "1.7.21", + "@looker/eslint-config": "1.5.1", + "@testing-library/jest-dom": "5.16.5", "@types/blueimp-md5": "^2.7.0", "@types/ini": "^1.3.30", - "@types/jest": "^29.4.0", + "@types/jest": "29.2.4", "@types/js-yaml": "^3.12.1", - "@types/lodash": "^4.14.162", - "@types/node": "^14.18.36", - "@types/prettier": "^2.3.2", + "@types/lodash": "4.14.172", + "@types/node": "14.18.63", + "@types/prettier": "3.0.0", "@types/readable-stream": "2.3.9", - "@types/request": "^2.48.3", - "@types/request-promise-native": "^1.0.17", + "@types/request": "2.48.12", + "@types/request-promise-native": "1.0.21", "@types/uuid": "^8.3.4", + "@typescript-eslint/eslint-plugin": "^5.61.0", + "@typescript-eslint/parser": "^5.61.0", "babel-core": "^7.0.0-bridge", - "babel-loader-exclude-node-modules-except": "^1.1.2", - "babel-plugin-styled-components": "^1.10.7", - "core-js": "^3.6.5", - "regenerator-runtime": "^0.13.11", - "eslint-plugin-jest": "^27.2.1", - "eslint-plugin-jest-dom": "^4.0.3", + "babel-loader-exclude-node-modules-except": "1.1.2", + "babel-plugin-styled-components": "1.10.7", + "core-js": "3.6.5", "enzyme": "^3.11.0", - "enzyme-adapter-react-16": "^1.15.2", - "eslint": "^7.32.0", - "eslint-plugin-prettier": "4.0.0", - "jest": "^29.4.2", - "jest-canvas-mock": "^2.4.0", - "jest-environment-jsdom": "^29.4.2", - "jest-junit": "^12.0.0", - "jest-styled-components": "^7.1.1", - "js-yaml": "^3.13.1", - "jsdom": "^21.1.0", - "lerna": "^3.20.2", - "lint-staged": "^10.2.2", - "lodash": "^4.17.15", - "node-fetch": "^2.6.7", - "node-forge": "^1.3.1", - "npm-run-all": "^4.1.5", - "openapi3-ts": "^1.3.0", + "enzyme-adapter-react-16": "1.15.2", + "eslint": "8.24.0", + "eslint-config-prettier": "8.5.0", + "eslint-config-standard": "17.0.0", + "eslint-plugin-header": "3.1.1", + "eslint-plugin-import": "2.29.0", + "eslint-plugin-lodash": "7.4.0", + "eslint-plugin-mdx": "3.1.1", + "eslint-plugin-n": "15.2.4", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "6.1.1", + "eslint-plugin-react": "7.29.4", + "eslint-plugin-react-hooks": "4.6.0", + "eslint-plugin-jest": "27.2.1", + "eslint-plugin-jest-dom": "4.0.3", + "eslint-plugin-prettier": "5.1.2", + "eslint-plugin-testing-library": "^5.3.1", + "eslint-plugin-unicorn": "^44.0.2", + "jest": "29.3.1", + "jest-canvas-mock": "2.4.0", + "jest-environment-jsdom": "29.7.0", + "jest-junit": "12.3.0", + "jest-styled-components": "7.1.1", + "js-yaml": "3.14.1", + "jsdom": "21.1.2", + "lerna": "3.22.1", + "lint-staged": "10.2.2", + "lodash": "4.17.21", + "node-fetch": "2.6.7", + "node-forge": "1.3.1", + "npm-run-all": "4.1.5", + "openapi3-ts": "2.0.2", "pre-commit": "1.2.2", - "prettier": "^2.4.1", - "react": "^16.14.0", - "react-dom": "^16.14.0", - "resize-observer-polyfill": "^1.5.1", - "styled-components": "^5.2.1", + "prettier": "3.1.1", + "pretty-quick": "2.0.2", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "regenerator-runtime": "0.13.11", + "resize-observer-polyfill": "1.5.1", + "styled-components": "^5.3.1", + "syncpack": "11.2.1", "ts-jest": "^29.0.5", - "ts-node": "^10.9.1", - "typescript": "4.6.3", - "url-loader": "^4.1.1", - "uuid": "^9.0.0", - "webpack": "^5.10.0", + "ts-node": "10.9.1", + "typescript": "5.1.6", + "url-loader": "4.1.1", + "uuid": "9.0.1", + "webpack": "5.88.2", "webpack-bundle-analyzer": "^4.4.1", "webpack-merge": "^5.7.3", - "yarn-deduplicate": "^6.0.0" + "yarn-deduplicate": "6.0.0" }, - "dependencies": {}, "lint-staged": { "**/*.ts?(x)": [ "eslint" @@ -159,6 +179,8 @@ "lint-staged" ], "eslintConfig": { + "root": true, + "parser": "@typescript-eslint/parser", "extends": [ "@looker/eslint-config-oss" ], @@ -169,14 +191,27 @@ "@typescript-eslint/no-unused-vars": [ "warn", { - "args": "all", - "argsIgnorePattern": "^_" + "args": "none", + "varsIgnorePattern": "^_" } ], "sort-keys-fix/sort-keys-fix": "off", "no-useless-constructor": "off", "@typescript-eslint/no-empty-interface": "off", "import/default": "off", + "import/export": "warn", + "import/order": "warn", + "sort-imports": "warn", + "import/no-duplicates": "warn", + "import/no-extraneous-dependencies": [ + "warn", + { + "devDependencies": false, + "optionalDependencies": false, + "peerDependencies": false + } + ], + "no-duplicate-imports": "warn", "sort-keys": "off", "no-nested-ternary": "off", "spaced-comment": [ @@ -301,13 +336,14 @@ ], "keywords": [], "resolutions": { - "@types/react": "^16.14.2", - "react": "^16.14.0", + "@types/react": "17.0.65", + "react": "^17.0.2", "set-value": "^2.0.1", "trim": ">= 0.0.3", "trim-newlines": ">= 3.0.1", "glob-parent": ">= 5.1.2", "ws": ">= 7.4.6", - "**/url-parse": ">= 1.5.7" + "**/url-parse": ">= 1.5.7", + "parse-url": "^8.1.0" } } diff --git a/packages/api-explorer/CHANGELOG.md b/packages/api-explorer/CHANGELOG.md index 868e1dd34..a114f768d 100644 --- a/packages/api-explorer/CHANGELOG.md +++ b/packages/api-explorer/CHANGELOG.md @@ -7,985 +7,969 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.20 to ^0.1.21 - * @looker/run-it bumped from ^0.9.43 to ^0.9.44 - * @looker/sdk bumped from ^23.0.0 to ^23.2.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.5.0 to ^21.5.1 - * @looker/sdk-node bumped from ^23.0.0 to ^23.2.0 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.20 to ^0.1.21 + - @looker/run-it bumped from ^0.9.43 to ^0.9.44 + - @looker/sdk bumped from ^23.0.0 to ^23.2.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.5.0 to ^21.5.1 + - @looker/sdk-node bumped from ^23.0.0 to ^23.2.0 ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.21 to ^0.1.22 - * @looker/run-it bumped from ^0.9.44 to ^0.9.45 - * @looker/sdk bumped from ^23.2.0 to ^23.4.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.5.1 to ^21.5.2 - * @looker/sdk-node bumped from ^23.2.0 to ^23.4.0 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.21 to ^0.1.22 + - @looker/run-it bumped from ^0.9.44 to ^0.9.45 + - @looker/sdk bumped from ^23.2.0 to ^23.4.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.5.1 to ^21.5.2 + - @looker/sdk-node bumped from ^23.2.0 to ^23.4.0 ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.22 to ^0.1.23 - * @looker/run-it bumped from ^0.9.45 to ^0.9.46 - * @looker/sdk bumped from ^23.4.0 to ^23.6.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.5.2 to ^21.5.3 - * @looker/sdk-node bumped from ^23.4.0 to ^23.6.0 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.22 to ^0.1.23 + - @looker/run-it bumped from ^0.9.45 to ^0.9.46 + - @looker/sdk bumped from ^23.4.0 to ^23.6.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.5.2 to ^21.5.3 + - @looker/sdk-node bumped from ^23.4.0 to ^23.6.0 ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.24 to ^0.1.25 - * @looker/run-it bumped from ^0.9.47 to ^0.9.48 - * @looker/sdk bumped from ^23.8.0 to ^23.8.1 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.5.4 to ^21.5.5 - * @looker/sdk-node bumped from ^23.8.0 to ^23.8.1 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.24 to ^0.1.25 + - @looker/run-it bumped from ^0.9.47 to ^0.9.48 + - @looker/sdk bumped from ^23.8.0 to ^23.8.1 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.5.4 to ^21.5.5 + - @looker/sdk-node bumped from ^23.8.0 to ^23.8.1 ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.28 to ^0.1.29 - * @looker/extension-utils bumped from ^0.1.25 to ^0.1.26 - * @looker/run-it bumped from ^0.9.48 to ^0.9.49 - * @looker/sdk bumped from ^23.8.1 to ^23.10.0 - * @looker/sdk-codegen bumped from ^21.8.0 to ^21.8.1 - * @looker/sdk-rtl bumped from ^21.6.0 to ^21.6.1 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.5.5 to ^21.5.6 - * @looker/sdk-node bumped from ^23.8.1 to ^23.10.0 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.28 to ^0.1.29 + - @looker/extension-utils bumped from ^0.1.25 to ^0.1.26 + - @looker/run-it bumped from ^0.9.48 to ^0.9.49 + - @looker/sdk bumped from ^23.8.1 to ^23.10.0 + - @looker/sdk-codegen bumped from ^21.8.0 to ^21.8.1 + - @looker/sdk-rtl bumped from ^21.6.0 to ^21.6.1 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.5.5 to ^21.5.6 + - @looker/sdk-node bumped from ^23.8.1 to ^23.10.0 + +### Dependencies + +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.26 to ^0.1.27 + - @looker/run-it bumped from ^0.9.49 to ^0.9.50 + - @looker/sdk bumped from ^23.10.0 to ^23.12.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.5.6 to ^21.5.7 + - @looker/sdk-node bumped from ^23.10.0 to ^23.12.0 + +### Dependencies + +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.27 to ^0.1.28 + - @looker/run-it bumped from ^0.9.50 to ^0.9.51 + - @looker/sdk bumped from ^23.12.0 to ^23.14.1 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.5.7 to ^21.5.8 + - @looker/sdk-node bumped from ^23.12.0 to ^23.14.1 + +### Dependencies + +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.29 to ^0.1.30 + - @looker/extension-utils bumped from ^0.1.28 to ^0.1.29 + - @looker/run-it bumped from ^0.9.51 to ^0.9.52 + - @looker/sdk bumped from ^23.14.1 to ^23.16.0 + - @looker/sdk-codegen bumped from ^21.8.1 to ^21.8.2 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.5.8 to ^21.5.9 + - @looker/sdk-node bumped from ^23.14.1 to ^23.16.0 + +### Dependencies + +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.29 to ^0.1.30 + - @looker/run-it bumped from ^0.9.52 to ^0.9.53 + - @looker/sdk bumped from ^23.16.0 to ^23.18.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.5.9 to ^21.5.10 + - @looker/sdk-node bumped from ^23.16.0 to ^23.18.0 + +### Dependencies + +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.30 to ^0.1.31 + - @looker/run-it bumped from ^0.9.53 to ^0.9.54 + - @looker/sdk bumped from ^23.18.0 to ^23.20.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.5.10 to ^21.5.11 + - @looker/sdk-node bumped from ^23.18.0 to ^23.20.0 + +### Dependencies + +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.31 to ^0.1.32 + - @looker/run-it bumped from ^0.9.54 to ^0.9.55 + - @looker/sdk bumped from ^23.20.0 to ^23.20.1 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.5.11 to ^21.5.12 + - @looker/sdk-node bumped from ^23.20.0 to ^23.20.1 ### Dependencies * The following workspace dependencies were updated * dependencies - * @looker/extension-utils bumped from ^0.1.26 to ^0.1.27 - * @looker/run-it bumped from ^0.9.49 to ^0.9.50 - * @looker/sdk bumped from ^23.10.0 to ^23.12.0 + * @looker/extension-utils bumped from 0.1.32 to 0.1.33 + * @looker/run-it bumped from 0.9.55 to 0.9.56 + * @looker/sdk bumped from 23.20.1 to 24.0.0 * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.5.6 to ^21.5.7 - * @looker/sdk-node bumped from ^23.10.0 to ^23.12.0 + * @looker/sdk-codegen-scripts bumped from 21.5.12 to 21.5.13 + * @looker/sdk-node bumped from 23.20.1 to 24.0.0 ### Dependencies * The following workspace dependencies were updated * dependencies - * @looker/extension-utils bumped from ^0.1.27 to ^0.1.28 - * @looker/run-it bumped from ^0.9.50 to ^0.9.51 - * @looker/sdk bumped from ^23.12.0 to ^23.14.1 + * @looker/extension-utils bumped from 0.1.33 to 0.1.34 + * @looker/run-it bumped from 0.9.56 to 0.9.57 + * @looker/sdk bumped from 24.0.0 to 24.2.0 * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.5.7 to ^21.5.8 - * @looker/sdk-node bumped from ^23.12.0 to ^23.14.1 + * @looker/sdk-codegen-scripts bumped from 21.5.13 to 21.5.14 + * @looker/sdk-node bumped from 24.0.0 to 24.2.0 ### Dependencies * The following workspace dependencies were updated * dependencies - * @looker/code-editor bumped from ^0.1.29 to ^0.1.30 - * @looker/extension-utils bumped from ^0.1.28 to ^0.1.29 - * @looker/run-it bumped from ^0.9.51 to ^0.9.52 - * @looker/sdk bumped from ^23.14.1 to ^23.16.0 - * @looker/sdk-codegen bumped from ^21.8.1 to ^21.8.2 + * @looker/extension-utils bumped from 0.1.34 to 0.1.35 + * @looker/run-it bumped from 0.9.57 to 0.9.58 + * @looker/sdk bumped from 24.2.0 to 24.2.1 * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.5.8 to ^21.5.9 - * @looker/sdk-node bumped from ^23.14.1 to ^23.16.0 + * @looker/sdk-codegen-scripts bumped from 21.5.14 to 21.5.15 + * @looker/sdk-node bumped from 24.2.0 to 24.2.1 ## [0.9.47](https://github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.46...api-explorer-v0.9.47) (2023-05-11) - ### Features -* replace @looker/redux for with npm dependency ([#1307](https://github.com/looker-open-source/sdk-codegen/issues/1307)) ([baa58db](https://github.com/looker-open-source/sdk-codegen/commit/baa58db1bce9d974384c63a0e11301f38774a7b2)) - +- replace @looker/redux for with npm dependency ([#1307](https://github.com/looker-open-source/sdk-codegen/issues/1307)) ([baa58db](https://github.com/looker-open-source/sdk-codegen/commit/baa58db1bce9d974384c63a0e11301f38774a7b2)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.23 to ^0.1.24 - * @looker/run-it bumped from ^0.9.46 to ^0.9.47 - * @looker/sdk bumped from ^23.6.0 to ^23.8.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.5.3 to ^21.5.4 - * @looker/sdk-node bumped from ^23.6.0 to ^23.8.0 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.23 to ^0.1.24 + - @looker/run-it bumped from ^0.9.46 to ^0.9.47 + - @looker/sdk bumped from ^23.6.0 to ^23.8.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.5.3 to ^21.5.4 + - @looker/sdk-node bumped from ^23.6.0 to ^23.8.0 ## [0.9.43](https://github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.42...api-explorer-v0.9.43) (2023-02-22) - ### Features -* keep all body parameters toggle in API Explorer requests ([#1245](https://github.com/looker-open-source/sdk-codegen/issues/1245)) ([043ed3f](https://github.com/looker-open-source/sdk-codegen/commit/043ed3ff12cba4f821604b5b668d7301ed4aa6d1)) -* show Looker release version providing API specification ([#1233](https://github.com/looker-open-source/sdk-codegen/issues/1233)) ([a2be9ee](https://github.com/looker-open-source/sdk-codegen/commit/a2be9ee4736ce88336a27b78989763ecb2c57e00)) - +- keep all body parameters toggle in API Explorer requests ([#1245](https://github.com/looker-open-source/sdk-codegen/issues/1245)) ([043ed3f](https://github.com/looker-open-source/sdk-codegen/commit/043ed3ff12cba4f821604b5b668d7301ed4aa6d1)) +- show Looker release version providing API specification ([#1233](https://github.com/looker-open-source/sdk-codegen/issues/1233)) ([a2be9ee](https://github.com/looker-open-source/sdk-codegen/commit/a2be9ee4736ce88336a27b78989763ecb2c57e00)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.27 to ^0.1.28 - * @looker/extension-utils bumped from ^0.1.19 to ^0.1.20 - * @looker/run-it bumped from ^0.9.42 to ^0.9.43 - * @looker/sdk bumped from ^22.20.1 to ^23.0.0 - * @looker/sdk-codegen bumped from ^21.7.4 to ^21.8.0 - * @looker/sdk-rtl bumped from ^21.5.0 to ^21.6.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.4.8 to ^21.5.0 - * @looker/sdk-node bumped from ^22.20.1 to ^23.0.0 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.27 to ^0.1.28 + - @looker/extension-utils bumped from ^0.1.19 to ^0.1.20 + - @looker/run-it bumped from ^0.9.42 to ^0.9.43 + - @looker/sdk bumped from ^22.20.1 to ^23.0.0 + - @looker/sdk-codegen bumped from ^21.7.4 to ^21.8.0 + - @looker/sdk-rtl bumped from ^21.5.0 to ^21.6.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.4.8 to ^21.5.0 + - @looker/sdk-node bumped from ^22.20.1 to ^23.0.0 ### [0.9.42](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.41...api-explorer-v0.9.42) (2022-12-09) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.26 to ^0.1.27 - * @looker/extension-utils bumped from ^0.1.18 to ^0.1.19 - * @looker/run-it bumped from ^0.9.41 to ^0.9.42 - * @looker/sdk bumped from ^22.20.0 to ^22.20.1 - * @looker/sdk-codegen bumped from ^21.7.3 to ^21.7.4 - * @looker/sdk-rtl bumped from ^21.4.0 to ^21.5.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.4.7 to ^21.4.8 - * @looker/sdk-node bumped from ^22.20.0 to ^22.20.1 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.26 to ^0.1.27 + - @looker/extension-utils bumped from ^0.1.18 to ^0.1.19 + - @looker/run-it bumped from ^0.9.41 to ^0.9.42 + - @looker/sdk bumped from ^22.20.0 to ^22.20.1 + - @looker/sdk-codegen bumped from ^21.7.3 to ^21.7.4 + - @looker/sdk-rtl bumped from ^21.4.0 to ^21.5.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.4.7 to ^21.4.8 + - @looker/sdk-node bumped from ^22.20.0 to ^22.20.1 ### [0.9.41](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.40...api-explorer-v0.9.41) (2022-11-10) - ### Bug Fixes -* oauth support in APIX when embedded in another app ([#1198](https://www.github.com/looker-open-source/sdk-codegen/issues/1198)) ([c464d2f](https://www.github.com/looker-open-source/sdk-codegen/commit/c464d2f24c7f8e7d282208efd00feaaba216fe3e)) - +- oauth support in APIX when embedded in another app ([#1198](https://www.github.com/looker-open-source/sdk-codegen/issues/1198)) ([c464d2f](https://www.github.com/looker-open-source/sdk-codegen/commit/c464d2f24c7f8e7d282208efd00feaaba216fe3e)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.25 to ^0.1.26 - * @looker/extension-utils bumped from ^0.1.17 to ^0.1.18 - * @looker/run-it bumped from ^0.9.40 to ^0.9.41 - * @looker/sdk bumped from ^22.18.0 to ^22.20.0 - * @looker/sdk-codegen bumped from ^21.7.2 to ^21.7.3 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.4.6 to ^21.4.7 - * @looker/sdk-node bumped from ^22.18.0 to ^22.20.0 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.25 to ^0.1.26 + - @looker/extension-utils bumped from ^0.1.17 to ^0.1.18 + - @looker/run-it bumped from ^0.9.40 to ^0.9.41 + - @looker/sdk bumped from ^22.18.0 to ^22.20.0 + - @looker/sdk-codegen bumped from ^21.7.2 to ^21.7.3 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.4.6 to ^21.4.7 + - @looker/sdk-node bumped from ^22.18.0 to ^22.20.0 ### [0.9.40](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.39...api-explorer-v0.9.40) (2022-10-17) - ### Bug Fixes -* various path navigation issues ([#1190](https://www.github.com/looker-open-source/sdk-codegen/issues/1190)) ([e73da3d](https://www.github.com/looker-open-source/sdk-codegen/commit/e73da3d39960cb528947c21202318b84d586ce1f)) - +- various path navigation issues ([#1190](https://www.github.com/looker-open-source/sdk-codegen/issues/1190)) ([e73da3d](https://www.github.com/looker-open-source/sdk-codegen/commit/e73da3d39960cb528947c21202318b84d586ce1f)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.24 to ^0.1.25 - * @looker/extension-utils bumped from ^0.1.16 to ^0.1.17 - * @looker/run-it bumped from ^0.9.39 to ^0.9.40 - * @looker/sdk bumped from ^22.16.0 to ^22.18.0 - * @looker/sdk-codegen bumped from ^21.7.1 to ^21.7.2 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.4.5 to ^21.4.6 - * @looker/sdk-node bumped from ^22.16.0 to ^22.18.0 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.24 to ^0.1.25 + - @looker/extension-utils bumped from ^0.1.16 to ^0.1.17 + - @looker/run-it bumped from ^0.9.39 to ^0.9.40 + - @looker/sdk bumped from ^22.16.0 to ^22.18.0 + - @looker/sdk-codegen bumped from ^21.7.1 to ^21.7.2 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.4.5 to ^21.4.6 + - @looker/sdk-node bumped from ^22.16.0 to ^22.18.0 ### [0.9.39](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.38...api-explorer-v0.9.39) (2022-09-21) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.15 to ^0.1.16 - * @looker/run-it bumped from ^0.9.38 to ^0.9.39 - * @looker/sdk bumped from ^22.14.0 to ^22.16.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.4.4 to ^21.4.5 - * @looker/sdk-node bumped from ^22.14.0 to ^22.16.0 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.15 to ^0.1.16 + - @looker/run-it bumped from ^0.9.38 to ^0.9.39 + - @looker/sdk bumped from ^22.14.0 to ^22.16.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.4.4 to ^21.4.5 + - @looker/sdk-node bumped from ^22.14.0 to ^22.16.0 ### [0.9.38](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.37...api-explorer-v0.9.38) (2022-09-21) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.14 to ^0.1.15 - * @looker/run-it bumped from ^0.9.37 to ^0.9.38 - * @looker/sdk bumped from ^22.12.1 to ^22.14.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.4.3 to ^21.4.4 - * @looker/sdk-node bumped from ^22.12.1 to ^22.14.0 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.14 to ^0.1.15 + - @looker/run-it bumped from ^0.9.37 to ^0.9.38 + - @looker/sdk bumped from ^22.12.1 to ^22.14.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.4.3 to ^21.4.4 + - @looker/sdk-node bumped from ^22.12.1 to ^22.14.0 ### [0.9.37](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.36...api-explorer-v0.9.37) (2022-09-21) - ### Features -* ability to share a tag scene with a filter applied ([#1142](https://www.github.com/looker-open-source/sdk-codegen/issues/1142)) ([135dce3](https://www.github.com/looker-open-source/sdk-codegen/commit/135dce3a3bf75ad79525a81b2e848e118cc340e4)) -* change diff scene route ([#1159](https://www.github.com/looker-open-source/sdk-codegen/issues/1159)) ([180cf20](https://www.github.com/looker-open-source/sdk-codegen/commit/180cf204f767474a76ad7de2ee6fb5171f910eb0)) -* copy link button for search ([#1120](https://www.github.com/looker-open-source/sdk-codegen/issues/1120)) ([d6e0c37](https://www.github.com/looker-open-source/sdk-codegen/commit/d6e0c37ae36b1ff4129cf3bb30f8462f4aa49b0d)) -* error document retrieval in API Explorer ([#1161](https://www.github.com/looker-open-source/sdk-codegen/issues/1161)) ([89a94e1](https://www.github.com/looker-open-source/sdk-codegen/commit/89a94e167b8a3e1aa662c0b5de7c585b3eac2f13)) -* error documentation redirect and support for detailed error content ([#1167](https://www.github.com/looker-open-source/sdk-codegen/issues/1167)) ([5b4fc5b](https://www.github.com/looker-open-source/sdk-codegen/commit/5b4fc5b91e05ed4ccd9090724e4ac3f506b541fd)) -* SDK language selection as URL search parameter ([#1123](https://www.github.com/looker-open-source/sdk-codegen/issues/1123)) ([ae59b95](https://www.github.com/looker-open-source/sdk-codegen/commit/ae59b956a5f42dcdd5aa9b4c3d0da1836129a932)) - +- ability to share a tag scene with a filter applied ([#1142](https://www.github.com/looker-open-source/sdk-codegen/issues/1142)) ([135dce3](https://www.github.com/looker-open-source/sdk-codegen/commit/135dce3a3bf75ad79525a81b2e848e118cc340e4)) +- change diff scene route ([#1159](https://www.github.com/looker-open-source/sdk-codegen/issues/1159)) ([180cf20](https://www.github.com/looker-open-source/sdk-codegen/commit/180cf204f767474a76ad7de2ee6fb5171f910eb0)) +- copy link button for search ([#1120](https://www.github.com/looker-open-source/sdk-codegen/issues/1120)) ([d6e0c37](https://www.github.com/looker-open-source/sdk-codegen/commit/d6e0c37ae36b1ff4129cf3bb30f8462f4aa49b0d)) +- error document retrieval in API Explorer ([#1161](https://www.github.com/looker-open-source/sdk-codegen/issues/1161)) ([89a94e1](https://www.github.com/looker-open-source/sdk-codegen/commit/89a94e167b8a3e1aa662c0b5de7c585b3eac2f13)) +- error documentation redirect and support for detailed error content ([#1167](https://www.github.com/looker-open-source/sdk-codegen/issues/1167)) ([5b4fc5b](https://www.github.com/looker-open-source/sdk-codegen/commit/5b4fc5b91e05ed4ccd9090724e4ac3f506b541fd)) +- SDK language selection as URL search parameter ([#1123](https://www.github.com/looker-open-source/sdk-codegen/issues/1123)) ([ae59b95](https://www.github.com/looker-open-source/sdk-codegen/commit/ae59b956a5f42dcdd5aa9b4c3d0da1836129a932)) ### Bug Fixes -* DiffScene Page Displays Accurate Number of Diff Entries ([#1163](https://www.github.com/looker-open-source/sdk-codegen/issues/1163)) ([ee46932](https://www.github.com/looker-open-source/sdk-codegen/commit/ee469326783377a4ba382e1df915a30f1c503fd6)) -* rerendering issues on DiffScene options change ([#1168](https://www.github.com/looker-open-source/sdk-codegen/issues/1168)) ([a4ac3bc](https://www.github.com/looker-open-source/sdk-codegen/commit/a4ac3bcf2b03ef427fe0fd13c72d1d7e3e939f90)) -* whitespace under CollapserCard child components ([#1162](https://www.github.com/looker-open-source/sdk-codegen/issues/1162)) ([89fbf29](https://www.github.com/looker-open-source/sdk-codegen/commit/89fbf2911701b598bf9d673cef00e790a1bc8207)) - +- DiffScene Page Displays Accurate Number of Diff Entries ([#1163](https://www.github.com/looker-open-source/sdk-codegen/issues/1163)) ([ee46932](https://www.github.com/looker-open-source/sdk-codegen/commit/ee469326783377a4ba382e1df915a30f1c503fd6)) +- rerendering issues on DiffScene options change ([#1168](https://www.github.com/looker-open-source/sdk-codegen/issues/1168)) ([a4ac3bc](https://www.github.com/looker-open-source/sdk-codegen/commit/a4ac3bcf2b03ef427fe0fd13c72d1d7e3e939f90)) +- whitespace under CollapserCard child components ([#1162](https://www.github.com/looker-open-source/sdk-codegen/issues/1162)) ([89fbf29](https://www.github.com/looker-open-source/sdk-codegen/commit/89fbf2911701b598bf9d673cef00e790a1bc8207)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.23 to ^0.1.24 - * @looker/extension-utils bumped from ^0.1.13 to ^0.1.14 - * @looker/run-it bumped from ^0.9.36 to ^0.9.37 - * @looker/sdk bumped from ^22.10.1 to ^22.12.1 - * @looker/sdk-codegen bumped from ^21.7.0 to ^21.7.1 - * @looker/sdk-rtl bumped from ^21.3.4 to ^21.4.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.4.2 to ^21.4.3 - * @looker/sdk-node bumped from ^22.10.1 to ^22.12.1 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.23 to ^0.1.24 + - @looker/extension-utils bumped from ^0.1.13 to ^0.1.14 + - @looker/run-it bumped from ^0.9.36 to ^0.9.37 + - @looker/sdk bumped from ^22.10.1 to ^22.12.1 + - @looker/sdk-codegen bumped from ^21.7.0 to ^21.7.1 + - @looker/sdk-rtl bumped from ^21.3.4 to ^21.4.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.4.2 to ^21.4.3 + - @looker/sdk-node bumped from ^22.10.1 to ^22.12.1 ### [0.9.36](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.35...api-explorer-v0.9.36) (2022-07-29) - ### Features -* URL Sharable Search in Explorer ([#1103](https://www.github.com/looker-open-source/sdk-codegen/issues/1103)) ([0eb10ee](https://www.github.com/looker-open-source/sdk-codegen/commit/0eb10ee5490e363baa3fd90561e417bd902cd50a)) - +- URL Sharable Search in Explorer ([#1103](https://www.github.com/looker-open-source/sdk-codegen/issues/1103)) ([0eb10ee](https://www.github.com/looker-open-source/sdk-codegen/commit/0eb10ee5490e363baa3fd90561e417bd902cd50a)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.12 to ^0.1.13 - * @looker/code-editor bumped from ^0.1.22 to ^0.1.23 - * @looker/run-it bumped from ^0.9.35 to ^0.9.36 - * @looker/sdk bumped from ^22.10.0 to ^22.10.1 - * @looker/sdk-codegen bumped from ^21.6.0 to ^21.7.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.4.1 to ^21.4.2 - * @looker/sdk-node bumped from ^22.10.0 to ^22.10.1 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.12 to ^0.1.13 + - @looker/code-editor bumped from ^0.1.22 to ^0.1.23 + - @looker/run-it bumped from ^0.9.35 to ^0.9.36 + - @looker/sdk bumped from ^22.10.0 to ^22.10.1 + - @looker/sdk-codegen bumped from ^21.6.0 to ^21.7.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.4.1 to ^21.4.2 + - @looker/sdk-node bumped from ^22.10.0 to ^22.10.1 ### [0.9.35](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.34...api-explorer-v0.9.35) (2022-07-14) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.11 to ^0.1.12 - * @looker/run-it bumped from ^0.9.34 to ^0.9.35 - * @looker/sdk bumped from ^22.8.0 to ^22.10.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.4.0 to ^21.4.1 - * @looker/sdk-node bumped from ^22.8.0 to ^22.10.0 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.11 to ^0.1.12 + - @looker/run-it bumped from ^0.9.34 to ^0.9.35 + - @looker/sdk bumped from ^22.8.0 to ^22.10.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.4.0 to ^21.4.1 + - @looker/sdk-node bumped from ^22.8.0 to ^22.10.0 ### [0.9.34](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.33...api-explorer-v0.9.34) (2022-07-13) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.10 to ^0.1.11 - * @looker/run-it bumped from ^0.9.33 to ^0.9.34 - * @looker/sdk bumped from ^22.6.0 to ^22.8.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.3.4 to ^21.4.0 - * @looker/sdk-node bumped from ^22.6.0 to ^22.8.0 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.10 to ^0.1.11 + - @looker/run-it bumped from ^0.9.33 to ^0.9.34 + - @looker/sdk bumped from ^22.6.0 to ^22.8.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.3.4 to ^21.4.0 + - @looker/sdk-node bumped from ^22.6.0 to ^22.8.0 ### [0.9.33](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.32...api-explorer-v0.9.33) (2022-07-07) - ### Bug Fixes -* description sync issues in diff scene ([#1086](https://www.github.com/looker-open-source/sdk-codegen/issues/1086)) ([a37aa50](https://www.github.com/looker-open-source/sdk-codegen/commit/a37aa50064bb41ca5af2c9d19371e2ef7973e6d9)) -* remove generated files from examples index ([#1076](https://www.github.com/looker-open-source/sdk-codegen/issues/1076)) ([d75bce8](https://www.github.com/looker-open-source/sdk-codegen/commit/d75bce8dc25d41fd6bc5e2e513782eaa6009fd10)) -* Sidenav Methods Panel Open & Closing ([#1097](https://www.github.com/looker-open-source/sdk-codegen/issues/1097)) ([c49fae4](https://www.github.com/looker-open-source/sdk-codegen/commit/c49fae4ca6a7a30feb61f021ec878a8091eaa078)) -* Update prod entrypoint to match dev entrypoint (pull [#1059](https://www.github.com/looker-open-source/sdk-codegen/issues/1059)) ([0e4c3f4](https://www.github.com/looker-open-source/sdk-codegen/commit/0e4c3f47782d23f6c8e5509bd2942b0934e44ea2)) - +- description sync issues in diff scene ([#1086](https://www.github.com/looker-open-source/sdk-codegen/issues/1086)) ([a37aa50](https://www.github.com/looker-open-source/sdk-codegen/commit/a37aa50064bb41ca5af2c9d19371e2ef7973e6d9)) +- remove generated files from examples index ([#1076](https://www.github.com/looker-open-source/sdk-codegen/issues/1076)) ([d75bce8](https://www.github.com/looker-open-source/sdk-codegen/commit/d75bce8dc25d41fd6bc5e2e513782eaa6009fd10)) +- Sidenav Methods Panel Open & Closing ([#1097](https://www.github.com/looker-open-source/sdk-codegen/issues/1097)) ([c49fae4](https://www.github.com/looker-open-source/sdk-codegen/commit/c49fae4ca6a7a30feb61f021ec878a8091eaa078)) +- Update prod entrypoint to match dev entrypoint (pull [#1059](https://www.github.com/looker-open-source/sdk-codegen/issues/1059)) ([0e4c3f4](https://www.github.com/looker-open-source/sdk-codegen/commit/0e4c3f47782d23f6c8e5509bd2942b0934e44ea2)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.9 to ^0.1.10 - * @looker/code-editor bumped from ^0.1.21 to ^0.1.22 - * @looker/run-it bumped from ^0.9.32 to ^0.9.33 - * @looker/sdk bumped from ^22.4.2 to ^22.6.0 - * @looker/sdk-codegen bumped from ^21.5.2 to ^21.6.0 - * @looker/sdk-rtl bumped from ^21.3.3 to ^21.3.4 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.3.3 to ^21.3.4 - * @looker/sdk-node bumped from ^22.4.2 to ^22.6.0 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.9 to ^0.1.10 + - @looker/code-editor bumped from ^0.1.21 to ^0.1.22 + - @looker/run-it bumped from ^0.9.32 to ^0.9.33 + - @looker/sdk bumped from ^22.4.2 to ^22.6.0 + - @looker/sdk-codegen bumped from ^21.5.2 to ^21.6.0 + - @looker/sdk-rtl bumped from ^21.3.3 to ^21.3.4 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.3.3 to ^21.3.4 + - @looker/sdk-node bumped from ^22.4.2 to ^22.6.0 ### [0.9.32](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.31...api-explorer-v0.9.32) (2022-04-07) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.8 to ^0.1.9 - * @looker/code-editor bumped from ^0.1.20 to ^0.1.21 - * @looker/run-it bumped from ^0.9.31 to ^0.9.32 - * @looker/sdk bumped from ^22.4.1 to ^22.4.2 - * @looker/sdk-codegen bumped from ^21.5.1 to ^21.5.2 - * @looker/sdk-rtl bumped from ^21.3.2 to ^21.3.3 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.3.2 to ^21.3.3 - * @looker/sdk-node bumped from ^22.4.1 to ^22.4.2 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.8 to ^0.1.9 + - @looker/code-editor bumped from ^0.1.20 to ^0.1.21 + - @looker/run-it bumped from ^0.9.31 to ^0.9.32 + - @looker/sdk bumped from ^22.4.1 to ^22.4.2 + - @looker/sdk-codegen bumped from ^21.5.1 to ^21.5.2 + - @looker/sdk-rtl bumped from ^21.3.2 to ^21.3.3 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.3.2 to ^21.3.3 + - @looker/sdk-node bumped from ^22.4.1 to ^22.4.2 ### [0.9.31](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.30...api-explorer-v0.9.31) (2022-04-07) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.7 to ^0.1.8 - * @looker/code-editor bumped from ^0.1.19 to ^0.1.20 - * @looker/run-it bumped from ^0.9.30 to ^0.9.31 - * @looker/sdk bumped from ^22.4.0 to ^22.4.1 - * @looker/sdk-codegen bumped from ^21.5.0 to ^21.5.1 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.3.1 to ^21.3.2 - * @looker/sdk-node bumped from ^22.4.0 to ^22.4.1 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.7 to ^0.1.8 + - @looker/code-editor bumped from ^0.1.19 to ^0.1.20 + - @looker/run-it bumped from ^0.9.30 to ^0.9.31 + - @looker/sdk bumped from ^22.4.0 to ^22.4.1 + - @looker/sdk-codegen bumped from ^21.5.0 to ^21.5.1 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.3.1 to ^21.3.2 + - @looker/sdk-node bumped from ^22.4.0 to ^22.4.1 ### [0.9.30](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.29...api-explorer-v0.9.30) (2022-03-24) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.6 to ^0.1.7 - * @looker/run-it bumped from ^0.9.29 to ^0.9.30 - * @looker/sdk bumped from ^22.2.0 to ^22.4.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.3.0 to ^21.3.1 - * @looker/sdk-node bumped from ^22.2.0 to ^22.4.0 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.6 to ^0.1.7 + - @looker/run-it bumped from ^0.9.29 to ^0.9.30 + - @looker/sdk bumped from ^22.2.0 to ^22.4.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.3.0 to ^21.3.1 + - @looker/sdk-node bumped from ^22.2.0 to ^22.4.0 ### [0.9.29](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.28...api-explorer-v0.9.29) (2022-03-04) - ### Features -* generate code deprecation tags ([#1006](https://www.github.com/looker-open-source/sdk-codegen/issues/1006)) ([afd4b66](https://www.github.com/looker-open-source/sdk-codegen/commit/afd4b66ffbd11cdacd19fe1353c9e5bf381fe932)) - +- generate code deprecation tags ([#1006](https://www.github.com/looker-open-source/sdk-codegen/issues/1006)) ([afd4b66](https://www.github.com/looker-open-source/sdk-codegen/commit/afd4b66ffbd11cdacd19fe1353c9e5bf381fe932)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.5 to ^0.1.6 - * @looker/code-editor bumped from ^0.1.18 to ^0.1.19 - * @looker/run-it bumped from ^0.9.28 to ^0.9.29 - * @looker/sdk-codegen bumped from ^21.4.0 to ^21.5.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.2.3 to ^21.3.0 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.5 to ^0.1.6 + - @looker/code-editor bumped from ^0.1.18 to ^0.1.19 + - @looker/run-it bumped from ^0.9.28 to ^0.9.29 + - @looker/sdk-codegen bumped from ^21.4.0 to ^21.5.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.2.3 to ^21.3.0 ### [0.9.28](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.27...api-explorer-v0.9.28) (2022-02-18) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.4 to ^0.1.5 - * @looker/run-it bumped from ^0.9.27 to ^0.9.28 - * @looker/sdk bumped from ^22.0.0 to ^22.2.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.2.2 to ^21.2.3 - * @looker/sdk-node bumped from ^22.0.0 to ^22.2.0 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.4 to ^0.1.5 + - @looker/run-it bumped from ^0.9.27 to ^0.9.28 + - @looker/sdk bumped from ^22.0.0 to ^22.2.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.2.2 to ^21.2.3 + - @looker/sdk-node bumped from ^22.0.0 to ^22.2.0 ### [0.9.27](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.26...api-explorer-v0.9.27) (2022-02-14) - ### Features -* Added 4.0 GA stable banner to api explorer ([#956](https://www.github.com/looker-open-source/sdk-codegen/issues/956)) ([c59b5d4](https://www.github.com/looker-open-source/sdk-codegen/commit/c59b5d4d14189329fd9d95b31d3801dd27bd1c08)) - +- Added 4.0 GA stable banner to api explorer ([#956](https://www.github.com/looker-open-source/sdk-codegen/issues/956)) ([c59b5d4](https://www.github.com/looker-open-source/sdk-codegen/commit/c59b5d4d14189329fd9d95b31d3801dd27bd1c08)) ### Bug Fixes -* Fix broken apix test because of 22.0 build ([#968](https://www.github.com/looker-open-source/sdk-codegen/issues/968)) ([45a9a69](https://www.github.com/looker-open-source/sdk-codegen/commit/45a9a6915be0fbcfdbd3ee6152a59d9d8728b3ca)) -* runtime error for API Explorer ([#973](https://www.github.com/looker-open-source/sdk-codegen/issues/973)) ([4823fcb](https://www.github.com/looker-open-source/sdk-codegen/commit/4823fcb56d38bde5ae2f80d02a946b5bd3eeb834)) - +- Fix broken apix test because of 22.0 build ([#968](https://www.github.com/looker-open-source/sdk-codegen/issues/968)) ([45a9a69](https://www.github.com/looker-open-source/sdk-codegen/commit/45a9a6915be0fbcfdbd3ee6152a59d9d8728b3ca)) +- runtime error for API Explorer ([#973](https://www.github.com/looker-open-source/sdk-codegen/issues/973)) ([4823fcb](https://www.github.com/looker-open-source/sdk-codegen/commit/4823fcb56d38bde5ae2f80d02a946b5bd3eeb834)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.3 to ^0.1.4 - * @looker/code-editor bumped from ^0.1.17 to ^0.1.18 - * @looker/run-it bumped from ^0.9.26 to ^0.9.27 - * @looker/sdk-codegen bumped from ^21.3.2 to ^21.4.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.2.1 to ^21.2.2 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.3 to ^0.1.4 + - @looker/code-editor bumped from ^0.1.17 to ^0.1.18 + - @looker/run-it bumped from ^0.9.26 to ^0.9.27 + - @looker/sdk-codegen bumped from ^21.3.2 to ^21.4.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.2.1 to ^21.2.2 ### [0.9.26](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.23...api-explorer-v0.9.26) (2022-01-27) - ### Features -* OAuthConfigProvider ([209f399](https://www.github.com/looker-open-source/sdk-codegen/commit/209f399a089beb28405a178d3dc8f769478ae97b)) - +- OAuthConfigProvider ([209f399](https://www.github.com/looker-open-source/sdk-codegen/commit/209f399a089beb28405a178d3dc8f769478ae97b)) ### Bug Fixes -* enum naming and registration ([#918](https://www.github.com/looker-open-source/sdk-codegen/issues/918)) ([9d4a6cb](https://www.github.com/looker-open-source/sdk-codegen/commit/9d4a6cbfac5defad3a35389e2d46947d2135d349)) - +- enum naming and registration ([#918](https://www.github.com/looker-open-source/sdk-codegen/issues/918)) ([9d4a6cb](https://www.github.com/looker-open-source/sdk-codegen/commit/9d4a6cbfac5defad3a35389e2d46947d2135d349)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/sdk bumped from ^21.20.0 to ^21.20.1 - * devDependencies - * @looker/sdk-node bumped from ^21.20.0 to ^21.20.1 +- The following workspace dependencies were updated + - dependencies + - @looker/sdk bumped from ^21.20.0 to ^21.20.1 + - devDependencies + - @looker/sdk-node bumped from ^21.20.0 to ^21.20.1 ### [0.9.26](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.25...api-explorer-v0.9.26) (2021-12-20) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.2 to ^0.1.3 - * @looker/code-editor bumped from ^0.1.16 to ^0.1.17 - * @looker/run-it bumped from ^0.9.25 to ^0.9.26 - * @looker/sdk-codegen bumped from ^21.3.0 to ^21.3.1 - * @looker/sdk-rtl bumped from ^21.3.0 to ^21.3.1 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.2.0 to ^21.2.1 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.2 to ^0.1.3 + - @looker/code-editor bumped from ^0.1.16 to ^0.1.17 + - @looker/run-it bumped from ^0.9.25 to ^0.9.26 + - @looker/sdk-codegen bumped from ^21.3.0 to ^21.3.1 + - @looker/sdk-rtl bumped from ^21.3.0 to ^21.3.1 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.2.0 to ^21.2.1 ### [0.9.25](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.24...api-explorer-v0.9.25) (2021-12-16) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.1 to ^0.1.2 - * @looker/code-editor bumped from ^0.1.15 to ^0.1.16 - * @looker/run-it bumped from ^0.9.24 to ^0.9.25 - * @looker/sdk-codegen bumped from ^21.2.1 to ^21.3.0 - * @looker/sdk-rtl bumped from ^21.2.0 to ^21.3.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.1.4 to ^21.2.0 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.1 to ^0.1.2 + - @looker/code-editor bumped from ^0.1.15 to ^0.1.16 + - @looker/run-it bumped from ^0.9.24 to ^0.9.25 + - @looker/sdk-codegen bumped from ^21.2.1 to ^21.3.0 + - @looker/sdk-rtl bumped from ^21.2.0 to ^21.3.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.1.4 to ^21.2.0 ### [0.9.24](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.23...api-explorer-v0.9.24) (2021-12-06) - ### Features -* OAuthConfigProvider ([209f399](https://www.github.com/looker-open-source/sdk-codegen/commit/209f399a089beb28405a178d3dc8f769478ae97b)) - +- OAuthConfigProvider ([209f399](https://www.github.com/looker-open-source/sdk-codegen/commit/209f399a089beb28405a178d3dc8f769478ae97b)) ### Bug Fixes -* enum naming and registration ([#918](https://www.github.com/looker-open-source/sdk-codegen/issues/918)) ([9d4a6cb](https://www.github.com/looker-open-source/sdk-codegen/commit/9d4a6cbfac5defad3a35389e2d46947d2135d349)) - +- enum naming and registration ([#918](https://www.github.com/looker-open-source/sdk-codegen/issues/918)) ([9d4a6cb](https://www.github.com/looker-open-source/sdk-codegen/commit/9d4a6cbfac5defad3a35389e2d46947d2135d349)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/extension-utils bumped from ^0.1.0 to ^0.1.1 - * @looker/code-editor bumped from ^0.1.14 to ^0.1.15 - * @looker/run-it bumped from ^0.9.23 to ^0.9.24 - * @looker/sdk-codegen bumped from ^21.2.0 to ^21.2.1 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.1.3 to ^21.1.4 +- The following workspace dependencies were updated + - dependencies + - @looker/extension-utils bumped from ^0.1.0 to ^0.1.1 + - @looker/code-editor bumped from ^0.1.14 to ^0.1.15 + - @looker/run-it bumped from ^0.9.23 to ^0.9.24 + - @looker/sdk-codegen bumped from ^21.2.0 to ^21.2.1 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.1.3 to ^21.1.4 ### [0.9.23](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.22...api-explorer-v0.9.23) (2021-11-10) - ### Features -* create @looker/extension-utils ([#886](https://www.github.com/looker-open-source/sdk-codegen/issues/886)) ([9d1720d](https://www.github.com/looker-open-source/sdk-codegen/commit/9d1720d9a4cec00c45195dd9c716d9a2a929264f)) - +- create @looker/extension-utils ([#886](https://www.github.com/looker-open-source/sdk-codegen/issues/886)) ([9d1720d](https://www.github.com/looker-open-source/sdk-codegen/commit/9d1720d9a4cec00c45195dd9c716d9a2a929264f)) ### Bug Fixes -* api explorer initialization ([#885](https://www.github.com/looker-open-source/sdk-codegen/issues/885)) ([b08b08e](https://www.github.com/looker-open-source/sdk-codegen/commit/b08b08e9767725e19a573bac0385320bb903490d)) - +- api explorer initialization ([#885](https://www.github.com/looker-open-source/sdk-codegen/issues/885)) ([b08b08e](https://www.github.com/looker-open-source/sdk-codegen/commit/b08b08e9767725e19a573bac0385320bb903490d)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.13 to ^0.1.14 - * @looker/run-it bumped from ^0.9.22 to ^0.9.23 - * @looker/sdk bumped from ^21.18.1 to ^21.20.0 - * @looker/sdk-codegen bumped from ^21.1.1 to ^21.2.0 - * @looker/sdk-rtl bumped from ^21.1.1 to ^21.2.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.1.2 to ^21.1.3 - * @looker/sdk-node bumped from ^21.18.1 to ^21.20.0 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.13 to ^0.1.14 + - @looker/run-it bumped from ^0.9.22 to ^0.9.23 + - @looker/sdk bumped from ^21.18.1 to ^21.20.0 + - @looker/sdk-codegen bumped from ^21.1.1 to ^21.2.0 + - @looker/sdk-rtl bumped from ^21.1.1 to ^21.2.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.1.2 to ^21.1.3 + - @looker/sdk-node bumped from ^21.18.1 to ^21.20.0 ### [0.9.22](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.21...api-explorer-v0.9.22) (2021-10-27) - ### Bug Fixes -* another TS SDK error handling tweak ([#873](https://www.github.com/looker-open-source/sdk-codegen/issues/873)) ([1c04952](https://www.github.com/looker-open-source/sdk-codegen/commit/1c049527e22926fa7fe0ae011ab4595520005e2f)) - +- another TS SDK error handling tweak ([#873](https://www.github.com/looker-open-source/sdk-codegen/issues/873)) ([1c04952](https://www.github.com/looker-open-source/sdk-codegen/commit/1c049527e22926fa7fe0ae011ab4595520005e2f)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.12 to ^0.1.13 - * @looker/run-it bumped from ^0.9.21 to ^0.9.22 - * @looker/sdk bumped from ^21.18.0 to ^21.18.1 - * @looker/sdk-codegen bumped from ^21.1.0 to ^21.1.1 - * @looker/sdk-rtl bumped from ^21.1.0 to ^21.1.1 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.1.1 to ^21.1.2 - * @looker/sdk-node bumped from ^21.18.0 to ^21.18.1 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.12 to ^0.1.13 + - @looker/run-it bumped from ^0.9.21 to ^0.9.22 + - @looker/sdk bumped from ^21.18.0 to ^21.18.1 + - @looker/sdk-codegen bumped from ^21.1.0 to ^21.1.1 + - @looker/sdk-rtl bumped from ^21.1.0 to ^21.1.1 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.1.1 to ^21.1.2 + - @looker/sdk-node bumped from ^21.18.0 to ^21.18.1 ### [0.9.21](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.20...api-explorer-v0.9.21) (2021-10-24) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.11 to ^0.1.12 - * @looker/run-it bumped from ^0.9.20 to ^0.9.21 - * @looker/sdk bumped from ^21.16.0 to ^21.18.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.1.0 to ^21.1.1 - * @looker/sdk-node bumped from ^21.16.0 to ^21.18.0 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.11 to ^0.1.12 + - @looker/run-it bumped from ^0.9.20 to ^0.9.21 + - @looker/sdk bumped from ^21.16.0 to ^21.18.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.1.0 to ^21.1.1 + - @looker/sdk-node bumped from ^21.16.0 to ^21.18.0 ### [0.9.20](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.19...api-explorer-v0.9.20) (2021-10-19) - ### Features -* closest path match for API Explorer ([#811](https://www.github.com/looker-open-source/sdk-codegen/issues/811)) ([45fd26f](https://www.github.com/looker-open-source/sdk-codegen/commit/45fd26fb0f325fa90edfec72f835ed3a79b9afeb)) -* headless nav toggle ([#860](https://www.github.com/looker-open-source/sdk-codegen/issues/860)) ([8e66d1b](https://www.github.com/looker-open-source/sdk-codegen/commit/8e66d1bed84cdcf91b92dccdb5cdbb87be5c3f4a)) -* lots of RunIt form cleanup ([#814](https://www.github.com/looker-open-source/sdk-codegen/issues/814)) ([e92eae8](https://www.github.com/looker-open-source/sdk-codegen/commit/e92eae8fc127a0aa99545ca9c577152c08d59000)) -* makeTheCall for Kotlin and type tagging ([#833](https://www.github.com/looker-open-source/sdk-codegen/issues/833)) ([2ca950e](https://www.github.com/looker-open-source/sdk-codegen/commit/2ca950e16c9c172d3e67de58261df16e424efaa3)) -* Use agenda data for the Hackathon home page ([#842](https://www.github.com/looker-open-source/sdk-codegen/issues/842)) ([0da2523](https://www.github.com/looker-open-source/sdk-codegen/commit/0da25239c3f108cb684309818c33c91c2a7c3278)) - +- closest path match for API Explorer ([#811](https://www.github.com/looker-open-source/sdk-codegen/issues/811)) ([45fd26f](https://www.github.com/looker-open-source/sdk-codegen/commit/45fd26fb0f325fa90edfec72f835ed3a79b9afeb)) +- headless nav toggle ([#860](https://www.github.com/looker-open-source/sdk-codegen/issues/860)) ([8e66d1b](https://www.github.com/looker-open-source/sdk-codegen/commit/8e66d1bed84cdcf91b92dccdb5cdbb87be5c3f4a)) +- lots of RunIt form cleanup ([#814](https://www.github.com/looker-open-source/sdk-codegen/issues/814)) ([e92eae8](https://www.github.com/looker-open-source/sdk-codegen/commit/e92eae8fc127a0aa99545ca9c577152c08d59000)) +- makeTheCall for Kotlin and type tagging ([#833](https://www.github.com/looker-open-source/sdk-codegen/issues/833)) ([2ca950e](https://www.github.com/looker-open-source/sdk-codegen/commit/2ca950e16c9c172d3e67de58261df16e424efaa3)) +- Use agenda data for the Hackathon home page ([#842](https://www.github.com/looker-open-source/sdk-codegen/issues/842)) ([0da2523](https://www.github.com/looker-open-source/sdk-codegen/commit/0da25239c3f108cb684309818c33c91c2a7c3278)) ### Bug Fixes -* Extension Api Explorer markdown link clicks ([#830](https://www.github.com/looker-open-source/sdk-codegen/issues/830)) ([dd8a3f0](https://www.github.com/looker-open-source/sdk-codegen/commit/dd8a3f03b8ea03858271bf55307c7d359631455a)) -* request content initialization and filtering for RunIt requests ([#852](https://www.github.com/looker-open-source/sdk-codegen/issues/852)) ([474ee93](https://www.github.com/looker-open-source/sdk-codegen/commit/474ee9365dafe6549826a9f627ac0a79dc0e9a56)) -* Sidenav selection ([#831](https://www.github.com/looker-open-source/sdk-codegen/issues/831)) ([52e3ef3](https://www.github.com/looker-open-source/sdk-codegen/commit/52e3ef31a6157a6a544bf712a73d118d22913583)) -* type issues, tests and bin/deploy ([#844](https://www.github.com/looker-open-source/sdk-codegen/issues/844)) ([9e4a141](https://www.github.com/looker-open-source/sdk-codegen/commit/9e4a1413d4b6267805c0514dac1def93f5a56cb6)) -* typo with error boundary ([#851](https://www.github.com/looker-open-source/sdk-codegen/issues/851)) ([bb08f25](https://www.github.com/looker-open-source/sdk-codegen/commit/bb08f258354bb6439f08d29f340b1f396841ab12)) - +- Extension Api Explorer markdown link clicks ([#830](https://www.github.com/looker-open-source/sdk-codegen/issues/830)) ([dd8a3f0](https://www.github.com/looker-open-source/sdk-codegen/commit/dd8a3f03b8ea03858271bf55307c7d359631455a)) +- request content initialization and filtering for RunIt requests ([#852](https://www.github.com/looker-open-source/sdk-codegen/issues/852)) ([474ee93](https://www.github.com/looker-open-source/sdk-codegen/commit/474ee9365dafe6549826a9f627ac0a79dc0e9a56)) +- Sidenav selection ([#831](https://www.github.com/looker-open-source/sdk-codegen/issues/831)) ([52e3ef3](https://www.github.com/looker-open-source/sdk-codegen/commit/52e3ef31a6157a6a544bf712a73d118d22913583)) +- type issues, tests and bin/deploy ([#844](https://www.github.com/looker-open-source/sdk-codegen/issues/844)) ([9e4a141](https://www.github.com/looker-open-source/sdk-codegen/commit/9e4a1413d4b6267805c0514dac1def93f5a56cb6)) +- typo with error boundary ([#851](https://www.github.com/looker-open-source/sdk-codegen/issues/851)) ([bb08f25](https://www.github.com/looker-open-source/sdk-codegen/commit/bb08f258354bb6439f08d29f340b1f396841ab12)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.10 to ^0.1.11 - * @looker/run-it bumped from ^0.9.19 to ^0.9.20 - * @looker/sdk bumped from ^21.14.0 to ^21.16.0 - * @looker/sdk-codegen bumped from ^21.0.25 to ^21.1.0 - * @looker/sdk-rtl bumped from ^21.0.20 to ^21.1.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.27 to ^21.1.0 - * @looker/sdk-node bumped from ^21.14.0 to ^21.16.0 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.10 to ^0.1.11 + - @looker/run-it bumped from ^0.9.19 to ^0.9.20 + - @looker/sdk bumped from ^21.14.0 to ^21.16.0 + - @looker/sdk-codegen bumped from ^21.0.25 to ^21.1.0 + - @looker/sdk-rtl bumped from ^21.0.20 to ^21.1.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.27 to ^21.1.0 + - @looker/sdk-node bumped from ^21.14.0 to ^21.16.0 ### [0.9.19](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.18...api-explorer-v0.9.19) (2021-09-01) - ### Features -* http response explorer for RunIt ([#800](https://www.github.com/looker-open-source/sdk-codegen/issues/800)) ([3f273ea](https://www.github.com/looker-open-source/sdk-codegen/commit/3f273ea7f849dafece8f4f5f60558021ecd41705)) -* new configuration UI for API Explorer ([#803](https://www.github.com/looker-open-source/sdk-codegen/issues/803)) ([e6c67d1](https://www.github.com/looker-open-source/sdk-codegen/commit/e6c67d1211b412d4ce83127c9f7a8f091e3cf27f)) - +- http response explorer for RunIt ([#800](https://www.github.com/looker-open-source/sdk-codegen/issues/800)) ([3f273ea](https://www.github.com/looker-open-source/sdk-codegen/commit/3f273ea7f849dafece8f4f5f60558021ecd41705)) +- new configuration UI for API Explorer ([#803](https://www.github.com/looker-open-source/sdk-codegen/issues/803)) ([e6c67d1](https://www.github.com/looker-open-source/sdk-codegen/commit/e6c67d1211b412d4ce83127c9f7a8f091e3cf27f)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.9 to ^0.1.10 - * @looker/run-it bumped from ^0.9.18 to ^0.9.19 - * @looker/sdk bumped from ^21.12.0 to ^21.14.0 - * @looker/sdk-codegen bumped from ^21.0.24 to ^21.0.25 - * @looker/sdk-rtl bumped from ^21.0.19 to ^21.0.20 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.26 to ^21.0.27 - * @looker/sdk-node bumped from ^21.12.0 to ^21.14.0 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.9 to ^0.1.10 + - @looker/run-it bumped from ^0.9.18 to ^0.9.19 + - @looker/sdk bumped from ^21.12.0 to ^21.14.0 + - @looker/sdk-codegen bumped from ^21.0.24 to ^21.0.25 + - @looker/sdk-rtl bumped from ^21.0.19 to ^21.0.20 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.26 to ^21.0.27 + - @looker/sdk-node bumped from ^21.12.0 to ^21.14.0 ### [0.9.18](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.17...api-explorer-v0.9.18) (2021-08-11) - ### Features -* fetch API specifications for stand-alone API Explorer ([#789](https://www.github.com/looker-open-source/sdk-codegen/issues/789)) ([f7be1fb](https://www.github.com/looker-open-source/sdk-codegen/commit/f7be1fb589570137c5ab39304910c57f721de8fb)) - +- fetch API specifications for stand-alone API Explorer ([#789](https://www.github.com/looker-open-source/sdk-codegen/issues/789)) ([f7be1fb](https://www.github.com/looker-open-source/sdk-codegen/commit/f7be1fb589570137c5ab39304910c57f721de8fb)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.8 to ^0.1.9 - * @looker/run-it bumped from ^0.9.17 to ^0.9.18 - * @looker/sdk-codegen bumped from ^21.0.23 to ^21.0.24 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.25 to ^21.0.26 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.8 to ^0.1.9 + - @looker/run-it bumped from ^0.9.17 to ^0.9.18 + - @looker/sdk-codegen bumped from ^21.0.23 to ^21.0.24 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.25 to ^21.0.26 ### [0.9.17](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.16...api-explorer-v0.9.17) (2021-08-06) - ### Bug Fixes -* documentation refs and notes for Typescript SDK and more ([#783](https://www.github.com/looker-open-source/sdk-codegen/issues/783)) ([b2487ea](https://www.github.com/looker-open-source/sdk-codegen/commit/b2487ea4a113ce17a080ccab9b4c4139813e8810)) - +- documentation refs and notes for Typescript SDK and more ([#783](https://www.github.com/looker-open-source/sdk-codegen/issues/783)) ([b2487ea](https://www.github.com/looker-open-source/sdk-codegen/commit/b2487ea4a113ce17a080ccab9b4c4139813e8810)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/run-it bumped from ^0.9.16 to ^0.9.17 - * @looker/sdk bumped from ^21.10.2 to ^21.12.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.24 to ^21.0.25 - * @looker/sdk-node bumped from ^21.10.2 to ^21.12.0 +- The following workspace dependencies were updated + - dependencies + - @looker/run-it bumped from ^0.9.16 to ^0.9.17 + - @looker/sdk bumped from ^21.10.2 to ^21.12.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.24 to ^21.0.25 + - @looker/sdk-node bumped from ^21.10.2 to ^21.12.0 ### [0.9.16](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.15...api-explorer-v0.9.16) (2021-07-30) - ### Bug Fixes -* dev portal apix tweaks ([#760](https://www.github.com/looker-open-source/sdk-codegen/issues/760)) ([6e937f4](https://www.github.com/looker-open-source/sdk-codegen/commit/6e937f4778457021dd739e849e209ad4de7bb450)) -* uses consistent heading text ([#761](https://www.github.com/looker-open-source/sdk-codegen/issues/761)) ([2e308ec](https://www.github.com/looker-open-source/sdk-codegen/commit/2e308ec1c6b4f181be12dda806955f8913336234)) - +- dev portal apix tweaks ([#760](https://www.github.com/looker-open-source/sdk-codegen/issues/760)) ([6e937f4](https://www.github.com/looker-open-source/sdk-codegen/commit/6e937f4778457021dd739e849e209ad4de7bb450)) +- uses consistent heading text ([#761](https://www.github.com/looker-open-source/sdk-codegen/issues/761)) ([2e308ec](https://www.github.com/looker-open-source/sdk-codegen/commit/2e308ec1c6b4f181be12dda806955f8913336234)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.7 to ^0.1.8 - * @looker/run-it bumped from ^0.9.15 to ^0.9.16 - * @looker/sdk bumped from ^21.10.1 to ^21.10.2 - * @looker/sdk-codegen bumped from ^21.0.22 to ^21.0.23 - * @looker/sdk-rtl bumped from ^21.0.18 to ^21.0.19 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.23 to ^21.0.24 - * @looker/sdk-node bumped from ^21.10.1 to ^21.10.2 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.7 to ^0.1.8 + - @looker/run-it bumped from ^0.9.15 to ^0.9.16 + - @looker/sdk bumped from ^21.10.1 to ^21.10.2 + - @looker/sdk-codegen bumped from ^21.0.22 to ^21.0.23 + - @looker/sdk-rtl bumped from ^21.0.18 to ^21.0.19 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.23 to ^21.0.24 + - @looker/sdk-node bumped from ^21.10.1 to ^21.10.2 ### [0.9.15](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.14...api-explorer-v0.9.15) (2021-07-15) - ### Features -* API explorer error boundary ([#753](https://www.github.com/looker-open-source/sdk-codegen/issues/753)) ([3321bf1](https://www.github.com/looker-open-source/sdk-codegen/commit/3321bf1c7abf9f5165799970da5c2be40d94463a)) -* apix sidebar toggle for dev portal ([#751](https://www.github.com/looker-open-source/sdk-codegen/issues/751)) ([ac83a57](https://www.github.com/looker-open-source/sdk-codegen/commit/ac83a5708feab996a528520103b3f3dd9314861e)) -* initial api explorer dev portal support ([#748](https://www.github.com/looker-open-source/sdk-codegen/issues/748)) ([a4a7056](https://www.github.com/looker-open-source/sdk-codegen/commit/a4a70567bc114466d7650b9fba4545a16a2f0e37)) -* simplify apix dev portal navigation toggle ([#752](https://www.github.com/looker-open-source/sdk-codegen/issues/752)) ([dcbf642](https://www.github.com/looker-open-source/sdk-codegen/commit/dcbf64264387b611bcf939d7430a2cfb4b4665bd)) - +- API explorer error boundary ([#753](https://www.github.com/looker-open-source/sdk-codegen/issues/753)) ([3321bf1](https://www.github.com/looker-open-source/sdk-codegen/commit/3321bf1c7abf9f5165799970da5c2be40d94463a)) +- apix sidebar toggle for dev portal ([#751](https://www.github.com/looker-open-source/sdk-codegen/issues/751)) ([ac83a57](https://www.github.com/looker-open-source/sdk-codegen/commit/ac83a5708feab996a528520103b3f3dd9314861e)) +- initial api explorer dev portal support ([#748](https://www.github.com/looker-open-source/sdk-codegen/issues/748)) ([a4a7056](https://www.github.com/looker-open-source/sdk-codegen/commit/a4a70567bc114466d7650b9fba4545a16a2f0e37)) +- simplify apix dev portal navigation toggle ([#752](https://www.github.com/looker-open-source/sdk-codegen/issues/752)) ([dcbf642](https://www.github.com/looker-open-source/sdk-codegen/commit/dcbf64264387b611bcf939d7430a2cfb4b4665bd)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/run-it bumped from ^0.9.14 to ^0.9.15 +- The following workspace dependencies were updated + - dependencies + - @looker/run-it bumped from ^0.9.14 to ^0.9.15 ### [0.9.14](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.13...api-explorer-v0.9.14) (2021-07-09) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.6 to ^0.1.7 - * @looker/run-it bumped from ^0.9.13 to ^0.9.14 - * @looker/sdk bumped from ^21.10.0 to ^21.10.1 - * @looker/sdk-codegen bumped from ^21.0.21 to ^21.0.22 - * @looker/sdk-rtl bumped from ^21.0.17 to ^21.0.18 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.22 to ^21.0.23 - * @looker/sdk-node bumped from ^21.10.0 to ^21.10.1 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.6 to ^0.1.7 + - @looker/run-it bumped from ^0.9.13 to ^0.9.14 + - @looker/sdk bumped from ^21.10.0 to ^21.10.1 + - @looker/sdk-codegen bumped from ^21.0.21 to ^21.0.22 + - @looker/sdk-rtl bumped from ^21.0.17 to ^21.0.18 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.22 to ^21.0.23 + - @looker/sdk-node bumped from ^21.10.0 to ^21.10.1 ### [0.9.13](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.12...api-explorer-v0.9.13) (2021-07-08) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.5 to ^0.1.6 - * @looker/run-it bumped from ^0.9.12 to ^0.9.13 - * @looker/sdk bumped from ^21.8.3 to ^21.10.0 - * @looker/sdk-codegen bumped from ^21.0.20 to ^21.0.21 - * @looker/sdk-rtl bumped from ^21.0.16 to ^21.0.17 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.21 to ^21.0.22 - * @looker/sdk-node bumped from ^21.8.2 to ^21.10.0 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.5 to ^0.1.6 + - @looker/run-it bumped from ^0.9.12 to ^0.9.13 + - @looker/sdk bumped from ^21.8.3 to ^21.10.0 + - @looker/sdk-codegen bumped from ^21.0.20 to ^21.0.21 + - @looker/sdk-rtl bumped from ^21.0.16 to ^21.0.17 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.21 to ^21.0.22 + - @looker/sdk-node bumped from ^21.8.2 to ^21.10.0 ### [0.9.12](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.11...api-explorer-v0.9.12) (2021-07-02) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.4 to ^0.1.5 - * @looker/run-it bumped from ^0.9.11 to ^0.9.12 - * @looker/sdk bumped from ^21.8.2 to ^21.8.3 - * @looker/sdk-codegen bumped from ^21.0.19 to ^21.0.20 - * @looker/sdk-rtl bumped from ^21.0.15 to ^21.0.16 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.20 to ^21.0.21 - * @looker/sdk-node bumped from ^21.8.1 to ^21.8.2 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.4 to ^0.1.5 + - @looker/run-it bumped from ^0.9.11 to ^0.9.12 + - @looker/sdk bumped from ^21.8.2 to ^21.8.3 + - @looker/sdk-codegen bumped from ^21.0.19 to ^21.0.20 + - @looker/sdk-rtl bumped from ^21.0.15 to ^21.0.16 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.20 to ^21.0.21 + - @looker/sdk-node bumped from ^21.8.1 to ^21.8.2 ### [0.9.11](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.10...api-explorer-v0.9.11) (2021-07-01) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.3 to ^0.1.4 - * @looker/run-it bumped from ^0.9.10 to ^0.9.11 - * @looker/sdk bumped from ^21.8.1 to ^21.8.2 - * @looker/sdk-codegen bumped from ^21.0.18 to ^21.0.19 - * @looker/sdk-rtl bumped from ^21.0.14 to ^21.0.15 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.19 to ^21.0.20 - * @looker/sdk-node bumped from ^21.8.0 to ^21.8.1 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.3 to ^0.1.4 + - @looker/run-it bumped from ^0.9.10 to ^0.9.11 + - @looker/sdk bumped from ^21.8.1 to ^21.8.2 + - @looker/sdk-codegen bumped from ^21.0.18 to ^21.0.19 + - @looker/sdk-rtl bumped from ^21.0.14 to ^21.0.15 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.19 to ^21.0.20 + - @looker/sdk-node bumped from ^21.8.0 to ^21.8.1 ### [0.9.10](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.9...api-explorer-v0.9.10) (2021-06-30) - ### Features -* refactor Markdown out to @looker/code-editor ([#699](https://www.github.com/looker-open-source/sdk-codegen/issues/699)) ([f3c16e2](https://www.github.com/looker-open-source/sdk-codegen/commit/f3c16e2a162266545ba3086a0a1dddd0cb79195f)) - +- refactor Markdown out to @looker/code-editor ([#699](https://www.github.com/looker-open-source/sdk-codegen/issues/699)) ([f3c16e2](https://www.github.com/looker-open-source/sdk-codegen/commit/f3c16e2a162266545ba3086a0a1dddd0cb79195f)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.2 to ^0.1.3 - * @looker/run-it bumped from ^0.9.9 to ^0.9.10 - * @looker/sdk bumped from ^21.8.0 to ^21.8.1 - * @looker/sdk-codegen bumped from ^21.0.17 to ^21.0.18 - * @looker/sdk-rtl bumped from ^21.0.13 to ^21.0.14 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.18 to ^21.0.19 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.2 to ^0.1.3 + - @looker/run-it bumped from ^0.9.9 to ^0.9.10 + - @looker/sdk bumped from ^21.8.0 to ^21.8.1 + - @looker/sdk-codegen bumped from ^21.0.17 to ^21.0.18 + - @looker/sdk-rtl bumped from ^21.0.13 to ^21.0.14 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.18 to ^21.0.19 ### [0.9.9](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.8...api-explorer-v0.9.9) (2021-06-17) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/run-it bumped from ^0.9.8 to ^0.9.9 - * @looker/sdk bumped from ^21.6.1 to ^21.8.0 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.17 to ^21.0.18 - * @looker/sdk-node bumped from ^21.6.1 to ^21.8.0 +- The following workspace dependencies were updated + - dependencies + - @looker/run-it bumped from ^0.9.8 to ^0.9.9 + - @looker/sdk bumped from ^21.6.1 to ^21.8.0 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.17 to ^21.0.18 + - @looker/sdk-node bumped from ^21.6.1 to ^21.8.0 ### [0.9.8](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.7...api-explorer-v0.9.8) (2021-06-16) - ### Features -* reduce size of apix bundle ([#676](https://www.github.com/looker-open-source/sdk-codegen/issues/676)) ([0d74f6a](https://www.github.com/looker-open-source/sdk-codegen/commit/0d74f6a7814b509416a9d2558c16439a4859b543)) -* show original spec in API Explorer ([#686](https://www.github.com/looker-open-source/sdk-codegen/issues/686)) ([2bfb014](https://www.github.com/looker-open-source/sdk-codegen/commit/2bfb0147f2947680a784ef3118192b1e7590b296)) -* two-way type references ([#684](https://www.github.com/looker-open-source/sdk-codegen/issues/684)) ([fbc0565](https://www.github.com/looker-open-source/sdk-codegen/commit/fbc0565c4c8fe3d1488bd246e244bed56f1412a9)) -* upgrade react-markdown ([#681](https://www.github.com/looker-open-source/sdk-codegen/issues/681)) ([952ed30](https://www.github.com/looker-open-source/sdk-codegen/commit/952ed305347e591154413171d73cc648d3f597c5)) - +- reduce size of apix bundle ([#676](https://www.github.com/looker-open-source/sdk-codegen/issues/676)) ([0d74f6a](https://www.github.com/looker-open-source/sdk-codegen/commit/0d74f6a7814b509416a9d2558c16439a4859b543)) +- show original spec in API Explorer ([#686](https://www.github.com/looker-open-source/sdk-codegen/issues/686)) ([2bfb014](https://www.github.com/looker-open-source/sdk-codegen/commit/2bfb0147f2947680a784ef3118192b1e7590b296)) +- two-way type references ([#684](https://www.github.com/looker-open-source/sdk-codegen/issues/684)) ([fbc0565](https://www.github.com/looker-open-source/sdk-codegen/commit/fbc0565c4c8fe3d1488bd246e244bed56f1412a9)) +- upgrade react-markdown ([#681](https://www.github.com/looker-open-source/sdk-codegen/issues/681)) ([952ed30](https://www.github.com/looker-open-source/sdk-codegen/commit/952ed305347e591154413171d73cc648d3f597c5)) ### Bug Fixes -* font download on route change ([#678](https://www.github.com/looker-open-source/sdk-codegen/issues/678)) ([ae62914](https://www.github.com/looker-open-source/sdk-codegen/commit/ae62914faa2e93d5523ddc82973f23df2992ea2f)) -* rendering of markdown tables in APIX explorer ([#687](https://www.github.com/looker-open-source/sdk-codegen/issues/687)) ([40e8640](https://www.github.com/looker-open-source/sdk-codegen/commit/40e8640872db001075c397b5d941dec535867a3d)) -* sync design-tokens/icons dependency constraint ([eb1a427](https://www.github.com/looker-open-source/sdk-codegen/commit/eb1a427d3c90bec44b2aac542783c3cda4810c0e)) -* sync design-tokens/icons dependency constraint ([eb1a427](https://www.github.com/looker-open-source/sdk-codegen/commit/eb1a427d3c90bec44b2aac542783c3cda4810c0e)) - +- font download on route change ([#678](https://www.github.com/looker-open-source/sdk-codegen/issues/678)) ([ae62914](https://www.github.com/looker-open-source/sdk-codegen/commit/ae62914faa2e93d5523ddc82973f23df2992ea2f)) +- rendering of markdown tables in APIX explorer ([#687](https://www.github.com/looker-open-source/sdk-codegen/issues/687)) ([40e8640](https://www.github.com/looker-open-source/sdk-codegen/commit/40e8640872db001075c397b5d941dec535867a3d)) +- sync design-tokens/icons dependency constraint ([eb1a427](https://www.github.com/looker-open-source/sdk-codegen/commit/eb1a427d3c90bec44b2aac542783c3cda4810c0e)) +- sync design-tokens/icons dependency constraint ([eb1a427](https://www.github.com/looker-open-source/sdk-codegen/commit/eb1a427d3c90bec44b2aac542783c3cda4810c0e)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.1 to ^0.1.2 - * @looker/run-it bumped from ^0.9.7 to ^0.9.8 - * @looker/sdk bumped from ^21.6.0 to ^21.6.1 - * @looker/sdk-codegen bumped from ^21.0.16 to ^21.0.17 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.16 to ^21.0.17 - * @looker/sdk-node bumped from ^21.6.0 to ^21.6.1 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.1 to ^0.1.2 + - @looker/run-it bumped from ^0.9.7 to ^0.9.8 + - @looker/sdk bumped from ^21.6.0 to ^21.6.1 + - @looker/sdk-codegen bumped from ^21.0.16 to ^21.0.17 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.16 to ^21.0.17 + - @looker/sdk-node bumped from ^21.6.0 to ^21.6.1 ### [0.9.7](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.6...api-explorer-v0.9.7) (2021-05-05) - ### Bug Fixes -* rerender sdk declarations on type/method change ([#659](https://www.github.com/looker-open-source/sdk-codegen/issues/659)) ([77139f6](https://www.github.com/looker-open-source/sdk-codegen/commit/77139f672200d31518543eb76546e9bb2ccf64c3)) -* use "TypeScript" and "JavaScript" everywhere ([#644](https://www.github.com/looker-open-source/sdk-codegen/issues/644)) ([c15031c](https://www.github.com/looker-open-source/sdk-codegen/commit/c15031cee189556adbd9e18641e7c992e86e3611)) - +- rerender sdk declarations on type/method change ([#659](https://www.github.com/looker-open-source/sdk-codegen/issues/659)) ([77139f6](https://www.github.com/looker-open-source/sdk-codegen/commit/77139f672200d31518543eb76546e9bb2ccf64c3)) +- use "TypeScript" and "JavaScript" everywhere ([#644](https://www.github.com/looker-open-source/sdk-codegen/issues/644)) ([c15031c](https://www.github.com/looker-open-source/sdk-codegen/commit/c15031cee189556adbd9e18641e7c992e86e3611)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/code-editor bumped from ^0.1.0 to ^0.1.1 - * @looker/run-it bumped from ^0.9.6 to ^0.9.7 - * @looker/sdk bumped from ^21.4.3 to ^21.6.0 - * @looker/sdk-codegen bumped from ^21.0.15 to ^21.0.16 - * @looker/sdk-rtl bumped from ^21.0.12 to ^21.0.13 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.15 to ^21.0.16 - * @looker/sdk-node bumped from ^21.4.4 to ^21.6.0 +- The following workspace dependencies were updated + - dependencies + - @looker/code-editor bumped from ^0.1.0 to ^0.1.1 + - @looker/run-it bumped from ^0.9.6 to ^0.9.7 + - @looker/sdk bumped from ^21.4.3 to ^21.6.0 + - @looker/sdk-codegen bumped from ^21.0.15 to ^21.0.16 + - @looker/sdk-rtl bumped from ^21.0.12 to ^21.0.13 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.15 to ^21.0.16 + - @looker/sdk-node bumped from ^21.4.4 to ^21.6.0 ### [0.9.6](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.5...api-explorer-v0.9.6) (2021-04-27) - ### Features -* APIX now uses google font appropriately ([#636](https://www.github.com/looker-open-source/sdk-codegen/issues/636)) ([ed932d6](https://www.github.com/looker-open-source/sdk-codegen/commit/ed932d6744fd3c102bfff7417643667bb57aee00)) - +- APIX now uses google font appropriately ([#636](https://www.github.com/looker-open-source/sdk-codegen/issues/636)) ([ed932d6](https://www.github.com/looker-open-source/sdk-codegen/commit/ed932d6744fd3c102bfff7417643667bb57aee00)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/run-it bumped from ^0.9.5 to ^0.9.6 +- The following workspace dependencies were updated + - dependencies + - @looker/run-it bumped from ^0.9.5 to ^0.9.6 ### [0.9.5](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.4...api-explorer-v0.9.5) (2021-04-27) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/run-it bumped from ^0.9.4 to ^0.9.5 - * @looker/sdk bumped from ^21.4.2 to ^21.4.3 - * @looker/sdk-codegen bumped from ^21.0.14 to ^21.0.15 - * @looker/code-editor bumped from ^0.0.1 to ^0.0.2 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.14 to ^21.0.15 - * @looker/sdk-node bumped from ^21.4.3 to ^21.4.4 +- The following workspace dependencies were updated + - dependencies + - @looker/run-it bumped from ^0.9.4 to ^0.9.5 + - @looker/sdk bumped from ^21.4.2 to ^21.4.3 + - @looker/sdk-codegen bumped from ^21.0.14 to ^21.0.15 + - @looker/code-editor bumped from ^0.0.1 to ^0.0.2 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.14 to ^21.0.15 + - @looker/sdk-node bumped from ^21.4.3 to ^21.4.4 ### [0.9.4](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.3...api-explorer-v0.9.4) (2021-04-26) - ### Features -* adds editor functionality to CodeDisplay ([#615](https://www.github.com/looker-open-source/sdk-codegen/issues/615)) ([b256d14](https://www.github.com/looker-open-source/sdk-codegen/commit/b256d14c279e47f531c8291d11146d07a7b5ad94)) - +- adds editor functionality to CodeDisplay ([#615](https://www.github.com/looker-open-source/sdk-codegen/issues/615)) ([b256d14](https://www.github.com/looker-open-source/sdk-codegen/commit/b256d14c279e47f531c8291d11146d07a7b5ad94)) ### Bug Fixes -* remove deprecated object attribute reference in APIX tests ([#622](https://www.github.com/looker-open-source/sdk-codegen/issues/622)) ([581b351](https://www.github.com/looker-open-source/sdk-codegen/commit/581b3511fdc8431f80d54fd315a12192ceb86382)) - +- remove deprecated object attribute reference in APIX tests ([#622](https://www.github.com/looker-open-source/sdk-codegen/issues/622)) ([581b351](https://www.github.com/looker-open-source/sdk-codegen/commit/581b3511fdc8431f80d54fd315a12192ceb86382)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/run-it bumped from ^0.9.3 to ^0.9.4 - * @looker/sdk bumped from ^21.4.1 to ^21.4.2 - * @looker/sdk-codegen bumped from ^21.0.13 to ^21.0.14 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.13 to ^21.0.14 - * @looker/sdk-node bumped from ^21.4.2 to ^21.4.3 +- The following workspace dependencies were updated + - dependencies + - @looker/run-it bumped from ^0.9.3 to ^0.9.4 + - @looker/sdk bumped from ^21.4.1 to ^21.4.2 + - @looker/sdk-codegen bumped from ^21.0.13 to ^21.0.14 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.13 to ^21.0.14 + - @looker/sdk-node bumped from ^21.4.2 to ^21.4.3 ### [0.9.3](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.2...api-explorer-v0.9.3) (2021-04-21) - ### Features -* adds 'SDK Examples' data table ([#602](https://www.github.com/looker-open-source/sdk-codegen/issues/602)) ([3678c96](https://www.github.com/looker-open-source/sdk-codegen/commit/3678c96cc7c2edadd00013b66711c917a62d1000)) -* introduces prism-editor package; implements read-only usage ([#588](https://www.github.com/looker-open-source/sdk-codegen/issues/588)) ([863c88d](https://www.github.com/looker-open-source/sdk-codegen/commit/863c88dfb0569f7c829602acee2404e1c840097e)) - +- adds 'SDK Examples' data table ([#602](https://www.github.com/looker-open-source/sdk-codegen/issues/602)) ([3678c96](https://www.github.com/looker-open-source/sdk-codegen/commit/3678c96cc7c2edadd00013b66711c917a62d1000)) +- introduces prism-editor package; implements read-only usage ([#588](https://www.github.com/looker-open-source/sdk-codegen/issues/588)) ([863c88d](https://www.github.com/looker-open-source/sdk-codegen/commit/863c88dfb0569f7c829602acee2404e1c840097e)) ### Bug Fixes -* updated TypeScript, C#, Go language names in codeGenerators.ts ([#610](https://www.github.com/looker-open-source/sdk-codegen/issues/610)) ([13fb42b](https://www.github.com/looker-open-source/sdk-codegen/commit/13fb42b6bfa651a137e75b04fc6ee00620705ede)) - +- updated TypeScript, C#, Go language names in codeGenerators.ts ([#610](https://www.github.com/looker-open-source/sdk-codegen/issues/610)) ([13fb42b](https://www.github.com/looker-open-source/sdk-codegen/commit/13fb42b6bfa651a137e75b04fc6ee00620705ede)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/run-it bumped from ^0.9.2 to ^0.9.3 - * @looker/sdk-codegen bumped from ^21.0.12 to ^21.0.13 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.12 to ^21.0.13 - * @looker/sdk-node bumped from ^21.4.1 to ^21.4.2 +- The following workspace dependencies were updated + - dependencies + - @looker/run-it bumped from ^0.9.2 to ^0.9.3 + - @looker/sdk-codegen bumped from ^21.0.12 to ^21.0.13 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.12 to ^21.0.13 + - @looker/sdk-node bumped from ^21.4.1 to ^21.4.2 ### [0.9.2](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.1...api-explorer-v0.9.2) (2021-04-15) - ### Features -* add source declaration links to API Explorer ([#578](https://www.github.com/looker-open-source/sdk-codegen/issues/578)) ([ce0e588](https://www.github.com/looker-open-source/sdk-codegen/commit/ce0e588787bdbc2e8ca4aadd44c31dc3ba1a0ef1)) -* adds prism editor and implements for sdkdocs ([#581](https://www.github.com/looker-open-source/sdk-codegen/issues/581)) ([aea0424](https://www.github.com/looker-open-source/sdk-codegen/commit/aea042439d2358a61bbf705528d6006d694d5ea5)) -* click diff item method to show method detail ([#592](https://www.github.com/looker-open-source/sdk-codegen/issues/592)) ([a5f082a](https://www.github.com/looker-open-source/sdk-codegen/commit/a5f082af262ab5451d6af09083a8a3c2eb31fcfa)) -* document request bodies for methods with body parameters ([#593](https://www.github.com/looker-open-source/sdk-codegen/issues/593)) ([740ae5d](https://www.github.com/looker-open-source/sdk-codegen/commit/740ae5d89aa701b29bf225cf61f9a87de0907ef7)) -* remember user's SDK language preference ([#567](https://www.github.com/looker-open-source/sdk-codegen/issues/567)) ([faa2511](https://www.github.com/looker-open-source/sdk-codegen/commit/faa25113d87072875ec5fb718da7eb10e0a518e4)) - +- add source declaration links to API Explorer ([#578](https://www.github.com/looker-open-source/sdk-codegen/issues/578)) ([ce0e588](https://www.github.com/looker-open-source/sdk-codegen/commit/ce0e588787bdbc2e8ca4aadd44c31dc3ba1a0ef1)) +- adds prism editor and implements for sdkdocs ([#581](https://www.github.com/looker-open-source/sdk-codegen/issues/581)) ([aea0424](https://www.github.com/looker-open-source/sdk-codegen/commit/aea042439d2358a61bbf705528d6006d694d5ea5)) +- click diff item method to show method detail ([#592](https://www.github.com/looker-open-source/sdk-codegen/issues/592)) ([a5f082a](https://www.github.com/looker-open-source/sdk-codegen/commit/a5f082af262ab5451d6af09083a8a3c2eb31fcfa)) +- document request bodies for methods with body parameters ([#593](https://www.github.com/looker-open-source/sdk-codegen/issues/593)) ([740ae5d](https://www.github.com/looker-open-source/sdk-codegen/commit/740ae5d89aa701b29bf225cf61f9a87de0907ef7)) +- remember user's SDK language preference ([#567](https://www.github.com/looker-open-source/sdk-codegen/issues/567)) ([faa2511](https://www.github.com/looker-open-source/sdk-codegen/commit/faa25113d87072875ec5fb718da7eb10e0a518e4)) ### Bug Fixes -* **ApiExplorer:** Added support for Golang syntax highlighting ([#563](https://www.github.com/looker-open-source/sdk-codegen/issues/563)) ([e2ae33e](https://www.github.com/looker-open-source/sdk-codegen/commit/e2ae33eb1d63b0f8d9987bf86bbed64641d4bea3)) -* extends runit response height and fixes response models scrolling ([#558](https://www.github.com/looker-open-source/sdk-codegen/issues/558)) ([61627ce](https://www.github.com/looker-open-source/sdk-codegen/commit/61627ce282c1f7e4eaf082ccd66466060d2e7b98)) -* remove search criteria selector and auto expand results ([#571](https://www.github.com/looker-open-source/sdk-codegen/issues/571)) ([e5a5ee7](https://www.github.com/looker-open-source/sdk-codegen/commit/e5a5ee7ddb2a9c6822dccc9493c994a9a826b419)) -* RunIt request overflow ([#565](https://www.github.com/looker-open-source/sdk-codegen/issues/565)) ([38665ac](https://www.github.com/looker-open-source/sdk-codegen/commit/38665ac40b6abc20557db66d0dc536c347c6a862)) - +- **ApiExplorer:** Added support for Golang syntax highlighting ([#563](https://www.github.com/looker-open-source/sdk-codegen/issues/563)) ([e2ae33e](https://www.github.com/looker-open-source/sdk-codegen/commit/e2ae33eb1d63b0f8d9987bf86bbed64641d4bea3)) +- extends runit response height and fixes response models scrolling ([#558](https://www.github.com/looker-open-source/sdk-codegen/issues/558)) ([61627ce](https://www.github.com/looker-open-source/sdk-codegen/commit/61627ce282c1f7e4eaf082ccd66466060d2e7b98)) +- remove search criteria selector and auto expand results ([#571](https://www.github.com/looker-open-source/sdk-codegen/issues/571)) ([e5a5ee7](https://www.github.com/looker-open-source/sdk-codegen/commit/e5a5ee7ddb2a9c6822dccc9493c994a9a826b419)) +- RunIt request overflow ([#565](https://www.github.com/looker-open-source/sdk-codegen/issues/565)) ([38665ac](https://www.github.com/looker-open-source/sdk-codegen/commit/38665ac40b6abc20557db66d0dc536c347c6a862)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/run-it bumped from ^0.9.1 to ^0.9.2 - * @looker/sdk bumped from ^21.4.0 to ^21.4.1 - * @looker/sdk-codegen bumped from ^21.0.11 to ^21.0.12 - * @looker/sdk-rtl bumped from ^21.0.11 to ^21.0.12 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.11 to ^21.0.12 - * @looker/sdk-node bumped from ^21.4.0 to ^21.4.1 +- The following workspace dependencies were updated + - dependencies + - @looker/run-it bumped from ^0.9.1 to ^0.9.2 + - @looker/sdk bumped from ^21.4.0 to ^21.4.1 + - @looker/sdk-codegen bumped from ^21.0.11 to ^21.0.12 + - @looker/sdk-rtl bumped from ^21.0.11 to ^21.0.12 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.11 to ^21.0.12 + - @looker/sdk-node bumped from ^21.4.0 to ^21.4.1 ### [0.9.1](https://www.github.com/looker-open-source/sdk-codegen/compare/api-explorer-v0.9.0...api-explorer-v0.9.1) (2021-04-02) - ### Features -* Added --versions option to the code generator ([#514](https://www.github.com/looker-open-source/sdk-codegen/issues/514)) ([ee6f3e8](https://www.github.com/looker-open-source/sdk-codegen/commit/ee6f3e8f55e300df1a75c9be89b47f067bc08dee)) -* adds scrolling to frame elements ([#526](https://www.github.com/looker-open-source/sdk-codegen/issues/526)) ([d7cd769](https://www.github.com/looker-open-source/sdk-codegen/commit/d7cd76917522c37e2902792405a75b8b9358e92f)) - +- Added --versions option to the code generator ([#514](https://www.github.com/looker-open-source/sdk-codegen/issues/514)) ([ee6f3e8](https://www.github.com/looker-open-source/sdk-codegen/commit/ee6f3e8f55e300df1a75c9be89b47f067bc08dee)) +- adds scrolling to frame elements ([#526](https://www.github.com/looker-open-source/sdk-codegen/issues/526)) ([d7cd769](https://www.github.com/looker-open-source/sdk-codegen/commit/d7cd76917522c37e2902792405a75b8b9358e92f)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/run-it bumped from ^0.9.0 to ^0.9.1 - * @looker/sdk bumped from ^21.0.10 to ^21.4.0 - * @looker/sdk-codegen bumped from ^21.0.10 to ^21.0.11 - * @looker/sdk-rtl bumped from ^21.0.10 to ^21.0.11 - * devDependencies - * @looker/sdk-codegen-scripts bumped from ^21.0.9 to ^21.0.11 - * @looker/sdk-node bumped from ^21.0.10 to ^21.4.0 +- The following workspace dependencies were updated + - dependencies + - @looker/run-it bumped from ^0.9.0 to ^0.9.1 + - @looker/sdk bumped from ^21.0.10 to ^21.4.0 + - @looker/sdk-codegen bumped from ^21.0.10 to ^21.0.11 + - @looker/sdk-rtl bumped from ^21.0.10 to ^21.0.11 + - devDependencies + - @looker/sdk-codegen-scripts bumped from ^21.0.9 to ^21.0.11 + - @looker/sdk-node bumped from ^21.0.10 to ^21.4.0 ### [0.9.0] diff --git a/packages/api-explorer/CODE_OF_CONDUCT.md b/packages/api-explorer/CODE_OF_CONDUCT.md index d3465dedf..b2846d2f8 100644 --- a/packages/api-explorer/CODE_OF_CONDUCT.md +++ b/packages/api-explorer/CODE_OF_CONDUCT.md @@ -8,19 +8,19 @@ In the interest of fostering an open and welcoming environment, we as contributo Examples of behavior that contributes to creating a positive environment include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities diff --git a/packages/api-explorer/e2e/MethodScene.spec.ts b/packages/api-explorer/e2e/MethodScene.spec.ts index 77395f60e..bebc184f8 100644 --- a/packages/api-explorer/e2e/MethodScene.spec.ts +++ b/packages/api-explorer/e2e/MethodScene.spec.ts @@ -23,58 +23,58 @@ SOFTWARE. */ -import { goToPage, v40Url as v40, v40Url } from './helpers' +import { goToPage, v40Url as v40, v40Url } from './helpers'; -jest.setTimeout(120000) +jest.setTimeout(120000); describe('MethodScene', () => { beforeEach(async () => { - await jestPuppeteer.resetBrowser() - await page.setDefaultNavigationTimeout(120000) - }) + await jestPuppeteer.resetBrowser(); + await page.setDefaultNavigationTimeout(120000); + }); afterEach(async () => { await page.evaluate(() => { - localStorage.clear() - }) - }) + localStorage.clear(); + }); + }); it('fetches error detail markdown when error code query param is present', async () => { - const errorCode = '400' - await goToPage(`${v40Url}/methods/Content/content_metadata?e=${errorCode}`) + const errorCode = '400'; + await goToPage(`${v40Url}/methods/Content/content_metadata?e=${errorCode}`); // confirm method scene loaded - await expect(page).toMatchElement('h2', { text: 'Get Content Metadata' }) + await expect(page).toMatchElement('h2', { text: 'Get Content Metadata' }); // confirm correct response tab is selected await expect(page).toMatchElement('button[aria-selected=true]', { text: '400: Bad Request', - }) + }); // confirm error detail md file was fetched await expect(page).toMatchElement('h2', { text: `API Response ${errorCode} for `, - }) - }) + }); + }); it('removes error code query param when user navigates away from method', async () => { - const errorCode = 400 + const errorCode = 400; await goToPage( `${v40}/err/${errorCode}/get/content_metadata/:content_metadata_id` - ) + ); // confirm method scene loaded - await expect(page).toMatchElement('h2', { text: 'Get Content Metadata' }) + await expect(page).toMatchElement('h2', { text: 'Get Content Metadata' }); // confirm url and query param are set correctly await expect(page.url()).toEqual( `${v40}/methods/Content/content_metadata?sdk=py&e=${errorCode}` - ) + ); // navigate to another method - await expect(page).toClick('h4', { text: 'Dashboard' }) + await expect(page).toClick('h4', { text: 'Dashboard' }); await expect(page).toMatchElement('h2', { text: 'Dashboard: Manage Dashboards', - }) - await expect(page.url()).toEqual(`${v40}/methods/Dashboard?sdk=py`) - }) -}) + }); + await expect(page.url()).toEqual(`${v40}/methods/Dashboard?sdk=py`); + }); +}); diff --git a/packages/api-explorer/e2e/diffScene.spec.ts b/packages/api-explorer/e2e/diffScene.spec.ts index fe6fa60b3..d2f2d4978 100644 --- a/packages/api-explorer/e2e/diffScene.spec.ts +++ b/packages/api-explorer/e2e/diffScene.spec.ts @@ -23,246 +23,246 @@ SOFTWARE. */ -import '@testing-library/jest-dom' +import '@testing-library/jest-dom'; -import { goToPage, BASE_URL } from './helpers' +import { BASE_URL, goToPage } from './helpers'; // https://github.com/smooth-code/jest-puppeteer/tree/master/packages/expect-puppeteer // https://github.com/puppeteer/puppeteer/blob/main/docs/api.md -jest.setTimeout(120000) +jest.setTimeout(120000); const resultCardsSelector = - 'section#top div[class*=SpaceVertical] div[class*=Card]' -const baseInputSelector = 'input#listbox-input-base' -const compInputSelector = 'input#listbox-input-compare' -const globalOptionsSelector = '#modal-root [role=option] span' -const switchButtonSelector = '.switch-button' + 'section#top div[class*=SpaceVertical] div[class*=Card]'; +const baseInputSelector = 'input#listbox-input-base'; +const compInputSelector = 'input#listbox-input-compare'; +const globalOptionsSelector = '#modal-root [role=option] span'; +const switchButtonSelector = '.switch-button'; -describe('Diff Scene', () => { +describe.skip('Diff Scene', () => { beforeEach(async () => { - await jestPuppeteer.resetBrowser() - await page.setDefaultNavigationTimeout(120000) - }) + await jestPuppeteer.resetBrowser(); + await page.setDefaultNavigationTimeout(120000); + }); afterEach(async () => { await page.evaluate(() => { - localStorage.clear() - }) - }) + localStorage.clear(); + }); + }); it('loads the default scene (/3.1/diff)', async () => { - await goToPage(`${BASE_URL}/3.1/diff`) - const body = await page.$('body') + await goToPage(`${BASE_URL}/3.1/diff`); + const body = await page.$('body'); // "Base" input element { - await body?.click() - const baseInputElement = await page.$(baseInputSelector) - expect(baseInputElement).not.toBeNull() + await body?.click(); + const baseInputElement = await page.$(baseInputSelector); + expect(baseInputElement).not.toBeNull(); const baseInputValue = await page.evaluate( (e) => e.value, baseInputElement - ) - expect(baseInputValue).toMatch('3.1') + ); + expect(baseInputValue).toMatch('3.1'); - const baseOptionsOnLoad = await page.$(globalOptionsSelector) - expect(baseOptionsOnLoad).toBeNull() + const baseOptionsOnLoad = await page.$(globalOptionsSelector); + expect(baseOptionsOnLoad).toBeNull(); - await baseInputElement?.click() - const baseOptionsOnClick = await page.$$(globalOptionsSelector) - expect(baseOptionsOnClick).not.toHaveLength(0) + await baseInputElement?.click(); + const baseOptionsOnClick = await page.$$(globalOptionsSelector); + expect(baseOptionsOnClick).not.toHaveLength(0); - await body?.click() - const baseOptionsOnClose = await page.$(globalOptionsSelector) - expect(baseOptionsOnClose).toBeNull() + await body?.click(); + const baseOptionsOnClose = await page.$(globalOptionsSelector); + expect(baseOptionsOnClose).toBeNull(); } // "Comparison" input element { - await body?.click() - const compInputElement = await page.$(compInputSelector) - expect(compInputElement).not.toBeNull() + await body?.click(); + const compInputElement = await page.$(compInputSelector); + expect(compInputElement).not.toBeNull(); const compInputValue = await page.evaluate( (e) => e.value, compInputElement - ) - expect(compInputValue).toEqual('') + ); + expect(compInputValue).toEqual(''); - const compOptionsOnLoad = await page.$(globalOptionsSelector) - expect(compOptionsOnLoad).toBeNull() + const compOptionsOnLoad = await page.$(globalOptionsSelector); + expect(compOptionsOnLoad).toBeNull(); - await compInputElement?.click() - const compOptionsOnClick = await page.$$(globalOptionsSelector) - expect(compOptionsOnClick).not.toHaveLength(0) + await compInputElement?.click(); + const compOptionsOnClick = await page.$$(globalOptionsSelector); + expect(compOptionsOnClick).not.toHaveLength(0); - await body?.click() - const compOptionsOnClose = await page.$(globalOptionsSelector) - expect(compOptionsOnClose).toBeNull() + await body?.click(); + const compOptionsOnClose = await page.$(globalOptionsSelector); + expect(compOptionsOnClose).toBeNull(); } // Switch button (disabled) { - const switchButtonElement = await page.$(switchButtonSelector) - expect(switchButtonElement).not.toBeNull() + const switchButtonElement = await page.$(switchButtonSelector); + expect(switchButtonElement).not.toBeNull(); const switchButtonDisabled = await page.evaluate( (e) => e.disabled, switchButtonElement - ) - expect(switchButtonDisabled).toEqual(true) + ); + expect(switchButtonDisabled).toEqual(true); } - }) + }); it('loads a comparison scene (/3.1/diff/4.0) and navigates from it', async () => { - await goToPage(`${BASE_URL}/3.1/diff/4.0`) + await goToPage(`${BASE_URL}/3.1/diff/4.0`); // "Base" input element { - const baseInputElement = await page.$(baseInputSelector) - expect(baseInputElement).not.toBeNull() + const baseInputElement = await page.$(baseInputSelector); + expect(baseInputElement).not.toBeNull(); const baseInputValue = await page.evaluate( (e) => e.value, baseInputElement - ) - expect(baseInputValue).toMatch('3.1') + ); + expect(baseInputValue).toMatch('3.1'); } // "Comparison" input element { - const compInputElement = await page.$(compInputSelector) - expect(compInputElement).not.toBeNull() + const compInputElement = await page.$(compInputSelector); + expect(compInputElement).not.toBeNull(); const compInputValue = await page.evaluate( (e) => e.value, compInputElement - ) - expect(compInputValue).toMatch('4.0') + ); + expect(compInputValue).toMatch('4.0'); } // Switch button { - const switchButtonElement = await page.$(switchButtonSelector) - expect(switchButtonElement).not.toBeNull() + const switchButtonElement = await page.$(switchButtonSelector); + expect(switchButtonElement).not.toBeNull(); const switchButtonDisabled = await page.evaluate( (e) => e.disabled, switchButtonElement - ) - expect(switchButtonDisabled).toEqual(false) + ); + expect(switchButtonDisabled).toEqual(false); } // Diff results { - const diffResultCards = await page.$$(resultCardsSelector) - expect(diffResultCards).not.toHaveLength(0) + const diffResultCards = await page.$$(resultCardsSelector); + expect(diffResultCards).not.toHaveLength(0); const page1Methods = await Promise.all( diffResultCards.map((resultCard) => page.evaluate((el) => el.innerText.match(/^[a-z_]*/)[0], resultCard) ) - ) - expect(page1Methods).toHaveLength(15) - expect(page1Methods).toContain('delete_board_item') + ); + expect(page1Methods).toHaveLength(15); + expect(page1Methods).toContain('delete_board_item'); } // Expand a result { const expandedSelector = - resultCardsSelector + `>div[class*=Accordion2]>div[aria-expanded=true]` + resultCardsSelector + `>div[class*=Accordion2]>div[aria-expanded=true]`; // Initially not expanded - const expandedCardBefore = await page.$(expandedSelector) - expect(expandedCardBefore).toBeNull() + const expandedCardBefore = await page.$(expandedSelector); + expect(expandedCardBefore).toBeNull(); // Click a card - const firstResultCard = (await page.$$(resultCardsSelector))[0] - await firstResultCard.click() + const firstResultCard = (await page.$$(resultCardsSelector))[0]; + await firstResultCard.click(); // Expanded - const expandedCardAfter = await page.$(expandedSelector) - expect(expandedCardAfter).not.toBeNull() + const expandedCardAfter = await page.$(expandedSelector); + expect(expandedCardAfter).not.toBeNull(); // Find and validate method link - const methodLink = await page.$(`${resultCardsSelector} a[role=link]`) - expect(methodLink).not.toBeNull() - const methodText = await page.evaluate((e) => e.innerText, methodLink) - expect(methodText).toMatch(`delete_alert for 4.0`) + const methodLink = await page.$(`${resultCardsSelector} a[role=link]`); + expect(methodLink).not.toBeNull(); + const methodText = await page.evaluate((e) => e.innerText, methodLink); + expect(methodText).toMatch(`delete_alert for 4.0`); // Click and validate destination - await methodLink?.click() - await page.waitForSelector(`div[class*=MethodBadge]`, { timeout: 5000 }) - const compUrl = page.url() + await methodLink?.click(); + await page.waitForSelector(`div[class*=MethodBadge]`, { timeout: 5000 }); + const compUrl = page.url(); expect(compUrl).toEqual( `${BASE_URL}/4.0/methods/Alert/delete_alert?sdk=py` - ) + ); } - }) + }); it('updates when a comparison is chosen or switched', async () => { - await goToPage(`${BASE_URL}/3.1/diff`) + await goToPage(`${BASE_URL}/3.1/diff`); // "Base" input element - const baseInputElement = await page.$(baseInputSelector) - expect(baseInputElement).not.toBeNull() + const baseInputElement = await page.$(baseInputSelector); + expect(baseInputElement).not.toBeNull(); // "Comparison" input element - const compInputElement = await page.$(compInputSelector) - expect(compInputElement).not.toBeNull() + const compInputElement = await page.$(compInputSelector); + expect(compInputElement).not.toBeNull(); // Click comparison input - await compInputElement?.click() - const compOptionsOnClick = await page.$$(globalOptionsSelector) - expect(compOptionsOnClick).not.toHaveLength(0) - expect(compOptionsOnClick).not.toHaveLength(1) + await compInputElement?.click(); + const compOptionsOnClick = await page.$$(globalOptionsSelector); + expect(compOptionsOnClick).not.toHaveLength(0); + expect(compOptionsOnClick).not.toHaveLength(1); // Find an option containing the text 4.0 const option40Index = await page.$$eval(globalOptionsSelector, (els) => els.findIndex((el) => el?.textContent?.match(/4\.0/)) - ) - const option40 = compOptionsOnClick[option40Index] - expect(option40).not.toBeUndefined() + ); + const option40 = compOptionsOnClick[option40Index]; + expect(option40).not.toBeUndefined(); // Click that option - await option40.click() - await page.waitForSelector(resultCardsSelector, { timeout: 5000 }) + await option40.click(); + await page.waitForSelector(resultCardsSelector, { timeout: 5000 }); // Check the URL // Would like to do this earlier, but not sure what to wait on - const compUrl = page.url() - expect(compUrl).toEqual(`${BASE_URL}/3.1/diff/4.0?sdk=py`) + const compUrl = page.url(); + expect(compUrl).toEqual(`${BASE_URL}/3.1/diff/4.0?sdk=py`); // Check the results - const diffResultCards = await page.$$(resultCardsSelector) - expect(diffResultCards).not.toHaveLength(0) + const diffResultCards = await page.$$(resultCardsSelector); + expect(diffResultCards).not.toHaveLength(0); const diff31to40Page1Methods = await Promise.all( diffResultCards.map((resultCard) => page.evaluate((el) => el.innerText.match(/^[a-z_]*/)[0], resultCard) ) - ) + ); - expect(diff31to40Page1Methods).toHaveLength(15) - expect(diff31to40Page1Methods).toContain('delete_board_item') + expect(diff31to40Page1Methods).toHaveLength(15); + expect(diff31to40Page1Methods).toContain('delete_board_item'); // Click the switch button - const switchButtonElement = await page.$(switchButtonSelector) - expect(switchButtonElement).not.toBeNull() + const switchButtonElement = await page.$(switchButtonSelector); + expect(switchButtonElement).not.toBeNull(); const switchButtonDisabled = await page.evaluate( (e) => e.disabled, switchButtonElement - ) - expect(switchButtonDisabled).toEqual(false) - await switchButtonElement?.click() + ); + expect(switchButtonDisabled).toEqual(false); + await switchButtonElement?.click(); // A more precise timing mechanism would be better: https://github.com/puppeteer/puppeteer/issues/5328 - await page.waitForTimeout(150) + await page.waitForTimeout(150); - const switchUrl = page.url() - expect(switchUrl).toEqual(`${BASE_URL}/4.0/diff/3.1?sdk=py`) + const switchUrl = page.url(); + expect(switchUrl).toEqual(`${BASE_URL}/4.0/diff/3.1?sdk=py`); // Check the results again, even though they should be the same const diff40to31Page1Methods = await Promise.all( diffResultCards.map((resultCard) => page.evaluate((el) => el.innerText.match(/^[a-z_]*/)[0], resultCard) ) - ) + ); - expect(diff40to31Page1Methods).toHaveLength(15) - expect(diff40to31Page1Methods).toContain('delete_board_item') - }) -}) + expect(diff40to31Page1Methods).toHaveLength(15); + expect(diff40to31Page1Methods).toContain('delete_board_item'); + }); +}); diff --git a/packages/api-explorer/e2e/e2e.spec.ts b/packages/api-explorer/e2e/e2e.spec.ts index e304ee623..7a4167bf4 100644 --- a/packages/api-explorer/e2e/e2e.spec.ts +++ b/packages/api-explorer/e2e/e2e.spec.ts @@ -23,152 +23,152 @@ SOFTWARE. */ -import '@testing-library/jest-dom' +import '@testing-library/jest-dom'; -import { goToPage, pageReload, v40Url as v40 } from './helpers' +import { goToPage, pageReload, v40Url as v40 } from './helpers'; // https://github.com/smooth-code/jest-puppeteer/tree/master/packages/expect-puppeteer // https://github.com/puppeteer/puppeteer/blob/main/docs/api.md -jest.setTimeout(120000) +jest.setTimeout(120000); describe('API Explorer', () => { beforeEach(async () => { - await jestPuppeteer.resetBrowser() - await page.setDefaultNavigationTimeout(120000) - }) + await jestPuppeteer.resetBrowser(); + await page.setDefaultNavigationTimeout(120000); + }); afterEach(async () => { await page.evaluate(() => { - localStorage.clear() - }) - }) + localStorage.clear(); + }); + }); describe('general', () => { beforeEach(async () => { - await goToPage(v40) - }) + await goToPage(v40); + }); it('renders a method page', async () => { await Promise.all([ page.waitForNavigation(), expect(page).toClick('h4', { text: 'Dashboard' }), - ]) + ]); await Promise.all([ page.waitForNavigation(), expect(page).toClick('h3', { text: 'Get All Dashboards' }), - ]) + ]); await expect(page.url()).toEqual( `${v40}/methods/Dashboard/all_dashboards?sdk=py` - ) + ); // title - await expect(page).toMatchElement('h2', { text: 'Get All Dashboards' }) + await expect(page).toMatchElement('h2', { text: 'Get All Dashboards' }); // markdown await expect(page).toMatchElement('h3', { text: 'Get information about all active dashboards', - }) + }); // sdk declaration - await expect(page).toMatchElement('h3', { text: 'Python Declaration' }) + await expect(page).toMatchElement('h3', { text: 'Python Declaration' }); // sdk examples - await expect(page).toMatchElement('h3', { text: 'SDK Examples' }) + await expect(page).toMatchElement('h3', { text: 'SDK Examples' }); const examples = await page.$$( 'table[aria-label="SDK Examples"] > tbody > tr' - ) - expect(examples.length).toBeGreaterThan(0) + ); + expect(examples.length).toBeGreaterThan(0); // type references - await expect(page).toMatchElement('h3', { text: 'References' }) - const docLinks = await page.$$('.doc-link') - expect(docLinks.length).toBeGreaterThan(0) - await docLinks[0].click() - const typeName = await page.evaluate((e) => e.innerText, docLinks[0]) - await expect(page).toMatchElement('h2', { text: typeName }) - await page.goBack() + await expect(page).toMatchElement('h3', { text: 'References' }); + const docLinks = await page.$$('.doc-link'); + expect(docLinks.length).toBeGreaterThan(0); + await docLinks[0].click(); + const typeName = await page.evaluate((e) => e.innerText, docLinks[0]); + await expect(page).toMatchElement('h2', { text: typeName }); + await page.goBack(); // response models - await expect(page).toMatchElement('h3', { text: 'Response Models' }) + await expect(page).toMatchElement('h3', { text: 'Response Models' }); // original schema - await expect(page).toMatchElement('h3', { text: 'Original Schema' }) - }) + await expect(page).toMatchElement('h3', { text: 'Original Schema' }); + }); it('renders a type page', async () => { - await expect(page).toClick('button', { text: /^Types/ }) - await expect(page).toClick('h4', { text: 'ApiAuth' }) - await expect(page).toClick('a', { text: 'AccessToken' }) + await expect(page).toClick('button', { text: /^Types/ }); + await expect(page).toClick('h4', { text: 'ApiAuth' }); + await expect(page).toClick('a', { text: 'AccessToken' }); // title - await expect(page).toMatchElement('h2', { text: 'AccessToken' }) + await expect(page).toMatchElement('h2', { text: 'AccessToken' }); // references - await expect(page).toMatchElement('h3', { text: 'References' }) - const docLinks = await page.$$('.doc-link') - expect(docLinks.length).toBeGreaterThan(0) + await expect(page).toMatchElement('h3', { text: 'References' }); + const docLinks = await page.$$('.doc-link'); + expect(docLinks.length).toBeGreaterThan(0); // sdk declaration - await expect(page).toMatchElement('h3', { text: 'Python Declaration' }) + await expect(page).toMatchElement('h3', { text: 'Python Declaration' }); // original schema - await expect(page).toMatchElement('h3', { text: 'Original Schema' }) - }) + await expect(page).toMatchElement('h3', { text: 'Original Schema' }); + }); it('renders a tag scene and filters by operation', async () => { - await expect(page).toClick('h4', { text: 'ApiAuth' }) + await expect(page).toClick('h4', { text: 'ApiAuth' }); await expect(page).toMatchElement('h2', { text: 'ApiAuth: API Authentication', - }) - await expect(page.url()).toMatch(`${v40}/methods/ApiAuth`) + }); + await expect(page.url()).toMatch(`${v40}/methods/ApiAuth`); await expect(page).toMatchElement( 'button[value="ALL"][aria-pressed=true]' - ) - await expect(page).toMatchElement('div[type="DELETE"]') - await expect(page).toMatchElement('div[type="POST"]') + ); + await expect(page).toMatchElement('div[type="DELETE"]'); + await expect(page).toMatchElement('div[type="POST"]'); - await page.click('button[value="POST"]') - await expect(page).not.toMatchElement('div[type="DELETE"]') - await expect(page).toMatchElement('div[type="POST"]') + await page.click('button[value="POST"]'); + await expect(page).not.toMatchElement('div[type="DELETE"]'); + await expect(page).toMatchElement('div[type="POST"]'); - await page.click('button[value="DELETE"]') - await expect(page).toMatchElement('div[type="DELETE"]') - await expect(page).not.toMatchElement('div[type="POST"]') - }) + await page.click('button[value="DELETE"]'); + await expect(page).toMatchElement('div[type="DELETE"]'); + await expect(page).not.toMatchElement('div[type="POST"]'); + }); it('toggles sidenav', async () => { - const searchSelector = 'input[aria-label="Search"]' - const navToggleSelector = 'button[aria-label="nav toggle"]' - await expect(page).toMatchElement(searchSelector) - await expect(page).toClick(navToggleSelector) - await expect(page).not.toMatchElement(searchSelector) - await expect(page).toClick(navToggleSelector) - await expect(page).toMatchElement(searchSelector) - }) + const searchSelector = 'input[aria-label="Search"]'; + const navToggleSelector = 'button[aria-label="nav toggle"]'; + await expect(page).toMatchElement(searchSelector); + await expect(page).toClick(navToggleSelector); + await expect(page).not.toMatchElement(searchSelector); + await expect(page).toClick(navToggleSelector); + await expect(page).toMatchElement(searchSelector); + }); it('remembers the chosen language', async () => { - const selector = 'input[aria-label="sdk language selector"]' - let languageHandle = await page.$(`${selector}[value="Python"]`) - expect(languageHandle).not.toBeNull() + const selector = 'input[aria-label="sdk language selector"]'; + let languageHandle = await page.$(`${selector}[value="Python"]`); + expect(languageHandle).not.toBeNull(); expect(await page.evaluate((x) => x.value, languageHandle)).toEqual( 'Python' - ) - await expect(page).toClick('h4', { text: 'Dashboard' }) - await expect(page).toClick('a', { text: 'Get All Dashboards' }) - await expect(page).toMatchElement('h3', { text: 'Python Declaration' }) - - await languageHandle?.click() - await expect(page).toClick('li', { text: 'Kotlin' }) - await pageReload() - languageHandle = await page.$(`${selector}[value="Kotlin"]`) - expect(languageHandle).not.toBeNull() + ); + await expect(page).toClick('h4', { text: 'Dashboard' }); + await expect(page).toClick('a', { text: 'Get All Dashboards' }); + await expect(page).toMatchElement('h3', { text: 'Python Declaration' }); + + await languageHandle?.click(); + await expect(page).toClick('li', { text: 'Kotlin' }); + await pageReload(); + languageHandle = await page.$(`${selector}[value="Kotlin"]`); + expect(languageHandle).not.toBeNull(); expect(await page.evaluate((x) => x.value, languageHandle)).toEqual( 'Kotlin' - ) - await expect(page).toMatchElement('h3', { text: 'Kotlin Declaration' }) - }) + ); + await expect(page).toMatchElement('h3', { text: 'Kotlin Declaration' }); + }); // This test was broken during the 4.0 GA spec changes, and needs to be fixed // it('changes specs', async () => { @@ -186,126 +186,126 @@ describe('API Explorer', () => { // await page.waitForTimeout(150) // await expect(page.url()).toEqual(v31) // }) - }) + }); describe('navigation', () => { it('should be able to navigate directly to a spec home', async () => { - await goToPage(v40) + await goToPage(v40); await expect(page).toMatchElement('h2', { text: 'Looker API 4.0 Reference', - }) - await expect(page).toMatchElement('input[value="4.0"]') - }) + }); + await expect(page).toMatchElement('input[value="4.0"]'); + }); it('should be able to navigate directly to a tag scene', async () => { - await goToPage(`${v40}/methods/Dashboard`) + await goToPage(`${v40}/methods/Dashboard`); await expect(page).toMatchElement('h2', { text: 'Dashboard: Manage Dashboards', - }) - }) + }); + }); it('should be able to navigate directly to a method', async () => { - await goToPage(`${v40}/methods/Dashboard/all_dashboards`) - await expect(page).toMatchElement('h2', { text: 'Get All Dashboards' }) + await goToPage(`${v40}/methods/Dashboard/all_dashboards`); + await expect(page).toMatchElement('h2', { text: 'Get All Dashboards' }); await expect(page).toMatchElement('div', { text: 'Get information about all active dashboards', - }) - }) + }); + }); it('should be able to navigate directly to a type', async () => { - await goToPage(`${v40}/types/Query/Query`) - await expect(page).toMatchElement('h2', { text: 'Query' }) - await expect(page).toMatchElement('button', { text: 'Query' }) - }) + await goToPage(`${v40}/types/Query/Query`); + await expect(page).toMatchElement('h2', { text: 'Query' }); + await expect(page).toMatchElement('button', { text: 'Query' }); + }); it('redirects error routes to the correct method page', async () => { - const errorCode = 400 + const errorCode = 400; await goToPage( `${v40}/err/${errorCode}/get/content_metadata/:content_metadata_id` - ) + ); // confirm method scene loaded - await expect(page).toMatchElement('h2', { text: 'Get Content Metadata' }) + await expect(page).toMatchElement('h2', { text: 'Get Content Metadata' }); // confirm url and query param are set correctly await expect(page.url()).toEqual( `${v40}/methods/Content/content_metadata?sdk=py&e=${errorCode}` - ) + ); // confirm correct response tab is selected await expect(page).toMatchElement('button[aria-selected=true]', { text: '400: Bad Request', - }) + }); // confirm error detail md file was fetched await expect(page).toMatchElement('h2', { text: `API Response ${errorCode} for `, - }) - }) - }) + }); + }); + }); describe('outbound navigation', () => { it('should be able to navigate from a method to Github', async () => { - await goToPage(`${v40}/methods/Dashboard/all_dashboards`) + await goToPage(`${v40}/methods/Dashboard/all_dashboards`); const exampleLink = await page.$( 'table[aria-label="SDK Examples"] a[class*=Link][target=_blank' - ) - expect(exampleLink).not.toBeNull() + ); + expect(exampleLink).not.toBeNull(); // Suggested/intuitive method of waiting for navigation does not seem to be working and just waits indefinitely on the target page // await Promise.all([ // page.waitForNavigation({timeout:5000}), // exampleLink.click() // ]) - await exampleLink?.click() - await page.waitForTimeout(150) + await exampleLink?.click(); + await page.waitForTimeout(150); - const body = await page.$('body') + const body = await page.$('body'); const codeMatch = await page.evaluate( (e) => e.innerText.match('all_dashboards\\('), body - ) - expect(codeMatch).not.toBeNull() - }) - }) + ); + expect(codeMatch).not.toBeNull(); + }); + }); describe('search', () => { beforeEach(async () => { - await goToPage(v40) - }) + await goToPage(v40); + }); afterEach(async () => { await page.evaluate(() => { - localStorage.clear() - }) - }) + localStorage.clear(); + }); + }); it('searches methods', async () => { - await expect(page).toFill('input[aria-label="Search"]', 'get workspace') + await expect(page).toFill('input[aria-label="Search"]', 'get workspace'); // TODO: find a better way to avoid the scenario where L215 executes before search returns - await page.waitForTimeout(250) + await page.waitForTimeout(250); await expect(page).toMatchElement('button', { text: 'Methods (1)', - }) - await expect(page).toMatchElement('button', { text: 'Types (0)' }) - await expect(page).toClick('a', { text: 'Get Workspace' }) - await expect(page).toMatchElement('h2', { text: 'Get Workspace' }) + }); + await expect(page).toMatchElement('button', { text: 'Types (0)' }); + await expect(page).toClick('a', { text: 'Get Workspace' }); + await expect(page).toMatchElement('h2', { text: 'Get Workspace' }); await expect(page.url()).toEqual( `${v40}/methods/Workspace/workspace?sdk=py&s=get+workspace` - ) - }) + ); + }); it('searches types', async () => { - await expect(page).toFill('input[aria-label="Search"]', 'writetheme') - await page.waitForTimeout(250) + await expect(page).toFill('input[aria-label="Search"]', 'writetheme'); + await page.waitForTimeout(250); await expect(page).toMatchElement('button', { text: 'Methods (0)', - }) - await expect(page).toClick('button', { text: 'Types (1)' }) - await expect(page).toClick('a', { text: 'WriteTheme' }) - await expect(page).toMatchElement('h2', { text: 'WriteTheme' }) + }); + await expect(page).toClick('button', { text: 'Types (1)' }); + await expect(page).toClick('a', { text: 'WriteTheme' }); + await expect(page).toMatchElement('h2', { text: 'WriteTheme' }); await expect(page.url()).toEqual( `${v40}/types/Theme/WriteTheme?sdk=py&s=writetheme` - ) - }) - }) -}) + ); + }); + }); +}); diff --git a/packages/api-explorer/e2e/helpers.ts b/packages/api-explorer/e2e/helpers.ts index 2d3bc460a..1a8ab403e 100644 --- a/packages/api-explorer/e2e/helpers.ts +++ b/packages/api-explorer/e2e/helpers.ts @@ -27,16 +27,16 @@ /** * Constants */ -export const BASE_URL = 'https://localhost:8080' -export const v31Url = `${BASE_URL}/3.1` -export const v40Url = `${BASE_URL}/4.0` +export const BASE_URL = 'https://localhost:8080'; +export const v31Url = `${BASE_URL}/3.1`; +export const v40Url = `${BASE_URL}/4.0`; /** * Reloads the page, waiting for for the DomContentLoaded event before resolving */ export const pageReload = async (): Promise => { - await page.reload({ waitUntil: ['domcontentloaded', 'networkidle0'] }) -} + await page.reload({ waitUntil: ['domcontentloaded', 'networkidle0'] }); +}; /** * Navigates to the given url, waiting for the DomContentLoaded event before resolving @@ -46,14 +46,14 @@ export const goToPage = async (url: string): Promise => { await page.goto(url, { waitUntil: ['domcontentloaded', 'networkidle0'], timeout: 120000, - }) -} + }); +}; /** * Gets the key of the selected spec */ export const getSpecKey = async (): Promise => { - const specSelectorHandle = await page.$('input[aria-label="spec selector"]') - const specKey = await page.evaluate((e) => e.value, specSelectorHandle) - return specKey -} + const specSelectorHandle = await page.$('input[aria-label="spec selector"]'); + const specKey = await page.evaluate((e) => e.value, specSelectorHandle); + return specKey; +}; diff --git a/packages/api-explorer/jest-puppeteer.config.js b/packages/api-explorer/jest-puppeteer.config.js index f06a1df9d..1d2cc2157 100644 --- a/packages/api-explorer/jest-puppeteer.config.js +++ b/packages/api-explorer/jest-puppeteer.config.js @@ -24,7 +24,7 @@ */ -const base = require('../../jest.config') +const base = require('../../jest.config'); module.exports = { ...base, rootDir: '../..', @@ -51,4 +51,4 @@ module.exports = { port: 8080, launchTimeout: 50000, }, -} +}; diff --git a/packages/api-explorer/jest.config.js b/packages/api-explorer/jest.config.js index 600c8b105..92c9f4d83 100644 --- a/packages/api-explorer/jest.config.js +++ b/packages/api-explorer/jest.config.js @@ -23,18 +23,15 @@ SOFTWARE. */ -const base = require('../../jest.config') -const packageName = require('./package.json').name.split('/')[1] +const base = require('../../jest.config'); +const packageName = require('./package.json').name.split('/')[1]; module.exports = { ...base, displayName: packageName, name: packageName, rootDir: '../..', - setupFilesAfterEnv: [ - ...base.setupFilesAfterEnv, - '@testing-library/jest-dom/extend-expect', - ], + setupFilesAfterEnv: [...base.setupFilesAfterEnv, '@testing-library/jest-dom'], testMatch: [`/packages/${packageName}/**/*.(spec|test).(ts|js)?(x)`], testEnvironment: 'jsdom', -} +}; diff --git a/packages/api-explorer/package.json b/packages/api-explorer/package.json index 0b72f33c2..c6a83d6f3 100644 --- a/packages/api-explorer/package.json +++ b/packages/api-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@looker/api-explorer", - "version": "0.9.52", + "version": "0.9.58", "description": "Looker API Explorer", "main": "lib/index.js", "module": "lib/esm/index.js", @@ -33,25 +33,25 @@ }, "devDependencies": { "@looker/components-test-utils": "^1.5.27", - "@looker/sdk-codegen-scripts": "^21.5.9", - "@looker/sdk-node": "^23.16.0", + "@looker/sdk-codegen-scripts": "21.5.15", + "@looker/sdk-node": "24.2.1", "@styled-icons/styled-icon": "^10.6.3", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^11.2.2", - "@testing-library/react-hooks": "^8.0.1", - "@testing-library/user-event": "^12.6.0", + "@testing-library/jest-dom": "5.16.5", + "@testing-library/react": "12.1.5", + "@testing-library/react-hooks": "8.0.1", + "@testing-library/user-event": "13.1.5", "@types/expect-puppeteer": "^4.4.6", "@types/jest-environment-puppeteer": "^4.4.1", - "@types/lodash": "^4.14.157", + "@types/lodash": "4.14.172", "@types/puppeteer": "^5.4.4", - "@types/react": "^16.14.2", - "@types/react-dom": "^16.9.6", - "@types/react-router": "^5.1.11", - "@types/react-router-dom": "^5.1.5", - "@types/react-test-renderer": "^16.9.3", + "@types/react": "17.0.65", + "@types/react-dom": "^17.0.25", + "@types/react-router": "5.1.20", + "@types/react-router-dom": "5.3.3", + "@types/react-test-renderer": "^17.0.9", "@types/redux": "^3.6.0", - "@types/redux-saga-tester": "^1.0.3", - "@types/styled-components": "^5.1.7", + "@types/redux-saga-tester": "^1.0.4", + "@types/styled-components": "^5.1.26", "@types/styled-system": "5.1.13", "babel-loader": "^8.1.0", "css-loader": "^6.7.3", @@ -60,41 +60,41 @@ "jest-localstorage-mock": "^2.4.9", "jest-puppeteer": "^5.0.4", "puppeteer": "^10.1.0", - "react-test-renderer": "^17.0.1", + "react-test-renderer": "^17.0.2", "redux-saga-tester": "^1.0.874", "style-loader": "^1.1.3", "ts-jest": "^29.0.5", - "webpack-bundle-analyzer": "^4.2.0", - "webpack-cli": "^4.10.0", - "webpack-dev-server": "^4.11.1", + "webpack-bundle-analyzer": "^4.4.1", + "webpack-cli": "5.0.1", + "webpack-dev-server": "4.15.1", "webpack-merge": "^5.7.3" }, "dependencies": { - "@looker/code-editor": "^0.1.30", - "@looker/components": "^4.1.1", + "@looker/code-editor": "0.1.30", + "@looker/components": "^4.1.3", "@looker/design-tokens": "^3.1.0", - "@looker/extension-utils": "^0.1.29", + "@looker/extension-utils": "0.1.35", "@looker/icons": "^1.5.21", "@looker/redux": "^0.0.1", - "@looker/run-it": "^0.9.52", - "@looker/sdk": "^23.16.0", - "@looker/sdk-codegen": "^21.8.2", - "@looker/sdk-rtl": "^21.6.1", - "@reduxjs/toolkit": "^1.6.2", - "@styled-icons/material": "^10.28.0", - "@styled-icons/material-outlined": "^10.28.0", + "@looker/run-it": "0.9.58", + "@looker/sdk": "24.2.1", + "@looker/sdk-codegen": "21.8.2", + "@looker/sdk-rtl": "21.6.1", + "@reduxjs/toolkit": "^1.9.3", + "@styled-icons/material": "^10.47.0", + "@styled-icons/material-outlined": "^10.47.0", "@styled-icons/material-rounded": "^10.28.0", "history": "^4.10.1", - "lodash": "^4.17.19", - "react": "^16.14.0", - "react-diff-viewer": "^3.1.1", - "react-dom": "^16.14.0", - "react-is": "^16.13.1", - "react-redux": "^7.2.3", + "lodash": "4.17.21", + "react": "^17.0.2", + "react-diff-viewer": "3.1.1", + "react-dom": "^17.0.2", + "react-is": "^17.0.2", + "react-redux": "^7.2.9", "react-router": "^5.3.4", "react-router-dom": "^5.3.4", "redux": "^4.0.5", - "styled-components": "^5.2.1", - "typed-redux-saga": "^1.3.1" + "styled-components": "^5.3.1", + "typed-redux-saga": "^1.5.0" } } diff --git a/packages/api-explorer/public/Looker.4.0.json b/packages/api-explorer/public/Looker.4.0.json index 9f735e806..a3b1e9bea 100644 --- a/packages/api-explorer/public/Looker.4.0.json +++ b/packages/api-explorer/public/Looker.4.0.json @@ -1,10 +1,10 @@ { "swagger": "2.0", "info": { - "version": "4.0.22.4", - "x-looker-release-version": "22.4.15", + "version": "4.0.23.18", + "x-looker-release-version": "23.18.41", "title": "Looker API 4.0 Reference", - "description": "\nAPI 4.0 is the current release of the Looker API. API 3.1 is deprecated.\n\n### Authorization\n\nThe classic method of API authorization uses Looker **API3** credentials for authorization and access control.\nLooker admins can create API3 credentials on Looker's **Admin/Users** page.\n\nAPI 4.0 adds additional ways to authenticate API requests, including OAuth and CORS requests.\n\nFor details, see [Looker API Authorization](https://looker.com/docs/r/api/authorization).\n\n\n### API Explorer\n\nThe API Explorer is a Looker-provided utility with many new and unique features for learning and using the Looker API and SDKs.\n\nFor details, see the [API Explorer documentation](https://looker.com/docs/r/api/explorer).\n\n\n### Looker Language SDKs\n\nThe Looker API is a RESTful system that should be usable by any programming language capable of making\nHTTPS requests. SDKs for a variety of programming languages are also provided to streamline using the API. Looker\nhas an OpenSource [sdk-codegen project](https://github.com/looker-open-source/sdk-codegen) that provides several\nlanguage SDKs. Language SDKs generated by `sdk-codegen` have an Authentication manager that can automatically\nauthenticate API requests when needed.\n\nFor details on available Looker SDKs, see [Looker API Client SDKs](https://looker.com/docs/r/api/client_sdks).\n\n\n### API Versioning\n\nFuture releases of Looker expand the latest API version release-by-release to securely expose more and more of the core\npower of the Looker platform to API client applications. API endpoints marked as \"beta\" may receive breaking changes without\nwarning (but we will try to avoid doing that). Stable (non-beta) API endpoints should not receive breaking\nchanges in future releases.\n\nFor details, see [Looker API Versioning](https://looker.com/docs/r/api/versioning).\n\n\n### In This Release\n\nAPI 4.0 version was introduced to make adjustments to API functions, parameters, and response types to\nfix bugs and inconsistencies. These changes fall outside the bounds of non-breaking additive changes we can\nmake to the previous API 3.1.\n\nOne benefit of these type adjustments in API 4.0 is dramatically better support for strongly\ntyped languages like TypeScript, Kotlin, Swift, Go, C#, and more.\n\nSee the [API 4.0 GA announcement](https://developers.looker.com/api/advanced-usage/version-4-ga) for more information\nabout API 4.0.\n\nThe API Explorer can be used to [interactively compare](https://looker.com/docs/r/api/explorer#comparing_api_versions) the differences between API 3.1 and 4.0.\n\n\n### API and SDK Support Policies\n\nLooker API versions and language SDKs have varying support levels. Please read the API and SDK\n[support policies](https://looker.com/docs/r/api/support-policy) for more information.\n\n\n", + "description": "\nAPI 4.0 is the current release of the Looker API. API 3.1 is deprecated.\n\n### Authorization\n\nThe classic method of API authorization uses Looker **API** credentials for authorization and access control.\nLooker admins can create API credentials on Looker's **Admin/Users** page.\n\nAPI 4.0 adds additional ways to authenticate API requests, including OAuth and CORS requests.\n\nFor details, see [Looker API Authorization](https://cloud.google.com/looker/docs/r/api/authorization).\n\n\n### API Explorer\n\nThe API Explorer is a Looker-provided utility with many new and unique features for learning and using the Looker API and SDKs.\n\nFor details, see the [API Explorer documentation](https://cloud.google.com/looker/docs/r/api/explorer).\n\n\n### Looker Language SDKs\n\nThe Looker API is a RESTful system that should be usable by any programming language capable of making\nHTTPS requests. SDKs for a variety of programming languages are also provided to streamline using the API. Looker\nhas an OpenSource [sdk-codegen project](https://github.com/looker-open-source/sdk-codegen) that provides several\nlanguage SDKs. Language SDKs generated by `sdk-codegen` have an Authentication manager that can automatically\nauthenticate API requests when needed.\n\nFor details on available Looker SDKs, see [Looker API Client SDKs](https://cloud.google.com/looker/docs/r/api/client_sdks).\n\n\n### API Versioning\n\nFuture releases of Looker expand the latest API version release-by-release to securely expose more and more of the core\npower of the Looker platform to API client applications. API endpoints marked as \"beta\" may receive breaking changes without\nwarning (but we will try to avoid doing that). Stable (non-beta) API endpoints should not receive breaking\nchanges in future releases.\n\nFor details, see [Looker API Versioning](https://cloud.google.com/looker/docs/r/api/versioning).\n\n\n### In This Release\n\nAPI 4.0 version was introduced to make adjustments to API functions, parameters, and response types to\nfix bugs and inconsistencies. These changes fall outside the bounds of non-breaking additive changes we can\nmake to the previous API 3.1.\n\nOne benefit of these type adjustments in API 4.0 is dramatically better support for strongly\ntyped languages like TypeScript, Kotlin, Swift, Go, C#, and more.\n\nSee the [API 4.0 GA announcement](https://developers.looker.com/api/advanced-usage/version-4-ga) for more information\nabout API 4.0.\n\nThe API Explorer can be used to [interactively compare](https://cloud.google.com/looker/docs/r/api/explorer#comparing_api_versions) the differences between API 3.1 and 4.0.\n\n\n### API and SDK Support Policies\n\nLooker API versions and language SDKs have varying support levels. Please read the API and SDK\n[support policies](https://cloud.google.com/looker/docs/r/api/support-policy) for more information.\n\n\n", "contact": { "name": "Looker Team", "url": "https://help.looker.com" @@ -15,10 +15,16 @@ } }, "basePath": "/api/4.0", - "consumes": ["application/json"], - "produces": ["application/json"], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], "host": "localhost:20000", - "schemes": ["https"], + "schemes": [ + "https" + ], "tags": [ { "name": "Alert", @@ -28,6 +34,10 @@ "name": "ApiAuth", "description": "API Authentication" }, + { + "name": "Artifact", + "description": "Artifact Storage" + }, { "name": "Auth", "description": "Manage User Authentication Configuration" @@ -120,6 +130,10 @@ "name": "Session", "description": "Session Information" }, + { + "name": "SqlInterfaceQuery", + "description": "Run and Manage SQL Interface Queries" + }, { "name": "Theme", "description": "Manage Themes" @@ -140,7 +154,9 @@ "paths": { "/query_tasks": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_query_task", "summary": "Run Query Async", "description": "### Create an async query task\n\nCreates a query task (job) to run a previously created query asynchronously. Returns a Query Task ID.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task.\nAfter the query task status reaches \"Complete\", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query.\n", @@ -183,22 +199,6 @@ "required": false, "type": "boolean" }, - { - "name": "image_width", - "in": "query", - "description": "Render width for image formats.", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "image_height", - "in": "query", - "description": "Render height for image formats.", - "required": false, - "type": "integer", - "format": "int64" - }, { "name": "generate_drill_links", "in": "query", @@ -209,7 +209,7 @@ { "name": "force_production", "in": "query", - "description": "Force use of production models even if the user is in development mode.", + "description": "Force use of production models even if the user is in development mode. Note that this flag being false does not guarantee development models will be used.", "required": false, "type": "boolean" }, @@ -241,6 +241,24 @@ "required": false, "type": "boolean" }, + { + "name": "image_width", + "in": "query", + "description": "DEPRECATED. Render width for image formats. Note that this parameter is always ignored by this method.", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "image_height", + "in": "query", + "description": "DEPRECATED. Render height for image formats. Note that this parameter is always ignored by this method.", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, { "name": "fields", "in": "query", @@ -287,13 +305,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/query_tasks/multi_results": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_task_multi_results", "summary": "Get Multiple Async Query Results", "description": "### Fetch results of multiple async queries\n\nReturns the results of multiple async queries in one request.\n\nFor Query Tasks that are not completed, the response will include the execution status of the Query Task but will not include query results.\nQuery Tasks whose results have expired will have a status of 'expired'.\nIf the user making the API request does not have sufficient privileges to view a Query Task result, the result will have a status of 'missing'\n", @@ -334,13 +354,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/query_tasks/{query_task_id}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_task", "summary": "Get Async Query Info", "description": "### Get Query Task details\n\nUse this function to check the status of an async query task. After the status\nreaches \"Complete\", you can call [query_task_results(query_task_id)](#!/Query/query_task_results) to\nretrieve the results of the query.\n\nUse [create_query_task()](#!/Query/create_query_task) to create an async query task.\n", @@ -380,17 +402,22 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/query_tasks/{query_task_id}/results": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_task_results", "summary": "Get Async Query Results", "description": "### Get Async Query Results\n\nReturns the results of an async query task if the query has completed.\n\nIf the query task is still running or waiting to run, this function returns 204 No Content.\n\nIf the query task ID is invalid or the cached results of the query task have expired, this function returns 404 Not Found.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task\nCall query_task_results only after the query task status reaches \"Complete\".\n\nYou can also use [query_task_multi_results()](#!/Query/query_task_multi_results) retrieve the\nresults of multiple async query tasks at the same time.\n\n#### SQL Error Handling:\nIf the query fails due to a SQL db error, how this is communicated depends on the result_format you requested in `create_query_task()`.\n\nFor `json_detail` result_format: `query_task_results()` will respond with HTTP status '200 OK' and db SQL error info\nwill be in the `errors` property of the response object. The 'data' property will be empty.\n\nFor all other result formats: `query_task_results()` will respond with HTTP status `400 Bad Request` and some db SQL error info\nwill be in the message of the 400 error response, but not as detailed as expressed in `json_detail.errors`.\nThese data formats can only carry row data, and error info is not row data.\n", - "produces": ["text", "application/json"], + "produces": [ + "text", + "application/json" + ], "parameters": [ { "name": "query_task_id", @@ -426,13 +453,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/queries/{query_id}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query", "summary": "Get Query", "description": "### Get a previously created query by id.\n\nA Looker query object includes the various parameters that define a database query that has been run or\ncould be run in the future. These parameters include: model, view, fields, filters, pivots, etc.\nQuery *results* are not part of the query object.\n\nQuery objects are unique and immutable. Query objects are created automatically in Looker as users explore data.\nLooker does not delete them; they become part of the query history. When asked to create a query for\nany given set of parameters, Looker will first try to find an existing query object with matching\nparameters and will only create a new object when an appropriate object can not be found.\n\nThis 'get' method is used to get the details about a query for a given id. See the other methods here\nto 'create' and 'run' queries.\n\nNote that some fields like 'filter_config' and 'vis_config' etc are specific to how the Looker UI\nbuilds queries and visualizations and are not generally useful for API use. They are not required when\ncreating new queries and can usually just be ignored.\n\n", @@ -478,7 +507,9 @@ }, "/queries/slug/{slug}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "query_for_slug", "summary": "Get Query for Slug", "description": "### Get the query for a given query slug.\n\nThis returns the query for the 'slug' in a query share URL.\n\nThe 'slug' is a randomly chosen short string that is used as an alternative to the query's id value\nfor use in URLs etc. This method exists as a convenience to help you use the API to 'find' queries that\nhave been created using the Looker UI.\n\nYou can use the Looker explore page to build a query and then choose the 'Share' option to\nshow the share url for the query. Share urls generally look something like 'https://looker.yourcompany/x/vwGSbfc'.\nThe trailing 'vwGSbfc' is the share slug. You can pass that string to this api method to get details about the query.\nThose details include the 'id' that you can use to run the query. Or, you can copy the query body\n(perhaps with your own modification) and use that as the basis to make/run new queries.\n\nThis will also work with slugs from Looker explore urls like\n'https://looker.yourcompany/explore/ecommerce/orders?qid=aogBgL6o3cKK1jN3RoZl5s'. In this case\n'aogBgL6o3cKK1jN3RoZl5s' is the slug.\n", @@ -524,7 +555,9 @@ }, "/queries": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_query", "summary": "Create Query", "description": "### Create a query.\n\nThis allows you to create a new query that you can later run. Looker queries are immutable once created\nand are not deleted. If you create a query that is exactly like an existing query then the existing query\nwill be returned and no new query will be created. Whether a new query is created or not, you can use\nthe 'id' in the returned query with the 'run' method.\n\nThe query parameters are passed as json in the body of the request.\n\n", @@ -590,11 +623,18 @@ }, "/queries/{query_id}/run/{result_format}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_query", "summary": "Run Query", - "description": "### Run a saved query.\n\nThis runs a previously saved query. You can use this on a query that was generated in the Looker UI\nor one that you have explicitly created using the API. You can also use a query 'id' from a saved 'Look'.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "description": "### Run a saved query.\n\nThis runs a previously saved query. You can use this on a query that was generated in the Looker UI\nor one that you have explicitly created using the API. You can also use a query 'id' from a saved 'Look'.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "query_id", @@ -665,7 +705,7 @@ { "name": "force_production", "in": "query", - "description": "Force use of production models even if the user is in development mode.", + "description": "Force use of production models even if the user is in development mode. Note that this flag being false does not guarantee development models will be used.", "required": false, "type": "boolean" }, @@ -743,11 +783,18 @@ }, "/queries/run/{result_format}": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_inline_query", "summary": "Run Inline Query", - "description": "### Run the query that is specified inline in the posted body.\n\nThis allows running a query as defined in json in the posted body. This combines\nthe two actions of posting & running a query into one step.\n\nHere is an example body in json:\n```\n{\n \"model\":\"thelook\",\n \"view\":\"inventory_items\",\n \"fields\":[\"category.name\",\"inventory_items.days_in_inventory_tier\",\"products.count\"],\n \"filters\":{\"category.name\":\"socks\"},\n \"sorts\":[\"products.count desc 0\"],\n \"limit\":\"500\",\n \"query_timezone\":\"America/Los_Angeles\"\n}\n```\n\nWhen using the Ruby SDK this would be passed as a Ruby hash like:\n```\n{\n :model=>\"thelook\",\n :view=>\"inventory_items\",\n :fields=>\n [\"category.name\",\n \"inventory_items.days_in_inventory_tier\",\n \"products.count\"],\n :filters=>{:\"category.name\"=>\"socks\"},\n :sorts=>[\"products.count desc 0\"],\n :limit=>\"500\",\n :query_timezone=>\"America/Los_Angeles\",\n}\n```\n\nThis will return the result of running the query in the format specified by the 'result_format' parameter.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "description": "### Run the query that is specified inline in the posted body.\n\nThis allows running a query as defined in json in the posted body. This combines\nthe two actions of posting & running a query into one step.\n\nHere is an example body in json:\n```\n{\n \"model\":\"thelook\",\n \"view\":\"inventory_items\",\n \"fields\":[\"category.name\",\"inventory_items.days_in_inventory_tier\",\"products.count\"],\n \"filters\":{\"category.name\":\"socks\"},\n \"sorts\":[\"products.count desc 0\"],\n \"limit\":\"500\",\n \"query_timezone\":\"America/Los_Angeles\"\n}\n```\n\nWhen using the Ruby SDK this would be passed as a Ruby hash like:\n```\n{\n :model=>\"thelook\",\n :view=>\"inventory_items\",\n :fields=>\n [\"category.name\",\n \"inventory_items.days_in_inventory_tier\",\n \"products.count\"],\n :filters=>{:\"category.name\"=>\"socks\"},\n :sorts=>[\"products.count desc 0\"],\n :limit=>\"500\",\n :query_timezone=>\"America/Los_Angeles\",\n}\n```\n\nThis will return the result of running the query in the format specified by the 'result_format' parameter.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "result_format", @@ -820,7 +867,7 @@ { "name": "force_production", "in": "query", - "description": "Force use of production models even if the user is in development mode.", + "description": "Force use of production models even if the user is in development mode. Note that this flag being false does not guarantee development models will be used.", "required": false, "type": "boolean" }, @@ -891,11 +938,18 @@ }, "/queries/models/{model_name}/views/{view_name}/run/{result_format}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_url_encoded_query", "summary": "Run Url Encoded Query", - "description": "### Run an URL encoded query.\n\nThis requires the caller to encode the specifiers for the query into the URL query part using\nLooker-specific syntax as explained below.\n\nGenerally, you would want to use one of the methods that takes the parameters as json in the POST body\nfor creating and/or running queries. This method exists for cases where one really needs to encode the\nparameters into the URL of a single 'GET' request. This matches the way that the Looker UI formats\n'explore' URLs etc.\n\nThe parameters here are very similar to the json body formatting except that the filter syntax is\ntricky. Unfortunately, this format makes this method not currently callable via the 'Try it out!' button\nin this documentation page. But, this is callable when creating URLs manually or when using the Looker SDK.\n\nHere is an example inline query URL:\n\n```\nhttps://looker.mycompany.com:19999/api/3.0/queries/models/thelook/views/inventory_items/run/json?fields=category.name,inventory_items.days_in_inventory_tier,products.count&f[category.name]=socks&sorts=products.count+desc+0&limit=500&query_timezone=America/Los_Angeles\n```\n\nWhen invoking this endpoint with the Ruby SDK, pass the query parameter parts as a hash. The hash to match the above would look like:\n\n```ruby\nquery_params =\n{\n fields: \"category.name,inventory_items.days_in_inventory_tier,products.count\",\n :\"f[category.name]\" => \"socks\",\n sorts: \"products.count desc 0\",\n limit: \"500\",\n query_timezone: \"America/Los_Angeles\"\n}\nresponse = ruby_sdk.run_url_encoded_query('thelook','inventory_items','json', query_params)\n\n```\n\nAgain, it is generally easier to use the variant of this method that passes the full query in the POST body.\nThis method is available for cases where other alternatives won't fit the need.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "description": "### Run an URL encoded query.\n\nThis requires the caller to encode the specifiers for the query into the URL query part using\nLooker-specific syntax as explained below.\n\nGenerally, you would want to use one of the methods that takes the parameters as json in the POST body\nfor creating and/or running queries. This method exists for cases where one really needs to encode the\nparameters into the URL of a single 'GET' request. This matches the way that the Looker UI formats\n'explore' URLs etc.\n\nThe parameters here are very similar to the json body formatting except that the filter syntax is\ntricky. Unfortunately, this format makes this method not currently callable via the 'Try it out!' button\nin this documentation page. But, this is callable when creating URLs manually or when using the Looker SDK.\n\nHere is an example inline query URL:\n\n```\nhttps://looker.mycompany.com:19999/api/4.0/queries/models/thelook/views/inventory_items/run/json?fields=category.name,inventory_items.days_in_inventory_tier,products.count&f[category.name]=socks&sorts=products.count+desc+0&limit=500&query_timezone=America/Los_Angeles\n```\n\nWhen invoking this endpoint with the Ruby SDK, pass the query parameter parts as a hash. The hash to match the above would look like:\n\n```ruby\nquery_params =\n{\n fields: \"category.name,inventory_items.days_in_inventory_tier,products.count\",\n :\"f[category.name]\" => \"socks\",\n sorts: \"products.count desc 0\",\n limit: \"500\",\n query_timezone: \"America/Los_Angeles\"\n}\nresponse = ruby_sdk.run_url_encoded_query('thelook','inventory_items','json', query_params)\n\n```\n\nAgain, it is generally easier to use the variant of this method that passes the full query in the POST body.\nThis method is available for cases where other alternatives won't fit the need.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "model_name", @@ -957,23 +1011,27 @@ }, "/login": { "post": { - "tags": ["ApiAuth"], + "tags": [ + "ApiAuth" + ], "operationId": "login", "summary": "Login", - "description": "### Present client credentials to obtain an authorization token\n\nLooker API implements the OAuth2 [Resource Owner Password Credentials Grant](https://looker.com/docs/r/api/outh2_resource_owner_pc) pattern.\nThe client credentials required for this login must be obtained by creating an API3 key on a user account\nin the Looker Admin console. The API3 key consists of a public `client_id` and a private `client_secret`.\n\nThe access token returned by `login` must be used in the HTTP Authorization header of subsequent\nAPI requests, like this:\n```\nAuthorization: token 4QDkCyCtZzYgj4C2p2cj3csJH7zqS5RzKs2kTnG4\n```\nReplace \"4QDkCy...\" with the `access_token` value returned by `login`.\nThe word `token` is a string literal and must be included exactly as shown.\n\nThis function can accept `client_id` and `client_secret` parameters as URL query params or as www-form-urlencoded params in the body of the HTTP request. Since there is a small risk that URL parameters may be visible to intermediate nodes on the network route (proxies, routers, etc), passing credentials in the body of the request is considered more secure than URL params.\n\nExample of passing credentials in the HTTP request body:\n````\nPOST HTTP /login\nContent-Type: application/x-www-form-urlencoded\n\nclient_id=CGc9B7v7J48dQSJvxxx&client_secret=nNVS9cSS3xNpSC9JdsBvvvvv\n````\n\n### Best Practice:\nAlways pass credentials in body params. Pass credentials in URL query params **only** when you cannot pass body params due to application, tool, or other limitations.\n\nFor more information and detailed examples of Looker API authorization, see [How to Authenticate to Looker API3](https://github.com/looker/looker-sdk-ruby/blob/master/authentication.md).\n", - "consumes": ["application/x-www-form-urlencoded"], + "description": "### Present client credentials to obtain an authorization token\n\nLooker API implements the OAuth2 [Resource Owner Password Credentials Grant](https://cloud.google.com/looker/docs/r/api/outh2_resource_owner_pc) pattern.\nThe client credentials required for this login must be obtained by creating an API key on a user account\nin the Looker Admin console. The API key consists of a public `client_id` and a private `client_secret`.\n\nThe access token returned by `login` must be used in the HTTP Authorization header of subsequent\nAPI requests, like this:\n```\nAuthorization: token 4QDkCyCtZzYgj4C2p2cj3csJH7zqS5RzKs2kTnG4\n```\nReplace \"4QDkCy...\" with the `access_token` value returned by `login`.\nThe word `token` is a string literal and must be included exactly as shown.\n\nThis function can accept `client_id` and `client_secret` parameters as URL query params or as www-form-urlencoded params in the body of the HTTP request. Since there is a small risk that URL parameters may be visible to intermediate nodes on the network route (proxies, routers, etc), passing credentials in the body of the request is considered more secure than URL params.\n\nExample of passing credentials in the HTTP request body:\n````\nPOST HTTP /login\nContent-Type: application/x-www-form-urlencoded\n\nclient_id=CGc9B7v7J48dQSJvxxx&client_secret=nNVS9cSS3xNpSC9JdsBvvvvv\n````\n\n### Best Practice:\nAlways pass credentials in body params. Pass credentials in URL query params **only** when you cannot pass body params due to application, tool, or other limitations.\n\nFor more information and detailed examples of Looker API authorization, see [How to Authenticate to Looker API](https://github.com/looker/looker-sdk-ruby/blob/master/authentication.md).\n", + "consumes": [ + "application/x-www-form-urlencoded" + ], "parameters": [ { "name": "client_id", "in": "query", - "description": "client_id part of API3 Key.", + "description": "client_id part of API Key.", "required": false, "type": "string" }, { "name": "client_secret", "in": "query", - "description": "client_secret part of API3 Key.", + "description": "client_secret part of API Key.", "required": false, "type": "string" } @@ -1004,10 +1062,12 @@ }, "/login/{user_id}": { "post": { - "tags": ["ApiAuth"], + "tags": [ + "ApiAuth" + ], "operationId": "login_user", "summary": "Login user", - "description": "### Create an access token that runs as a given user.\n\nThis can only be called by an authenticated admin user. It allows that admin to generate a new\nauthentication token for the user with the given user id. That token can then be used for subsequent\nAPI calls - which are then performed *as* that target user.\n\nThe target user does *not* need to have a pre-existing API client_id/client_secret pair. And, no such\ncredentials are created by this call.\n\nThis allows for building systems where api user authentication for an arbitrary number of users is done\noutside of Looker and funneled through a single 'service account' with admin permissions. Note that a\nnew access token is generated on each call. If target users are going to be making numerous API\ncalls in a short period then it is wise to cache this authentication token rather than call this before\neach of those API calls.\n\nSee 'login' for more detail on the access token and how to use it.\n", + "description": "### Create an access token that runs as a given user.\n\nThis can only be called by an authenticated admin user. It allows that admin to generate a new\nauthentication token for the user with the given user id. That token can then be used for subsequent\nAPI calls - which are then performed *as* that target user.\n\nThe target user does *not* need to have a pre-existing API client_id/client_secret pair. And, no such\ncredentials are created by this call.\n\nThis allows for building systems where api user authentication for an arbitrary number of users is done\noutside of Looker and funneled through a single 'service account' with admin permissions. Note that a\nnew access token is generated on each call. If target users are going to be making numerous API\ncalls in a short period then it is wise to cache this authentication token rather than call this before\neach of those API calls.\n\nSee 'login' for more detail on the access token and how to use it.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "user_id", @@ -1037,6 +1097,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -1050,7 +1116,9 @@ }, "/logout": { "delete": { - "tags": ["ApiAuth"], + "tags": [ + "ApiAuth" + ], "operationId": "logout", "summary": "Logout", "description": "### Logout of the API and invalidate the current access token.\n", @@ -1078,9 +1146,91 @@ "x-looker-activity-type": "none" } }, + "/alerts/{alert_id}/follow": { + "post": { + "tags": [ + "Alert" + ], + "operationId": "follow_alert", + "summary": "Follow an alert", + "description": "Follow an alert.", + "parameters": [ + { + "name": "alert_id", + "in": "path", + "description": "ID of an alert", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "Successfully followed an alert." + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Alert" + ], + "operationId": "unfollow_alert", + "summary": "Unfollow an alert", + "description": "Unfollow an alert.", + "parameters": [ + { + "name": "alert_id", + "in": "path", + "description": "ID of an alert", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "Successfully unfollowed an alert." + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, "/alerts/search": { "get": { - "tags": ["Alert"], + "tags": [ + "Alert" + ], "operationId": "search_alerts", "summary": "Search Alerts", "description": "### Search Alerts\n", @@ -1187,13 +1337,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/alerts/{alert_id}": { "get": { - "tags": ["Alert"], + "tags": [ + "Alert" + ], "operationId": "get_alert", "summary": "Get an alert", "description": "### Get an alert by a given alert ID\n", @@ -1226,11 +1378,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Alert"], + "tags": [ + "Alert" + ], "operationId": "update_alert_field", "summary": "Update select fields on an alert", "description": "### Update select alert fields\n# Available fields: `owner_id`, `is_disabled`, `disabled_reason`, `is_public`, `threshold`\n#\n", @@ -1290,11 +1444,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Alert"], + "tags": [ + "Alert" + ], "operationId": "update_alert", "summary": "Update an alert", "description": "### Update an alert\n# Required fields: `owner_id`, `field`, `destinations`, `comparison_type`, `threshold`, `cron`\n#\n", @@ -1348,11 +1504,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Alert"], + "tags": [ + "Alert" + ], "operationId": "delete_alert", "summary": "Delete an alert", "description": "### Delete an alert by a given alert ID\n", @@ -1394,32 +1552,263 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/alerts": { + "post": { + "tags": [ + "Alert" + ], + "operationId": "create_alert", + "summary": "Create an alert", + "description": "### Create a new alert and return details of the newly created object\n\nRequired fields: `field`, `destinations`, `comparison_type`, `threshold`, `cron`\n\nExample Request:\nRun alert on dashboard element '103' at 5am every day. Send an email to 'test@test.com' if inventory for Los Angeles (using dashboard filter `Warehouse Name`) is lower than 1,000\n```\n{\n \"cron\": \"0 5 * * *\",\n \"custom_title\": \"Alert when LA inventory is low\",\n \"dashboard_element_id\": 103,\n \"applied_dashboard_filters\": [\n {\n \"filter_title\": \"Warehouse Name\",\n \"field_name\": \"distribution_centers.name\",\n \"filter_value\": \"Los Angeles CA\",\n \"filter_description\": \"is Los Angeles CA\"\n }\n ],\n \"comparison_type\": \"LESS_THAN\",\n \"destinations\": [\n {\n \"destination_type\": \"EMAIL\",\n \"email_address\": \"test@test.com\"\n }\n ],\n \"field\": {\n \"title\": \"Number on Hand\",\n \"name\": \"inventory_items.number_on_hand\"\n },\n \"is_disabled\": false,\n \"is_public\": true,\n \"threshold\": 1000\n}\n```\n", + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Alert", + "required": true, + "schema": { + "$ref": "#/definitions/Alert" + } + } + ], + "responses": { + "200": { + "description": "The alert is saved.", + "schema": { + "$ref": "#/definitions/Alert" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "405": { + "description": "Resource Can't Be Modified", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/alerts/{alert_id}/enqueue": { + "post": { + "tags": [ + "Alert" + ], + "operationId": "enqueue_alert", + "summary": "Enqueue an alert", + "description": "### Enqueue an Alert by ID\n", + "parameters": [ + { + "name": "alert_id", + "in": "path", + "description": "ID of an alert", + "required": true, + "type": "string" + }, + { + "name": "force", + "in": "query", + "description": "Whether to enqueue an alert again if its already running.", + "required": false, + "type": "boolean" + } + ], + "responses": { + "204": { + "description": "Alert successfully added to the queue. Does not indicate it has been run" + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/alert_notifications": { + "get": { + "tags": [ + "Alert" + ], + "operationId": "alert_notifications", + "summary": "Alert Notifications", + "description": "# Alert Notifications.\n The endpoint returns all the alert notifications received by the user on email in the past 7 days. It also returns whether the notifications have been read by the user.\n\n", + "parameters": [ + { + "name": "limit", + "in": "query", + "description": "(Optional) Number of results to return (used with `offset`).", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", + "in": "query", + "description": "(Optional) Number of results to skip before returning any (used with `limit`).", + "required": false, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "200": { + "description": "It shows all the alert notifications received by the user on email.", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/AlertNotifications" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, - "/alerts": { - "post": { - "tags": ["Alert"], - "operationId": "create_alert", - "summary": "Create an alert", - "description": "### Create a new alert and return details of the newly created object\n\nRequired fields: `field`, `destinations`, `comparison_type`, `threshold`, `cron`\n\nExample Request:\nRun alert on dashboard element '103' at 5am every day. Send an email to 'test@test.com' if inventory for Los Angeles (using dashboard filter `Warehouse Name`) is lower than 1,000\n```\n{\n \"cron\": \"0 5 * * *\",\n \"custom_title\": \"Alert when LA inventory is low\",\n \"dashboard_element_id\": 103,\n \"applied_dashboard_filters\": [\n {\n \"filter_title\": \"Warehouse Name\",\n \"field_name\": \"distribution_centers.name\",\n \"filter_value\": \"Los Angeles CA\",\n \"filter_description\": \"is Los Angeles CA\"\n }\n ],\n \"comparison_type\": \"LESS_THAN\",\n \"destinations\": [\n {\n \"destination_type\": \"EMAIL\",\n \"email_address\": \"test@test.com\"\n }\n ],\n \"field\": {\n \"title\": \"Number on Hand\",\n \"name\": \"inventory_items.number_on_hand\"\n },\n \"is_disabled\": false,\n \"is_public\": true,\n \"threshold\": 1000\n}\n```\n", + "/alert_notifications/{alert_notification_id}": { + "patch": { + "tags": [ + "Alert" + ], + "operationId": "read_alert_notification", + "summary": "Read a Notification", + "description": "# Reads a Notification\n The endpoint marks a given alert notification as read by the user, in case it wasn't already read. The AlertNotification model is updated for this purpose. It returns the notification as a response.\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Alert", + "name": "alert_notification_id", + "in": "path", + "description": "ID of a notification", "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "It updates that the given alert notification has been read by the user", "schema": { - "$ref": "#/definitions/Alert" + "$ref": "#/definitions/AlertNotifications" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" } } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/artifact/usage": { + "get": { + "tags": [ + "Artifact" + ], + "operationId": "artifact_usage", + "summary": "Artifact store usage", + "description": "Get the maximum configured size of the entire artifact store, and the currently used storage in bytes.\n\n**Note**: The artifact storage API can only be used by Looker-built extensions.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Comma-delimited names of fields to return in responses. Omit for all fields", + "required": false, + "type": "string" + } ], "responses": { "200": { - "description": "The alert is saved.", + "description": "Artifact store statistics", "schema": { - "$ref": "#/definitions/Alert" + "$ref": "#/definitions/ArtifactUsage" } }, "400": { @@ -1434,14 +1823,74 @@ "$ref": "#/definitions/Error" } }, - "405": { - "description": "Resource Can't Be Modified", + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/Error" } + } + }, + "x-looker-status": "alpha", + "x-looker-activity-type": "non_query" + } + }, + "/artifact/namespaces": { + "get": { + "tags": [ + "Artifact" + ], + "operationId": "artifact_namespaces", + "summary": "Get namespaces and counts", + "description": "Get all artifact namespaces and the count of artifacts in each namespace\n\n**Note**: The artifact storage API can only be used by Looker-built extensions.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Comma-delimited names of fields to return in responses. Omit for all fields", + "required": false, + "type": "string" }, - "409": { - "description": "Resource Already Exists", + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset)", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (used with limit)", + "required": false, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "200": { + "description": "Artifact store namespace counts", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/ArtifactNamespace" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } @@ -1459,35 +1908,337 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "alpha", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/artifact/{namespace}/value": { + "get": { + "tags": [ + "Artifact" + ], + "operationId": "artifact_value", + "summary": "Get an artifact value", + "description": "### Return the value of an artifact\n\nThe MIME type for the API response is set to the `content_type` of the value\n\n**Note**: The artifact storage API can only be used by Looker-built extensions.\n\n", + "parameters": [ + { + "name": "namespace", + "in": "path", + "description": "Artifact storage namespace", + "required": true, + "type": "string" + }, + { + "name": "key", + "in": "query", + "description": "Artifact storage key. Namespace + Key must be unique", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Artifact value", + "schema": { + "type": "string" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "alpha", "x-looker-activity-type": "non_query" } }, - "/alerts/{alert_id}/enqueue": { - "post": { - "tags": ["Alert"], - "operationId": "enqueue_alert", - "summary": "Enqueue an alert", - "description": "### Enqueue an Alert by ID\n", + "/artifact/{namespace}/purge": { + "delete": { + "tags": [ + "Artifact" + ], + "operationId": "purge_artifacts", + "summary": "Purge artifacts", + "description": "Remove *all* artifacts from a namespace. Purged artifacts are permanently deleted\n\n**Note**: The artifact storage API can only be used by Looker-built extensions.\n\n", "parameters": [ { - "name": "alert_id", + "name": "namespace", "in": "path", - "description": "ID of an alert", + "description": "Artifact storage namespace", "required": true, "type": "string" + } + ], + "responses": { + "204": { + "description": "All artifacts are purged." }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "alpha", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/artifact/{namespace}/search": { + "get": { + "tags": [ + "Artifact" + ], + "operationId": "search_artifacts", + "summary": "Search artifacts", + "description": "### Search all key/value pairs in a namespace for matching criteria.\n\nReturns an array of artifacts matching the specified search criteria.\n\nKey search patterns use case-insensitive matching and can contain `%` and `_` as SQL LIKE pattern match wildcard expressions.\n\nThe parameters `min_size` and `max_size` can be used individually or together.\n\n- `min_size` finds artifacts with sizes greater than or equal to its value\n- `max_size` finds artifacts with sizes less than or equal to its value\n- using both parameters restricts the minimum and maximum size range for artifacts\n\n**NOTE**: Artifacts are always returned in alphanumeric order by key.\n\nGet a **single artifact** by namespace and key with [`artifact`](#!/Artifact/artifact)\n\n**Note**: The artifact storage API can only be used by Looker-built extensions.\n\n", + "parameters": [ { - "name": "force", + "name": "namespace", + "in": "path", + "description": "Artifact storage namespace", + "required": true, + "type": "string" + }, + { + "name": "fields", "in": "query", - "description": "Whether to enqueue an alert again if its already running.", + "description": "Comma-delimited names of fields to return in responses. Omit for all fields", "required": false, - "type": "boolean" + "type": "string" + }, + { + "name": "key", + "in": "query", + "description": "Key pattern to match", + "required": false, + "type": "string" + }, + { + "name": "user_ids", + "in": "query", + "description": "Ids of users who created or updated the artifact (comma-delimited list)", + "required": false, + "type": "string" + }, + { + "name": "min_size", + "in": "query", + "description": "Minimum storage size of the artifact", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "max_size", + "in": "query", + "description": "Maximum storage size of the artifact", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset)", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (used with limit)", + "required": false, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "200": { + "description": "Artifacts", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Artifact" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "alpha", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/artifact/{namespace}": { + "get": { + "tags": [ + "Artifact" + ], + "operationId": "artifact", + "summary": "Get one or more artifacts", + "description": "### Get one or more artifacts\n\nReturns an array of artifacts matching the specified key value(s).\n\n**Note**: The artifact storage API can only be used by Looker-built extensions.\n\n", + "parameters": [ + { + "name": "namespace", + "in": "path", + "description": "Artifact storage namespace", + "required": true, + "type": "string" + }, + { + "name": "key", + "in": "query", + "description": "Comma-delimited list of keys. Wildcards not allowed.", + "required": true, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Comma-delimited names of fields to return in responses. Omit for all fields", + "required": false, + "type": "string" + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset)", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (used with limit)", + "required": false, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "200": { + "description": "Created or updated artifacts", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Artifact" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "alpha", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Artifact" + ], + "operationId": "delete_artifact", + "summary": "Delete one or more artifacts", + "description": "### Delete one or more artifacts\n\nTo avoid rate limiting on deletion requests, multiple artifacts can be deleted at the same time by using a comma-delimited list of artifact keys.\n\n**Note**: The artifact storage API can only be used by Looker-built extensions.\n\n", + "parameters": [ + { + "name": "namespace", + "in": "path", + "description": "Artifact storage namespace", + "required": true, + "type": "string" + }, + { + "name": "key", + "in": "query", + "description": "Comma-delimited list of keys. Wildcards not allowed.", + "required": true, + "type": "string" } ], "responses": { "204": { - "description": "Alert successfully added to the queue. Does not indicate it has been run" + "description": "The artifact is deleted." }, "400": { "description": "Bad Request", @@ -1495,8 +2246,72 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "alpha", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/artifacts/{namespace}": { + "put": { + "tags": [ + "Artifact" + ], + "operationId": "update_artifacts", + "summary": "Create or update artifacts", + "description": "### Create or update one or more artifacts\n\nOnly `key` and `value` are required to _create_ an artifact.\nTo _update_ an artifact, its current `version` value must be provided.\n\nIn the following example `body` payload, `one` and `two` are existing artifacts, and `three` is new:\n\n```json\n[\n { \"key\": \"one\", \"value\": \"[ \\\"updating\\\", \\\"existing\\\", \\\"one\\\" ]\", \"version\": 10, \"content_type\": \"application/json\" },\n { \"key\": \"two\", \"value\": \"updating existing two\", \"version\": 20 },\n { \"key\": \"three\", \"value\": \"creating new three\" },\n]\n```\n\nNotes for this body:\n\n- The `value` for `key` **one** is a JSON payload, so a `content_type` override is needed. This override must be done **every** time a JSON value is set.\n- The `version` values for **one** and **two** mean they have been saved 10 and 20 times, respectively.\n- If `version` is **not** provided for an existing artifact, the entire request will be refused and a `Bad Request` response will be sent.\n- If `version` is provided for an artifact, it is only used for helping to prevent inadvertent data overwrites. It cannot be used to **set** the version of an artifact. The Looker server controls `version`.\n- We suggest encoding binary values as base64. Because the MIME content type for base64 is detected as plain text, also provide `content_type` to correctly indicate the value's type for retrieval and client-side processing.\n\nBecause artifacts are stored encrypted, the same value can be written multiple times (provided the correct `version` number is used). Looker does not examine any values stored in the artifact store, and only decrypts when sending artifacts back in an API response.\n\n**Note**: The artifact storage API can only be used by Looker-built extensions.\n\n", + "parameters": [ + { + "name": "namespace", + "in": "path", + "description": "Artifact storage namespace", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "Artifacts to create or update", + "required": true, + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/UpdateArtifact" + } + } + }, + { + "name": "fields", + "in": "query", + "description": "Comma-delimited names of fields to return in responses. Omit for all fields", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Created or updated artifacts", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Artifact" + } + } + }, + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } @@ -1507,6 +2322,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -1514,14 +2335,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "alpha", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, "/cloud_storage": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "cloud_storage_configuration", "summary": "Get Cloud Storage", "description": "Get the current Cloud Storage Configuration.\n", @@ -1545,11 +2368,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_cloud_storage_configuration", "summary": "Update Cloud Storage", "description": "Update the current Cloud Storage Configuration.\n", @@ -1590,13 +2415,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/color_collections": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "all_color_collections", "summary": "Get all Color Collections", "description": "### Get an array of all existing Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1632,11 +2459,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "create_color_collection", "summary": "Create ColorCollection", "description": "### Create a custom color collection with the specified information\n\nCreates a new custom color collection object, returning the details, including the created id.\n\n**Update** an existing color collection with [Update Color Collection](#!/ColorCollection/update_color_collection)\n\n**Permanently delete** an existing custom color collection with [Delete Color Collection](#!/ColorCollection/delete_color_collection)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1695,13 +2524,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/color_collections/custom": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "color_collections_custom", "summary": "Get all Custom Color Collections", "description": "### Get an array of all existing **Custom** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1737,13 +2568,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/color_collections/standard": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "color_collections_standard", "summary": "Get all Standard Color Collections", "description": "### Get an array of all existing **Standard** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1779,13 +2612,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/color_collections/default": { "put": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "set_default_color_collection", "summary": "Set Default Color Collection", "description": "### Set the global default Color Collection by ID\n\nReturns the new specified default Color Collection object.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1830,11 +2665,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "default_color_collection", "summary": "Get Default Color Collection", "description": "### Get the default color collection\n\nUse this to retrieve the default Color Collection.\n\nSet the default color collection with [ColorCollection](#!/ColorCollection/set_default_color_collection)\n", @@ -1858,13 +2695,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/color_collections/{collection_id}": { "get": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "color_collection", "summary": "Get Color Collection by ID", "description": "### Get a Color Collection by ID\n\nUse this to retrieve a specific Color Collection.\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1904,11 +2743,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "update_color_collection", "summary": "Update Custom Color collection", "description": "### Update a custom color collection by id.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -1968,11 +2809,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["ColorCollection"], + "tags": [ + "ColorCollection" + ], "operationId": "delete_color_collection", "summary": "Delete ColorCollection", "description": "### Delete a custom color collection by id\n\nThis operation permanently deletes the identified **Custom** color collection.\n\n**Standard** color collections cannot be deleted\n\nBecause multiple color collections can have the same label, they must be deleted by ID, not name.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", @@ -2020,13 +2863,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/content_favorite/search": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "search_content_favorites", "summary": "Search Favorite Contents", "description": "### Search Favorite Content\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -2134,13 +2979,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/content_favorite/{content_favorite_id}": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_favorite", "summary": "Get Favorite Content", "description": "### Get favorite content by its id", @@ -2180,11 +3027,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "delete_content_favorite", "summary": "Delete Favorite Content", "description": "### Delete favorite content", @@ -2223,13 +3072,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/content_favorite": { "post": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "create_content_favorite", "summary": "Create Favorite Content", "description": "### Create favorite content", @@ -2282,13 +3133,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/content_metadata": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "all_content_metadatas", "summary": "Get All Content Metadatas", "description": "### Get information about all content metadata in a space.\n", @@ -2331,13 +3184,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/content_metadata/{content_metadata_id}": { "patch": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "update_content_metadata", "summary": "Update Content Metadata", "description": "### Move a piece of content.\n", @@ -2391,11 +3246,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_metadata", "summary": "Get Content Metadata", "description": "### Get information about an individual content metadata record.\n", @@ -2435,13 +3292,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/content_metadata_access": { "post": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "create_content_metadata_access", "summary": "Create Content Metadata Access", "description": "### Create content metadata access.\n", @@ -2501,12 +3360,14 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "all_content_metadata_accesses", "summary": "Get All Content Metadata Accesses", "description": "### All content metadata access records for a content metadata item.\n", @@ -2549,13 +3410,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/content_metadata_access/{content_metadata_access_id}": { "put": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "update_content_metadata_access", "summary": "Update Content Metadata Access", "description": "### Update type of access for content metadata.\n", @@ -2609,11 +3472,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "delete_content_metadata_access", "summary": "Delete Content Metadata Access", "description": "### Remove content metadata access.\n", @@ -2652,17 +3517,114 @@ } } }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/content/{terms}": { + "get": { + "tags": [ + "Content" + ], + "operationId": "search_content", + "summary": "Search Content", + "description": "### Search across looks, dashboards, and lookml dashboards. The terms field will be matched against the\ntitle and description of the content and the closest results are returned. Content that has been frequently\nviewed and those pieces of content stored in public folders will be ranked more highly in the results.\n\nThis endpoint does not return a full description of these content types. For more specific information\nabout each type please refer to the individual content specific API endpoints.\n\nGet the **full details** of a specific dashboard (or lookml dashboard) by id with [dashboard()](#!/Dashboard/dashboard)\nGet the **full details** of a specific look by id with [look()](#!/Look/look)\n", + "parameters": [ + { + "name": "terms", + "in": "path", + "description": "Search terms", + "required": true, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "types", + "in": "query", + "description": "Content types requested (dashboard, look, lookml_dashboard).", + "required": false, + "type": "string" + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "per_page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + } + ], + "responses": { + "200": { + "description": "Matching content", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/ContentSearch" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, "x-looker-status": "beta", "x-looker-activity-type": "non_query" } }, "/content_thumbnail/{type}/{resource_id}": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_thumbnail", "summary": "Get Content Thumbnail", "description": "### Get an image representing the contents of a dashboard or look.\n\nThe returned thumbnail is an abstract representation of the contents of a dashbord or look and does not\nreflect the actual data displayed in the respective visualizations.\n", - "produces": ["image/svg+xml", "image/png"], + "produces": [ + "image/svg+xml", + "image/png" + ], "parameters": [ { "name": "type", @@ -2685,6 +3647,13 @@ "required": false, "type": "string" }, + { + "name": "theme", + "in": "query", + "description": "Light or dark background. Default is \"light\"", + "required": false, + "type": "string" + }, { "name": "format", "in": "query", @@ -2727,15 +3696,23 @@ "schema": { "$ref": "#/definitions/Error" } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/content_validation": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "content_validation", "summary": "Validate Content", "description": "### Validate All Content\n\nPerforms validation of all looks and dashboards\nReturns a list of errors found as well as metadata about the content validation run.\n", @@ -2780,13 +3757,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/content_view/search": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "search_content_views", "summary": "Search Content Views", "description": "### Search Content Views\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -2908,16 +3887,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/credentials_email/search": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "search_credentials_email", "summary": "Search CredentialsEmail", - "description": "### Search email credentials\n\nReturns all credentials_email records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "description": "### Search email credentials\n\nReturns all credentials_email records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "fields", @@ -2994,6 +3975,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -3001,13 +3988,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/custom_welcome_email": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "custom_welcome_email", "summary": "Get Custom Welcome Email", "description": "### Get the current status and content of custom welcome emails\n", @@ -3036,7 +4025,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_custom_welcome_email", "summary": "Update Custom Welcome Email Content", "description": "Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user.\n", @@ -3097,7 +4088,9 @@ }, "/custom_welcome_email_test": { "put": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_custom_welcome_email_test", "summary": "Send a test welcome email to the currently logged in user with the supplied content ", "description": "Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user.\n", @@ -3144,13 +4137,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboards": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "all_dashboards", "summary": "Get All Dashboards", "description": "### Get information about all active dashboards.\n\nReturns an array of **abbreviated dashboard objects**. Dashboards marked as deleted are excluded from this list.\n\nGet the **full details** of a specific dashboard by id with [dashboard()](#!/Dashboard/dashboard)\n\nFind **deleted dashboards** with [search_dashboards()](#!/Dashboard/search_dashboards)\n", @@ -3186,11 +4181,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard", "summary": "Create Dashboard", "description": "### Create a new dashboard\n\nCreates a new dashboard object and returns the details of the newly created dashboard.\n\n`Title` and `space_id` are required fields.\n`Space_id` must contain the id of an existing space.\nA dashboard's `title` must be unique within the space in which it resides.\n\nIf you receive a 422 error response when creating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n\nYou can **update** an existing dashboard with [update_dashboard()](#!/Dashboard/update_dashboard)\n\nYou can **permanently delete** an existing dashboard with [delete_dashboard()](#!/Dashboard/delete_dashboard)\n", @@ -3243,16 +4240,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboards/search": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "search_dashboards", "summary": "Search Dashboards", - "description": "### Search Dashboards\n\nReturns an **array of dashboard objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single dashboard** by id with [dashboard()](#!/Dashboard/dashboard)\n", + "description": "### Search Dashboards\n\nReturns an array of **user-defined dashboard** objects that match the specified search criteria.\nNote, [search_dashboards()](#!/Dashboard/search_dashboards) does not return LookML dashboard objects.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single dashboard** by id with [dashboard()](#!/Dashboard/dashboard)\n", "parameters": [ { "name": "id", @@ -3292,7 +4291,7 @@ { "name": "folder_id", "in": "query", - "description": "Filter on a particular space.", + "description": "Filter on a particular folder.", "required": false, "type": "string" }, @@ -3392,6 +4391,13 @@ "description": "Combine given search criteria in a boolean OR expression", "required": false, "type": "boolean" + }, + { + "name": "not_owned_by", + "in": "query", + "description": "Filter out the dashboards owned by the user passed at the :user_id params", + "required": false, + "type": "boolean" } ], "responses": { @@ -3417,13 +4423,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboards/{lookml_dashboard_id}/import/{space_id}": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "import_lookml_dashboard", "summary": "Import LookML Dashboard", "description": "### Import a LookML dashboard to a space as a UDD\nCreates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard\nand places it in the space specified. The created UDD will have a lookml_link_id which links to the original LookML dashboard.\n\nTo give the imported dashboard specify a (e.g. title: \"my title\") in the body of your request, otherwise the imported\ndashboard will have the same title as the original LookML dashboard.\n\nFor this operation to succeed the user must have permission to see the LookML dashboard in question, and have permission to\ncreate content in the space the dashboard is being imported to.\n\n**Sync** a linked UDD with [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard)\n**Unlink** a linked UDD by setting lookml_link_id to null with [update_dashboard()](#!/Dashboard/update_dashboard)\n", @@ -3503,13 +4511,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboards/{lookml_dashboard_id}/sync": { "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "sync_lookml_dashboard", "summary": "Sync LookML Dashboard", "description": "### Update all linked dashboards to match the specified LookML dashboard.\n\nAny UDD (a dashboard which exists in the Looker database rather than as a LookML file) which has a `lookml_link_id`\nproperty value referring to a LookML dashboard's id (model::dashboardname) will be updated so that it matches the current state of the LookML dashboard.\n\nFor this operation to succeed the user must have permission to view the LookML dashboard, and only linked dashboards\nthat the user has permission to update will be synced.\n\nTo **link** or **unlink** a UDD set the `lookml_link_id` property with [update_dashboard()](#!/Dashboard/update_dashboard)\n", @@ -3574,13 +4584,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboards/{dashboard_id}": { "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard", "summary": "Delete Dashboard", "description": "### Delete the dashboard with the specified id\n\nPermanently **deletes** a dashboard. (The dashboard cannot be recovered after this operation.)\n\n\"Soft\" delete or hide a dashboard by setting its `deleted` status to `True` with [update_dashboard()](#!/Dashboard/update_dashboard).\n\nNote: When a dashboard is deleted in the UI, it is soft deleted. Use this API call to permanently remove it, if desired.\n", @@ -3625,11 +4637,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard", "summary": "Update Dashboard", "description": "### Update a dashboard\n\nYou can use this function to change the string and integer properties of\na dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components\ncannot be modified by this function - use the update functions for the respective\nnested object types (like [update_dashboard_filter()](#!/3.1/Dashboard/update_dashboard_filter) to change a filter)\nto modify nested objects referenced by a dashboard.\n\nIf you receive a 422 error response when updating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n", @@ -3689,11 +4703,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard", "summary": "Get Dashboard", "description": "### Get information about a dashboard\n\nReturns the full details of the identified dashboard object\n\nGet a **summary list** of all active dashboards with [all_dashboards()](#!/Dashboard/all_dashboards)\n\nYou can **Search** for dashboards with [search_dashboards()](#!/Dashboard/search_dashboards)\n", @@ -3733,13 +4749,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboards/aggregate_table_lookml/{dashboard_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_aggregate_table_lookml", "summary": "Get Aggregate Table LookML for a dashboard", "description": "### Get Aggregate Table LookML for Each Query on a Dahboard\n\nReturns a JSON object that contains the dashboard id and Aggregate Table lookml\n\n", @@ -3772,13 +4790,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboards/lookml/{dashboard_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_lookml", "summary": "Get lookml of a UDD", "description": "### Get lookml of a UDD\n\nReturns a JSON object that contains the dashboard id and the full lookml\n\n", @@ -3811,13 +4831,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboards/{dashboard_id}/move": { "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "move_dashboard", "summary": "Move Dashboard", "description": "### Move an existing dashboard\n\nMoves a dashboard to a specified folder, and returns the moved dashboard.\n\n`dashboard_id` and `folder_id` are required.\n`dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", @@ -3875,16 +4897,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, - "/dashboards/from_lookml": { + "/dashboards/lookml": { "post": { - "tags": ["Dashboard"], - "operationId": "create_dashboard_from_lookml", - "summary": "Create Dashboard from LookML", - "description": "### Creates a new dashboard object based on LookML Dashboard YAML, and returns the details of the newly created dashboard.\n\nThis is equivalent to creating a LookML Dashboard and converting to a User-defined dashboard.\n\nLookML must contain valid LookML YAML code. It's recommended to use the LookML format returned\nfrom [dashboard_lookml()](#!/Dashboard/dashboard_lookml) as the input LookML (newlines replaced with \n).\n\nNote that the created dashboard is not linked to any LookML Dashboard,\ni.e. [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard) will not update dashboards created by this method.\n\n", + "tags": [ + "Dashboard" + ], + "operationId": "import_dashboard_from_lookml", + "summary": "Import Dashboard from LookML", + "description": "### Creates a dashboard object based on LookML Dashboard YAML, and returns the details of the newly created dashboard.\n\nIf a dashboard exists with the YAML-defined \"preferred_slug\", the new dashboard will overwrite it. Otherwise, a new\ndashboard will be created. Note that when a dashboard is overwritten, alerts will not be maintained.\n\nIf a folder_id is specified: new dashboards will be placed in that folder, and overwritten dashboards will be moved to it\nIf the folder_id isn't specified: new dashboards will be placed in the caller's personal folder, and overwritten dashboards\nwill remain where they were\n\nLookML must contain valid LookML YAML code. It's recommended to use the LookML format returned\nfrom [dashboard_lookml()](#!/Dashboard/dashboard_lookml) as the input LookML (newlines replaced with \n).\n\nNote that the created dashboard is not linked to any LookML Dashboard,\ni.e. [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard) will not update dashboards created by this method.\n", "parameters": [ { "name": "body", @@ -3898,12 +4922,67 @@ ], "responses": { "200": { + "description": "dashboard", + "schema": { + "$ref": "#/definitions/Dashboard" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/dashboards/from_lookml": { + "post": { + "tags": [ + "Dashboard" + ], + "operationId": "create_dashboard_from_lookml", + "summary": "Create Dashboard from LookML", + "description": "# DEPRECATED: Use [import_dashboard_from_lookml()](#!/Dashboard/import_dashboard_from_lookml)\n", + "parameters": [ + { + "name": "body", + "in": "body", "description": "DashboardLookML", + "required": true, "schema": { "$ref": "#/definitions/DashboardLookml" } - }, - "201": { + } + ], + "responses": { + "200": { "description": "dashboard", "schema": { "$ref": "#/definitions/Dashboard" @@ -3940,13 +5019,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboards/{dashboard_id}/copy": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "copy_dashboard", "summary": "Copy Dashboard", "description": "### Copy an existing dashboard\n\nCreates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard.\n\n`dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified.\n`folder_id` will default to the existing folder.\n\nIf a dashboard with the same title already exists in the target folder, the copy will have '(copy)'\n or '(copy <# of copies>)' appended.\n", @@ -4010,13 +5091,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboard_elements/search": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "search_dashboard_elements", "summary": "Search Dashboard Elements", "description": "### Search Dashboard Elements\n\nReturns an **array of DashboardElement objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -4094,13 +5177,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboard_elements/{dashboard_element_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_element", "summary": "Get DashboardElement", "description": "### Get information about the dashboard element with a specific id.", @@ -4140,11 +5225,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard_element", "summary": "Delete DashboardElement", "description": "### Delete a dashboard element with a specific id.", @@ -4183,11 +5270,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_element", "summary": "Update DashboardElement", "description": "### Update the dashboard element with a specific id.", @@ -4248,13 +5337,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboards/{dashboard_id}/dashboard_elements": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_dashboard_elements", "summary": "Get All DashboardElements", "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", @@ -4297,13 +5388,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboard_elements": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard_element", "summary": "Create DashboardElement", "description": "### Create a dashboard element on the dashboard with a specific id.", @@ -4370,13 +5463,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboard_filters/{dashboard_filter_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_filter", "summary": "Get Dashboard Filter", "description": "### Get information about the dashboard filters with a specific id.", @@ -4416,11 +5511,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard_filter", "summary": "Delete Dashboard Filter", "description": "### Delete a dashboard filter with a specific id.", @@ -4459,11 +5556,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_filter", "summary": "Update Dashboard Filter", "description": "### Update the dashboard filter with a specific id.", @@ -4524,13 +5623,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboards/{dashboard_id}/dashboard_filters": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_dashboard_filters", "summary": "Get All Dashboard Filters", "description": "### Get information about all the dashboard filters on a dashboard with a specific id.", @@ -4573,13 +5674,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboard_filters": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard_filter", "summary": "Create Dashboard Filter", "description": "### Create a dashboard filter on the dashboard with a specific id.", @@ -4639,13 +5742,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboard_layout_components/{dashboard_layout_component_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_layout_component", "summary": "Get DashboardLayoutComponent", "description": "### Get information about the dashboard elements with a specific id.", @@ -4685,11 +5790,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_layout_component", "summary": "Update DashboardLayoutComponent", "description": "### Update the dashboard element with a specific id.", @@ -4750,13 +5857,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboard_layouts/{dashboard_layout_id}/dashboard_layout_components": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_layout_dashboard_layout_components", "summary": "Get All DashboardLayoutComponents", "description": "### Get information about all the dashboard layout components for a dashboard layout with a specific id.", @@ -4799,13 +5908,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboard_layouts/{dashboard_layout_id}": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_layout", "summary": "Get DashboardLayout", "description": "### Get information about the dashboard layouts with a specific id.", @@ -4845,11 +5956,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "delete_dashboard_layout", "summary": "Delete DashboardLayout", "description": "### Delete a dashboard layout with a specific id.", @@ -4894,11 +6007,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "update_dashboard_layout", "summary": "Update DashboardLayout", "description": "### Update the dashboard layout with a specific id.", @@ -4959,13 +6074,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboards/{dashboard_id}/dashboard_layouts": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "dashboard_dashboard_layouts", "summary": "Get All DashboardLayouts", "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", @@ -5008,13 +6125,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dashboard_layouts": { "post": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "operationId": "create_dashboard_layout", "summary": "Create DashboardLayout", "description": "### Create a dashboard layout on the dashboard with a specific id.", @@ -5074,13 +6193,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/data_actions": { "post": { - "tags": ["DataAction"], + "tags": [ + "DataAction" + ], "operationId": "perform_data_action", "summary": "Send a Data Action", "description": "Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action.", @@ -5115,13 +6236,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/data_actions/form": { "post": { - "tags": ["DataAction"], + "tags": [ + "DataAction" + ], "operationId": "fetch_remote_data_action_form", "summary": "Fetch Remote Data Action Form", "description": "For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user.", @@ -5165,13 +6288,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/datagroups": { "get": { - "tags": ["Datagroup"], + "tags": [ + "Datagroup" + ], "operationId": "all_datagroups", "summary": "Get All Datagroups", "description": "### Get information about all datagroups.\n", @@ -5198,13 +6323,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/datagroups/{datagroup_id}": { "get": { - "tags": ["Datagroup"], + "tags": [ + "Datagroup" + ], "operationId": "datagroup", "summary": "Get Datagroup", "description": "### Get information about a datagroup.\n", @@ -5237,11 +6364,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Datagroup"], + "tags": [ + "Datagroup" + ], "operationId": "update_datagroup", "summary": "Update Datagroup", "description": "### Update a datagroup using the specified params.\n", @@ -5301,13 +6430,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/connections": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "all_connections", "summary": "Get All Connections", "description": "### Get information about all connections.\n", @@ -5347,7 +6478,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "create_connection", "summary": "Create Connection", "description": "### Create a connection using the specified configuration.\n", @@ -5375,6 +6508,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -5406,7 +6545,9 @@ }, "/connections/{connection_name}": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "connection", "summary": "Get Connection", "description": "### Get information about a connection.\n", @@ -5450,7 +6591,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "update_connection", "summary": "Update Connection", "description": "### Update a connection using the specified configuration.\n", @@ -5485,12 +6628,24 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -5508,7 +6663,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "delete_connection", "summary": "Delete Connection", "description": "### Delete a connection.\n", @@ -5553,7 +6710,9 @@ }, "/connections/{connection_name}/connection_override/{override_context}": { "delete": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "delete_connection_override", "summary": "Delete Connection Override", "description": "### Delete a connection override.\n", @@ -5611,7 +6770,9 @@ }, "/connections/{connection_name}/test": { "put": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "test_connection", "summary": "Test Connection", "description": "### Test an existing connection.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", @@ -5677,7 +6838,9 @@ }, "/connections/test": { "put": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "test_connection_config", "summary": "Test Connection Configuration", "description": "### Test a connection configuration.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", @@ -5739,7 +6902,9 @@ }, "/projects/{project_id}/manifest/lock_all": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "lock_all", "summary": "Lock All", "description": " ### Generate Lockfile for All LookML Dependencies\n\n Git must have been configured, must be in dev mode and deploy permission required\n\n Install_all is a two step process\n 1. For each remote_dependency in a project the dependency manager will resolve any ambiguous ref.\n 2. The project will then write out a lockfile including each remote_dependency with its resolved ref.\n\n", @@ -5794,13 +6959,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/derived_table/graph/model/{model}": { "get": { - "tags": ["DerivedTable"], + "tags": [ + "DerivedTable" + ], "operationId": "graph_derived_tables_for_model", "summary": "Get Derived Table graph for model", "description": "### Discover information about derived tables\n", @@ -5847,13 +7014,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/derived_table/graph/view/{view}": { "get": { - "tags": ["DerivedTable"], + "tags": [ + "DerivedTable" + ], "operationId": "graph_derived_tables_for_view", "summary": "Get subgraph of derived table and dependencies", "description": "### Get the subgraph representing this derived table and its dependencies.\n", @@ -5900,13 +7069,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/derived_table/{model_name}/{view_name}/start": { "get": { - "tags": ["DerivedTable"], + "tags": [ + "DerivedTable" + ], "operationId": "start_pdt_build", "summary": "Start a PDT materialization", "description": "Enqueue materialization for a PDT with the given model name and view name", @@ -5974,13 +7145,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/derived_table/{materialization_id}/status": { "get": { - "tags": ["DerivedTable"], + "tags": [ + "DerivedTable" + ], "operationId": "check_pdt_build", "summary": "Check status of a PDT materialization", "description": "Check status of PDT materialization", @@ -6013,13 +7186,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/derived_table/{materialization_id}/stop": { "get": { - "tags": ["DerivedTable"], + "tags": [ + "DerivedTable" + ], "operationId": "stop_pdt_build", "summary": "Stop a PDT materialization", "description": "Stop a PDT materialization", @@ -6059,13 +7234,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/dialect_info": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "all_dialect_infos", "summary": "Get All Dialect Infos", "description": "### Get information about all dialects.\n", @@ -6107,7 +7284,9 @@ }, "/digest_emails_enabled": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "digest_emails_enabled", "summary": "Get Digest_emails", "description": "### Retrieve the value for whether or not digest emails is enabled\n", @@ -6131,11 +7310,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_digest_emails_enabled", "summary": "Update Digest_emails", "description": "### Update the setting for enabling/disabling digest emails\n", @@ -6182,13 +7363,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/digest_email_send": { "post": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "create_digest_email_send", "summary": "Deliver digest email contents", "description": "### Trigger the generation of digest email records and send them to Looker's internal system. This does not send\nany actual emails, it generates records containing content which may be of interest for users who have become inactive.\nEmails will be sent at a later time from Looker's internal system if the Digest Emails feature is enabled in settings.", @@ -6218,17 +7401,19 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "none", "x-looker-rate-limited": true } }, "/public_egress_ip_addresses": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "public_egress_ip_addresses", "summary": "Public Egress IP Addresses", - "description": "### Get Egress IP Addresses\n\nReturns the list of public egress IP Addresses for a hosted customer's instance\n", + "description": "### Get Egress IP Addresses\n\nReturns the list of public egress IP Addresses for a hosted customer's instance\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { "description": "Public Egress IP Addresses", @@ -6242,6 +7427,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -6249,16 +7440,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/embed_config/secrets": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "create_embed_secret", "summary": "Create Embed Secret", - "description": "### Create an embed secret using the specified information.\n\nThe value of the `secret` field will be set by Looker and returned.\n", + "description": "### Create an embed secret using the specified information.\n\nThe value of the `secret` field will be set by Looker and returned.\n\nCalls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled\n", "parameters": [ { "name": "body", @@ -6308,16 +7501,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/embed_config/secrets/{embed_secret_id}": { "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_embed_secret", "summary": "Delete Embed Secret", - "description": "### Delete an embed secret.\n", + "description": "### Delete an embed secret.\n\nCalls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled\n", "parameters": [ { "name": "embed_secret_id", @@ -6346,59 +7541,283 @@ "$ref": "#/definitions/Error" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/Error" - } - } - }, - "x-looker-status": "beta", - "x-looker-activity-type": "non_query" - } - }, - "/embed/sso_url": { - "post": { - "tags": ["Auth"], - "operationId": "create_sso_embed_url", - "summary": "Create SSO Embed Url", - "description": "### Create SSO Embed URL\n\nCreates an SSO embed URL and cryptographically signs it with an embed secret.\nThis signed URL can then be used to instantiate a Looker embed session in a PBL web application.\nDo not make any modifications to this URL - any change may invalidate the signature and\ncause the URL to fail to load a Looker embed session.\n\nA signed SSO embed URL can only be used once. After it has been used to request a page from the\nLooker server, the URL is invalid. Future requests using the same URL will fail. This is to prevent\n'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker UI page - scheme, hostname, path and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker URL would look like `https:/myname.looker.com/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar and paste it into the `target_url` property as a quoted string value in this API request.\n\nPermissions for the embed user are defined by the groups in which the embed user is a member (group_ids property)\nand the lists of models and permissions assigned to the embed user.\nAt a minimum, you must provide values for either the group_ids property, or both the models and permissions properties.\nThese properties are additive; an embed user can be a member of certain groups AND be granted access to models and permissions.\n\nThe embed user's access is the union of permissions granted by the group_ids, models, and permissions properties.\n\nThis function does not strictly require all group_ids, user attribute names, or model names to exist at the moment the\nSSO embed url is created. Unknown group_id, user attribute names or model names will be passed through to the output URL.\nTo diagnose potential problems with an SSO embed URL, you can copy the signed URL into the Embed URI Validator text box in `/admin/embed`.\n\nThe `secret_id` parameter is optional. If specified, its value must be the id of an active secret defined in the Looker instance.\nif not specified, the URL will be signed using the newest active secret defined in the Looker instance.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n", - "parameters": [ - { - "name": "body", - "in": "body", - "description": "SSO parameters", - "required": true, - "schema": { - "$ref": "#/definitions/EmbedSsoParams" - } - } - ], - "responses": { - "200": { - "description": "Signed SSO URL", - "schema": { - "$ref": "#/definitions/EmbedUrlResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/embed/sso_url": { + "post": { + "tags": [ + "Auth" + ], + "operationId": "create_sso_embed_url", + "summary": "Create Signed Embed Url", + "description": "### Create Signed Embed URL\n\nCreates a signed embed URL and cryptographically signs it with an embed secret.\nThis signed URL can then be used to instantiate a Looker embed session in a PBL web application.\nDo not make any modifications to the returned URL - any change may invalidate the signature and\ncause the URL to fail to load a Looker embed session.\n\nA signed embed URL can only be **used once**. After the URL has been used to request a page from the\nLooker server, it is invalid. Future requests using the same URL will fail. This is to prevent\n'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker UI page - scheme, hostname, path and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker URL would look like `https:/myname.looker.com/dashboards/56?Date=1%20years`.\nThe best way to obtain this `target_url` is to navigate to the desired Looker page in your web browser and use the \"Get embed URL\" menu option\nto copy it to your clipboard and paste it into the `target_url` property as a quoted string value in this API request.\n\nPermissions for the embed user are defined by the groups in which the embed user is a member (`group_ids` property)\nand the lists of models and permissions assigned to the embed user.\nAt a minimum, you must provide values for either the `group_ids` property, or **both** the models and permissions properties.\nThese properties are additive; an embed user can be a member of certain groups AND be granted access to models and permissions.\n\nThe embed user's access is the union of permissions granted by the `group_ids`, `models`, and `permissions` properties.\n\nThis function does not strictly require all group_ids, user attribute names, or model names to exist at the moment the\nembed url is created. Unknown group_id, user attribute names or model names will be passed through to the output URL.\n\nTo diagnose potential problems with an SSO embed URL, you can copy the signed URL into the Embed URI Validator text box in `/admin/embed`.\n\nThe `secret_id` parameter is optional. If specified, its value must be the id of an active secret defined in the Looker instance.\nif not specified, the URL will be signed using the most recent active signing secret. If there is no active secret for signing embed urls,\na default secret will be created. This default secret is encrypted using HMAC/SHA-256.\n\nThe `embed_domain` parameter is optional. If specified and valid, the domain will be added to the embed domain allowlist if it is missing.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n\n\nCalls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled\n", + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Signed Embed URL parameters", + "required": true, + "schema": { + "$ref": "#/definitions/EmbedSsoParams" + } + } + ], + "responses": { + "200": { + "description": "Signed Embed URL", + "schema": { + "$ref": "#/definitions/EmbedUrlResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "none" + } + }, + "/embed/token_url/me": { + "post": { + "tags": [ + "Auth" + ], + "operationId": "create_embed_url_as_me", + "summary": "Create Embed URL", + "description": "### Create an Embed URL\n\nCreates an embed URL that runs as the Looker user making this API call. (\"Embed as me\")\nThis embed URL can then be used to instantiate a Looker embed session in a\n\"Powered by Looker\" (PBL) web application.\n\nThis is similar to Private Embedding (https://cloud.google.com/looker/docs/r/admin/embed/private-embed). Instead of\nof logging into the Web UI to authenticate, the user has already authenticated against the API to be able to\nmake this call. However, unlike Private Embed where the user has access to any other part of the Looker UI,\nthe embed web session created by requesting the EmbedUrlResponse.url in a browser only has access to\ncontent visible under the `/embed` context.\n\nAn embed URL can only be used once, and must be used within 5 minutes of being created. After it\nhas been used to request a page from the Looker server, the URL is invalid. Future requests using\nthe same URL will fail. This is to prevent 'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker Embedded UI page - scheme, hostname, path starting with \"/embed\" and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker Embed URL would look like `https://myname.looker.com/embed/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar, insert \"/embed\" after the host/port, and paste it into the `target_url` property as a quoted string value in this API request.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n\n\nCalls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled\n", + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Embed parameters", + "required": true, + "schema": { + "$ref": "#/definitions/EmbedParams" + } + } + ], + "responses": { + "200": { + "description": "Embed URL", + "schema": { + "$ref": "#/definitions/EmbedUrlResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "none" + } + }, + "/embed/sso/validate": { + "get": { + "tags": [ + "Auth" + ], + "operationId": "validate_embed_url", + "summary": "Get Embed URL Validation", + "description": "### Validate a Signed Embed URL\n\n", + "parameters": [ + { + "name": "url", + "in": "query", + "description": "URL to validate", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Embed URL Validation", + "schema": { + "$ref": "#/definitions/EmbedUrlResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + } + }, + "x-looker-status": "alpha", + "x-looker-activity-type": "non_query" + } + }, + "/embed/cookieless_session/acquire": { + "post": { + "tags": [ + "Auth" + ], + "operationId": "acquire_embed_cookieless_session", + "summary": "Create Acquire cookieless embed session", + "description": "### Acquire a cookieless embed session.\n\nThe acquire session endpoint negates the need for signing the embed url and passing it as a parameter\nto the embed login. This endpoint accepts an embed user definition and creates or updates it. This is\nsimilar behavior to the embed SSO login as they both can create and update embed user data.\n\nThe endpoint also accepts an optional `session_reference_token`. If present and the session has not expired\nand the credentials match the credentials for the embed session, a new authentication token will be\ngenerated. This allows the embed session to attach a new embedded IFRAME to the embed session. Note that\nthe session is NOT extended in this scenario. In other words the session_length parameter is ignored.\n\n**IMPORTANT:** If the `session_reference_token` is provided and the session has NOT expired, the embed user\nis NOT updated. This is done for performance reasons and to support the embed SSO usecase where the\nfirst IFRAME created on a page uses a signed url and subsequently created IFRAMEs do not.\n\nIf the `session_reference_token` is provided but the session has expired, the token will be ignored and a\nnew embed session will be created. Note that the embed user definition will be updated in this scenario.\n\nIf the credentials do not match the credentials associated with an exisiting session_reference_token, a\n404 will be returned.\n\nThe endpoint returns the following:\n- Authentication token - a token that is passed to `/embed/login` endpoint that creates or attaches to the\n embed session. This token can be used once and has a lifetime of 30 seconds.\n- Session reference token - a token that lives for the length of the session. This token is used to\n generate new api and navigation tokens OR create new embed IFRAMEs.\n- Api token - lives for 10 minutes. The Looker client will ask for this token once it is loaded into the\n iframe.\n- Navigation token - lives for 10 minutes. The Looker client will ask for this token once it is loaded into\n the iframe.\n\nCalls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled\n", + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Embed user details", + "required": true, + "schema": { + "$ref": "#/definitions/EmbedCookielessSessionAcquire" + } + } + ], + "responses": { + "200": { + "description": "Embed cookieless acquire session response", + "schema": { + "$ref": "#/definitions/EmbedCookielessSessionAcquireResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "none" + } + }, + "/embed/cookieless_session/{session_reference_token}": { + "delete": { + "tags": [ + "Auth" + ], + "operationId": "delete_embed_cookieless_session", + "summary": "Delete cookieless embed session", + "description": "### Delete cookieless embed session\n\nThis will delete the session associated with the given session reference token. Calling this endpoint will result\nin the session and session reference data being cleared from the system. This endpoint can be used to log an embed\nuser out of the Looker instance.\n\nCalls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled\n", + "parameters": [ + { + "name": "session_reference_token", + "in": "path", + "description": "Embed session reference token", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "schema": { + "type": "string" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -6412,32 +7831,34 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "none" } }, - "/embed/token_url/me": { - "post": { - "tags": ["Auth"], - "operationId": "create_embed_url_as_me", - "summary": "Create Embed URL", - "description": "### Create an Embed URL\n\nCreates an embed URL that runs as the Looker user making this API call. (\"Embed as me\")\nThis embed URL can then be used to instantiate a Looker embed session in a\n\"Powered by Looker\" (PBL) web application.\n\nThis is similar to Private Embedding (https://docs.looker.com/r/admin/embed/private-embed). Instead of\nof logging into the Web UI to authenticate, the user has already authenticated against the API to be able to\nmake this call. However, unlike Private Embed where the user has access to any other part of the Looker UI,\nthe embed web session created by requesting the EmbedUrlResponse.url in a browser only has access to\ncontent visible under the `/embed` context.\n\nAn embed URL can only be used once, and must be used within 5 minutes of being created. After it\nhas been used to request a page from the Looker server, the URL is invalid. Future requests using\nthe same URL will fail. This is to prevent 'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker Embedded UI page - scheme, hostname, path starting with \"/embed\" and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker Embed URL would look like `https://myname.looker.com/embed/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar, insert \"/embed\" after the host/port, and paste it into the `target_url` property as a quoted string value in this API request.\n\n#### Security Note\nProtect this embed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n", + "/embed/cookieless_session/generate_tokens": { + "put": { + "tags": [ + "Auth" + ], + "operationId": "generate_tokens_for_cookieless_session", + "summary": "Generate tokens for cookieless embed session", + "description": "### Generate api and navigation tokens for a cookieless embed session\n\nThe generate tokens endpoint is used to create new tokens of type:\n- Api token.\n- Navigation token.\nThe generate tokens endpoint should be called every time the Looker client asks for a token (except for the\nfirst time when the tokens returned by the acquire_session endpoint should be used).\n\nCalls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled\n", "parameters": [ { "name": "body", "in": "body", - "description": "Embed parameters", + "description": "Embed session reference token", "required": true, "schema": { - "$ref": "#/definitions/EmbedParams" + "$ref": "#/definitions/EmbedCookielessSessionGenerateTokens" } } ], "responses": { "200": { - "description": "Embed URL", + "description": "Generated api and navigations tokens for the cookieless embed session.", "schema": { - "$ref": "#/definitions/EmbedUrlResponse" + "$ref": "#/definitions/EmbedCookielessSessionGenerateTokensResponse" } }, "400": { @@ -6452,12 +7873,6 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -6471,13 +7886,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "none" } }, "/external_oauth_applications": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "all_external_oauth_applications", "summary": "Get All External OAuth Applications", "description": "### Get all External OAuth Applications.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", @@ -6524,7 +7941,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "create_external_oauth_application", "summary": "Create External OAuth Application", "description": "### Create an OAuth Application using the specified configuration.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", @@ -6583,7 +8002,9 @@ }, "/external_oauth_applications/user_state": { "post": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "create_oauth_application_user_state", "summary": "Create Create OAuth user state.", "description": "### Create OAuth User state.\n", @@ -6642,7 +8063,9 @@ }, "/projects/{project_id}/git_branches": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_git_branches", "summary": "Get All Git Branches", "description": "### Get All Git Branches\n\nReturns a list of git branches in the project repository\n", @@ -6678,13 +8101,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/git_branch": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "git_branch", "summary": "Get Active Git Branch", "description": "### Get the Current Git Branch\n\nReturns the git branch currently checked out in the given project repository\n", @@ -6717,11 +8142,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "create_git_branch", "summary": "Checkout New Git Branch", "description": "### Create and Checkout a Git Branch\n\nCreates and checks out a new branch in the given project repository\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nOptionally specify a branch name, tag name or commit SHA as the start point in the ref field.\n If no ref is specified, HEAD of the current branch will be used as the start point for the new branch.\n\n", @@ -6781,11 +8208,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "update_git_branch", "summary": "Update Project Git Branch", "description": "### Checkout and/or reset --hard an existing Git Branch\n\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nCheckout an existing branch if name field is different from the name of the currently checked out branch.\n\nOptionally specify a branch name, tag name or commit SHA to which the branch should be reset.\n **DANGER** hard reset will be force pushed to the remote. Unsaved changes and commits may be permanently lost.\n\n", @@ -6839,13 +8268,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/git_branch/{branch_name}": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "find_git_branch", "summary": "Find a Git Branch", "description": "### Get the specified Git Branch\n\nReturns the git branch specified in branch_name path param if it exists in the given project repository\n", @@ -6885,11 +8316,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "delete_git_branch", "summary": "Delete a Git Branch", "description": "### Delete the specified Git Branch\n\nDelete git branch specified in branch_name path param from local and remote of specified project repository\n", @@ -6935,13 +8368,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/groups": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "all_groups", "summary": "Get All Groups", "description": "### Get information about all groups.\n", @@ -7047,7 +8482,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "create_group", "summary": "Create Group", "description": "### Creates a new group (admin only).\n", @@ -7113,7 +8550,9 @@ }, "/groups/search": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "search_groups", "summary": "Search Groups", "description": "### Search groups\n\nReturns all group records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -7220,7 +8659,9 @@ }, "/groups/search/with_roles": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "search_groups_with_roles", "summary": "Search Groups with Roles", "description": "### Search groups include roles\n\nReturns all group records that match the given search criteria, and attaches any associated roles.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -7321,13 +8762,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/groups/search/with_hierarchy": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "search_groups_with_hierarchy", "summary": "Search Groups with Hierarchy", "description": "### Search groups include hierarchy\n\nReturns all group records that match the given search criteria, and attaches\nassociated role_ids and parent group_ids.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -7428,13 +8871,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/groups/{group_id}": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "group", "summary": "Get Group", "description": "### Get information about a group.\n", @@ -7478,7 +8923,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "update_group", "summary": "Update Group", "description": "### Updates the a group (admin only).", @@ -7520,6 +8967,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -7543,7 +8996,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_group", "summary": "Delete Group", "description": "### Deletes a group (admin only).\n", @@ -7594,7 +9049,9 @@ }, "/groups/{group_id}/groups": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "all_group_groups", "summary": "Get All Groups in Group", "description": "### Get information about all the groups in a group\n", @@ -7641,7 +9098,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "add_group_group", "summary": "Add a Group to Group", "description": "### Adds a new group to a group.\n", @@ -7695,7 +9154,9 @@ }, "/groups/{group_id}/users": { "get": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "all_group_users", "summary": "Get All Users in Group", "description": "### Get information about all the users directly included in a group.\n", @@ -7783,7 +9244,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "add_group_user", "summary": "Add a User to Group", "description": "### Adds a new user to a group.\n", @@ -7837,7 +9300,9 @@ }, "/groups/{group_id}/users/{user_id}": { "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_group_user", "summary": "Remove a User from Group", "description": "### Removes a user from a group.\n", @@ -7886,7 +9351,9 @@ }, "/groups/{group_id}/groups/{deleting_group_id}": { "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_group_from_group", "summary": "Deletes a Group from Group", "description": "### Removes a group from a group.\n", @@ -7935,7 +9402,9 @@ }, "/groups/{group_id}/attribute_values/{user_attribute_id}": { "patch": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "update_user_attribute_group_value", "summary": "Set User Attribute Group Value", "description": "### Set the value of a user attribute for a group.\n\nFor information about how user attribute values are calculated, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n", @@ -7977,6 +9446,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -7994,7 +9469,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Group"], + "tags": [ + "Group" + ], "operationId": "delete_user_attribute_group_value", "summary": "Delete User Attribute Group Value", "description": "### Remove a user attribute value from a group.\n", @@ -8024,6 +9501,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -8037,7 +9520,9 @@ }, "/boards": { "get": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "all_boards", "summary": "Get All Boards", "description": "### Get information about all boards.\n", @@ -8073,11 +9558,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "create_board", "summary": "Create Board", "description": "### Create a new board.\n", @@ -8137,13 +9624,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/boards/search": { "get": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "search_boards", "summary": "Search Boards", "description": "### Search Boards\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -8207,23 +9696,25 @@ { "name": "page", "in": "query", - "description": "The page to return. DEPRECATED. Use offset instead.", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", "required": false, "type": "integer", - "format": "int64" + "format": "int64", + "x-looker-deprecated": true }, { "name": "per_page", "in": "query", - "description": "The number of items in the returned page. DEPRECATED. Use limit instead.", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", "required": false, "type": "integer", - "format": "int64" + "format": "int64", + "x-looker-deprecated": true }, { "name": "offset", "in": "query", - "description": "The number of items to skip before returning any. (used with limit and takes priority over page and per_page)", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", "required": false, "type": "integer", "format": "int64" @@ -8231,7 +9722,7 @@ { "name": "limit", "in": "query", - "description": "The maximum number of items to return. (used with offset and takes priority over page and per_page)", + "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", "required": false, "type": "integer", "format": "int64" @@ -8242,6 +9733,13 @@ "description": "Combine given search criteria in a boolean OR expression", "required": false, "type": "boolean" + }, + { + "name": "permission", + "in": "query", + "description": "Filter results based on permission, either show (default) or update", + "required": false, + "type": "string" } ], "responses": { @@ -8267,13 +9765,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/boards/{board_id}": { "get": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "board", "summary": "Get Board", "description": "### Get information about a board.\n", @@ -8313,11 +9813,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "update_board", "summary": "Update Board", "description": "### Update a board definition.\n", @@ -8378,11 +9880,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "delete_board", "summary": "Delete Board", "description": "### Delete a board.\n", @@ -8421,13 +9925,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/board_items": { "get": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "all_board_items", "summary": "Get All Board Items", "description": "### Get information about all board items.\n", @@ -8477,11 +9983,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "create_board_item", "summary": "Create Board Item", "description": "### Create a new board item.\n", @@ -8541,13 +10049,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/board_items/{board_item_id}": { "get": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "board_item", "summary": "Get Board Item", "description": "### Get information about a board item.\n", @@ -8587,11 +10097,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "update_board_item", "summary": "Update Board Item", "description": "### Update a board item definition.\n", @@ -8652,11 +10164,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "delete_board_item", "summary": "Delete Board Item", "description": "### Delete a board item.\n", @@ -8695,13 +10209,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/primary_homepage_sections": { "get": { - "tags": ["Homepage"], + "tags": [ + "Homepage" + ], "operationId": "all_primary_homepage_sections", "summary": "Get All Primary homepage sections", "description": "### Get information about the primary homepage's sections.\n", @@ -8737,13 +10253,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/board_sections": { "get": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "all_board_sections", "summary": "Get All Board sections", "description": "### Get information about all board sections.\n", @@ -8786,11 +10304,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "create_board_section", "summary": "Create Board section", "description": "### Create a new board section.\n", @@ -8850,13 +10370,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/board_sections/{board_section_id}": { "get": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "board_section", "summary": "Get Board section", "description": "### Get information about a board section.\n", @@ -8896,11 +10418,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "update_board_section", "summary": "Update Board section", "description": "### Update a board section definition.\n", @@ -8961,11 +10485,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Board"], + "tags": [ + "Board" + ], "operationId": "delete_board_section", "summary": "Delete Board section", "description": "### Delete a board section.\n", @@ -9004,13 +10530,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/integration_hubs": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "all_integration_hubs", "summary": "Get All Integration Hubs", "description": "### Get information about all Integration Hubs.\n", @@ -9046,11 +10574,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "create_integration_hub", "summary": "Create Integration Hub", "description": "### Create a new Integration Hub.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", @@ -9110,14 +10640,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, "/integration_hubs/{integration_hub_id}": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "integration_hub", "summary": "Get Integration Hub", "description": "### Get information about a Integration Hub.\n", @@ -9157,11 +10689,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "update_integration_hub", "summary": "Update Integration Hub", "description": "### Update a Integration Hub definition.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", @@ -9222,12 +10756,14 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, "delete": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "delete_integration_hub", "summary": "Delete Integration Hub", "description": "### Delete a Integration Hub.\n", @@ -9266,13 +10802,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/integration_hubs/{integration_hub_id}/accept_legal_agreement": { "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "accept_integration_hub_legal_agreement", "summary": "Accept Integration Hub Legal Agreement", "description": "Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false.", @@ -9311,13 +10849,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/integrations": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "all_integrations", "summary": "Get All Integrations", "description": "### Get information about all Integrations.\n", @@ -9360,13 +10900,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/integrations/{integration_id}": { "get": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "integration", "summary": "Get Integration", "description": "### Get information about a Integration.\n", @@ -9406,11 +10948,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "update_integration", "summary": "Update Integration", "description": "### Update parameters on a Integration.\n", @@ -9471,13 +11015,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/integrations/{integration_id}/form": { "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "fetch_integration_form", "summary": "Fetch Remote Integration Form", "description": "Returns the Integration form for presentation to the user.", @@ -9528,13 +11074,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/integrations/{integration_id}/test": { "post": { - "tags": ["Integration"], + "tags": [ + "Integration" + ], "operationId": "test_integration", "summary": "Test integration", "description": "Tests the integration to make sure all the settings are working.", @@ -9573,13 +11121,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/internal_help_resources_content": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "internal_help_resources_content", "summary": "Get Internal Help Resources Content", "description": "### Set the menu item name and content for internal help resources\n", @@ -9603,11 +11153,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_internal_help_resources_content", "summary": "Update internal help resources content", "description": "Update internal help resources content\n", @@ -9654,13 +11206,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/internal_help_resources_enabled": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "internal_help_resources", "summary": "Get Internal Help Resources", "description": "### Get and set the options for internal help resources\n", @@ -9684,13 +11238,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/internal_help_resources": { "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_internal_help_resources", "summary": "Update internal help resources configuration", "description": "Update internal help resources settings\n", @@ -9737,16 +11293,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/ldap_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "ldap_config", "summary": "Get LDAP Configuration", - "description": "### Get the LDAP configuration.\n\nLooker can be optionally configured to authenticate users against an Active Directory or other LDAP directory server.\nLDAP setup requires coordination with an administrator of that directory server.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single LDAP configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nLooker will never return an **auth_password** field. That value can be set, but never retrieved.\n\nSee the [Looker LDAP docs](https://www.looker.com/docs/r/api/ldap_setup) for additional information.\n", + "description": "### Get the LDAP configuration.\n\nLooker can be optionally configured to authenticate users against an Active Directory or other LDAP directory server.\nLDAP setup requires coordination with an administrator of that directory server.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single LDAP configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nLooker will never return an **auth_password** field. That value can be set, but never retrieved.\n\nSee the [Looker LDAP docs](https://cloud.google.com/looker/docs/r/api/ldap_setup) for additional information.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { "description": "LDAP Configuration.", @@ -9754,6 +11312,12 @@ "$ref": "#/definitions/LDAPConfig" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -9765,10 +11329,12 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_ldap_config", "summary": "Update LDAP Configuration", - "description": "### Update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any LDAP setting changes be tested using the APIs below before being set globally.\n\nSee the [Looker LDAP docs](https://www.looker.com/docs/r/api/ldap_setup) for additional information.\n", + "description": "### Update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any LDAP setting changes be tested using the APIs below before being set globally.\n\nSee the [Looker LDAP docs](https://cloud.google.com/looker/docs/r/api/ldap_setup) for additional information.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "body", @@ -9793,6 +11359,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -9812,10 +11384,12 @@ }, "/ldap_config/test_connection": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_connection", "summary": "Test LDAP Connection", - "description": "### Test the connection settings for an LDAP configuration.\n\nThis tests that the connection is possible given a connection_host and connection_port.\n\n**connection_host** and **connection_port** are required. **connection_tls** is optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true\n}\n```\n\nNo authentication to the LDAP server is attempted.\n\nThe active LDAP settings are not modified.\n", + "description": "### Test the connection settings for an LDAP configuration.\n\nThis tests that the connection is possible given a connection_host and connection_port.\n\n**connection_host** and **connection_port** are required. **connection_tls** is optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true\n}\n```\n\nNo authentication to the LDAP server is attempted.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "body", @@ -9840,6 +11414,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -9859,10 +11439,12 @@ }, "/ldap_config/test_auth": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_auth", "summary": "Test LDAP Auth", - "description": "### Test the connection authentication settings for an LDAP configuration.\n\nThis tests that the connection is possible and that a 'server' account to be used by Looker can authenticate to the LDAP server given connection and authentication information.\n\n**connection_host**, **connection_port**, and **auth_username**, are required. **connection_tls** and **auth_password** are optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true,\n \"auth_username\": \"cn=looker,dc=example,dc=com\",\n \"auth_password\": \"secret\"\n}\n```\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\nThe active LDAP settings are not modified.\n\n", + "description": "### Test the connection authentication settings for an LDAP configuration.\n\nThis tests that the connection is possible and that a 'server' account to be used by Looker can authenticate to the LDAP server given connection and authentication information.\n\n**connection_host**, **connection_port**, and **auth_username**, are required. **connection_tls** and **auth_password** are optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true,\n \"auth_username\": \"cn=looker,dc=example,dc=com\",\n \"auth_password\": \"secret\"\n}\n```\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "body", @@ -9887,6 +11469,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -9906,10 +11494,12 @@ }, "/ldap_config/test_user_info": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_user_info", "summary": "Test LDAP User Info", - "description": "### Test the user authentication settings for an LDAP configuration without authenticating the user.\n\nThis test will let you easily test the mapping for user properties and roles for any user without needing to authenticate as that user.\n\nThis test accepts a full LDAP configuration along with a username and attempts to find the full info for the user from the LDAP server without actually authenticating the user. So, user password is not required.The configuration is validated before attempting to contact the server.\n\n**test_ldap_user** is required.\n\nThe active LDAP settings are not modified.\n\n", + "description": "### Test the user authentication settings for an LDAP configuration without authenticating the user.\n\nThis test will let you easily test the mapping for user properties and roles for any user withoutneeding to authenticate as that user.\n\nThis test accepts a full LDAP configuration along with a username and attempts to find the full infofor the user from the LDAP server without actually authenticating the user. So, user password is notrequired.The configuration is validated before attempting to contact the server.\n\n**test_ldap_user** is required.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "body", @@ -9934,6 +11524,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -9953,10 +11549,12 @@ }, "/ldap_config/test_user_auth": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "test_ldap_config_user_auth", "summary": "Test LDAP User Auth", - "description": "### Test the user authentication settings for an LDAP configuration.\n\nThis test accepts a full LDAP configuration along with a username/password pair and attempts to authenticate the user with the LDAP server. The configuration is validated before attempting the authentication.\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\n**test_ldap_user** and **test_ldap_password** are required.\n\nThe active LDAP settings are not modified.\n\n", + "description": "### Test the user authentication settings for an LDAP configuration.\n\nThis test accepts a full LDAP configuration along with a username/password pair and attempts to authenticate the user with the LDAP server. The configuration is validated before attempting the authentication.\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\n**test_ldap_user** and **test_ldap_password** are required.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "body", @@ -9981,6 +11579,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -10000,10 +11604,12 @@ }, "/legacy_features": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "all_legacy_features", "summary": "Get All Legacy Features", - "description": "### Get all legacy features.\n", + "description": "### Get all legacy features.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { "description": "Legacy Feature", @@ -10020,6 +11626,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -10033,10 +11645,12 @@ }, "/legacy_features/{legacy_feature_id}": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "legacy_feature", "summary": "Get Legacy Feature", - "description": "### Get information about the legacy feature with a specific id.\n", + "description": "### Get information about the legacy feature with a specific id.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "legacy_feature_id", @@ -10059,6 +11673,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -10070,10 +11690,12 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_legacy_feature", "summary": "Update Legacy Feature", - "description": "### Update information about the legacy feature with a specific id.\n", + "description": "### Update information about the legacy feature with a specific id.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "legacy_feature_id", @@ -10105,6 +11727,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -10130,7 +11758,9 @@ }, "/locales": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "all_locales", "summary": "Get All Locales", "description": "### Get a list of locales that Looker supports.\n", @@ -10163,7 +11793,9 @@ }, "/looks": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "all_looks", "summary": "Get All Looks", "description": "### Get information about all active Looks\n\nReturns an array of **abbreviated Look objects** describing all the looks that the caller has access to. Soft-deleted Looks are **not** included.\n\nGet the **full details** of a specific look by id with [look(id)](#!/Look/look)\n\nFind **soft-deleted looks** with [search_looks()](#!/Look/search_looks)\n", @@ -10199,11 +11831,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "create_look", "summary": "Create Look", "description": "### Create a Look\n\nTo create a look to display query data, first create the query with [create_query()](#!/Query/create_query)\nthen assign the query's id to the `query_id` property in the call to `create_look()`.\n\nTo place the look into a particular space, assign the space's id to the `space_id` property\nin the call to `create_look()`.\n", @@ -10263,13 +11897,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/looks/search": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "search_looks", "summary": "Search Looks", "description": "### Search Looks\n\nReturns an **array of Look objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single look** by id with [look(id)](#!/Look/look)\n", @@ -10430,13 +12066,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/looks/{look_id}": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "look", "summary": "Get Look", "description": "### Get a Look.\n\nReturns detailed information about a Look and its associated Query.\n\n", @@ -10476,14 +12114,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "update_look", "summary": "Update Look", - "description": "### Modify a Look\n\nUse this function to modify parts of a look. Property values given in a call to `update_look` are\napplied to the existing look, so there's no need to include properties whose values are not changing.\nIt's best to specify only the properties you want to change and leave everything else out\nof your `update_look` call. **Look properties marked 'read-only' will be ignored.**\n\nWhen a user deletes a look in the Looker UI, the look data remains in the database but is\nmarked with a deleted flag (\"soft-deleted\"). Soft-deleted looks can be undeleted (by an admin)\nif the delete was in error.\n\nTo soft-delete a look via the API, use [update_look()](#!/Look/update_look) to change the look's `deleted` property to `true`.\nYou can undelete a look by calling `update_look` to change the look's `deleted` property to `false`.\n\nSoft-deleted looks are excluded from the results of [all_looks()](#!/Look/all_looks) and [search_looks()](#!/Look/search_looks), so they\nessentially disappear from view even though they still reside in the db.\nIn API 3.1 and later, you can pass `deleted: true` as a parameter to [search_looks()](#!/3.1/Look/search_looks) to list soft-deleted looks.\n\nNOTE: [delete_look()](#!/Look/delete_look) performs a \"hard delete\" - the look data is removed from the Looker\ndatabase and destroyed. There is no \"undo\" for `delete_look()`.\n", + "description": "### Modify a Look\n\nUse this function to modify parts of a look. Property values given in a call to `update_look` are\napplied to the existing look, so there's no need to include properties whose values are not changing.\nIt's best to specify only the properties you want to change and leave everything else out\nof your `update_look` call. **Look properties marked 'read-only' will be ignored.**\n\nWhen a user deletes a look in the Looker UI, the look data remains in the database but is\nmarked with a deleted flag (\"soft-deleted\"). Soft-deleted looks can be undeleted (by an admin)\nif the delete was in error.\n\nTo soft-delete a look via the API, use [update_look()](#!/Look/update_look) to change the look's `deleted` property to `true`.\nYou can undelete a look by calling `update_look` to change the look's `deleted` property to `false`.\n\nSoft-deleted looks are excluded from the results of [all_looks()](#!/Look/all_looks) and [search_looks()](#!/Look/search_looks), so they\nessentially disappear from view even though they still reside in the db.\nYou can pass `deleted: true` as a parameter to [search_looks()](#!/Look/search_looks) to list soft-deleted looks.\n\nNOTE: [delete_look()](#!/Look/delete_look) performs a \"hard delete\" - the look data is removed from the Looker\ndatabase and destroyed. There is no \"undo\" for `delete_look()`.\n", "parameters": [ { "name": "look_id", @@ -10541,11 +12181,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "delete_look", "summary": "Delete Look", "description": "### Permanently Delete a Look\n\nThis operation **permanently** removes a look from the Looker database.\n\nNOTE: There is no \"undo\" for this kind of delete.\n\nFor information about soft-delete (which can be undone) see [update_look()](#!/Look/update_look).\n", @@ -10584,17 +12226,24 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/looks/{look_id}/run/{result_format}": { "get": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "run_look", "summary": "Run Look", - "description": "### Run a Look\n\nRuns a given look's query and returns the results in the requested format.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "description": "### Run a Look\n\nRuns a given look's query and returns the results in the requested format.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "look_id", @@ -10665,7 +12314,7 @@ { "name": "force_production", "in": "query", - "description": "Force use of production models even if the user is in development mode.", + "description": "Force use of production models even if the user is in development mode. Note that this flag being false does not guarantee development models will be used.", "required": false, "type": "boolean" }, @@ -10736,7 +12385,9 @@ }, "/looks/{look_id}/copy": { "post": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "copy_look", "summary": "Copy Look", "description": "### Copy an existing look\n\nCreates a copy of an existing look, in a specified folder, and returns the copied look.\n\n`look_id` and `folder_id` are required.\n\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", @@ -10800,13 +12451,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/looks/{look_id}/move": { "patch": { - "tags": ["Look"], + "tags": [ + "Look" + ], "operationId": "move_look", "summary": "Move Look", "description": "### Move an existing look\n\nMoves a look to a specified folder, and returns the moved look.\n\n`look_id` and `folder_id` are required.\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", @@ -10864,13 +12517,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/lookml_models": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "all_lookml_models", "summary": "Get All LookML Models", "description": "### Get information about all lookml models.\n", @@ -10926,7 +12581,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "create_lookml_model", "summary": "Create LookML Model", "description": "### Create a lookml model using the specified configuration.\n", @@ -10985,7 +12642,9 @@ }, "/lookml_models/{lookml_model_name}": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "lookml_model", "summary": "Get LookML Model", "description": "### Get information about a lookml model.\n", @@ -11029,7 +12688,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "update_lookml_model", "summary": "Update LookML Model", "description": "### Update a lookml model using the specified configuration.\n", @@ -11087,7 +12748,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "delete_lookml_model", "summary": "Delete LookML Model", "description": "### Delete a lookml model.\n", @@ -11132,7 +12795,9 @@ }, "/lookml_models/{lookml_model_name}/explores/{explore_name}": { "get": { - "tags": ["LookmlModel"], + "tags": [ + "LookmlModel" + ], "operationId": "lookml_model_explore", "summary": "Get LookML Model Explore", "description": "### Get information about a lookml model explore.\n", @@ -11185,7 +12850,9 @@ }, "/merge_queries/{merge_query_id}": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "merge_query", "summary": "Get Merge Query", "description": "### Get Merge Query\n\nReturns a merge query object given its id.\n", @@ -11225,13 +12892,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/merge_queries": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_merge_query", "summary": "Create Merge Query", "description": "### Create Merge Query\n\nCreates a new merge query object.\n\nA merge query takes the results of one or more queries and combines (merges) the results\naccording to field mapping definitions. The result is similar to a SQL left outer join.\n\nA merge query can merge results of queries from different SQL databases.\n\nThe order that queries are defined in the source_queries array property is significant. The\nfirst query in the array defines the primary key into which the results of subsequent\nqueries will be merged.\n\nLike model/view query objects, merge queries are immutable and have structural identity - if\nyou make a request to create a new merge query that is identical to an existing merge query,\nthe existing merge query will be returned instead of creating a duplicate. Conversely, any\nchange to the contents of a merge query will produce a new object with a new id.\n", @@ -11291,13 +12960,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/models/{model_name}/views/{view_name}/fields/{field_name}/suggestions": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "model_fieldname_suggestions", "summary": "Model field name suggestions", "description": "### Field name suggestions for a model and view\n\n`filters` is a string hash of values, with the key as the field name and the string value as the filter expression:\n\n```ruby\n{'users.age': '>=60'}\n```\n\nor\n\n```ruby\n{'users.age': '<30'}\n```\n\nor\n\n```ruby\n{'users.age': '=50'}\n```\n", @@ -11361,13 +13032,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/models/{model_name}": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "get_model", "summary": "Get a single model", "description": "### Get a single model\n\n", @@ -11400,13 +13073,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/connections/{connection_name}/databases": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "connection_databases", "summary": "List accessible databases to this connection", "description": "### List databases available to this connection\n\nCertain dialects can support multiple databases per single connection.\nIf this connection supports multiple databases, the database names will be returned in an array.\n\nConnections using dialects that do not support multiple databases will return an empty array.\n\n**Note**: [Connection Features](#!/Metadata/connection_features) can be used to determine if a connection supports\nmultiple databases.\n", @@ -11448,13 +13123,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/connections/{connection_name}/features": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "connection_features", "summary": "Metadata features supported by this connection", "description": "### Retrieve metadata features for this connection\n\nReturns a list of feature names with `true` (available) or `false` (not available)\n\n", @@ -11506,14 +13183,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, "/connections/{connection_name}/schemas": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "connection_schemas", "summary": "Get schemas for a connection", "description": "### Get the list of schemas and tables for a connection\n\n", @@ -11582,13 +13261,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/connections/{connection_name}/tables": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "connection_tables", "summary": "Get tables for a connection", "description": "### Get the list of tables for a schema\n\nFor dialects that support multiple databases, optionally identify which to use. If not provided, the default\ndatabase for the connection will be used.\n\nFor dialects that do **not** support multiple databases, **do not use** the database parameter\n", @@ -11679,16 +13360,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/connections/{connection_name}/columns": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "connection_columns", "summary": "Get columns for a connection", - "description": "### Get the columns (and therefore also the tables) in a specific schema\n\n", + "description": "### Get the columns (and therefore also the tables) in a specific schema\n", "parameters": [ { "name": "connection_name", @@ -11776,13 +13459,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/connections/{connection_name}/search_columns": { "get": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "connection_search_columns", "summary": "Search a connection for columns", "description": "### Search a connection for columns matching the specified name\n\n**Note**: `column_name` must be a valid column name. It is not a search pattern.\n", @@ -11844,14 +13529,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, "/connections/{connection_name}/cost_estimate": { "post": { - "tags": ["Metadata"], + "tags": [ + "Metadata" + ], "operationId": "connection_cost_estimate", "summary": "Estimate costs for a connection", "description": "### Connection cost estimating\n\nAssign a `sql` statement to the body of the request. e.g., for Ruby, `{sql: 'select * from users'}`\n\n**Note**: If the connection's dialect has no support for cost estimates, an error will be returned\n", @@ -11912,14 +13599,16 @@ } } }, - "x-looker-status": "beta", - "x-looker-activity-type": "non_query", + "x-looker-status": "stable", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, "/mobile/settings": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "mobile_settings", "summary": "Get Mobile_Settings", "description": "### Get all mobile settings.\n", @@ -11947,9 +13636,167 @@ "x-looker-activity-type": "non_query" } }, + "/mobile/device": { + "post": { + "tags": [ + "Auth" + ], + "operationId": "register_mobile_device", + "summary": "Register Mobile Device", + "description": "### Registers a mobile device.\n# Required fields: [:device_token, :device_type]\n", + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Writable device parameters.", + "required": true, + "schema": { + "$ref": "#/definitions/MobileToken" + } + } + ], + "responses": { + "200": { + "description": "Device registered successfully.", + "schema": { + "$ref": "#/definitions/MobileToken" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, + "/mobile/device/{device_id}": { + "patch": { + "tags": [ + "Auth" + ], + "operationId": "update_mobile_device_registration", + "summary": "Update Mobile Device Registration", + "description": "### Updates the mobile device registration\n", + "parameters": [ + { + "name": "device_id", + "in": "path", + "description": "Unique id of the device.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Device registration updated successfully.", + "schema": { + "$ref": "#/definitions/MobileToken" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + }, + "delete": { + "tags": [ + "Auth" + ], + "operationId": "deregister_mobile_device", + "summary": "Deregister Mobile Device", + "description": "### Deregister a mobile device.\n", + "parameters": [ + { + "name": "device_id", + "in": "path", + "description": "Unique id of the device.", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "Device de-registered successfully." + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query" + } + }, "/model_sets/search": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "search_model_sets", "summary": "Search Model Sets", "description": "### Search model sets\nReturns all model set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -12049,7 +13896,9 @@ }, "/model_sets/{model_set_id}": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "model_set", "summary": "Get Model Set", "description": "### Get information about the model set with a specific id.\n", @@ -12093,7 +13942,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "delete_model_set", "summary": "Delete Model Set", "description": "### Delete the model set with a specific id.\n", @@ -12136,7 +13987,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "update_model_set", "summary": "Update Model Set", "description": "### Update information about the model set with a specific id.\n", @@ -12196,7 +14049,9 @@ }, "/model_sets": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_model_sets", "summary": "Get All Model Sets", "description": "### Get information about all model sets.\n", @@ -12230,7 +14085,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "create_model_set", "summary": "Create Model Set", "description": "### Create a model set with the specified information. Model sets are used by Roles.\n", @@ -12283,7 +14140,9 @@ }, "/oauth_client_apps": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "all_oauth_client_apps", "summary": "Get All OAuth Client Apps", "description": "### List All OAuth Client Apps\n\nLists all applications registered to use OAuth2 login with this Looker instance, including\nenabled and disabled apps.\n\nResults are filtered to include only the apps that the caller (current user)\nhas permission to see.\n", @@ -12319,13 +14178,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/oauth_client_apps/{client_guid}": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "oauth_client_app", "summary": "Get OAuth Client App", "description": "### Get Oauth Client App\n\nReturns the registered app client with matching client_guid.\n", @@ -12365,14 +14226,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_oauth_client_app", "summary": "Delete OAuth Client App", - "description": "### Delete OAuth Client App\n\nDeletes the registration info of the app with the matching client_guid.\nAll active sessions and tokens issued for this app will immediately become invalid.\n\n### Note: this deletion cannot be undone.\n", + "description": "### Delete OAuth Client App\n\nDeletes the registration info of the app with the matching client_guid.\nAll active sessions and tokens issued for this app will immediately become invalid.\n\nAs with most REST DELETE operations, this endpoint does not return an error if the\nindicated resource does not exist.\n\n### Note: this deletion cannot be undone.\n", "parameters": [ { "name": "client_guid", @@ -12408,11 +14271,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "register_oauth_client_app", "summary": "Register OAuth App", "description": "### Register an OAuth2 Client App\n\nRegisters details identifying an external web app or native app as an OAuth2 login client of the Looker instance.\nThe app registration must provide a unique client_guid and redirect_uri that the app will present\nin OAuth login requests. If the client_guid and redirect_uri parameters in the login request do not match\nthe app details registered with the Looker instance, the request is assumed to be a forgery and is rejected.\n", @@ -12479,11 +14344,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_oauth_client_app", "summary": "Update OAuth App", "description": "### Update OAuth2 Client App Details\n\nModifies the details a previously registered OAuth2 login client app.\n", @@ -12544,13 +14411,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/oauth_client_apps/{client_guid}/tokens": { "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "invalidate_tokens", "summary": "Invalidate Tokens", "description": "### Invalidate All Issued Tokens\n\nImmediately invalidates all auth codes, sessions, access tokens and refresh tokens issued for\nthis app for ALL USERS of this app.\n", @@ -12595,7 +14464,9 @@ }, "/oauth_client_apps/{client_guid}/users/{user_id}": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "activate_app_user", "summary": "Activate OAuth App User", "description": "### Activate an app for a user\n\nActivates a user for a given oauth client app. This indicates the user has been informed that\nthe app will have access to the user's looker data, and that the user has accepted and allowed\nthe app to use their Looker account.\n\nActivating a user for an app that the user is already activated with returns a success response.\n", @@ -12661,7 +14532,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "deactivate_app_user", "summary": "Deactivate OAuth App User", "description": "### Deactivate an app for a user\n\nDeactivate a user for a given oauth client app. All tokens issued to the app for\nthis user will be invalid immediately. Before the user can use the app with their\nLooker account, the user will have to read and accept an account use disclosure statement for the app.\n\nAdmin users can deactivate other users, but non-admin users can only deactivate themselves.\n\nAs with most REST DELETE operations, this endpoint does not return an error if the indicated\nresource (app or user) does not exist or has already been deactivated.\n", @@ -12720,10 +14593,12 @@ }, "/oidc_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "oidc_config", "summary": "Get OIDC Configuration", - "description": "### Get the OIDC configuration.\n\nLooker can be optionally configured to authenticate users against an OpenID Connect (OIDC)\nauthentication server. OIDC setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single OIDC configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n", + "description": "### Get the OIDC configuration.\n\nLooker can be optionally configured to authenticate users against an OpenID Connect (OIDC)\nauthentication server. OIDC setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single OIDC configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { "description": "OIDC Configuration.", @@ -12731,6 +14606,12 @@ "$ref": "#/definitions/OIDCConfig" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -12738,14 +14619,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_oidc_config", "summary": "Update OIDC Configuration", - "description": "### Update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any OIDC setting changes be tested using the APIs below before being set globally.\n", + "description": "### Update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any OIDC setting changes be tested using the APIs below before being set globally.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "body", @@ -12770,6 +14653,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -12783,16 +14672,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/oidc_test_configs/{test_slug}": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "oidc_test_config", "summary": "Get OIDC Test Configuration", - "description": "### Get a OIDC test configuration by test_slug.\n", + "description": "### Get a OIDC test configuration by test_slug.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "test_slug", @@ -12809,6 +14700,12 @@ "$ref": "#/definitions/OIDCConfig" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -12816,14 +14713,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_oidc_test_config", "summary": "Delete OIDC Test Configuration", - "description": "### Delete a OIDC test configuration.\n", + "description": "### Delete a OIDC test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "test_slug", @@ -12846,6 +14745,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -12853,16 +14758,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/oidc_test_configs": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "create_oidc_test_config", "summary": "Create OIDC Test Configuration", - "description": "### Create a OIDC test configuration.\n", + "description": "### Create a OIDC test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "body", @@ -12887,6 +14794,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -12900,16 +14813,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/password_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "password_config", "summary": "Get Password Config", - "description": "### Get password config.\n", + "description": "### Get password config.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { "description": "Password Config", @@ -12923,6 +14838,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -12930,14 +14851,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_password_config", "summary": "Update Password Config", - "description": "### Update password config.\n", + "description": "### Update password config.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "body", @@ -12962,6 +14885,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -12981,16 +14910,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/password_config/force_password_reset_at_next_login_for_all_users": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "force_password_reset_at_next_login_for_all_users", "summary": "Force password reset", - "description": "### Force all credentials_email users to reset their login passwords upon their next login.\n", + "description": "### Force all credentials_email users to reset their login passwords upon their next login.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { "description": "Password Config", @@ -13004,6 +14935,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -13023,13 +14960,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/permissions": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_permissions", "summary": "Get All Permissions", "description": "### Get all supported permissions.\n", @@ -13062,7 +15001,9 @@ }, "/permission_sets/search": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "search_permission_sets", "summary": "Search Permission Sets", "description": "### Search permission sets\nReturns all permission set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -13162,7 +15103,9 @@ }, "/permission_sets/{permission_set_id}": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "permission_set", "summary": "Get Permission Set", "description": "### Get information about the permission set with a specific id.\n", @@ -13206,7 +15149,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "delete_permission_set", "summary": "Delete Permission Set", "description": "### Delete the permission set with a specific id.\n", @@ -13255,7 +15200,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "update_permission_set", "summary": "Update Permission Set", "description": "### Update information about the permission set with a specific id.\n", @@ -13321,7 +15268,9 @@ }, "/permission_sets": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_permission_sets", "summary": "Get All Permission Sets", "description": "### Get information about all permission sets.\n", @@ -13361,7 +15310,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "create_permission_set", "summary": "Create Permission Set", "description": "### Create a permission set with the specified information. Permission sets are used by Roles.\n", @@ -13420,7 +15371,9 @@ }, "/projects/{project_id}/deploy_ref_to_production": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "deploy_ref_to_production", "summary": "Deploy Remote Branch or Ref to Production", "description": "### Deploy a Remote Branch or Ref to Production\n\nGit must have been configured and deploy permission required.\n\nDeploy is a one/two step process\n1. If this is the first deploy of this project, create the production project with git repository.\n2. Pull the branch or ref into the production project.\n\nCan only specify either a branch or a ref.\n\n", @@ -13482,13 +15435,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/deploy_to_production": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "deploy_to_production", "summary": "Deploy To Production", "description": "### Deploy LookML from this Development Mode Project to Production\n\nGit must have been configured, must be in dev mode and deploy permission required\n\nDeploy is a two / three step process:\n\n1. Push commits in current branch of dev mode project to the production branch (origin/master).\n Note a. This step is skipped in read-only projects.\n Note b. If this step is unsuccessful for any reason (e.g. rejected non-fastforward because production branch has\n commits not in current branch), subsequent steps will be skipped.\n2. If this is the first deploy of this project, create the production project with git repository.\n3. Pull the production branch into the production project.\n\n", @@ -13536,13 +15491,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/reset_to_production": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "reset_project_to_production", "summary": "Reset To Production", "description": "### Reset a project to the revision of the project that is in production.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", @@ -13590,13 +15547,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/reset_to_remote": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "reset_project_to_remote", "summary": "Reset To Remote", "description": "### Reset a project development branch to the revision of the project that is on the remote.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", @@ -13644,13 +15603,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_projects", "summary": "Get All Projects", "description": "### Get All Projects\n\nReturns all projects visible to the current user\n", @@ -13686,11 +15647,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "create_project", "summary": "Create Project", "description": "### Create A Project\n\ndev mode required.\n- Call `update_session` to select the 'dev' workspace.\n\n`name` is required.\n`git_remote_url` is not allowed. To configure Git for the newly created project, follow the instructions in `update_project`.\n\n", @@ -13743,13 +15706,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project", "summary": "Get Project", "description": "### Get A Project\n\nReturns the project with the given project id\n", @@ -13789,11 +15754,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "update_project", "summary": "Update Project", "description": "### Update Project Configuration\n\nApply changes to a project's configuration.\n\n\n#### Configuring Git for a Project\n\nTo set up a Looker project with a remote git repository, follow these steps:\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `create_git_deploy_key` to create a new deploy key for the project\n1. Copy the deploy key text into the remote git repository's ssh key configuration\n1. Call `update_project` to set project's `git_remote_url` ()and `git_service_name`, if necessary).\n\nWhen you modify a project's `git_remote_url`, Looker connects to the remote repository to fetch\nmetadata. The remote git repository MUST be configured with the Looker-generated deploy\nkey for this project prior to setting the project's `git_remote_url`.\n\nTo set up a Looker project with a git repository residing on the Looker server (a 'bare' git repo):\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `update_project` setting `git_remote_url` to null and `git_service_name` to \"bare\".\n\n", @@ -13866,13 +15833,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/manifest": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "manifest", "summary": "Get Manifest", "description": "### Get A Projects Manifest object\n\nReturns the project with the given project id\n", @@ -13905,17 +15874,21 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/git/deploy_key": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "create_git_deploy_key", "summary": "Create Deploy Key", "description": "### Create Git Deploy Key\n\nCreate a public/private key pair for authenticating ssh git requests from Looker to a remote git repository\nfor a particular Looker project.\n\nReturns the public key of the generated ssh key pair.\n\nCopy this public key to your remote git repository's ssh keys configuration so that the remote git service can\nvalidate and accept git requests from the Looker server.\n", - "produces": ["text/plain"], + "produces": [ + "text/plain" + ], "parameters": [ { "name": "project_id", @@ -13963,15 +15936,19 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "git_deploy_key", "summary": "Git Deploy Key", "description": "### Git Deploy Key\n\nReturns the ssh public key previously created for a project's git repository.\n", - "produces": ["text/plain"], + "produces": [ + "text/plain" + ], "parameters": [ { "name": "project_id", @@ -14001,13 +15978,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/validate": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "validate_project", "summary": "Validate Project", "description": "### Validate Project\n\nPerforms lint validation of all lookml files in the project.\nReturns a list of errors found, if any.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. For best performance, call `validate_project(project_id)` only\nwhen you really want to recompute project validation. To quickly display the results of\nthe most recent project validation (without recomputing), use `project_validation_results(project_id)`\n", @@ -14059,11 +16038,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project_validation_results", "summary": "Cached Project Validation Results", "description": "### Get Cached Project Validation Results\n\nReturns the cached results of a previous project validation calculation, if any.\nReturns http status 204 No Content if no validation results exist.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. Use this API to simply fetch the results of the most recent\nproject validation rather than revalidating the entire project from scratch.\n\nA value of `\"stale\": true` in the response indicates that the project has changed since\nthe cached validation results were computed. The cached validation results may no longer\nreflect the current state of the project.\n", @@ -14106,13 +16087,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/current_workspace": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project_workspace", "summary": "Get Project Workspace", "description": "### Get Project Workspace\n\nReturns information about the state of the project files in the currently selected workspace\n", @@ -14152,13 +16135,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/files": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_project_files", "summary": "Get All Project Files", "description": "### Get All Project Files\n\nReturns a list of the files in the project\n", @@ -14201,13 +16186,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/files/file": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "project_file", "summary": "Get Project File", "description": "### Get Project File Info\n\nReturns information about a file in the project\n", @@ -14254,13 +16241,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/git_connection_tests": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_git_connection_tests", "summary": "Get All Git Connection Tests", "description": "### Get All Git Connection Tests\n\ndev mode required.\n - Call `update_session` to select the 'dev' workspace.\n\nReturns a list of tests which can be run against a project's (or the dependency project for the provided remote_url) git connection. Call [Run Git Connection Test](#!/Project/run_git_connection_test) to execute each test in sequence.\n\nTests are ordered by increasing specificity. Tests should be run in the order returned because later tests require functionality tested by tests earlier in the test list.\n\nFor example, a late-stage test for write access is meaningless if connecting to the git server (an early test) is failing.\n", @@ -14303,13 +16292,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/git_connection_tests/{test_id}": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "run_git_connection_test", "summary": "Run Git Connection Test", "description": "### Run a git connection test\n\nRun the named test on the git service used by this project (or the dependency project for the provided remote_url) and return the result. This\nis intended to help debug git connections when things do not work properly, to give\nmore helpful information about why a git url is not working with Looker.\n\nTests should be run in the order they are returned by [Get All Git Connection Tests](#!/Project/all_git_connection_tests).\n", @@ -14375,13 +16366,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/lookml_tests": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "all_lookml_tests", "summary": "Get All LookML Tests", "description": "### Get All LookML Tests\n\nReturns a list of tests which can be run to validate a project's LookML code and/or the underlying data,\noptionally filtered by the file id.\nCall [Run LookML Test](#!/Project/run_lookml_test) to execute tests.\n", @@ -14424,13 +16417,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/lookml_tests/run": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "run_lookml_test", "summary": "Run LookML Test", "description": "### Run LookML Tests\n\nRuns all tests in the project, optionally filtered by file, test, and/or model.\n", @@ -14499,13 +16494,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{project_id}/tag": { "post": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "tag_ref", "summary": "Tag Ref", "description": "### Creates a tag for the most recent commit, or a specific ref is a SHA is provided\n\nThis is an internal-only, undocumented route.\n", @@ -14595,7 +16592,9 @@ }, "/render_tasks/looks/{look_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_look_render_task", "summary": "Create Look Render Task", "description": "### Create a new task to render a look to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -14676,13 +16675,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/render_tasks/queries/{query_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_query_render_task", "summary": "Create Query Render Task", "description": "### Create a new task to render an existing query to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -14763,13 +16764,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/render_tasks/dashboards/{dashboard_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_dashboard_render_task", "summary": "Create Dashboard Render Task", "description": "### Create a new task to render a dashboard to a document or image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -14840,6 +16843,13 @@ "description": "Whether or not to expand table vis to full length", "required": false, "type": "boolean" + }, + { + "name": "theme", + "in": "query", + "description": "Theme to apply. Will render embedded version of dashboard if valid", + "required": false, + "type": "string" } ], "responses": { @@ -14880,13 +16890,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/render_tasks/{render_task_id}": { "get": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "render_task", "summary": "Get Render Task", "description": "### Get information about a render task.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -14926,17 +16938,23 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/render_tasks/{render_task_id}/results": { "get": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "render_task_results", "summary": "Render Task Results", "description": "### Get the document or image produced by a completed render task.\n\nNote that the PDF or image result will be a binary blob in the HTTP response, as indicated by the\nContent-Type in the response headers. This may require specialized (or at least different) handling than text\nresponses such as JSON. You may need to tell your HTTP client that the response is binary so that it does not\nattempt to parse the binary data as text.\n\nIf the render task exists but has not finished rendering the results, the response HTTP status will be\n**202 Accepted**, the response body will be empty, and the response will have a Retry-After header indicating\nthat the caller should repeat the request at a later time.\n\nReturns 404 if the render task cannot be found, if the cached result has expired, or if the caller\ndoes not have permission to view the results.\n\nFor detailed information about the status of the render task, use [Render Task](#!/RenderTask/render_task).\nPolling loops waiting for completion of a render task would be better served by polling **render_task(id)** until\nthe task status reaches completion (or error) instead of polling **render_task_results(id)** alone.\n", - "produces": ["image/jpeg", "image/png", "application/pdf"], + "produces": [ + "image/jpeg", + "image/png", + "application/pdf" + ], "parameters": [ { "name": "render_task_id", @@ -14969,13 +16987,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/render_tasks/dashboard_elements/{dashboard_element_id}/{result_format}": { "post": { - "tags": ["RenderTask"], + "tags": [ + "RenderTask" + ], "operationId": "create_dashboard_element_render_task", "summary": "Create Dashboard Element Render Task", "description": "### Create a new task to render a dashboard element to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", @@ -15056,13 +17076,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/projects/{root_project_id}/credential/{credential_id}": { "put": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "update_repository_credential", "summary": "Create Repository Credential", "description": "### Configure Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n\n", @@ -15129,11 +17151,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "delete_repository_credential", "summary": "Delete Repository Credential", "description": "### Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n", @@ -15179,13 +17203,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/projects/{root_project_id}/credentials": { "get": { - "tags": ["Project"], + "tags": [ + "Project" + ], "operationId": "get_all_repository_credentials", "summary": "Get All Repository Credentials", "description": "### Get all Repository Credentials for a project\n\n`root_project_id` is required.\n", @@ -15221,13 +17247,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/roles": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "all_roles", "summary": "Get All Roles", "description": "### Get information about all roles.\n", @@ -15278,7 +17306,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "create_role", "summary": "Create Role", "description": "### Create a role with the specified information.\n", @@ -15337,7 +17367,9 @@ }, "/roles/search": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "search_roles", "summary": "Search Roles", "description": "### Search roles\n\nReturns all role records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -15430,7 +17462,9 @@ }, "/roles/search/with_user_count": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "search_roles_with_user_count", "summary": "Search Roles with User Count", "description": "### Search roles include user count\n\nReturns all role records that match the given search criteria, and attaches\nassociated user counts.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", @@ -15517,13 +17551,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/roles/{role_id}": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "role", "summary": "Get Role", "description": "### Get information about the role with a specific id.\n", @@ -15560,7 +17596,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "delete_role", "summary": "Delete Role", "description": "### Delete the role with a specific id.\n", @@ -15609,7 +17647,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "update_role", "summary": "Update Role", "description": "### Update information about the role with a specific id.\n", @@ -15675,7 +17715,9 @@ }, "/roles/{role_id}/groups": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "role_groups", "summary": "Get Role Groups", "description": "### Get information about all the groups with the role that has a specific id.\n", @@ -15722,10 +17764,12 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "set_role_groups", "summary": "Update Role Groups", - "description": "### Set all groups for a role, removing all existing group associations from that role.\n", + "description": "### Set all groups for a role, removing all existing group associations from that role.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "role_id", @@ -15763,6 +17807,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -15788,7 +17838,9 @@ }, "/roles/{role_id}/users": { "get": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "role_users", "summary": "Get Role Users", "description": "### Get information about all the users with the role that has a specific id.\n", @@ -15842,7 +17894,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Role"], + "tags": [ + "Role" + ], "operationId": "set_role_users", "summary": "Update Role Users", "description": "### Set all the users of the role with a specific id.\n", @@ -15920,7 +17974,9 @@ }, "/running_queries": { "get": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "all_running_queries", "summary": "Get All Running Queries", "description": "Get information about all running queries.\n", @@ -15947,7 +18003,9 @@ }, "/running_queries/{query_task_id}": { "delete": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "kill_query", "summary": "Kill Running Query", "description": "Kill a query with a specific query_task_id.\n", @@ -15992,10 +18050,12 @@ }, "/saml_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "saml_config", "summary": "Get SAML Configuration", - "description": "### Get the SAML configuration.\n\nLooker can be optionally configured to authenticate users against a SAML authentication server.\nSAML setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single SAML configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n", + "description": "### Get the SAML configuration.\n\nLooker can be optionally configured to authenticate users against a SAML authentication server.\nSAML setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single SAML configuation. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { "description": "SAML Configuration.", @@ -16003,6 +18063,12 @@ "$ref": "#/definitions/SamlConfig" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -16014,10 +18080,12 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_saml_config", "summary": "Update SAML Configuration", - "description": "### Update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any SAML setting changes be tested using the APIs below before being set globally.\n", + "description": "### Update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any SAML setting changes be tested using the APIs below before being set globally.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "body", @@ -16042,6 +18110,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -16061,10 +18135,12 @@ }, "/saml_test_configs/{test_slug}": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "saml_test_config", "summary": "Get SAML Test Configuration", - "description": "### Get a SAML test configuration by test_slug.\n", + "description": "### Get a SAML test configuration by test_slug.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "test_slug", @@ -16081,6 +18157,12 @@ "$ref": "#/definitions/SamlConfig" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -16092,10 +18174,12 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_saml_test_config", "summary": "Delete SAML Test Configuration", - "description": "### Delete a SAML test configuration.\n", + "description": "### Delete a SAML test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "test_slug", @@ -16118,6 +18202,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -16131,10 +18221,12 @@ }, "/saml_test_configs": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "create_saml_test_config", "summary": "Create SAML Test Configuration", - "description": "### Create a SAML test configuration.\n", + "description": "### Create a SAML test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "body", @@ -16159,6 +18251,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -16178,11 +18276,15 @@ }, "/parse_saml_idp_metadata": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "parse_saml_idp_metadata", "summary": "Parse SAML IdP XML", - "description": "### Parse the given xml as a SAML IdP metadata document and return the result.\n", - "consumes": ["text/plain"], + "description": "### Parse the given xml as a SAML IdP metadata document and return the result.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", + "consumes": [ + "text/plain" + ], "parameters": [ { "name": "body", @@ -16207,6 +18309,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -16220,11 +18328,15 @@ }, "/fetch_and_parse_saml_idp_metadata": { "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "fetch_and_parse_saml_idp_metadata", "summary": "Parse SAML IdP Url", - "description": "### Fetch the given url and parse it as a SAML IdP metadata document and return the result.\nNote that this requires that the url be public or at least at a location where the Looker instance\ncan fetch it without requiring any special authentication.\n", - "consumes": ["text/plain"], + "description": "### Fetch the given url and parse it as a SAML IdP metadata document and return the result.\nNote that this requires that the url be public or at least at a location where the Looker instance\ncan fetch it without requiring any special authentication.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", + "consumes": [ + "text/plain" + ], "parameters": [ { "name": "body", @@ -16249,6 +18361,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -16262,7 +18380,9 @@ }, "/scheduled_plans/space/{space_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_space", "summary": "Scheduled Plans for Space", "description": "### Get Scheduled Plans for a Space\n\nReturns scheduled plans owned by the caller for a given space id.\n", @@ -16305,13 +18425,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/scheduled_plans/{scheduled_plan_id}": { "delete": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "delete_scheduled_plan", "summary": "Delete Scheduled Plan", "description": "### Delete a Scheduled Plan\n\nNormal users can only delete their own scheduled plans.\nAdmins can delete other users' scheduled plans.\nThis delete cannot be undone.\n", @@ -16350,14 +18472,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" }, "patch": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "update_scheduled_plan", "summary": "Update Scheduled Plan", - "description": "### Update a Scheduled Plan\n\nAdmins can update other users' Scheduled Plans.\n\nNote: Any scheduled plan destinations specified in an update will **replace** all scheduled plan destinations\ncurrently defined for the scheduled plan.\n\nFor Example: If a scheduled plan has destinations A, B, and C, and you call update on this scheduled plan\nspecifying only B in the destinations, then destinations A and C will be deleted by the update.\n\nUpdating a scheduled plan to assign null or an empty array to the scheduled_plan_destinations property is an error, as a scheduled plan must always have at least one destination.\n\nIf you omit the scheduled_plan_destinations property from the object passed to update, then the destinations\ndefined on the original scheduled plan will remain unchanged.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", + "description": "### Update a Scheduled Plan\n\nAdmins can update other users' Scheduled Plans.\n\nNote: Any scheduled plan destinations specified in an update will **replace** all scheduled plan destinations\ncurrently defined for the scheduled plan.\n\nFor Example: If a scheduled plan has destinations A, B, and C, and you call update on this scheduled plan\nspecifying only B in the destinations, then destinations A and C will be deleted by the update.\n\nUpdating a scheduled plan to assign null or an empty array to the scheduled_plan_destinations property is an error, as a scheduled plan must always have at least one destination.\n\nIf you omit the scheduled_plan_destinations property from the object passed to update, then the destinations\ndefined on the original scheduled plan will remain unchanged.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", "parameters": [ { "name": "scheduled_plan_id", @@ -16408,11 +18532,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" }, "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plan", "summary": "Get Scheduled Plan", "description": "### Get Information About a Scheduled Plan\n\nAdmins can fetch information about other users' Scheduled Plans.\n", @@ -16452,16 +18578,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/scheduled_plans": { "post": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "create_scheduled_plan", "summary": "Create Scheduled Plan", - "description": "### Create a Scheduled Plan\n\nCreate a scheduled plan to render a Look or Dashboard on a recurring schedule.\n\nTo create a scheduled plan, you MUST provide values for the following fields:\n`name`\nand\n`look_id`, `dashboard_id`, `lookml_dashboard_id`, or `query_id`\nand\n`cron_tab` or `datagroup`\nand\nat least one scheduled_plan_destination\n\nA scheduled plan MUST have at least one scheduled_plan_destination defined.\n\nWhen `look_id` is set, `require_no_results`, `require_results`, and `require_change` are all required.\n\nIf `create_scheduled_plan` fails with a 422 error, be sure to look at the error messages in the response which will explain exactly what fields are missing or values that are incompatible.\n\nThe queries that provide the data for the look or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `false` or not specified, the queries that provide the data for the\nlook or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `true` and all the email recipients are Looker user accounts, the\nqueries are run in the context of each recipient, so different recipients may see different\ndata from the same scheduled render of a look or dashboard. For more details, see [Run As Recipient](https://looker.com/docs/r/admin/run-as-recipient).\n\nAdmins can create and modify scheduled plans on behalf of other users by specifying a user id.\nNon-admin users may not create or modify scheduled plans by or for other users.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", + "description": "### Create a Scheduled Plan\n\nCreate a scheduled plan to render a Look or Dashboard on a recurring schedule.\n\nTo create a scheduled plan, you MUST provide values for the following fields:\n`name`\nand\n`look_id`, `dashboard_id`, `lookml_dashboard_id`, or `query_id`\nand\n`cron_tab` or `datagroup`\nand\nat least one scheduled_plan_destination\n\nA scheduled plan MUST have at least one scheduled_plan_destination defined.\n\nWhen `look_id` is set, `require_no_results`, `require_results`, and `require_change` are all required.\n\nIf `create_scheduled_plan` fails with a 422 error, be sure to look at the error messages in the response which will explain exactly what fields are missing or values that are incompatible.\n\nThe queries that provide the data for the look or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `false` or not specified, the queries that provide the data for the\nlook or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `true` and all the email recipients are Looker user accounts, the\nqueries are run in the context of each recipient, so different recipients may see different\ndata from the same scheduled render of a look or dashboard. For more details, see [Run As Recipient](https://cloud.google.com/looker/docs/r/admin/run-as-recipient).\n\nAdmins can create and modify scheduled plans on behalf of other users by specifying a user id.\nNon-admin users may not create or modify scheduled plans by or for other users.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", "parameters": [ { "name": "body", @@ -16511,11 +18639,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" }, "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "all_scheduled_plans", "summary": "Get All Scheduled Plans", "description": "### List All Scheduled Plans\n\nReturns all scheduled plans which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -16571,16 +18701,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/scheduled_plans/run_once": { "post": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plan_run_once", "summary": "Run Scheduled Plan Once", - "description": "### Run a Scheduled Plan Immediately\n\nCreate a scheduled plan that runs only once, and immediately.\n\nThis can be useful for testing a Scheduled Plan before committing to a production schedule.\n\nAdmins can create scheduled plans on behalf of other users by specifying a user id.\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", + "description": "### Run a Scheduled Plan Immediately\n\nCreate a scheduled plan that runs only once, and immediately.\n\nThis can be useful for testing a Scheduled Plan before committing to a production schedule.\n\nAdmins can create scheduled plans on behalf of other users by specifying a user id.\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", "parameters": [ { "name": "body", @@ -16630,14 +18762,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, "/scheduled_plans/look/{look_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_look", "summary": "Scheduled Plans for Look", "description": "### Get Scheduled Plans for a Look\n\nReturns all scheduled plans for a look which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -16694,13 +18828,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/scheduled_plans/dashboard/{dashboard_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_dashboard", "summary": "Scheduled Plans for Dashboard", "description": "### Get Scheduled Plans for a Dashboard\n\nReturns all scheduled plans for a dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -16757,13 +18893,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/scheduled_plans/lookml_dashboard/{lookml_dashboard_id}": { "get": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plans_for_lookml_dashboard", "summary": "Scheduled Plans for LookML Dashboard", "description": "### Get Scheduled Plans for a LookML Dashboard\n\nReturns all scheduled plans for a LookML Dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", @@ -16820,16 +18958,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/scheduled_plans/{scheduled_plan_id}/run_once": { "post": { - "tags": ["ScheduledPlan"], + "tags": [ + "ScheduledPlan" + ], "operationId": "scheduled_plan_run_once_by_id", "summary": "Run Scheduled Plan Once by Id", - "description": "### Run a Scheduled Plan By Id Immediately\nThis function creates a run-once schedule plan based on an existing scheduled plan,\napplies modifications (if any) to the new scheduled plan, and runs the new schedule plan immediately.\nThis can be useful for testing modifications to an existing scheduled plan before committing to a production schedule.\n\nThis function internally performs the following operations:\n\n1. Copies the properties of the existing scheduled plan into a new scheduled plan\n2. Copies any properties passed in the JSON body of this request into the new scheduled plan (replacing the original values)\n3. Creates the new scheduled plan\n4. Runs the new scheduled plan\n\nThe original scheduled plan is not modified by this operation.\nAdmins can create, modify, and run scheduled plans on behalf of other users by specifying a user id.\nNon-admins can only create, modify, and run their own scheduled plans.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Whitelist for Scheduled Looks](https://docs.looker.com/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n", + "description": "### Run a Scheduled Plan By Id Immediately\nThis function creates a run-once schedule plan based on an existing scheduled plan,\napplies modifications (if any) to the new scheduled plan, and runs the new schedule plan immediately.\nThis can be useful for testing modifications to an existing scheduled plan before committing to a production schedule.\n\nThis function internally performs the following operations:\n\n1. Copies the properties of the existing scheduled plan into a new scheduled plan\n2. Copies any properties passed in the JSON body of this request into the new scheduled plan (replacing the original values)\n3. Creates the new scheduled plan\n4. Runs the new scheduled plan\n\nThe original scheduled plan is not modified by this operation.\nAdmins can create, modify, and run scheduled plans on behalf of other users by specifying a user id.\nNon-admins can only create, modify, and run their own scheduled plans.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n", "parameters": [ { "name": "scheduled_plan_id", @@ -16886,14 +19026,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, "/session_config": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "session_config", "summary": "Get Session Config", "description": "### Get session config.\n", @@ -16917,11 +19059,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "update_session_config", "summary": "Update Session Config", "description": "### Update session config.\n", @@ -16968,19 +19112,21 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/session": { "get": { - "tags": ["Session"], + "tags": [ + "Session" + ], "operationId": "session", - "summary": "Get Session", + "summary": "Get Auth", "description": "### Get API Session\n\nReturns information about the current API session, such as which workspace is selected for the session.\n", "responses": { "200": { - "description": "Session", + "description": "Auth", "schema": { "$ref": "#/definitions/ApiSession" } @@ -16998,19 +19144,21 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Session"], + "tags": [ + "Session" + ], "operationId": "update_session", - "summary": "Update Session", + "summary": "Update Auth", "description": "### Update API Session\n\n#### API Session Workspace\n\nYou can use this endpoint to change the active workspace for the current API session.\n\nOnly one workspace can be active in a session. The active workspace can be changed\nany number of times in a session.\n\nThe default workspace for API sessions is the \"production\" workspace.\n\nAll Looker APIs that use projects or lookml models (such as running queries) will\nuse the version of project and model files defined by this workspace for the lifetime of the\ncurrent API session or until the session workspace is changed again.\n\nAn API session has the same lifetime as the access_token used to authenticate API requests. Each successful\nAPI login generates a new access_token and a new API session.\n\nIf your Looker API client application needs to work in a dev workspace across multiple\nAPI sessions, be sure to select the dev workspace after each login.\n", "parameters": [ { "name": "body", "in": "body", - "description": "Session", + "description": "Auth", "required": true, "schema": { "$ref": "#/definitions/ApiSession" @@ -17019,7 +19167,7 @@ ], "responses": { "200": { - "description": "Session", + "description": "Auth", "schema": { "$ref": "#/definitions/ApiSession" } @@ -17049,16 +19197,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/setting": { "patch": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "set_setting", "summary": "Set Setting", - "description": "### Configure Looker Settings\n\nAvailable settings are:\n - extension_framework_enabled\n - marketplace_auto_install_enabled\n - marketplace_enabled\n - privatelabel_configuration\n - custom_welcome_email\n - onboarding_enabled\n\nSee the `Setting` type for more information on the specific values that can be configured.\n", + "description": "### Configure Looker Settings\n\nAvailable settings are:\n - allow_user_timezones\n - custom_welcome_email\n - data_connector_default_enabled\n - extension_framework_enabled\n - extension_load_url_enabled\n - marketplace_auto_install_enabled\n - marketplace_automation\n - marketplace_terms_accepted\n - marketplace_enabled\n - marketplace_site\n - onboarding_enabled\n - privatelabel_configuration\n - timezone\n - host_url\n - email_domain_allowlist\n - embed_cookieless_v2\n - embed_enabled\n - embed_config\n\nSee the `Setting` type for more information on the specific values that can be configured.\n\nIf a setting update is rejected, the API error payload should provide information on the cause of the rejection.\n", "parameters": [ { "name": "body", @@ -17090,6 +19240,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -17115,14 +19271,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "get_setting", "summary": "Get Setting", - "description": "### Get Looker Settings\n\nAvailable settings are:\n - extension_framework_enabled\n - marketplace_auto_install_enabled\n - marketplace_enabled\n - privatelabel_configuration\n - custom_welcome_email\n - onboarding_enabled\n\n", + "description": "### Get Looker Settings\n\nAvailable settings are:\n - allow_user_timezones\n - custom_welcome_email\n - data_connector_default_enabled\n - extension_framework_enabled\n - extension_load_url_enabled\n - marketplace_auto_install_enabled\n - marketplace_automation\n - marketplace_terms_accepted\n - marketplace_enabled\n - marketplace_site\n - onboarding_enabled\n - privatelabel_configuration\n - timezone\n - host_url\n - email_domain_allowlist\n - embed_cookieless_v2\n - embed_enabled\n - embed_config\n\n", "parameters": [ { "name": "fields", @@ -17156,24 +19314,20 @@ "schema": { "$ref": "#/definitions/ValidationError" } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/Error" - } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/smtp_settings": { "post": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "set_smtp_settings", "summary": "Set SMTP Setting", - "description": "### Configure SMTP Settings\n This API allows users to configure the SMTP settings on the Looker instance.\n This API is only supported in the OEM jar. Additionally, only admin users are authorised to call this API.\n", + "description": "### Configure SMTP Settings\n This API allows users to configure the SMTP settings on the Looker instance.\n Only admin users are authorised to call this API.\n", "parameters": [ { "name": "body", @@ -17226,14 +19380,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, "/smtp_status": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "smtp_status", "summary": "Get SMTP Status", "description": "### Get current SMTP status.\n", @@ -17266,13 +19422,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/folders/search": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "search_folders", "summary": "Search Folders", "description": "Search for folders by creator id, parent id, name, etc", @@ -17287,18 +19445,20 @@ { "name": "page", "in": "query", - "description": "Requested page.", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", "required": false, "type": "integer", - "format": "int64" + "format": "int64", + "x-looker-deprecated": true }, { "name": "per_page", "in": "query", - "description": "Results per page.", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", "required": false, "type": "integer", - "format": "int64" + "format": "int64", + "x-looker-deprecated": true }, { "name": "limit", @@ -17364,6 +19524,13 @@ "description": "Match is shared root", "required": false, "type": "boolean" + }, + { + "name": "is_users_root", + "in": "query", + "description": "Match is users root", + "required": false, + "type": "boolean" } ], "responses": { @@ -17389,13 +19556,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/folders/{folder_id}": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder", "summary": "Get Folder", "description": "### Get information about the folder with a specific id.", @@ -17435,11 +19604,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "delete_folder", "summary": "Delete Folder", "description": "### Delete the folder with a specific id including any children folders.\n**DANGER** this will delete all looks and dashboards in the folder.\n", @@ -17478,11 +19649,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "update_folder", "summary": "Update Folder", "description": "### Update the folder with a specific id.", @@ -17536,16 +19709,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/folders": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "all_folders", "summary": "Get All Folders", - "description": "### Get information about all folders.\n\nIn API 3.x, this will not return empty personal folders, unless they belong to the calling user,\nor if they contain soft-deleted content.\n\nIn API 4.0+, all personal folders will be returned.\n\n", + "description": "### Get information about all folders.\n\nAll personal folders will be returned.\n\n", "parameters": [ { "name": "fields", @@ -17578,11 +19753,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "create_folder", "summary": "Create Folder", "description": "### Create a folder with specified information.\n\nCaller must have permission to edit the parent folder and to create folders, otherwise the request\nreturns 404 Not Found.\n", @@ -17635,13 +19812,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/folders/{folder_id}/children": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_children", "summary": "Get Folder Children", "description": "### Get the children of a folder.", @@ -17663,15 +19842,33 @@ { "name": "page", "in": "query", - "description": "Requested page.", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", "required": false, "type": "integer", - "format": "int64" + "format": "int64", + "x-looker-deprecated": true }, { "name": "per_page", "in": "query", - "description": "Results per page.", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", "required": false, "type": "integer", "format": "int64" @@ -17707,13 +19904,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/folders/{folder_id}/children/search": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_children_search", "summary": "Search Folder Children", "description": "### Search the children of a folder", @@ -17770,13 +19969,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/folders/{folder_id}/parent": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_parent", "summary": "Get Folder Parent", "description": "### Get the parent of a folder", @@ -17816,13 +20017,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/folders/{folder_id}/ancestors": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_ancestors", "summary": "Get Folder Ancestors", "description": "### Get the ancestors of a folder", @@ -17865,16 +20068,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/folders/{folder_id}/looks": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_looks", "summary": "Get Folder Looks", - "description": "### Get all looks in a folder.\nIn API 3.x, this will return all looks in a folder, including looks in the trash.\nIn API 4.0+, all looks in a folder will be returned, excluding looks in the trash.\n", + "description": "### Get all looks in a folder.\nIn API 4.0+, all looks in a folder will be returned, excluding looks in the trash.\n", "parameters": [ { "name": "folder_id", @@ -17914,13 +20119,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/folders/{folder_id}/dashboards": { "get": { - "tags": ["Folder"], + "tags": [ + "Folder" + ], "operationId": "folder_dashboards", "summary": "Get Folder Dashboards", "description": "### Get the dashboards in a folder", @@ -17963,30 +20170,93 @@ } } }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query" + } + }, + "/sql_interface_queries/metadata": { + "get": { + "tags": [ + "SqlInterfaceQuery" + ], + "operationId": "sql_interface_metadata", + "summary": "Get SQL Interface Query Metadata", + "description": "### Handles Avatica RPC metadata requests for SQL Interface queries", + "parameters": [ + { + "name": "avatica_request", + "in": "query", + "description": "Avatica RPC request", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": null, + "schema": { + "$ref": "#/definitions/SqlInterfaceQueryMetadata" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, "x-looker-status": "beta", "x-looker-activity-type": "non_query" } }, - "/sql_queries/{slug}": { + "/sql_interface_queries/{query_id}/run/{result_format}": { "get": { - "tags": ["Query"], - "operationId": "sql_query", - "summary": "Get SQL Runner Query", - "description": "Get a SQL Runner query.", + "tags": [ + "SqlInterfaceQuery" + ], + "operationId": "run_sql_interface_query", + "summary": "Run SQL Interface Query", + "description": "### Run a saved SQL interface query.\n\nThis runs a previously created SQL interface query.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { - "name": "slug", + "name": "query_id", "in": "path", - "description": "slug of query", + "description": "Integer id of query", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "result_format", + "in": "path", + "description": "Format of result, options are: [\"json_bi\"]", "required": true, "type": "string" } ], "responses": { "200": { - "description": "SQL Runner Query", + "description": "SQL Interface Query", "schema": { - "$ref": "#/definitions/SqlQuery" + "type": "string" } }, "400": { @@ -17995,11 +20265,96 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query" + } + }, + "/sql_interface_queries": { + "post": { + "tags": [ + "SqlInterfaceQuery" + ], + "operationId": "create_sql_interface_query", + "summary": "Create SQL Interface Query", + "description": "### Create a SQL interface query.\n\nThis allows you to create a new SQL interface query that you can later run. Looker queries are immutable once created\nand are not deleted. If you create a query that is exactly like an existing query then the existing query\nwill be returned and no new query will be created. Whether a new query is created or not, you can use\nthe 'id' in the returned query with the 'run' method.\n\nThe query parameters are passed as json in the body of the request.\n\n", + "parameters": [ + { + "name": "body", + "in": "body", + "description": "SQL Interface Query Create", + "required": true, + "schema": { + "$ref": "#/definitions/SqlInterfaceQueryCreate" + } + } + ], + "responses": { + "200": { + "description": "SQL Interface Query", + "schema": { + "$ref": "#/definitions/SqlInterfaceQuery" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } + }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } } }, "x-looker-status": "beta", @@ -18008,7 +20363,9 @@ }, "/sql_queries": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "create_sql_query", "summary": "Create SQL Runner Query", "description": "### Create a SQL Runner Query\n\nEither the `connection_name` or `model_name` parameter MUST be provided.\n", @@ -18061,17 +20418,65 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", + "x-looker-activity-type": "db_query" + } + }, + "/sql_queries/{slug}": { + "get": { + "tags": [ + "Query" + ], + "operationId": "sql_query", + "summary": "Get SQL Runner Query", + "description": "Get a SQL Runner query.", + "parameters": [ + { + "name": "slug", + "in": "path", + "description": "slug of query", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "SQL Runner Query", + "schema": { + "$ref": "#/definitions/SqlQuery" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/sql_queries/{slug}/run/{result_format}": { "post": { - "tags": ["Query"], + "tags": [ + "Query" + ], "operationId": "run_sql_query", "summary": "Run SQL Runner Query", "description": "Execute a SQL Runner query in a given result_format.", - "produces": ["text", "application/json", "image/png", "image/jpeg"], + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" + ], "parameters": [ { "name": "slug", @@ -18083,7 +20488,7 @@ { "name": "result_format", "in": "path", - "description": "Format of result, options are: [\"inline_json\", \"json\", \"json_detail\", \"json_fe\", \"csv\", \"html\", \"md\", \"txt\", \"xlsx\", \"gsxml\", \"json_label\"]", + "description": "Format of result, options are: [\"inline_json\", \"json\", \"json_detail\", \"json_fe\", \"json_bi\", \"csv\", \"html\", \"md\", \"txt\", \"xlsx\", \"gsxml\", \"sql\", \"json_label\"]", "required": true, "type": "string" }, @@ -18127,16 +20532,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "db_query" } }, "/support_access/allowlist": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "get_support_access_allowlist_entries", "summary": "Get Support Access Allowlist Users", - "description": "### Get Support Access Allowlist Users\n\nReturns the users that have been added to the Support Access Allowlist\n", + "description": "### Get Support Access Allowlist Users\n\nReturns the users that have been added to the Support Access Allowlist\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "fields", @@ -18162,6 +20569,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -18169,14 +20582,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "add_support_access_allowlist_entries", "summary": "Add Support Access Allowlist Users", - "description": "### Add Support Access Allowlist Users\n\nAdds a list of emails to the Allowlist, using the provided reason\n", + "description": "### Add Support Access Allowlist Users\n\nAdds a list of emails to the Allowlist, using the provided reason\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "body", @@ -18204,6 +20619,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -18223,16 +20644,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/support_access/allowlist/{entry_id}": { "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_support_access_allowlist_entry", "summary": "Delete Support Access Allowlist Entry", - "description": "### Delete Support Access Allowlist User\n\nDeletes the specified Allowlist Entry Id\n", + "description": "### Delete Support Access Allowlist User\n\nDeletes the specified Allowlist Entry Id\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "entry_id", @@ -18255,6 +20678,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -18268,16 +20697,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/support_access/enable": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "enable_support_access", "summary": "Enable Support Access", - "description": "### Enable Support Access\n\nEnables Support Access for the provided duration\n", + "description": "### Enable Support Access\n\nEnables Support Access for the provided duration\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "body", @@ -18302,6 +20733,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -18327,16 +20764,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/support_access/disable": { "put": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "disable_support_access", "summary": "Disable Support Access", - "description": "### Disable Support Access\n\nDisables Support Access immediately\n", + "description": "### Disable Support Access\n\nDisables Support Access immediately\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { "description": "Support Access Status", @@ -18350,6 +20789,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -18363,16 +20808,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/support_access/status": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "support_access_status", "summary": "Support Access Status", - "description": "### Support Access Status\n\nReturns the current Support Access Status\n", + "description": "### Support Access Status\n\nReturns the current Support Access Status\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { "description": "Support Access Status", @@ -18386,6 +20833,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -18393,16 +20846,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/themes": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "all_themes", "summary": "Get All Themes", - "description": "### Get an array of all existing themes\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\nThis method returns an array of all existing themes. The active time for the theme is not considered.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "description": "### Get an array of all existing themes\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\nThis method returns an array of all existing themes. The active time for the theme is not considered.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { "name": "fields", @@ -18435,14 +20890,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "create_theme", "summary": "Create Theme", - "description": "### Create a theme\n\nCreates a new theme object, returning the theme details, including the created id.\n\nIf `settings` are not specified, the default theme settings will be copied into the new theme.\n\nThe theme `name` can only contain alphanumeric characters or underscores. Theme names should not contain any confidential information, such as customer names.\n\n**Update** an existing theme with [Update Theme](#!/Theme/update_theme)\n\n**Permanently delete** an existing theme with [Delete Theme](#!/Theme/delete_theme)\n\nFor more information, see [Creating and Applying Themes](https://looker.com/docs/r/admin/themes).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "description": "### Create a theme\n\nCreates a new theme object, returning the theme details, including the created id.\n\nIf `settings` are not specified, the default theme settings will be copied into the new theme.\n\nThe theme `name` can only contain alphanumeric characters or underscores. Theme names should not contain any confidential information, such as customer names.\n\n**Update** an existing theme with [Update Theme](#!/Theme/update_theme)\n\n**Permanently delete** an existing theme with [Delete Theme](#!/Theme/delete_theme)\n\nFor more information, see [Creating and Applying Themes](https://cloud.google.com/looker/docs/r/admin/themes).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { "name": "body", @@ -18492,16 +20949,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/themes/search": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "search_themes", "summary": "Search Themes", - "description": "### Search all themes for matching criteria.\n\nReturns an **array of theme objects** that match the specified search criteria.\n\n| Search Parameters | Description\n| :-------------------: | :------ |\n| `begin_at` only | Find themes active at or after `begin_at`\n| `end_at` only | Find themes active at or before `end_at`\n| both set | Find themes with an active inclusive period between `begin_at` and `end_at`\n\nNote: Range matching requires boolean AND logic.\nWhen using `begin_at` and `end_at` together, do not use `filter_or`=TRUE\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "description": "### Search all themes for matching criteria.\n\nReturns an **array of theme objects** that match the specified search criteria.\n\n| Search Parameters | Description\n| :-------------------: | :------ |\n| `begin_at` only | Find themes active at or after `begin_at`\n| `end_at` only | Find themes active at or before `end_at`\n| both set | Find themes with an active inclusive period between `begin_at` and `end_at`\n\nNote: Range matching requires boolean AND logic.\nWhen using `begin_at` and `end_at` together, do not use `filter_or`=TRUE\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { "name": "id", @@ -18594,13 +21053,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/themes/default": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "default_theme", "summary": "Get Default Theme", "description": "### Get the default theme\n\nReturns the active theme object set as the default.\n\nThe **default** theme name can be set in the UI on the Admin|Theme UI page\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\" If specified, it returns the default theme at the time indicated.\n", @@ -18634,14 +21095,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "set_default_theme", "summary": "Set Default Theme", - "description": "### Set the global default theme by theme name\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "description": "### Set the global default theme by theme name\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { "name": "name", @@ -18683,16 +21146,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/themes/active": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "active_themes", "summary": "Get Active Themes", - "description": "### Get active themes\n\nReturns an array of active themes.\n\nIf the `name` parameter is specified, it will return an array with one theme if it's active and found.\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n\n", + "description": "### Get active themes\n\nReturns an array of active themes.\n\nIf the `name` parameter is specified, it will return an array with one theme if it's active and found.\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { "name": "name", @@ -18740,16 +21205,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/themes/theme_or_default": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "theme_or_default", "summary": "Get Theme or Default", - "description": "### Get the named theme if it's active. Otherwise, return the default theme\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\nNote: API users with `show` ability can call this function\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "description": "### Get the named theme if it's active. Otherwise, return the default theme\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\nNote: API users with `show` ability can call this function\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { "name": "name", @@ -18787,16 +21254,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/themes/validate": { "post": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "validate_theme", "summary": "Validate Theme", - "description": "### Validate a theme with the specified information\n\nValidates all values set for the theme, returning any errors encountered, or 200 OK if valid\n\nSee [Create Theme](#!/Theme/create_theme) for constraints\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "description": "### Validate a theme with the specified information\n\nValidates all values set for the theme, returning any errors encountered, or 200 OK if valid\n\nSee [Create Theme](#!/Theme/create_theme) for constraints\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { "name": "body", @@ -18852,16 +21321,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/themes/{theme_id}": { "get": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "theme", "summary": "Get Theme", - "description": "### Get a theme by ID\n\nUse this to retrieve a specific theme, whether or not it's currently active.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "description": "### Get a theme by ID\n\nUse this to retrieve a specific theme, whether or not it's currently active.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { "name": "theme_id", @@ -18898,14 +21369,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "update_theme", "summary": "Update Theme", - "description": "### Update the theme by id.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "description": "### Update the theme by id.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { "name": "theme_id", @@ -18956,14 +21429,16 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Theme"], + "tags": [ + "Theme" + ], "operationId": "delete_theme", "summary": "Delete Theme", - "description": "### Delete a specific theme by id\n\nThis operation permanently deletes the identified theme from the database.\n\nBecause multiple themes can have the same name (with different activation time spans) themes can only be deleted by ID.\n\nAll IDs associated with a theme name can be retrieved by searching for the theme name with [Theme Search](#!/Theme/search).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or help.looker.com to update your license for this feature.\n\n", + "description": "### Delete a specific theme by id\n\nThis operation permanently deletes the identified theme from the database.\n\nBecause multiple themes can have the same name (with different activation time spans) themes can only be deleted by ID.\n\nAll IDs associated with a theme name can be retrieved by searching for the theme name with [Theme Search](#!/Theme/search).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { "name": "theme_id", @@ -18999,13 +21474,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/timezones": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "all_timezones", "summary": "Get All Timezones", "description": "### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks).\n", @@ -19038,7 +21515,9 @@ }, "/ssh_servers": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "all_ssh_servers", "summary": "Get All SSH Servers", "description": "### Get information about all SSH Servers.\n", @@ -19074,11 +21553,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "create_ssh_server", "summary": "Create SSH Server", "description": "### Create an SSH Server.\n", @@ -19131,13 +21612,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/ssh_server/{ssh_server_id}": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "ssh_server", "summary": "Get SSH Server", "description": "### Get information about an SSH Server.\n", @@ -19170,11 +21653,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "update_ssh_server", "summary": "Update SSH Server", "description": "### Update an SSH Server.\n", @@ -19228,11 +21713,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "delete_ssh_server", "summary": "Delete SSH Server", "description": "### Delete an SSH Server.\n", @@ -19271,13 +21758,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/ssh_server/{ssh_server_id}/test": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "test_ssh_server", "summary": "Test SSH Server", "description": "### Test the SSH Server\n", @@ -19310,13 +21799,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/ssh_tunnels": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "all_ssh_tunnels", "summary": "Get All SSH Tunnels", "description": "### Get information about all SSH Tunnels.\n", @@ -19352,11 +21843,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "create_ssh_tunnel", "summary": "Create SSH Tunnel", "description": "### Create an SSH Tunnel\n", @@ -19409,13 +21902,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/ssh_tunnel/{ssh_tunnel_id}": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "ssh_tunnel", "summary": "Get SSH Tunnel", "description": "### Get information about an SSH Tunnel.\n", @@ -19448,11 +21943,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "update_ssh_tunnel", "summary": "Update SSH Tunnel", "description": "### Update an SSH Tunnel\n", @@ -19506,11 +22003,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "delete_ssh_tunnel", "summary": "Delete SSH Tunnel", "description": "### Delete an SSH Tunnel\n", @@ -19549,13 +22048,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/ssh_tunnel/{ssh_tunnel_id}/test": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "test_ssh_tunnel", "summary": "Test SSH Tunnel", "description": "### Test the SSH Tunnel\n", @@ -19588,13 +22089,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/ssh_public_key": { "get": { - "tags": ["Connection"], + "tags": [ + "Connection" + ], "operationId": "ssh_public_key", "summary": "Get SSH Public Key", "description": "### Get the SSH public key\n\nGet the public key created for this instance to identify itself to a remote SSH server.\n", @@ -19618,13 +22121,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/user_attributes": { "get": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "all_user_attributes", "summary": "Get All User Attributes", "description": "### Get information about all user attributes.\n", @@ -19671,7 +22176,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "create_user_attribute", "summary": "Create User Attribute", "description": "### Create a new user attribute\n\nPermission information for a user attribute is conveyed through the `can` and `user_can_edit` fields.\nThe `user_can_edit` field indicates whether an attribute is user-editable _anywhere_ in the application.\nThe `can` field gives more granular access information, with the `set_value` child field indicating whether\nan attribute's value can be set by [Setting the User Attribute User Value](#!/User/set_user_attribute_user_value).\n\nNote: `name` and `label` fields must be unique across all user attributes in the Looker instance.\nAttempting to create a new user attribute with a name or label that duplicates an existing\nuser attribute will fail with a 422 error.\n", @@ -19737,7 +22244,9 @@ }, "/user_attributes/{user_attribute_id}": { "get": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "user_attribute", "summary": "Get User Attribute", "description": "### Get information about a user attribute.\n", @@ -19781,7 +22290,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "update_user_attribute", "summary": "Update User Attribute", "description": "### Update a user attribute definition.\n", @@ -19846,7 +22357,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "delete_user_attribute", "summary": "Delete User Attribute", "description": "### Delete a user attribute (admin only).\n", @@ -19891,7 +22404,9 @@ }, "/user_attributes/{user_attribute_id}/group_values": { "get": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "all_user_attribute_group_values", "summary": "Get User Attribute Group Values", "description": "### Returns all values of a user attribute defined by user groups, in precedence order.\n\nA user may be a member of multiple groups which define different values for a given user attribute.\nThe order of group-values in the response determines precedence for selecting which group-value applies\nto a given user. For more information, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n\nResults will only include groups that the caller's user account has permission to see.\n", @@ -19938,7 +22453,9 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["UserAttribute"], + "tags": [ + "UserAttribute" + ], "operationId": "set_user_attribute_group_values", "summary": "Set User Attribute Group Values", "description": "### Define values for a user attribute across a set of groups, in priority order.\n\nThis function defines all values for a user attribute defined by user groups. This is a global setting, potentially affecting\nall users in the system. This function replaces any existing group value definitions for the indicated user attribute.\n\nThe value of a user attribute for a given user is determined by searching the following locations, in this order:\n\n1. the user's account settings\n2. the groups that the user is a member of\n3. the default value of the user attribute, if any\n\nThe user may be a member of multiple groups which define different values for that user attribute. The order of items in the group_values parameter\ndetermines which group takes priority for that user. Lowest array index wins.\n\nAn alternate method to indicate the selection precedence of group-values is to assign numbers to the 'rank' property of each\ngroup-value object in the array. Lowest 'rank' value wins. If you use this technique, you must assign a\nrank value to every group-value object in the array.\n\n To set a user attribute value for a single user, see [Set User Attribute User Value](#!/User/set_user_attribute_user_value).\nTo set a user attribute value for all members of a group, see [Set User Attribute Group Value](#!/Group/update_user_attribute_group_value).\n", @@ -20010,7 +22527,9 @@ }, "/user_login_lockouts": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "all_user_login_lockouts", "summary": "Get All User Login Lockouts", "description": "### Get currently locked-out users.\n", @@ -20046,13 +22565,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/user_login_lockouts/search": { "get": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "search_user_login_lockouts", "summary": "Search User Login Lockouts", "description": "### Search currently locked-out users.\n", @@ -20164,13 +22685,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/user_login_lockout/{key}": { "delete": { - "tags": ["Auth"], + "tags": [ + "Auth" + ], "operationId": "delete_user_login_lockout", "summary": "Delete User Login Lockout", "description": "### Removes login lockout for the associated user.\n", @@ -20209,13 +22732,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/user": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "me", "summary": "Get Current User", "description": "### Get information about the current user; i.e. the user account currently calling the API.\n", @@ -20248,7 +22773,9 @@ }, "/users": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_users", "summary": "Get All Users", "description": "### Get information about all users.\n", @@ -20336,11 +22863,13 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user", "summary": "Create User", "description": "### Create a user with the specified information.\n", @@ -20400,7 +22929,9 @@ }, "/users/search": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "search_users", "summary": "Search Users", "description": "### Search users\n\nReturns all* user records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\n(*) Results are always filtered to the level of information the caller is permitted to view.\nLooker admins can see all user details; normal users in an open system can see\nnames of other users but no details; normal users in a closed system can only see\nnames of other users who are members of the same group as the user.\n\n", @@ -20547,13 +23078,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/users/search/names/{pattern}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "search_users_names", "summary": "Search User Names", "description": "### Search for user accounts by name\n\nReturns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern.\nThe pattern can contain `%` and `_` wildcards as in SQL LIKE expressions.\n\nAny additional search params will be combined into a logical AND expression.\n", @@ -20679,13 +23212,15 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/users/{user_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user", "summary": "Get User by Id", "description": "### Get information about the user with a specific id.\n\nIf the caller is an admin or the caller is the user being specified, then full user information will\nbe returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains\nThe user name and avatar url, but no sensitive information.\n", @@ -20729,7 +23264,9 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "update_user", "summary": "Update User", "description": "### Update information about the user with a specific id.\n", @@ -20771,6 +23308,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -20788,7 +23331,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user", "summary": "Delete User", "description": "### Delete the user with a specific id.\n\n**DANGER** this will delete the user and all looks and other information owned by the user.\n", @@ -20833,10 +23378,12 @@ }, "/users/credential/{credential_type}/{credential_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_for_credential", "summary": "Get User by Credential Id", - "description": "### Get information about the user with a credential of given type with specific id.\n\nThis is used to do things like find users by their embed external_user_id. Or, find the user with\na given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential\ntypes. It must be one of the values listed in the table below. The 'credential_id' is your unique Id\nfor the user and is specific to each type of credential.\n\nAn example using the Ruby sdk might look like:\n\n`sdk.user_for_credential('embed', 'customer-4959425')`\n\nThis table shows the supported 'Credential Type' strings. The right column is for reference; it shows\nwhich field in the given credential type is actually searched when finding a user with the supplied\n'credential_id'.\n\n| Credential Types | Id Field Matched |\n| ---------------- | ---------------- |\n| email | email |\n| google | google_user_id |\n| saml | saml_user_id |\n| oidc | oidc_user_id |\n| ldap | ldap_id |\n| api | token |\n| api3 | client_id |\n| embed | external_user_id |\n| looker_openid | email |\n\n**NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'.\n\n", + "description": "### Get information about the user with a credential of given type with specific id.\n\nThis is used to do things like find users by their embed external_user_id. Or, find the user with\na given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential\ntypes. It must be one of the values listed in the table below. The 'credential_id' is your unique Id\nfor the user and is specific to each type of credential.\n\nAn example using the Ruby sdk might look like:\n\n`sdk.user_for_credential('embed', 'customer-4959425')`\n\nThis table shows the supported 'Credential Type' strings. The right column is for reference; it shows\nwhich field in the given credential type is actually searched when finding a user with the supplied\n'credential_id'.\n\n| Credential Types | Id Field Matched |\n| ---------------- | ---------------- |\n| email | email |\n| google | google_user_id |\n| saml | saml_user_id |\n| oidc | oidc_user_id |\n| ldap | ldap_id |\n| api | token |\n| api3 | client_id |\n| embed | external_user_id |\n| looker_openid | email |\n\n**NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "credential_type", @@ -20873,6 +23420,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -20886,10 +23439,12 @@ }, "/users/{user_id}/credentials_email": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_email", "summary": "Get Email/Password Credential", - "description": "### Email/password login information for the specified user.", + "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -20919,6 +23474,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -20930,10 +23491,12 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_email", "summary": "Create Email/Password Credential", - "description": "### Email/password login information for the specified user.", + "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -20972,6 +23535,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21001,10 +23570,12 @@ "x-looker-activity-type": "non_query" }, "patch": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "update_user_credentials_email", "summary": "Update Email/Password Credential", - "description": "### Email/password login information for the specified user.", + "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21043,6 +23614,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21066,10 +23643,12 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_email", "summary": "Delete Email/Password Credential", - "description": "### Email/password login information for the specified user.", + "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21092,6 +23671,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21111,10 +23696,12 @@ }, "/users/{user_id}/credentials_totp": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_totp", "summary": "Get Two-Factor Credential", - "description": "### Two-factor login information for the specified user.", + "description": "### Two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21144,6 +23731,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21155,10 +23748,12 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_totp", "summary": "Create Two-Factor Credential", - "description": "### Two-factor login information for the specified user.", + "description": "### Two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21197,6 +23792,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21226,10 +23827,12 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_totp", "summary": "Delete Two-Factor Credential", - "description": "### Two-factor login information for the specified user.", + "description": "### Two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21252,6 +23855,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21271,10 +23880,12 @@ }, "/users/{user_id}/credentials_ldap": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_ldap", "summary": "Get LDAP Credential", - "description": "### LDAP login information for the specified user.", + "description": "### LDAP login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21304,6 +23915,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21315,10 +23932,12 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_ldap", "summary": "Delete LDAP Credential", - "description": "### LDAP login information for the specified user.", + "description": "### LDAP login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21341,6 +23960,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21360,10 +23985,12 @@ }, "/users/{user_id}/credentials_google": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_google", "summary": "Get Google Auth Credential", - "description": "### Google authentication login information for the specified user.", + "description": "### Google authentication login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21393,6 +24020,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21404,10 +24037,12 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_google", "summary": "Delete Google Auth Credential", - "description": "### Google authentication login information for the specified user.", + "description": "### Google authentication login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21430,6 +24065,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21449,10 +24090,12 @@ }, "/users/{user_id}/credentials_saml": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_saml", "summary": "Get Saml Auth Credential", - "description": "### Saml authentication login information for the specified user.", + "description": "### Saml authentication login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21482,6 +24125,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21493,10 +24142,12 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_saml", "summary": "Delete Saml Auth Credential", - "description": "### Saml authentication login information for the specified user.", + "description": "### Saml authentication login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21519,6 +24170,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21538,10 +24195,12 @@ }, "/users/{user_id}/credentials_oidc": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_oidc", "summary": "Get OIDC Auth Credential", - "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", + "description": "### OpenID Connect (OIDC) authentication login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21571,6 +24230,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21582,10 +24247,12 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_oidc", "summary": "Delete OIDC Auth Credential", - "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", + "description": "### OpenID Connect (OIDC) authentication login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21608,6 +24275,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21627,10 +24300,12 @@ }, "/users/{user_id}/credentials_api3/{credentials_api3_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_api3", - "summary": "Get API 3 Credential", - "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", + "summary": "Get API Credential", + "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21642,7 +24317,7 @@ { "name": "credentials_api3_id", "in": "path", - "description": "Id of API 3 Credential", + "description": "Id of API Credential", "required": true, "type": "string" }, @@ -21656,7 +24331,7 @@ ], "responses": { "200": { - "description": "API 3 Credential", + "description": "API Credential", "schema": { "$ref": "#/definitions/CredentialsApi3" } @@ -21667,6 +24342,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21678,10 +24359,12 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_api3", - "summary": "Delete API 3 Credential", - "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", + "summary": "Delete API Credential", + "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21693,7 +24376,7 @@ { "name": "credentials_api3_id", "in": "path", - "description": "Id of API 3 Credential", + "description": "Id of API Credential", "required": true, "type": "string" } @@ -21711,6 +24394,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21730,10 +24419,12 @@ }, "/users/{user_id}/credentials_api3": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_user_credentials_api3s", - "summary": "Get All API 3 Credentials", - "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", + "summary": "Get All API Credentials", + "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21752,7 +24443,7 @@ ], "responses": { "200": { - "description": "API 3 Credential", + "description": "API Credential", "schema": { "type": "array", "items": { @@ -21766,6 +24457,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21777,10 +24474,12 @@ "x-looker-activity-type": "non_query" }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_api3", - "summary": "Create API 3 Credential", - "description": "### API 3 login information for the specified user. This is for the newer API keys that can be added for any user.", + "summary": "Create API Credential", + "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -21799,7 +24498,7 @@ ], "responses": { "200": { - "description": "API 3 Credential", + "description": "API Credential", "schema": { "$ref": "#/definitions/CreateCredentialsApi3" } @@ -21810,6 +24509,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21841,10 +24546,12 @@ }, "/users/{user_id}/credentials_embed/{credentials_embed_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_embed", "summary": "Get Embedding Credential", - "description": "### Embed login information for the specified user.", + "description": "### Embed login information for the specified user.\n\nCalls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled", "parameters": [ { "name": "user_id", @@ -21881,6 +24588,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21892,10 +24605,12 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_embed", "summary": "Delete Embedding Credential", - "description": "### Embed login information for the specified user.", + "description": "### Embed login information for the specified user.\n\nCalls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled", "parameters": [ { "name": "user_id", @@ -21925,6 +24640,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21944,10 +24665,12 @@ }, "/users/{user_id}/credentials_embed": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_user_credentials_embeds", "summary": "Get All Embedding Credentials", - "description": "### Embed login information for the specified user.", + "description": "### Embed login information for the specified user.\n\nCalls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled", "parameters": [ { "name": "user_id", @@ -21980,6 +24703,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21993,10 +24722,12 @@ }, "/users/{user_id}/credentials_looker_openid": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_credentials_looker_openid", "summary": "Get Looker OpenId Credential", - "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.", + "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -22026,6 +24757,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -22037,10 +24774,12 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_credentials_looker_openid", "summary": "Delete Looker OpenId Credential", - "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.", + "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -22063,6 +24802,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -22082,10 +24827,12 @@ }, "/users/{user_id}/sessions/{session_id}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_session", "summary": "Get Web Login Session", - "description": "### Web login session for the specified user.", + "description": "### Web login session for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -22122,6 +24869,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -22133,10 +24886,12 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_session", "summary": "Delete Web Login Session", - "description": "### Web login session for the specified user.", + "description": "### Web login session for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -22166,6 +24921,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -22185,10 +24946,12 @@ }, "/users/{user_id}/sessions": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "all_user_sessions", "summary": "Get All Web Login Sessions", - "description": "### Web login session for the specified user.", + "description": "### Web login session for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -22221,6 +24984,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -22234,10 +25003,12 @@ }, "/users/{user_id}/credentials_email/password_reset": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_user_credentials_email_password_reset", "summary": "Create Password Reset Token", - "description": "### Create a password reset token.\nThis will create a cryptographically secure random password reset token for the user.\nIf the user already has a password reset token then this invalidates the old token and creates a new one.\nThe token is expressed as the 'password_reset_url' of the user's email/password credential object.\nThis takes an optional 'expires' param to indicate if the new token should be an expiring token.\nTokens that expire are typically used for self-service password resets for existing users.\nInvitation emails for new users typically are not set to expire.\nThe expire period is always 60 minutes when expires is enabled.\nThis method can be called with an empty body.\n", + "description": "### Create a password reset token.\nThis will create a cryptographically secure random password reset token for the user.\nIf the user already has a password reset token then this invalidates the old token and creates a new one.\nThe token is expressed as the 'password_reset_url' of the user's email/password credential object.\nThis takes an optional 'expires' param to indicate if the new token should be an expiring token.\nTokens that expire are typically used for self-service password resets for existing users.\nInvitation emails for new users typically are not set to expire.\nThe expire period is always 60 minutes when expires is enabled.\nThis method can be called with an empty body.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "user_id", @@ -22274,6 +25045,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -22287,7 +25064,9 @@ }, "/users/{user_id}/roles": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_roles", "summary": "Get User Roles", "description": "### Get information about roles of a given user\n", @@ -22341,7 +25120,9 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "set_user_roles", "summary": "Set User Roles", "description": "### Set roles of the user with a specific id.\n", @@ -22389,6 +25170,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -22402,7 +25189,9 @@ }, "/users/{user_id}/attribute_values": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "user_attribute_user_values", "summary": "Get User Attribute Values", "description": "### Get user attribute values for a given user.\n\nReturns the values of specified user attributes (or all user attributes) for a certain user.\n\nA value for each user attribute is searched for in the following locations, in this order:\n\n1. in the user's account information\n1. in groups that the user is a member of\n1. the default value of the user attribute\n\nIf more than one group has a value defined for a user attribute, the group with the lowest rank wins.\n\nThe response will only include user attributes for which values were found. Use `include_unset=true` to include\nempty records for user attributes with no value.\n\nThe value of all hidden user attributes will be blank.\n", @@ -22470,7 +25259,9 @@ }, "/users/{user_id}/attribute_values/{user_attribute_id}": { "patch": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "set_user_attribute_user_value", "summary": "Set User Attribute User Value", "description": "### Store a custom value for a user attribute in a user's account settings.\n\nPer-user user attribute values take precedence over group or default values.\n", @@ -22512,6 +25303,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -22529,7 +25326,9 @@ "x-looker-activity-type": "non_query" }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "delete_user_attribute_user_value", "summary": "Delete User Attribute User Value", "description": "### Delete a user attribute value from a user's account settings.\n\nAfter the user attribute value is deleted from the user's account settings, subsequent requests\nfor the user attribute value for this user will draw from the user's groups or the default\nvalue of the user attribute. See [Get User Attribute Values](#!/User/user_attribute_user_values) for more\ninformation about how user attribute values are resolved.\n", @@ -22559,6 +25358,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -22572,10 +25377,12 @@ }, "/users/{user_id}/credentials_email/send_password_reset": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "send_user_credentials_email_password_reset", "summary": "Send Password Reset Token", - "description": "### Send a password reset token.\nThis will send a password reset email to the user. If a password reset token does not already exist\nfor this user, it will create one and then send it.\nIf the user has not yet set up their account, it will send a setup email to the user.\nThe URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object.\nPassword reset URLs will expire in 60 minutes.\nThis method can be called with an empty body.\n", + "description": "### Send a password reset token.\nThis will send a password reset email to the user. If a password reset token does not already exist\nfor this user, it will create one and then send it.\nIf the user has not yet set up their account, it will send a setup email to the user.\nThe URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object.\nPassword reset URLs will expire in 60 minutes.\nThis method can be called with an empty body.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "user_id", @@ -22605,6 +25412,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -22612,16 +25425,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/users/{user_id}/update_emails": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "wipeout_user_emails", "summary": "Wipeout User Emails", - "description": "### Change a disabled user's email addresses\n\nAllows the admin to change the email addresses for all the user's\nassociated credentials. Will overwrite all associated email addresses with\nthe value supplied in the 'email' body param.\nThe user's 'is_disabled' status must be true.\n", + "description": "### Change a disabled user's email addresses\n\nAllows the admin to change the email addresses for all the user's\nassociated credentials. Will overwrite all associated email addresses with\nthe value supplied in the 'email' body param.\nThe user's 'is_disabled' status must be true.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "user_id", @@ -22685,16 +25500,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/users/embed_user": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "operationId": "create_embed_user", "summary": "Create an embed user from an external user ID", - "description": "Create an embed user from an external user ID\n", + "description": "Create an embed user from an external user ID\n\nCalls to this endpoint require [Embedding](https://cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled\n", "parameters": [ { "name": "body", @@ -22732,11 +25549,15 @@ }, "/vector_thumbnail/{type}/{resource_id}": { "get": { - "tags": ["Content"], + "tags": [ + "Content" + ], "operationId": "vector_thumbnail", "summary": "Get Vector Thumbnail", "description": "### Get a vector image representing the contents of a dashboard or look.\n\n# DEPRECATED: Use [content_thumbnail()](#!/Content/content_thumbnail)\n\nThe returned thumbnail is an abstract representation of the contents of a dashbord or look and does not\nreflect the actual data displayed in the respective visualizations.\n", - "produces": ["image/svg+xml"], + "produces": [ + "image/svg+xml" + ], "parameters": [ { "name": "type", @@ -22787,7 +25608,9 @@ }, "/versions": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "versions", "summary": "Get ApiVersion", "description": "### Get information about all API versions supported by this Looker instance.\n", @@ -22826,7 +25649,9 @@ }, "/api_spec/{api_version}/{specification}": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "api_spec", "summary": "Get an API specification", "description": "### Get an API specification for this Looker instance.\n\nThe specification is returned as a JSON document in Swagger 2.x format\n", @@ -22867,16 +25692,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "none" } }, "/whitelabel_configuration": { "get": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "whitelabel_configuration", - "summary": "Get Whitelabel configuration", - "description": "### This feature is enabled only by special license.\n### Gets the whitelabel configuration, which includes hiding documentation links, custom favicon uploading, etc.\n", + "summary": "Get Private label configuration", + "description": "### This feature is enabled only by special license.\n\nThis endpoint provides the private label configuration, which includes hiding documentation links, custom favicon uploading, etc.\n\nThis endpoint is deprecated. [Get Setting](#!/Config/get_setting) should be used to retrieve private label settings instead\n", "parameters": [ { "name": "fields", @@ -22888,7 +25715,7 @@ ], "responses": { "200": { - "description": "Whitelabel configuration", + "description": "Private label configuration", "schema": { "$ref": "#/definitions/WhitelabelConfiguration" } @@ -22911,15 +25738,17 @@ "x-looker-activity-type": "non_query" }, "put": { - "tags": ["Config"], + "tags": [ + "Config" + ], "operationId": "update_whitelabel_configuration", - "summary": "Update Whitelabel configuration", - "description": "### Update the whitelabel configuration\n", + "summary": "Update Private label configuration", + "description": "### Update the private label configuration\n\nThis endpoint is deprecated. [Set Setting](#!/Config/set_setting) should be used to update private label settings instead\n", "parameters": [ { "name": "body", "in": "body", - "description": "Whitelabel configuration", + "description": "Private label configuration", "required": true, "schema": { "$ref": "#/definitions/WhitelabelConfiguration" @@ -22928,7 +25757,7 @@ ], "responses": { "200": { - "description": "Whitelabel configuration", + "description": "Private label configuration", "schema": { "$ref": "#/definitions/WhitelabelConfiguration" } @@ -22965,7 +25794,9 @@ }, "/workspaces": { "get": { - "tags": ["Workspace"], + "tags": [ + "Workspace" + ], "operationId": "all_workspaces", "summary": "Get All Workspaces", "description": "### Get All Workspaces\n\nReturns all workspaces available to the calling user.\n", @@ -22992,16 +25823,18 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } }, "/workspaces/{workspace_id}": { "get": { - "tags": ["Workspace"], + "tags": [ + "Workspace" + ], "operationId": "workspace", "summary": "Get Workspace", - "description": "### Get A Workspace\n\nReturns information about a workspace such as the git status and selected branches\nof all projects available to the caller's user account.\n\nA workspace defines which versions of project files will be used to evaluate expressions\nand operations that use model definitions - operations such as running queries or rendering dashboards.\nEach project has its own git repository, and each project in a workspace may be configured to reference\nparticular branch or revision within their respective repositories.\n\nThere are two predefined workspaces available: \"production\" and \"dev\".\n\nThe production workspace is shared across all Looker users. Models in the production workspace are read-only.\nChanging files in production is accomplished by modifying files in a git branch and using Pull Requests\nto merge the changes from the dev branch into the production branch, and then telling\nLooker to sync with production.\n\nThe dev workspace is local to each Looker user. Changes made to project/model files in the dev workspace only affect\nthat user, and only when the dev workspace is selected as the active workspace for the API session.\n(See set_session_workspace()).\n\nThe dev workspace is NOT unique to an API session. Two applications accessing the Looker API using\nthe same user account will see the same files in the dev workspace. To avoid collisions between\nAPI clients it's best to have each client login with API3 credentials for a different user account.\n\nChanges made to files in a dev workspace are persistent across API sessions. It's a good\nidea to commit any changes you've made to the git repository, but not strictly required. Your modified files\nreside in a special user-specific directory on the Looker server and will still be there when you login in again\nlater and use update_session(workspace_id: \"dev\") to select the dev workspace for the new API session.\n", + "description": "### Get A Workspace\n\nReturns information about a workspace such as the git status and selected branches\nof all projects available to the caller's user account.\n\nA workspace defines which versions of project files will be used to evaluate expressions\nand operations that use model definitions - operations such as running queries or rendering dashboards.\nEach project has its own git repository, and each project in a workspace may be configured to reference\nparticular branch or revision within their respective repositories.\n\nThere are two predefined workspaces available: \"production\" and \"dev\".\n\nThe production workspace is shared across all Looker users. Models in the production workspace are read-only.\nChanging files in production is accomplished by modifying files in a git branch and using Pull Requests\nto merge the changes from the dev branch into the production branch, and then telling\nLooker to sync with production.\n\nThe dev workspace is local to each Looker user. Changes made to project/model files in the dev workspace only affect\nthat user, and only when the dev workspace is selected as the active workspace for the API session.\n(See set_session_workspace()).\n\nThe dev workspace is NOT unique to an API session. Two applications accessing the Looker API using\nthe same user account will see the same files in the dev workspace. To avoid collisions between\nAPI clients it's best to have each client login with API credentials for a different user account.\n\nChanges made to files in a dev workspace are persistent across API sessions. It's a good\nidea to commit any changes you've made to the git repository, but not strictly required. Your modified files\nreside in a special user-specific directory on the Looker server and will still be there when you login in again\nlater and use update_session(workspace_id: \"dev\") to select the dev workspace for the new API session.\n", "parameters": [ { "name": "workspace_id", @@ -23031,7 +25864,7 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query" } } @@ -23054,7 +25887,10 @@ } }, "x-looker-status": "stable", - "required": ["message", "documentation_url"] + "required": [ + "message", + "documentation_url" + ] }, "DashboardBase": { "properties": { @@ -23448,7 +26284,10 @@ } }, "x-looker-status": "stable", - "required": ["message", "documentation_url"] + "required": [ + "message", + "documentation_url" + ] }, "ValidationErrorDetail": { "properties": { @@ -23479,7 +26318,9 @@ } }, "x-looker-status": "stable", - "required": ["documentation_url"] + "required": [ + "documentation_url" + ] }, "AccessToken": { "properties": { @@ -23521,17 +26362,20 @@ "field_value": { "type": "any", "format": "any", - "description": "Field Value. Depends on the type of field - numeric or string. For [location](https://docs.looker.com/reference/field-reference/dimension-type-reference#location) type, it's a list of floats. Example `[1.0, 56.0]`", + "description": "Field Value. Depends on the type of field - numeric or string. For [location](https://cloud.google.com/looker/docs/reference/field-reference/dimension-type-reference#location) type, it's a list of floats. Example `[1.0, 56.0]`", "x-looker-nullable": false }, "filter_value": { "type": "string", - "description": "Filter Value. Usually null except for [location](https://docs.looker.com/reference/field-reference/dimension-type-reference#location) type. It'll be a string of lat,long ie `'1.0,56.0'`", + "description": "Filter Value. Usually null except for [location](https://cloud.google.com/looker/docs/reference/field-reference/dimension-type-reference#location) type. It'll be a string of lat,long ie `'1.0,56.0'`", "x-looker-nullable": true } }, - "x-looker-status": "beta", - "required": ["field_name", "field_value"] + "x-looker-status": "stable", + "required": [ + "field_name", + "field_value" + ] }, "AlertAppliedDashboardFilter": { "properties": { @@ -23547,7 +26391,7 @@ }, "filter_value": { "type": "string", - "description": "Field Value. [Filter Expressions](https://docs.looker.com/reference/filter-expressions). Example `Los Angeles CA`", + "description": "Field Value. [Filter Expressions](https://cloud.google.com/looker/docs/reference/filter-expressions). Example `Los Angeles CA`", "x-looker-nullable": false }, "filter_description": { @@ -23557,8 +26401,12 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta", - "required": ["filter_title", "field_name", "filter_value"] + "x-looker-status": "stable", + "required": [ + "filter_title", + "field_name", + "filter_value" + ] }, "AlertField": { "properties": { @@ -23569,7 +26417,7 @@ }, "name": { "type": "string", - "description": "Field's name. Has the format `.` Refer to [docs](https://docs.looker.com/sharing-and-publishing/creating-alerts) for more details", + "description": "Field's name. Has the format `.` Refer to [docs](https://cloud.google.com/looker/docs/sharing-and-publishing/creating-alerts) for more details", "x-looker-nullable": false }, "filter": { @@ -23581,8 +26429,11 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta", - "required": ["title", "name"] + "x-looker-status": "stable", + "required": [ + "title", + "name" + ] }, "AlertConditionState": { "properties": { @@ -23599,7 +26450,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "Alert": { "properties": { @@ -23623,12 +26474,32 @@ "DECREASES_BY", "CHANGES_BY" ], - "description": "This property informs the check what kind of comparison we are performing. Only certain condition types are valid for time series alerts. For details, refer to [Setting Alert Conditions](https://docs.looker.com/sharing-and-publishing/creating-alerts#setting_alert_conditions) Valid values are: \"EQUAL_TO\", \"GREATER_THAN\", \"GREATER_THAN_OR_EQUAL_TO\", \"LESS_THAN\", \"LESS_THAN_OR_EQUAL_TO\", \"INCREASES_BY\", \"DECREASES_BY\", \"CHANGES_BY\".", + "description": "This property informs the check what kind of comparison we are performing. Only certain condition types are valid for time series alerts. For details, refer to [Setting Alert Conditions](https://cloud.google.com/looker/docs/sharing-and-publishing/creating-alerts#setting_alert_conditions) Valid values are: \"EQUAL_TO\", \"GREATER_THAN\", \"GREATER_THAN_OR_EQUAL_TO\", \"LESS_THAN\", \"LESS_THAN_OR_EQUAL_TO\", \"INCREASES_BY\", \"DECREASES_BY\", \"CHANGES_BY\".", "x-looker-nullable": false }, "cron": { "type": "string", - "description": "Vixie-Style crontab specification when to run. At minumum, it has to be longer than 15 minute intervals", + "description": "Vixie-Style crontab specification when to run. At minimum, it has to be longer than 15 minute intervals", + "x-looker-nullable": false + }, + "custom_url_base": { + "type": "string", + "description": "Domain for the custom url selected by the alert creator from the admin defined domain allowlist", + "x-looker-nullable": true + }, + "custom_url_params": { + "type": "string", + "description": "Parameters and path for the custom url defined by the alert creator", + "x-looker-nullable": true + }, + "custom_url_label": { + "type": "string", + "description": "Label for the custom url defined by the alert creator", + "x-looker-nullable": true + }, + "show_custom_url": { + "type": "boolean", + "description": "Boolean to determine if the custom url should be used", "x-looker-nullable": false }, "custom_title": { @@ -23694,7 +26565,9 @@ }, "investigative_content_type": { "type": "string", - "x-looker-values": ["dashboard"], + "x-looker-values": [ + "dashboard" + ], "description": "The type of the investigative content Valid values are: \"dashboard\".", "x-looker-nullable": true }, @@ -23739,11 +26612,11 @@ "time_series_condition_state": { "$ref": "#/definitions/AlertConditionState", "x-looker-write-only": true, - "description": "(Write-Only) (Optional) Only used when first creating time series alerts. It's used to pick a starting time reference from which alerts will be evaluated again. Without it, alerts be run against all time series data. Refer to [docs](https://docs.looker.com/sharing-and-publishing/creating-alerts) for details. Example `{ latest_time_series_id: '2020-09-17', previous_time_series_id: '2020-09-16' }`.", + "description": "(Write-Only) (Optional) Only used when first creating time series alerts. It's used to pick a starting time reference from which alerts will be evaluated again. Without it, alerts be run against all time series data. Refer to [docs](https://cloud.google.com/looker/docs/sharing-and-publishing/creating-alerts) for details. Example `{ latest_time_series_id: '2020-09-17', previous_time_series_id: '2020-09-16' }`.", "x-looker-nullable": true } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "required": [ "comparison_type", "cron", @@ -23753,11 +26626,112 @@ "threshold" ] }, + "MobilePayload": { + "properties": { + "title": { + "type": "string", + "readOnly": true, + "description": "Title of the alert", + "x-looker-nullable": true + }, + "alert_id": { + "type": "string", + "readOnly": true, + "description": "ID of the alert", + "x-looker-nullable": false + }, + "investigative_content_id": { + "type": "string", + "readOnly": true, + "description": "ID of the investigative content", + "x-looker-nullable": true + }, + "dashboard_name": { + "type": "string", + "readOnly": true, + "description": "Name of the dashboard on which the alert has been set", + "x-looker-nullable": true + }, + "dashboard_id": { + "type": "string", + "readOnly": true, + "description": "ID of the dashboard on which the alert has been set", + "x-looker-nullable": false + }, + "query_slug": { + "type": "string", + "readOnly": true, + "description": "Slug of the query which runs the alert queries.", + "x-looker-nullable": false + } + }, + "x-looker-status": "stable", + "required": [ + "alert_id" + ] + }, + "AlertNotifications": { + "properties": { + "notification_id": { + "type": "string", + "readOnly": true, + "description": "ID of the notification", + "x-looker-nullable": false + }, + "alert_condition_id": { + "type": "string", + "readOnly": true, + "description": "ID of the alert", + "x-looker-nullable": false + }, + "user_id": { + "type": "string", + "readOnly": true, + "description": "ID of the user", + "x-looker-nullable": false + }, + "is_read": { + "type": "boolean", + "description": "Read state of the notification", + "x-looker-nullable": false + }, + "field_value": { + "type": "number", + "format": "double", + "readOnly": true, + "description": "The value of the field on which the alert condition is set", + "x-looker-nullable": true + }, + "threshold_value": { + "type": "number", + "format": "double", + "readOnly": true, + "description": "The value of the threshold which triggers the alert notification", + "x-looker-nullable": true + }, + "ran_at": { + "type": "string", + "readOnly": true, + "description": "The time at which the alert query ran", + "x-looker-nullable": false + }, + "alert": { + "$ref": "#/definitions/MobilePayload", + "readOnly": true, + "description": "It contains the details needed for mobile alerts payload", + "x-looker-nullable": false + } + }, + "x-looker-status": "stable" + }, "AlertDestination": { "properties": { "destination_type": { "type": "string", - "x-looker-values": ["EMAIL", "ACTION_HUB"], + "x-looker-values": [ + "EMAIL", + "ACTION_HUB" + ], "description": "Type of destination that the alert will be sent to Valid values are: \"EMAIL\", \"ACTION_HUB\".", "x-looker-nullable": false }, @@ -23777,8 +26751,10 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta", - "required": ["destination_type"] + "x-looker-status": "stable", + "required": [ + "destination_type" + ] }, "AlertPatch": { "properties": { @@ -23809,7 +26785,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "ApiSession": { "properties": { @@ -23836,6 +26812,158 @@ }, "x-looker-status": "stable" }, + "ArtifactUsage": { + "properties": { + "max_size": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The configured maximum size in bytes of the entire artifact store.", + "x-looker-nullable": false + }, + "usage": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The currently used storage size in bytes of the entire artifact store.", + "x-looker-nullable": false + } + }, + "x-looker-status": "beta", + "required": [ + "max_size", + "usage" + ] + }, + "ArtifactNamespace": { + "properties": { + "namespace": { + "type": "string", + "readOnly": true, + "description": "Artifact storage namespace.", + "x-looker-nullable": false + }, + "count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "The number of artifacts stored in the namespace.", + "x-looker-nullable": false + } + }, + "x-looker-status": "beta", + "required": [ + "namespace", + "count" + ] + }, + "UpdateArtifact": { + "properties": { + "key": { + "type": "string", + "description": "Key of value to store. Namespace + Key must be unique.", + "x-looker-nullable": false + }, + "value": { + "type": "string", + "description": "Value to store.", + "x-looker-nullable": false + }, + "content_type": { + "type": "string", + "description": "MIME type of content. This can only be used to override content that is detected as text/plain. Needed to set application/json content types, which are analyzed as plain text.", + "x-looker-nullable": true + }, + "version": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Version number of the stored value. The version must be provided for any updates to an existing artifact.", + "x-looker-nullable": false + } + }, + "x-looker-status": "beta", + "required": [ + "key", + "value" + ] + }, + "Artifact": { + "properties": { + "key": { + "type": "string", + "description": "Key of value to store. Namespace + Key must be unique.", + "x-looker-nullable": false + }, + "value": { + "type": "string", + "description": "Value to store.", + "x-looker-nullable": false + }, + "content_type": { + "type": "string", + "description": "MIME type of content. This can only be used to override content that is detected as text/plain. Needed to set application/json content types, which are analyzed as plain text.", + "x-looker-nullable": true + }, + "version": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Version number of the stored value. The version must be provided for any updates to an existing artifact.", + "x-looker-nullable": false + }, + "namespace": { + "type": "string", + "readOnly": true, + "description": "Artifact storage namespace.", + "x-looker-nullable": false + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Timestamp when this artifact was created.", + "x-looker-nullable": false + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Timestamp when this artifact was updated.", + "x-looker-nullable": false + }, + "value_size": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Size (in bytes) of the stored value.", + "x-looker-nullable": false + }, + "created_by_userid": { + "type": "string", + "readOnly": true, + "description": "User id of the artifact creator.", + "x-looker-nullable": false + }, + "updated_by_userid": { + "type": "string", + "readOnly": true, + "description": "User id of the artifact updater.", + "x-looker-nullable": false + } + }, + "x-looker-status": "beta", + "required": [ + "key", + "value", + "namespace", + "created_at", + "updated_at", + "value_size", + "created_by_userid", + "updated_by_userid" + ] + }, "BackupConfiguration": { "properties": { "can": { @@ -24043,7 +27171,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "Board": { "properties": { @@ -24128,7 +27256,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "BoardSection": { "properties": { @@ -24209,7 +27337,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "ColorStop": { "properties": { @@ -24402,7 +27530,10 @@ "permission_type": { "type": "string", "readOnly": true, - "x-looker-values": ["view", "edit"], + "x-looker-values": [ + "view", + "edit" + ], "description": "Type of permission: \"view\" or \"edit\" Valid values are: \"view\", \"edit\".", "x-looker-nullable": true }, @@ -24494,6 +27625,69 @@ }, "x-looker-status": "stable" }, + "ContentSearch": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "x-looker-nullable": false + }, + "content_id": { + "type": "string", + "readOnly": true, + "description": "Primary id associated with the content", + "x-looker-nullable": true + }, + "type": { + "type": "string", + "readOnly": true, + "description": "Type of content", + "x-looker-nullable": true + }, + "title": { + "type": "string", + "readOnly": true, + "description": "Content title", + "x-looker-nullable": true + }, + "description": { + "type": "string", + "readOnly": true, + "description": "Content description", + "x-looker-nullable": true + }, + "folder_id": { + "type": "string", + "readOnly": true, + "description": "Id of the folder where the content is saved", + "x-looker-nullable": true + }, + "folder_name": { + "type": "string", + "readOnly": true, + "description": "Name of the folder where the content is saved", + "x-looker-nullable": true + }, + "view_count": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Number of times the content has been viewed", + "x-looker-nullable": true + }, + "preferred_viewer": { + "type": "string", + "readOnly": true, + "description": "Preferred way of viewing the content (only applies to dashboards)", + "x-looker-nullable": true + } + }, + "x-looker-status": "beta" + }, "ContentValidation": { "properties": { "content_with_errors": { @@ -24632,7 +27826,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "ContentValidationLook": { "properties": { @@ -24773,6 +27969,11 @@ "type": "string", "description": "JSON with all the properties required for rich editor and buttons elements", "x-looker-nullable": true + }, + "extension_id": { + "type": "string", + "description": "Extension ID", + "x-looker-nullable": true } }, "x-looker-status": "stable" @@ -24902,6 +28103,26 @@ "description": "ID of the LookML dashboard element associated with the alert", "x-looker-nullable": true }, + "custom_url_base": { + "type": "string", + "description": "Domain for the custom url selected by the alert creator from the admin defined domain allowlist", + "x-looker-nullable": true + }, + "custom_url_params": { + "type": "string", + "description": "Parameters and path for the custom url defined by the alert creator", + "x-looker-nullable": true + }, + "custom_url_label": { + "type": "string", + "description": "Label for the custom url defined by the alert creator", + "x-looker-nullable": true + }, + "show_custom_url": { + "type": "boolean", + "description": "Boolean to determine if the custom url should be used", + "x-looker-nullable": false + }, "custom_title": { "type": "string", "description": "An optional, user-defined title for the alert", @@ -25040,7 +28261,9 @@ } }, "x-looker-status": "stable", - "required": ["external_user_id"] + "required": [ + "external_user_id" + ] }, "CreateOAuthApplicationUserStateRequest": { "properties": { @@ -25095,7 +28318,10 @@ } }, "x-looker-status": "beta", - "required": ["user_id", "oauth_application_id"] + "required": [ + "user_id", + "oauth_application_id" + ] }, "CredentialsApi3": { "properties": { @@ -25232,6 +28458,12 @@ "description": "Force the user to change their password upon their next login", "x-looker-nullable": false }, + "user_id": { + "type": "string", + "readOnly": true, + "description": "Unique Id of the user", + "x-looker-nullable": true + }, "is_disabled": { "type": "boolean", "readOnly": true, @@ -25250,6 +28482,12 @@ "description": "Url with one-time use secret token that the user can use to reset password", "x-looker-nullable": true }, + "account_setup_url": { + "type": "string", + "readOnly": true, + "description": "Url with one-time use secret token that the user can use to setup account", + "x-looker-nullable": true + }, "type": { "type": "string", "readOnly": true, @@ -25300,6 +28538,12 @@ "description": "Force the user to change their password upon their next login", "x-looker-nullable": false }, + "user_id": { + "type": "string", + "readOnly": true, + "description": "Unique Id of the user", + "x-looker-nullable": true + }, "is_disabled": { "type": "boolean", "readOnly": true, @@ -25318,6 +28562,12 @@ "description": "Url with one-time use secret token that the user can use to reset password", "x-looker-nullable": true }, + "account_setup_url": { + "type": "string", + "readOnly": true, + "description": "Url with one-time use secret token that the user can use to setup account", + "x-looker-nullable": true + }, "type": { "type": "string", "readOnly": true, @@ -25339,7 +28589,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CredentialsEmbed": { "properties": { @@ -26001,6 +29251,11 @@ "readOnly": true, "description": "Text tile subtitle text as Html", "x-looker-nullable": true + }, + "extension_id": { + "type": "string", + "description": "Extension ID", + "x-looker-nullable": true } }, "x-looker-status": "stable" @@ -26202,7 +29457,12 @@ } }, "x-looker-status": "stable", - "required": ["dashboard_id", "name", "title", "type"] + "required": [ + "dashboard_id", + "name", + "title", + "type" + ] }, "DashboardLayoutComponent": { "properties": { @@ -26541,6 +29801,11 @@ "description": "Relative path of URI of LookML file to edit the dashboard (LookML dashboard only).", "x-looker-nullable": true }, + "enable_viz_full_screen": { + "type": "boolean", + "description": "Allow visualizations to be viewed in full screen mode", + "x-looker-nullable": false + }, "favorite_count": { "type": "integer", "format": "int64", @@ -26553,6 +29818,11 @@ "description": "Sets the default state of the filters bar to collapsed or open", "x-looker-nullable": false }, + "filters_location_top": { + "type": "boolean", + "description": "Sets the default state of the filters location to top(true) or right(false)", + "x-looker-nullable": false + }, "last_accessed_at": { "type": "string", "format": "date-time", @@ -26604,7 +29874,7 @@ }, "show_filters_bar": { "type": "boolean", - "description": "Show filters bar. **Security Note:** This property only affects the *cosmetic* appearance of the dashboard, not a user's ability to access data. Hiding the filters bar does **NOT** prevent users from changing filters by other means. For information on how to set up secure data access control policies, see [Control User Access to Data](https://looker.com/docs/r/api/control-access)", + "description": "Show filters bar. **Security Note:** This property only affects the *cosmetic* appearance of the dashboard, not a user's ability to access data. Hiding the filters bar does **NOT** prevent users from changing filters by other means. For information on how to set up secure data access control policies, see [Control User Access to Data](https://cloud.google.com/looker/docs/r/api/control-access)", "x-looker-nullable": true }, "show_title": { @@ -26982,12 +30252,12 @@ }, "host": { "type": "string", - "description": "Host name/address of server", + "description": "Host name/address of server; or the string 'localhost' in case of a connection over an SSH tunnel.", "x-looker-nullable": true }, "port": { "type": "string", - "description": "Port number on server", + "description": "Port number on server. If the connection is over an SSH tunnel, then the local port associated with the SSH tunnel.", "x-looker-nullable": true }, "username": { @@ -27036,7 +30306,7 @@ }, "schema": { "type": "string", - "description": "Scheme name", + "description": "Schema name", "x-looker-nullable": true }, "max_connections": { @@ -27081,6 +30351,12 @@ "description": "(Read/Write) SQL Dialect name", "x-looker-nullable": true }, + "supports_data_studio_link": { + "type": "boolean", + "readOnly": true, + "description": "Database connection has the ability to support open data studio from explore", + "x-looker-nullable": false + }, "created_at": { "type": "string", "readOnly": true, @@ -27155,10 +30431,20 @@ "description": "Is this connection created and managed by Looker", "x-looker-nullable": false }, + "custom_local_port": { + "type": "integer", + "format": "int64", + "description": "This field is only applicable to connections over an SSH Tunnel. The value of this field would be the local port associated with the SSH tunnel if configured manually. Otherwise either enter NULL or exclude this field.", + "x-looker-nullable": true + }, "tunnel_id": { "type": "string", "description": "The Id of the ssh tunnel this connection uses", - "x-looker-undocumented": false, + "x-looker-nullable": true + }, + "uses_tns": { + "type": "boolean", + "description": "Enable Transparent Network Substrate (TNS) connections", "x-looker-nullable": true }, "pdt_concurrency": { @@ -27248,7 +30534,7 @@ }, "schema": { "type": "string", - "description": "Scheme name", + "description": "Schema name", "x-looker-nullable": true }, "jdbc_additional_params": { @@ -27406,16 +30692,52 @@ "description": "Has additional params support", "x-looker-nullable": false }, + "after_connect_statements": { + "type": "boolean", + "readOnly": true, + "description": "Has support for issuing statements after connecting to the database", + "x-looker-nullable": false + }, + "analytical_view_dataset": { + "type": "boolean", + "readOnly": true, + "description": "Has analytical view support", + "x-looker-nullable": false + }, "auth": { "type": "boolean", "readOnly": true, "description": "Has auth support", "x-looker-nullable": false }, + "cost_estimate": { + "type": "boolean", + "readOnly": true, + "description": "Has configurable cost estimation", + "x-looker-nullable": false + }, + "disable_context_comment": { + "type": "boolean", + "readOnly": true, + "description": "Can disable query context comments", + "x-looker-nullable": false + }, "host": { "type": "boolean", "readOnly": true, - "description": "Has host support", + "description": "Host is required", + "x-looker-nullable": false + }, + "instance_name": { + "type": "boolean", + "readOnly": true, + "description": "Instance name is required", + "x-looker-nullable": false + }, + "max_billing_gigabytes": { + "type": "boolean", + "readOnly": true, + "description": "Has max billing gigabytes support", "x-looker-nullable": false }, "oauth_credentials": { @@ -27424,6 +30746,18 @@ "description": "Has support for a service account", "x-looker-nullable": false }, + "pdts_for_oauth": { + "type": "boolean", + "readOnly": true, + "description": "Has OAuth for PDT support", + "x-looker-nullable": false + }, + "port": { + "type": "boolean", + "readOnly": true, + "description": "Port can be specified", + "x-looker-nullable": false + }, "project_name": { "type": "boolean", "readOnly": true, @@ -27433,13 +30767,19 @@ "schema": { "type": "boolean", "readOnly": true, - "description": "Has schema support", + "description": "Schema can be specified", + "x-looker-nullable": false + }, + "service_account_credentials": { + "type": "boolean", + "readOnly": true, + "description": "Has support for a service account", "x-looker-nullable": false }, "ssl": { "type": "boolean", "readOnly": true, - "description": "Has SSL support", + "description": "Has TLS/SSL support", "x-looker-nullable": false }, "timezone": { @@ -27454,6 +30794,18 @@ "description": "Has tmp table support", "x-looker-nullable": false }, + "tns": { + "type": "boolean", + "readOnly": true, + "description": "Has Oracle TNS support", + "x-looker-nullable": false + }, + "username": { + "type": "boolean", + "readOnly": true, + "description": "Username can be specified", + "x-looker-nullable": false + }, "username_required": { "type": "boolean", "readOnly": true, @@ -27510,7 +30862,7 @@ "supports_streaming": { "type": "boolean", "readOnly": true, - "description": "Suports streaming results", + "description": "Supports streaming results", "x-looker-nullable": false }, "automatically_run_sql_runner_snippets": { @@ -27587,7 +30939,73 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" + }, + "EmbedConfig": { + "properties": { + "domain_allowlist": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of domains to allow for embedding", + "x-looker-nullable": true + }, + "alert_url_allowlist": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of base urls to allow for alert/schedule", + "x-looker-nullable": true + }, + "alert_url_param_owner": { + "type": "string", + "description": "Owner of who defines the alert/schedule params on the base url", + "x-looker-nullable": true + }, + "alert_url_label": { + "type": "string", + "description": "Label for the alert/schedule url", + "x-looker-nullable": true + }, + "sso_auth_enabled": { + "type": "boolean", + "description": "Is SSO embedding enabled for this Looker", + "x-looker-nullable": false + }, + "embed_cookieless_v2": { + "type": "boolean", + "description": "Is Cookieless embedding enabled for this Looker", + "x-looker-nullable": false + }, + "embed_content_navigation": { + "type": "boolean", + "description": "Is embed content navigation enabled for this looker", + "x-looker-nullable": false + }, + "embed_content_management": { + "type": "boolean", + "description": "Is embed content management enabled for this Looker", + "x-looker-nullable": false + }, + "strict_sameorigin_for_login": { + "type": "boolean", + "description": "When true, prohibits the use of Looker login pages in non-Looker iframes. When false, Looker login pages may be used in non-Looker hosted iframes.", + "x-looker-nullable": false + }, + "look_filters": { + "type": "boolean", + "description": "When true, filters are enabled on embedded Looks", + "x-looker-nullable": false + }, + "hide_look_navigation": { + "type": "boolean", + "description": "When true, removes navigation to Looks from embedded dashboards and explores.", + "x-looker-nullable": false + } + }, + "x-looker-status": "stable" }, "EmbedParams": { "properties": { @@ -27600,7 +31018,7 @@ "session_length": { "type": "integer", "format": "int64", - "description": "Number of seconds the SSO embed session will be valid after the embed session is started. Defaults to 300 seconds. Maximum session length accepted is 2592000 seconds (30 days).", + "description": "Number of seconds the signed embed session will be valid after the embed session is started. Defaults to 300 seconds. Maximum session length accepted is 2592000 seconds (30 days).", "x-looker-nullable": true }, "force_logout_login": { @@ -27609,8 +31027,10 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta", - "required": ["target_url"] + "x-looker-status": "stable", + "required": [ + "target_url" + ] }, "EmbedSsoParams": { "properties": { @@ -27623,7 +31043,7 @@ "session_length": { "type": "integer", "format": "int64", - "description": "Number of seconds the SSO embed session will be valid after the embed session is started. Defaults to 300 seconds. Maximum session length accepted is 2592000 seconds (30 days).", + "description": "Number of seconds the signed embed session will be valid after the embed session is started. Defaults to 300 seconds. Maximum session length accepted is 2592000 seconds (30 days).", "x-looker-nullable": true }, "force_logout_login": { @@ -27633,7 +31053,7 @@ }, "external_user_id": { "type": "string", - "description": "A value from an external system that uniquely identifies the embed user. Since the user_ids of Looker embed users may change with every embed session, external_user_id provides a way to assign a known, stable user identifier across multiple embed sessions.", + "description": "A value from an external system that uniquely identifies the embed user. Since the user_ids of Looker embed users may change with every embed session, external_user_id provides a way to assign a known, stable user identifier across multiple embed sessions. When the same external user id value is used for a new embed session, any existing session is terminated and existing access grants are replaced with the access grants associated with the new embed session.", "x-looker-nullable": true }, "first_name": { @@ -27693,10 +31113,214 @@ "type": "string", "description": "Id of the embed secret to use to sign this SSO url. If specified, the value must be an id of a valid (active) secret defined in the Looker instance. If not specified, the URL will be signed with the newest active embed secret defined in the Looker instance.", "x-looker-nullable": true + }, + "embed_domain": { + "type": "string", + "description": "Optional. URL of the domain hosting the signed embed URL. If provided and valid, the embed_domain will be added to the embed domain allowlist if it is not currently in the list", + "x-looker-nullable": true + } + }, + "x-looker-status": "stable", + "required": [ + "target_url" + ] + }, + "EmbedCookielessSessionAcquire": { + "properties": { + "session_length": { + "type": "integer", + "format": "int64", + "description": "Number of seconds the signed embed session will be valid after the embed session is started. Defaults to 300 seconds. Maximum session length accepted is 2592000 seconds (30 days).", + "x-looker-nullable": true + }, + "force_logout_login": { + "type": "boolean", + "description": "When true, the embed session will purge any residual Looker login state (such as in browser cookies) before creating a new login state with the given embed user info. Defaults to true.", + "x-looker-nullable": false + }, + "external_user_id": { + "type": "string", + "description": "A value from an external system that uniquely identifies the embed user. Since the user_ids of Looker embed users may change with every embed session, external_user_id provides a way to assign a known, stable user identifier across multiple embed sessions. When the same external user id value is used for a new embed session, any existing session is terminated and existing access grants are replaced with the access grants associated with the new embed session.", + "x-looker-nullable": true + }, + "first_name": { + "type": "string", + "description": "First name of the embed user. Defaults to 'Embed' if not specified", + "x-looker-nullable": true + }, + "last_name": { + "type": "string", + "description": "Last name of the embed user. Defaults to 'User' if not specified", + "x-looker-nullable": true + }, + "user_timezone": { + "type": "string", + "description": "Sets the user timezone for the embed user session, if the User Specific Timezones setting is enabled in the Looker admin settings. A value of `null` forces the embed user to use the Looker Application Default Timezone. You MUST omit this property from the request if the User Specific Timezones setting is disabled. Timezone values are validated against the IANA Timezone standard and can be seen in the Application Time Zone dropdown list on the Looker General Settings admin page.", + "x-looker-nullable": true + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of Looker permission names to grant to the embed user. Requested permissions will be filtered to permissions allowed for embed sessions.", + "x-looker-nullable": true + }, + "models": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of model names that the embed user may access", + "x-looker-nullable": true + }, + "group_ids": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of Looker group ids in which to enroll the embed user", + "x-looker-nullable": true + }, + "external_group_id": { + "type": "string", + "description": "A unique value identifying an embed-exclusive group. Multiple embed users using the same `external_group_id` value will be able to share Looker content with each other. Content and embed users associated with the `external_group_id` will not be accessible to normal Looker users or embed users not associated with this `external_group_id`.", + "x-looker-nullable": true + }, + "user_attributes": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "description": "A dictionary of name-value pairs associating a Looker user attribute name with a value.", + "x-looker-nullable": true + }, + "embed_domain": { + "type": "string", + "description": "The domain of the server embedding the Looker IFRAME. This is an alternative to specifying the domain in the embedded domain allow list in the Looker embed admin page.", + "x-looker-nullable": true + }, + "session_reference_token": { + "type": "string", + "description": "Token referencing the embed session and is used to generate new authentication, navigation and api tokens.", + "x-looker-nullable": true + } + }, + "x-looker-status": "stable" + }, + "EmbedCookielessSessionAcquireResponse": { + "properties": { + "authentication_token": { + "type": "string", + "description": "One time token used to create or to attach to an embedded session in the Looker application server.", + "x-looker-nullable": true + }, + "authentication_token_ttl": { + "type": "integer", + "format": "int64", + "description": "Authentication token time to live in seconds.", + "x-looker-nullable": true + }, + "navigation_token": { + "type": "string", + "description": "Token used to load and navigate between Looker pages.", + "x-looker-nullable": true + }, + "navigation_token_ttl": { + "type": "integer", + "format": "int64", + "description": "Navigation token time to live in seconds.", + "x-looker-nullable": true + }, + "api_token": { + "type": "string", + "description": "Token to used to call Looker APIs. ", + "x-looker-nullable": true + }, + "api_token_ttl": { + "type": "integer", + "format": "int64", + "description": "Api token time to live in seconds.", + "x-looker-nullable": true + }, + "session_reference_token": { + "type": "string", + "description": "Token referencing the actual embed session. It is used to generate new api, navigation and authentication tokens. api and navigation tokens are short lived and must be refreshed regularly. A new authentication token must be acquired for each IFRAME that is created. The session_reference_token should be kept secure, ideally in the embed hosts application server. ", + "x-looker-nullable": true + }, + "session_reference_token_ttl": { + "type": "integer", + "format": "int64", + "description": "Session reference token time to live in seconds. Note that this is the same as actual session.", + "x-looker-nullable": true + } + }, + "x-looker-status": "stable" + }, + "EmbedCookielessSessionGenerateTokens": { + "properties": { + "session_reference_token": { + "type": "string", + "description": "Token referencing the embed session and is used to generate new authentication, navigation and api tokens.", + "x-looker-nullable": false + }, + "navigation_token": { + "type": "string", + "description": "Token used to load and navigate between Looker pages.", + "x-looker-nullable": true + }, + "api_token": { + "type": "string", + "description": "Token to used to call Looker APIs. ", + "x-looker-nullable": true + } + }, + "x-looker-status": "stable", + "required": [ + "session_reference_token" + ] + }, + "EmbedCookielessSessionGenerateTokensResponse": { + "properties": { + "navigation_token": { + "type": "string", + "description": "Token used to load and navigate between Looker pages.", + "x-looker-nullable": true + }, + "navigation_token_ttl": { + "type": "integer", + "format": "int64", + "description": "Navigation token time to live in seconds.", + "x-looker-nullable": true + }, + "api_token": { + "type": "string", + "description": "Token to used to call Looker APIs. ", + "x-looker-nullable": true + }, + "api_token_ttl": { + "type": "integer", + "format": "int64", + "description": "Api token time to live in seconds.", + "x-looker-nullable": true + }, + "session_reference_token": { + "type": "string", + "description": "Token referencing the embed session and is used to generate new authentication, navigation and api tokens.", + "x-looker-nullable": false + }, + "session_reference_token_ttl": { + "type": "integer", + "format": "int64", + "description": "Session reference token time to live in seconds. Note that this is the same as actual session.", + "x-looker-nullable": true } }, "x-looker-status": "stable", - "required": ["target_url"] + "required": [ + "session_reference_token" + ] }, "EmbedSecret": { "properties": { @@ -27733,9 +31357,18 @@ "readOnly": true, "description": "Id of user who created this secret", "x-looker-nullable": true + }, + "secret_type": { + "type": "string", + "x-looker-values": [ + "SSO", + "JWT" + ], + "description": "Field to distinguish between SSO secrets and JWT secrets Valid values are: \"SSO\", \"JWT\".", + "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "EmbedUrlResponse": { "properties": { @@ -27783,12 +31416,21 @@ }, "ssl_version": { "type": "string", - "x-looker-values": ["TLSv1_1", "SSLv23", "TLSv1_2"], + "x-looker-values": [ + "TLSv1_1", + "SSLv23", + "TLSv1_2" + ], "description": "TLS version selected Valid values are: \"TLSv1_1\", \"SSLv23\", \"TLSv1_2\".", "x-looker-nullable": true + }, + "default_smtp": { + "type": "boolean", + "description": "Whether to enable built-in Looker SMTP", + "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "ExternalOauthApplication": { "properties": { @@ -27941,7 +31583,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "CreateFolder": { "properties": { @@ -27957,7 +31601,10 @@ } }, "x-looker-status": "stable", - "required": ["name", "parent_id"] + "required": [ + "name", + "parent_id" + ] }, "UpdateFolder": { "properties": { @@ -28095,7 +31742,9 @@ } }, "x-looker-status": "stable", - "required": ["name"] + "required": [ + "name" + ] }, "GitBranch": { "properties": { @@ -28435,7 +32084,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "GroupHierarchy": { "properties": { @@ -28514,7 +32163,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "GroupIdForGroupUserInclusion": { "properties": { @@ -28707,7 +32356,12 @@ "type": "string" }, "readOnly": true, - "x-looker-values": ["cell", "query", "dashboard", "none"], + "x-looker-values": [ + "cell", + "query", + "dashboard", + "none" + ], "description": "A list of action types the integration supports. Valid values are: \"cell\", \"query\", \"dashboard\", \"none\".", "x-looker-nullable": false }, @@ -28717,7 +32371,10 @@ "type": "string" }, "readOnly": true, - "x-looker-values": ["formatted", "unformatted"], + "x-looker-values": [ + "formatted", + "unformatted" + ], "description": "A list of formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: \"formatted\", \"unformatted\".", "x-looker-nullable": false }, @@ -28727,7 +32384,10 @@ "type": "string" }, "readOnly": true, - "x-looker-values": ["apply", "noapply"], + "x-looker-values": [ + "apply", + "noapply" + ], "description": "A list of visualization formatting options the integration supports. If unspecified, defaults to all formats. Valid values are: \"apply\", \"noapply\".", "x-looker-nullable": false }, @@ -28737,7 +32397,10 @@ "type": "string" }, "readOnly": true, - "x-looker-values": ["push", "url"], + "x-looker-values": [ + "push", + "url" + ], "description": "A list of all the download mechanisms the integration supports. The order of values is not significant: Looker will select the most appropriate supported download mechanism for a given query. The integration must ensure it can handle any of the mechanisms it claims to support. If unspecified, this defaults to all download setting values. Valid values are: \"push\", \"url\".", "x-looker-nullable": false }, @@ -28762,6 +32425,12 @@ "description": "A list of descriptions of required fields that this integration is compatible with. If there are multiple entries in this list, the integration requires more than one field. If unspecified, no fields will be required.", "x-looker-nullable": false }, + "privacy_link": { + "type": "string", + "readOnly": true, + "description": "Link to privacy policy for destination", + "x-looker-nullable": true + }, "delegate_oauth": { "type": "boolean", "readOnly": true, @@ -28855,7 +32524,7 @@ "type": "string" }, "readOnly": true, - "description": "If present, supercedes 'tag' and matches a field that has any of the provided tags.", + "description": "If present, supersedes 'tag' and matches a field that has any of the provided tags.", "x-looker-nullable": true }, "all_tags": { @@ -28864,7 +32533,7 @@ "type": "string" }, "readOnly": true, - "description": "If present, supercedes 'tag' and matches a field that has all of the provided tags.", + "description": "If present, supersedes 'tag' and matches a field that has all of the provided tags.", "x-looker-nullable": true } }, @@ -30324,7 +33993,6 @@ "type": "string", "readOnly": true, "description": "Explore title", - "x-looker-undocumented": false, "x-looker-nullable": true }, "scopes": { @@ -30346,21 +34014,18 @@ "type": "boolean", "readOnly": true, "description": "Can Develop LookML", - "x-looker-undocumented": false, "x-looker-nullable": false }, "can_see_lookml": { "type": "boolean", "readOnly": true, "description": "Can See LookML", - "x-looker-undocumented": false, "x-looker-nullable": false }, "lookml_link": { "type": "string", "readOnly": true, "description": "A URL linking to the definition of this explore in the LookML IDE.", - "x-looker-undocumented": false, "x-looker-nullable": true }, "can_save": { @@ -30762,7 +34427,10 @@ "align": { "type": "string", "readOnly": true, - "x-looker-values": ["left", "right"], + "x-looker-values": [ + "left", + "right" + ], "description": "The appropriate horizontal text alignment the values of this field should be displayed in. Valid values are: \"left\", \"right\".", "x-looker-nullable": false }, @@ -30775,7 +34443,12 @@ "category": { "type": "string", "readOnly": true, - "x-looker-values": ["parameter", "filter", "measure", "dimension"], + "x-looker-values": [ + "parameter", + "filter", + "measure", + "dimension" + ], "description": "Field category Valid values are: \"parameter\", \"filter\", \"measure\", \"dimension\".", "x-looker-nullable": true }, @@ -30827,7 +34500,10 @@ "fill_style": { "type": "string", "readOnly": true, - "x-looker-values": ["enumeration", "range"], + "x-looker-values": [ + "enumeration", + "range" + ], "description": "The style of dimension fill that is possible for this field. Null if no dimension fill is possible. Valid values are: \"enumeration\", \"range\".", "x-looker-nullable": true }, @@ -31261,7 +34937,10 @@ "format": { "type": "string", "readOnly": true, - "x-looker-values": ["topojson", "vector_tile_region"], + "x-looker-values": [ + "topojson", + "vector_tile_region" + ], "description": "Specifies the data format of the region information. Valid values are: \"topojson\", \"vector_tile_region\".", "x-looker-nullable": false }, @@ -31588,6 +35267,26 @@ }, "x-looker-status": "stable" }, + "MarketplaceAutomation": { + "properties": { + "install_enabled": { + "type": "boolean", + "description": "Whether marketplace auto installation is enabled", + "x-looker-nullable": false + }, + "update_looker_enabled": { + "type": "boolean", + "description": "Whether marketplace auto update is enabled for looker extensions", + "x-looker-nullable": false + }, + "update_third_party_enabled": { + "type": "boolean", + "description": "Whether marketplace auto update is enabled for third party extensions", + "x-looker-nullable": false + } + }, + "x-looker-status": "stable" + }, "MaterializePDT": { "properties": { "materialization_id": { @@ -31729,10 +35428,65 @@ "readOnly": true, "description": "Specifies whether mobile access for this instance is enabled.", "x-looker-nullable": false + }, + "mobile_feature_flags": { + "type": "array", + "items": { + "$ref": "#/definitions/MobileFeatureFlags" + }, + "readOnly": true, + "description": "Specifies feature flag and state relevant to mobile.", + "x-looker-nullable": true + } + }, + "x-looker-status": "beta" + }, + "MobileFeatureFlags": { + "properties": { + "feature_flag_name": { + "type": "string", + "readOnly": true, + "description": "Specifies the name of feature flag.", + "x-looker-nullable": true + }, + "feature_flag_state": { + "type": "boolean", + "readOnly": true, + "description": "Specifies the state of feature flag", + "x-looker-nullable": false } }, "x-looker-status": "beta" }, + "MobileToken": { + "properties": { + "id": { + "type": "string", + "readOnly": true, + "description": "Unique ID.", + "x-looker-nullable": false + }, + "device_token": { + "type": "string", + "description": "Specifies the device token", + "x-looker-nullable": false + }, + "device_type": { + "type": "string", + "x-looker-values": [ + "android", + "ios" + ], + "description": "Specifies type of device. Valid values are: \"android\", \"ios\".", + "x-looker-nullable": false + } + }, + "x-looker-status": "beta", + "required": [ + "device_token", + "device_type" + ] + }, "ModelSet": { "properties": { "can": { @@ -31816,7 +35570,7 @@ }, "enabled": { "type": "boolean", - "description": "When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused.", + "description": "When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused. Setting disabled invalidates existing tokens.", "x-looker-nullable": false }, "group_id": { @@ -31841,7 +35595,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "OIDCConfig": { "properties": { @@ -32452,7 +36206,12 @@ }, "pull_request_mode": { "type": "string", - "x-looker-values": ["off", "links", "recommended", "required"], + "x-looker-values": [ + "off", + "links", + "recommended", + "required" + ], "description": "The git pull request policy for this project. Valid values are: \"off\", \"links\", \"recommended\", \"required\".", "x-looker-nullable": false }, @@ -32894,7 +36653,10 @@ } }, "x-looker-status": "stable", - "required": ["model", "view"] + "required": [ + "model", + "view" + ] }, "CreateQueryTask": { "properties": { @@ -32919,14 +36681,16 @@ "json", "json_detail", "json_fe", + "json_bi", "csv", "html", "md", "txt", "xlsx", - "gsxml" + "gsxml", + "sql" ], - "description": "Desired async query result format. Valid values are: \"inline_json\", \"json\", \"json_detail\", \"json_fe\", \"csv\", \"html\", \"md\", \"txt\", \"xlsx\", \"gsxml\".", + "description": "Desired async query result format. Valid values are: \"inline_json\", \"json\", \"json_detail\", \"json_fe\", \"json_bi\", \"csv\", \"html\", \"md\", \"txt\", \"xlsx\", \"gsxml\", \"sql\".", "x-looker-nullable": true }, "source": { @@ -32951,7 +36715,10 @@ } }, "x-looker-status": "stable", - "required": ["query_id", "result_format"] + "required": [ + "query_id", + "result_format" + ] }, "QueryTask": { "properties": { @@ -33519,7 +37286,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "RunningQueries": { "properties": { @@ -34216,6 +37983,26 @@ "description": "Whether links back to Looker should be included in this ScheduledPlan", "x-looker-nullable": false }, + "custom_url_base": { + "type": "string", + "description": "Custom url domain for the scheduled entity", + "x-looker-nullable": true + }, + "custom_url_params": { + "type": "string", + "description": "Custom url path and parameters for the scheduled entity", + "x-looker-nullable": true + }, + "custom_url_label": { + "type": "string", + "description": "Custom url label for the scheduled entity", + "x-looker-nullable": true + }, + "show_custom_url": { + "type": "boolean", + "description": "Whether to show custom link back instead of standard looker link", + "x-looker-nullable": false + }, "pdf_paper_size": { "type": "string", "description": "The size of paper the PDF should be formatted to fit. Valid values are: \"letter\", \"legal\", \"tabloid\", \"a0\", \"a1\", \"a2\", \"a3\", \"a4\", \"a5\".", @@ -34356,6 +38143,26 @@ "description": "Whether links back to Looker should be included in this ScheduledPlan", "x-looker-nullable": false }, + "custom_url_base": { + "type": "string", + "description": "Custom url domain for the scheduled entity", + "x-looker-nullable": true + }, + "custom_url_params": { + "type": "string", + "description": "Custom url path and parameters for the scheduled entity", + "x-looker-nullable": true + }, + "custom_url_label": { + "type": "string", + "description": "Custom url label for the scheduled entity", + "x-looker-nullable": true + }, + "show_custom_url": { + "type": "boolean", + "description": "Whether to show custom link back instead of standard looker link", + "x-looker-nullable": false + }, "pdf_paper_size": { "type": "string", "description": "The size of paper the PDF should be formatted to fit. Valid values are: \"letter\", \"legal\", \"tabloid\", \"a0\", \"a1\", \"a2\", \"a3\", \"a4\", \"a5\".", @@ -34506,7 +38313,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "SchemaTable": { "properties": { @@ -34551,7 +38358,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "ConnectionFeatures": { "properties": { @@ -34652,7 +38459,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "Schema": { "properties": { @@ -34669,7 +38476,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "SchemaTables": { "properties": { @@ -34701,7 +38508,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "SchemaColumns": { "properties": { @@ -34733,7 +38540,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "ColumnSearch": { "properties": { @@ -34762,7 +38569,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CreateCostEstimate": { "properties": { @@ -34773,7 +38580,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CostEstimate": { "properties": { @@ -34803,7 +38610,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "ModelFieldSuggestions": { "properties": { @@ -34841,7 +38648,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "ModelNamedValueFormats": { "properties": { @@ -34866,7 +38673,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "Model": { "properties": { @@ -34890,7 +38697,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "SessionConfig": { "properties": { @@ -35039,9 +38846,22 @@ "description": "Toggle extension framework on or off", "x-looker-nullable": false }, + "extension_load_url_enabled": { + "type": "boolean", + "x-looker-deprecated": true, + "description": "(DEPRECATED) Toggle extension load url on or off. Do not use. This is temporary setting that will eventually become a noop and subsequently deleted.", + "x-looker-nullable": false + }, "marketplace_auto_install_enabled": { "type": "boolean", - "description": "Toggle marketplace auto install on or off. Note that auto install only runs if marketplace is enabled.", + "x-looker-deprecated": true, + "description": "(DEPRECATED) Toggle marketplace auto install on or off. Deprecated - do not use. Auto install can now be enabled via marketplace automation settings", + "x-looker-nullable": false + }, + "marketplace_automation": { + "$ref": "#/definitions/MarketplaceAutomation", + "readOnly": true, + "description": "Marketplace automation settings.", "x-looker-nullable": false }, "marketplace_enabled": { @@ -35049,6 +38869,17 @@ "description": "Toggle marketplace on or off", "x-looker-nullable": false }, + "marketplace_site": { + "type": "string", + "readOnly": true, + "description": "Location of Looker marketplace CDN", + "x-looker-nullable": false + }, + "marketplace_terms_accepted": { + "type": "boolean", + "description": "Accept marketplace terms by setting this value to true, or get the current status. Marketplace terms CANNOT be declined once accepted. Accepting marketplace terms automatically enables the marketplace. The marketplace can still be disabled after it has been enabled.", + "x-looker-nullable": false + }, "privatelabel_configuration": { "$ref": "#/definitions/PrivatelabelConfiguration", "readOnly": true, @@ -35065,9 +38896,61 @@ "type": "boolean", "description": "Toggle onboarding on or off", "x-looker-nullable": false + }, + "timezone": { + "type": "string", + "description": "Change instance-wide default timezone", + "x-looker-nullable": false + }, + "allow_user_timezones": { + "type": "boolean", + "description": "Toggle user-specific timezones on or off", + "x-looker-nullable": false + }, + "data_connector_default_enabled": { + "type": "boolean", + "description": "Toggle default future connectors on or off", + "x-looker-nullable": false + }, + "host_url": { + "type": "string", + "description": "Change the base portion of your Looker instance URL setting", + "x-looker-nullable": false + }, + "override_warnings": { + "type": "boolean", + "x-looker-write-only": true, + "description": "(Write-Only) If warnings are preventing a host URL change, this parameter allows for overriding warnings to force update the setting. Does not directly change any Looker settings.", + "x-looker-nullable": false + }, + "email_domain_allowlist": { + "type": "array", + "items": { + "type": "string" + }, + "description": "An array of Email Domain Allowlist of type string for Scheduled Content", + "x-looker-nullable": false + }, + "embed_cookieless_v2": { + "type": "boolean", + "x-looker-deprecated": true, + "description": "(DEPRECATED) Use embed_config.embed_cookieless_v2 instead. If embed_config.embed_cookieless_v2 is specified, it overrides this value.", + "x-looker-nullable": false + }, + "embed_enabled": { + "type": "boolean", + "readOnly": true, + "description": "True if embedding is enabled https://cloud.google.com/looker/docs/r/looker-core-feature-embed, false otherwise", + "x-looker-nullable": false + }, + "embed_config": { + "$ref": "#/definitions/EmbedConfig", + "readOnly": true, + "description": "Embed configuration. Requires embedding to be enabled https://cloud.google.com/looker/docs/r/looker-core-feature-embed", + "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "SmtpStatus": { "properties": { @@ -35094,7 +38977,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "SmtpNodeStatus": { "properties": { @@ -35117,7 +39000,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "Snippet": { "properties": { @@ -35142,6 +39025,74 @@ }, "x-looker-status": "stable" }, + "SqlInterfaceQueryCreate": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "x-looker-nullable": false + }, + "sql": { + "type": "string", + "description": "Original SQL request", + "x-looker-nullable": true + }, + "jdbc_client": { + "type": "boolean", + "description": "Whether the query should be run for use in a JDBC Client. This changes the formatting of some datetime based values.", + "x-looker-nullable": false + } + }, + "x-looker-status": "stable", + "required": [ + "sql" + ] + }, + "SqlInterfaceQuery": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "x-looker-nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique Id", + "x-looker-nullable": false + }, + "signature": { + "type": "string", + "readOnly": true, + "description": "Calcite signature", + "x-looker-nullable": true + } + }, + "x-looker-status": "beta", + "required": [ + "signature" + ] + }, + "SqlInterfaceQueryMetadata": { + "properties": { + "results": { + "type": "string", + "readOnly": true, + "description": "JDBC Metadata to inflate Avatica response classes.", + "x-looker-nullable": false + } + }, + "x-looker-status": "beta" + }, "SqlQueryCreate": { "properties": { "connection_name": { @@ -35283,7 +39234,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "SshServer": { "properties": { @@ -35339,7 +39290,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "SshTunnel": { "properties": { @@ -35388,7 +39339,6 @@ "local_host_port": { "type": "integer", "format": "int64", - "readOnly": true, "description": "Localhost Port used by the Looker instance to connect to the remote DB", "x-looker-nullable": false }, @@ -35410,7 +39360,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "SupportAccessAllowlistEntry": { "properties": { @@ -35444,7 +39394,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "SupportAccessAddEntries": { "properties": { @@ -35462,7 +39412,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "SupportAccessEnable": { "properties": { @@ -35473,8 +39423,10 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta", - "required": ["duration_in_seconds"] + "x-looker-status": "stable", + "required": [ + "duration_in_seconds" + ] }, "SupportAccessStatus": { "properties": { @@ -35492,7 +39444,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "ThemeSettings": { "properties": { @@ -35503,7 +39455,7 @@ }, "base_font_size": { "type": "string", - "description": "Base font size for scaling fonts", + "description": "Base font size for scaling fonts (only supported by legacy dashboards)", "x-looker-nullable": true }, "color_collection_id": { @@ -35528,7 +39480,8 @@ }, "info_button_color": { "type": "string", - "description": "Info button color", + "x-looker-deprecated": true, + "description": "(DEPRECATED) Info button color", "x-looker-nullable": false }, "primary_button_color": { @@ -35556,6 +39509,11 @@ "description": "Background color for tiles", "x-looker-nullable": false }, + "text_tile_background_color": { + "type": "string", + "description": "Background color for text tiles", + "x-looker-nullable": false + }, "tile_text_color": { "type": "string", "description": "Text color for tiles", @@ -35568,7 +39526,8 @@ }, "warn_button_color": { "type": "string", - "description": "Warning button color", + "x-looker-deprecated": true, + "description": "(DEPRECATED) Warning button color", "x-looker-nullable": false }, "tile_title_alignment": { @@ -35578,7 +39537,142 @@ }, "tile_shadow": { "type": "boolean", - "description": "Toggles the tile shadow (New Dashboards)", + "description": "Toggles the tile shadow (not supported)", + "x-looker-nullable": false + }, + "show_last_updated_indicator": { + "type": "boolean", + "description": "Toggle to show the dashboard last updated indicator. Defaults to true.", + "x-looker-nullable": false + }, + "show_reload_data_icon": { + "type": "boolean", + "description": "Toggle to show reload data icon/button. Defaults to true.", + "x-looker-nullable": false + }, + "show_dashboard_menu": { + "type": "boolean", + "description": "Toggle to show the dashboard actions menu. Defaults to true.", + "x-looker-nullable": false + }, + "show_filters_toggle": { + "type": "boolean", + "description": "Toggle to show the filters icon/toggle. Defaults to true.", + "x-looker-nullable": false + }, + "show_dashboard_header": { + "type": "boolean", + "description": "Toggle to show the dashboard header. Defaults to true.", + "x-looker-nullable": false + }, + "center_dashboard_title": { + "type": "boolean", + "description": "Toggle to center the dashboard title. Defaults to false.", + "x-looker-nullable": false + }, + "dashboard_title_font_size": { + "type": "string", + "description": "Dashboard title font size.", + "x-looker-nullable": false + }, + "box_shadow": { + "type": "string", + "description": "Default box shadow.", + "x-looker-nullable": false + }, + "page_margin_top": { + "type": "string", + "description": "Dashboard page margin top.", + "x-looker-nullable": false + }, + "page_margin_bottom": { + "type": "string", + "description": "Dashboard page margin bottom.", + "x-looker-nullable": false + }, + "page_margin_sides": { + "type": "string", + "description": "Dashboard page margin left and right.", + "x-looker-nullable": false + }, + "show_explore_header": { + "type": "boolean", + "description": "Toggle to show the explore page header. Defaults to true.", + "x-looker-nullable": false + }, + "show_explore_title": { + "type": "boolean", + "description": "Toggle to show the explore page title. Defaults to true.", + "x-looker-nullable": false + }, + "show_explore_last_run": { + "type": "boolean", + "description": "Toggle to show the explore page last run. Defaults to true.", + "x-looker-nullable": false + }, + "show_explore_timezone": { + "type": "boolean", + "description": "Toggle to show the explore page timezone. Defaults to true.", + "x-looker-nullable": false + }, + "show_explore_run_stop_button": { + "type": "boolean", + "description": "Toggle to show the explore page run button. Defaults to true.", + "x-looker-nullable": false + }, + "show_explore_actions_button": { + "type": "boolean", + "description": "Toggle to show the explore page actions button. Defaults to true.", + "x-looker-nullable": false + }, + "show_look_header": { + "type": "boolean", + "description": "Toggle to show the look page header. Defaults to true.", + "x-looker-nullable": false + }, + "show_look_title": { + "type": "boolean", + "description": "Toggle to show the look page title. Defaults to true.", + "x-looker-nullable": false + }, + "show_look_last_run": { + "type": "boolean", + "description": "Toggle to show the look page last run. Defaults to true.", + "x-looker-nullable": false + }, + "show_look_timezone": { + "type": "boolean", + "description": "Toggle to show the look page timezone Defaults to true.", + "x-looker-nullable": false + }, + "show_look_run_stop_button": { + "type": "boolean", + "description": "Toggle to show the look page run button. Defaults to true.", + "x-looker-nullable": false + }, + "show_look_actions_button": { + "type": "boolean", + "description": "Toggle to show the look page actions button. Defaults to true.", + "x-looker-nullable": false + }, + "tile_title_font_size": { + "type": "string", + "description": "Font size for tiles.", + "x-looker-nullable": false + }, + "column_gap_size": { + "type": "string", + "description": "The vertical gap/gutter size between tiles.", + "x-looker-nullable": false + }, + "row_gap_size": { + "type": "string", + "description": "The horizontal gap/gutter size between tiles.", + "x-looker-nullable": false + }, + "border_radius": { + "type": "string", + "description": "The border radius for tiles.", "x-looker-nullable": false } }, @@ -35720,7 +39814,11 @@ } }, "x-looker-status": "stable", - "required": ["name", "label", "type"] + "required": [ + "name", + "label", + "type" + ] }, "UserAttributeGroupValue": { "properties": { @@ -35841,7 +39939,7 @@ "hidden_value_domain_whitelist": { "type": "string", "readOnly": true, - "description": "If this user attribute is hidden, whitelist of destinations to which it may be sent.", + "description": "If this user attribute is hidden, allowed list of destinations to which it may be sent.", "x-looker-nullable": true } }, @@ -35856,7 +39954,9 @@ } }, "x-looker-status": "stable", - "required": ["email"] + "required": [ + "email" + ] }, "UserLoginLockout": { "properties": { @@ -35959,7 +40059,7 @@ "$ref": "#/definitions/CredentialsApi3" }, "readOnly": true, - "description": "API 3 credentials", + "description": "API credentials", "x-looker-nullable": true }, "credentials_email": { @@ -36160,6 +40260,12 @@ "description": "(Embed only) ID of user's group folder based on the external_group_id optionally specified during embed user login", "x-looker-nullable": true }, + "is_iam_admin": { + "type": "boolean", + "readOnly": true, + "description": "User is an IAM Admin - only available in Looker (Google Cloud core)", + "x-looker-nullable": false + }, "url": { "type": "string", "format": "uri-reference", @@ -36510,4 +40616,4 @@ "x-looker-status": "stable" } } -} +} \ No newline at end of file diff --git a/packages/api-explorer/public/versions.json b/packages/api-explorer/public/versions.json index 5ffecc67c..9642986ac 100644 --- a/packages/api-explorer/public/versions.json +++ b/packages/api-explorer/public/versions.json @@ -1,22 +1,16 @@ { "looker_release_version": "21.12", "current_version": { - "version": "3.1", - "full_version": "3.1.0", + "version": "4.0", + "full_version": "4.0.23.18", "status": "current", - "swagger_url": "Looker.3.1.json" + "swagger_url": "Looker.4.0.json" }, "supported_versions": [ - { - "version": "3.1", - "full_version": "3.1.0", - "status": "current", - "swagger_url": "/Looker.3.1.json" - }, { "version": "4.0", "full_version": "4.0.21.12", - "status": "beta", + "status": "current", "swagger_url": "/Looker.4.0.json" } ], diff --git a/packages/api-explorer/src/ApiExplorer.tsx b/packages/api-explorer/src/ApiExplorer.tsx index 2453dc75a..bbc4bdefb 100644 --- a/packages/api-explorer/src/ApiExplorer.tsx +++ b/packages/api-explorer/src/ApiExplorer.tsx @@ -24,9 +24,9 @@ */ -import type { FC } from 'react' -import React, { useState, useEffect, useCallback } from 'react' -import styled, { createGlobalStyle } from 'styled-components' +import type { FC } from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; +import styled, { createGlobalStyle } from 'styled-components'; import { Aside, ComponentsProvider, @@ -36,48 +36,48 @@ import { Layout, Page, Space, -} from '@looker/components' -import { FirstPage } from '@styled-icons/material/FirstPage' -import { LastPage } from '@styled-icons/material/LastPage' +} from '@looker/components'; +import { FirstPage } from '@styled-icons/material/FirstPage'; +import { LastPage } from '@styled-icons/material/LastPage'; import { registerEnvAdaptor, unregisterEnvAdaptor, -} from '@looker/extension-utils' -import { useSelector } from 'react-redux' -import { useLocation } from 'react-router-dom' +} from '@looker/extension-utils'; +import { useSelector } from 'react-redux'; +import { useLocation } from 'react-router-dom'; -import type { IApixAdaptor } from './utils' +import type { IApixAdaptor } from './utils'; import { - Header, - SideNav, + Banner, ErrorBoundary, - SelectorContainer, HEADER_TOGGLE_LABEL, + Header, Loader, - Banner, -} from './components' -import { AppRouter } from './routes' -import { apixFilesHost } from './utils/lodeUtils' + SelectorContainer, + SideNav, +} from './components'; +import { AppRouter } from './routes'; +import { apixFilesHost } from './utils/lodeUtils'; import { - useSettingActions, + selectCurrentSpec, + selectSpecs, useLodeActions, useLodesStoreState, + useSettingActions, + useSettingStoreState, useSpecActions, useSpecStoreState, - selectSpecs, - selectCurrentSpec, - useSettingStoreState, -} from './state' -import { getSpecKey, findSdk, useGlobalStoreSync } from './utils' +} from './state'; +import { findSdk, getSpecKey, useGlobalStoreSync } from './utils'; export interface ApiExplorerProps { - adaptor: IApixAdaptor - examplesLodeUrl?: string - declarationsLodeUrl?: string - headless?: boolean + adaptor: IApixAdaptor; + examplesLodeUrl?: string; + declarationsLodeUrl?: string; + headless?: boolean; } -const BodyOverride = createGlobalStyle` html { height: 100%; overflow: hidden; } ` +const BodyOverride = createGlobalStyle` html { height: 100%; overflow: hidden; } `; export const ApiExplorer: FC = ({ adaptor, @@ -85,72 +85,72 @@ export const ApiExplorer: FC = ({ declarationsLodeUrl = `${apixFilesHost}/declarationsIndex.json`, headless = false, }) => { - useLodesStoreState() - const { working, description } = useSpecStoreState() - const specs = useSelector(selectSpecs) - const spec = useSelector(selectCurrentSpec) - const { initLodesAction } = useLodeActions() - const { initialized } = useSettingStoreState() + useLodesStoreState(); + const { working, description } = useSpecStoreState(); + const specs = useSelector(selectSpecs); + const spec = useSelector(selectCurrentSpec); + const { initLodesAction } = useLodeActions(); + const { initialized } = useSettingStoreState(); const { initSettingsAction, setSearchPatternAction, setSdkLanguageAction } = - useSettingActions() - const { initSpecsAction, setCurrentSpecAction } = useSpecActions() + useSettingActions(); + const { initSpecsAction, setCurrentSpecAction } = useSpecActions(); - const location = useLocation() - useGlobalStoreSync() - const [hasNavigation, setHasNavigation] = useState(true) + const location = useLocation(); + useGlobalStoreSync(); + const [hasNavigation, setHasNavigation] = useState(true); const toggleNavigation = (target?: boolean) => - setHasNavigation(target || !hasNavigation) + setHasNavigation(target || !hasNavigation); const hasNavigationToggle = useCallback((e: MessageEvent) => { if (e.origin === window.origin && e.data.action === 'toggle_sidebar') { - setHasNavigation((currentHasNavigation) => !currentHasNavigation) + setHasNavigation((currentHasNavigation) => !currentHasNavigation); } - }, []) + }, []); - registerEnvAdaptor(adaptor) + registerEnvAdaptor(adaptor); useEffect(() => { - initSettingsAction() - initLodesAction({ examplesLodeUrl, declarationsLodeUrl }) + initSettingsAction(); + initLodesAction({ examplesLodeUrl, declarationsLodeUrl }); - const specKey = getSpecKey(location) - initSpecsAction({ specKey }) - return () => unregisterEnvAdaptor() - }, []) + const specKey = getSpecKey(location); + initSpecsAction({ specKey }); + return () => unregisterEnvAdaptor(); + }, []); useEffect(() => { - const maybeSpec = location.pathname?.split('/')[1] + const maybeSpec = location.pathname?.split('/')[1]; if (spec && maybeSpec && maybeSpec !== spec.key) { - setCurrentSpecAction({ currentSpecKey: maybeSpec }) + setCurrentSpecAction({ currentSpecKey: maybeSpec }); } - }, [location.pathname, spec]) + }, [location.pathname, spec]); useEffect(() => { - if (!initialized) return - const searchParams = new URLSearchParams(location.search) - const searchPattern = searchParams.get('s') || '' - const sdkParam = searchParams.get('sdk') || 'all' - const { language: sdkLanguage } = findSdk(sdkParam) - setSearchPatternAction({ searchPattern }) - setSdkLanguageAction({ sdkLanguage }) - }, [location.search]) + if (!initialized) return; + const searchParams = new URLSearchParams(location.search); + const searchPattern = searchParams.get('s') || ''; + const sdkParam = searchParams.get('sdk') || 'all'; + const { language: sdkLanguage } = findSdk(sdkParam); + setSearchPatternAction({ searchPattern }); + setSdkLanguageAction({ sdkLanguage }); + }, [location.search]); useEffect(() => { if (headless) { - window.addEventListener('message', hasNavigationToggle) + window.addEventListener('message', hasNavigationToggle); } return () => { if (headless) { - window.removeEventListener('message', hasNavigationToggle) + window.removeEventListener('message', hasNavigationToggle); } - } - }, [headless, hasNavigationToggle]) + }; + }, [headless, hasNavigationToggle]); - const themeOverrides = adaptor.themeOverrides() + const themeOverrides = adaptor.themeOverrides(); - let neededSpec = location.pathname?.split('/')[1] + let neededSpec = location.pathname?.split('/')[1]; if (!neededSpec) { - neededSpec = spec?.key + neededSpec = spec?.key; } return ( @@ -228,13 +228,13 @@ export const ApiExplorer: FC = ({ {!headless && } - ) -} + ); +}; const AsideBorder = styled(Aside)<{ - isOpen: boolean - headless: boolean + isOpen: boolean; + headless: boolean; }>` width: ${({ isOpen, headless }) => isOpen ? '20rem' : headless ? '2.75rem' : '0rem'}; -` +`; diff --git a/packages/api-explorer/src/App.tsx b/packages/api-explorer/src/App.tsx index 51bded4e4..5a38f4528 100644 --- a/packages/api-explorer/src/App.tsx +++ b/packages/api-explorer/src/App.tsx @@ -24,26 +24,26 @@ */ -import React from 'react' -import { BrowserRouter as Router } from 'react-router-dom' -import ReactDOM from 'react-dom' -import { createGlobalStyle } from 'styled-components' -import { StandaloneApiExplorer } from './StandaloneApiExplorer' +import React from 'react'; +import { BrowserRouter as Router } from 'react-router-dom'; +import ReactDOM from 'react-dom'; +import { createGlobalStyle } from 'styled-components'; +import { StandaloneApiExplorer } from './StandaloneApiExplorer'; const BodyReset = createGlobalStyle` body { margin: 0; } -` +`; const basename = (window as any).LOOKER_DEV_PORTAL ? (window as any).LOOKER_DEV_PORTAL.basename - : undefined + : undefined; const versionsUrl = new URL( 'versions.json', (window as any).location.origin -).toString() +).toString(); ReactDOM.render( @@ -51,4 +51,4 @@ ReactDOM.render( , document.getElementById('container') -) +); diff --git a/packages/api-explorer/src/StandaloneApiExplorer.tsx b/packages/api-explorer/src/StandaloneApiExplorer.tsx index 26b3548f0..4a91bf30b 100644 --- a/packages/api-explorer/src/StandaloneApiExplorer.tsx +++ b/packages/api-explorer/src/StandaloneApiExplorer.tsx @@ -24,22 +24,22 @@ */ -import type { FC } from 'react' -import React, { useEffect, useState } from 'react' -import { initRunItSdk, RunItProvider } from '@looker/run-it' -import type { OAuthConfigProvider } from '@looker/extension-utils' -import { OAuthScene } from '@looker/extension-utils' -import { Provider } from 'react-redux' -import { useLocation } from 'react-router' +import type { FC } from 'react'; +import React, { useEffect, useState } from 'react'; +import { RunItProvider, initRunItSdk } from '@looker/run-it'; +import type { OAuthConfigProvider } from '@looker/extension-utils'; +import { OAuthScene } from '@looker/extension-utils'; +import { Provider } from 'react-redux'; +import { useLocation } from 'react-router'; -import { ApiExplorer } from './ApiExplorer' -import { store } from './state' -import { oAuthPath, ApixAdaptor } from './utils' -import { Loader } from './components' +import { ApiExplorer } from './ApiExplorer'; +import { store } from './state'; +import { ApixAdaptor, oAuthPath } from './utils'; +import { Loader } from './components'; export interface StandaloneApiExplorerProps { - headless?: boolean - versionsUrl: string + headless?: boolean; + versionsUrl: string; } export const StandaloneApiExplorer: FC = ({ @@ -47,25 +47,25 @@ export const StandaloneApiExplorer: FC = ({ }) => { const [browserAdaptor] = useState( new ApixAdaptor(initRunItSdk(), window.origin) - ) - const location = useLocation() - const oauthReturn = location.pathname === `/${oAuthPath}` - const sdk = browserAdaptor.sdk + ); + const location = useLocation(); + const oauthReturn = location.pathname === `/${oAuthPath}`; + const sdk = browserAdaptor.sdk; const canLogin = (sdk.authSession.settings as OAuthConfigProvider).authIsConfigured() && !sdk.authSession.isAuthenticated() && - !oauthReturn + !oauthReturn; useEffect(() => { - const login = async () => await browserAdaptor.login() + const login = async () => await browserAdaptor.login(); if (canLogin) { - login() + login(); } - }, []) + }, []); const { looker_url } = ( sdk.authSession.settings as OAuthConfigProvider - ).getStoredConfig() + ).getStoredConfig(); return ( @@ -86,5 +86,5 @@ export const StandaloneApiExplorer: FC = ({ )} - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/Banner/Banner.spec.tsx b/packages/api-explorer/src/components/Banner/Banner.spec.tsx index b2d185d59..4e318c996 100644 --- a/packages/api-explorer/src/components/Banner/Banner.spec.tsx +++ b/packages/api-explorer/src/components/Banner/Banner.spec.tsx @@ -23,12 +23,12 @@ SOFTWARE. */ -import React from 'react' -import { renderWithTheme } from '@looker/components-test-utils' -import { screen, fireEvent, waitFor } from '@testing-library/react' -import type { IEnvironmentAdaptor } from '@looker/extension-utils' -import type { SpecList } from '@looker/sdk-codegen' -import { Banner } from './Banner' +import React from 'react'; +import { renderWithTheme } from '@looker/components-test-utils'; +import { fireEvent, screen, waitFor } from '@testing-library/react'; +import type { IEnvironmentAdaptor } from '@looker/extension-utils'; +import type { SpecList } from '@looker/sdk-codegen'; +import { Banner } from './Banner'; describe('Banner', () => { const specs: any = { @@ -38,62 +38,64 @@ describe('Banner', () => { '4.0': { status: 'beta', }, - } + }; test('renders with button that opens api 4.0 dev portal link in new page', async () => { const adaptor: any = { localStorageGetItem: jest.fn().mockReturnValue(Promise.resolve(null)), isExtension: jest.fn().mockReturnValue(true), - } + }; renderWithTheme( - ) + ); await waitFor(() => { expect( screen.getByText('API 4.0 moves from Beta', { exact: false }) - ).toBeInTheDocument() - const link = screen.getByText('Announcement').closest('a') + ).toBeInTheDocument(); + const link = screen.getByText('Announcement').closest('a'); + // eslint-disable-next-line testing-library/no-wait-for-multiple-assertions expect(link).toHaveAttribute( 'href', 'https://developers.looker.com/api/advanced-usage/version-4-ga' - ) - expect(link).toHaveAttribute('target', '_blank') - }) - }) + ); + // eslint-disable-next-line testing-library/no-wait-for-multiple-assertions + expect(link).toHaveAttribute('target', '_blank'); + }); + }); test('sets local storage value and unrenders on close button click', async () => { const adaptor: any = { localStorageGetItem: jest.fn().mockReturnValue(Promise.resolve(null)), localStorageSetItem: jest.fn(), isExtension: jest.fn().mockReturnValue(true), - } + }; renderWithTheme( - ) + ); await waitFor(() => { expect( screen.getByText('API 4.0 moves from Beta', { exact: false }) - ).toBeInTheDocument() - }) + ).toBeInTheDocument(); + }); - const closeButton = screen.getByText('Dismiss Inform').closest('button') - fireEvent.click(closeButton as HTMLButtonElement) + const closeButton = screen.getByText('Dismiss Inform').closest('button'); + fireEvent.click(closeButton as HTMLButtonElement); expect( screen.queryByText('API 4.0 moves from Beta', { exact: false }) - ).not.toBeInTheDocument() + ).not.toBeInTheDocument(); expect(adaptor.localStorageSetItem).toHaveBeenCalledWith( 'api-40-ga-apix-banner', 'dismissed' - ) - }) -}) + ); + }); +}); diff --git a/packages/api-explorer/src/components/Banner/Banner.tsx b/packages/api-explorer/src/components/Banner/Banner.tsx index 932d93641..004b58143 100644 --- a/packages/api-explorer/src/components/Banner/Banner.tsx +++ b/packages/api-explorer/src/components/Banner/Banner.tsx @@ -23,23 +23,23 @@ SOFTWARE. */ -import { ButtonOutline, Link, MessageBar } from '@looker/components' -import type { IEnvironmentAdaptor } from '@looker/extension-utils' -import type { SpecList } from '@looker/sdk-codegen' -import type { FC } from 'react' -import React, { useState, useEffect } from 'react' +import { ButtonOutline, Link, MessageBar } from '@looker/components'; +import type { IEnvironmentAdaptor } from '@looker/extension-utils'; +import type { SpecList } from '@looker/sdk-codegen'; +import type { FC } from 'react'; +import React, { useEffect, useState } from 'react'; -const LOCAL_STORAGE_KEY = 'api-40-ga-apix-banner' -const LOCAL_STORAGE_VALUE = 'dismissed' +const LOCAL_STORAGE_KEY = 'api-40-ga-apix-banner'; +const LOCAL_STORAGE_VALUE = 'dismissed'; export interface BannerProps { - adaptor: IEnvironmentAdaptor - specs: SpecList + adaptor: IEnvironmentAdaptor; + specs: SpecList; } export const Banner: FC = ({ adaptor, specs }) => { - const [isOpen, setOpen] = useState(false) - useEffect(onLoad, []) + const [isOpen, setOpen] = useState(false); + useEffect(onLoad, []); if (isOpen) { return ( @@ -59,9 +59,9 @@ export const Banner: FC = ({ adaptor, specs }) => { additions and possible breaking changes. Read the announcement to see how this affects you. - ) + ); } else { - return null + return null; } function onLoad() { @@ -71,17 +71,17 @@ export const Banner: FC = ({ adaptor, specs }) => { // 4.0 is stable in Looker 22.4+. 4.0 is default or `current` in 22.4+. // Still check for `stable` just in case new version comes along. const is40Stable = - specs['4.0'].status === 'stable' || specs['4.0'].status === 'current' + specs['4.0'].status === 'stable' || specs['4.0'].status === 'current'; const wasDismissed = (await adaptor.localStorageGetItem(LOCAL_STORAGE_KEY)) === - LOCAL_STORAGE_VALUE - setOpen(!is40Stable && !wasDismissed && adaptor.isExtension()) + LOCAL_STORAGE_VALUE; + setOpen(!is40Stable && !wasDismissed && adaptor.isExtension()); } - innerOnLoad() + innerOnLoad(); } function onClose() { - adaptor.localStorageSetItem(LOCAL_STORAGE_KEY, LOCAL_STORAGE_VALUE) - setOpen(false) + adaptor.localStorageSetItem(LOCAL_STORAGE_KEY, LOCAL_STORAGE_VALUE); + setOpen(false); } -} +}; diff --git a/packages/api-explorer/src/components/Banner/index.ts b/packages/api-explorer/src/components/Banner/index.ts index 0a097df7c..2a06b9dd7 100644 --- a/packages/api-explorer/src/components/Banner/index.ts +++ b/packages/api-explorer/src/components/Banner/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { Banner } from './Banner' +export { Banner } from './Banner'; diff --git a/packages/api-explorer/src/components/DocActivityType/DocActivityType.spec.tsx b/packages/api-explorer/src/components/DocActivityType/DocActivityType.spec.tsx index ed3539242..62e0095bb 100644 --- a/packages/api-explorer/src/components/DocActivityType/DocActivityType.spec.tsx +++ b/packages/api-explorer/src/components/DocActivityType/DocActivityType.spec.tsx @@ -23,28 +23,29 @@ SOFTWARE. */ -import React from 'react' -import { renderWithTheme } from '@looker/components-test-utils' -import { screen, fireEvent, waitFor } from '@testing-library/react' +import React from 'react'; +import { renderWithTheme } from '@looker/components-test-utils'; +import { fireEvent, screen, waitFor } from '@testing-library/react'; -import { api } from '../../test-data' -import { DocActivityType } from './DocActivityType' +import { api } from '../../test-data'; +import { DocActivityType } from './DocActivityType'; describe('DocActivityType', () => { - const method = api.methods.run_inline_query + const method = api.methods.run_inline_query; test('it renders', () => { - renderWithTheme() - expect(screen.getByText('db_query')).toBeInTheDocument() - }) + renderWithTheme(); + expect(screen.getByText('db_query')).toBeInTheDocument(); + }); test('it displays a tooltip with the right information on hover', async () => { - renderWithTheme() - const costSymbol = screen.getByText('$') + renderWithTheme(); + const costSymbol = screen.getByText('$'); await waitFor(() => { - fireEvent.mouseOver(costSymbol) + // eslint-disable-next-line testing-library/no-wait-for-side-effects + fireEvent.mouseOver(costSymbol); expect(screen.getByRole('tooltip')).toHaveTextContent( 'Call volume for this endpoint counts toward the "db_query" API activity category.' - ) - }) - }) -}) + ); + }); + }); +}); diff --git a/packages/api-explorer/src/components/DocActivityType/DocActivityType.tsx b/packages/api-explorer/src/components/DocActivityType/DocActivityType.tsx index 16219b40b..3b5256de3 100644 --- a/packages/api-explorer/src/components/DocActivityType/DocActivityType.tsx +++ b/packages/api-explorer/src/components/DocActivityType/DocActivityType.tsx @@ -23,13 +23,13 @@ SOFTWARE. */ -import type { FC } from 'react' -import React from 'react' -import { Code, Tooltip, Badge } from '@looker/components' -import type { IMethod } from '@looker/sdk-codegen' +import type { FC } from 'react'; +import React from 'react'; +import { Badge, Code, Tooltip } from '@looker/components'; +import type { IMethod } from '@looker/sdk-codegen'; interface DocActivityTypeProps { - method: IMethod + method: IMethod; } export const DocActivityType: FC = ({ method }) => ( <> @@ -52,4 +52,4 @@ export const DocActivityType: FC = ({ method }) => ( )} -) +); diff --git a/packages/api-explorer/src/components/DocActivityType/index.ts b/packages/api-explorer/src/components/DocActivityType/index.ts index 86bb418b2..3f3a62266 100644 --- a/packages/api-explorer/src/components/DocActivityType/index.ts +++ b/packages/api-explorer/src/components/DocActivityType/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { DocActivityType } from './DocActivityType' +export { DocActivityType } from './DocActivityType'; diff --git a/packages/api-explorer/src/components/DocCode/DocCode.tsx b/packages/api-explorer/src/components/DocCode/DocCode.tsx index e701ebc4f..db3b41605 100644 --- a/packages/api-explorer/src/components/DocCode/DocCode.tsx +++ b/packages/api-explorer/src/components/DocCode/DocCode.tsx @@ -24,23 +24,25 @@ */ -import type { FC } from 'react' -import React from 'react' -import { findGenerator } from '@looker/sdk-codegen' -import { CodeDisplay } from '@looker/code-editor' -import { useSelector } from 'react-redux' +import type { FC } from 'react'; +import React from 'react'; +import { findGenerator } from '@looker/sdk-codegen'; +import { CodeDisplay } from '@looker/code-editor'; +import { useSelector } from 'react-redux'; -import { selectSearchPattern } from '../../state' +import { selectSearchPattern } from '../../state'; interface DocCodeProps { - code: string - language?: string + code: string; + language?: string; } export const DocCode: FC = ({ code, language = 'json' }) => { - const searchPattern = useSelector(selectSearchPattern) - const gen = findGenerator(language) - if (gen) language = gen.language.toLocaleLowerCase() - - return -} + const searchPattern = useSelector(selectSearchPattern); + const gen = findGenerator(language); + if (gen) language = gen.language.toLocaleLowerCase(); + + return ( + + ); +}; diff --git a/packages/api-explorer/src/components/DocCode/index.ts b/packages/api-explorer/src/components/DocCode/index.ts index 7bf0d4647..f725da765 100644 --- a/packages/api-explorer/src/components/DocCode/index.ts +++ b/packages/api-explorer/src/components/DocCode/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { DocCode } from './DocCode' +export { DocCode } from './DocCode'; diff --git a/packages/api-explorer/src/components/DocMarkdown/DocMarkdown.spec.tsx b/packages/api-explorer/src/components/DocMarkdown/DocMarkdown.spec.tsx index 98145c97d..bf2098958 100644 --- a/packages/api-explorer/src/components/DocMarkdown/DocMarkdown.spec.tsx +++ b/packages/api-explorer/src/components/DocMarkdown/DocMarkdown.spec.tsx @@ -24,11 +24,11 @@ */ -import React from 'react' -import { screen } from '@testing-library/react' -import { createTestStore, renderWithReduxProvider } from '../../test-utils' +import React from 'react'; +import { screen } from '@testing-library/react'; +import { createTestStore, renderWithReduxProvider } from '../../test-utils'; -import { DocMarkdown } from './DocMarkdown' +import { DocMarkdown } from './DocMarkdown'; describe('DocMarkdown', () => { test('it renders markdown', () => { @@ -37,95 +37,95 @@ describe('DocMarkdown', () => { source={ '# Markdown Component \n Renders markdown using [ReactMarkdown](https://github.com/rexxars/react-markdown)' } - specKey={'3.1'} + specKey={'4.0'} /> - ) - const heading = screen.getByRole('heading') - expect(heading).toHaveTextContent('Markdown Component') - const link = screen.getByRole('link') - expect(link).toHaveTextContent('ReactMarkdown') + ); + const heading = screen.getByRole('heading'); + expect(heading).toHaveTextContent('Markdown Component'); + const link = screen.getByRole('link'); + expect(link).toHaveTextContent('ReactMarkdown'); expect(link).toHaveAttribute( 'href', 'https://github.com/rexxars/react-markdown' - ) - }) + ); + }); test('it remaps hashbang urls found in markdown input', () => { const input = - 'A link to the [create_dashboard](#!/Dashboard/create_dashboard) endpoint' - renderWithReduxProvider() - expect(screen.getByText(/A link to the/)).toBeInTheDocument() + 'A link to the [create_dashboard](#!/Dashboard/create_dashboard) endpoint'; + renderWithReduxProvider(); + expect(screen.getByText(/A link to the/)).toBeInTheDocument(); expect(screen.getByText('create_dashboard')).toHaveAttribute( 'href', - '/3.1/methods/Dashboard/create_dashboard' - ) - }) + '/4.0/methods/Dashboard/create_dashboard' + ); + }); test('it leaves external urls untouched', () => { renderWithReduxProvider( - ) + ); expect(screen.getByText('external_link')).toHaveAttribute( 'href', 'https://www.foo.com' - ) - }) + ); + }); test('it highlights text matching search pattern', () => { - const highlightPattern = 'spec' + const highlightPattern = 'spec'; const store = createTestStore({ settings: { searchPattern: highlightPattern }, - }) + }); renderWithReduxProvider( , store - ) - const mark = screen.getByText(highlightPattern) - expect(mark.tagName).toEqual('MARK') - }) + ); + const mark = screen.getByText(highlightPattern); + expect(mark.tagName).toEqual('MARK'); + }); test('it only highlights search matches in the display text of link', () => { - const highlightPattern = 'dashboard' + const highlightPattern = 'dashboard'; const store = createTestStore({ settings: { searchPattern: highlightPattern }, - }) + }); renderWithReduxProvider( , store - ) - const link = screen.getByRole('link') + ); + const link = screen.getByRole('link'); expect(link).toHaveAttribute( 'href', - '/3.1/methods/Dashboard/create_dashboard' - ) - expect(link).toContainHTML('create_dashboard') - }) + '/4.0/methods/Dashboard/create_dashboard' + ); + expect(link).toContainHTML('create_dashboard'); + }); test('it renders code blocks', () => { const code = - '```\nAuthorization: token 4QDkCyCtZzYgj4C2p2cj3csJH7zqS5RzKs2kTnG4\n```' - renderWithReduxProvider() + '```\nAuthorization: token 4QDkCyCtZzYgj4C2p2cj3csJH7zqS5RzKs2kTnG4\n```'; + renderWithReduxProvider(); expect( screen.getByText( 'Authorization: token 4QDkCyCtZzYgj4C2p2cj3csJH7zqS5RzKs2kTnG4' ) - ).toBeInTheDocument() - }) + ).toBeInTheDocument(); + }); test('it renders inline code', () => { - const markdown = 'Some text with code: `const noop = () => null`' - renderWithReduxProvider() - expect(screen.getByText('const noop = () => null')).toBeInTheDocument() - }) -}) + const markdown = 'Some text with code: `const noop = () => null`'; + renderWithReduxProvider(); + expect(screen.getByText('const noop = () => null')).toBeInTheDocument(); + }); +}); diff --git a/packages/api-explorer/src/components/DocMarkdown/DocMarkdown.tsx b/packages/api-explorer/src/components/DocMarkdown/DocMarkdown.tsx index 6d842fb1c..8e1752f1c 100644 --- a/packages/api-explorer/src/components/DocMarkdown/DocMarkdown.tsx +++ b/packages/api-explorer/src/components/DocMarkdown/DocMarkdown.tsx @@ -24,34 +24,34 @@ */ -import type { FC } from 'react' -import React from 'react' -import { Markdown } from '@looker/code-editor' -import { useSelector } from 'react-redux' -import { getEnvAdaptor } from '@looker/extension-utils' -import { selectSearchPattern } from '../../state' -import { useNavigation } from '../../utils' -import { transformURL } from './utils' +import type { FC } from 'react'; +import React from 'react'; +import { Markdown } from '@looker/code-editor'; +import { useSelector } from 'react-redux'; +import { getEnvAdaptor } from '@looker/extension-utils'; +import { selectSearchPattern } from '../../state'; +import { useNavigation } from '../../utils'; +import { transformURL } from './utils'; interface DocMarkdownProps { - source: string - specKey: string + source: string; + specKey: string; } export const DocMarkdown: FC = ({ source, specKey }) => { - const searchPattern = useSelector(selectSearchPattern) - const { navigate } = useNavigation() + const searchPattern = useSelector(selectSearchPattern); + const { navigate } = useNavigation(); const linkClickHandler = (pathname: string, url: string) => { if (pathname.startsWith(`/${specKey}`)) { - navigate(pathname) + navigate(pathname); } else if (url.startsWith(`/${specKey}`)) { - navigate(url) + navigate(url); } else if (url.startsWith('https://')) { - const adaptor = getEnvAdaptor() - adaptor.openBrowserWindow(url) + const adaptor = getEnvAdaptor(); + adaptor.openBrowserWindow(url); } - } + }; return ( = ({ source, specKey }) => { linkClickHandler={linkClickHandler} transformLinkUri={transformURL.bind(null, specKey)} /> - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/DocMarkdown/index.ts b/packages/api-explorer/src/components/DocMarkdown/index.ts index 925ff949d..be36911e1 100644 --- a/packages/api-explorer/src/components/DocMarkdown/index.ts +++ b/packages/api-explorer/src/components/DocMarkdown/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { DocMarkdown } from './DocMarkdown' +export { DocMarkdown } from './DocMarkdown'; diff --git a/packages/api-explorer/src/components/DocMarkdown/utils.spec.ts b/packages/api-explorer/src/components/DocMarkdown/utils.spec.ts index 0f2415b9b..e1e6f4931 100644 --- a/packages/api-explorer/src/components/DocMarkdown/utils.spec.ts +++ b/packages/api-explorer/src/components/DocMarkdown/utils.spec.ts @@ -23,49 +23,49 @@ SOFTWARE. */ -import { remapHashURL, transformURL } from './utils' +import { remapHashURL, transformURL } from './utils'; describe('DocMarkdown utils', () => { describe('hashbang url remapping', () => { - test.each(['#!/methodTag', '#!/3.1/methodTag'])( + test.each(['#!/methodTag', '#!/4.0/methodTag'])( 'it correctly maps %s tag urls', (url) => { - const result = remapHashURL('3.1', url) - expect(result).toEqual('/3.1/methods/methodTag') + const result = remapHashURL('4.0', url); + expect(result).toEqual('/4.0/methods/methodTag'); } - ) + ); - test.each(['#!/3.1/methodTag/methodName', '#!/methodTag/methodName'])( + test.each(['#!/4.0/methodTag/methodName', '#!/methodTag/methodName'])( 'it correctly maps %s method urls ', (hashbangUrl) => { - const result = remapHashURL('3.1', hashbangUrl) - expect(result).toEqual('/3.1/methods/methodTag/methodName') + const result = remapHashURL('4.0', hashbangUrl); + expect(result).toEqual('/4.0/methods/methodTag/methodName'); } - ) + ); test('external urls are left untouched', () => { - const url = 'https://foo.com' - const result = remapHashURL('3.1', url) - expect(result).toEqual(url) - }) - }) + const url = 'https://foo.com'; + const result = remapHashURL('4.0', url); + expect(result).toEqual(url); + }); + }); describe('url transforming', () => { test('removes mark tags and transforms url', () => { - const url = '#!/Dashboard/create_dashboard' - const result = transformURL('3.1', url) - expect(result).toEqual('/3.1/methods/Dashboard/create_dashboard') - }) + const url = '#!/Dashboard/create_dashboard'; + const result = transformURL('4.0', url); + expect(result).toEqual('/4.0/methods/Dashboard/create_dashboard'); + }); test('removes mark tags and transforms url', () => { - const url = 'https://docs.looker.com/r/api/authorization' - const result = transformURL('3.1', url) - expect(result).toEqual('https://docs.looker.com/r/api/authorization') - }) + const url = 'https://docs.looker.com/r/api/authorization'; + const result = transformURL('4.0', url); + expect(result).toEqual('https://docs.looker.com/r/api/authorization'); + }); test('removes escaped mark tags and transforms url', () => { const url = - 'https://docs.looker.com/r/api/%3Cmark%3Eauthorization%3Cmark%3E' - const result = transformURL('3.1', url) - expect(result).toEqual('https://docs.looker.com/r/api/authorization') - }) - }) -}) + 'https://docs.looker.com/r/api/%3Cmark%3Eauthorization%3Cmark%3E'; + const result = transformURL('4.0', url); + expect(result).toEqual('https://docs.looker.com/r/api/authorization'); + }); + }); +}); diff --git a/packages/api-explorer/src/components/DocMarkdown/utils.ts b/packages/api-explorer/src/components/DocMarkdown/utils.ts index c6f4791b6..432d38e15 100644 --- a/packages/api-explorer/src/components/DocMarkdown/utils.ts +++ b/packages/api-explorer/src/components/DocMarkdown/utils.ts @@ -34,7 +34,7 @@ const cleanURL = (url: string) => .replace(//gi, '') .replace(/<\/mark>/gi, '') .replace(/%3Cmark%3E/gi, '') - .replace(/%3C\/mark%3E/gi, '') + .replace(/%3C\/mark%3E/gi, ''); /** * Remaps tag/method a hashbang url to match the MethodScene route. @@ -47,7 +47,7 @@ export const remapHashURL = (specKey: string, url: string) => // #!/:navVersion?/:methodTag/:methodName .replace(/#!\/(:?\d+\.\d+\/)?(\w+)\/(\w+)/gi, `/${specKey}/methods/$2/$3`) // #!/:navVersion/:methodTag - .replace(/#!\/(:?\d+\.\d+\/)?(\w+)/gi, `/${specKey}/methods/$2`) + .replace(/#!\/(:?\d+\.\d+\/)?(\w+)/gi, `/${specKey}/methods/$2`); /** * Clean urls from mark tags and remap tag/method hashbang urls to match the MethodScene route @@ -56,5 +56,5 @@ export const remapHashURL = (specKey: string, url: string) => * Returns transformed url */ export const transformURL = (specKey: string, url: string) => { - return remapHashURL(specKey, cleanURL(url)) -} + return remapHashURL(specKey, cleanURL(url)); +}; diff --git a/packages/api-explorer/src/components/DocMethodSummary/DocMethodSummary.spec.tsx b/packages/api-explorer/src/components/DocMethodSummary/DocMethodSummary.spec.tsx index 55c1b3959..1a6a2d0b6 100644 --- a/packages/api-explorer/src/components/DocMethodSummary/DocMethodSummary.spec.tsx +++ b/packages/api-explorer/src/components/DocMethodSummary/DocMethodSummary.spec.tsx @@ -23,29 +23,30 @@ SOFTWARE. */ -import React from 'react' -import { renderWithTheme } from '@looker/components-test-utils' -import { screen, fireEvent, waitFor } from '@testing-library/react' +import React from 'react'; +import { renderWithTheme } from '@looker/components-test-utils'; +import { fireEvent, screen, waitFor } from '@testing-library/react'; -import { api } from '../../test-data' -import { DocMethodSummary } from './DocMethodSummary' +import { api } from '../../test-data'; +import { DocMethodSummary } from './DocMethodSummary'; describe('DocMethodSummary', () => { test('it renders a method summary', async () => { - const method = api.methods.run_inline_query - renderWithTheme() + const method = api.methods.run_inline_query; + renderWithTheme(); expect( screen.getByText(method.httpMethod.toLocaleUpperCase()) - ).toBeInTheDocument() - expect(screen.getByText(method.summary)).toBeInTheDocument() - expect(screen.getByText(method.endpoint)).toBeInTheDocument() + ).toBeInTheDocument(); + expect(screen.getByText(method.summary)).toBeInTheDocument(); + expect(screen.getByText(method.endpoint)).toBeInTheDocument(); await waitFor(() => { - const statusIcon = screen.getByLabelText('stable item') - fireEvent.mouseOver(statusIcon) + const statusIcon = screen.getByLabelText('stable item'); + // eslint-disable-next-line testing-library/no-wait-for-side-effects + fireEvent.mouseOver(statusIcon); expect(screen.getByRole('tooltip')).toHaveTextContent( 'This item is considered stable for this API version.' - ) - }) - expect(screen.getByText('db_query')).toBeInTheDocument() - }) -}) + ); + }); + expect(screen.getByText('db_query')).toBeInTheDocument(); + }); +}); diff --git a/packages/api-explorer/src/components/DocMethodSummary/DocMethodSummary.tsx b/packages/api-explorer/src/components/DocMethodSummary/DocMethodSummary.tsx index ced74f0d5..335d035db 100644 --- a/packages/api-explorer/src/components/DocMethodSummary/DocMethodSummary.tsx +++ b/packages/api-explorer/src/components/DocMethodSummary/DocMethodSummary.tsx @@ -23,16 +23,16 @@ SOFTWARE. */ -import type { FC } from 'react' -import React from 'react' -import { Card, CardContent, Flex, Space, Text } from '@looker/components' -import type { IMethod } from '@looker/sdk-codegen' -import { MethodBadge, RunItHeading } from '@looker/run-it' -import { DocActivityType, DocRateLimited } from '../../components' -import { DocSummaryStatus } from './DocSummaryStatus' +import type { FC } from 'react'; +import React from 'react'; +import { Card, CardContent, Flex, Space, Text } from '@looker/components'; +import type { IMethod } from '@looker/sdk-codegen'; +import { MethodBadge, RunItHeading } from '@looker/run-it'; +import { DocActivityType, DocRateLimited } from '../../components'; +import { DocSummaryStatus } from './DocSummaryStatus'; interface DocMethodSummaryProps { - method: IMethod + method: IMethod; } export const DocMethodSummary: FC = ({ method }) => ( @@ -60,4 +60,4 @@ export const DocMethodSummary: FC = ({ method }) => ( -) +); diff --git a/packages/api-explorer/src/components/DocMethodSummary/DocSummaryStatus.spec.tsx b/packages/api-explorer/src/components/DocMethodSummary/DocSummaryStatus.spec.tsx index 8fae44b14..a5235aa34 100644 --- a/packages/api-explorer/src/components/DocMethodSummary/DocSummaryStatus.spec.tsx +++ b/packages/api-explorer/src/components/DocMethodSummary/DocSummaryStatus.spec.tsx @@ -23,12 +23,12 @@ SOFTWARE. */ -import React from 'react' -import { renderWithTheme } from '@looker/components-test-utils' -import { screen, waitFor, fireEvent } from '@testing-library/react' +import React from 'react'; +import { renderWithTheme } from '@looker/components-test-utils'; +import { fireEvent, screen, waitFor } from '@testing-library/react'; -import { api, api40 } from '../../test-data' -import { DocSummaryStatus } from './DocSummaryStatus' +import { api, api40 } from '../../test-data'; +import { DocSummaryStatus } from './DocSummaryStatus'; describe('DocMethodSummaryStatus', () => { test.each` @@ -39,12 +39,12 @@ describe('DocMethodSummaryStatus', () => { `( 'it renders an icon with a tooltip containing the right content for $status endpoints', async ({ method, expectedLabel, expectedContent }) => { - renderWithTheme() - const icon = screen.getByLabelText(expectedLabel) - fireEvent.mouseOver(icon) + renderWithTheme(); + const icon = screen.getByLabelText(expectedLabel); + fireEvent.mouseOver(icon); await waitFor(() => { - expect(screen.getByRole('tooltip')).toHaveTextContent(expectedContent) - }) + expect(screen.getByRole('tooltip')).toHaveTextContent(expectedContent); + }); } - ) -}) + ); +}); diff --git a/packages/api-explorer/src/components/DocMethodSummary/DocSummaryStatus.tsx b/packages/api-explorer/src/components/DocMethodSummary/DocSummaryStatus.tsx index 1813b9584..cde927b23 100644 --- a/packages/api-explorer/src/components/DocMethodSummary/DocSummaryStatus.tsx +++ b/packages/api-explorer/src/components/DocMethodSummary/DocSummaryStatus.tsx @@ -23,16 +23,16 @@ SOFTWARE. */ -import type { FC } from 'react' -import React from 'react' -import { Tooltip } from '@looker/components' +import type { FC } from 'react'; +import React from 'react'; +import { Tooltip } from '@looker/components'; -import { pickStatus, pickTooltipContent } from './utils' +import { pickStatus, pickTooltipContent } from './utils'; interface DocSummaryStatusProps { - status: string + status: string; } export const DocSummaryStatus: FC = ({ status }) => ( {pickStatus(status)} -) +); diff --git a/packages/api-explorer/src/components/DocMethodSummary/index.tsx b/packages/api-explorer/src/components/DocMethodSummary/index.tsx index 2d44d804a..245009dfd 100644 --- a/packages/api-explorer/src/components/DocMethodSummary/index.tsx +++ b/packages/api-explorer/src/components/DocMethodSummary/index.tsx @@ -23,6 +23,6 @@ SOFTWARE. */ -export { DocMethodSummary } from './DocMethodSummary' -export { DocSummaryStatus } from './DocSummaryStatus' -export { pickTooltipContent } from './utils' +export { DocMethodSummary } from './DocMethodSummary'; +export { DocSummaryStatus } from './DocSummaryStatus'; +export { pickTooltipContent } from './utils'; diff --git a/packages/api-explorer/src/components/DocMethodSummary/utils.spec.tsx b/packages/api-explorer/src/components/DocMethodSummary/utils.spec.tsx index 8c7709c9f..81345a099 100644 --- a/packages/api-explorer/src/components/DocMethodSummary/utils.spec.tsx +++ b/packages/api-explorer/src/components/DocMethodSummary/utils.spec.tsx @@ -23,7 +23,7 @@ SOFTWARE. */ -import { pickTooltipContent } from './utils' +import { pickTooltipContent } from './utils'; describe('DocMethodSummary utils', () => { test.each` @@ -38,8 +38,8 @@ describe('DocMethodSummary utils', () => { `( 'pickTooltipContent returns correct $status item tooltip content', ({ status, expected }) => { - const actual = pickTooltipContent(status) - expect(actual).toEqual(expected) + const actual = pickTooltipContent(status); + expect(actual).toEqual(expected); } - ) -}) + ); +}); diff --git a/packages/api-explorer/src/components/DocMethodSummary/utils.tsx b/packages/api-explorer/src/components/DocMethodSummary/utils.tsx index e5e670049..d3b3a0567 100644 --- a/packages/api-explorer/src/components/DocMethodSummary/utils.tsx +++ b/packages/api-explorer/src/components/DocMethodSummary/utils.tsx @@ -23,34 +23,34 @@ SOFTWARE. */ -import React from 'react' -import styled from 'styled-components' -import { Icon, Status } from '@looker/components' -import { Beaker } from '@looker/icons' -import { VisibilityOff } from '@styled-icons/material/VisibilityOff' +import React from 'react'; +import styled from 'styled-components'; +import { Icon, Status } from '@looker/components'; +import { Beaker } from '@looker/icons'; +import { VisibilityOff } from '@styled-icons/material/VisibilityOff'; /** * Return a Status react element based on an endpoint's status * @param status Endpoint status */ export const pickStatus = (status: string) => { - const title = `${status.toLowerCase()} item` + const title = `${status.toLowerCase()} item`; switch (status.toLowerCase()) { case 'beta': - return β + return β; case 'experimental': { - return } /> + return } />; } case 'alpha': { - return } /> + return } />; } case 'undocumented': { - return } /> + return } />; } case 'deprecated': - return + return ; case 'stable': - return + return ; default: return ( { intent="neutral" size="small" /> - ) + ); } -} +}; /** * Returns tooltip content based on status @@ -69,21 +69,21 @@ export const pickStatus = (status: string) => { export const pickTooltipContent = (status: string) => { switch (status.toLowerCase()) { case 'alpha': - return 'This alpha item is either for internal use, or not fully developed and may be significantly changed or completely removed in future releases.' + return 'This alpha item is either for internal use, or not fully developed and may be significantly changed or completely removed in future releases.'; case 'beta': - return 'This beta item is under development and subject to change.' + return 'This beta item is under development and subject to change.'; case 'experimental': - return 'This experimental item is not fully developed and may be significantly changed or completely removed in future releases.' + return 'This experimental item is not fully developed and may be significantly changed or completely removed in future releases.'; case 'deprecated': - return 'This item has been deprecated and will be removed in the future.' + return 'This item has been deprecated and will be removed in the future.'; case 'stable': - return 'This item is considered stable for this API version.' + return 'This item is considered stable for this API version.'; case 'undocumented': - return 'This is an internal-only item.' + return 'This is an internal-only item.'; default: - return 'This item has no status associated with it.' + return 'This item has no status associated with it.'; } -} +}; const StatusBeta = styled.div` display: flex; @@ -93,4 +93,4 @@ const StatusBeta = styled.div` color: ${({ theme }) => theme.colors.neutral}; width: 1.125rem; height: 1.125rem; -` +`; diff --git a/packages/api-explorer/src/components/DocPseudo/DocParam.spec.tsx b/packages/api-explorer/src/components/DocPseudo/DocParam.spec.tsx index d334d22aa..6deee548c 100644 --- a/packages/api-explorer/src/components/DocPseudo/DocParam.spec.tsx +++ b/packages/api-explorer/src/components/DocPseudo/DocParam.spec.tsx @@ -23,37 +23,37 @@ SOFTWARE. */ -import React from 'react' -import { renderWithTheme } from '@looker/components-test-utils' -import { describeParam } from '@looker/sdk-codegen' -import { screen, waitFor, fireEvent } from '@testing-library/react' +import React from 'react'; +import { renderWithTheme } from '@looker/components-test-utils'; +import { describeParam } from '@looker/sdk-codegen'; +import { fireEvent, screen, waitFor } from '@testing-library/react'; -import { api } from '../../test-data' -import { DocParam } from './DocParam' +import { api } from '../../test-data'; +import { DocParam } from './DocParam'; describe('DocParam', () => { - const allParams = api.methods.run_look.allParams - const optionalParam = allParams.filter((val) => !val.required)[0] - const requiredParam = allParams.filter((val) => val.required)[0] + const allParams = api.methods.run_look.allParams; + const optionalParam = allParams.filter((val) => !val.required)[0]; + const requiredParam = allParams.filter((val) => val.required)[0]; test('it renders', () => { - renderWithTheme() - expect(screen.getByText(requiredParam.name)).toBeInTheDocument() - }) + renderWithTheme(); + expect(screen.getByText(requiredParam.name)).toBeInTheDocument(); + }); test('it renders required params with a tooltip', async () => { - renderWithTheme() - const arg = screen.getByText(requiredParam.name) - fireEvent.mouseOver(arg) + renderWithTheme(); + const arg = screen.getByText(requiredParam.name); + fireEvent.mouseOver(arg); await waitFor(() => { expect(screen.getByRole('tooltip')).toHaveTextContent( `${requiredParam.type.name} ${describeParam(requiredParam)}` - ) - }) - }) + ); + }); + }); test('optional params in square brackets', () => { - renderWithTheme() - expect(screen.getByText(`[${optionalParam.name}]`)).toBeInTheDocument() - }) -}) + renderWithTheme(); + expect(screen.getByText(`[${optionalParam.name}]`)).toBeInTheDocument(); + }); +}); diff --git a/packages/api-explorer/src/components/DocPseudo/DocParam.tsx b/packages/api-explorer/src/components/DocPseudo/DocParam.tsx index 6f361f485..131ec6a15 100644 --- a/packages/api-explorer/src/components/DocPseudo/DocParam.tsx +++ b/packages/api-explorer/src/components/DocPseudo/DocParam.tsx @@ -23,18 +23,18 @@ SOFTWARE. */ -import type { FC } from 'react' -import React from 'react' -import type { IParameter } from '@looker/sdk-codegen' -import { Tooltip } from '@looker/components' -import { describeParam } from '@looker/sdk-codegen' +import type { FC } from 'react'; +import React from 'react'; +import type { IParameter } from '@looker/sdk-codegen'; +import { Tooltip } from '@looker/components'; +import { describeParam } from '@looker/sdk-codegen'; export interface DocArgProps { - parameter: IParameter + parameter: IParameter; } export const DocParam: FC = ({ parameter }) => ( {parameter.required ? parameter.name : `[${parameter.name}]`} -) +); diff --git a/packages/api-explorer/src/components/DocPseudo/DocParams.spec.tsx b/packages/api-explorer/src/components/DocPseudo/DocParams.spec.tsx index 589ae9ab6..cc374e203 100644 --- a/packages/api-explorer/src/components/DocPseudo/DocParams.spec.tsx +++ b/packages/api-explorer/src/components/DocPseudo/DocParams.spec.tsx @@ -23,43 +23,43 @@ SOFTWARE. */ -import React from 'react' -import { screen } from '@testing-library/react' -import { renderWithTheme } from '@looker/components-test-utils' +import React from 'react'; +import { screen } from '@testing-library/react'; +import { renderWithTheme } from '@looker/components-test-utils'; -import { api } from '../../test-data' -import { DocParams } from './DocParams' +import { api } from '../../test-data'; +import { DocParams } from './DocParams'; describe('DocParams', () => { test('it works when method only has required params', () => { - const params = api.methods.create_connection.allParams - expect(params).toHaveLength(1) + const params = api.methods.create_connection.allParams; + expect(params).toHaveLength(1); // eslint-disable-next-line jest-dom/prefer-required - expect(params[0]).toHaveProperty('required', true) + expect(params[0]).toHaveProperty('required', true); - renderWithTheme() - expect(screen.getByText(params[0].name)).toBeInTheDocument() - }) + renderWithTheme(); + expect(screen.getByText(params[0].name)).toBeInTheDocument(); + }); test('it works when method only has optional params', () => { - const params = api.methods.me.allParams - expect(params).toHaveLength(1) + const params = api.methods.me.allParams; + expect(params).toHaveLength(1); // eslint-disable-next-line jest-dom/prefer-required - expect(params[0]).toHaveProperty('required', false) + expect(params[0]).toHaveProperty('required', false); - renderWithTheme() - expect(screen.getByText(`[${params[0].name}]`)).toBeInTheDocument() - }) + renderWithTheme(); + expect(screen.getByText(`[${params[0].name}]`)).toBeInTheDocument(); + }); test('it works when method has both required and optional params', () => { - const params = api.methods.user.allParams - const requiredParams = params.filter((param) => param.required) - const optionalParams = params.filter((param) => !param.required) - expect(requiredParams).toHaveLength(1) - expect(optionalParams).toHaveLength(1) + const params = api.methods.user.allParams; + const requiredParams = params.filter((param) => param.required); + const optionalParams = params.filter((param) => !param.required); + expect(requiredParams).toHaveLength(1); + expect(optionalParams).toHaveLength(1); - renderWithTheme() - expect(screen.getByText(requiredParams[0].name)).toBeInTheDocument() - expect(screen.getByText(`[${optionalParams[0].name}]`)).toBeInTheDocument() - }) -}) + renderWithTheme(); + expect(screen.getByText(requiredParams[0].name)).toBeInTheDocument(); + expect(screen.getByText(`[${optionalParams[0].name}]`)).toBeInTheDocument(); + }); +}); diff --git a/packages/api-explorer/src/components/DocPseudo/DocParams.tsx b/packages/api-explorer/src/components/DocPseudo/DocParams.tsx index ee56754ae..42c5853d6 100644 --- a/packages/api-explorer/src/components/DocPseudo/DocParams.tsx +++ b/packages/api-explorer/src/components/DocPseudo/DocParams.tsx @@ -23,14 +23,14 @@ SOFTWARE. */ -import type { IParameter } from '@looker/sdk-codegen' -import type { FC } from 'react' -import React, { Fragment } from 'react' +import type { IParameter } from '@looker/sdk-codegen'; +import type { FC } from 'react'; +import React, { Fragment } from 'react'; -import { DocParam } from './DocParam' +import { DocParam } from './DocParam'; export interface DocArgsProps { - parameters: IParameter[] + parameters: IParameter[]; } export const DocParams: FC = ({ parameters }) => ( @@ -42,4 +42,4 @@ export const DocParams: FC = ({ parameters }) => ( ))} -) +); diff --git a/packages/api-explorer/src/components/DocPseudo/DocPrimaryResponse.spec.tsx b/packages/api-explorer/src/components/DocPseudo/DocPrimaryResponse.spec.tsx index 23418cacf..af58eccf0 100644 --- a/packages/api-explorer/src/components/DocPseudo/DocPrimaryResponse.spec.tsx +++ b/packages/api-explorer/src/components/DocPseudo/DocPrimaryResponse.spec.tsx @@ -23,30 +23,30 @@ SOFTWARE. */ -import React from 'react' -import { renderWithTheme } from '@looker/components-test-utils' -import { screen, waitFor, fireEvent } from '@testing-library/react' +import React from 'react'; +import { renderWithTheme } from '@looker/components-test-utils'; +import { fireEvent, screen, waitFor } from '@testing-library/react'; -import { api } from '../../test-data' -import { DocPrimaryResponse } from './DocPrimaryResponse' +import { api } from '../../test-data'; +import { DocPrimaryResponse } from './DocPrimaryResponse'; describe('DocPrimaryResponse', () => { - const response = api.methods.create_query.primaryResponse + const response = api.methods.create_query.primaryResponse; test('it renders response type name', () => { - renderWithTheme() - expect(screen.getByText(response.type.name)).toBeInTheDocument() - }) + renderWithTheme(); + expect(screen.getByText(response.type.name)).toBeInTheDocument(); + }); test('it renders a tooltip on mouse over', async () => { - renderWithTheme() - const resp = screen.getByText(response.type.name) + renderWithTheme(); + const resp = screen.getByText(response.type.name); - fireEvent.mouseOver(resp) + fireEvent.mouseOver(resp); await waitFor(() => { expect(screen.getByRole('tooltip')).toHaveTextContent( `${response.description} ${response.mediaType}` - ) - }) - }) -}) + ); + }); + }); +}); diff --git a/packages/api-explorer/src/components/DocPseudo/DocPrimaryResponse.tsx b/packages/api-explorer/src/components/DocPseudo/DocPrimaryResponse.tsx index abaf00830..4abc85b44 100644 --- a/packages/api-explorer/src/components/DocPseudo/DocPrimaryResponse.tsx +++ b/packages/api-explorer/src/components/DocPseudo/DocPrimaryResponse.tsx @@ -23,13 +23,13 @@ SOFTWARE. */ -import type { IMethodResponse } from '@looker/sdk-codegen' -import type { FC } from 'react' -import React from 'react' -import { Tooltip } from '@looker/components' +import type { IMethodResponse } from '@looker/sdk-codegen'; +import type { FC } from 'react'; +import React from 'react'; +import { Tooltip } from '@looker/components'; export interface DocPrimaryResponseProps { - response: IMethodResponse + response: IMethodResponse; } export const DocPrimaryResponse: FC = ({ @@ -38,4 +38,4 @@ export const DocPrimaryResponse: FC = ({ {response.type.name} -) +); diff --git a/packages/api-explorer/src/components/DocPseudo/DocPseudo.spec.tsx b/packages/api-explorer/src/components/DocPseudo/DocPseudo.spec.tsx index 9217969f1..2e2a6e43d 100644 --- a/packages/api-explorer/src/components/DocPseudo/DocPseudo.spec.tsx +++ b/packages/api-explorer/src/components/DocPseudo/DocPseudo.spec.tsx @@ -23,26 +23,28 @@ SOFTWARE. */ -import React from 'react' -import { renderWithTheme } from '@looker/components-test-utils' -import { screen } from '@testing-library/react' +import React from 'react'; +import { renderWithTheme } from '@looker/components-test-utils'; +import { screen } from '@testing-library/react'; -import { api } from '../../test-data' -import { DocPseudo } from './DocPseudo' +import { api } from '../../test-data'; +import { DocPseudo } from './DocPseudo'; describe('DocPseudo', () => { - const method = api.methods.create_dashboard_filter + const method = api.methods.create_dashboard_filter; test('it renders', () => { - renderWithTheme() - expect(screen.getByText(method.name, { exact: false })).toBeInTheDocument() + renderWithTheme(); + expect(screen.getByText(method.name, { exact: false })).toBeInTheDocument(); method.params.forEach((param) => { - expect(screen.getByText(param.name, { exact: false })).toBeInTheDocument() - }) + expect( + screen.getByText(param.name, { exact: false }) + ).toBeInTheDocument(); + }); expect( screen.getByText(method.primaryResponse.type.name) - ).toBeInTheDocument() - }) -}) + ).toBeInTheDocument(); + }); +}); diff --git a/packages/api-explorer/src/components/DocPseudo/DocPseudo.tsx b/packages/api-explorer/src/components/DocPseudo/DocPseudo.tsx index ecb4be19f..919decfc3 100644 --- a/packages/api-explorer/src/components/DocPseudo/DocPseudo.tsx +++ b/packages/api-explorer/src/components/DocPseudo/DocPseudo.tsx @@ -24,21 +24,21 @@ */ -import type { FC } from 'react' -import React from 'react' -import { Code, Flex } from '@looker/components' -import type { IMethod } from '@looker/sdk-codegen' +import type { FC } from 'react'; +import React from 'react'; +import { Code, Flex } from '@looker/components'; +import type { IMethod } from '@looker/sdk-codegen'; -import { DocPrimaryResponse } from './DocPrimaryResponse' -import { DocParams } from './DocParams' +import { DocPrimaryResponse } from './DocPrimaryResponse'; +import { DocParams } from './DocParams'; export interface PseudoProps { - method: IMethod + method: IMethod; } export const DocPseudo: FC = ({ method }) => { - const args = method.allParams - const resType = method.primaryResponse + const args = method.allParams; + const resType = method.primaryResponse; return ( @@ -49,5 +49,5 @@ export const DocPseudo: FC = ({ method }) => { - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/DocPseudo/index.tsx b/packages/api-explorer/src/components/DocPseudo/index.tsx index 65304a90f..341bb17e6 100644 --- a/packages/api-explorer/src/components/DocPseudo/index.tsx +++ b/packages/api-explorer/src/components/DocPseudo/index.tsx @@ -23,4 +23,4 @@ SOFTWARE. */ -export { DocPseudo } from './DocPseudo' +export { DocPseudo } from './DocPseudo'; diff --git a/packages/api-explorer/src/components/DocRateLimited/DocRateLimited.spec.tsx b/packages/api-explorer/src/components/DocRateLimited/DocRateLimited.spec.tsx index 6ca000959..a3e38a159 100644 --- a/packages/api-explorer/src/components/DocRateLimited/DocRateLimited.spec.tsx +++ b/packages/api-explorer/src/components/DocRateLimited/DocRateLimited.spec.tsx @@ -23,28 +23,28 @@ SOFTWARE. */ -import React from 'react' -import { renderWithTheme } from '@looker/components-test-utils' -import { screen, fireEvent, waitFor } from '@testing-library/react' +import React from 'react'; +import { renderWithTheme } from '@looker/components-test-utils'; +import { fireEvent, screen, waitFor } from '@testing-library/react'; -import { api } from '../../test-data' -import { DocRateLimited } from './DocRateLimited' +import { api } from '../../test-data'; +import { DocRateLimited } from './DocRateLimited'; describe('DocRateLimited', () => { - const rateLimitedMethod = api.methods.test_connection + const rateLimitedMethod = api.methods.test_connection; test('it renders', () => { - renderWithTheme() - expect(screen.getByText('rate_limited')).toBeInTheDocument() - }) + renderWithTheme(); + expect(screen.getByText('rate_limited')).toBeInTheDocument(); + }); test('it displays a tooltip with the right information on hover', async () => { - renderWithTheme() - const badge = screen.getByText('rate_limited') - fireEvent.mouseOver(badge) + renderWithTheme(); + const badge = screen.getByText('rate_limited'); + fireEvent.mouseOver(badge); await waitFor(() => { expect(screen.getByRole('tooltip')).toHaveTextContent( 'This endpoint is rate limited.' - ) - }) - }) -}) + ); + }); + }); +}); diff --git a/packages/api-explorer/src/components/DocRateLimited/DocRateLimited.tsx b/packages/api-explorer/src/components/DocRateLimited/DocRateLimited.tsx index bee2a0560..1828eb30c 100644 --- a/packages/api-explorer/src/components/DocRateLimited/DocRateLimited.tsx +++ b/packages/api-explorer/src/components/DocRateLimited/DocRateLimited.tsx @@ -23,13 +23,13 @@ SOFTWARE. */ -import type { FC } from 'react' -import React from 'react' -import { Code, Tooltip } from '@looker/components' -import type { IMethod } from '@looker/sdk-codegen' +import type { FC } from 'react'; +import React from 'react'; +import { Code, Tooltip } from '@looker/components'; +import type { IMethod } from '@looker/sdk-codegen'; interface DocRateLimitedProps { - method: IMethod + method: IMethod; } export const DocRateLimited: FC = ({ method }) => ( <> @@ -41,4 +41,4 @@ export const DocRateLimited: FC = ({ method }) => ( )} -) +); diff --git a/packages/api-explorer/src/components/DocRateLimited/index.ts b/packages/api-explorer/src/components/DocRateLimited/index.ts index 4b421acb9..93ca6052a 100644 --- a/packages/api-explorer/src/components/DocRateLimited/index.ts +++ b/packages/api-explorer/src/components/DocRateLimited/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { DocRateLimited } from './DocRateLimited' +export { DocRateLimited } from './DocRateLimited'; diff --git a/packages/api-explorer/src/components/DocReferences/DocReferences.spec.tsx b/packages/api-explorer/src/components/DocReferences/DocReferences.spec.tsx index 373872e9f..88eb60fe3 100644 --- a/packages/api-explorer/src/components/DocReferences/DocReferences.spec.tsx +++ b/packages/api-explorer/src/components/DocReferences/DocReferences.spec.tsx @@ -23,70 +23,73 @@ SOFTWARE. */ -import React from 'react' -import { methodRefs, typeRefs } from '@looker/sdk-codegen' -import { screen } from '@testing-library/react' +import React from 'react'; +import { methodRefs, typeRefs } from '@looker/sdk-codegen'; +import { screen } from '@testing-library/react'; import { createTestStore, renderWithRouterAndReduxProvider, -} from '../../test-utils' -import { api } from '../../test-data' -import { buildPath } from '../../utils' -import { DocReferences } from './DocReferences' +} from '../../test-utils'; +import { api } from '../../test-data'; +import { buildPath } from '../../utils'; +import { DocReferences } from './DocReferences'; describe('DocReferences', () => { test('it renders method and type references', () => { - const typesUsed = typeRefs(api, api.types.DashboardElement.customTypes) - const typesUsedBy = typeRefs(api, api.types.DashboardElement.parentTypes) - const methodsUsedBy = methodRefs(api, api.types.DashboardElement.methodRefs) + const typesUsed = typeRefs(api, api.types.DashboardElement.customTypes); + const typesUsedBy = typeRefs(api, api.types.DashboardElement.parentTypes); + const methodsUsedBy = methodRefs( + api, + api.types.DashboardElement.methodRefs + ); renderWithRouterAndReduxProvider( - ) + ); expect(screen.getAllByRole('link')).toHaveLength( typesUsed.length + typesUsedBy.length + methodsUsedBy.length - ) + ); expect(screen.getByText(typesUsed[0].name).closest('a')).toHaveAttribute( 'href', - buildPath(api, typesUsed[0], '3.1') - ) + buildPath(api, typesUsed[0], '4.0') + ); - expect(typesUsedBy).toHaveLength(1) - expect(typesUsedBy[0].name).toEqual('Dashboard') + expect(typesUsedBy).toHaveLength(1); + expect(typesUsedBy[0].name).toEqual('Dashboard'); expect(screen.getByText(typesUsedBy[0].name).closest('a')).toHaveAttribute( 'href', - buildPath(api, typesUsedBy[0], '3.1') - ) + buildPath(api, typesUsedBy[0], '4.0') + ); expect( screen.getByText(methodsUsedBy[0].name).closest('a') - ).toHaveAttribute('href', buildPath(api, methodsUsedBy[0], '3.1')) - }) + ).toHaveAttribute('href', buildPath(api, methodsUsedBy[0], '4.0')); + }); test('it highlights text matching search pattern', () => { - const highlightPattern = 'dash' + const highlightPattern = 'dash'; const store = createTestStore({ settings: { searchPattern: highlightPattern }, - }) + }); renderWithRouterAndReduxProvider( , undefined, store - ) - const foundRef = screen.getByRole('link') - expect(foundRef).toContainHTML('Dashboard') + ); + const foundRef = screen.getByRole('link'); + expect(foundRef).toContainHTML('Dashboard'); expect(foundRef).toHaveAttribute( 'href', - buildPath(api, api.types.Dashboard, '3.1') - ) - }) -}) + buildPath(api, api.types.Dashboard, '4.0') + ); + }); +}); diff --git a/packages/api-explorer/src/components/DocReferences/DocReferences.tsx b/packages/api-explorer/src/components/DocReferences/DocReferences.tsx index 2d914e2d5..ede392783 100644 --- a/packages/api-explorer/src/components/DocReferences/DocReferences.tsx +++ b/packages/api-explorer/src/components/DocReferences/DocReferences.tsx @@ -24,21 +24,21 @@ */ -import type { FC } from 'react' -import React from 'react' -import type { ApiModel, IMethod, IType } from '@looker/sdk-codegen' -import { CollapserCard } from '@looker/run-it' +import type { FC } from 'react'; +import React from 'react'; +import type { ApiModel, IMethod, IType } from '@looker/sdk-codegen'; +import { CollapserCard } from '@looker/run-it'; -import { useSelector } from 'react-redux' -import { selectSearchPattern } from '../../state' -import { DocReferenceItems } from './utils' +import { useSelector } from 'react-redux'; +import { selectSearchPattern } from '../../state'; +import { DocReferenceItems } from './utils'; interface DocReferencesProps { - typesUsed: IType[] - methodsUsedBy?: IMethod[] - typesUsedBy?: IType[] - specKey: string - api: ApiModel + typesUsed: IType[]; + methodsUsedBy?: IMethod[]; + typesUsedBy?: IType[]; + specKey: string; + api: ApiModel; } /** @@ -51,14 +51,14 @@ export const DocReferences: FC = ({ methodsUsedBy = [], typesUsedBy = [], }) => { - const searchPattern = useSelector(selectSearchPattern) + const searchPattern = useSelector(selectSearchPattern); if ( typesUsed.length === 0 && methodsUsedBy.length === 0 && typesUsedBy.length === 0 ) - return <> + return <>; return ( @@ -86,5 +86,5 @@ export const DocReferences: FC = ({ )} - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/DocReferences/index.ts b/packages/api-explorer/src/components/DocReferences/index.ts index 53b356e2c..fd26246e4 100644 --- a/packages/api-explorer/src/components/DocReferences/index.ts +++ b/packages/api-explorer/src/components/DocReferences/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { DocReferences } from './DocReferences' +export { DocReferences } from './DocReferences'; diff --git a/packages/api-explorer/src/components/DocReferences/utils.spec.tsx b/packages/api-explorer/src/components/DocReferences/utils.spec.tsx index 007c1876d..5b7d7f147 100644 --- a/packages/api-explorer/src/components/DocReferences/utils.spec.tsx +++ b/packages/api-explorer/src/components/DocReferences/utils.spec.tsx @@ -25,5 +25,5 @@ */ describe('DocReferences utils', () => { - test.todo('') -}) + test.todo(''); +}); diff --git a/packages/api-explorer/src/components/DocReferences/utils.tsx b/packages/api-explorer/src/components/DocReferences/utils.tsx index 44d254665..5b0f6bd71 100644 --- a/packages/api-explorer/src/components/DocReferences/utils.tsx +++ b/packages/api-explorer/src/components/DocReferences/utils.tsx @@ -23,11 +23,11 @@ SOFTWARE. */ -import React from 'react' -import type { ApiModel, IMethod, IType } from '@looker/sdk-codegen' -import { Link } from 'react-router-dom' -import { RunItHeading } from '@looker/run-it' -import { buildPath, highlightHTML } from '../../utils' +import React from 'react'; +import type { ApiModel, IMethod, IType } from '@looker/sdk-codegen'; +import { Link } from 'react-router-dom'; +import { RunItHeading } from '@looker/run-it'; +import { buildPath, highlightHTML } from '../../utils'; /** * Renders a heading and links to all item types @@ -39,7 +39,7 @@ export const DocReferenceItems = ( specKey: string, pattern: string ) => { - if (items.length === 0) return <> + if (items.length === 0) return <>; return ( <> @@ -53,5 +53,5 @@ export const DocReferenceItems = ( ))} - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/DocSDKs/DocDeclarations.tsx b/packages/api-explorer/src/components/DocSDKs/DocDeclarations.tsx index f4e49dba5..3f0681597 100644 --- a/packages/api-explorer/src/components/DocSDKs/DocDeclarations.tsx +++ b/packages/api-explorer/src/components/DocSDKs/DocDeclarations.tsx @@ -23,14 +23,14 @@ SOFTWARE. */ -import React from 'react' -import { Tab2, Tabs2 } from '@looker/components' -import type { KeyedCollection } from '@looker/sdk-codegen' -import type { FC } from 'react' -import { DocCode } from '../DocCode' +import React from 'react'; +import { Tab2, Tabs2 } from '@looker/components'; +import type { KeyedCollection } from '@looker/sdk-codegen'; +import type { FC } from 'react'; +import { DocCode } from '../DocCode'; interface DocDeclarationsProps { - declarations: KeyedCollection + declarations: KeyedCollection; } /** @@ -45,4 +45,4 @@ export const DocDeclarations: FC = ({ declarations }) => ( ))} -) +); diff --git a/packages/api-explorer/src/components/DocSDKs/DocSDKs.spec.tsx b/packages/api-explorer/src/components/DocSDKs/DocSDKs.spec.tsx index e31115e11..31073b0ca 100644 --- a/packages/api-explorer/src/components/DocSDKs/DocSDKs.spec.tsx +++ b/packages/api-explorer/src/components/DocSDKs/DocSDKs.spec.tsx @@ -23,20 +23,20 @@ SOFTWARE. */ -import React from 'react' -import { screen } from '@testing-library/react' -import { codeGenerators } from '@looker/sdk-codegen' -import type { Store } from 'redux' +import React from 'react'; +import { screen } from '@testing-library/react'; +import { codeGenerators } from '@looker/sdk-codegen'; +import type { Store } from 'redux'; -import { api } from '../../test-data' -import { renderWithReduxProvider, createTestStore } from '../../test-utils' -import type { RootState } from '../../state' -import { DocSDKs } from './DocSDKs' +import { api } from '../../test-data'; +import { createTestStore, renderWithReduxProvider } from '../../test-utils'; +import type { RootState } from '../../state'; +import { DocSDKs } from './DocSDKs'; describe('DocSDKs', () => { - let store: Store - const supportedLanguages = codeGenerators.map((g) => g.language) - const pattern = new RegExp(`${supportedLanguages.join('|')}`) + let store: Store; + const supportedLanguages = codeGenerators.map((g) => g.language); + const pattern = new RegExp(`${supportedLanguages.join('|')}`); beforeAll(() => { store = createTestStore({ @@ -44,8 +44,8 @@ describe('DocSDKs', () => { initialized: false, sdkLanguage: 'All', }, - }) - }) + }); + }); test.each([ ['method', { method: api.methods.run_look }], @@ -53,14 +53,14 @@ describe('DocSDKs', () => { ])( 'it can render an SDK declaration for all supported languages', (_, props) => { - renderWithReduxProvider(, store) + renderWithReduxProvider(, store); expect( screen.getAllByRole('tab', { name: pattern, }) - ).toHaveLength(supportedLanguages.length) + ).toHaveLength(supportedLanguages.length); } - ) + ); test.each(supportedLanguages)( 'it can render a %s method declaration', @@ -70,15 +70,15 @@ describe('DocSDKs', () => { initialized: false, sdkLanguage: sdkLanguage, }, - }) + }); renderWithReduxProvider( , store - ) - expect(screen.queryByRole('tab')).not.toBeInTheDocument() + ); + expect(screen.queryByRole('tab')).not.toBeInTheDocument(); expect( screen.getByRole('heading', { name: `${sdkLanguage} Declaration` }) - ).toBeInTheDocument() + ).toBeInTheDocument(); } - ) -}) + ); +}); diff --git a/packages/api-explorer/src/components/DocSDKs/DocSDKs.tsx b/packages/api-explorer/src/components/DocSDKs/DocSDKs.tsx index 8b2670b93..90637179d 100644 --- a/packages/api-explorer/src/components/DocSDKs/DocSDKs.tsx +++ b/packages/api-explorer/src/components/DocSDKs/DocSDKs.tsx @@ -24,31 +24,31 @@ */ -import type { FC } from 'react' -import React, { useState, useEffect } from 'react' -import { useSelector } from 'react-redux' +import type { FC } from 'react'; +import React, { useEffect, useState } from 'react'; +import { useSelector } from 'react-redux'; import type { + ApiModel, + CodeGen, IMethod, IType, - ApiModel, KeyedCollection, - CodeGen, -} from '@looker/sdk-codegen' -import { CollapserCard, getGenerators } from '@looker/run-it' +} from '@looker/sdk-codegen'; +import { CollapserCard, getGenerators } from '@looker/run-it'; -import { DocCode } from '../DocCode' -import { selectSdkLanguage } from '../../state' -import { isMethod } from '../../utils/path' -import { noComment } from './utils' -import { DocDeclarations } from './DocDeclarations' +import { DocCode } from '../DocCode'; +import { selectSdkLanguage } from '../../state'; +import { isMethod } from '../../utils/path'; +import { noComment } from './utils'; +import { DocDeclarations } from './DocDeclarations'; interface LanguageSDKProps { /** API spec */ - api: ApiModel + api: ApiModel; /** An SDK method */ - method?: IMethod + method?: IMethod; /** An SDK type */ - type?: IType + type?: IType; } const getDeclarations = ( @@ -56,44 +56,44 @@ const getDeclarations = ( sdkLanguage: string, item: IMethod | IType ) => { - const declarations: KeyedCollection = {} + const declarations: KeyedCollection = {}; Object.entries(generators).forEach(([language, gen]) => { if (sdkLanguage === 'All' || language === sdkLanguage) { const code = isMethod(item) ? gen.declareMethod('', item as IMethod) - : gen.declareType('', item as IType) - declarations[language] = code + : gen.declareType('', item as IType); + declarations[language] = code; } - }) - return declarations -} + }); + return declarations; +}; /** * Given a method or a type, it renders its SDK declaration in all supported languages. */ export const DocSDKs: FC = ({ api, method, type }) => { - const sdkLanguage = useSelector(selectSdkLanguage) - const generators = getGenerators(api) - const [item, setItem] = useState(method ? noComment(method) : type!) + const sdkLanguage = useSelector(selectSdkLanguage); + const generators = getGenerators(api); + const [item, setItem] = useState(method ? noComment(method) : type!); const [declarations, setDeclarations] = useState( getDeclarations(generators, sdkLanguage, item) - ) - const [header, setHeader] = useState(`${sdkLanguage} Declaration`) + ); + const [header, setHeader] = useState(`${sdkLanguage} Declaration`); useEffect(() => { - setItem(method ? noComment(method) : type!) - }, [method, type]) + setItem(method ? noComment(method) : type!); + }, [method, type]); useEffect(() => { - const declarations = getDeclarations(generators, sdkLanguage, item) - setDeclarations(declarations) - const languages = Object.keys(declarations) + const declarations = getDeclarations(generators, sdkLanguage, item); + setDeclarations(declarations); + const languages = Object.keys(declarations); if (languages.length > 1) { - setHeader('Declarations') + setHeader('Declarations'); } else { - setHeader(`${languages[0]} Declaration`) + setHeader(`${languages[0]} Declaration`); } - }, [sdkLanguage, item]) + }, [sdkLanguage, item]); return ( @@ -106,5 +106,5 @@ export const DocSDKs: FC = ({ api, method, type }) => { /> )} - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/DocSDKs/index.ts b/packages/api-explorer/src/components/DocSDKs/index.ts index 9b042af08..4a5f1b5c3 100644 --- a/packages/api-explorer/src/components/DocSDKs/index.ts +++ b/packages/api-explorer/src/components/DocSDKs/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { DocSDKs } from './DocSDKs' +export { DocSDKs } from './DocSDKs'; diff --git a/packages/api-explorer/src/components/DocSDKs/utils.spec.ts b/packages/api-explorer/src/components/DocSDKs/utils.spec.ts index 222728f2c..c163166cb 100644 --- a/packages/api-explorer/src/components/DocSDKs/utils.spec.ts +++ b/packages/api-explorer/src/components/DocSDKs/utils.spec.ts @@ -23,14 +23,14 @@ SOFTWARE. */ -import { api } from '../../test-data' -import { noComment } from './utils' +import { api } from '../../test-data'; +import { noComment } from './utils'; describe('DocSDKs utils', () => { test('noComment removes method comments', () => { - const original = api.methods.query - expect(original.description).not.toHaveLength(0) - const actual = noComment(original) - expect(actual.description).toHaveLength(0) - }) -}) + const original = api.methods.query; + expect(original.description).not.toHaveLength(0); + const actual = noComment(original); + expect(actual.description).toHaveLength(0); + }); +}); diff --git a/packages/api-explorer/src/components/DocSDKs/utils.ts b/packages/api-explorer/src/components/DocSDKs/utils.ts index ce3a8a247..fa2564915 100644 --- a/packages/api-explorer/src/components/DocSDKs/utils.ts +++ b/packages/api-explorer/src/components/DocSDKs/utils.ts @@ -23,15 +23,15 @@ SOFTWARE. */ -import type { IMethod } from '@looker/sdk-codegen' -import clone from 'lodash/clone' +import type { IMethod } from '@looker/sdk-codegen'; +import clone from 'lodash/clone'; /** * Given a method create a copy and remove its description * @param method An SDK method */ export const noComment = (method: IMethod): IMethod => { - const copy = clone(method) - copy.description = '' - return copy -} + const copy = clone(method); + copy.description = ''; + return copy; +}; diff --git a/packages/api-explorer/src/components/DocSchema/DocSchema.tsx b/packages/api-explorer/src/components/DocSchema/DocSchema.tsx index 0cc1ae911..3e27bd60a 100644 --- a/packages/api-explorer/src/components/DocSchema/DocSchema.tsx +++ b/packages/api-explorer/src/components/DocSchema/DocSchema.tsx @@ -24,22 +24,22 @@ */ -import type { FC } from 'react' -import React from 'react' +import type { FC } from 'react'; +import React from 'react'; -import { CodeDisplay } from '@looker/code-editor' -import { CollapserCard } from '@looker/run-it' +import { CodeDisplay } from '@looker/code-editor'; +import { CollapserCard } from '@looker/run-it'; interface DocSchemaProps { - object: any + object: any; } /** * It renders links to the given types and/or methods references */ export const DocSchema: FC = ({ object }) => { - if (!object) return <> - const json = JSON.stringify(object, null, 2) + if (!object) return <>; + const json = JSON.stringify(object, null, 2); return ( = ({ object }) => { - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/DocSchema/index.ts b/packages/api-explorer/src/components/DocSchema/index.ts index da951ab76..002ff8e46 100644 --- a/packages/api-explorer/src/components/DocSchema/index.ts +++ b/packages/api-explorer/src/components/DocSchema/index.ts @@ -24,4 +24,4 @@ */ -export { DocSchema } from './DocSchema' +export { DocSchema } from './DocSchema'; diff --git a/packages/api-explorer/src/components/DocSdkUsage/DocSdkExampleCell.tsx b/packages/api-explorer/src/components/DocSdkUsage/DocSdkExampleCell.tsx index 898461967..d39291eab 100644 --- a/packages/api-explorer/src/components/DocSdkUsage/DocSdkExampleCell.tsx +++ b/packages/api-explorer/src/components/DocSdkUsage/DocSdkExampleCell.tsx @@ -23,11 +23,11 @@ SOFTWARE. */ -import type { FC, PropsWithChildren } from 'react' -import React from 'react' -import { DataTableCell, Span } from '@looker/components' +import type { FC, PropsWithChildren } from 'react'; +import React from 'react'; +import { DataTableCell, Span } from '@looker/components'; -import { getTableItemBottomBorder } from './utils' +import { getTableItemBottomBorder } from './utils'; export const DocSdkExampleCell: FC> = (props) => ( > = (props) => ( {props.children} -) +); diff --git a/packages/api-explorer/src/components/DocSdkUsage/DocSdkUsage.spec.tsx b/packages/api-explorer/src/components/DocSdkUsage/DocSdkUsage.spec.tsx index ebc828b88..8eed2c3ab 100644 --- a/packages/api-explorer/src/components/DocSdkUsage/DocSdkUsage.spec.tsx +++ b/packages/api-explorer/src/components/DocSdkUsage/DocSdkUsage.spec.tsx @@ -23,38 +23,38 @@ SOFTWARE. */ -import React from 'react' -import { screen } from '@testing-library/react' -import { findExampleLanguages } from '@looker/sdk-codegen' +import React from 'react'; +import { screen } from '@testing-library/react'; +import { findExampleLanguages } from '@looker/sdk-codegen'; -import { renderWithLode } from '../../test-utils' -import { api, examples } from '../../test-data' -import { DocSdkUsage } from './DocSdkUsage' +import { renderWithLode } from '../../test-utils'; +import { api, examples } from '../../test-data'; +import { DocSdkUsage } from './DocSdkUsage'; import { - prepareExampleDataTable, PER_PAGE_COUNT, - sortLanguagesByPreference, getFileNameFromPath, -} from './utils' + prepareExampleDataTable, + sortLanguagesByPreference, +} from './utils'; describe('DocSdkUsage', () => { test('it renders links to sdk examples', () => { - const method = api.methods.run_look - const languages = findExampleLanguages(examples, method.name) + const method = api.methods.run_look; + const languages = findExampleLanguages(examples, method.name); const { pageExamples } = prepareExampleDataTable( languages, examples, method.operationId, 1 - ) - renderWithLode(, examples) - expect(screen.getAllByRole('link')).toHaveLength(PER_PAGE_COUNT) + ); + renderWithLode(, examples); + expect(screen.getAllByRole('link')).toHaveLength(PER_PAGE_COUNT); expect( screen.getAllByText(pageExamples[0].filename)[0].closest('a') - ).toHaveAttribute('href', pageExamples[0].permalink) - }) -}) + ).toHaveAttribute('href', pageExamples[0].permalink); + }); +}); describe('DocSdkUsage utils', () => { test('preferred language examples come first', () => { @@ -63,12 +63,12 @@ describe('DocSdkUsage utils', () => { ['python', 'typescript', 'csharp'], 'typescript' ) - ).toEqual(['typescript', 'python', 'csharp']) - }) + ).toEqual(['typescript', 'python', 'csharp']); + }); test('can get filename from path', () => { expect( getFileNameFromPath('/sdk-codegen/packages/foo.py line 200') - ).toEqual('foo.py') - }) -}) + ).toEqual('foo.py'); + }); +}); diff --git a/packages/api-explorer/src/components/DocSdkUsage/DocSdkUsage.tsx b/packages/api-explorer/src/components/DocSdkUsage/DocSdkUsage.tsx index 1ad1fd199..4ac796f85 100644 --- a/packages/api-explorer/src/components/DocSdkUsage/DocSdkUsage.tsx +++ b/packages/api-explorer/src/components/DocSdkUsage/DocSdkUsage.tsx @@ -23,8 +23,8 @@ SOFTWARE. */ -import type { FC } from 'react' -import React, { useState, useEffect } from 'react' +import type { FC } from 'react'; +import React, { useEffect, useState } from 'react'; import { Box, Card, @@ -32,27 +32,27 @@ import { DataTableItem, Icon, Link, - Space, Pagination, -} from '@looker/components' -import type { IMethod } from '@looker/sdk-codegen' -import { findExampleLanguages } from '@looker/sdk-codegen' -import { CollapserCard } from '@looker/run-it' -import { InsertDriveFile } from '@styled-icons/material-outlined/InsertDriveFile' -import { useSelector } from 'react-redux' + Space, +} from '@looker/components'; +import type { IMethod } from '@looker/sdk-codegen'; +import { findExampleLanguages } from '@looker/sdk-codegen'; +import { CollapserCard } from '@looker/run-it'; +import { InsertDriveFile } from '@styled-icons/material-outlined/InsertDriveFile'; +import { useSelector } from 'react-redux'; -import { selectSdkLanguage, selectExamplesLode } from '../../state' +import { selectExamplesLode, selectSdkLanguage } from '../../state'; import { - exampleColumns, EMPTY_STRING, - prepareExampleDataTable, PER_PAGE_COUNT, + exampleColumns, + prepareExampleDataTable, sortLanguagesByPreference, -} from './utils' -import { DocSdkExampleCell } from './DocSdkExampleCell' +} from './utils'; +import { DocSdkExampleCell } from './DocSdkExampleCell'; interface DocSdkUsageProps { - method: IMethod + method: IMethod; } /** @@ -60,39 +60,40 @@ interface DocSdkUsageProps { * links to the source files */ export const DocSdkUsage: FC = ({ method }) => { - const examples = useSelector(selectExamplesLode) - const sdkLanguage = useSelector(selectSdkLanguage) - const [page, setPage] = useState(1) + const examples = useSelector(selectExamplesLode); + const sdkLanguage = useSelector(selectSdkLanguage); + const [page, setPage] = useState(1); useEffect(() => { - setPage(1) - }, [method]) + setPage(1); + }, [method]); - if (!examples) return <> - let languages = findExampleLanguages(examples, method.name) - if (languages.length === 0) return <> + if (!examples) return <>; + let languages = findExampleLanguages(examples, method.name); + if (languages.length === 0) return <>; - languages = sortLanguagesByPreference(languages, sdkLanguage) + languages = sortLanguagesByPreference(languages, sdkLanguage); const { pageExamples, pageLimit, paginate } = prepareExampleDataTable( languages, examples, method.operationId, page - ) + ); - if (pageExamples.length === 0) return <> + if (pageExamples.length === 0) return <>; return ( {pageExamples.map((exampleRow, i) => { - const isEmptyItem = exampleRow.filename === EMPTY_STRING + const isEmptyItem = exampleRow.filename === EMPTY_STRING; const isLastItem = - (i + 1) % PER_PAGE_COUNT === 0 || i + 1 === pageExamples.length - const nextItemEmpty = pageExamples[i + 1]?.filename === EMPTY_STRING - const hidden = isEmptyItem || isLastItem || nextItemEmpty + (i + 1) % PER_PAGE_COUNT === 0 || i + 1 === pageExamples.length; + const nextItemEmpty = + pageExamples[i + 1]?.filename === EMPTY_STRING; + const hidden = isEmptyItem || isLastItem || nextItemEmpty; return ( = ({ method }) => { {exampleRow.line} - ) + ); })} {paginate && ( @@ -135,12 +136,12 @@ export const DocSdkUsage: FC = ({ method }) => { current={page} pages={pageLimit} onChange={(nextPage) => { - setPage(nextPage) + setPage(nextPage); }} /> )} - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/DocSdkUsage/index.ts b/packages/api-explorer/src/components/DocSdkUsage/index.ts index 2f2faf5ff..af00d1b75 100644 --- a/packages/api-explorer/src/components/DocSdkUsage/index.ts +++ b/packages/api-explorer/src/components/DocSdkUsage/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { DocSdkUsage } from './DocSdkUsage' +export { DocSdkUsage } from './DocSdkUsage'; diff --git a/packages/api-explorer/src/components/DocSdkUsage/utils.ts b/packages/api-explorer/src/components/DocSdkUsage/utils.ts index 36a23162e..b1e7ead3c 100644 --- a/packages/api-explorer/src/components/DocSdkUsage/utils.ts +++ b/packages/api-explorer/src/components/DocSdkUsage/utils.ts @@ -24,14 +24,14 @@ */ -import type { IExampleMine } from '@looker/sdk-codegen' -import { findExamples } from '@looker/sdk-codegen' -import type { DataTableColumns } from '@looker/components' -import { theme } from '@looker/components' +import type { IExampleMine } from '@looker/sdk-codegen'; +import { findExamples } from '@looker/sdk-codegen'; +import type { DataTableColumns } from '@looker/components'; +import { theme } from '@looker/components'; -export const PER_PAGE_COUNT = 10 +export const PER_PAGE_COUNT = 10; -export const EMPTY_STRING = '' +export const EMPTY_STRING = ''; export const exampleColumns: DataTableColumns = [ { @@ -58,23 +58,23 @@ export const exampleColumns: DataTableColumns = [ type: 'number', size: 20, }, -] +]; export interface ExampleLinkTableRow { - filename: string - language: string - line: string - permalink: string - description: string + filename: string; + language: string; + line: string; + permalink: string; + description: string; } export interface DataTablePage { /** array of sdk examples for a given page */ - pageExamples: ExampleLinkTableRow[] + pageExamples: ExampleLinkTableRow[]; /** the page limit of the larger example set */ - pageLimit: number + pageLimit: number; /** flag for whether or not to paginate results */ - paginate: boolean + paginate: boolean; } /** @@ -83,10 +83,10 @@ export interface DataTablePage { * @returns file name */ export function getFileNameFromPath(path: string): string { - const lastForwardSlash = path.lastIndexOf('/') + const lastForwardSlash = path.lastIndexOf('/'); return lastForwardSlash === -1 ? path - : path.slice(lastForwardSlash + 1, path.indexOf(' ')) + : path.slice(lastForwardSlash + 1, path.indexOf(' ')); } /** @@ -107,7 +107,7 @@ export function prepareExampleDataTable( result: ExampleLinkTableRow[], language: string ) { - const languageExamples = findExamples(examples, language, operationId) + const languageExamples = findExamples(examples, language, operationId); return [ ...result, ...languageExamples.map((exampleLink) => { @@ -117,21 +117,20 @@ export function prepareExampleDataTable( language: language.toLowerCase(), permalink: exampleLink.permalink, description: exampleLink.description, - } + }; }), - ] - }, - []) + ]; + }, []); const pageExamples = tableExamples.filter( (example, index) => example && index + 1 > (currentPage - 1) * PER_PAGE_COUNT && index + 1 <= currentPage * PER_PAGE_COUNT - ) + ); - const pageLimit = Math.ceil(tableExamples.length / PER_PAGE_COUNT) - const paginate = tableExamples.length > PER_PAGE_COUNT + const pageLimit = Math.ceil(tableExamples.length / PER_PAGE_COUNT); + const paginate = tableExamples.length > PER_PAGE_COUNT; if (tableExamples.length > PER_PAGE_COUNT) { while (pageExamples.length !== PER_PAGE_COUNT) { @@ -141,10 +140,10 @@ export function prepareExampleDataTable( language: EMPTY_STRING, permalink: pageExamples.length.toString(), description: EMPTY_STRING, - }) + }); } } - return { pageExamples, pageLimit, paginate } + return { pageExamples, pageLimit, paginate }; } /** @@ -152,7 +151,7 @@ export function prepareExampleDataTable( * @param hide whether or not to hide bottom border */ export function getTableItemBottomBorder(hide: boolean): string { - return hide ? 'none' : `solid 1px ${theme.colors.ui2}` + return hide ? 'none' : `solid 1px ${theme.colors.ui2}`; } /** @@ -167,6 +166,6 @@ export function sortLanguagesByPreference( languages.some( (item, idx) => item === sdkLanguage && languages.unshift(languages.splice(idx, 1)[0]) - ) - return languages + ); + return languages; } diff --git a/packages/api-explorer/src/components/DocSource/DocSource.spec.tsx b/packages/api-explorer/src/components/DocSource/DocSource.spec.tsx index 6b440a496..56d1fbf05 100644 --- a/packages/api-explorer/src/components/DocSource/DocSource.spec.tsx +++ b/packages/api-explorer/src/components/DocSource/DocSource.spec.tsx @@ -23,14 +23,13 @@ SOFTWARE. */ -import React from 'react' -import { screen, waitFor } from '@testing-library/react' -import type { IDeclarationMine } from '@looker/sdk-codegen' -import { codeSearchLink } from '@looker/sdk-codegen' -import userEvent from '@testing-library/user-event' -import { api } from '../../test-data' -import { renderWithLode } from '../../test-utils' -import { DocSource } from './DocSource' +import React from 'react'; +import { fireEvent, screen } from '@testing-library/react'; +import type { IDeclarationMine } from '@looker/sdk-codegen'; +import { codeSearchLink } from '@looker/sdk-codegen'; +import { api } from '../../test-data'; +import { renderWithLode } from '../../test-utils'; +import { DocSource } from './DocSource'; describe('DocSource', () => { const examples = { @@ -56,10 +55,10 @@ describe('DocSource', () => { }, }, }, - } + }; - const method = api.methods.login - const type = api.types.Query + const method = api.methods.login; + const type = api.types.Query; const declarations: IDeclarationMine = { commitHash: '1546035fd531c14a1172c9ad5c5b70e5279c1980', @@ -76,43 +75,40 @@ describe('DocSource', () => { sourceFile: 'lib/looker/core/controllers/auth_controller.rb', }, }, - } + }; test('it renders a type declaration link', async () => { - renderWithLode(, examples, declarations) - const link = screen.getByRole('link') - const declaration = declarations.types.Query + renderWithLode(, examples, declarations); + const link = screen.getByRole('link'); + const declaration = declarations.types.Query; const expected = codeSearchLink( declarations.remoteOrigin, declarations.commitHash, declaration.sourceFile, declaration.line - ) - expect(link.closest('a')).toHaveAttribute('href', expected) - await waitFor(() => { - userEvent.hover(link) - expect(screen.getByRole('tooltip')).toHaveTextContent( - `${declaration.sourceFile}#L${declaration.line}` - ) - }) - }) + ); + expect(link.closest('a')).toHaveAttribute('href', expected); + fireEvent.mouseOver(link); + expect(screen.getByRole('tooltip')).toHaveTextContent( + `${declaration.sourceFile}#L${declaration.line}` + ); + }); test('it renders a method declaration link', async () => { - renderWithLode(, examples, declarations) - const link = screen.getByRole('link') - const declaration = declarations.methods['POST /login'] + renderWithLode(, examples, declarations); + const link = screen.getByRole('link'); + const declaration = declarations.methods['POST /login']; const expected = codeSearchLink( declarations.remoteOrigin, declarations.commitHash, declaration.sourceFile, declaration.line - ) - expect(link.closest('a')).toHaveAttribute('href', expected) - await waitFor(() => { - userEvent.hover(link) - expect(screen.getByRole('tooltip')).toHaveTextContent( - `${declaration.sourceFile}#L${declaration.line}` - ) - }) - }) -}) + ); + expect(link.closest('a')).toHaveAttribute('href', expected); + // await userEvent.hover(link); + fireEvent.mouseOver(link); + expect(screen.getByRole('tooltip')).toHaveTextContent( + `${declaration.sourceFile}#L${declaration.line}` + ); + }); +}); diff --git a/packages/api-explorer/src/components/DocSource/DocSource.tsx b/packages/api-explorer/src/components/DocSource/DocSource.tsx index 1d1d7e7d7..2ead49774 100644 --- a/packages/api-explorer/src/components/DocSource/DocSource.tsx +++ b/packages/api-explorer/src/components/DocSource/DocSource.tsx @@ -23,32 +23,32 @@ SOFTWARE. */ -import type { FC } from 'react' -import React from 'react' -import type { IMethod, IType } from '@looker/sdk-codegen' -import { codeSearchLink, findDeclaration } from '@looker/sdk-codegen' -import { Icon, Link, Tooltip } from '@looker/components' -import { IdeFileDocument } from '@looker/icons' -import { useSelector } from 'react-redux' +import type { FC } from 'react'; +import React from 'react'; +import type { IMethod, IType } from '@looker/sdk-codegen'; +import { codeSearchLink, findDeclaration } from '@looker/sdk-codegen'; +import { Icon, Link, Tooltip } from '@looker/components'; +import { IdeFileDocument } from '@looker/icons'; +import { useSelector } from 'react-redux'; -import { selectDeclarationsLode } from '../../state' +import { selectDeclarationsLode } from '../../state'; interface DocSourceProps { - method?: IMethod - type?: IType + method?: IMethod; + type?: IType; } export const DocSource: FC = ({ method, type }) => { - const declarations = useSelector(selectDeclarationsLode) - let sourceLink - let declaration + const declarations = useSelector(selectDeclarationsLode); + let sourceLink; + let declaration; if (declarations) { - ;({ declaration, link: sourceLink } = findDeclaration( + ({ declaration, link: sourceLink } = findDeclaration( declarations, method?.id, type?.name, codeSearchLink - )) + )); } return ( @@ -64,5 +64,5 @@ export const DocSource: FC = ({ method, type }) => { )} - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/DocSource/index.ts b/packages/api-explorer/src/components/DocSource/index.ts index cc0cf47c1..3647db918 100644 --- a/packages/api-explorer/src/components/DocSource/index.ts +++ b/packages/api-explorer/src/components/DocSource/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { DocSource } from './DocSource' +export { DocSource } from './DocSource'; diff --git a/packages/api-explorer/src/components/DocStatus/DocStatus.spec.tsx b/packages/api-explorer/src/components/DocStatus/DocStatus.spec.tsx index 6df5cbaf7..ed5ae7664 100644 --- a/packages/api-explorer/src/components/DocStatus/DocStatus.spec.tsx +++ b/packages/api-explorer/src/components/DocStatus/DocStatus.spec.tsx @@ -23,22 +23,22 @@ SOFTWARE. */ -import React from 'react' -import { renderWithTheme } from '@looker/components-test-utils' -import { screen, fireEvent, waitFor } from '@testing-library/react' +import React from 'react'; +import { renderWithTheme } from '@looker/components-test-utils'; +import { fireEvent, screen, waitFor } from '@testing-library/react'; -import { api40 } from '../../test-data' -import { DocStatus } from './DocStatus' +import { api40 } from '../../test-data'; +import { DocStatus } from './DocStatus'; describe('DocStatus', () => { test('it renders a badge with the status and a tooltip on hover', async () => { - renderWithTheme() - const badge = screen.getByText('BETA') - fireEvent.mouseOver(badge) + renderWithTheme(); + const badge = screen.getByText('BETA'); + fireEvent.mouseOver(badge); await waitFor(() => { expect(screen.getByRole('tooltip')).toHaveTextContent( 'This beta item is under development and subject to change.' - ) - }) - }) -}) + ); + }); + }); +}); diff --git a/packages/api-explorer/src/components/DocStatus/DocStatus.tsx b/packages/api-explorer/src/components/DocStatus/DocStatus.tsx index cb4cf2637..c7263cc69 100644 --- a/packages/api-explorer/src/components/DocStatus/DocStatus.tsx +++ b/packages/api-explorer/src/components/DocStatus/DocStatus.tsx @@ -23,16 +23,16 @@ SOFTWARE. */ -import type { FC } from 'react' -import React from 'react' -import { Tooltip } from '@looker/components' -import { MethodBadge } from '@looker/run-it' -import type { IMethod } from '@looker/sdk-codegen' +import type { FC } from 'react'; +import React from 'react'; +import { Tooltip } from '@looker/components'; +import { MethodBadge } from '@looker/run-it'; +import type { IMethod } from '@looker/sdk-codegen'; -import { pickTooltipContent } from '../DocMethodSummary' +import { pickTooltipContent } from '../DocMethodSummary'; interface DocStatusProps { - method: IMethod + method: IMethod; } /** @@ -44,4 +44,4 @@ export const DocStatus: FC = ({ method }) => ( {method.status.toLocaleUpperCase()} -) +); diff --git a/packages/api-explorer/src/components/DocStatus/index.ts b/packages/api-explorer/src/components/DocStatus/index.ts index 84362a39a..cce346504 100644 --- a/packages/api-explorer/src/components/DocStatus/index.ts +++ b/packages/api-explorer/src/components/DocStatus/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { DocStatus } from './DocStatus' +export { DocStatus } from './DocStatus'; diff --git a/packages/api-explorer/src/components/DocTitle/DocTitle.spec.tsx b/packages/api-explorer/src/components/DocTitle/DocTitle.spec.tsx index 8fc2b8e8d..9a2dacf25 100644 --- a/packages/api-explorer/src/components/DocTitle/DocTitle.spec.tsx +++ b/packages/api-explorer/src/components/DocTitle/DocTitle.spec.tsx @@ -24,15 +24,15 @@ */ -import React from 'react' -import { screen } from '@testing-library/react' -import { renderWithTheme } from '@looker/components-test-utils' +import React from 'react'; +import { screen } from '@testing-library/react'; +import { renderWithTheme } from '@looker/components-test-utils'; -import { DocTitle } from './DocTitle' +import { DocTitle } from './DocTitle'; test('DocTitle renders a heading with title prop content', () => { - const title = 'An API Explorer by Looker' - renderWithTheme({title}) - const heading = screen.getByRole('heading') - expect(heading).toHaveTextContent(title) -}) + const title = 'An API Explorer by Looker'; + renderWithTheme({title}); + const heading = screen.getByRole('heading'); + expect(heading).toHaveTextContent(title); +}); diff --git a/packages/api-explorer/src/components/DocTitle/DocTitle.tsx b/packages/api-explorer/src/components/DocTitle/DocTitle.tsx index 7d1ca27d2..83b3c0285 100644 --- a/packages/api-explorer/src/components/DocTitle/DocTitle.tsx +++ b/packages/api-explorer/src/components/DocTitle/DocTitle.tsx @@ -24,10 +24,10 @@ */ -import type { FC } from 'react' -import React from 'react' -import { RunItHeading } from '@looker/run-it' +import type { FC } from 'react'; +import React from 'react'; +import { RunItHeading } from '@looker/run-it'; export const DocTitle: FC = (props) => ( -) +); diff --git a/packages/api-explorer/src/components/DocTitle/index.ts b/packages/api-explorer/src/components/DocTitle/index.ts index bf88ca362..9494790b6 100644 --- a/packages/api-explorer/src/components/DocTitle/index.ts +++ b/packages/api-explorer/src/components/DocTitle/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { DocTitle } from './DocTitle' +export { DocTitle } from './DocTitle'; diff --git a/packages/api-explorer/src/components/DocTypeSummary/DocTypeSummary.spec.tsx b/packages/api-explorer/src/components/DocTypeSummary/DocTypeSummary.spec.tsx index ed2e1f786..55b9ce6eb 100644 --- a/packages/api-explorer/src/components/DocTypeSummary/DocTypeSummary.spec.tsx +++ b/packages/api-explorer/src/components/DocTypeSummary/DocTypeSummary.spec.tsx @@ -23,20 +23,20 @@ SOFTWARE. */ -import React from 'react' -import { renderWithTheme } from '@looker/components-test-utils' -import { screen } from '@testing-library/react' +import React from 'react'; +import { renderWithTheme } from '@looker/components-test-utils'; +import { screen } from '@testing-library/react'; -import { api } from '../../test-data' -import { DocTypeSummary } from './DocTypeSummary' +import { api } from '../../test-data'; +import { DocTypeSummary } from './DocTypeSummary'; describe('DocTypeSummary', () => { test('it renders a type summary', async () => { - const type = api.types.Dashboard - renderWithTheme() + const type = api.types.Dashboard; + renderWithTheme(); expect( screen.getByText(type.metaType.toString().toLocaleUpperCase()) - ).toBeInTheDocument() - expect(screen.getByText(type.jsonName)).toBeInTheDocument() - }) -}) + ).toBeInTheDocument(); + expect(screen.getByText(type.jsonName)).toBeInTheDocument(); + }); +}); diff --git a/packages/api-explorer/src/components/DocTypeSummary/DocTypeSummary.tsx b/packages/api-explorer/src/components/DocTypeSummary/DocTypeSummary.tsx index 1bc12d3aa..ea88e17b1 100644 --- a/packages/api-explorer/src/components/DocTypeSummary/DocTypeSummary.tsx +++ b/packages/api-explorer/src/components/DocTypeSummary/DocTypeSummary.tsx @@ -24,21 +24,21 @@ */ -import type { FC } from 'react' -import React from 'react' -import { Card, CardContent, Flex, Space } from '@looker/components' -import type { IType } from '@looker/sdk-codegen' -import { MethodBadge, RunItHeading } from '@looker/run-it' -import { DocSummaryStatus } from '../../components' +import type { FC } from 'react'; +import React from 'react'; +import { Card, CardContent, Flex, Space } from '@looker/components'; +import type { IType } from '@looker/sdk-codegen'; +import { MethodBadge, RunItHeading } from '@looker/run-it'; +import { DocSummaryStatus } from '../../components'; interface DocTypeSummaryProps { - type: IType + type: IType; } const typeDescription = (type: IType) => { - if (type.description) return type.description - return `${Object.entries(type.properties).length} properties` -} + if (type.description) return type.description; + return `${Object.entries(type.properties).length} properties`; +}; export const DocTypeSummary: FC = ({ type }) => ( @@ -61,4 +61,4 @@ export const DocTypeSummary: FC = ({ type }) => ( -) +); diff --git a/packages/api-explorer/src/components/DocTypeSummary/index.tsx b/packages/api-explorer/src/components/DocTypeSummary/index.tsx index 308f044b2..707e622e0 100644 --- a/packages/api-explorer/src/components/DocTypeSummary/index.tsx +++ b/packages/api-explorer/src/components/DocTypeSummary/index.tsx @@ -23,4 +23,4 @@ SOFTWARE. */ -export { DocTypeSummary } from './DocTypeSummary' +export { DocTypeSummary } from './DocTypeSummary'; diff --git a/packages/api-explorer/src/components/ErrorBoundary/ErrorBoundary.spec.tsx b/packages/api-explorer/src/components/ErrorBoundary/ErrorBoundary.spec.tsx index c6f063e61..cde300426 100644 --- a/packages/api-explorer/src/components/ErrorBoundary/ErrorBoundary.spec.tsx +++ b/packages/api-explorer/src/components/ErrorBoundary/ErrorBoundary.spec.tsx @@ -23,52 +23,52 @@ SOFTWARE. */ -import { renderWithTheme } from '@looker/components-test-utils' -import React from 'react' -import { screen } from '@testing-library/react' +import { renderWithTheme } from '@looker/components-test-utils'; +import React from 'react'; +import { screen } from '@testing-library/react'; -import { ErrorBoundary } from './ErrorBoundary' +import { ErrorBoundary } from './ErrorBoundary'; const ErrorComp = ({ text }: { text: string }) => { const terminateWithPrejudice = () => { - const badObj: any = {} - return badObj.a.b - } - return
{text + terminateWithPrejudice()}
-} + const badObj: any = {}; + return badObj.a.b; + }; + return
{text + terminateWithPrejudice()}
; +}; describe('ErrorBoundary', () => { - const header = 'Uh oh! Something went wrong!' - const actionMessage = 'Try refreshing the page to correct the problem.' - const childText = 'Sweet Child' + const header = 'Uh oh! Something went wrong!'; + const actionMessage = 'Try refreshing the page to correct the problem.'; + const childText = 'Sweet Child'; beforeEach(() => { - jest.spyOn(console, 'error').mockImplementation() - }) + jest.spyOn(console, 'error').mockImplementation(); + }); it('should render child component', () => { - const logError = jest.fn() + const logError = jest.fn(); renderWithTheme(
{childText}
- ) - expect(screen.queryByText(header)).not.toBeInTheDocument() - expect(screen.queryByText(actionMessage)).not.toBeInTheDocument() - expect(screen.getByText(childText)).toBeVisible() - expect(logError).not.toHaveBeenCalled() - }) + ); + expect(screen.queryByText(header)).not.toBeInTheDocument(); + expect(screen.queryByText(actionMessage)).not.toBeInTheDocument(); + expect(screen.getByText(childText)).toBeVisible(); + expect(logError).not.toHaveBeenCalled(); + }); it('should render error detail on error', () => { - const logError = jest.fn() + const logError = jest.fn(); renderWithTheme( - ) - expect(screen.queryByText(childText)).not.toBeInTheDocument() - expect(screen.getByText(header)).toBeVisible() - expect(screen.getByText(actionMessage)).toBeVisible() - expect(logError).toHaveBeenCalled() - }) -}) + ); + expect(screen.queryByText(childText)).not.toBeInTheDocument(); + expect(screen.getByText(header)).toBeVisible(); + expect(screen.getByText(actionMessage)).toBeVisible(); + expect(logError).toHaveBeenCalled(); + }); +}); diff --git a/packages/api-explorer/src/components/ErrorBoundary/ErrorBoundary.tsx b/packages/api-explorer/src/components/ErrorBoundary/ErrorBoundary.tsx index 7490e22e1..e701e784f 100644 --- a/packages/api-explorer/src/components/ErrorBoundary/ErrorBoundary.tsx +++ b/packages/api-explorer/src/components/ErrorBoundary/ErrorBoundary.tsx @@ -24,18 +24,18 @@ */ -import React, { Component } from 'react' -import type { ReactNode, ErrorInfo } from 'react' -import { SomethingWentWrong } from './components/SomethingWentWrong' +import React, { Component } from 'react'; +import type { ErrorInfo, ReactNode } from 'react'; +import { SomethingWentWrong } from './components/SomethingWentWrong'; interface ErrorBoundaryProps { - children: ReactNode - logError: (error: Error, componentStack: string) => void + children: ReactNode; + logError: (error: Error, componentStack: string) => void; } interface ErrorBoundaryState { - hasError: boolean - errorMessage: Error + hasError: boolean; + errorMessage: Error; } export class ErrorBoundary extends Component< @@ -43,30 +43,30 @@ export class ErrorBoundary extends Component< ErrorBoundaryState > { constructor(props: ErrorBoundaryProps) { - super(props) - this.state = { hasError: false, errorMessage: new Error('') } + super(props); + this.state = { hasError: false, errorMessage: new Error('') }; } static getDerivedStateFromError(error: Error) { - return { hasError: true, errorMessage: error } + return { hasError: true, errorMessage: error }; } componentDidCatch(error: Error, errorInfo: ErrorInfo) { - const { logError } = this.props - logError(error, errorInfo.componentStack) + const { logError } = this.props; + logError(error, errorInfo.componentStack); } render() { - const { hasError } = this.state - const { children } = this.props + const { hasError } = this.state; + const { children } = this.props; if (hasError) { return ( - ) + ); } - return children || <> + return children || <>; } } diff --git a/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/SomethingWentWrong.spec.tsx b/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/SomethingWentWrong.spec.tsx index 79a90c996..236236613 100644 --- a/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/SomethingWentWrong.spec.tsx +++ b/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/SomethingWentWrong.spec.tsx @@ -23,26 +23,26 @@ SOFTWARE. */ -import React from 'react' -import { renderWithTheme } from '@looker/components-test-utils' -import { screen } from '@testing-library/react' -import { SomethingWentWrong } from './SomethingWentWrong' +import React from 'react'; +import { renderWithTheme } from '@looker/components-test-utils'; +import { screen } from '@testing-library/react'; +import { SomethingWentWrong } from './SomethingWentWrong'; const getMockedComponent = (propOverrides = {}) => { const defaultProps = { header: '', actionMessage: '', altText: '', - } - const updatedProps = { ...defaultProps, ...propOverrides } - return -} + }; + const updatedProps = { ...defaultProps, ...propOverrides }; + return ; +}; describe('SomethingWentWrong', () => { it('Should render proper component with correct texts', () => { - const header = 'Uh oh something went wrong' - const actionMessage = 'User please do this action. It might help' - const altText = '500 error graphic' + const header = 'Uh oh something went wrong'; + const actionMessage = 'User please do this action. It might help'; + const altText = '500 error graphic'; renderWithTheme( getMockedComponent({ @@ -50,10 +50,10 @@ describe('SomethingWentWrong', () => { actionMessage, altText, }) - ) + ); - expect(screen.getByText(header)).toBeVisible() - expect(screen.getByText(actionMessage)).toBeVisible() - expect(screen.getByTitle(altText)).toBeInTheDocument() - }) -}) + expect(screen.getByText(header)).toBeVisible(); + expect(screen.getByText(actionMessage)).toBeVisible(); + expect(screen.getByTitle(altText)).toBeInTheDocument(); + }); +}); diff --git a/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/SomethingWentWrong.tsx b/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/SomethingWentWrong.tsx index bb98e5c11..02533a55a 100644 --- a/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/SomethingWentWrong.tsx +++ b/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/SomethingWentWrong.tsx @@ -23,15 +23,15 @@ SOFTWARE. */ -import React from 'react' -import { Box, Flex } from '@looker/components' -import styled from 'styled-components' -import { SomethingWentWrongGraphic } from './components' +import React from 'react'; +import { Box, Flex } from '@looker/components'; +import styled from 'styled-components'; +import { SomethingWentWrongGraphic } from './components'; export interface SomethingWentWrongProps { - header: string - actionMessage: string - altText?: string + header: string; + actionMessage: string; + altText?: string; } export const SomethingWentWrong: React.FC = ({ @@ -46,7 +46,7 @@ export const SomethingWentWrong: React.FC = ({ {actionMessage} -) +); const OuterFlex = styled(Flex)` width: 100%; @@ -54,7 +54,7 @@ const OuterFlex = styled(Flex)` justify-content: center; flex-direction: column; align-items: center; -` +`; const HeaderText = styled.h1` margin-top: ${(props) => props.theme.space.large}; @@ -63,7 +63,7 @@ const HeaderText = styled.h1` font-weight: ${(props) => props.theme.fontWeights.normal}; font-size: ${(props) => props.theme.fontSizes.xxxxlarge}; color: ${(props) => props.theme.colors.text5}; -` +`; const ActionMessage = styled.h3` margin-top: ${(props) => props.theme.space.small}; @@ -72,4 +72,4 @@ const ActionMessage = styled.h3` font-weight: ${(props) => props.theme.fontWeights.normal}; font-size: ${(props) => props.theme.fontSizes.large}; color: ${(props) => props.theme.colors.text3}; -` +`; diff --git a/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/SomethingWentWrongGraphic.tsx b/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/SomethingWentWrongGraphic.tsx index 80e6d76e8..cdbbc3d4b 100644 --- a/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/SomethingWentWrongGraphic.tsx +++ b/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/SomethingWentWrongGraphic.tsx @@ -23,10 +23,10 @@ SOFTWARE. */ -import React from 'react' +import React from 'react'; interface SomethingWentWrongGraphicProps { - altText?: string + altText?: string; } /** @@ -200,8 +200,8 @@ const SomethingWentWrongGraphicImage: React.FC< fill="#202124" /> -) +); export const SomethingWentWrongGraphic = React.memo( SomethingWentWrongGraphicImage -) +); diff --git a/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/index.ts b/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/index.ts index 7b36b736e..c3c7a3eb9 100644 --- a/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/index.ts +++ b/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/components/SomethingWentWrongGraphic/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { SomethingWentWrongGraphic } from './SomethingWentWrongGraphic' +export { SomethingWentWrongGraphic } from './SomethingWentWrongGraphic'; diff --git a/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/components/index.ts b/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/components/index.ts index 7b36b736e..c3c7a3eb9 100644 --- a/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/components/index.ts +++ b/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/components/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { SomethingWentWrongGraphic } from './SomethingWentWrongGraphic' +export { SomethingWentWrongGraphic } from './SomethingWentWrongGraphic'; diff --git a/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/index.ts b/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/index.ts index f6cab0247..b4d599396 100644 --- a/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/index.ts +++ b/packages/api-explorer/src/components/ErrorBoundary/components/SomethingWentWrong/index.ts @@ -23,5 +23,5 @@ SOFTWARE. */ -export { SomethingWentWrong } from './SomethingWentWrong' -export type { SomethingWentWrongProps } from './SomethingWentWrong' +export { SomethingWentWrong } from './SomethingWentWrong'; +export type { SomethingWentWrongProps } from './SomethingWentWrong'; diff --git a/packages/api-explorer/src/components/ErrorBoundary/index.ts b/packages/api-explorer/src/components/ErrorBoundary/index.ts index 31d096e19..d74be9705 100644 --- a/packages/api-explorer/src/components/ErrorBoundary/index.ts +++ b/packages/api-explorer/src/components/ErrorBoundary/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { ErrorBoundary } from './ErrorBoundary' +export { ErrorBoundary } from './ErrorBoundary'; diff --git a/packages/api-explorer/src/components/ExploreType/ExploreProperty.spec.tsx b/packages/api-explorer/src/components/ExploreType/ExploreProperty.spec.tsx index c025da7b4..763fab74e 100644 --- a/packages/api-explorer/src/components/ExploreType/ExploreProperty.spec.tsx +++ b/packages/api-explorer/src/components/ExploreType/ExploreProperty.spec.tsx @@ -24,89 +24,91 @@ */ -import React from 'react' -import { fireEvent, screen, waitFor } from '@testing-library/react' -import { IdeFileManifest } from '@looker/icons' -import { Toc } from '@styled-icons/material/Toc' -import { Tag } from '@styled-icons/material-rounded/Tag' +import React from 'react'; +import { fireEvent, screen, waitFor } from '@testing-library/react'; +import { IdeFileManifest } from '@looker/icons'; +import { Toc } from '@styled-icons/material/Toc'; +import { Tag } from '@styled-icons/material-rounded/Tag'; -import { api } from '../../test-data' -import { renderWithRouter } from '../../test-utils' -import { ExploreProperty, ExplorePropertyDetail, typeIcon } from '.' +import { api } from '../../test-data'; +import { renderWithRouter } from '../../test-utils'; +import { ExploreProperty, ExplorePropertyDetail, typeIcon } from '.'; describe('ExploreProperty', () => { - const type = api.types.CreateDashboardFilter + const type = api.types.CreateDashboardFilter; describe('ExplorePropertyDetail', () => { describe('CreateDashboardFilter', () => { test('Shows read-only property and description', async () => { - const property = type.properties.id - expect(property).toBeDefined() + const property = type.properties.id; + expect(property).toBeDefined(); renderWithRouter( - ) - expect(property.deprecated).toEqual(false) - expect(property.readOnly).toEqual(true) + ); + expect(property.deprecated).toEqual(false); + expect(property.readOnly).toEqual(true); // eslint-disable-next-line jest-dom/prefer-required - expect(property.required).toEqual(false) - expect(screen.getByText(property.description)).toBeInTheDocument() + expect(property.required).toEqual(false); + expect(screen.getByText(property.description)).toBeInTheDocument(); await waitFor(() => { - const statusIcon = screen.getByTitle('read-only property') - fireEvent.mouseOver(statusIcon) + const statusIcon = screen.getByTitle('read-only property'); + // eslint-disable-next-line testing-library/no-wait-for-side-effects + fireEvent.mouseOver(statusIcon); expect(screen.getByRole('tooltip')).toHaveTextContent( 'CreateDashboardFilter.id is read-only' - ) - }) - }) + ); + }); + }); test('Shows required property and description', async () => { - const property = type.properties.dashboard_id - expect(property).toBeDefined() + const property = type.properties.dashboard_id; + expect(property).toBeDefined(); renderWithRouter( - ) - expect(property.deprecated).toEqual(false) - expect(property.readOnly).toEqual(false) + ); + expect(property.deprecated).toEqual(false); + expect(property.readOnly).toEqual(false); // eslint-disable-next-line jest-dom/prefer-required - expect(property.required).toEqual(true) - expect(screen.getByText(property.description)).toBeInTheDocument() + expect(property.required).toEqual(true); + expect(screen.getByText(property.description)).toBeInTheDocument(); await waitFor(() => { - const statusIcon = screen.getByTitle('required property') - fireEvent.mouseOver(statusIcon) + const statusIcon = screen.getByTitle('required property'); + // eslint-disable-next-line testing-library/no-wait-for-side-effects + fireEvent.mouseOver(statusIcon); expect(screen.getByRole('tooltip')).toHaveTextContent( 'CreateDashboardFilter.dashboard_id is required' - ) - }) - }) - }) - }) + ); + }); + }); + }); + }); describe('property icons', () => { test('int64 property icon is correct', () => { - const property = type.properties.row - expect(property.type.jsonName).toEqual('int64') - renderWithRouter() - expect(screen.getByTitle('int64')).toBeInTheDocument() - const legend = typeIcon(property.type) - expect(legend).toEqual({ icon: , title: 'int64' }) - }) + const property = type.properties.row; + expect(property.type.jsonName).toEqual('int64'); + renderWithRouter(); + expect(screen.getByTitle('int64')).toBeInTheDocument(); + const legend = typeIcon(property.type); + expect(legend).toEqual({ icon: , title: 'int64' }); + }); test('array property icon is correct', () => { - const property = type.properties.listens_to_filters - expect(property.type.jsonName).toEqual('string[]') - renderWithRouter() - expect(screen.getByTitle(property.type.jsonName)).toBeInTheDocument() - const legend = typeIcon(property.type) - expect(legend).toEqual({ icon: , title: 'string[]' }) - }) + const property = type.properties.listens_to_filters; + expect(property.type.jsonName).toEqual('string[]'); + renderWithRouter(); + expect(screen.getByTitle(property.type.jsonName)).toBeInTheDocument(); + const legend = typeIcon(property.type); + expect(legend).toEqual({ icon: , title: 'string[]' }); + }); test('hash property icon is correct', () => { - const property = type.properties.field - expect(property.type.jsonName).toEqual('Hash[any]') - renderWithRouter() - expect(screen.getByTitle(property.type.jsonName)).toBeInTheDocument() - const legend = typeIcon(property.type) - expect(legend).toEqual({ icon: , title: 'Hash[any]' }) - }) - }) -}) + const property = type.properties.field; + expect(property.type.jsonName).toEqual('Hash[any]'); + renderWithRouter(); + expect(screen.getByTitle(property.type.jsonName)).toBeInTheDocument(); + const legend = typeIcon(property.type); + expect(legend).toEqual({ icon: , title: 'Hash[any]' }); + }); + }); +}); diff --git a/packages/api-explorer/src/components/ExploreType/ExploreProperty.tsx b/packages/api-explorer/src/components/ExploreType/ExploreProperty.tsx index 8cb6fcc83..893714c88 100644 --- a/packages/api-explorer/src/components/ExploreType/ExploreProperty.tsx +++ b/packages/api-explorer/src/components/ExploreType/ExploreProperty.tsx @@ -24,36 +24,36 @@ */ -import type { FC } from 'react' -import React from 'react' -import type { IconType } from '@looker/components' +import type { FC } from 'react'; +import React from 'react'; +import type { IconType } from '@looker/components'; import { Box, Icon, + Paragraph, + Space, + Tooltip, Tree, TreeItem, - Tooltip, - Space, - Paragraph, -} from '@looker/components' -import { Done } from '@styled-icons/material/Done' -import { Lock } from '@styled-icons/material/Lock' -import { Remove } from '@styled-icons/material/Remove' -import type { IProperty, ApiModel } from '@looker/sdk-codegen' -import { Markdown } from '@looker/code-editor' +} from '@looker/components'; +import { Done } from '@styled-icons/material/Done'; +import { Lock } from '@styled-icons/material/Lock'; +import { Remove } from '@styled-icons/material/Remove'; +import type { ApiModel, IProperty } from '@looker/sdk-codegen'; +import { Markdown } from '@looker/code-editor'; import { - expandable, ExploreTypeLink, + expandable, pickType, pickTypeProps, typeIcon, -} from '.' +} from '.'; interface TipIconProps { - show: boolean - tip: string - icon: IconType - title: string + show: boolean; + tip: string; + icon: IconType; + title: string; } /** @@ -65,26 +65,26 @@ interface TipIconProps { * @constructor */ export const TipIcon: FC = ({ show, tip, icon, title }) => { - if (!show) return <> + if (!show) return <>; return ( - ) -} + ); +}; /** * Interface shared by several ExploreProperty components */ interface ExplorePropertyProps { /** property to explore */ - property: IProperty + property: IProperty; /** the current level of the hierarchy */ - level?: number + level?: number; /** the maximum depth to expanded nested types. -1 = all (default), 0 = no expansion */ - maxDepth?: number + maxDepth?: number; /** open all nodes immediately? */ - openAll?: boolean + openAll?: boolean; } /** @@ -95,7 +95,7 @@ interface ExplorePropertyProps { export const ExplorePropertyRequired: FC = ({ property, }) => { - const tip = `${property.fullName} is required` + const tip = `${property.fullName} is required`; return ( = ({ tip={tip} title="required property" /> - ) -} + ); +}; /** * Show deprecated status if a property is deprecated @@ -114,7 +114,7 @@ export const ExplorePropertyRequired: FC = ({ export const ExplorePropertyDeprecated: FC = ({ property, }) => { - const tip = `${property.fullName} is deprecated` + const tip = `${property.fullName} is deprecated`; return ( = ({ tip={tip} title="deprecated property" /> - ) -} + ); +}; /** * Show read-only status if a property is read-only @@ -133,7 +133,7 @@ export const ExplorePropertyDeprecated: FC = ({ export const ExplorePropertyReadOnly: FC = ({ property, }) => { - const tip = `${property.fullName} is read-only` + const tip = `${property.fullName} is read-only`; return ( = ({ tip={tip} title="read-only property" /> - ) -} + ); +}; /** * Display the property description if it's assigned @@ -151,7 +151,7 @@ export const ExplorePropertyReadOnly: FC = ({ */ const DescriptionParagraph: FC = (props) => ( -) +); const ExplorePropertyDescription: FC = ({ property }) => property.description ? ( @@ -159,11 +159,11 @@ const ExplorePropertyDescription: FC = ({ property }) => source={property.description} paragraphOverride={DescriptionParagraph} /> - ) : null + ) : null; interface ExploreApiPropertyProps extends ExplorePropertyProps { /** parsed api */ - api: ApiModel + api: ApiModel; } /** @@ -188,7 +188,7 @@ export const ExplorePropertyDetail: FC = ({ -) +); /** * Render a potentially complex property as a non-expanding node @@ -199,7 +199,7 @@ export const ExplorePropertyNode: FC = ({ property, api, }) => { - const legend = typeIcon(property.type) + const legend = typeIcon(property.type); return ( = ({ > {property.jsonName} - ) -} + ); +}; /** * Render the Tree or TreeItem for this property @@ -225,7 +225,7 @@ export const ExploreProperty: FC = ({ maxDepth = -1, openAll = false, }) => { - const picked = pickType(property.type) + const picked = pickType(property.type); if (!picked.intrinsic) { return ( = ({ maxDepth={maxDepth} openAll={openAll} /> - ) + ); } - return -} + return ; +}; interface ExplorePropertyTypeProps extends ExploreApiPropertyProps { /** Open the node display immediately? */ - open?: boolean + open?: boolean; } export const ExplorePropertyType: FC = ({ @@ -254,12 +254,12 @@ export const ExplorePropertyType: FC = ({ maxDepth = -1, openAll = false, }) => { - const type = property.type - const props = pickTypeProps(type) - const nest = expandable(level, maxDepth) - const legend = typeIcon(type) + const type = property.type; + const props = pickTypeProps(type); + const nest = expandable(level, maxDepth); + const legend = typeIcon(type); if (!nest) { - return + return ; } return ( = ({ /> ))} - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/ExploreType/ExploreType.spec.tsx b/packages/api-explorer/src/components/ExploreType/ExploreType.spec.tsx index c9e2d8779..b6ce66aa6 100644 --- a/packages/api-explorer/src/components/ExploreType/ExploreType.spec.tsx +++ b/packages/api-explorer/src/components/ExploreType/ExploreType.spec.tsx @@ -24,81 +24,71 @@ */ -import React from 'react' -import { screen } from '@testing-library/react' +import React from 'react'; +import { screen } from '@testing-library/react'; -import { api } from '../../test-data' -import { renderWithRouter } from '../../test-utils' -import { ExploreType, ExploreTypeLink } from '.' +import { api } from '../../test-data'; +import { renderWithRouter } from '../../test-utils'; +import { ExploreType, ExploreTypeLink } from '.'; describe('ExploreType', () => { - const targetType = api.types.ColorCollection - const colors = 'colors' - const colorsExpected = 1 - const stops = 'stops' - const stopsExpected = 2 - const offset = 'offset' - const offsetExpected = 2 + const targetType = api.types.ColorCollection; + const colors = 'colors'; + const colorsExpected = 1; + const stops = 'stops'; + const stopsExpected = 2; + const offset = 'offset'; + const offsetExpected = 2; test('expands all when openAll is true and expand defaults', () => { - renderWithRouter() + renderWithRouter( + + ); - expect(screen.getByText(targetType.jsonName)).toBeInTheDocument() - expect(screen.queryAllByText(colors)).toHaveLength(colorsExpected) - expect(screen.queryAllByText(stops)).toHaveLength(stopsExpected) - expect(screen.queryAllByText(offset)).toHaveLength(offsetExpected) - }) + expect(screen.getByText(targetType.jsonName)).toBeInTheDocument(); + expect(screen.queryAllByText(colors)).toHaveLength(colorsExpected); + expect(screen.queryAllByText(stops)).toHaveLength(stopsExpected); + expect(screen.queryAllByText(offset)).toHaveLength(offsetExpected); + }); test('expands nothing if maxDepth is 0', () => { renderWithRouter( - ) + ); - expect(screen.getByText(targetType.jsonName)).toBeInTheDocument() + expect(screen.getByText(targetType.jsonName)).toBeInTheDocument(); // eslint-disable-next-line jest-dom/prefer-in-document - expect(screen.queryAllByText(colors)).toHaveLength(0) + expect(screen.queryAllByText(colors)).toHaveLength(0); // eslint-disable-next-line jest-dom/prefer-in-document - expect(screen.queryAllByText(stops)).toHaveLength(0) + expect(screen.queryAllByText(stops)).toHaveLength(0); // eslint-disable-next-line jest-dom/prefer-in-document - expect(screen.queryAllByText(offset)).toHaveLength(0) - }) + expect(screen.queryAllByText(offset)).toHaveLength(0); + }); test('expands 2 levels only', () => { renderWithRouter( - ) + ); - expect(screen.getByText(targetType.jsonName)).toBeInTheDocument() - expect(screen.queryAllByText(colors)).toHaveLength(colorsExpected) - expect(screen.queryAllByText(stops)).toHaveLength(stopsExpected) + expect(screen.getByText(targetType.jsonName)).toBeInTheDocument(); + expect(screen.queryAllByText(colors)).toHaveLength(colorsExpected); + expect(screen.queryAllByText(stops)).toHaveLength(stopsExpected); // eslint-disable-next-line jest-dom/prefer-in-document - expect(screen.queryAllByText(offset)).toHaveLength(0) - }) + expect(screen.queryAllByText(offset)).toHaveLength(0); + }); describe('ExploreTypeLink', () => { - test('recognizes 3.1', () => { - const specKey = '3.1' - const path = `/${specKey}/methods/foo` - renderWithRouter(, [path]) - - const actual = screen.getByText(targetType.jsonName) - expect(actual).toBeInTheDocument() - expect(actual).toHaveProperty( - 'href', - `http://localhost/${specKey}/types/ColorCollection/${targetType.jsonName}` - ) - }) test('recognizes 4.0', () => { - const specKey = '4.0' - const path = `/${specKey}/methods/foo` - renderWithRouter(, [path]) + const specKey = '4.0'; + const path = `/${specKey}/methods/foo`; + renderWithRouter(, [path]); - const actual = screen.getByText(targetType.jsonName) - expect(actual).toBeInTheDocument() + const actual = screen.getByText(targetType.jsonName); + expect(actual).toBeInTheDocument(); expect(actual).toHaveProperty( 'href', `http://localhost/${specKey}/types/ColorCollection/${targetType.jsonName}` - ) - }) - }) -}) + ); + }); + }); +}); diff --git a/packages/api-explorer/src/components/ExploreType/ExploreType.tsx b/packages/api-explorer/src/components/ExploreType/ExploreType.tsx index 90c87997a..1dff2a3ba 100644 --- a/packages/api-explorer/src/components/ExploreType/ExploreType.tsx +++ b/packages/api-explorer/src/components/ExploreType/ExploreType.tsx @@ -24,15 +24,15 @@ */ -import type { FC } from 'react' -import React from 'react' -import { Code, Tree, TreeItem } from '@looker/components' -import type { IType, ApiModel } from '@looker/sdk-codegen' -import { TypeOfType, typeOfType } from '@looker/sdk-codegen' -import { useRouteMatch } from 'react-router-dom' +import type { FC } from 'react'; +import React from 'react'; +import { Code, Tree, TreeItem } from '@looker/components'; +import type { ApiModel, IType } from '@looker/sdk-codegen'; +import { TypeOfType, typeOfType } from '@looker/sdk-codegen'; +import { useRouteMatch } from 'react-router-dom'; -import { Link } from '../Link' -import { buildPath } from '../../utils' +import { Link } from '../Link'; +import { buildPath } from '../../utils'; import { ExploreProperty, pickType, @@ -40,23 +40,23 @@ import { typeIcon, typeLinkPrefix, typeLinkSuffix, -} from '.' +} from '.'; interface ExploreTypeLinkProps { - type: IType - api: ApiModel + type: IType; + api: ApiModel; } export const ExploreTypeLink: FC = ({ type, api }) => { - const match = useRouteMatch<{ specKey: string }>('/:specKey') - const specKey = match?.params.specKey - const picked = pickType(type) - const name = picked.name - const prefix = typeLinkPrefix(type) - const suffix = typeLinkSuffix(type) - const typed = typeOfType(picked) + const match = useRouteMatch<{ specKey: string }>('/:specKey'); + const specKey = match?.params.specKey; + const picked = pickType(type); + const name = picked.name; + const prefix = typeLinkPrefix(type); + const suffix = typeLinkSuffix(type); + const typed = typeOfType(picked); if (typed === TypeOfType.Intrinsic) - return {type.jsonName} + return {type.jsonName}; return ( <> {prefix} @@ -65,24 +65,24 @@ export const ExploreTypeLink: FC = ({ type, api }) => { {suffix} - ) -} + ); +}; interface ExploreTypeProps { /** Type to explore */ - type: IType + type: IType; /** parsed specification */ - api: ApiModel + api: ApiModel; /** Open the node display immediately */ - open?: boolean + open?: boolean; /** Create a link to the type? */ - link?: boolean + link?: boolean; /** the nesting level of the type */ - level?: number + level?: number; /** the maximum depth to expanded nested types. -1 = all (default), 0 = no expansion */ - maxDepth?: number + maxDepth?: number; /** open all nodes immediately? */ - openAll?: boolean + openAll?: boolean; } export const ExploreType: FC = ({ @@ -94,9 +94,9 @@ export const ExploreType: FC = ({ maxDepth = -1, openAll = false, }) => { - const props = pickTypeProps(type) - const nest = maxDepth === -1 || level < maxDepth - const legend = typeIcon(type) + const props = pickTypeProps(type); + const nest = maxDepth === -1 || level < maxDepth; + const legend = typeIcon(type); return ( = ({ /> ))} - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/ExploreType/exploreUtils.spec.tsx b/packages/api-explorer/src/components/ExploreType/exploreUtils.spec.tsx index 739710c3d..c7b555da7 100644 --- a/packages/api-explorer/src/components/ExploreType/exploreUtils.spec.tsx +++ b/packages/api-explorer/src/components/ExploreType/exploreUtils.spec.tsx @@ -24,63 +24,63 @@ */ -import React from 'react' -import { FieldString, IdeFileManifest } from '@looker/icons' -import { CalendarToday } from '@styled-icons/material/CalendarToday' -import { Code } from '@styled-icons/material/Code' -import { Tag } from '@styled-icons/material-rounded/Tag' -import { api40 as api } from '../../test-data' -import { expandable, pickType, pickTypeProps, typeIcon } from './exploreUtils' +import React from 'react'; +import { FieldString, IdeFileManifest } from '@looker/icons'; +import { CalendarToday } from '@styled-icons/material/CalendarToday'; +import { Code } from '@styled-icons/material/Code'; +import { Tag } from '@styled-icons/material-rounded/Tag'; +import { api40 as api } from '../../test-data'; +import { expandable, pickType, pickTypeProps, typeIcon } from './exploreUtils'; describe('exploreUtils', () => { test('pickType', () => { - const method = api.methods.connection_tables - const responseType = method.primaryResponse.type - const type = pickType(responseType) - expect(type).toBeDefined() - expect(type.fullName).toEqual('SchemaTables') - const props = pickTypeProps(responseType) - expect(props).toBeDefined() - const names = Object.keys(props) - expect(names).toEqual(['name', 'is_default', 'tables', 'table_limit_hit']) - }) + const method = api.methods.connection_tables; + const responseType = method.primaryResponse.type; + const type = pickType(responseType); + expect(type).toBeDefined(); + expect(type.fullName).toEqual('SchemaTables'); + const props = pickTypeProps(responseType); + expect(props).toBeDefined(); + const names = Object.keys(props); + expect(names).toEqual(['name', 'is_default', 'tables', 'table_limit_hit']); + }); test('iconType', () => { - const type = api.types.BoardSection - const actual = typeIcon(type) - expect(actual).toEqual({ icon: , title: 'BoardSection' }) - const props = type.properties + const type = api.types.BoardSection; + const actual = typeIcon(type); + expect(actual).toEqual({ icon: , title: 'BoardSection' }); + const props = type.properties; expect(typeIcon(props.can.type)).toEqual({ icon: , title: 'Hash[boolean]', - }) + }); expect(typeIcon(props.created_at.type)).toEqual({ icon: , title: 'datetime', - }) + }); expect(typeIcon(props.description.type)).toEqual({ icon: , title: 'string', - }) - const intProp = api.types.ColorStop.properties.offset + }); + const intProp = api.types.ColorStop.properties.offset; expect(typeIcon(intProp.type)).toEqual({ icon: , title: 'int64', - }) - }) + }); + }); describe('expandable', () => { test('maxDepth -1 is always expandable', () => { - expect(expandable(20, -1)).toEqual(true) - }) + expect(expandable(20, -1)).toEqual(true); + }); test('maxDepth 0 is never expandable', () => { - expect(expandable(1, 0)).toEqual(false) - }) + expect(expandable(1, 0)).toEqual(false); + }); test('maxDepth 2 is expandable 2 levels deep', () => { - expect(expandable(0, 2)).toEqual(true) - expect(expandable(1, 2)).toEqual(true) - expect(expandable(2, 2)).toEqual(true) - expect(expandable(3, 2)).toEqual(false) - }) - }) -}) + expect(expandable(0, 2)).toEqual(true); + expect(expandable(1, 2)).toEqual(true); + expect(expandable(2, 2)).toEqual(true); + expect(expandable(3, 2)).toEqual(false); + }); + }); +}); diff --git a/packages/api-explorer/src/components/ExploreType/exploreUtils.tsx b/packages/api-explorer/src/components/ExploreType/exploreUtils.tsx index 5acf334fe..977ea6bde 100644 --- a/packages/api-explorer/src/components/ExploreType/exploreUtils.tsx +++ b/packages/api-explorer/src/components/ExploreType/exploreUtils.tsx @@ -24,34 +24,34 @@ */ -import React from 'react' -import type { IconType } from '@looker/components' -import { FieldString, IdeFileManifest, IdeParameter } from '@looker/icons' -import { CalendarToday } from '@styled-icons/material/CalendarToday' -import { Check } from '@styled-icons/material/Check' -import { Code } from '@styled-icons/material/Code' -import { Link } from '@styled-icons/material/Link' -import { Toc } from '@styled-icons/material/Toc' -import { VpnKey } from '@styled-icons/material/VpnKey' -import { Tag } from '@styled-icons/material-rounded' -import { Email } from '@styled-icons/material-outlined' -import type { IType } from '@looker/sdk-codegen' -import { TypeOfType, typeOfType } from '@looker/sdk-codegen' +import React from 'react'; +import type { IconType } from '@looker/components'; +import { FieldString, IdeFileManifest, IdeParameter } from '@looker/icons'; +import { CalendarToday } from '@styled-icons/material/CalendarToday'; +import { Check } from '@styled-icons/material/Check'; +import { Code } from '@styled-icons/material/Code'; +import { Link } from '@styled-icons/material/Link'; +import { Toc } from '@styled-icons/material/Toc'; +import { VpnKey } from '@styled-icons/material/VpnKey'; +import { Tag } from '@styled-icons/material-rounded'; +import { Email } from '@styled-icons/material-outlined'; +import type { IType } from '@looker/sdk-codegen'; +import { TypeOfType, typeOfType } from '@looker/sdk-codegen'; /** * Get the type or element type if this type is a collection * @param value type to pick */ export const pickType = (value: IType) => { - const typed = typeOfType(value) + const typed = typeOfType(value); switch (typed) { case TypeOfType.Intrinsic: case TypeOfType.Complex: - return value + return value; default: - return value.elementType! + return value.elementType!; } -} +}; /** * Is this an expandable node? @@ -59,48 +59,48 @@ export const pickType = (value: IType) => { * @param maxDepth is the maximum depth to expanded nested types. -1 = all (default), 0 = no expansion */ export const expandable = (level: number, maxDepth = -1) => - maxDepth === -1 || level <= maxDepth + maxDepth === -1 || level <= maxDepth; /** * Gets the properties for the "exploring" type * @param value type to pick */ -export const pickTypeProps = (value: IType) => pickType(value).properties +export const pickTypeProps = (value: IType) => pickType(value).properties; /** * Get the link prefix for the type * @param value type to link to */ export const typeLinkPrefix = (value: IType) => { - const typed = typeOfType(value) + const typed = typeOfType(value); switch (typed) { case TypeOfType.Hash: - return 'Hash[' + return 'Hash['; default: - return '' + return ''; } -} +}; /** * Get the link suffix for the type * @param value type to link to */ export const typeLinkSuffix = (value: IType) => { - const typed = typeOfType(value) + const typed = typeOfType(value); switch (typed) { case TypeOfType.Array: case TypeOfType.DelimArray: - return '[]' + return '[]'; case TypeOfType.Hash: - return ']' + return ']'; default: - return '' + return ''; } -} +}; interface TypedIcon { - icon: IconType - title: string + icon: IconType; + title: string; } /** @@ -110,39 +110,39 @@ interface TypedIcon { export const typeIcon = (value: IType): TypedIcon => { switch (value.className) { case 'ArrayType': - return { icon: , title: value.jsonName } + return { icon: , title: value.jsonName }; case 'DelimArrayType': - return { icon: , title: value.jsonName } + return { icon: , title: value.jsonName }; case 'HashType': - return { icon: , title: value.jsonName } + return { icon: , title: value.jsonName }; case 'EnumType': - return { icon: , title: value.jsonName } + return { icon: , title: value.jsonName }; } - const type = pickType(value) + const type = pickType(value); switch (type.jsonName) { case 'boolean': - return { icon: , title: type.jsonName } + return { icon: , title: type.jsonName }; case 'int64': case 'integer': case 'float': case 'double': - return { icon: , title: type.jsonName } + return { icon: , title: type.jsonName }; case 'string': case 'hostname': case 'uuid': case 'ipv4': case 'ipv6': - return { icon: , title: type.jsonName } + return { icon: , title: type.jsonName }; case 'email': - return { icon: , title: type.jsonName } + return { icon: , title: type.jsonName }; case 'password': - return { icon: , title: type.jsonName } + return { icon: , title: type.jsonName }; case 'uri': - return { icon: , title: type.jsonName } + return { icon: , title: type.jsonName }; case 'datetime': - return { icon: , title: type.jsonName } + return { icon: , title: type.jsonName }; default: - return { icon: , title: type.jsonName } + return { icon: , title: type.jsonName }; } -} +}; diff --git a/packages/api-explorer/src/components/ExploreType/index.ts b/packages/api-explorer/src/components/ExploreType/index.ts index c0cbfeedb..c73155a31 100644 --- a/packages/api-explorer/src/components/ExploreType/index.ts +++ b/packages/api-explorer/src/components/ExploreType/index.ts @@ -24,13 +24,13 @@ */ -export { ExploreType, ExploreTypeLink } from './ExploreType' +export { ExploreType, ExploreTypeLink } from './ExploreType'; export { ExploreProperty, ExplorePropertyNode, ExplorePropertyDetail, ExplorePropertyType, -} from './ExploreProperty' +} from './ExploreProperty'; export { typeIcon, pickTypeProps, @@ -38,4 +38,4 @@ export { typeLinkSuffix, pickType, expandable, -} from './exploreUtils' +} from './exploreUtils'; diff --git a/packages/api-explorer/src/components/Header/Header.spec.tsx b/packages/api-explorer/src/components/Header/Header.spec.tsx index 1636aaddb..556a80c8d 100644 --- a/packages/api-explorer/src/components/Header/Header.spec.tsx +++ b/packages/api-explorer/src/components/Header/Header.spec.tsx @@ -23,76 +23,70 @@ SOFTWARE. */ -import React from 'react' -import { act, screen, waitFor } from '@testing-library/react' -import { codeGenerators } from '@looker/sdk-codegen' -import userEvent from '@testing-library/user-event' +import React from 'react'; +import { screen, waitFor } from '@testing-library/react'; +import { codeGenerators } from '@looker/sdk-codegen'; +import userEvent from '@testing-library/user-event'; -import { getLoadedSpecs, specs } from '../../test-data' -import { renderWithRouterAndReduxProvider } from '../../test-utils' -import { defaultSettingsState } from '../../state' -import { Header } from './Header' +import { getLoadedSpecs, specs } from '../../test-data'; +import { renderWithRouterAndReduxProvider } from '../../test-utils'; +import { defaultSettingsState } from '../../state'; +import { Header } from './Header'; describe('Header', () => { - const hasNavigation = true - const toggleNavigation = () => !hasNavigation - const spec = getLoadedSpecs()['4.0'] + const hasNavigation = true; + const toggleNavigation = () => !hasNavigation; + const spec = getLoadedSpecs()['4.0']; beforeAll(() => { - window.HTMLElement.prototype.scrollIntoView = jest.fn() - }) + window.HTMLElement.prototype.scrollIntoView = jest.fn(); + }); test('it renders a title', () => { renderWithRouterAndReduxProvider(
- ) + ); expect(screen.getByText('API Explorer').closest('a')).toHaveAttribute( 'href', `/${spec.key}` - ) - }) + ); + }); test('it renders a spec selector with the correct default value and options', async () => { renderWithRouterAndReduxProvider(
- ) - const selector = screen.getByLabelText('spec selector') - expect(selector).toHaveValue(`${spec.key}`) - await act(async () => { - await userEvent.click(selector) - await waitFor(() => { - expect(screen.getAllByRole('option')).toHaveLength( - Object.keys(specs).length - ) - }) - }) - }) + ); + const selector = screen.getByLabelText('spec selector'); + expect(selector).toHaveValue(`${spec.key}`); + await userEvent.click(selector); + await waitFor(() => { + expect(screen.getAllByRole('option')).toHaveLength( + Object.keys(specs).length + ); + }); + }); test('it renders an sdk language selector with the correct value and options', async () => { renderWithRouterAndReduxProvider(
- ) - const selector = screen.getByLabelText('sdk language selector') - expect(selector).toHaveValue(defaultSettingsState.sdkLanguage) - await act(async () => { - await userEvent.click(selector) - await waitFor(() => { - expect(screen.getAllByRole('option')).toHaveLength( - codeGenerators.length + 1 - ) - }) - }) - }) + ); + const selector = screen.getByLabelText('sdk language selector'); + expect(selector).toHaveValue(defaultSettingsState.sdkLanguage); + await userEvent.click(selector); + expect(screen.getAllByRole('option')).toHaveLength( + codeGenerators.length + 1 + ); + }); test('it renders an icon button for the differ', () => { renderWithRouterAndReduxProvider(
- ) + ); expect( screen .getByRole('button', { name: 'Compare Specifications', }) .closest('a') - ).toHaveAttribute('href', `/${spec.key}/diff`) - }) -}) + ).toHaveAttribute('href', `/${spec.key}/diff`); + }); +}); diff --git a/packages/api-explorer/src/components/Header/Header.tsx b/packages/api-explorer/src/components/Header/Header.tsx index 1cac35d49..fec03d5a9 100644 --- a/packages/api-explorer/src/components/Header/Header.tsx +++ b/packages/api-explorer/src/components/Header/Header.tsx @@ -24,34 +24,34 @@ */ -import type { FC } from 'react' -import React from 'react' -import styled from 'styled-components' +import type { FC } from 'react'; +import React from 'react'; +import styled from 'styled-components'; import { + Heading, Icon, - Space, IconButton, - Heading, Header as SemanticHeader, -} from '@looker/components' -import { LookerLogo } from '@looker/icons' -import { Menu } from '@styled-icons/material/Menu' -import type { SpecItem } from '@looker/sdk-codegen' + Space, +} from '@looker/components'; +import { LookerLogo } from '@looker/icons'; +import { Menu } from '@styled-icons/material/Menu'; +import type { SpecItem } from '@looker/sdk-codegen'; -import { Link } from '../Link' -import { SelectorContainer } from '../SelectorContainer' +import { Link } from '../Link'; +import { SelectorContainer } from '../SelectorContainer'; interface HeaderProps { /** Current selected spec */ - spec: SpecItem + spec: SpecItem; /** Nav state setter */ - toggleNavigation: (target?: boolean) => void - className?: string + toggleNavigation: (target?: boolean) => void; + className?: string; } -export const HEADER_REM = 4 +export const HEADER_REM = 4; -export const HEADER_TOGGLE_LABEL = 'Toggle Navigation' +export const HEADER_TOGGLE_LABEL = 'Toggle Navigation'; /** * Renders the API Explorer header @@ -90,8 +90,8 @@ export const HeaderLayout: FC = ({ -) +); export const Header = styled(HeaderLayout)` border-bottom: 1px solid ${({ theme }) => theme.colors.ui2}; -` +`; diff --git a/packages/api-explorer/src/components/Header/index.ts b/packages/api-explorer/src/components/Header/index.ts index 180788bd1..18ee2d15b 100644 --- a/packages/api-explorer/src/components/Header/index.ts +++ b/packages/api-explorer/src/components/Header/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { Header, HEADER_REM, HEADER_TOGGLE_LABEL } from './Header' +export { Header, HEADER_REM, HEADER_TOGGLE_LABEL } from './Header'; diff --git a/packages/api-explorer/src/components/Link/Link.tsx b/packages/api-explorer/src/components/Link/Link.tsx index f7463af5b..01343d3f8 100644 --- a/packages/api-explorer/src/components/Link/Link.tsx +++ b/packages/api-explorer/src/components/Link/Link.tsx @@ -24,8 +24,8 @@ */ -import { NavLink } from 'react-router-dom' -import styled from 'styled-components' +import { NavLink } from 'react-router-dom'; +import styled from 'styled-components'; export const Link = styled(NavLink)` text-decoration: none; @@ -37,4 +37,4 @@ export const Link = styled(NavLink)` &.active { color: inherit; } -` +`; diff --git a/packages/api-explorer/src/components/Link/index.ts b/packages/api-explorer/src/components/Link/index.ts index 149431734..20b601341 100644 --- a/packages/api-explorer/src/components/Link/index.ts +++ b/packages/api-explorer/src/components/Link/index.ts @@ -24,4 +24,4 @@ */ -export { Link } from './Link' +export { Link } from './Link'; diff --git a/packages/api-explorer/src/components/SelectorContainer/ApiSpecSelector.spec.tsx b/packages/api-explorer/src/components/SelectorContainer/ApiSpecSelector.spec.tsx index c0b52b880..ee71f185b 100644 --- a/packages/api-explorer/src/components/SelectorContainer/ApiSpecSelector.spec.tsx +++ b/packages/api-explorer/src/components/SelectorContainer/ApiSpecSelector.spec.tsx @@ -23,19 +23,19 @@ SOFTWARE. */ -import React from 'react' -import { screen, waitFor } from '@testing-library/react' -import userEvent from '@testing-library/user-event' -import { useHistory } from 'react-router-dom' -import { getLoadedSpecs, specs } from '../../test-data' +import React from 'react'; +import { screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { useHistory } from 'react-router-dom'; +import { getLoadedSpecs, specs } from '../../test-data'; import { renderWithReduxProvider, renderWithRouterAndReduxProvider, -} from '../../test-utils' -import { ApiSpecSelector } from './ApiSpecSelector' +} from '../../test-utils'; +import { ApiSpecSelector } from './ApiSpecSelector'; jest.mock('react-router-dom', () => { - const ReactRouterDOM = jest.requireActual('react-router-dom') + const ReactRouterDOM = jest.requireActual('react-router-dom'); return { ...ReactRouterDOM, useLocation: () => ({ @@ -44,8 +44,8 @@ jest.mock('react-router-dom', () => { useHistory: jest .fn() .mockReturnValue({ push: jest.fn(), location: globalThis.location }), - } -}) + }; +}); // jest.mock('../../state/specs', () => ({ // ...(jest.requireActual('../../state/specs') as Record), @@ -55,39 +55,39 @@ jest.mock('react-router-dom', () => { // })) describe('ApiSpecSelector', () => { - Element.prototype.scrollIntoView = jest.fn() - const spec = getLoadedSpecs()['4.0'] + Element.prototype.scrollIntoView = jest.fn(); + const spec = getLoadedSpecs()['4.0']; test('the base spec is selected by default', () => { - renderWithReduxProvider() - const selector = screen.getByRole('textbox') - expect(selector).toHaveValue(`${spec.key}`) - }) + renderWithReduxProvider(); + const selector = screen.getByRole('textbox'); + expect(selector).toHaveValue(`${spec.key}`); + }); test('it lists all available specs', async () => { - renderWithReduxProvider() - userEvent.click(screen.getByRole('textbox')) + renderWithReduxProvider(); + userEvent.click(screen.getByRole('textbox')); await waitFor(() => { expect(screen.getAllByRole('option')).toHaveLength( Object.keys(specs).length - ) - }) - }) + ); + }); + }); test.skip('requests selected spec', async () => { - const { push } = useHistory() - renderWithRouterAndReduxProvider() - userEvent.click(screen.getByRole('textbox')) + const { push } = useHistory(); + renderWithRouterAndReduxProvider(); + userEvent.click(screen.getByRole('textbox')); await waitFor(() => { expect(screen.getAllByRole('option')).toHaveLength( Object.keys(specs).length - ) - }) - const button = screen.getByText('3.1') - userEvent.click(button) + ); + }); + const button = screen.getByText('4.0'); + userEvent.click(button); expect(push).toHaveBeenCalledWith({ - pathname: '/3.1/methods/Dashboard/dashboard', + pathname: '/4.0/methods/Dashboard/dashboard', search: '', - }) - }) -}) + }); + }); +}); diff --git a/packages/api-explorer/src/components/SelectorContainer/ApiSpecSelector.tsx b/packages/api-explorer/src/components/SelectorContainer/ApiSpecSelector.tsx index 988c376cc..7c84bcf68 100644 --- a/packages/api-explorer/src/components/SelectorContainer/ApiSpecSelector.tsx +++ b/packages/api-explorer/src/components/SelectorContainer/ApiSpecSelector.tsx @@ -24,34 +24,34 @@ */ -import type { FC } from 'react' -import React from 'react' -import { Select } from '@looker/components' -import { useLocation } from 'react-router-dom' -import type { SpecItem } from '@looker/sdk-codegen' -import { useSelector } from 'react-redux' -import { useNavigation } from '../../utils' +import type { FC } from 'react'; +import React from 'react'; +import { Select } from '@looker/components'; +import { useLocation } from 'react-router-dom'; +import type { SpecItem } from '@looker/sdk-codegen'; +import { useSelector } from 'react-redux'; +import { useNavigation } from '../../utils'; -import { selectSpecs } from '../../state' +import { selectSpecs } from '../../state'; interface ApiSpecSelectorProps { - spec: SpecItem + spec: SpecItem; } export const ApiSpecSelector: FC = ({ spec }) => { - const location = useLocation() - const { navigate } = useNavigation() - const specs = useSelector(selectSpecs) + const location = useLocation(); + const { navigate } = useNavigation(); + const specs = useSelector(selectSpecs); const options = Object.entries(specs).map(([key, spec]) => ({ value: key, label: key, description: spec.status, - })) + })); const handleChange = (specKey: string) => { - const matchPath = location.pathname.replace(`/${spec.key}`, `/${specKey}`) - navigate(matchPath) - } + const matchPath = location.pathname.replace(`/${spec.key}`, `/${specKey}`); + navigate(matchPath); + }; return ( { onChange={handleChange} options={options} /> - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/SelectorContainer/SelectorContainer.spec.tsx b/packages/api-explorer/src/components/SelectorContainer/SelectorContainer.spec.tsx index ce856e9f9..b28209e53 100644 --- a/packages/api-explorer/src/components/SelectorContainer/SelectorContainer.spec.tsx +++ b/packages/api-explorer/src/components/SelectorContainer/SelectorContainer.spec.tsx @@ -23,58 +23,50 @@ SOFTWARE. */ -import React from 'react' -import { act, screen, waitFor } from '@testing-library/react' -import { codeGenerators } from '@looker/sdk-codegen' -import userEvent from '@testing-library/user-event' +import React from 'react'; +import { screen } from '@testing-library/react'; +import { codeGenerators } from '@looker/sdk-codegen'; +import userEvent from '@testing-library/user-event'; -import { getLoadedSpecs, specs } from '../../test-data' -import { renderWithRouterAndReduxProvider } from '../../test-utils' -import { defaultSettingsState } from '../../state' -import { SelectorContainer } from './SelectorContainer' +import { getLoadedSpecs, specs } from '../../test-data'; +import { renderWithRouterAndReduxProvider } from '../../test-utils'; +import { defaultSettingsState } from '../../state'; +import { SelectorContainer } from './SelectorContainer'; describe('SelectorContainer', () => { - const spec = getLoadedSpecs()['4.0'] + const spec = getLoadedSpecs()['4.0']; beforeAll(() => { - window.HTMLElement.prototype.scrollIntoView = jest.fn() - }) + window.HTMLElement.prototype.scrollIntoView = jest.fn(); + }); test('it renders a spec selector with the correct default value and options', async () => { - renderWithRouterAndReduxProvider() - const selector = screen.getByLabelText('spec selector') - expect(selector).toHaveValue(`${spec.key}`) - await act(async () => { - await userEvent.click(selector) - await waitFor(() => { - expect(screen.getAllByRole('option')).toHaveLength( - Object.keys(specs).length - ) - }) - }) - }) + renderWithRouterAndReduxProvider(); + const selector = screen.getByLabelText('spec selector'); + expect(selector).toHaveValue(`${spec.key}`); + await userEvent.click(selector); + expect(screen.getAllByRole('option')).toHaveLength( + Object.keys(specs).length + ); + }); test('it renders an sdk language selector with the correct value and options', async () => { - renderWithRouterAndReduxProvider() - const selector = screen.getByLabelText('sdk language selector') - expect(selector).toHaveValue(defaultSettingsState.sdkLanguage) - await act(async () => { - await userEvent.click(selector) - await waitFor(() => { - expect(screen.getAllByRole('option')).toHaveLength( - codeGenerators.length + 1 - ) - }) - }) - }) + renderWithRouterAndReduxProvider(); + const selector = screen.getByLabelText('sdk language selector'); + expect(selector).toHaveValue(defaultSettingsState.sdkLanguage); + await userEvent.click(selector); + expect(screen.getAllByRole('option')).toHaveLength( + codeGenerators.length + 1 + ); + }); test('it renders an icon button for the differ', () => { - renderWithRouterAndReduxProvider() + renderWithRouterAndReduxProvider(); expect( screen .getByRole('button', { name: 'Compare Specifications', }) .closest('a') - ).toHaveAttribute('href', `/${spec.key}/diff`) - }) -}) + ).toHaveAttribute('href', `/${spec.key}/diff`); + }); +}); diff --git a/packages/api-explorer/src/components/SelectorContainer/SelectorContainer.tsx b/packages/api-explorer/src/components/SelectorContainer/SelectorContainer.tsx index e2d3b5e8d..0c6f5b25e 100644 --- a/packages/api-explorer/src/components/SelectorContainer/SelectorContainer.tsx +++ b/packages/api-explorer/src/components/SelectorContainer/SelectorContainer.tsx @@ -24,24 +24,24 @@ */ -import type { FC } from 'react' -import React from 'react' -import type { SpaceHelperProps } from '@looker/components' -import { Space, IconButton } from '@looker/components' -import { ChangeHistory } from '@styled-icons/material/ChangeHistory' -import type { SpecItem } from '@looker/sdk-codegen' +import type { FC } from 'react'; +import React from 'react'; +import type { SpaceHelperProps } from '@looker/components'; +import { IconButton, Space } from '@looker/components'; +import { ChangeHistory } from '@styled-icons/material/ChangeHistory'; +import type { SpecItem } from '@looker/sdk-codegen'; -import { Link } from '../Link' -import { diffPath, useNavigation } from '../../utils' -import { SdkLanguageSelector } from './SdkLanguageSelector' -import { ApiSpecSelector } from './ApiSpecSelector' +import { Link } from '../Link'; +import { diffPath, useNavigation } from '../../utils'; +import { SdkLanguageSelector } from './SdkLanguageSelector'; +import { ApiSpecSelector } from './ApiSpecSelector'; interface SelectorContainerProps extends SpaceHelperProps { /** Current selected spec */ - spec: SpecItem + spec: SpecItem; } -export const HEADER_REM = 4 +export const HEADER_REM = 4; /** * Renders a container for selectors @@ -50,7 +50,7 @@ export const SelectorContainer: FC = ({ spec, ...spaceProps }) => { - const { buildPathWithGlobalParams } = useNavigation() + const { buildPathWithGlobalParams } = useNavigation(); return ( @@ -64,5 +64,5 @@ export const SelectorContainer: FC = ({ /> - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/SelectorContainer/index.ts b/packages/api-explorer/src/components/SelectorContainer/index.ts index 8e39590ce..e5c178528 100644 --- a/packages/api-explorer/src/components/SelectorContainer/index.ts +++ b/packages/api-explorer/src/components/SelectorContainer/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { SelectorContainer } from './SelectorContainer' +export { SelectorContainer } from './SelectorContainer'; diff --git a/packages/api-explorer/src/components/SelectorContainer/utils.ts b/packages/api-explorer/src/components/SelectorContainer/utils.ts index 1c5f4141e..176629290 100644 --- a/packages/api-explorer/src/components/SelectorContainer/utils.ts +++ b/packages/api-explorer/src/components/SelectorContainer/utils.ts @@ -23,23 +23,23 @@ SOFTWARE. */ -import type { SelectOptionProps } from '@looker/components' -import { allSdkLanguages, allAlias } from '../../utils' +import type { SelectOptionProps } from '@looker/components'; +import { allAlias, allSdkLanguages } from '../../utils'; /** * @returns sdk language options for render */ export const allSdkLanguageOptions = (): SelectOptionProps[] => { - const options = [] as SelectOptionProps[] - const languages = allSdkLanguages() + const options = [] as SelectOptionProps[]; + const languages = allSdkLanguages(); Object.entries(languages).forEach(([alias, language]) => { - const option = { value: alias, label: language } + const option = { value: alias, label: language }; if (alias === allAlias) { - options.push({ options: [option] }) + options.push({ options: [option] }); } else { - options.push(option) + options.push(option); } - }) + }); - return options -} + return options; +}; diff --git a/packages/api-explorer/src/components/SideNav/SearchMessage.tsx b/packages/api-explorer/src/components/SideNav/SearchMessage.tsx index 9c51147a0..a05368d74 100644 --- a/packages/api-explorer/src/components/SideNav/SearchMessage.tsx +++ b/packages/api-explorer/src/components/SideNav/SearchMessage.tsx @@ -23,14 +23,14 @@ SOFTWARE. */ -import type { FC } from 'react' -import React from 'react' -import type { ISearchResult } from '@looker/sdk-codegen' -import { Heading, Icon, Flex } from '@looker/components' -import { Error } from '@styled-icons/material/Error' +import type { FC } from 'react'; +import React from 'react'; +import type { ISearchResult } from '@looker/sdk-codegen'; +import { Flex, Heading, Icon } from '@looker/components'; +import { Error } from '@styled-icons/material/Error'; interface SearchMessageProps { - search?: ISearchResult + search?: ISearchResult; } /** @@ -54,4 +54,4 @@ export const SearchMessage: FC = ({ search }) => ( )} -) +); diff --git a/packages/api-explorer/src/components/SideNav/SideNav.spec.tsx b/packages/api-explorer/src/components/SideNav/SideNav.spec.tsx index c2f15ccc2..dd34b469d 100644 --- a/packages/api-explorer/src/components/SideNav/SideNav.spec.tsx +++ b/packages/api-explorer/src/components/SideNav/SideNav.spec.tsx @@ -23,126 +23,126 @@ SOFTWARE. */ -import React from 'react' -import { criteriaToSet } from '@looker/sdk-codegen' -import userEvent from '@testing-library/user-event' -import { screen, waitFor } from '@testing-library/react' +import React from 'react'; +import { criteriaToSet } from '@looker/sdk-codegen'; +import userEvent from '@testing-library/user-event'; +import { screen, waitFor } from '@testing-library/react'; -import { getLoadedSpecs } from '../../test-data' +import { getLoadedSpecs } from '../../test-data'; import { createTestStore, renderWithRouterAndReduxProvider, -} from '../../test-utils' -import { defaultSettingsState } from '../../state' -import { SideNav } from './SideNav' -import { countMethods, countTypes } from './searchUtils' +} from '../../test-utils'; +import { defaultSettingsState } from '../../state'; +import { SideNav } from './SideNav'; +import { countMethods, countTypes } from './searchUtils'; -const spec = getLoadedSpecs()['4.0'] +const spec = getLoadedSpecs()['4.0']; describe('SideNav', () => { - const allTagsPattern = /^(Auth|ApiAuth)$/ - const allTypesPattern = /^(WriteDashboard|WriteQuery)$/ + const allTagsPattern = /^(Auth|ApiAuth)$/; + const allTypesPattern = /^(WriteDashboard|WriteQuery)$/; - let saveLocation: Location + let saveLocation: Location; beforeEach(() => { - saveLocation = globalThis.window.location + saveLocation = globalThis.window.location; + delete (window as any).location; window.location = { ...saveLocation, - pathname: '/3.1', - } - }) + pathname: '/4.0', + }; + }); afterEach(() => { - window.location = saveLocation - }) + window.location = saveLocation; + }); test('it renders search, methods tab and types tab', () => { - renderWithRouterAndReduxProvider() - const search = screen.getByLabelText('Search') - expect(search).toHaveProperty('placeholder', 'Search') + renderWithRouterAndReduxProvider(); + const search = screen.getByLabelText('Search'); + expect(search).toHaveProperty('placeholder', 'Search'); const tabs = screen.getAllByRole('tab', { name: /^Methods \(\d+\)|Types \(\d+\)$/, - }) - expect(tabs).toHaveLength(2) + }); + expect(tabs).toHaveLength(2); expect(tabs[0]).toHaveTextContent( `Methods (${countMethods(spec.api!.tags)})` - ) + ); - expect(tabs[1]).toHaveTextContent(`Types (${countTypes(spec.api!.types)})`) - }) + expect(tabs[1]).toHaveTextContent(`Types (${countTypes(spec.api!.types)})`); + }); - test('Methods tab is the default active tab', () => { - renderWithRouterAndReduxProvider(, ['/3.1/methods']) - expect(screen.getAllByText(allTagsPattern)).toHaveLength(2) + test('Methods tab is the default active tab', async () => { + renderWithRouterAndReduxProvider(, ['/4.0/methods']); + expect(screen.getAllByText(allTagsPattern)).toHaveLength(2); expect( screen.queryAllByRole('link', { name: allTypesPattern }) - ).toHaveLength(0) // eslint-disable-line jest-dom/prefer-in-document + ).toHaveLength(0); // eslint-disable-line jest-dom/prefer-in-document - userEvent.click(screen.getByRole('tab', { name: /^Types \(\d+\)$/ })) + await userEvent.click(screen.getByRole('tab', { name: /^Types \(\d+\)$/ })); - expect(screen.queryAllByText(allTagsPattern)).toHaveLength(2) - }) + expect(screen.queryAllByText(allTagsPattern)).toHaveLength(2); + }); test('url determines active tab', () => { - renderWithRouterAndReduxProvider(, ['/3.1/types']) + renderWithRouterAndReduxProvider(, ['/4.0/types']); // eslint-disable-next-line jest-dom/prefer-in-document - expect(screen.queryAllByText(allTagsPattern)).toHaveLength(2) - }) -}) + expect(screen.queryAllByText(allTagsPattern)).toHaveLength(2); + }); +}); -const mockHistoryPush = jest.fn() +const mockHistoryPush = jest.fn(); jest.mock('react-router-dom', () => { - const ReactRouterDOM = jest.requireActual('react-router-dom') + const ReactRouterDOM = jest.requireActual('react-router-dom'); return { ...ReactRouterDOM, useHistory: () => ({ push: mockHistoryPush, location: globalThis.location, }), - } -}) + }; +}); describe('Search', () => { test('inputting text in search box updates URL', async () => { - renderWithRouterAndReduxProvider(, ['/3.1/methods']) - const searchPattern = 'embedsso' - const input = screen.getByLabelText('Search') - await userEvent.paste(input, searchPattern) + renderWithRouterAndReduxProvider(, ['/4.0/methods']); + const searchPattern = 'embedsso'; + const input = screen.getByLabelText('Search'); + await userEvent.click(input); + await userEvent.paste(input, searchPattern); await waitFor(() => { expect(mockHistoryPush).toHaveBeenCalledWith({ - pathname: '/3.1/methods', + pathname: '/4.0/methods', search: `s=${searchPattern}`, - }) - }) - }) + }); + }); + }); test('sets search default value from store on load', async () => { - const searchPattern = 'embedsso' + const searchPattern = 'embedsso'; const store = createTestStore({ settings: { searchPattern: searchPattern }, - }) - jest.spyOn(spec.api!, 'search') + }); + jest.spyOn(spec.api!, 'search'); renderWithRouterAndReduxProvider( , - ['/3.1/methods?s=embedsso'], + ['/4.0/methods?s=embedsso'], store - ) - const input = screen.getByLabelText('Search') - expect(input).toHaveValue(searchPattern) - await waitFor(() => { - expect(spec.api!.search).toHaveBeenCalledWith( - searchPattern, - criteriaToSet(defaultSettingsState.searchCriteria) - ) - const methods = screen.getByRole('tab', { name: 'Methods (1)' }) - userEvent.click(methods) - expect( - screen.getByText(spec.api!.tags.Auth.create_sso_embed_url.summary) - ).toBeInTheDocument() - const types = screen.getByRole('tab', { name: 'Types (1)' }) - userEvent.click(types) - expect(screen.getByText('EmbedSso')).toBeInTheDocument() - }) - }) -}) + ); + const input = screen.getByLabelText('Search'); + expect(input).toHaveValue(searchPattern); + expect(spec.api!.search).toHaveBeenCalledWith( + searchPattern, + criteriaToSet(defaultSettingsState.searchCriteria) + ); + const methods = screen.getByRole('tab', { name: 'Methods (1)' }); + await userEvent.click(methods); + expect( + screen.getByText(spec.api!.tags.Auth.create_sso_embed_url.summary) + ).toBeInTheDocument(); + const types = screen.getByRole('tab', { name: 'Types (1)' }); + await userEvent.click(types); + expect(screen.getByText('EmbedSso')).toBeInTheDocument(); + }); +}); diff --git a/packages/api-explorer/src/components/SideNav/SideNav.tsx b/packages/api-explorer/src/components/SideNav/SideNav.tsx index 1481d654c..51051ddf9 100644 --- a/packages/api-explorer/src/components/SideNav/SideNav.tsx +++ b/packages/api-explorer/src/components/SideNav/SideNav.tsx @@ -24,123 +24,124 @@ */ -import type { FC } from 'react' -import React, { useEffect, useState } from 'react' -import { useLocation } from 'react-router-dom' +import type { FC } from 'react'; +import React, { useEffect, useState } from 'react'; +import { useLocation } from 'react-router-dom'; import { - TabList, + Box2, + InputSearch, Tab, + TabList, TabPanel, TabPanels, useTabs, - InputSearch, - Box2, -} from '@looker/components' +} from '@looker/components'; import type { - SpecItem, - ISearchResult, ApiModel, + ISearchResult, + SpecItem, TagList, TypeTagList, -} from '@looker/sdk-codegen' -import { criteriaToSet, tagTypes } from '@looker/sdk-codegen' -import { useSelector } from 'react-redux' -import { CopyLinkWrapper } from '@looker/run-it' -import { useWindowSize, useNavigation } from '../../utils' -import { HEADER_REM } from '../Header' -import { selectSearchCriteria, selectSearchPattern } from '../../state' -import { SideNavMethodTags } from './SideNavMethodTags' -import { SideNavTypeTags } from './SideNavTypeTags' -import { useDebounce, countMethods, countTypes } from './searchUtils' -import { SearchMessage } from './SearchMessage' +} from '@looker/sdk-codegen'; +import { criteriaToSet, tagTypes } from '@looker/sdk-codegen'; +import { useSelector } from 'react-redux'; +import { CopyLinkWrapper } from '@looker/run-it'; +import { useNavigation, useWindowSize } from '../../utils'; +import { HEADER_REM } from '../Header'; +import { selectSearchCriteria, selectSearchPattern } from '../../state'; +import { SideNavMethodTags } from './SideNavMethodTags'; +import { SideNavTypeTags } from './SideNavTypeTags'; +import { countMethods, countTypes, useDebounce } from './searchUtils'; +import { SearchMessage } from './SearchMessage'; interface SideNavState { - tags: TagList - typeTags: TypeTagList - methodCount: number - typeCount: number - searchResults?: ISearchResult + tags: TagList; + typeTags: TypeTagList; + methodCount: number; + typeCount: number; + searchResults?: ISearchResult; } interface SideNavProps { - headless?: boolean + headless?: boolean; /** Current selected spec */ - spec: SpecItem + spec: SpecItem; } export const SideNav: FC = ({ headless = false, spec }) => { - const location = useLocation() - const { navigate, navigateWithGlobalParams } = useNavigation() - const specKey = spec.key - const tabNames = ['methods', 'types'] - const pathParts = location.pathname.split('/') - const sideNavTab = pathParts[1] === 'diff' ? pathParts[3] : pathParts[2] - let defaultIndex = tabNames.indexOf(sideNavTab) + const location = useLocation(); + const { navigate, navigateWithGlobalParams } = useNavigation(); + const specKey = spec.key; + const tabNames = ['methods', 'types']; + const pathParts = location.pathname.split('/'); + const sideNavTab = pathParts[1] === 'diff' ? pathParts[3] : pathParts[2]; + let defaultIndex = tabNames.indexOf(sideNavTab); if (defaultIndex < 0) { - defaultIndex = tabNames.indexOf('methods') + defaultIndex = tabNames.indexOf('methods'); } const onTabChange = (index: number) => { - const parts = location.pathname.split('/') + const parts = location.pathname.split('/'); if (parts[1] === 'diff') { if (parts[3] !== tabNames[index]) { - parts[3] = tabNames[index] - navigateWithGlobalParams(parts.join('/')) + parts[3] = tabNames[index]; + navigateWithGlobalParams(parts.join('/')); } } else { if (parts[2] !== tabNames[index]) { - parts[2] = tabNames[index] - navigateWithGlobalParams(parts.join('/')) + parts[2] = tabNames[index]; + navigateWithGlobalParams(parts.join('/')); } } - } - const tabs = useTabs({ defaultIndex, onChange: onTabChange }) - const searchCriteria = useSelector(selectSearchCriteria) - const searchPattern = useSelector(selectSearchPattern) - const [pattern, setSearchPattern] = useState(searchPattern) - const debouncedPattern = useDebounce(pattern, 250) + }; + const tabs = useTabs({ defaultIndex, onChange: onTabChange }); + const searchCriteria = useSelector(selectSearchCriteria); + const searchPattern = useSelector(selectSearchPattern); + const [pattern, setSearchPattern] = useState(searchPattern); + const debouncedPattern = useDebounce(pattern, 250); const [sideNavState, setSideNavState] = useState(() => ({ tags: spec?.api?.tags || {}, typeTags: spec?.api?.typeTags || {}, methodCount: countMethods(spec?.api?.tags || {}), typeCount: countTypes(spec?.api?.types || {}), searchResults: undefined, - })) - const { tags, typeTags, methodCount, typeCount, searchResults } = sideNavState + })); + const { tags, typeTags, methodCount, typeCount, searchResults } = + sideNavState; const handleInputChange = (value: string) => { - setSearchPattern(value) - } + setSearchPattern(value); + }; useEffect(() => { - const searchParams = new URLSearchParams(location.search) + const searchParams = new URLSearchParams(location.search); if (debouncedPattern && debouncedPattern !== searchParams.get('s')) { - searchParams.set('s', debouncedPattern) - navigate(location.pathname, { s: searchParams.get('s') }) + searchParams.set('s', debouncedPattern); + navigate(location.pathname, { s: searchParams.get('s') }); } else if (!debouncedPattern && searchParams.get('s')) { - searchParams.delete('s') - navigate(location.pathname, { s: null }) + searchParams.delete('s'); + navigate(location.pathname, { s: null }); } - }, [debouncedPattern]) + }, [debouncedPattern]); // Removed location.search as dep to fix bug related to // browser forward / backward navigation useEffect(() => { - let results - let newTags - let newTypes - let newTypeTags - const api = spec.api || ({} as ApiModel) - setSearchPattern(searchPattern) + let results; + let newTags; + let newTypes; + let newTypeTags; + const api = spec.api || ({} as ApiModel); + setSearchPattern(searchPattern); if (searchPattern && api.search) { - results = api.search(searchPattern, criteriaToSet(searchCriteria)) - newTags = results.tags - newTypes = results.types - newTypeTags = tagTypes(api, results.types) + results = api.search(searchPattern, criteriaToSet(searchCriteria)); + newTags = results.tags; + newTypes = results.types; + newTypeTags = tagTypes(api, results.types); } else { - newTags = api.tags || {} - newTypes = api.types || {} - newTypeTags = api.typeTags || {} + newTags = api.tags || {}; + newTypes = api.types || {}; + newTypeTags = api.typeTags || {}; } setSideNavState({ @@ -149,19 +150,12 @@ export const SideNav: FC = ({ headless = false, spec }) => { typeCount: countTypes(newTypes), methodCount: countMethods(newTags), searchResults: results, - }) - }, [searchPattern, specKey, spec, searchCriteria]) + }); + }, [searchPattern, specKey, spec, searchCriteria]); - useEffect(() => { - const { selectedIndex, onSelectTab } = tabs - if (defaultIndex !== selectedIndex) { - onSelectTab(defaultIndex) - } - }, [defaultIndex, tabs]) - - const size = useWindowSize() - const headlessOffset = headless ? 200 : 120 - const menuH = size.height - 16 * HEADER_REM - headlessOffset + const size = useWindowSize(); + const headlessOffset = headless ? 200 : 120; + const menuH = size.height - 16 * HEADER_REM - headlessOffset; return ( - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/SideNav/SideNavMethodTags.spec.tsx b/packages/api-explorer/src/components/SideNav/SideNavMethodTags.spec.tsx index 59737cd4a..c49f5acce 100644 --- a/packages/api-explorer/src/components/SideNav/SideNavMethodTags.spec.tsx +++ b/packages/api-explorer/src/components/SideNav/SideNavMethodTags.spec.tsx @@ -23,55 +23,55 @@ SOFTWARE. */ -import React from 'react' -import pick from 'lodash/pick' -import { screen } from '@testing-library/react' -import userEvent from '@testing-library/user-event' +import React from 'react'; +import pick from 'lodash/pick'; +import { screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; -import { api } from '../../test-data' -import { renderWithRouterAndReduxProvider } from '../../test-utils' -import { SideNavMethodTags } from './SideNavMethodTags' +import { api } from '../../test-data'; +import { renderWithRouterAndReduxProvider } from '../../test-utils'; +import { SideNavMethodTags } from './SideNavMethodTags'; describe('SideNavTags', () => { - const tags = pick(api.tags, ['ApiAuth', 'Dashboard']) - test('it renders a provided tag and its methods', () => { + const tags = pick(api.tags, ['ApiAuth', 'Dashboard']); + test('it renders a provided tag and its methods', async () => { renderWithRouterAndReduxProvider( - - ) - const tag = screen.getByText('Dashboard') - const tagContent = 'Create Dashboard' - expect(screen.queryByText(tagContent)).not.toBeInTheDocument() - userEvent.click(tag) - expect(screen.getByText(tagContent)).toBeInTheDocument() - const methods = screen.getAllByRole('link') - expect(methods).toHaveLength(Object.keys(tags.Dashboard).length) - }) + + ); + const tag = screen.getByText('Dashboard'); + const tagContent = 'Create Dashboard'; + expect(screen.queryByText(tagContent)).not.toBeInTheDocument(); + await userEvent.click(tag); + expect(screen.getByText(tagContent)).toBeInTheDocument(); + const methods = screen.getAllByRole('link'); + expect(methods).toHaveLength(Object.keys(tags.Dashboard).length); + }); - test('tags are rendered initially collapsed and expand when clicked', () => { + test('tags are rendered initially collapsed and expand when clicked', async () => { renderWithRouterAndReduxProvider( - - ) + + ); - const allTags = screen.getAllByText(/ApiAuth|Dashboard/) - expect(allTags).toHaveLength(2) - expect(screen.queryByText('Login')).not.toBeInTheDocument() - expect(screen.queryByText('Create Dashboard')).not.toBeInTheDocument() - userEvent.click(allTags[0]) - expect(screen.getByText('Login')).toBeInTheDocument() - expect(screen.queryByText('Create Dashboard')).not.toBeInTheDocument() - }) + const allTags = screen.getAllByText(/ApiAuth|Dashboard/); + expect(allTags).toHaveLength(2); + expect(screen.queryByText('Login')).not.toBeInTheDocument(); + expect(screen.queryByText('Create Dashboard')).not.toBeInTheDocument(); + await userEvent.click(allTags[0]); + expect(screen.getByText('Login')).toBeInTheDocument(); + expect(screen.queryByText('Create Dashboard')).not.toBeInTheDocument(); + }); test('tag is expanded if specified in route', () => { renderWithRouterAndReduxProvider( - , - ['/3.1/methods/Dashboard'] - ) + , + ['/4.0/methods/Dashboard'] + ); - const allTags = screen.getAllByText(/^(ApiAuth|Dashboard)$/) - expect(allTags).toHaveLength(2) - expect(screen.queryByText('Login')).not.toBeInTheDocument() + const allTags = screen.getAllByText(/^(ApiAuth|Dashboard)$/); + expect(allTags).toHaveLength(2); + expect(screen.queryByText('Login')).not.toBeInTheDocument(); expect(screen.getAllByRole('link')).toHaveLength( Object.keys(tags.Dashboard).length - ) - }) -}) + ); + }); +}); diff --git a/packages/api-explorer/src/components/SideNav/SideNavMethodTags.tsx b/packages/api-explorer/src/components/SideNav/SideNavMethodTags.tsx index 816b2f001..8b7535e89 100644 --- a/packages/api-explorer/src/components/SideNav/SideNavMethodTags.tsx +++ b/packages/api-explorer/src/components/SideNav/SideNavMethodTags.tsx @@ -24,16 +24,16 @@ */ -import React from 'react' -import styled from 'styled-components' -import type { TagList } from '@looker/sdk-codegen' -import { SideNavMethods } from './SideNavMethods' +import React from 'react'; +import styled from 'styled-components'; +import type { TagList } from '@looker/sdk-codegen'; +import { SideNavMethods } from './SideNavMethods'; interface TagsProps { - tags: TagList - specKey: string - defaultOpen?: boolean - className?: string + tags: TagList; + specKey: string; + defaultOpen?: boolean; + className?: string; } export const SideNavMethodTags = styled( @@ -52,4 +52,4 @@ export const SideNavMethodTags = styled( ) )` padding: 0 ${({ theme }) => theme.space.large}; -` +`; diff --git a/packages/api-explorer/src/components/SideNav/SideNavMethods.spec.tsx b/packages/api-explorer/src/components/SideNav/SideNavMethods.spec.tsx index cd88d07ba..238484372 100644 --- a/packages/api-explorer/src/components/SideNav/SideNavMethods.spec.tsx +++ b/packages/api-explorer/src/components/SideNav/SideNavMethods.spec.tsx @@ -23,67 +23,67 @@ SOFTWARE. */ -import React from 'react' -import pick from 'lodash/pick' -import userEvent from '@testing-library/user-event' -import { screen } from '@testing-library/react' +import React from 'react'; +import pick from 'lodash/pick'; +import userEvent from '@testing-library/user-event'; +import { screen } from '@testing-library/react'; -import { api } from '../../test-data' +import { api } from '../../test-data'; import { createTestStore, renderWithRouterAndReduxProvider, -} from '../../test-utils' -import { SideNavMethods } from './SideNavMethods' +} from '../../test-utils'; +import { SideNavMethods } from './SideNavMethods'; -const mockHistoryPush = jest.fn() +const mockHistoryPush = jest.fn(); jest.mock('react-router-dom', () => { - const ReactRouterDOM = jest.requireActual('react-router-dom') + const ReactRouterDOM = jest.requireActual('react-router-dom'); return { ...ReactRouterDOM, useHistory: () => ({ push: mockHistoryPush, location: globalThis.location, }), - } -}) + }; +}); describe('SideNavMethods', () => { - const tag = 'Dashboard' - const methods = api.tags[tag] - const specKey = '3.1' + const tag = 'Dashboard'; + const methods = api.tags[tag]; + const specKey = '4.0'; beforeEach(() => { - jest.clearAllMocks() - }) + jest.clearAllMocks(); + }); - test('it renders provided methods', () => { + test('it renders provided methods', async () => { renderWithRouterAndReduxProvider( - ) - userEvent.click(screen.getByText(tag)) - const sideNavItems = screen.getAllByRole('link') - expect(sideNavItems).toHaveLength(Object.keys(methods).length) + ); + await userEvent.click(screen.getByText(tag)); + const sideNavItems = screen.getAllByRole('link'); + expect(sideNavItems).toHaveLength(Object.keys(methods).length); expect(sideNavItems[0]).toHaveAttribute( 'href', `/${specKey}/methods/${tag}/${Object.values(methods)[0].name}` - ) - }) + ); + }); - test('tag expands and displays methods after clicked', () => { + test('tag expands and displays methods after clicked', async () => { renderWithRouterAndReduxProvider( - ) - const firstMethod = Object.values(methods)[0].schema.summary - expect(screen.queryByText(firstMethod)).not.toBeInTheDocument() - userEvent.click(screen.getByText(tag)) - expect(mockHistoryPush).toHaveBeenCalledWith(`/${specKey}/methods/${tag}`) - expect(screen.getByRole('link', { name: firstMethod })).toBeInTheDocument() + ); + const firstMethod = Object.values(methods)[0].schema.summary; + expect(screen.queryByText(firstMethod)).not.toBeInTheDocument(); + await userEvent.click(screen.getByText(tag)); + expect(mockHistoryPush).toHaveBeenCalledWith(`/${specKey}/methods/${tag}`); + expect(screen.getByRole('link', { name: firstMethod })).toBeInTheDocument(); expect(screen.getAllByRole('link')).toHaveLength( Object.values(methods).length - ) - }) + ); + }); - test('expanded tag closes when clicked', () => { + test('expanded tag closes when clicked', async () => { renderWithRouterAndReduxProvider( { specKey={specKey} defaultOpen={true} /> - ) - const firstMethod = Object.values(methods)[0].schema.summary - expect(screen.getByRole('link', { name: firstMethod })).toBeInTheDocument() + ); + const firstMethod = Object.values(methods)[0].schema.summary; + expect(screen.getByRole('link', { name: firstMethod })).toBeInTheDocument(); expect(screen.getAllByRole('link')).toHaveLength( Object.values(methods).length - ) - userEvent.click(screen.getByText(tag)) - expect(mockHistoryPush).toHaveBeenCalledWith(`/${specKey}/methods`) - expect(screen.queryByText(firstMethod)).not.toBeInTheDocument() - expect(screen.queryByRole('link')).not.toBeInTheDocument() - }) + ); + await userEvent.click(screen.getByText(tag)); + expect(mockHistoryPush).toHaveBeenCalledWith(`/${specKey}/methods`); + expect(screen.queryByText(firstMethod)).not.toBeInTheDocument(); + expect(screen.queryByRole('link')).not.toBeInTheDocument(); + }); - test('it highlights text matching search pattern in both tag and methods', () => { - const store = createTestStore({ settings: { searchPattern: 'dash' } }) + test('it highlights text matching search pattern in both tag and methods', async () => { + const store = createTestStore({ settings: { searchPattern: 'dash' } }); renderWithRouterAndReduxProvider( { />, undefined, store - ) - userEvent.click(screen.getByText('Dash')) - const matches = screen.getAllByText(/dash/i) - expect(matches).toHaveLength(2) + ); + await userEvent.click(screen.getByText('Dash')); + const matches = screen.getAllByText(/dash/i); + expect(matches).toHaveLength(2); matches.forEach((match) => { - expect(match).toContainHTML('Dash') - }) - }) -}) + expect(match).toContainHTML('Dash'); + }); + }); +}); diff --git a/packages/api-explorer/src/components/SideNav/SideNavMethods.tsx b/packages/api-explorer/src/components/SideNav/SideNavMethods.tsx index 2db5244b3..9bfcc84bf 100644 --- a/packages/api-explorer/src/components/SideNav/SideNavMethods.tsx +++ b/packages/api-explorer/src/components/SideNav/SideNavMethods.tsx @@ -24,49 +24,49 @@ */ -import React, { useEffect, useState } from 'react' -import styled from 'styled-components' -import { Accordion2, Heading } from '@looker/components' -import type { MethodList } from '@looker/sdk-codegen' -import { useSelector } from 'react-redux' -import { useRouteMatch } from 'react-router-dom' -import { useNavigation, highlightHTML, buildMethodPath } from '../../utils' -import { Link } from '../Link' -import { selectSearchPattern } from '../../state' +import React, { useEffect, useState } from 'react'; +import styled from 'styled-components'; +import { Accordion2, Heading } from '@looker/components'; +import type { MethodList } from '@looker/sdk-codegen'; +import { useSelector } from 'react-redux'; +import { useRouteMatch } from 'react-router-dom'; +import { buildMethodPath, highlightHTML, useNavigation } from '../../utils'; +import { Link } from '../Link'; +import { selectSearchPattern } from '../../state'; interface MethodsProps { - methods: MethodList - tag: string - specKey: string - className?: string - defaultOpen?: boolean + methods: MethodList; + tag: string; + specKey: string; + className?: string; + defaultOpen?: boolean; } export const SideNavMethods = styled( ({ className, methods, tag, specKey, defaultOpen = false }: MethodsProps) => { const { buildPathWithGlobalParams, navigateWithGlobalParams } = - useNavigation() - const searchPattern = useSelector(selectSearchPattern) + useNavigation(); + const searchPattern = useSelector(selectSearchPattern); const match = useRouteMatch<{ methodTag: string }>( `/:specKey/methods/:methodTag/:methodName?` - ) - const [isOpen, setIsOpen] = useState(defaultOpen) + ); + const [isOpen, setIsOpen] = useState(defaultOpen); const handleOpen = () => { - const _isOpen = !isOpen - setIsOpen(_isOpen) + const _isOpen = !isOpen; + setIsOpen(_isOpen); if (_isOpen) { - navigateWithGlobalParams(`/${specKey}/methods/${tag}`) + navigateWithGlobalParams(`/${specKey}/methods/${tag}`); } else { - navigateWithGlobalParams(`/${specKey}/methods`) + navigateWithGlobalParams(`/${specKey}/methods`); } - } + }; useEffect(() => { const status = match ? defaultOpen || match.params.methodTag === tag - : defaultOpen - setIsOpen(status) - }, [defaultOpen]) + : defaultOpen; + setIsOpen(status); + }, [defaultOpen]); /* TODO: Fix highlighting. It is applied but it is somehow being overridden */ return ( @@ -94,7 +94,7 @@ export const SideNavMethods = styled( ))} - ) + ); } )` font-family: ${({ theme }) => theme.fonts.brand}; @@ -139,4 +139,4 @@ export const SideNavMethods = styled( background: ${({ theme }) => theme.colors.ui1}; } } -` +`; diff --git a/packages/api-explorer/src/components/SideNav/SideNavTypeTags.spec.tsx b/packages/api-explorer/src/components/SideNav/SideNavTypeTags.spec.tsx index e01d9408d..93db5f659 100644 --- a/packages/api-explorer/src/components/SideNav/SideNavTypeTags.spec.tsx +++ b/packages/api-explorer/src/components/SideNav/SideNavTypeTags.spec.tsx @@ -24,56 +24,56 @@ */ -import React from 'react' -import pick from 'lodash/pick' -import { screen } from '@testing-library/react' -import userEvent from '@testing-library/user-event' +import React from 'react'; +import pick from 'lodash/pick'; +import { screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; -import { api } from '../../test-data' -import { renderWithRouterAndReduxProvider } from '../../test-utils' -import { SideNavTypeTags } from './SideNavTypeTags' +import { api } from '../../test-data'; +import { renderWithRouterAndReduxProvider } from '../../test-utils'; +import { SideNavTypeTags } from './SideNavTypeTags'; describe('SideNavTypeTags', () => { - const tags = pick(api.typeTags, ['ApiAuth', 'Dashboard']) - test('it renders a provided tag and its methods', () => { + const tags = pick(api.typeTags, ['ApiAuth', 'Dashboard']); + test('it renders a provided tag and its methods', async () => { renderWithRouterAndReduxProvider( - - ) - const tag = screen.getByText('Dashboard') - const tagContent = 'CreateDashboardFilter' - expect(screen.queryByText(tagContent)).not.toBeInTheDocument() - userEvent.click(tag) - expect(screen.getByText(tagContent)).toBeInTheDocument() - const methods = screen.getAllByRole('link') - expect(methods).toHaveLength(Object.keys(tags.Dashboard).length) - }) + + ); + const tag = screen.getByText('Dashboard'); + const tagContent = 'CreateDashboardFilter'; + expect(screen.queryByText(tagContent)).not.toBeInTheDocument(); + await userEvent.click(tag); + expect(screen.getByText(tagContent)).toBeInTheDocument(); + const methods = screen.getAllByRole('link'); + expect(methods).toHaveLength(Object.keys(tags.Dashboard).length); + }); - test('tags are rendered initially collapsed and expand when clicked', () => { + test('tags are rendered initially collapsed and expand when clicked', async () => { renderWithRouterAndReduxProvider( - - ) + + ); - const allTags = screen.getAllByText(/ApiAuth|Dashboard/) - expect(allTags).toHaveLength(2) - expect(screen.queryByText('AccessToken')).not.toBeInTheDocument() - expect(screen.queryByText('CreateDashboardFilter')).not.toBeInTheDocument() - userEvent.click(allTags[0]) - expect(screen.getByText('AccessToken')).toBeInTheDocument() - expect(screen.queryByText('CreateDashboardFilter')).not.toBeInTheDocument() - }) + const allTags = screen.getAllByText(/ApiAuth|Dashboard/); + expect(allTags).toHaveLength(2); + expect(screen.queryByText('AccessToken')).not.toBeInTheDocument(); + expect(screen.queryByText('CreateDashboardFilter')).not.toBeInTheDocument(); + await userEvent.click(allTags[0]); + expect(screen.getByText('AccessToken')).toBeInTheDocument(); + expect(screen.queryByText('CreateDashboardFilter')).not.toBeInTheDocument(); + }); test('tag is expanded if specified in route', () => { - const tags = pick(api.typeTags, ['ApiAuth', 'DataAction']) + const tags = pick(api.typeTags, ['ApiAuth', 'DataAction']); renderWithRouterAndReduxProvider( - , - ['/3.1/types/DataAction'] - ) + , + ['/4.0/types/DataAction'] + ); - const allTags = screen.getAllByText(/^(ApiAuth|DataAction)$/) - expect(allTags).toHaveLength(2) - expect(screen.queryByText('AccessToken')).not.toBeInTheDocument() + const allTags = screen.getAllByText(/^(ApiAuth|DataAction)$/); + expect(allTags).toHaveLength(2); + expect(screen.queryByText('AccessToken')).not.toBeInTheDocument(); expect(screen.getAllByRole('link')).toHaveLength( Object.keys(tags.DataAction).length - ) - }) -}) + ); + }); +}); diff --git a/packages/api-explorer/src/components/SideNav/SideNavTypeTags.tsx b/packages/api-explorer/src/components/SideNav/SideNavTypeTags.tsx index bd55c964c..208044fbf 100644 --- a/packages/api-explorer/src/components/SideNav/SideNavTypeTags.tsx +++ b/packages/api-explorer/src/components/SideNav/SideNavTypeTags.tsx @@ -24,16 +24,16 @@ */ -import React from 'react' -import styled from 'styled-components' -import type { TypeTagList } from '@looker/sdk-codegen' -import { SideNavTypes } from './SideNavTypes' +import React from 'react'; +import styled from 'styled-components'; +import type { TypeTagList } from '@looker/sdk-codegen'; +import { SideNavTypes } from './SideNavTypes'; interface TypeTagsProps { - tags: TypeTagList - specKey: string - defaultOpen?: boolean - className?: string + tags: TypeTagList; + specKey: string; + defaultOpen?: boolean; + className?: string; } export const SideNavTypeTags = styled( @@ -52,4 +52,4 @@ export const SideNavTypeTags = styled( ) )` padding: 0 ${({ theme }) => theme.space.large}; -` +`; diff --git a/packages/api-explorer/src/components/SideNav/SideNavTypes.spec.tsx b/packages/api-explorer/src/components/SideNav/SideNavTypes.spec.tsx index ac4a7baeb..630168901 100644 --- a/packages/api-explorer/src/components/SideNav/SideNavTypes.spec.tsx +++ b/packages/api-explorer/src/components/SideNav/SideNavTypes.spec.tsx @@ -23,55 +23,55 @@ SOFTWARE. */ -import React from 'react' -import { screen } from '@testing-library/react' +import React from 'react'; +import { screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event' -import { api } from '../../test-data' +import userEvent from '@testing-library/user-event'; +import { api } from '../../test-data'; import { createTestStore, renderWithRouterAndReduxProvider, -} from '../../test-utils' -import { SideNavTypes } from './SideNavTypes' +} from '../../test-utils'; +import { SideNavTypes } from './SideNavTypes'; -const mockHistoryPush = jest.fn() +const mockHistoryPush = jest.fn(); jest.mock('react-router-dom', () => { - const ReactRouterDOM = jest.requireActual('react-router-dom') + const ReactRouterDOM = jest.requireActual('react-router-dom'); return { ...ReactRouterDOM, useHistory: () => ({ push: mockHistoryPush, location: globalThis.location, }), - } -}) + }; +}); describe('SideNavTypes', () => { - const tag = 'Dashboard' - const specKey = '3.1' - const typeTags = Object.keys(api.typeTags[tag]) + const tag = 'Dashboard'; + const specKey = '4.0'; + const typeTags = Object.keys(api.typeTags[tag]); test('it renders provided types', () => { renderWithRouterAndReduxProvider( - ) - expect(screen.getByRole('heading', { level: 4 })).toHaveTextContent(tag) - }) + ); + expect(screen.getByRole('heading', { level: 4 })).toHaveTextContent(tag); + }); - test('tag expands and displays types after clicked', () => { + test('tag expands and displays types after clicked', async () => { renderWithRouterAndReduxProvider( - ) - expect(screen.queryByText(typeTags[0])).not.toBeInTheDocument() - userEvent.click(screen.getByText(tag)) + ); + expect(screen.queryByText(typeTags[0])).not.toBeInTheDocument(); + await userEvent.click(screen.getByText(tag)); expect(mockHistoryPush).toHaveBeenCalledWith({ pathname: `/${specKey}/types/${tag}`, search: '', - }) - expect(screen.getByRole('link', { name: typeTags[0] })).toBeInTheDocument() - }) + }); + expect(screen.getByRole('link', { name: typeTags[0] })).toBeInTheDocument(); + }); - test('expanded tag closes when clicked', () => { + test('expanded tag closes when clicked', async () => { renderWithRouterAndReduxProvider( { specKey={specKey} defaultOpen={true} /> - ) - expect(screen.getByRole('link', { name: typeTags[0] })).toBeInTheDocument() - userEvent.click(screen.getAllByText(tag)[0]) + ); + expect(screen.getByRole('link', { name: typeTags[0] })).toBeInTheDocument(); + await userEvent.click(screen.getAllByText(tag)[0]); expect(mockHistoryPush).toHaveBeenCalledWith({ pathname: `/${specKey}/types`, search: '', - }) + }); expect( screen.queryByRole('link', { name: typeTags[0] }) - ).not.toBeInTheDocument() - }) + ).not.toBeInTheDocument(); + }); test('it highlights text matching search pattern', () => { - const store = createTestStore({ settings: { searchPattern: 'dash' } }) + const store = createTestStore({ settings: { searchPattern: 'dash' } }); renderWithRouterAndReduxProvider( { />, undefined, store - ) - const match = screen.getByText(/dash/i) - expect(match).toContainHTML('Dash') - }) -}) + ); + const match = screen.getByText(/dash/i); + expect(match).toContainHTML('Dash'); + }); +}); diff --git a/packages/api-explorer/src/components/SideNav/SideNavTypes.tsx b/packages/api-explorer/src/components/SideNav/SideNavTypes.tsx index 8f5dd0459..35597b864 100644 --- a/packages/api-explorer/src/components/SideNav/SideNavTypes.tsx +++ b/packages/api-explorer/src/components/SideNav/SideNavTypes.tsx @@ -24,48 +24,48 @@ */ -import React, { useEffect, useState } from 'react' -import styled from 'styled-components' -import { Accordion2, Heading } from '@looker/components' -import type { TypeList } from '@looker/sdk-codegen' -import { useRouteMatch } from 'react-router-dom' -import { useSelector } from 'react-redux' -import { Link } from '../Link' -import { highlightHTML, useNavigation, buildTypePath } from '../../utils' -import { selectSearchPattern } from '../../state' +import React, { useEffect, useState } from 'react'; +import styled from 'styled-components'; +import { Accordion2, Heading } from '@looker/components'; +import type { TypeList } from '@looker/sdk-codegen'; +import { useRouteMatch } from 'react-router-dom'; +import { useSelector } from 'react-redux'; +import { Link } from '../Link'; +import { buildTypePath, highlightHTML, useNavigation } from '../../utils'; +import { selectSearchPattern } from '../../state'; interface TypesProps { - types: TypeList - tag: string - specKey: string - className?: string - defaultOpen?: boolean + types: TypeList; + tag: string; + specKey: string; + className?: string; + defaultOpen?: boolean; } export const SideNavTypes = styled( ({ className, types, tag, specKey, defaultOpen = false }: TypesProps) => { - const { navigate, buildPathWithGlobalParams } = useNavigation() - const searchPattern = useSelector(selectSearchPattern) + const { navigate, buildPathWithGlobalParams } = useNavigation(); + const searchPattern = useSelector(selectSearchPattern); const match = useRouteMatch<{ typeTag: string }>( `/:specKey/types/:typeTag/:typeName?` - ) - const [isOpen, setIsOpen] = useState(defaultOpen) + ); + const [isOpen, setIsOpen] = useState(defaultOpen); const handleOpen = () => { - const _isOpen = !isOpen - setIsOpen(_isOpen) + const _isOpen = !isOpen; + setIsOpen(_isOpen); if (_isOpen) { - navigate(`/${specKey}/types/${tag}`) + navigate(`/${specKey}/types/${tag}`); } else { - navigate(`/${specKey}/types`) + navigate(`/${specKey}/types`); } - } + }; useEffect(() => { const status = match ? defaultOpen || match.params.typeTag === tag - : defaultOpen - setIsOpen(status) - }, [defaultOpen]) + : defaultOpen; + setIsOpen(status); + }, [defaultOpen]); /* TODO: Fix highlighting. It is applied but it is somehow being overridden */ return ( @@ -93,7 +93,7 @@ export const SideNavTypes = styled( ))} - ) + ); } )` font-family: ${({ theme }) => theme.fonts.brand}; @@ -138,4 +138,4 @@ export const SideNavTypes = styled( background: ${({ theme }) => theme.colors.ui1}; } } -` +`; diff --git a/packages/api-explorer/src/components/SideNav/index.ts b/packages/api-explorer/src/components/SideNav/index.ts index 75ab69220..8326f5601 100644 --- a/packages/api-explorer/src/components/SideNav/index.ts +++ b/packages/api-explorer/src/components/SideNav/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { SideNav } from './SideNav' +export { SideNav } from './SideNav'; diff --git a/packages/api-explorer/src/components/SideNav/searchUtils.ts b/packages/api-explorer/src/components/SideNav/searchUtils.ts index c531d7abe..4f402d756 100644 --- a/packages/api-explorer/src/components/SideNav/searchUtils.ts +++ b/packages/api-explorer/src/components/SideNav/searchUtils.ts @@ -24,30 +24,30 @@ */ -import { useState, useEffect } from 'react' -import type { TagList, TypeList } from '@looker/sdk-codegen' +import { useEffect, useState } from 'react'; +import type { TagList, TypeList } from '@looker/sdk-codegen'; export const useDebounce = (value: T, delay: number): T => { - const [debouncedValue, setDebouncedValue] = useState(value) + const [debouncedValue, setDebouncedValue] = useState(value); useEffect(() => { // Update debounced value only once delay has been elapsed const handler = setTimeout(() => { - setDebouncedValue(value) - }, delay) + setDebouncedValue(value); + }, delay); // Reset the timeout on receiving a new keyword return () => { - clearTimeout(handler) - } - }, [value]) - return debouncedValue -} + clearTimeout(handler); + }; + }, [value]); + return debouncedValue; +}; export const countMethods = (tags: TagList) => { - let result = 0 + let result = 0; Object.values(tags).forEach((methods) => { - result += Object.entries(methods).length - }) - return result -} + result += Object.entries(methods).length; + }); + return result; +}; -export const countTypes = (types: TypeList) => Object.entries(types).length +export const countTypes = (types: TypeList) => Object.entries(types).length; diff --git a/packages/api-explorer/src/components/common/Loader.tsx b/packages/api-explorer/src/components/common/Loader.tsx index d52cbb364..54990a2b9 100644 --- a/packages/api-explorer/src/components/common/Loader.tsx +++ b/packages/api-explorer/src/components/common/Loader.tsx @@ -23,20 +23,20 @@ SOFTWARE. */ -import type { FC } from 'react' -import React from 'react' +import type { FC } from 'react'; +import React from 'react'; import { ComponentsProvider, Flex, FlexItem, Heading, ProgressCircular, -} from '@looker/components' -import type { ThemeOverrides } from '@looker/extension-utils' +} from '@looker/components'; +import type { ThemeOverrides } from '@looker/extension-utils'; export interface LoaderProps { - themeOverrides: ThemeOverrides - message?: string + themeOverrides: ThemeOverrides; + message?: string; } export const Loader: FC = ({ @@ -55,4 +55,4 @@ export const Loader: FC = ({ -) +); diff --git a/packages/api-explorer/src/components/common/common.tsx b/packages/api-explorer/src/components/common/common.tsx index c511e4275..2e55d7dd1 100644 --- a/packages/api-explorer/src/components/common/common.tsx +++ b/packages/api-explorer/src/components/common/common.tsx @@ -23,25 +23,25 @@ SOFTWARE. */ -import type { FC } from 'react' -import React, { useEffect } from 'react' -import type { SectionProps } from '@looker/components' -import { Section } from '@looker/components' -import { useWindowSize } from '../../utils' -import { HEADER_REM } from '../Header' +import type { FC } from 'react'; +import React, { useEffect } from 'react'; +import type { SectionProps } from '@looker/components'; +import { Section } from '@looker/components'; +import { useWindowSize } from '../../utils'; +import { HEADER_REM } from '../Header'; -export const REM_TO_PX = 16 +export const REM_TO_PX = 16; /** * Extends the looker Section to proper height and scrolls to top on use * @param props - anything you want, but probably SectionProps */ export const ApixSection: FC = (props: any) => { - const size = useWindowSize() - const sectionH = size.height - REM_TO_PX * HEADER_REM + const size = useWindowSize(); + const sectionH = size.height - REM_TO_PX * HEADER_REM; useEffect(() => { - document.getElementById('top')?.scrollTo(REM_TO_PX * HEADER_REM, 0) - }, [props]) + document.getElementById('top')?.scrollTo(REM_TO_PX * HEADER_REM, 0); + }, [props]); return (
= (props: any) => { p="xxlarge" style={{ height: `${sectionH}px`, overflow: 'auto', borderTop: '0px' }} /> - ) -} + ); +}; diff --git a/packages/api-explorer/src/components/common/index.ts b/packages/api-explorer/src/components/common/index.ts index 7c5f084ce..f381a9ca1 100644 --- a/packages/api-explorer/src/components/common/index.ts +++ b/packages/api-explorer/src/components/common/index.ts @@ -23,5 +23,5 @@ SOFTWARE. */ -export * from './common' -export * from './Loader' +export * from './common'; +export * from './Loader'; diff --git a/packages/api-explorer/src/components/index.ts b/packages/api-explorer/src/components/index.ts index 640add792..54c50f6ff 100644 --- a/packages/api-explorer/src/components/index.ts +++ b/packages/api-explorer/src/components/index.ts @@ -23,25 +23,25 @@ SOFTWARE. */ -export { ApixSection, Loader } from './common' -export { DocActivityType } from './DocActivityType' -export { DocCode } from './DocCode' -export { DocMethodSummary, DocSummaryStatus } from './DocMethodSummary' -export { DocMarkdown } from './DocMarkdown' -export { DocPseudo } from './DocPseudo' -export { DocRateLimited } from './DocRateLimited' -export { DocReferences } from './DocReferences' -export { DocSDKs } from './DocSDKs' -export { DocSdkUsage } from './DocSdkUsage' -export { DocSource } from './DocSource' -export { DocStatus } from './DocStatus' -export { DocTitle } from './DocTitle' -export { Header, HEADER_TOGGLE_LABEL } from './Header' -export { SideNav } from './SideNav' -export { ExploreType, ExploreProperty } from './ExploreType' -export { DocSchema } from './DocSchema' -export { DocTypeSummary } from './DocTypeSummary' -export { Link } from './Link' -export { ErrorBoundary } from './ErrorBoundary' -export { SelectorContainer } from './SelectorContainer' -export { Banner } from './Banner' +export { ApixSection, Loader } from './common'; +export { DocActivityType } from './DocActivityType'; +export { DocCode } from './DocCode'; +export { DocMethodSummary, DocSummaryStatus } from './DocMethodSummary'; +export { DocMarkdown } from './DocMarkdown'; +export { DocPseudo } from './DocPseudo'; +export { DocRateLimited } from './DocRateLimited'; +export { DocReferences } from './DocReferences'; +export { DocSDKs } from './DocSDKs'; +export { DocSdkUsage } from './DocSdkUsage'; +export { DocSource } from './DocSource'; +export { DocStatus } from './DocStatus'; +export { DocTitle } from './DocTitle'; +export { Header, HEADER_TOGGLE_LABEL } from './Header'; +export { SideNav } from './SideNav'; +export { ExploreType, ExploreProperty } from './ExploreType'; +export { DocSchema } from './DocSchema'; +export { DocTypeSummary } from './DocTypeSummary'; +export { Link } from './Link'; +export { ErrorBoundary } from './ErrorBoundary'; +export { SelectorContainer } from './SelectorContainer'; +export { Banner } from './Banner'; diff --git a/packages/api-explorer/src/custom.d.ts b/packages/api-explorer/src/custom.d.ts index 9b9471da0..091d25e21 100644 --- a/packages/api-explorer/src/custom.d.ts +++ b/packages/api-explorer/src/custom.d.ts @@ -1,4 +1,4 @@ declare module '*.svg' { - const content: any - export default content + const content: any; + export default content; } diff --git a/packages/api-explorer/src/index.ts b/packages/api-explorer/src/index.ts index 63db161ef..d503f6f50 100644 --- a/packages/api-explorer/src/index.ts +++ b/packages/api-explorer/src/index.ts @@ -23,8 +23,8 @@ SOFTWARE. */ -export * from './ApiExplorer' -export * from './StandaloneApiExplorer' -export * from './components' -export * from './state' -export * from './utils' +export * from './ApiExplorer'; +export * from './StandaloneApiExplorer'; +export * from './components'; +export * from './state'; +export * from './utils'; diff --git a/packages/api-explorer/src/routes/AppRouter.tsx b/packages/api-explorer/src/routes/AppRouter.tsx index 86bf06084..1808b259a 100644 --- a/packages/api-explorer/src/routes/AppRouter.tsx +++ b/packages/api-explorer/src/routes/AppRouter.tsx @@ -24,10 +24,10 @@ */ -import type { FC } from 'react' -import React from 'react' -import { Redirect, Route, Switch } from 'react-router-dom' -import type { ApiModel } from '@looker/sdk-codegen' +import type { FC } from 'react'; +import React from 'react'; +import { Redirect, Route, Switch } from 'react-router-dom'; +import type { ApiModel } from '@looker/sdk-codegen'; import { ErrorDetailScene, @@ -36,14 +36,14 @@ import { MethodTagScene, TypeScene, TypeTagScene, -} from '../scenes' -import { DiffScene } from '../scenes/DiffScene' -import { diffPath } from '../utils' +} from '../scenes'; +import { DiffScene } from '../scenes/DiffScene'; +import { diffPath } from '../utils'; interface AppRouterProps { - specKey: string - api: ApiModel - toggleNavigation: (target?: boolean) => void + specKey: string; + api: ApiModel; + toggleNavigation: (target?: boolean) => void; } export const AppRouter: FC = ({ @@ -75,4 +75,4 @@ export const AppRouter: FC = ({ -) +); diff --git a/packages/api-explorer/src/routes/index.ts b/packages/api-explorer/src/routes/index.ts index 3975a8a59..0a69aea75 100644 --- a/packages/api-explorer/src/routes/index.ts +++ b/packages/api-explorer/src/routes/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { AppRouter } from './AppRouter' +export { AppRouter } from './AppRouter'; diff --git a/packages/api-explorer/src/scenes/DiffScene/DiffScene.tsx b/packages/api-explorer/src/scenes/DiffScene/DiffScene.tsx index 196a22f72..32d992cf0 100644 --- a/packages/api-explorer/src/scenes/DiffScene/DiffScene.tsx +++ b/packages/api-explorer/src/scenes/DiffScene/DiffScene.tsx @@ -24,10 +24,10 @@ */ -import type { FC } from 'react' -import React, { useState, useEffect } from 'react' -import type { ApiModel, DiffRow, SpecList } from '@looker/sdk-codegen' -import { useRouteMatch } from 'react-router-dom' +import type { FC } from 'react'; +import React, { useEffect, useState } from 'react'; +import type { ApiModel, DiffRow, SpecList } from '@looker/sdk-codegen'; +import { useRouteMatch } from 'react-router-dom'; import { Box, Flex, @@ -36,15 +36,15 @@ import { Label, Select, SelectMulti, -} from '@looker/components' -import { SyncAlt } from '@styled-icons/material/SyncAlt' -import { useSelector } from 'react-redux' +} from '@looker/components'; +import { SyncAlt } from '@styled-icons/material/SyncAlt'; +import { useSelector } from 'react-redux'; -import { ApixSection } from '../../components' -import { selectCurrentSpec, selectSpecs } from '../../state' -import { diffPath, getApixAdaptor, useNavigation } from '../../utils' -import { diffSpecs, standardDiffToggles } from './diffUtils' -import { DocDiff } from './DocDiff' +import { ApixSection } from '../../components'; +import { selectCurrentSpec, selectSpecs } from '../../state'; +import { diffPath, getApixAdaptor, useNavigation } from '../../utils'; +import { diffSpecs, standardDiffToggles } from './diffUtils'; +import { DocDiff } from './DocDiff'; const diffToggles = [ { @@ -71,88 +71,88 @@ const diffToggles = [ label: 'Response', value: 'response', }, -] +]; export interface DiffSceneProps { - toggleNavigation: (target?: boolean) => void + toggleNavigation: (target?: boolean) => void; } const validateParam = (specs: SpecList, specKey = '') => { - return specs[specKey] ? specKey : '' -} + return specs[specKey] ? specKey : ''; +}; export const DiffScene: FC = ({ toggleNavigation }) => { - const adaptor = getApixAdaptor() - const { navigate } = useNavigation() - const spec = useSelector(selectCurrentSpec) - const specs = useSelector(selectSpecs) - const currentSpecKey = spec.key - const match = useRouteMatch<{ l: string; r: string }>(`/:l/${diffPath}/:r?`) - const l = validateParam(specs, match?.params.l) - const r = validateParam(specs, match?.params.r) + const adaptor = getApixAdaptor(); + const { navigate } = useNavigation(); + const spec = useSelector(selectCurrentSpec); + const specs = useSelector(selectSpecs); + const currentSpecKey = spec.key; + const match = useRouteMatch<{ l: string; r: string }>(`/:l/${diffPath}/:r?`); + const l = validateParam(specs, match?.params.l); + const r = validateParam(specs, match?.params.r); const options = Object.entries(specs).map(([key, spec]) => ({ value: key, label: `${key} (${spec.status})`, - })) + })); - const [leftKey, setLeftKey] = useState(l || currentSpecKey) - const [rightKey, setRightKey] = useState(r || '') - const [leftApi, setLeftApi] = useState(specs[leftKey].api!) + const [leftKey, setLeftKey] = useState(l || currentSpecKey); + const [rightKey, setRightKey] = useState(r || ''); + const [leftApi, setLeftApi] = useState(specs[leftKey].api!); const [rightApi, setRightApi] = useState(() => rightKey ? specs[rightKey].api! : specs[leftKey].api! - ) - const [toggles, setToggles] = useState(standardDiffToggles) + ); + const [toggles, setToggles] = useState(standardDiffToggles); useEffect(() => { if (r !== rightKey) { - setRightKey(r) + setRightKey(r); } - }, [r, rightKey]) + }, [r, rightKey]); useEffect(() => { if (l !== leftKey) { - setLeftKey(l) + setLeftKey(l); } - }, [l, leftKey]) + }, [l, leftKey]); useEffect(() => { - toggleNavigation(false) - }, []) + toggleNavigation(false); + }, []); - const [delta, setDelta] = useState([]) + const [delta, setDelta] = useState([]); const handleLeftChange = (newLeft: string) => { - navigate(`/${newLeft}/${diffPath}/${rightKey}`) - } + navigate(`/${newLeft}/${diffPath}/${rightKey}`); + }; const handleRightChange = (newRight: string) => { - navigate(`/${leftKey}/${diffPath}/${newRight}`) - } + navigate(`/${leftKey}/${diffPath}/${newRight}`); + }; const handleSwitch = () => { - navigate(`/${rightKey}/${diffPath}/${leftKey}`) - } + navigate(`/${rightKey}/${diffPath}/${leftKey}`); + }; useEffect(() => { - adaptor.fetchSpec(specs[leftKey]).then((spec) => setLeftApi(spec.api!)) - }, [leftKey]) + adaptor.fetchSpec(specs[leftKey]).then((spec) => setLeftApi(spec.api!)); + }, [leftKey]); useEffect(() => { if (rightKey in specs) { - adaptor.fetchSpec(specs[rightKey]).then((spec) => setRightApi(spec.api!)) + adaptor.fetchSpec(specs[rightKey]).then((spec) => setRightApi(spec.api!)); } - }, [rightKey]) + }, [rightKey]); useEffect(() => { if (leftApi && rightApi) { - setDelta([...diffSpecs(leftApi, rightApi, toggles)]) + setDelta([...diffSpecs(leftApi, rightApi, toggles)]); } - }, [leftApi, rightApi, toggles]) + }, [leftApi, rightApi, toggles]); const handleTogglesChange = (values?: string[]) => { - const newToggles = values || [] - setToggles(newToggles) - } + const newToggles = values || []; + setToggles(newToggles); + }; return ( @@ -212,5 +212,5 @@ export const DiffScene: FC = ({ toggleNavigation }) => { rightSpec={rightApi} /> - ) -} + ); +}; diff --git a/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffBanner.tsx b/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffBanner.tsx index 38a91d3ea..165c825a4 100644 --- a/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffBanner.tsx +++ b/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffBanner.tsx @@ -23,15 +23,15 @@ SOFTWARE. */ -import type { FC } from 'react' -import React from 'react' -import { Grid, Flex, FlexItem, Code, Heading } from '@looker/components' -import type { DiffRow, IMethod } from '@looker/sdk-codegen' -import { DiffLegend } from './DiffLegend' +import type { FC } from 'react'; +import React from 'react'; +import { Code, Flex, FlexItem, Grid, Heading } from '@looker/components'; +import type { DiffRow, IMethod } from '@looker/sdk-codegen'; +import { DiffLegend } from './DiffLegend'; interface DiffBannerProps { - item: DiffRow - method: IMethod + item: DiffRow; + method: IMethod; } export const DiffBanner: FC = ({ item, method }) => ( @@ -53,4 +53,4 @@ export const DiffBanner: FC = ({ item, method }) => ( -) +); diff --git a/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffItem.spec.tsx b/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffItem.spec.tsx index 01109034c..5a809d10d 100644 --- a/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffItem.spec.tsx +++ b/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffItem.spec.tsx @@ -23,48 +23,48 @@ SOFTWARE. */ -import React from 'react' -import { Router } from 'react-router' -import type { MemoryHistory } from 'history' -import { createMemoryHistory } from 'history' -import { renderWithTheme } from '@looker/components-test-utils' -import { screen, fireEvent } from '@testing-library/react' -import { api } from '../../../test-data' -import { DiffMethodLink } from './DiffItem' +import React from 'react'; +import { Router } from 'react-router'; +import type { MemoryHistory } from 'history'; +import { createMemoryHistory } from 'history'; +import { renderWithTheme } from '@looker/components-test-utils'; +import { fireEvent, screen } from '@testing-library/react'; +import { api } from '../../../test-data'; +import { DiffMethodLink } from './DiffItem'; describe('DiffMethodLink', () => { - const method = api.methods.create_dashboard - const specKey = '4.0' - let history: MemoryHistory + const method = api.methods.create_dashboard; + const specKey = '4.0'; + let history: MemoryHistory; beforeEach(() => { - history = createMemoryHistory() - }) + history = createMemoryHistory(); + }); test('it renders method and navigates on click', () => { - const pushSpy = jest.spyOn(history, 'push') + const pushSpy = jest.spyOn(history, 'push'); renderWithTheme( - ) - const link = screen.getByRole('link') - expect(link).toHaveTextContent(`${method.name} for ${specKey}`) - fireEvent.click(link) + ); + const link = screen.getByRole('link'); + expect(link).toHaveTextContent(`${method.name} for ${specKey}`); + fireEvent.click(link); expect(pushSpy).toHaveBeenCalledWith({ pathname: `/${specKey}/methods/${method.schema.tags[0]}/${method.name}`, search: '', - }) - }) + }); + }); test('it renders missing method and does not navigate on click', () => { renderWithTheme( - ) - const s = `Missing in ${specKey}` - expect(screen.getByText(s)).toBeInTheDocument() - expect(screen.queryByRole('link')).not.toBeInTheDocument() - }) -}) + ); + const s = `Missing in ${specKey}`; + expect(screen.getByText(s)).toBeInTheDocument(); + expect(screen.queryByRole('link')).not.toBeInTheDocument(); + }); +}); diff --git a/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffItem.tsx b/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffItem.tsx index be5536d26..c934ab6c4 100644 --- a/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffItem.tsx +++ b/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffItem.tsx @@ -23,22 +23,22 @@ SOFTWARE. */ -import type { FC } from 'react' -import React, { useState, useEffect } from 'react' -import ReactDiffViewer, { DiffMethod } from 'react-diff-viewer' -import styled from 'styled-components' -import { Accordion2, Box, Card, Grid, Heading, Link } from '@looker/components' -import type { DiffRow } from '@looker/sdk-codegen/src' -import type { ApiModel, IMethod } from '@looker/sdk-codegen' -import { useSelector } from 'react-redux' -import { selectSdkLanguage } from '../../../state' -import { buildMethodPath, useNavigation } from '../../../utils' -import { DiffBanner } from './DiffBanner' -import { differ } from './docDiffUtils' +import type { FC } from 'react'; +import React, { useEffect, useState } from 'react'; +import ReactDiffViewer, { DiffMethod } from 'react-diff-viewer'; +import styled from 'styled-components'; +import { Accordion2, Box, Card, Grid, Heading, Link } from '@looker/components'; +import type { DiffRow } from '@looker/sdk-codegen/src'; +import type { ApiModel, IMethod } from '@looker/sdk-codegen'; +import { useSelector } from 'react-redux'; +import { selectSdkLanguage } from '../../../state'; +import { buildMethodPath, useNavigation } from '../../../utils'; +import { DiffBanner } from './DiffBanner'; +import { differ } from './docDiffUtils'; interface DiffMethodLinkProps { - method: IMethod | undefined - specKey: string + method: IMethod | undefined; + specKey: string; } const DiffLink = styled(Link)` @@ -53,35 +53,35 @@ const DiffLink = styled(Link)` color: ${({ theme }) => theme.colors.key}; cursor: pointer; } -` +`; export const DiffMethodLink: FC = ({ method, specKey, }) => { - const { navigate } = useNavigation() + const { navigate } = useNavigation(); - if (!method) return {`Missing in ${specKey}`} + if (!method) return {`Missing in ${specKey}`}; - const tag = method.schema.tags[0] - const path = `${buildMethodPath(specKey, tag, method.name)}` + const tag = method.schema.tags[0]; + const path = `${buildMethodPath(specKey, tag, method.name)}`; return ( { - navigate(path) + navigate(path); }} >{`${method.name} for ${specKey}`} - ) -} + ); +}; interface DiffItemProps { - item: DiffRow - leftKey: string - rightKey: string - leftSpec: ApiModel - rightSpec: ApiModel + item: DiffRow; + leftKey: string; + rightKey: string; + leftSpec: ApiModel; + rightSpec: ApiModel; } export const DiffItem: FC = ({ @@ -91,32 +91,32 @@ export const DiffItem: FC = ({ rightKey, rightSpec, }) => { - const selectedSdkLanguage = useSelector(selectSdkLanguage) + const selectedSdkLanguage = useSelector(selectSdkLanguage); const [leftMethod, setLeftMethod] = useState( leftSpec.methods[item.name] - ) + ); const [rightMethod, setRightMethod] = useState( rightSpec.methods[item.name] - ) - const [method, setMethod] = useState((leftMethod || rightMethod)!) - const [isOpen, setIsOpen] = useState(false) - const [leftSide, setLeftSide] = useState('') - const [rightSide, setRightSide] = useState('') + ); + const [method, setMethod] = useState((leftMethod || rightMethod)!); + const [isOpen, setIsOpen] = useState(false); + const [leftSide, setLeftSide] = useState(''); + const [rightSide, setRightSide] = useState(''); useEffect(() => { - const { lhs, rhs } = differ(item, leftSpec, rightSpec, selectedSdkLanguage) - const lMethod = leftSpec.methods[item.name] - const rMethod = rightSpec.methods[item.name] - setLeftMethod(lMethod) - setRightMethod(rMethod) - setMethod((lMethod || rMethod)!) - setLeftSide(lhs) - setRightSide(rhs) - }, [leftSpec, rightSpec, isOpen, selectedSdkLanguage]) + const { lhs, rhs } = differ(item, leftSpec, rightSpec, selectedSdkLanguage); + const lMethod = leftSpec.methods[item.name]; + const rMethod = rightSpec.methods[item.name]; + setLeftMethod(lMethod); + setRightMethod(rMethod); + setMethod((lMethod || rMethod)!); + setLeftSide(lhs); + setRightSide(rhs); + }, [leftSpec, rightSpec, isOpen, selectedSdkLanguage]); const handleOpen = () => { - setIsOpen(!isOpen) - } + setIsOpen(!isOpen); + }; return ( @@ -143,5 +143,5 @@ export const DiffItem: FC = ({ /> - ) -} + ); +}; diff --git a/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffLegend.tsx b/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffLegend.tsx index 153679280..890a2a3f3 100644 --- a/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffLegend.tsx +++ b/packages/api-explorer/src/scenes/DiffScene/DocDiff/DiffLegend.tsx @@ -23,16 +23,16 @@ SOFTWARE. */ -import type { FC } from 'react' -import React from 'react' -import type { DiffCount } from '@looker/sdk-codegen' -import { Code, Flex, Icon, Space } from '@looker/components' -import { Add } from '@styled-icons/material/Add' -import { ChangeHistory } from '@styled-icons/material/ChangeHistory' -import { Remove } from '@styled-icons/material/Remove' +import type { FC } from 'react'; +import React from 'react'; +import type { DiffCount } from '@looker/sdk-codegen'; +import { Code, Flex, Icon, Space } from '@looker/components'; +import { Add } from '@styled-icons/material/Add'; +import { ChangeHistory } from '@styled-icons/material/ChangeHistory'; +import { Remove } from '@styled-icons/material/Remove'; interface DiffLegendProps { - count: DiffCount + count: DiffCount; } export const DiffLegend: FC = ({ count }) => { @@ -63,5 +63,5 @@ export const DiffLegend: FC = ({ count }) => { )} - ) -} + ); +}; diff --git a/packages/api-explorer/src/scenes/DiffScene/DocDiff/DocDiff.spec.tsx b/packages/api-explorer/src/scenes/DiffScene/DocDiff/DocDiff.spec.tsx index 83d1636f6..a600cfe74 100644 --- a/packages/api-explorer/src/scenes/DiffScene/DocDiff/DocDiff.spec.tsx +++ b/packages/api-explorer/src/scenes/DiffScene/DocDiff/DocDiff.spec.tsx @@ -23,22 +23,22 @@ SOFTWARE. */ -import React from 'react' -import { screen, waitFor } from '@testing-library/react' -import userEvent from '@testing-library/user-event' - -import { getLoadedSpecs } from '../../../test-data' -import { diffSpecs, standardDiffToggles } from '../diffUtils' -import { renderWithReduxProvider } from '../../../test-utils' -import { DocDiff } from './DocDiff' - -describe('DocDiff', () => { - const specs = getLoadedSpecs() - const leftKey = specs['3.1'].key - const rightKey = specs['4.0'].key - const leftApi = specs['3.1'].api! - const rightApi = specs['4.0'].api! - const delta = diffSpecs(leftApi, rightApi, standardDiffToggles) +import React from 'react'; +import { screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; + +import { getLoadedSpecs } from '../../../test-data'; +import { diffSpecs, standardDiffToggles } from '../diffUtils'; +import { renderWithReduxProvider } from '../../../test-utils'; +import { DocDiff } from './DocDiff'; + +describe.skip('DocDiff', () => { + const specs = getLoadedSpecs(); + const leftKey = specs['3.1'].key; + const rightKey = specs['4.0'].key; + const leftApi = specs['3.1'].api!; + const rightApi = specs['4.0'].api!; + const delta = diffSpecs(leftApi, rightApi, standardDiffToggles); it('renders', () => { renderWithReduxProvider( @@ -50,17 +50,17 @@ describe('DocDiff', () => { delta={delta} pageSize={1} /> - ) + ); expect(screen.getByRole('heading', { level: 2 })).toHaveTextContent( `${delta.length} differences between ${leftKey} and ${rightKey}` - ) + ); expect( screen.getByRole('button', { name: 'Previous page of results' }) - ).toBeInTheDocument() + ).toBeInTheDocument(); expect( screen.getByRole('button', { name: 'Next page of results' }) - ).toBeInTheDocument() - }) + ).toBeInTheDocument(); + }); it('renders when there is no delta', () => { renderWithReduxProvider( @@ -71,9 +71,9 @@ describe('DocDiff', () => { rightSpec={rightApi} delta={[]} /> - ) - expect(screen.getByText('No differences found')).toBeInTheDocument() - }) + ); + expect(screen.getByText('No differences found')).toBeInTheDocument(); + }); it('paginates', async () => { renderWithReduxProvider( @@ -85,33 +85,31 @@ describe('DocDiff', () => { delta={delta} pageSize={1} /> - ) + ); // page 1 - const row1 = delta[0] - expect(screen.getByText(row1.name)).toBeInTheDocument() - expect(screen.getByText(row1.id)).toBeInTheDocument() + const row1 = delta[0]; + expect(screen.getByText(row1.name)).toBeInTheDocument(); + expect(screen.getByText(row1.id)).toBeInTheDocument(); expect( screen.getByText(rightApi.methods[row1.name].summary) - ).toBeInTheDocument() + ).toBeInTheDocument(); // go to page 2 - userEvent.click( + await userEvent.click( screen.getByRole('button', { name: 'Next page of results' }) - ) + ); - await waitFor(() => { - const row2 = delta[1] - expect(screen.getByText(row2.name)).toBeInTheDocument() - expect(screen.getByText(row2.id)).toBeInTheDocument() - expect( - screen.getByText(rightApi.methods[row2.name].summary) - ).toBeInTheDocument() - }) - }) + const row2 = delta[1]; + expect(screen.getByText(row2.name)).toBeInTheDocument(); + expect(screen.getByText(row2.id)).toBeInTheDocument(); + expect( + screen.getByText(rightApi.methods[row2.name].summary) + ).toBeInTheDocument(); + }); it('paginates with correct number of entries per page', async () => { - const pageSize = 5 + const pageSize = 5; renderWithReduxProvider( { delta={delta} pageSize={pageSize} /> - ) + ); for (let i = 0; i < pageSize; i++) { - const row = delta[i] - expect(screen.getByText(row.name)).toBeInTheDocument() - expect(screen.getByText(row.id)).toBeInTheDocument() + const row = delta[i]; + expect(screen.getByText(row.name)).toBeInTheDocument(); + expect(screen.getByText(row.id)).toBeInTheDocument(); expect( screen.getByText(rightApi.methods[row.name].summary) - ).toBeInTheDocument() + ).toBeInTheDocument(); } - const notDisplayedRow = delta[pageSize] - expect(screen.queryByText(notDisplayedRow.name)).not.toBeInTheDocument() - }) + const notDisplayedRow = delta[pageSize]; + expect(screen.queryByText(notDisplayedRow.name)).not.toBeInTheDocument(); + }); it('paginates with correct total page count', async () => { - const pageSize = 5 + const pageSize = 5; renderWithReduxProvider( { delta={delta} pageSize={pageSize} /> - ) - const expectedPageCount = Math.ceil(delta.length / pageSize) - expect(screen.getByText(`of ${expectedPageCount}`)).toBeInTheDocument() - }) + ); + const expectedPageCount = Math.ceil(delta.length / pageSize); + expect(screen.getByText(`of ${expectedPageCount}`)).toBeInTheDocument(); + }); it('final diff entry of one page does not appear in next page', async () => { - const pageSize = 5 + const pageSize = 5; renderWithReduxProvider( { delta={delta} pageSize={pageSize} /> - ) - const lastPageEntry = delta[pageSize - 1] - expect(screen.getByText(lastPageEntry.name)).toBeInTheDocument() - expect(screen.getByText(lastPageEntry.id)).toBeInTheDocument() + ); + const lastPageEntry = delta[pageSize - 1]; + expect(screen.getByText(lastPageEntry.name)).toBeInTheDocument(); + expect(screen.getByText(lastPageEntry.id)).toBeInTheDocument(); expect( screen.getByText(rightApi.methods[lastPageEntry.name].summary) - ).toBeInTheDocument() + ).toBeInTheDocument(); // go to page 2 - userEvent.click( + await userEvent.click( screen.getByRole('button', { name: 'Next page of results' }) - ) - - await waitFor(() => { - expect(screen.queryByText(lastPageEntry.name)).not.toBeInTheDocument() - expect(screen.queryByText(lastPageEntry.id)).not.toBeInTheDocument() - }) - }) -}) + ); + + expect(screen.queryByText(lastPageEntry.name)).not.toBeInTheDocument(); + expect(screen.queryByText(lastPageEntry.id)).not.toBeInTheDocument(); + }); +}); diff --git a/packages/api-explorer/src/scenes/DiffScene/DocDiff/DocDiff.tsx b/packages/api-explorer/src/scenes/DiffScene/DocDiff/DocDiff.tsx index c019e8997..bceab8573 100644 --- a/packages/api-explorer/src/scenes/DiffScene/DocDiff/DocDiff.tsx +++ b/packages/api-explorer/src/scenes/DiffScene/DocDiff/DocDiff.tsx @@ -23,7 +23,7 @@ SOFTWARE. */ -import type { ApiModel, DiffRow } from '@looker/sdk-codegen' +import type { ApiModel, DiffRow } from '@looker/sdk-codegen'; import { Flex, Heading, @@ -31,24 +31,24 @@ import { Space, SpaceVertical, Text, -} from '@looker/components' -import type { FC } from 'react' -import React, { useState } from 'react' -import { DiffItem } from './DiffItem' +} from '@looker/components'; +import type { FC } from 'react'; +import React, { useState } from 'react'; +import { DiffItem } from './DiffItem'; export interface DocDiffProps { /** Using delta because IntelliJ has bugs with 'diff' in a react app */ - delta: DiffRow[] + delta: DiffRow[]; /** Left side specKey */ - leftKey: string + leftKey: string; /** Left side spec */ - leftSpec: ApiModel + leftSpec: ApiModel; /** Right side specKey */ - rightKey: string + rightKey: string; /** Right side spec */ - rightSpec: ApiModel + rightSpec: ApiModel; /** Number of rows per page. Defaults to 15 */ - pageSize?: number + pageSize?: number; } export const DocDiff: FC = ({ @@ -59,12 +59,12 @@ export const DocDiff: FC = ({ rightSpec, pageSize = 15, }) => { - const [page, setPage] = useState(1) + const [page, setPage] = useState(1); - if (delta.length === 0) return {'No differences found'} + if (delta.length === 0) return {'No differences found'}; - const pageCount = Math.ceil(delta.length / pageSize) - const pageItemData = delta.slice((page - 1) * pageSize, page * pageSize) + const pageCount = Math.ceil(delta.length / pageSize); + const pageItemData = delta.slice((page - 1) * pageSize, page * pageSize); return ( <> @@ -91,11 +91,11 @@ export const DocDiff: FC = ({ current={page} pages={pageCount} onChange={(nextPage) => { - setPage(nextPage) + setPage(nextPage); }} /> )} - ) -} + ); +}; diff --git a/packages/api-explorer/src/scenes/DiffScene/DocDiff/docDiffUtils.tsx b/packages/api-explorer/src/scenes/DiffScene/DocDiff/docDiffUtils.tsx index a2b2ef125..ed7b9487c 100644 --- a/packages/api-explorer/src/scenes/DiffScene/DocDiff/docDiffUtils.tsx +++ b/packages/api-explorer/src/scenes/DiffScene/DocDiff/docDiffUtils.tsx @@ -24,8 +24,8 @@ */ -import type { ApiModel, DiffRow, ICodeGen } from '@looker/sdk-codegen' -import { getCodeGenerator, PseudoGen } from '@looker/sdk-codegen' +import type { ApiModel, DiffRow, ICodeGen } from '@looker/sdk-codegen'; +import { PseudoGen, getCodeGenerator } from '@looker/sdk-codegen'; export const diffText = ( row: DiffRow, @@ -33,38 +33,38 @@ export const diffText = ( api: ApiModel, sdkLanguage: string ) => { - let gen: ICodeGen + let gen: ICodeGen; if (sdkLanguage === 'All') { - gen = new PseudoGen(api) + gen = new PseudoGen(api); } else { - gen = getCodeGenerator(sdkLanguage, api)! + gen = getCodeGenerator(sdkLanguage, api)!; } - const method = api.methods[row.name] - if (!method) return `${row.name} is missing` - const indent = '' - let result = status ? `Status: ${status}\n` : '' - result += gen.methodSignature(indent, method) + const method = api.methods[row.name]; + if (!method) return `${row.name} is missing`; + const indent = ''; + let result = status ? `Status: ${status}\n` : ''; + result += gen.methodSignature(indent, method); if (row.bodyDiff) { const args = method.bodyParams.map((p) => gen.declareParameter(indent, method, p) - ) - result += `\nBody:\n${args.join('\n')}` + ); + result += `\nBody:\n${args.join('\n')}`; } if (row.typeDiff) { - result += `\nMethod type:\n${gen.declareType(indent, method.type)}` + result += `\nMethod type:\n${gen.declareType(indent, method.type)}`; } if (row.responseDiff) { - const bump = gen.bumper(indent) + const bump = gen.bumper(indent); const items = method.responses.map((r) => { return `${bump}Code: ${r.statusCode} ${bump}MIME: ${r.mediaType} -${bump}Type:${r.type.fullName}` - }) - result += `\nResponses:\n${items.join('\n')}` +${bump}Type:${r.type.fullName}`; + }); + result += `\nResponses:\n${items.join('\n')}`; } - return result -} + return result; +}; export const differ = ( row: DiffRow, @@ -77,12 +77,12 @@ export const differ = ( row.lStatus !== row.rStatus ? row.lStatus : '', leftSpec, sdkLanguage - ) + ); const rhs = diffText( row, row.lStatus !== row.rStatus ? row.rStatus : '', rightSpec, sdkLanguage - ) - return { lhs, rhs } -} + ); + return { lhs, rhs }; +}; diff --git a/packages/api-explorer/src/scenes/DiffScene/DocDiff/index.ts b/packages/api-explorer/src/scenes/DiffScene/DocDiff/index.ts index a606ed7d0..2b1777449 100644 --- a/packages/api-explorer/src/scenes/DiffScene/DocDiff/index.ts +++ b/packages/api-explorer/src/scenes/DiffScene/DocDiff/index.ts @@ -24,4 +24,4 @@ */ -export { DocDiff } from './DocDiff' +export { DocDiff } from './DocDiff'; diff --git a/packages/api-explorer/src/scenes/DiffScene/diffUtils.spec.ts b/packages/api-explorer/src/scenes/DiffScene/diffUtils.spec.ts index 9c305f3e3..8f9a23386 100644 --- a/packages/api-explorer/src/scenes/DiffScene/diffUtils.spec.ts +++ b/packages/api-explorer/src/scenes/DiffScene/diffUtils.spec.ts @@ -24,10 +24,10 @@ */ -import type { DiffRow } from '@looker/sdk-codegen' -import { startCount } from '@looker/sdk-codegen' -import { api, api40 } from '../../test-data' -import { diffToSpec } from './diffUtils' +import type { DiffRow } from '@looker/sdk-codegen'; +import { startCount } from '@looker/sdk-codegen'; +import { api, api40 } from '../../test-data'; +import { diffToSpec } from './diffUtils'; describe('diffUtils', () => { test('builds a psuedo spec from diff', () => { @@ -54,13 +54,13 @@ describe('diffUtils', () => { paramsDiff: '', responseDiff: '', }, - ] - const spec = diffToSpec(delta, api, api40) + ]; + const spec = diffToSpec(delta, api, api40); expect(Object.keys(spec.methods)).toEqual([ 'create_query', 'search_dashboards', - ]) - expect(Object.keys(spec.tags)).toEqual(['Query', 'Dashboard']) - expect(Object.keys(spec.types)).toEqual([]) - }) -}) + ]); + expect(Object.keys(spec.tags)).toEqual(['Query', 'Dashboard']); + expect(Object.keys(spec.types)).toEqual([]); + }); +}); diff --git a/packages/api-explorer/src/scenes/DiffScene/diffUtils.ts b/packages/api-explorer/src/scenes/DiffScene/diffUtils.ts index d4bba547a..ab5943dc4 100644 --- a/packages/api-explorer/src/scenes/DiffScene/diffUtils.ts +++ b/packages/api-explorer/src/scenes/DiffScene/diffUtils.ts @@ -24,7 +24,7 @@ */ -import cloneDeep from 'lodash/cloneDeep' +import cloneDeep from 'lodash/cloneDeep'; import type { DiffFilter, DiffRow, @@ -32,8 +32,8 @@ import type { IMethod, MethodList, TagList, -} from '@looker/sdk-codegen' -import { compareSpecs } from '@looker/sdk-codegen' +} from '@looker/sdk-codegen'; +import { compareSpecs } from '@looker/sdk-codegen'; export const allDiffToggles = [ 'missing', @@ -42,7 +42,7 @@ export const allDiffToggles = [ 'type', 'body', 'response', -] +]; export const standardDiffToggles = [ 'missing', @@ -50,7 +50,7 @@ export const standardDiffToggles = [ 'type', 'body', 'response', -] +]; /** * Abstraction of compareAPIs in case we need to transform compareSpecs diff rows @@ -69,10 +69,10 @@ export const diffSpecs = ( (options.includes('params') && !!delta.paramsDiff) || (options.includes('type') && !!delta.typeDiff) || (options.includes('body') && !!delta.bodyDiff) || - (options.includes('response') && !!delta.responseDiff) + (options.includes('response') && !!delta.responseDiff); - return compareSpecs(lhs, rhs, includeOptions) -} + return compareSpecs(lhs, rhs, includeOptions); +}; /** * Local copy of private function from ApiModel @@ -81,15 +81,15 @@ export const diffSpecs = ( */ const addMethodToTags = (tags: TagList, method: IMethod): TagList => { for (const tag of method.schema.tags) { - let list: MethodList = tags[tag] + let list: MethodList = tags[tag]; if (!list) { - list = {} - tags[tag] = list + list = {}; + tags[tag] = list; } - list[method.name] = method + list[method.name] = method; } - return tags -} + return tags; +}; /** * Combine diff into a psuedo api spec that contains an established method for each diff result @@ -102,19 +102,19 @@ export const diffToSpec = ( lSpec: IApiModel, rSpec: IApiModel ) => { - const result = cloneDeep(lSpec) - result.tags = {} - result.methods = {} + const result = cloneDeep(lSpec); + result.tags = {}; + result.methods = {}; delta.forEach((row) => { - const name = row.name - let method = lSpec.methods[name] - if (!method) method = rSpec.methods[name] - result.methods[name] = method - addMethodToTags(result.tags, method) - }) + const name = row.name; + let method = lSpec.methods[name]; + if (!method) method = rSpec.methods[name]; + result.methods[name] = method; + addMethodToTags(result.tags, method); + }); // TODO diff types then we can populate this also - result.types = {} - return result -} + result.types = {}; + return result; +}; diff --git a/packages/api-explorer/src/scenes/DiffScene/index.ts b/packages/api-explorer/src/scenes/DiffScene/index.ts index bc72f88b5..e9e4b0659 100644 --- a/packages/api-explorer/src/scenes/DiffScene/index.ts +++ b/packages/api-explorer/src/scenes/DiffScene/index.ts @@ -24,4 +24,4 @@ */ -export { DiffScene } from './DiffScene' +export { DiffScene } from './DiffScene'; diff --git a/packages/api-explorer/src/scenes/ErrorDetailScene/ErrorDetailScene.tsx b/packages/api-explorer/src/scenes/ErrorDetailScene/ErrorDetailScene.tsx index 04d257fad..a4479d5e3 100644 --- a/packages/api-explorer/src/scenes/ErrorDetailScene/ErrorDetailScene.tsx +++ b/packages/api-explorer/src/scenes/ErrorDetailScene/ErrorDetailScene.tsx @@ -23,16 +23,16 @@ SOFTWARE. */ -import { Redirect, useRouteMatch } from 'react-router-dom' -import { getEnvAdaptor } from '@looker/extension-utils' -import { ErrorDoc } from '@looker/sdk-rtl' -import React from 'react' -import type { IApiModel } from '@looker/sdk-codegen' +import { Redirect, useRouteMatch } from 'react-router-dom'; +import { getEnvAdaptor } from '@looker/extension-utils'; +import { ErrorDoc } from '@looker/sdk-rtl'; +import React from 'react'; +import type { IApiModel } from '@looker/sdk-codegen'; -import { useNavigation } from '../../utils' +import { useNavigation } from '../../utils'; interface ErrorDetailSceneProps { - api: IApiModel + api: IApiModel; } /** @@ -41,32 +41,32 @@ interface ErrorDetailSceneProps { */ export const ErrorDetailScene = ({ api }: ErrorDetailSceneProps) => { const match = useRouteMatch<{ - specKey: string - statusCode: string - verb: string - }>(`/:specKey/err/:statusCode/:verb/*`) - const methodPath = match?.params[0] - const adaptor = getEnvAdaptor() - const errorDoc = new ErrorDoc(adaptor.sdk) - const restPath = errorDoc.specPath(methodPath) + specKey: string; + statusCode: string; + verb: string; + }>(`/:specKey/err/:statusCode/:verb/*`); + const methodPath = match?.path ?? ''; + const adaptor = getEnvAdaptor(); + const errorDoc = new ErrorDoc(adaptor.sdk); + const restPath = errorDoc.specPath(methodPath); - const methodId = `${match?.params.verb} /${restPath}`.toLocaleLowerCase() - const specKey = match?.params.specKey - const statusCode = match?.params.statusCode + const methodId = `${match?.params.verb} /${restPath}`.toLocaleLowerCase(); + const specKey = match?.params.specKey; + const statusCode = match?.params.statusCode; const method = Object.values(api.methods).find( (method) => method.id.toLocaleLowerCase() === methodId - ) + ); - const methodTag = method?.schema.tags[0] - const methodName = method?.operationId + const methodTag = method?.schema.tags[0]; + const methodName = method?.operationId; - const { buildPathWithGlobalParams } = useNavigation() + const { buildPathWithGlobalParams } = useNavigation(); const redirectPath = buildPathWithGlobalParams( `/${specKey}/methods/${methodTag}/${methodName}`, { e: statusCode } - ) + ); - return -} + return ; +}; diff --git a/packages/api-explorer/src/scenes/ErrorDetailScene/index.ts b/packages/api-explorer/src/scenes/ErrorDetailScene/index.ts index 64048e6fd..0025467ce 100644 --- a/packages/api-explorer/src/scenes/ErrorDetailScene/index.ts +++ b/packages/api-explorer/src/scenes/ErrorDetailScene/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { ErrorDetailScene } from './ErrorDetailScene' +export { ErrorDetailScene } from './ErrorDetailScene'; diff --git a/packages/api-explorer/src/scenes/HomeScene/HomeScene.tsx b/packages/api-explorer/src/scenes/HomeScene/HomeScene.tsx index 98b16886d..141cf5e43 100644 --- a/packages/api-explorer/src/scenes/HomeScene/HomeScene.tsx +++ b/packages/api-explorer/src/scenes/HomeScene/HomeScene.tsx @@ -23,24 +23,24 @@ SOFTWARE. */ -import type { ApiModel } from '@looker/sdk-codegen' -import type { FC } from 'react' -import React from 'react' -import { useParams } from 'react-router-dom' -import { Space, Span, Tooltip } from '@looker/components' -import { ApixSection, DocMarkdown, DocTitle } from '../../components' +import type { ApiModel } from '@looker/sdk-codegen'; +import type { FC } from 'react'; +import React from 'react'; +import { useParams } from 'react-router-dom'; +import { Space, Span, Tooltip } from '@looker/components'; +import { ApixSection, DocMarkdown, DocTitle } from '../../components'; interface DocHomeProps { - api: ApiModel + api: ApiModel; } interface DocHomeParams { - specKey: string + specKey: string; } export const HomeScene: FC = ({ api }) => { - const { specKey } = useParams() - const lookerVersion = 'x-looker-release-version' + const { specKey } = useParams(); + const lookerVersion = 'x-looker-release-version'; return ( @@ -56,5 +56,5 @@ export const HomeScene: FC = ({ api }) => { )} - ) -} + ); +}; diff --git a/packages/api-explorer/src/scenes/HomeScene/index.ts b/packages/api-explorer/src/scenes/HomeScene/index.ts index 334fc04d3..c90b547f4 100644 --- a/packages/api-explorer/src/scenes/HomeScene/index.ts +++ b/packages/api-explorer/src/scenes/HomeScene/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { HomeScene } from './HomeScene' +export { HomeScene } from './HomeScene'; diff --git a/packages/api-explorer/src/scenes/MethodScene/MethodScene.tsx b/packages/api-explorer/src/scenes/MethodScene/MethodScene.tsx index 1eb3be1f6..cf1a7efcc 100644 --- a/packages/api-explorer/src/scenes/MethodScene/MethodScene.tsx +++ b/packages/api-explorer/src/scenes/MethodScene/MethodScene.tsx @@ -24,26 +24,26 @@ */ -import type { FC } from 'react' -import React, { useState, useEffect, useRef } from 'react' +import type { FC } from 'react'; +import React, { useEffect, useRef, useState } from 'react'; import { Aside, Button, ButtonOutline, - Space, - useToggle, ExtendComponentsThemeProvider, + Space, Span, -} from '@looker/components' -import { Beaker } from '@looker/icons' -import { useHistory, useParams } from 'react-router-dom' -import { RunIt, RunItFormKey } from '@looker/run-it' -import type { ApiModel } from '@looker/sdk-codegen' -import { typeRefs } from '@looker/sdk-codegen' -import { useSelector } from 'react-redux' -import type { IEnvironmentAdaptor } from '@looker/extension-utils' - -import { getApixAdaptor, useNavigation, useQuery } from '../../utils' + useToggle, +} from '@looker/components'; +import { Beaker } from '@looker/icons'; +import { useHistory, useParams } from 'react-router-dom'; +import { RunIt, RunItFormKey } from '@looker/run-it'; +import type { ApiModel } from '@looker/sdk-codegen'; +import { typeRefs } from '@looker/sdk-codegen'; +import { useSelector } from 'react-redux'; +import type { IEnvironmentAdaptor } from '@looker/extension-utils'; + +import { getApixAdaptor, useNavigation, useQuery } from '../../utils'; import { ApixSection, DocActivityType, @@ -51,82 +51,82 @@ import { DocRateLimited, DocReferences, DocSDKs, + DocSchema, DocSdkUsage, DocSource, DocStatus, DocTitle, - DocSchema, -} from '../../components' -import { selectSdkLanguage } from '../../state' -import { DocOperation, DocRequestBody, DocResponses } from './components' +} from '../../components'; +import { selectSdkLanguage } from '../../state'; +import { DocOperation, DocRequestBody, DocResponses } from './components'; interface MethodSceneProps { - api: ApiModel + api: ApiModel; } interface MethodSceneParams { - methodName: string - methodTag: string - specKey: string + methodName: string; + methodTag: string; + specKey: string; } const showRunIt = async (adaptor: IEnvironmentAdaptor) => { - const data = await adaptor.localStorageGetItem(RunItFormKey) - return !!data -} + const data = await adaptor.localStorageGetItem(RunItFormKey); + return !!data; +}; export const MethodScene: FC = ({ api }) => { - const adaptor = getApixAdaptor() - const history = useHistory() - const { navigate } = useNavigation() - const sdkLanguage = useSelector(selectSdkLanguage) - const { specKey, methodTag, methodName } = useParams() - const { value, toggle, setOn } = useToggle() - const [method, setMethod] = useState(api.methods[methodName]) - const seeTypes = typeRefs(api, method?.customTypes) - const query = useQuery() - const errorCode = query.get('e') ?? undefined - const RunItButton = value ? Button : ButtonOutline - const docResponsesRef = useRef(null) + const adaptor = getApixAdaptor(); + const history = useHistory(); + const { navigate } = useNavigation(); + const sdkLanguage = useSelector(selectSdkLanguage); + const { specKey, methodTag, methodName } = useParams(); + const { value, toggle, setOn } = useToggle(); + const [method, setMethod] = useState(api.methods[methodName]); + const seeTypes = typeRefs(api, method?.customTypes); + const query = useQuery(); + const errorCode = query.get('e') ?? undefined; + const RunItButton = value ? Button : ButtonOutline; + const docResponsesRef = useRef(null); useEffect(() => { - const foundMethod = api.methods[methodName] + const foundMethod = api.methods[methodName]; if (foundMethod) { - setMethod(api.methods[methodName]) + setMethod(api.methods[methodName]); } else { // Invalid method if (api.tags[methodTag]) { // Found tag though - navigate(`/${specKey}/methods/${methodTag}`) + navigate(`/${specKey}/methods/${methodTag}`); } else { - navigate(`/${specKey}/methods`) + navigate(`/${specKey}/methods`); } } - }, [api, history, methodName, methodTag, specKey]) + }, [api, history, methodName, methodTag, specKey]); useEffect(() => { const checkRunIt = async () => { try { - const show = await showRunIt(adaptor) + const show = await showRunIt(adaptor); if (show) { - setOn() + setOn(); } } catch (error) { - console.error(error) + console.error(error); } - } - checkRunIt() - }, [adaptor, setOn]) + }; + checkRunIt(); + }, [adaptor, setOn]); useEffect(() => { if (method?.responses && errorCode) { if (docResponsesRef.current) { window.setTimeout(() => { - docResponsesRef.current!.scrollIntoView() - }, 300) + docResponsesRef.current!.scrollIntoView(); + }, 300); } } - }, [method]) + }, [method]); const runItToggle = ( = ({ api }) => { > Run It - ) + ); return ( <> @@ -190,5 +190,5 @@ export const MethodScene: FC = ({ api }) => { )} - ) -} + ); +}; diff --git a/packages/api-explorer/src/scenes/MethodScene/components/DocOperation.spec.tsx b/packages/api-explorer/src/scenes/MethodScene/components/DocOperation.spec.tsx index 40b93bbf9..fdb7b471c 100644 --- a/packages/api-explorer/src/scenes/MethodScene/components/DocOperation.spec.tsx +++ b/packages/api-explorer/src/scenes/MethodScene/components/DocOperation.spec.tsx @@ -23,31 +23,31 @@ SOFTWARE. */ -import React from 'react' -import { renderWithTheme } from '@looker/components-test-utils' -import { screen } from '@testing-library/react' +import React from 'react'; +import { renderWithTheme } from '@looker/components-test-utils'; +import { screen } from '@testing-library/react'; -import { api } from '../../../test-data' -import { DocOperation } from './DocOperation' +import { api } from '../../../test-data'; +import { DocOperation } from './DocOperation'; describe('DocOperation', () => { - const method = api.methods.create_dashboard + const method = api.methods.create_dashboard; test('it renders SDK portion of a method', () => { - renderWithTheme() - expect(screen.getByText(method.name, { exact: false })).toBeInTheDocument() + renderWithTheme(); + expect(screen.getByText(method.name, { exact: false })).toBeInTheDocument(); method.allParams.forEach((param) => { - expect(screen.getByText(param.name)).toBeInTheDocument() - }) + expect(screen.getByText(param.name)).toBeInTheDocument(); + }); expect( screen.getByText(method.primaryResponse.type.name) - ).toBeInTheDocument() - }) + ).toBeInTheDocument(); + }); test('it renders HTTP portion of a method', () => { - renderWithTheme() - expect(screen.getByText(method.httpMethod)).toBeInTheDocument() - expect(screen.getByText(method.endpoint)).toBeInTheDocument() - }) -}) + renderWithTheme(); + expect(screen.getByText(method.httpMethod)).toBeInTheDocument(); + expect(screen.getByText(method.endpoint)).toBeInTheDocument(); + }); +}); diff --git a/packages/api-explorer/src/scenes/MethodScene/components/DocOperation.tsx b/packages/api-explorer/src/scenes/MethodScene/components/DocOperation.tsx index 2d5d3cbdf..0f60ed4b3 100644 --- a/packages/api-explorer/src/scenes/MethodScene/components/DocOperation.tsx +++ b/packages/api-explorer/src/scenes/MethodScene/components/DocOperation.tsx @@ -23,16 +23,16 @@ SOFTWARE. */ -import type { FC } from 'react' -import React from 'react' -import type { IMethod } from '@looker/sdk-codegen' -import { Code, Flex, SpaceVertical, Text } from '@looker/components' -import { MethodBadge } from '@looker/run-it' +import type { FC } from 'react'; +import React from 'react'; +import type { IMethod } from '@looker/sdk-codegen'; +import { Code, Flex, SpaceVertical, Text } from '@looker/components'; +import { MethodBadge } from '@looker/run-it'; -import { DocPseudo } from '../../../components' +import { DocPseudo } from '../../../components'; interface DocOperationProps { - method: IMethod + method: IMethod; } export const DocOperation: FC = ({ method }) => ( @@ -51,4 +51,4 @@ export const DocOperation: FC = ({ method }) => ( -) +); diff --git a/packages/api-explorer/src/scenes/MethodScene/components/DocRequestBody.spec.tsx b/packages/api-explorer/src/scenes/MethodScene/components/DocRequestBody.spec.tsx index bfc3ba616..37f1d9c37 100644 --- a/packages/api-explorer/src/scenes/MethodScene/components/DocRequestBody.spec.tsx +++ b/packages/api-explorer/src/scenes/MethodScene/components/DocRequestBody.spec.tsx @@ -24,27 +24,27 @@ */ -import React from 'react' -import { renderWithTheme } from '@looker/components-test-utils' -import { screen } from '@testing-library/react' +import React from 'react'; +import { renderWithTheme } from '@looker/components-test-utils'; +import { screen } from '@testing-library/react'; -import { api } from '../../../test-data' -import { DocRequestBody } from './DocRequestBody' +import { api } from '../../../test-data'; +import { DocRequestBody } from './DocRequestBody'; describe('DocRequestBody', () => { test('it shows Request body for a method with a body type', () => { - const method = api.methods.create_dashboard - renderWithTheme() + const method = api.methods.create_dashboard; + renderWithTheme(); expect( screen.getByText('Request body', { exact: false }) - ).toBeInTheDocument() - }) + ).toBeInTheDocument(); + }); test('it skips Request body for a method without a body type', () => { - const method = api.methods.dashboard - renderWithTheme() + const method = api.methods.dashboard; + renderWithTheme(); expect( screen.queryByText('Request body', { exact: false }) - ).not.toBeInTheDocument() - }) -}) + ).not.toBeInTheDocument(); + }); +}); diff --git a/packages/api-explorer/src/scenes/MethodScene/components/DocRequestBody.tsx b/packages/api-explorer/src/scenes/MethodScene/components/DocRequestBody.tsx index aeaf2b1a9..385114634 100644 --- a/packages/api-explorer/src/scenes/MethodScene/components/DocRequestBody.tsx +++ b/packages/api-explorer/src/scenes/MethodScene/components/DocRequestBody.tsx @@ -23,15 +23,15 @@ SOFTWARE. */ -import type { FC } from 'react' -import React from 'react' -import type { ApiModel, IMethod } from '@looker/sdk-codegen' -import { CollapserCard } from '@looker/run-it' -import { ExploreType } from '../../../components' +import type { FC } from 'react'; +import React from 'react'; +import type { ApiModel, IMethod } from '@looker/sdk-codegen'; +import { CollapserCard } from '@looker/run-it'; +import { ExploreType } from '../../../components'; interface DocRequestBodyProps { - method: IMethod - api: ApiModel + method: IMethod; + api: ApiModel; } /** @@ -39,9 +39,9 @@ interface DocRequestBodyProps { * @param method to document */ export const DocRequestBody: FC = ({ method, api }) => { - const bodies = method.bodyParams - if (bodies.length === 0) return <> - const header = bodies.length > 1 ? 'Request bodies' : 'Request body' + const bodies = method.bodyParams; + if (bodies.length === 0) return <>; + const header = bodies.length > 1 ? 'Request bodies' : 'Request body'; return ( @@ -56,5 +56,5 @@ export const DocRequestBody: FC = ({ method, api }) => { ))} - ) -} + ); +}; diff --git a/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/DocResponseTypes.tsx b/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/DocResponseTypes.tsx index b7c67bb8e..33ac22240 100644 --- a/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/DocResponseTypes.tsx +++ b/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/DocResponseTypes.tsx @@ -24,20 +24,20 @@ */ -import React, { useState, useEffect } from 'react' -import { ButtonToggle, ButtonItem } from '@looker/components' +import React, { useEffect, useState } from 'react'; +import { ButtonItem, ButtonToggle } from '@looker/components'; import type { ApiModel, - KeyedCollection, IMethodResponse, -} from '@looker/sdk-codegen' + KeyedCollection, +} from '@looker/sdk-codegen'; -import { ExploreType } from '../../../../components' +import { ExploreType } from '../../../../components'; interface DocResponseTypesProps { - api: ApiModel + api: ApiModel; /** responses to render */ - responses: KeyedCollection + responses: KeyedCollection; } /** @@ -46,15 +46,15 @@ interface DocResponseTypesProps { * @param response */ export const DocResponseTypes = ({ api, responses }: DocResponseTypesProps) => { - const mediaTypes = Object.keys(responses) - const [selectedMediaType, setSelectedMediaType] = useState(mediaTypes[0]) - const [resps, setResps] = useState(responses) + const mediaTypes = Object.keys(responses); + const [selectedMediaType, setSelectedMediaType] = useState(mediaTypes[0]); + const [resps, setResps] = useState(responses); useEffect(() => { /** When new responses are passed, update the default selected media type */ - setSelectedMediaType(mediaTypes[0]) - setResps(responses) - }, [responses, mediaTypes]) + setSelectedMediaType(mediaTypes[0]); + setResps(responses); + }, [responses, mediaTypes]); // TODO: Account for endpoints with no responses (e.g. delete a custom cmd) return ( @@ -79,5 +79,5 @@ export const DocResponseTypes = ({ api, responses }: DocResponseTypesProps) => { /> - ) -} + ); +}; diff --git a/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/DocResponses.spec.tsx b/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/DocResponses.spec.tsx index f95a64e47..5e6beef4b 100644 --- a/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/DocResponses.spec.tsx +++ b/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/DocResponses.spec.tsx @@ -23,52 +23,52 @@ SOFTWARE. */ -import React from 'react' -import { screen, waitFor } from '@testing-library/react' -import userEvent from '@testing-library/user-event' +import React from 'react'; +import { screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import { registerTestEnvAdaptor, unregisterEnvAdaptor, -} from '@looker/extension-utils' +} from '@looker/extension-utils'; -import { api } from '../../../../test-data' -import { renderWithRouter } from '../../../../test-utils' -import { DocResponses } from './DocResponses' -import { buildResponseTree } from './utils' +import { api } from '../../../../test-data'; +import { renderWithRouter } from '../../../../test-utils'; +import { DocResponses } from './DocResponses'; +import { buildResponseTree } from './utils'; describe('DocResponses', () => { beforeAll(() => { - registerTestEnvAdaptor() - }) + registerTestEnvAdaptor(); + }); afterAll(() => { - unregisterEnvAdaptor() - }) + unregisterEnvAdaptor(); + }); test('it renders all response statuses and their types', async () => { - const responses = api.methods.run_look.responses - renderWithRouter() + const responses = api.methods.run_look.responses; + renderWithRouter(); - expect(screen.getByText('Response Models')).toBeInTheDocument() + expect(screen.getByText('Response Models')).toBeInTheDocument(); - const responseTree = buildResponseTree(responses) - const expectedRespStatuses = Object.keys(responseTree) + const responseTree = buildResponseTree(responses); + const expectedRespStatuses = Object.keys(responseTree); expect( screen.getAllByRole('tab', { name: new RegExp(`${expectedRespStatuses.join('|')}`), }) - ).toHaveLength(expectedRespStatuses.length) + ).toHaveLength(expectedRespStatuses.length); - userEvent.click(screen.getByRole('tab', { name: '200: Look' })) - const successRespTypes = Object.keys(responseTree['200: Look']) + userEvent.click(screen.getByRole('tab', { name: '200: Look' })); + const successRespTypes = Object.keys(responseTree['200: Look']); await waitFor(() => { expect( screen.getAllByRole('button', { name: new RegExp(`${successRespTypes.join('|')}`), }) - ).toHaveLength(successRespTypes.length) - }) - }) + ).toHaveLength(successRespTypes.length); + }); + }); test('selects tab corresponding to error code query param if present', async () => { const sampleIndex = { @@ -78,7 +78,7 @@ describe('DocResponses', () => { '404/post/login': { url: 'login_404.md', }, - } + }; const badLoginMd = `## API Response 404 for \`login\` @@ -86,7 +86,7 @@ describe('DocResponses', () => { A 404 Error response from the /login endpoint most often means that an attempt to login at a valid Looker URL was made but the combination of client_id and client_secret provided do not match an existing valid credential on that instance. -See [HTTP 404 - Not Found](https://docs.looker.com/r/reference/looker-http-codes/404) for general information about this HTTP response from Looker.` +See [HTTP 404 - Not Found](https://docs.looker.com/r/reference/looker-http-codes/404) for general information about this HTTP response from Looker.`; const mockResponse = async (val: string): Promise => { const resp: Response = { @@ -96,58 +96,58 @@ See [HTTP 404 - Not Found](https://docs.looker.com/r/reference/looker-http-codes statusText: '', url: '', text(): Promise { - return Promise.resolve(val) + return Promise.resolve(val); }, status: 200, headers: {} as Headers, type: 'basic', clone: function (): Response { - throw new Error('Function not implemented.') + throw new Error('Function not implemented.'); }, body: null, arrayBuffer: function (): Promise { - throw new Error('Function not implemented.') + throw new Error('Function not implemented.'); }, blob: function (): Promise { - throw new Error('Function not implemented.') + throw new Error('Function not implemented.'); }, formData: function (): Promise { - throw new Error('Function not implemented.') + throw new Error('Function not implemented.'); }, json: function (): Promise { - throw new Error('Function not implemented.') + throw new Error('Function not implemented.'); }, - } as unknown as Response - return Promise.resolve(resp) - } - const fetcher = global.fetch + } as unknown as Response; + return Promise.resolve(resp); + }; + const fetcher = global.fetch; global.fetch = jest.fn((input: RequestInfo | URL, _init?: RequestInit) => { - const url = input.toString() - let result = 'I dunno' + const url = input.toString(); + let result = 'I dunno'; if (url.endsWith('index.json')) { - result = JSON.stringify(sampleIndex) + result = JSON.stringify(sampleIndex); } if (url.endsWith('login_404.md')) { - result = badLoginMd + result = badLoginMd; } - return mockResponse(result) - }) + return mockResponse(result); + }); renderWithRouter( - ) - expect(screen.getByText('Response Models')).toBeInTheDocument() + ); + expect(screen.getByText('Response Models')).toBeInTheDocument(); await waitFor(() => { expect(screen.getByRole('tab', { name: /^404: \w+/ })).toHaveAttribute( 'aria-selected', 'true' - ) - expect( - screen.getByRole('heading', { name: 'Description' }) - ).toBeInTheDocument() - }) + ); + }); + expect( + screen.getByRole('heading', { name: 'Description' }) + ).toBeInTheDocument(); - global.fetch = fetcher - }) -}) + global.fetch = fetcher; + }); +}); diff --git a/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/DocResponses.tsx b/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/DocResponses.tsx index 68bb5b0b6..bb79a37ed 100644 --- a/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/DocResponses.tsx +++ b/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/DocResponses.tsx @@ -24,70 +24,70 @@ */ -import React, { useEffect, useState } from 'react' -import { Tabs2, Tab2 } from '@looker/components' -import type { ApiModel, IMethod } from '@looker/sdk-codegen' -import { CollapserCard } from '@looker/run-it' -import { ErrorDoc } from '@looker/sdk-rtl' +import React, { useEffect, useState } from 'react'; +import { Tab2, Tabs2 } from '@looker/components'; +import type { ApiModel, IMethod } from '@looker/sdk-codegen'; +import { CollapserCard } from '@looker/run-it'; +import { ErrorDoc } from '@looker/sdk-rtl'; import { - apiErrorDisplayFetch, ExtMarkdown, + apiErrorDisplayFetch, getEnvAdaptor, -} from '@looker/extension-utils' +} from '@looker/extension-utils'; -import { DocResponseTypes } from './DocResponseTypes' -import { buildResponseTree } from './utils' +import { DocResponseTypes } from './DocResponseTypes'; +import { buildResponseTree } from './utils'; interface DocResponsesProps { - api: ApiModel - method: IMethod + api: ApiModel; + method: IMethod; /** error code to display */ - errorCode?: string + errorCode?: string; } /** * Renders a tab list and tab panels for different method response types */ export const DocResponses = ({ api, method, errorCode }: DocResponsesProps) => { - const [errorContent, setErrorContent] = useState('') - const responses = method.responses + const [errorContent, setErrorContent] = useState(''); + const responses = method.responses; - const responseTree = buildResponseTree(responses) - const tabNames = Object.keys(responseTree) + const responseTree = buildResponseTree(responses); + const tabNames = Object.keys(responseTree); - let defaultTabId = tabNames[0] + let defaultTabId = tabNames[0]; if (errorCode) { - const pattern = new RegExp(`${errorCode}: \\w+`) + const pattern = new RegExp(`${errorCode}: \\w+`); tabNames.forEach((el) => { if (pattern.test(el)) { - defaultTabId = el + defaultTabId = el; } - }) + }); } useEffect(() => { - if (!errorCode) return + if (!errorCode) return; const getErrorContent = async () => { const docUrl = `/err/4.0/${errorCode}/${method.httpMethod.toLocaleLowerCase()}${ method.endpoint - }` - const adaptor = getEnvAdaptor() - const errDoc = new ErrorDoc(adaptor.sdk, apiErrorDisplayFetch) - const content = await errDoc.content(docUrl) - setErrorContent(content) - } - getErrorContent() - }, [errorCode]) + }`; + const adaptor = getEnvAdaptor(); + const errDoc = new ErrorDoc(adaptor.sdk, apiErrorDisplayFetch); + const content = await errDoc.content(docUrl); + setErrorContent(content); + }; + getErrorContent(); + }, [errorCode]); - if (responses.length === 0) return <> + if (responses.length === 0) return <>; return ( {Object.entries(responseTree).map(([statusCode, response]) => { - const errorTab = errorCode && statusCode === defaultTabId + const errorTab = errorCode && statusCode === defaultTabId; return ( @@ -95,9 +95,9 @@ export const DocResponses = ({ api, method, errorCode }: DocResponsesProps) => { )} - ) + ); })} - ) -} + ); +}; diff --git a/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/index.ts b/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/index.ts index 07c7b5031..a4e512822 100644 --- a/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/index.ts +++ b/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { DocResponses } from './DocResponses' +export { DocResponses } from './DocResponses'; diff --git a/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/utils.spec.ts b/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/utils.spec.ts index 4e296e7e7..815c55ccb 100644 --- a/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/utils.spec.ts +++ b/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/utils.spec.ts @@ -23,32 +23,37 @@ SOFTWARE. */ -import { api } from '../../../../test-data' -import { buildResponseTree } from './utils' +import { api } from '../../../../test-data'; +import { buildResponseTree } from './utils'; describe('DocResponses utils', () => { describe('buildResponseTree', () => { test('it builds a response tree', () => { - const method = api.methods.run_look - const responses = method.responses - const actual = buildResponseTree(responses) + const method = api.methods.run_look; + const responses = method.responses; + const actual = buildResponseTree(responses); const responseStatuses = [ '200: Look', '400: Bad Request', '404: Not Found', '422: Validation Error', '429: Too Many Requests', - ] - const mediaTypes = ['text', 'application/json', 'image/png', 'image/jpeg'] - expect(Object.keys(actual)).toEqual(responseStatuses) + ]; + const mediaTypes = [ + 'text', + 'application/json', + 'image/png', + 'image/jpeg', + ]; + expect(Object.keys(actual)).toEqual(responseStatuses); responseStatuses.forEach((status) => { - expect(Object.keys(actual[status])).toEqual(mediaTypes) - }) + expect(Object.keys(actual[status])).toEqual(mediaTypes); + }); expect(actual['200: Look']['application/json']).toEqual( method.primaryResponse - ) - }) - }) -}) + ); + }); + }); +}); diff --git a/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/utils.ts b/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/utils.ts index ffdc01c09..963799aa2 100644 --- a/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/utils.ts +++ b/packages/api-explorer/src/scenes/MethodScene/components/DocResponses/utils.ts @@ -24,7 +24,7 @@ */ -import type { IMethodResponse, KeyedCollection } from '@looker/sdk-codegen' +import type { IMethodResponse, KeyedCollection } from '@looker/sdk-codegen'; /** * Given an array of method responses, group them by statusCode. The value of each status code is a collection of @@ -34,11 +34,11 @@ import type { IMethodResponse, KeyedCollection } from '@looker/sdk-codegen' export const buildResponseTree = ( responses: IMethodResponse[] ): KeyedCollection> => { - const tree = {} + const tree: KeyedCollection> = {}; Object.values(responses).forEach((response) => { - const node = `${response.statusCode}: ${response.description}` - if (!(node in tree)) tree[node] = {} - tree[node][response.mediaType] = response - }) - return tree -} + const node = `${response.statusCode}: ${response.description}`; + if (!(node in tree)) tree[node] = {}; + tree[node][response.mediaType] = response; + }); + return tree; +}; diff --git a/packages/api-explorer/src/scenes/MethodScene/components/index.ts b/packages/api-explorer/src/scenes/MethodScene/components/index.ts index 8ad94f6e2..1f1fcb71a 100644 --- a/packages/api-explorer/src/scenes/MethodScene/components/index.ts +++ b/packages/api-explorer/src/scenes/MethodScene/components/index.ts @@ -23,6 +23,6 @@ SOFTWARE. */ -export { DocOperation } from './DocOperation' -export { DocRequestBody } from './DocRequestBody' -export { DocResponses } from './DocResponses' +export { DocOperation } from './DocOperation'; +export { DocRequestBody } from './DocRequestBody'; +export { DocResponses } from './DocResponses'; diff --git a/packages/api-explorer/src/scenes/MethodScene/index.ts b/packages/api-explorer/src/scenes/MethodScene/index.ts index ac03f6ebb..d3f561e14 100644 --- a/packages/api-explorer/src/scenes/MethodScene/index.ts +++ b/packages/api-explorer/src/scenes/MethodScene/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { MethodScene } from './MethodScene' +export { MethodScene } from './MethodScene'; diff --git a/packages/api-explorer/src/scenes/MethodTagScene/MethodTagScene.spec.tsx b/packages/api-explorer/src/scenes/MethodTagScene/MethodTagScene.spec.tsx index 76e0024f3..db5cc4a69 100644 --- a/packages/api-explorer/src/scenes/MethodTagScene/MethodTagScene.spec.tsx +++ b/packages/api-explorer/src/scenes/MethodTagScene/MethodTagScene.spec.tsx @@ -23,20 +23,20 @@ SOFTWARE. */ -import React from 'react' -import { Route } from 'react-router-dom' -import { screen, waitFor } from '@testing-library/react' -import userEvent from '@testing-library/user-event' +import React from 'react'; +import { Route } from 'react-router-dom'; +import { screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; -import { api } from '../../test-data' -import { renderWithRouterAndReduxProvider } from '../../test-utils' -import { MethodTagScene } from './MethodTagScene' +import { api } from '../../test-data'; +import { renderWithRouterAndReduxProvider } from '../../test-utils'; +import { MethodTagScene } from './MethodTagScene'; -const opBtnNames = /ALL|GET|POST|PUT|PATCH|DELETE/ +const opBtnNames = /ALL|GET|POST|PUT|PATCH|DELETE/; -const mockHistoryPush = jest.fn() +const mockHistoryPush = jest.fn(); jest.mock('react-router-dom', () => { - const ReactRouterDOM = jest.requireActual('react-router-dom') + const ReactRouterDOM = jest.requireActual('react-router-dom'); return { ...ReactRouterDOM, useHistory: () => ({ @@ -45,11 +45,11 @@ jest.mock('react-router-dom', () => { pathname: '/4.0/methods/Look', }, }), - } -}) + }; +}); describe('MethodTagScene', () => { - Element.prototype.scrollTo = jest.fn() + Element.prototype.scrollTo = jest.fn(); test('it renders operation buttons and all methods for a given method tag', () => { renderWithRouterAndReduxProvider( @@ -57,22 +57,22 @@ describe('MethodTagScene', () => { , ['/4.0/methods/ColorCollection'] - ) + ); expect( screen.getAllByRole('button', { name: opBtnNames, }) - ).toHaveLength(6) + ).toHaveLength(6); expect(screen.getAllByText(/^\/color_collections.*/)).toHaveLength( Object.keys(api.tags.ColorCollection).length - ) + ); expect( screen.getByText('/color_collections/standard').closest('a') ).toHaveAttribute( 'href', '/4.0/methods/ColorCollection/color_collections_standard' - ) - }) + ); + }); test('it only renders operation buttons for operations that exist under that tag', () => { /** ApiAuth contains two POST methods and a DELETE method */ @@ -81,38 +81,38 @@ describe('MethodTagScene', () => { , ['/4.0/methods/ApiAuth'] - ) + ); expect( screen.getAllByRole('button', { name: opBtnNames, }) - ).toHaveLength(3) - }) + ).toHaveLength(3); + }); test('it pushes filter to URL on toggle', async () => { - const site = '/4.0/methods/Look' + const site = '/4.0/methods/Look'; renderWithRouterAndReduxProvider( , [site] - ) + ); /** Filter by GET operation */ - userEvent.click(screen.getByRole('button', { name: 'GET' })) + await userEvent.click(screen.getByRole('button', { name: 'GET' })); await waitFor(() => { expect(mockHistoryPush).toHaveBeenCalledWith({ pathname: site, search: 't=get', - }) - }) + }); + }); /** Filter by DELETE operation */ - userEvent.click(screen.getByRole('button', { name: 'DELETE' })) + await userEvent.click(screen.getByRole('button', { name: 'DELETE' })); await waitFor(() => { // eslint-disable-next-line jest-dom/prefer-in-document expect(mockHistoryPush).toHaveBeenCalledWith({ pathname: site, search: 't=delete', - }) - }) - }) -}) + }); + }); + }); +}); diff --git a/packages/api-explorer/src/scenes/MethodTagScene/MethodTagScene.tsx b/packages/api-explorer/src/scenes/MethodTagScene/MethodTagScene.tsx index 87b7fa6e2..5743b1c83 100644 --- a/packages/api-explorer/src/scenes/MethodTagScene/MethodTagScene.tsx +++ b/packages/api-explorer/src/scenes/MethodTagScene/MethodTagScene.tsx @@ -23,72 +23,77 @@ SOFTWARE. */ -import type { FC } from 'react' -import React, { useEffect, useState } from 'react' -import { useHistory, useLocation, useParams } from 'react-router-dom' -import { Grid, ButtonToggle, ButtonItem } from '@looker/components' -import type { ApiModel } from '@looker/sdk-codegen' -import { useSelector } from 'react-redux' -import { ApixSection, DocTitle, DocMethodSummary, Link } from '../../components' -import { buildMethodPath, isValidFilter, useNavigation } from '../../utils' -import { selectTagFilter, useSettingActions } from '../../state' -import { useTagStoreSync } from '../utils' -import { getOperations } from './utils' +import type { FC } from 'react'; +import React, { useEffect, useState } from 'react'; +import { useHistory, useLocation, useParams } from 'react-router-dom'; +import { ButtonItem, ButtonToggle, Grid } from '@looker/components'; +import type { ApiModel } from '@looker/sdk-codegen'; +import { useSelector } from 'react-redux'; +import { + ApixSection, + DocMethodSummary, + DocTitle, + Link, +} from '../../components'; +import { buildMethodPath, isValidFilter, useNavigation } from '../../utils'; +import { selectTagFilter, useSettingActions } from '../../state'; +import { useTagStoreSync } from '../utils'; +import { getOperations } from './utils'; interface MethodTagSceneProps { - api: ApiModel + api: ApiModel; } interface MethodTagSceneParams { - specKey: string - methodTag: string + specKey: string; + methodTag: string; } export const MethodTagScene: FC = ({ api }) => { - const { specKey, methodTag } = useParams() - const location = useLocation() - const history = useHistory() - const methods = api.tags[methodTag] + const { specKey, methodTag } = useParams(); + const location = useLocation(); + const history = useHistory(); + const methods = api.tags[methodTag]; const { navigate, buildPathWithGlobalParams, navigateWithGlobalParams } = - useNavigation() - const selectedTagFilter = useSelector(selectTagFilter) - const { setTagFilterAction } = useSettingActions() - const [tagFilter, setTagFilter] = useState(selectedTagFilter) - useTagStoreSync() + useNavigation(); + const selectedTagFilter = useSelector(selectTagFilter); + const { setTagFilterAction } = useSettingActions(); + const [tagFilter, setTagFilter] = useState(selectedTagFilter); + useTagStoreSync(); const handleChange = (filter: string) => { navigate(location.pathname, { t: filter === 'ALL' ? null : filter.toLowerCase(), - }) - } + }); + }; useEffect(() => { - const searchParams = new URLSearchParams(location.search) - let verbParam = searchParams.get('t') || 'ALL' + const searchParams = new URLSearchParams(location.search); + let verbParam = searchParams.get('t') || 'ALL'; verbParam = isValidFilter(location.pathname, verbParam) ? verbParam.toUpperCase() - : 'ALL' + : 'ALL'; setTagFilterAction({ tagFilter: verbParam, - }) - }, [location.search]) + }); + }, [location.search]); useEffect(() => { - setTagFilter(selectedTagFilter) - }, [selectedTagFilter]) + setTagFilter(selectedTagFilter); + }, [selectedTagFilter]); useEffect(() => { if (!methods) { - navigateWithGlobalParams(`/${specKey}/methods`) + navigateWithGlobalParams(`/${specKey}/methods`); } - }, [history, methods]) + }, [history, methods]); if (!methods) { - return <> + return <>; } const tag = Object.values(api.spec.tags!).find( (tag) => tag.name === methodTag - )! - const operations = getOperations(methods) + )!; + const operations = getOperations(methods); return ( @@ -125,5 +130,5 @@ export const MethodTagScene: FC = ({ api }) => { ) )} - ) -} + ); +}; diff --git a/packages/api-explorer/src/scenes/MethodTagScene/index.ts b/packages/api-explorer/src/scenes/MethodTagScene/index.ts index 0b7b8f0d7..305aaad5c 100644 --- a/packages/api-explorer/src/scenes/MethodTagScene/index.ts +++ b/packages/api-explorer/src/scenes/MethodTagScene/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { MethodTagScene } from './MethodTagScene' +export { MethodTagScene } from './MethodTagScene'; diff --git a/packages/api-explorer/src/scenes/MethodTagScene/utils.spec.ts b/packages/api-explorer/src/scenes/MethodTagScene/utils.spec.ts index 0c332abcc..677356fd2 100644 --- a/packages/api-explorer/src/scenes/MethodTagScene/utils.spec.ts +++ b/packages/api-explorer/src/scenes/MethodTagScene/utils.spec.ts @@ -23,12 +23,12 @@ SOFTWARE. */ -import { api } from '../../test-data' -import { getOperations } from './utils' +import { api } from '../../test-data'; +import { getOperations } from './utils'; describe('MethodTagScene utils', () => { test('getOperations returns a unique list of operations', () => { - const actual = getOperations(api.tags.Query) - expect(actual).toHaveLength(new Set(actual).size) - }) -}) + const actual = getOperations(api.tags.Query); + expect(actual).toHaveLength(new Set(actual).size); + }); +}); diff --git a/packages/api-explorer/src/scenes/MethodTagScene/utils.ts b/packages/api-explorer/src/scenes/MethodTagScene/utils.ts index 4835971e9..c3c66b255 100644 --- a/packages/api-explorer/src/scenes/MethodTagScene/utils.ts +++ b/packages/api-explorer/src/scenes/MethodTagScene/utils.ts @@ -23,16 +23,16 @@ SOFTWARE. */ -import type { MethodList } from '@looker/sdk-codegen' +import type { MethodList } from '@looker/sdk-codegen'; /** * Given a list of methods it returns a list of distinct operations * @param methods A list of methods */ export const getOperations = (methods: MethodList) => { - const operationsSet = new Set() + const operationsSet = new Set(); Object.values(methods).forEach((method) => { - operationsSet.add(method.httpMethod) - }) - return Array.from(operationsSet.values()) -} + operationsSet.add(method.httpMethod); + }); + return Array.from(operationsSet.values()); +}; diff --git a/packages/api-explorer/src/scenes/TypeScene/TypeScene.tsx b/packages/api-explorer/src/scenes/TypeScene/TypeScene.tsx index 3f2494b37..0d87d1292 100644 --- a/packages/api-explorer/src/scenes/TypeScene/TypeScene.tsx +++ b/packages/api-explorer/src/scenes/TypeScene/TypeScene.tsx @@ -24,50 +24,50 @@ */ -import type { FC } from 'react' -import React, { useEffect } from 'react' -import type { ApiModel } from '@looker/sdk-codegen' -import { typeRefs, methodRefs } from '@looker/sdk-codegen' -import { useHistory, useParams } from 'react-router-dom' -import { Space, Box } from '@looker/components' +import type { FC } from 'react'; +import React, { useEffect } from 'react'; +import type { ApiModel } from '@looker/sdk-codegen'; +import { methodRefs, typeRefs } from '@looker/sdk-codegen'; +import { useHistory, useParams } from 'react-router-dom'; +import { Box, Space } from '@looker/components'; import { ApixSection, DocReferences, DocSDKs, + DocSchema, DocSource, DocTitle, ExploreType, - DocSchema, -} from '../../components' -import { useNavigation } from '../../utils' +} from '../../components'; +import { useNavigation } from '../../utils'; interface DocTypeProps { - api: ApiModel + api: ApiModel; } interface DocTypeParams { - specKey: string - typeTag: string - typeName: string + specKey: string; + typeTag: string; + typeName: string; } export const TypeScene: FC = ({ api }) => { - const { specKey, typeTag, typeName } = useParams() - const type = api.types[typeName] - const history = useHistory() - const { navigate } = useNavigation() - const typesUsed = typeRefs(api, type?.customTypes) - const methodsUsedBy = methodRefs(api, type?.methodRefs) - const typesUsedBy = typeRefs(api, type?.parentTypes) + const { specKey, typeTag, typeName } = useParams(); + const type = api.types[typeName]; + const history = useHistory(); + const { navigate } = useNavigation(); + const typesUsed = typeRefs(api, type?.customTypes); + const methodsUsedBy = methodRefs(api, type?.methodRefs); + const typesUsedBy = typeRefs(api, type?.parentTypes); useEffect(() => { if (!type) { const route = api.typeTags[typeTag] ? `/${specKey}/types/${typeTag}` - : `/${specKey}/types` - navigate(route) + : `/${specKey}/types`; + navigate(route); } - }, [history, specKey, type]) + }, [history, specKey, type]); return ( <> @@ -92,5 +92,5 @@ export const TypeScene: FC = ({ api }) => { )} - ) -} + ); +}; diff --git a/packages/api-explorer/src/scenes/TypeScene/index.ts b/packages/api-explorer/src/scenes/TypeScene/index.ts index b24f757d1..c956d0220 100644 --- a/packages/api-explorer/src/scenes/TypeScene/index.ts +++ b/packages/api-explorer/src/scenes/TypeScene/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { TypeScene } from './TypeScene' +export { TypeScene } from './TypeScene'; diff --git a/packages/api-explorer/src/scenes/TypeTagScene/TypeTagScene.spec.tsx b/packages/api-explorer/src/scenes/TypeTagScene/TypeTagScene.spec.tsx index 2cdf6b2f2..5b4548e51 100644 --- a/packages/api-explorer/src/scenes/TypeTagScene/TypeTagScene.spec.tsx +++ b/packages/api-explorer/src/scenes/TypeTagScene/TypeTagScene.spec.tsx @@ -23,21 +23,21 @@ SOFTWARE. */ -import React from 'react' -import { Route } from 'react-router-dom' -import { screen, waitFor } from '@testing-library/react' -import userEvent from '@testing-library/user-event' +import React from 'react'; +import { Route } from 'react-router-dom'; +import { screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; -import { api } from '../../test-data' -import { renderWithRouterAndReduxProvider } from '../../test-utils' -import { TypeTagScene } from './TypeTagScene' +import { api } from '../../test-data'; +import { renderWithRouterAndReduxProvider } from '../../test-utils'; +import { TypeTagScene } from './TypeTagScene'; -const opBtnNames = /ALL|SPECIFICATION|WRITE|REQUEST|ENUMERATED/ +const opBtnNames = /ALL|SPECIFICATION|WRITE|REQUEST|ENUMERATED/; -const path = '/:specKey/types/:typeTag' -const mockHistoryPush = jest.fn() +const path = '/:specKey/types/:typeTag'; +const mockHistoryPush = jest.fn(); jest.mock('react-router-dom', () => { - const ReactRouterDOM = jest.requireActual('react-router-dom') + const ReactRouterDOM = jest.requireActual('react-router-dom'); return { ...ReactRouterDOM, useLocation: () => ({ @@ -49,11 +49,11 @@ jest.mock('react-router-dom', () => { pathname: '/4.0/types/Look', }, }), - } -}) + }; +}); describe('TypeTagScene', () => { - Element.prototype.scrollTo = jest.fn() + Element.prototype.scrollTo = jest.fn(); // const mockHistoryPush: jest.Mock = useHistory as jest.Mock test('it renders type buttons and all methods for a given type tag', () => { @@ -62,20 +62,20 @@ describe('TypeTagScene', () => { , ['/4.0/types/Dashboard'] - ) + ); expect( screen.getAllByRole('button', { name: opBtnNames, }) - ).toHaveLength(4) + ).toHaveLength(4); expect(screen.getAllByRole('heading', { level: 3 })).toHaveLength( Object.keys(api.typeTags.Dashboard).length - ) + ); expect(screen.getByText('DashboardBase').closest('a')).toHaveAttribute( 'href', '/4.0/types/Dashboard/DashboardBase' - ) - }) + ); + }); test('it only renders operation buttons for operations that exist under that tag', () => { renderWithRouterAndReduxProvider( @@ -83,37 +83,39 @@ describe('TypeTagScene', () => { , ['/4.0/types/DataAction'] - ) + ); expect( screen.getAllByRole('button', { name: opBtnNames, }) - ).toHaveLength(2) - }) + ).toHaveLength(2); + }); test('it pushes filter to URL on toggle', async () => { - const site = '/4.0/types/Look' + const site = '/4.0/types/Look'; renderWithRouterAndReduxProvider( , [site] - ) + ); /** Filter by SPECIFICATION */ - userEvent.click(screen.getByRole('button', { name: 'SPECIFICATION' })) + await userEvent.click( + screen.getByRole('button', { name: 'SPECIFICATION' }) + ); await waitFor(() => { expect(mockHistoryPush).toHaveBeenCalledWith({ pathname: site, search: 't=specification', - }) - }) + }); + }); /** Filter by REQUEST */ - userEvent.click(screen.getByRole('button', { name: 'REQUEST' })) + await userEvent.click(screen.getByRole('button', { name: 'REQUEST' })); await waitFor(() => { expect(mockHistoryPush).toHaveBeenCalledWith({ pathname: site, search: 't=request', - }) - }) - }) -}) + }); + }); + }); +}); diff --git a/packages/api-explorer/src/scenes/TypeTagScene/TypeTagScene.tsx b/packages/api-explorer/src/scenes/TypeTagScene/TypeTagScene.tsx index b34ffe204..6c7e88baa 100644 --- a/packages/api-explorer/src/scenes/TypeTagScene/TypeTagScene.tsx +++ b/packages/api-explorer/src/scenes/TypeTagScene/TypeTagScene.tsx @@ -23,71 +23,73 @@ SOFTWARE. */ -import type { FC } from 'react' -import React, { useEffect, useState } from 'react' -import { Grid, ButtonToggle, ButtonItem } from '@looker/components' -import type { ApiModel } from '@looker/sdk-codegen' -import { useLocation, useParams } from 'react-router-dom' -import { useSelector } from 'react-redux' -import { ApixSection, DocTitle, DocTypeSummary, Link } from '../../components' -import { buildTypePath, isValidFilter, useNavigation } from '../../utils' -import { selectTagFilter, useSettingActions } from '../../state' -import { useTagStoreSync } from '../utils' -import { getMetaTypes } from './utils' +import type { FC } from 'react'; +import React, { useEffect, useState } from 'react'; +import { ButtonItem, ButtonToggle, Grid } from '@looker/components'; +import type { ApiModel } from '@looker/sdk-codegen'; +import { useLocation, useParams } from 'react-router-dom'; +import { useSelector } from 'react-redux'; +import { ApixSection, DocTitle, DocTypeSummary, Link } from '../../components'; +import { buildTypePath, isValidFilter, useNavigation } from '../../utils'; +import { selectTagFilter, useSettingActions } from '../../state'; +import { useTagStoreSync } from '../utils'; +import { getMetaTypes } from './utils'; interface TypeTagSceneProps { - api: ApiModel + api: ApiModel; } interface TypeTagSceneParams { - specKey: string - typeTag: string + specKey: string; + typeTag: string; } export const TypeTagScene: FC = ({ api }) => { - const { specKey, typeTag } = useParams() - const location = useLocation() + const { specKey, typeTag } = useParams(); + const location = useLocation(); const { navigate, buildPathWithGlobalParams, navigateWithGlobalParams } = - useNavigation() - const selectedTagFilter = useSelector(selectTagFilter) - const { setTagFilterAction } = useSettingActions() - const [tagFilter, setTagFilter] = useState(selectedTagFilter) - useTagStoreSync() + useNavigation(); + const selectedTagFilter = useSelector(selectTagFilter); + const { setTagFilterAction } = useSettingActions(); + const [tagFilter, setTagFilter] = useState(selectedTagFilter); + useTagStoreSync(); const handleChange = (filter: string) => { navigate(location.pathname, { t: filter === 'ALL' ? null : filter.toLowerCase(), - }) - } + }); + }; useEffect(() => { - const searchParams = new URLSearchParams(location.search) - let verbParam = searchParams.get('t') || 'ALL' + const searchParams = new URLSearchParams(location.search); + let verbParam = searchParams.get('t') || 'ALL'; verbParam = isValidFilter(location.pathname, verbParam) ? verbParam.toUpperCase() - : 'ALL' + : 'ALL'; setTagFilterAction({ tagFilter: verbParam, - }) - }, [location.search]) + }); + }, [location.search]); - const types = api.typeTags[typeTag] + const types = api.typeTags[typeTag]; useEffect(() => { if (!types) { - navigateWithGlobalParams(`/${specKey}/types`) + navigateWithGlobalParams(`/${specKey}/types`); } - }, [types]) + }, [types]); useEffect(() => { - setTagFilter(selectedTagFilter) - }, [selectedTagFilter]) + setTagFilter(selectedTagFilter); + }, [selectedTagFilter]); if (!types) { - return <> + return <>; } - const tag = Object.values(api.spec.tags!).find((tag) => tag.name === typeTag)! - const metaTypes = getMetaTypes(types) + const tag = Object.values(api.spec.tags!).find( + (tag) => tag.name === typeTag + )!; + const metaTypes = getMetaTypes(types); return ( {`${tag.name}: ${tag.description}`} @@ -123,5 +125,5 @@ export const TypeTagScene: FC = ({ api }) => { ) )} - ) -} + ); +}; diff --git a/packages/api-explorer/src/scenes/TypeTagScene/index.ts b/packages/api-explorer/src/scenes/TypeTagScene/index.ts index da0175b78..4a131f284 100644 --- a/packages/api-explorer/src/scenes/TypeTagScene/index.ts +++ b/packages/api-explorer/src/scenes/TypeTagScene/index.ts @@ -23,4 +23,4 @@ SOFTWARE. */ -export { TypeTagScene } from './TypeTagScene' +export { TypeTagScene } from './TypeTagScene'; diff --git a/packages/api-explorer/src/scenes/TypeTagScene/utils.spec.ts b/packages/api-explorer/src/scenes/TypeTagScene/utils.spec.ts index d4b18efa9..07fcfd2fc 100644 --- a/packages/api-explorer/src/scenes/TypeTagScene/utils.spec.ts +++ b/packages/api-explorer/src/scenes/TypeTagScene/utils.spec.ts @@ -23,12 +23,12 @@ SOFTWARE. */ -import { api } from '../../test-data' -import { getMetaTypes } from './utils' +import { api } from '../../test-data'; +import { getMetaTypes } from './utils'; describe('TypeTagScene utils', () => { test('getMetaTypes returns a unique list of MetaTypes', () => { - const actual = getMetaTypes(api.typeTags.Query) - expect(actual).toHaveLength(4) - }) -}) + const actual = getMetaTypes(api.typeTags.Query); + expect(actual).toHaveLength(4); + }); +}); diff --git a/packages/api-explorer/src/scenes/TypeTagScene/utils.ts b/packages/api-explorer/src/scenes/TypeTagScene/utils.ts index 8bda4b204..4aa163920 100644 --- a/packages/api-explorer/src/scenes/TypeTagScene/utils.ts +++ b/packages/api-explorer/src/scenes/TypeTagScene/utils.ts @@ -24,16 +24,16 @@ */ -import type { TypeList } from '@looker/sdk-codegen' +import type { TypeList } from '@looker/sdk-codegen'; /** * Given a list of types it returns a list of distinct types * @param types A list of types */ export const getMetaTypes = (types: TypeList) => { - const typeSet = new Set() + const typeSet = new Set(); Object.values(types).forEach((type) => { - typeSet.add(type.metaType.toString().toUpperCase()) - }) - return Array.from(typeSet.values()) -} + typeSet.add(type.metaType.toString().toUpperCase()); + }); + return Array.from(typeSet.values()); +}; diff --git a/packages/api-explorer/src/scenes/index.ts b/packages/api-explorer/src/scenes/index.ts index 3edd30465..958424d82 100644 --- a/packages/api-explorer/src/scenes/index.ts +++ b/packages/api-explorer/src/scenes/index.ts @@ -23,9 +23,9 @@ SOFTWARE. */ -export { ErrorDetailScene } from './ErrorDetailScene' -export { HomeScene } from './HomeScene' -export { MethodScene } from './MethodScene' -export { TypeScene } from './TypeScene' -export { MethodTagScene } from './MethodTagScene' -export { TypeTagScene } from './TypeTagScene' +export { ErrorDetailScene } from './ErrorDetailScene'; +export { HomeScene } from './HomeScene'; +export { MethodScene } from './MethodScene'; +export { TypeScene } from './TypeScene'; +export { MethodTagScene } from './MethodTagScene'; +export { TypeTagScene } from './TypeTagScene'; diff --git a/packages/api-explorer/src/scenes/utils/hooks/index.ts b/packages/api-explorer/src/scenes/utils/hooks/index.ts index 760873280..098b04a3b 100644 --- a/packages/api-explorer/src/scenes/utils/hooks/index.ts +++ b/packages/api-explorer/src/scenes/utils/hooks/index.ts @@ -24,4 +24,4 @@ */ -export { useTagStoreSync } from './tagStoreSync' +export { useTagStoreSync } from './tagStoreSync'; diff --git a/packages/api-explorer/src/scenes/utils/hooks/tagStoreSync.spec.ts b/packages/api-explorer/src/scenes/utils/hooks/tagStoreSync.spec.ts index e8b42f7fd..dfa952398 100644 --- a/packages/api-explorer/src/scenes/utils/hooks/tagStoreSync.spec.ts +++ b/packages/api-explorer/src/scenes/utils/hooks/tagStoreSync.spec.ts @@ -23,82 +23,82 @@ SOFTWARE. */ -import { renderHook } from '@testing-library/react-hooks' -import { useHistory } from 'react-router-dom' -import type { Location } from 'history' -import * as reactRedux from 'react-redux' -import * as routerLocation from 'react-router-dom' -import { createTestStore, withReduxProvider } from '../../../test-utils' -import { useTagStoreSync } from './tagStoreSync' +import { renderHook } from '@testing-library/react-hooks'; +import { useHistory } from 'react-router-dom'; +import type { Location } from 'history'; +import * as reactRedux from 'react-redux'; +import * as routerLocation from 'react-router-dom'; +import { createTestStore, withReduxProvider } from '../../../test-utils'; +import { useTagStoreSync } from './tagStoreSync'; jest.mock('react-router', () => { - const ReactRouter = jest.requireActual('react-router') + const ReactRouter = jest.requireActual('react-router'); return { ...ReactRouter, useHistory: jest .fn() .mockReturnValue({ push: jest.fn(), location: globalThis.location }), useLocation: jest.fn().mockReturnValue({ pathname: '/', search: '' }), - } -}) + }; +}); describe.skip('useTagStoreSync', () => { - const mockDispatch = jest.fn() + const mockDispatch = jest.fn(); afterEach(() => { - jest.clearAllMocks() - }) + jest.clearAllMocks(); + }); test('does nothing if uninitialized', () => { - const { push } = useHistory() - const wrapper = ({ children }: any) => withReduxProvider(children) - renderHook(() => useTagStoreSync(), { wrapper }) - expect(push).not.toHaveBeenCalled() - }) + const { push } = useHistory(); + const wrapper = ({ children }: any) => withReduxProvider(children); + renderHook(() => useTagStoreSync(), { wrapper }); + expect(push).not.toHaveBeenCalled(); + }); describe.each([ ['methods', 'get'], ['types', 'specification'], ])('tag filter verb for sidenav %s tab', (tagType, verb) => { test('overrides store tag filter given valid url tag filter param', () => { - const { push } = useHistory() + const { push } = useHistory(); const store = createTestStore({ settings: { initialized: true, }, - }) + }); jest.spyOn(routerLocation, 'useLocation').mockReturnValue({ pathname: `/4.0/${tagType}/ApiAuth`, search: `t=${verb}`, - } as unknown as Location) - jest.spyOn(reactRedux, 'useDispatch').mockReturnValue(mockDispatch) - const wrapper = ({ children }: any) => withReduxProvider(children, store) - renderHook(() => useTagStoreSync(), { wrapper }) - expect(push).not.toHaveBeenCalled() + } as unknown as Location); + jest.spyOn(reactRedux, 'useDispatch').mockReturnValue(mockDispatch); + const wrapper = ({ children }: any) => withReduxProvider(children, store); + renderHook(() => useTagStoreSync(), { wrapper }); + expect(push).not.toHaveBeenCalled(); expect(mockDispatch).toHaveBeenLastCalledWith({ payload: { tagFilter: verb.toUpperCase() }, type: 'settings/setTagFilterAction', - }) - }) + }); + }); test('updates url with store tag filter given invalid url tag filter param', () => { - const { push } = useHistory() + const { push } = useHistory(); const store = createTestStore({ settings: { initialized: true, }, - }) + }); jest.spyOn(routerLocation, 'useLocation').mockReturnValue({ pathname: `/4.0/${tagType}/ApiAuth`, search: 't=invalid', - } as unknown as Location) - jest.spyOn(reactRedux, 'useDispatch').mockReturnValue(mockDispatch) - const wrapper = ({ children }: any) => withReduxProvider(children, store) - renderHook(() => useTagStoreSync(), { wrapper }) + } as unknown as Location); + jest.spyOn(reactRedux, 'useDispatch').mockReturnValue(mockDispatch); + const wrapper = ({ children }: any) => withReduxProvider(children, store); + renderHook(() => useTagStoreSync(), { wrapper }); expect(push).toHaveBeenCalledWith({ pathname: `/4.0/${tagType}/ApiAuth`, search: '', - }) - }) - }) -}) + }); + }); + }); +}); diff --git a/packages/api-explorer/src/scenes/utils/hooks/tagStoreSync.ts b/packages/api-explorer/src/scenes/utils/hooks/tagStoreSync.ts index 8c2b24ffb..819f28293 100644 --- a/packages/api-explorer/src/scenes/utils/hooks/tagStoreSync.ts +++ b/packages/api-explorer/src/scenes/utils/hooks/tagStoreSync.ts @@ -23,15 +23,15 @@ SOFTWARE. */ -import { useLocation } from 'react-router-dom' -import { useSelector } from 'react-redux' -import { useEffect } from 'react' +import { useLocation } from 'react-router-dom'; +import { useSelector } from 'react-redux'; +import { useEffect } from 'react'; import { selectTagFilter, useSettingActions, useSettingStoreState, -} from '../../../state' -import { isValidFilter, useNavigation } from '../../../utils' +} from '../../../state'; +import { isValidFilter, useNavigation } from '../../../utils'; /** * Hook for syncing tag scene URL params with the Redux store @@ -39,30 +39,30 @@ import { isValidFilter, useNavigation } from '../../../utils' * Tag scene specific search parameters: 't' */ export const useTagStoreSync = () => { - const location = useLocation() - const { navigate } = useNavigation() - const { setTagFilterAction } = useSettingActions() - const { initialized } = useSettingStoreState() - const selectedTagFilter = useSelector(selectTagFilter) + const location = useLocation(); + const { navigate } = useNavigation(); + const { setTagFilterAction } = useSettingActions(); + const { initialized } = useSettingStoreState(); + const selectedTagFilter = useSelector(selectTagFilter); useEffect(() => { if (initialized) { - const params = new URLSearchParams(location.search) + const params = new URLSearchParams(location.search); // syncing verb filter on tag scene page - const verbParam = params.get('t') || 'ALL' - const validVerbParam = isValidFilter(location.pathname, verbParam) + const verbParam = params.get('t') || 'ALL'; + const validVerbParam = isValidFilter(location.pathname, verbParam); if (validVerbParam) { - setTagFilterAction({ tagFilter: verbParam.toUpperCase() }) + setTagFilterAction({ tagFilter: verbParam.toUpperCase() }); } else { // must confirm store tag filter param is valid for tag type before updating const verb = isValidFilter(location.pathname, selectedTagFilter) ? selectedTagFilter - : 'ALL' + : 'ALL'; navigate(location.pathname, { t: verb === 'ALL' ? null : verb.toLowerCase(), - }) + }); } } - }, [initialized]) -} + }, [initialized]); +}; diff --git a/packages/api-explorer/src/scenes/utils/index.ts b/packages/api-explorer/src/scenes/utils/index.ts index 409d04295..fb077b0b6 100644 --- a/packages/api-explorer/src/scenes/utils/index.ts +++ b/packages/api-explorer/src/scenes/utils/index.ts @@ -24,4 +24,4 @@ */ -export { useTagStoreSync } from './hooks' +export { useTagStoreSync } from './hooks'; diff --git a/packages/api-explorer/src/state/index.ts b/packages/api-explorer/src/state/index.ts index 53aecd36a..4d2f603a3 100644 --- a/packages/api-explorer/src/state/index.ts +++ b/packages/api-explorer/src/state/index.ts @@ -23,7 +23,7 @@ SOFTWARE. */ -export * from './store' -export * from './settings' -export * from './lodes' -export * from './specs' +export * from './store'; +export * from './settings'; +export * from './lodes'; +export * from './specs'; diff --git a/packages/api-explorer/src/state/lodes/index.ts b/packages/api-explorer/src/state/lodes/index.ts index a06152c6f..795460019 100644 --- a/packages/api-explorer/src/state/lodes/index.ts +++ b/packages/api-explorer/src/state/lodes/index.ts @@ -23,5 +23,5 @@ SOFTWARE. */ -export * from './selectors' -export * from './slice' +export * from './selectors'; +export * from './slice'; diff --git a/packages/api-explorer/src/state/lodes/sagas.spec.ts b/packages/api-explorer/src/state/lodes/sagas.spec.ts index 071586686..66eaf33de 100644 --- a/packages/api-explorer/src/state/lodes/sagas.spec.ts +++ b/packages/api-explorer/src/state/lodes/sagas.spec.ts @@ -23,70 +23,70 @@ SOFTWARE. */ -import ReduxSagaTester from 'redux-saga-tester' -import { examples, declarations } from '../../test-data' -import * as lodeUtils from '../../utils/lodeUtils' -import * as sagas from './sagas' -import { lodeActions, lodesSlice } from './slice' +import ReduxSagaTester from 'redux-saga-tester'; +import { declarations, examples } from '../../test-data'; +import * as lodeUtils from '../../utils/lodeUtils'; +import * as sagas from './sagas'; +import { lodeActions, lodesSlice } from './slice'; describe('Lode sagas', () => { - let sagaTester: ReduxSagaTester + let sagaTester: ReduxSagaTester; beforeEach(() => { - jest.resetAllMocks() + jest.resetAllMocks(); sagaTester = new ReduxSagaTester({ initialState: { lodes: { examples, declarations } }, reducers: { lodes: lodesSlice.reducer, }, - }) - sagaTester.start(sagas.saga) - }) + }); + sagaTester.start(sagas.saga); + }); describe('initSaga', () => { const { initLodesAction, initLodesSuccessAction, initLodesFailureAction } = - lodeActions - const examplesLodeUrl = 'https://foo.com/examples.json' - const declarationsLodeUrl = 'https://foo.com/declarations.json' + lodeActions; + const examplesLodeUrl = 'https://foo.com/examples.json'; + const declarationsLodeUrl = 'https://foo.com/declarations.json'; test('sends initLodesSuccessAction with examples and declarations on success', async () => { jest .spyOn(lodeUtils, 'getLoded') - .mockResolvedValueOnce({ examples, declarations }) + .mockResolvedValueOnce({ examples, declarations }); sagaTester.dispatch( initLodesAction({ examplesLodeUrl, declarationsLodeUrl }) - ) + ); - await sagaTester.waitFor('lodes/initLodesSuccessAction') - const calledActions = sagaTester.getCalledActions() - expect(calledActions).toHaveLength(2) + await sagaTester.waitFor('lodes/initLodesSuccessAction'); + const calledActions = sagaTester.getCalledActions(); + expect(calledActions).toHaveLength(2); expect(calledActions[0]).toEqual( initLodesAction({ examplesLodeUrl, declarationsLodeUrl }) - ) + ); expect(calledActions[1]).toEqual( initLodesSuccessAction({ examples, declarations, }) - ) - }) + ); + }); test('sends initLodesFailureAction on error', async () => { - const error = new Error('boom') - jest.spyOn(lodeUtils, 'getLoded').mockRejectedValueOnce(error) + const error = new Error('boom'); + jest.spyOn(lodeUtils, 'getLoded').mockRejectedValueOnce(error); sagaTester.dispatch( initLodesAction({ examplesLodeUrl, declarationsLodeUrl }) - ) + ); - await sagaTester.waitFor('lodes/initLodesFailureAction') - const calledActions = sagaTester.getCalledActions() - expect(calledActions).toHaveLength(2) + await sagaTester.waitFor('lodes/initLodesFailureAction'); + const calledActions = sagaTester.getCalledActions(); + expect(calledActions).toHaveLength(2); expect(calledActions[0]).toEqual( initLodesAction({ examplesLodeUrl, declarationsLodeUrl }) - ) - expect(calledActions[1]).toEqual(initLodesFailureAction(error)) - }) - }) -}) + ); + expect(calledActions[1]).toEqual(initLodesFailureAction(error)); + }); + }); +}); diff --git a/packages/api-explorer/src/state/lodes/sagas.ts b/packages/api-explorer/src/state/lodes/sagas.ts index 1dc37a908..ab78d25f4 100644 --- a/packages/api-explorer/src/state/lodes/sagas.ts +++ b/packages/api-explorer/src/state/lodes/sagas.ts @@ -23,29 +23,29 @@ SOFTWARE. */ -import { call, put, takeEvery } from 'typed-redux-saga' -import type { PayloadAction } from '@reduxjs/toolkit' +import { call, put, takeEvery } from 'typed-redux-saga'; +import type { PayloadAction } from '@reduxjs/toolkit'; -import { getLoded } from '../../utils' -import type { InitPayload } from './slice' -import { lodeActions } from './slice' +import { getLoded } from '../../utils'; +import type { InitPayload } from './slice'; +import { lodeActions } from './slice'; function* initSaga(action: PayloadAction) { - const { initLodesSuccessAction, initLodesFailureAction } = lodeActions + const { initLodesSuccessAction, initLodesFailureAction } = lodeActions; try { const lode = yield* call( getLoded, action.payload.examplesLodeUrl, action.payload.declarationsLodeUrl - ) - yield* put(initLodesSuccessAction(lode)) + ); + yield* put(initLodesSuccessAction(lode)); } catch (error: any) { - yield* put(initLodesFailureAction(error)) + yield* put(initLodesFailureAction(error)); } } export function* saga() { - const { initLodesAction } = lodeActions + const { initLodesAction } = lodeActions; - yield* takeEvery(initLodesAction, initSaga) + yield* takeEvery(initLodesAction, initSaga); } diff --git a/packages/api-explorer/src/state/lodes/selectors.spec.ts b/packages/api-explorer/src/state/lodes/selectors.spec.ts index b69d1f23e..28f55a029 100644 --- a/packages/api-explorer/src/state/lodes/selectors.spec.ts +++ b/packages/api-explorer/src/state/lodes/selectors.spec.ts @@ -23,20 +23,20 @@ SOFTWARE. */ -import { createTestStore } from '../../test-utils' -import { declarations, examples } from '../../test-data' -import { selectDeclarationsLode, selectExamplesLode } from './selectors' +import { createTestStore } from '../../test-utils'; +import { declarations, examples } from '../../test-data'; +import { selectDeclarationsLode, selectExamplesLode } from './selectors'; -const testStore = createTestStore({ lodes: { examples, declarations } }) +const testStore = createTestStore({ lodes: { examples, declarations } }); describe('Lode selectors', () => { - const state = testStore.getState() + const state = testStore.getState(); test('selectExamplesLode selects', () => { - expect(selectExamplesLode(state)).toEqual(examples) - }) + expect(selectExamplesLode(state)).toEqual(examples); + }); test('selectDeclarationsLode selects', () => { - expect(selectDeclarationsLode(state)).toEqual(declarations) - }) -}) + expect(selectDeclarationsLode(state)).toEqual(declarations); + }); +}); diff --git a/packages/api-explorer/src/state/lodes/selectors.ts b/packages/api-explorer/src/state/lodes/selectors.ts index 5784b182f..c5403f8e7 100644 --- a/packages/api-explorer/src/state/lodes/selectors.ts +++ b/packages/api-explorer/src/state/lodes/selectors.ts @@ -23,12 +23,12 @@ SOFTWARE. */ -import type { RootState } from '../store' +import type { RootState } from '../store'; -const selectLodeState = (state: RootState) => state.lodes +const selectLodeState = (state: RootState) => state.lodes; export const selectExamplesLode = (state: RootState) => - selectLodeState(state).examples + selectLodeState(state).examples; export const selectDeclarationsLode = (state: RootState) => - selectLodeState(state).declarations + selectLodeState(state).declarations; diff --git a/packages/api-explorer/src/state/lodes/slice.ts b/packages/api-explorer/src/state/lodes/slice.ts index a5b43fae8..3d58080ab 100644 --- a/packages/api-explorer/src/state/lodes/slice.ts +++ b/packages/api-explorer/src/state/lodes/slice.ts @@ -23,30 +23,30 @@ SOFTWARE. */ -import { createSliceHooks } from '@looker/redux' -import type { IDeclarationMine, IExampleMine } from '@looker/sdk-codegen' -import type { PayloadAction } from '@reduxjs/toolkit' -import { createSlice } from '@reduxjs/toolkit' +import { createSliceHooks } from '@looker/redux'; +import type { IDeclarationMine, IExampleMine } from '@looker/sdk-codegen'; +import type { PayloadAction } from '@reduxjs/toolkit'; +import { createSlice } from '@reduxjs/toolkit'; -import { saga } from './sagas' +import { saga } from './sagas'; export interface LodesState { - examples?: IExampleMine - declarations?: IDeclarationMine - error?: Error + examples?: IExampleMine; + declarations?: IDeclarationMine; + error?: Error; } export const defaultLodesState: LodesState = { examples: undefined, declarations: undefined, -} +}; export interface InitPayload { - examplesLodeUrl?: string - declarationsLodeUrl?: string + examplesLodeUrl?: string; + declarationsLodeUrl?: string; } -type InitSuccessAction = LodesState +type InitSuccessAction = LodesState; export const lodesSlice = createSlice({ name: 'lodes', @@ -55,15 +55,15 @@ export const lodesSlice = createSlice({ // eslint-disable-next-line @typescript-eslint/no-empty-function initLodesAction(_state, _action: PayloadAction) {}, initLodesSuccessAction(state, action: PayloadAction) { - state.examples = action.payload.examples - state.declarations = action.payload.declarations + state.examples = action.payload.examples; + state.declarations = action.payload.declarations; }, initLodesFailureAction(state, action: PayloadAction) { - state.error = action.payload + state.error = action.payload; }, }, -}) +}); -export const lodeActions = lodesSlice.actions +export const lodeActions = lodesSlice.actions; export const { useActions: useLodeActions, useStoreState: useLodesStoreState } = - createSliceHooks(lodesSlice, saga) + createSliceHooks(lodesSlice, saga); diff --git a/packages/api-explorer/src/state/settings/index.ts b/packages/api-explorer/src/state/settings/index.ts index a06152c6f..795460019 100644 --- a/packages/api-explorer/src/state/settings/index.ts +++ b/packages/api-explorer/src/state/settings/index.ts @@ -23,5 +23,5 @@ SOFTWARE. */ -export * from './selectors' -export * from './slice' +export * from './selectors'; +export * from './slice'; diff --git a/packages/api-explorer/src/state/settings/sagas.spec.ts b/packages/api-explorer/src/state/settings/sagas.spec.ts index a1d92b23f..3584ec956 100644 --- a/packages/api-explorer/src/state/settings/sagas.spec.ts +++ b/packages/api-explorer/src/state/settings/sagas.spec.ts @@ -23,99 +23,99 @@ SOFTWARE. */ -import ReduxSagaTester from 'redux-saga-tester' +import ReduxSagaTester from 'redux-saga-tester'; -import { getEnvAdaptor, registerTestEnvAdaptor } from '@looker/extension-utils' -import { StoreConstants } from '@looker/run-it' -import * as sagas from './sagas' -import { settingActions, defaultSettings, settingsSlice } from './slice' +import { getEnvAdaptor, registerTestEnvAdaptor } from '@looker/extension-utils'; +import { StoreConstants } from '@looker/run-it'; +import * as sagas from './sagas'; +import { defaultSettings, settingActions, settingsSlice } from './slice'; describe('Settings Sagas', () => { - let sagaTester: ReduxSagaTester - registerTestEnvAdaptor() + let sagaTester: ReduxSagaTester; + registerTestEnvAdaptor(); beforeEach(() => { - jest.resetAllMocks() + jest.resetAllMocks(); sagaTester = new ReduxSagaTester({ initialState: { settings: { sdkLanguage: 'Go' } }, reducers: { settings: settingsSlice.reducer, }, - }) - localStorage.clear() - sagaTester.start(sagas.saga) - }) + }); + localStorage.clear(); + sagaTester.start(sagas.saga); + }); describe('setSdkLanguageSaga', () => { - const setSdkLanguageAction = settingActions.setSdkLanguageAction + const setSdkLanguageAction = settingActions.setSdkLanguageAction; test('persists value sdkLanguage in localstorage', async () => { - sagaTester.dispatch(setSdkLanguageAction({ sdkLanguage: 'Kotlin' })) - await sagaTester.waitFor('settings/setSdkLanguageAction') - const calledActions = sagaTester.getCalledActions() - expect(calledActions).toHaveLength(1) + sagaTester.dispatch(setSdkLanguageAction({ sdkLanguage: 'Kotlin' })); + await sagaTester.waitFor('settings/setSdkLanguageAction'); + const calledActions = sagaTester.getCalledActions(); + expect(calledActions).toHaveLength(1); expect(calledActions[0]).toEqual( setSdkLanguageAction({ sdkLanguage: 'Kotlin', }) - ) + ); expect(localStorage.setItem).toHaveBeenLastCalledWith( StoreConstants.LOCALSTORAGE_SETTINGS_KEY, JSON.stringify({ sdkLanguage: 'Kotlin' }) - ) - }) - }) + ); + }); + }); describe('initSaga', () => { const { initSettingsAction, initSettingsSuccessAction, initSettingsFailureAction, - } = settingActions + } = settingActions; test('sends initSuccess action with defaults on success if no persisted settings are found', async () => { - sagaTester.dispatch(initSettingsAction()) - await sagaTester.waitFor('settings/initSettingsSuccessAction') - const calledActions = sagaTester.getCalledActions() - expect(calledActions).toHaveLength(2) - expect(calledActions[0]).toEqual(initSettingsAction()) + sagaTester.dispatch(initSettingsAction()); + await sagaTester.waitFor('settings/initSettingsSuccessAction'); + const calledActions = sagaTester.getCalledActions(); + expect(calledActions).toHaveLength(2); + expect(calledActions[0]).toEqual(initSettingsAction()); expect(calledActions[1]).toEqual( initSettingsSuccessAction({ ...defaultSettings, }) - ) - }) + ); + }); test('sends initSettingsSuccessAction with persisted language on success', async () => { jest .spyOn(getEnvAdaptor(), 'localStorageGetItem') - .mockResolvedValueOnce(JSON.stringify({ sdkLanguage: 'Go' })) + .mockResolvedValueOnce(JSON.stringify({ sdkLanguage: 'Go' })); - sagaTester.dispatch(initSettingsAction()) - await sagaTester.waitFor('settings/initSettingsSuccessAction') - const calledActions = sagaTester.getCalledActions() - expect(calledActions).toHaveLength(2) - expect(calledActions[0]).toEqual(initSettingsAction()) + sagaTester.dispatch(initSettingsAction()); + await sagaTester.waitFor('settings/initSettingsSuccessAction'); + const calledActions = sagaTester.getCalledActions(); + expect(calledActions).toHaveLength(2); + expect(calledActions[0]).toEqual(initSettingsAction()); expect(calledActions[1]).toEqual( initSettingsSuccessAction({ ...defaultSettings, sdkLanguage: 'Go', }) - ) - }) + ); + }); test('sends initSettingsFailureAction on error', async () => { - const error = new Error('boom') + const error = new Error('boom'); jest .spyOn(getEnvAdaptor(), 'localStorageGetItem') - .mockRejectedValueOnce(error) - - sagaTester.dispatch(initSettingsAction()) - await sagaTester.waitFor('settings/initSettingsFailureAction') - const calledActions = sagaTester.getCalledActions() - expect(calledActions).toHaveLength(2) - expect(calledActions[0]).toEqual(initSettingsAction()) - expect(calledActions[1]).toEqual(initSettingsFailureAction(error)) - }) - }) -}) + .mockRejectedValueOnce(error); + + sagaTester.dispatch(initSettingsAction()); + await sagaTester.waitFor('settings/initSettingsFailureAction'); + const calledActions = sagaTester.getCalledActions(); + expect(calledActions).toHaveLength(2); + expect(calledActions[0]).toEqual(initSettingsAction()); + expect(calledActions[1]).toEqual(initSettingsFailureAction(error)); + }); + }); +}); diff --git a/packages/api-explorer/src/state/settings/sagas.ts b/packages/api-explorer/src/state/settings/sagas.ts index c9ea8a6e1..7fc715cc7 100644 --- a/packages/api-explorer/src/state/settings/sagas.ts +++ b/packages/api-explorer/src/state/settings/sagas.ts @@ -23,38 +23,38 @@ SOFTWARE. */ -import { takeEvery, call, put, select } from 'typed-redux-saga' +import { call, put, select, takeEvery } from 'typed-redux-saga'; -import { getEnvAdaptor } from '@looker/extension-utils' -import { StoreConstants } from '@looker/run-it' -import type { RootState } from '../store' -import { settingActions, defaultSettings } from './slice' +import { getEnvAdaptor } from '@looker/extension-utils'; +import { StoreConstants } from '@looker/run-it'; +import type { RootState } from '../store'; +import { defaultSettings, settingActions } from './slice'; /** * Serializes state to local storage */ function* serializeToLocalStorageSaga() { - const adaptor = getEnvAdaptor() + const adaptor = getEnvAdaptor(); const settings = yield* select((state: RootState) => ({ sdkLanguage: state.settings.sdkLanguage, - })) + })); adaptor.localStorageSetItem( StoreConstants.LOCALSTORAGE_SETTINGS_KEY, JSON.stringify(settings) - ) + ); } /** * Returns default settings overridden with any persisted state in local storage */ async function deserializeLocalStorage() { - const adaptor = getEnvAdaptor() + const adaptor = getEnvAdaptor(); const settings = await adaptor.localStorageGetItem( StoreConstants.LOCALSTORAGE_SETTINGS_KEY - ) + ); return settings ? { ...defaultSettings, ...JSON.parse(settings) } - : defaultSettings + : defaultSettings; } /** @@ -62,18 +62,18 @@ async function deserializeLocalStorage() { */ function* initSaga() { const { initSettingsSuccessAction, initSettingsFailureAction } = - settingActions + settingActions; try { - const settings = yield* call(deserializeLocalStorage) - yield* put(initSettingsSuccessAction(settings)) + const settings = yield* call(deserializeLocalStorage); + yield* put(initSettingsSuccessAction(settings)); } catch (error: any) { - yield* put(initSettingsFailureAction(error)) + yield* put(initSettingsFailureAction(error)); } } export function* saga() { - const { initSettingsAction, setSdkLanguageAction } = settingActions + const { initSettingsAction, setSdkLanguageAction } = settingActions; - yield* takeEvery(initSettingsAction, initSaga) - yield* takeEvery(setSdkLanguageAction, serializeToLocalStorageSaga) + yield* takeEvery(initSettingsAction, initSaga); + yield* takeEvery(setSdkLanguageAction, serializeToLocalStorageSaga); } diff --git a/packages/api-explorer/src/state/settings/selectors.spec.ts b/packages/api-explorer/src/state/settings/selectors.spec.ts index 762ddce04..62a3beb27 100644 --- a/packages/api-explorer/src/state/settings/selectors.spec.ts +++ b/packages/api-explorer/src/state/settings/selectors.spec.ts @@ -23,25 +23,25 @@ SOFTWARE. */ -import { createTestStore, preloadedState } from '../../test-utils' -import { selectSdkLanguage, isInitialized, selectTagFilter } from './selectors' +import { createTestStore, preloadedState } from '../../test-utils'; +import { isInitialized, selectSdkLanguage, selectTagFilter } from './selectors'; -const testStore = createTestStore() +const testStore = createTestStore(); describe('Settings selectors', () => { - const state = testStore.getState() + const state = testStore.getState(); test('selectSdkLanguage selects', () => { expect(selectSdkLanguage(state)).toEqual( preloadedState.settings.sdkLanguage - ) - }) + ); + }); test('selectTagFilter selects', () => { - expect(selectTagFilter(state)).toEqual(preloadedState.settings.tagFilter) - }) + expect(selectTagFilter(state)).toEqual(preloadedState.settings.tagFilter); + }); test('isInitialized selects', () => { - expect(isInitialized(state)).toEqual(preloadedState.settings.initialized) - }) -}) + expect(isInitialized(state)).toEqual(preloadedState.settings.initialized); + }); +}); diff --git a/packages/api-explorer/src/state/settings/selectors.ts b/packages/api-explorer/src/state/settings/selectors.ts index fdc62d786..a20ceef9a 100644 --- a/packages/api-explorer/src/state/settings/selectors.ts +++ b/packages/api-explorer/src/state/settings/selectors.ts @@ -23,21 +23,21 @@ SOFTWARE. */ -import type { RootState } from '../store' +import type { RootState } from '../store'; -const selectSettingsState = (state: RootState) => state.settings +const selectSettingsState = (state: RootState) => state.settings; export const selectSdkLanguage = (state: RootState) => - selectSettingsState(state).sdkLanguage + selectSettingsState(state).sdkLanguage; export const selectSearchPattern = (state: RootState) => - selectSettingsState(state).searchPattern + selectSettingsState(state).searchPattern; export const selectSearchCriteria = (state: RootState) => - selectSettingsState(state).searchCriteria + selectSettingsState(state).searchCriteria; export const selectTagFilter = (state: RootState) => - selectSettingsState(state).tagFilter + selectSettingsState(state).tagFilter; export const isInitialized = (state: RootState) => - selectSettingsState(state).initialized + selectSettingsState(state).initialized; diff --git a/packages/api-explorer/src/state/settings/slice.ts b/packages/api-explorer/src/state/settings/slice.ts index a5799e4c0..54c28a01a 100644 --- a/packages/api-explorer/src/state/settings/slice.ts +++ b/packages/api-explorer/src/state/settings/slice.ts @@ -23,24 +23,24 @@ SOFTWARE. */ -import { createSlice } from '@reduxjs/toolkit' -import type { PayloadAction } from '@reduxjs/toolkit' -import { createSliceHooks } from '@looker/redux' -import type { SearchCriterionTerm } from '@looker/sdk-codegen' -import { SearchAll, setToCriteria } from '@looker/sdk-codegen' +import { createSlice } from '@reduxjs/toolkit'; +import type { PayloadAction } from '@reduxjs/toolkit'; +import { createSliceHooks } from '@looker/redux'; +import type { SearchCriterionTerm } from '@looker/sdk-codegen'; +import { SearchAll, setToCriteria } from '@looker/sdk-codegen'; -import { saga } from './sagas' +import { saga } from './sagas'; export interface UserDefinedSettings { - sdkLanguage: string + sdkLanguage: string; } export interface SettingState extends UserDefinedSettings { - searchPattern: string - searchCriteria: SearchCriterionTerm[] - tagFilter: string - initialized: boolean - error?: Error + searchPattern: string; + searchCriteria: SearchCriterionTerm[]; + tagFilter: string; + initialized: boolean; + error?: Error; } export const defaultSettings = { @@ -48,18 +48,18 @@ export const defaultSettings = { searchPattern: '', searchCriteria: setToCriteria(SearchAll) as SearchCriterionTerm[], tagFilter: 'ALL', -} +}; export const defaultSettingsState: SettingState = { ...defaultSettings, initialized: false, -} +}; -type SetSearchPatternAction = Pick -type SetSdkLanguageAction = Pick -type SetTagFilterAction = Pick +type SetSearchPatternAction = Pick; +type SetSdkLanguageAction = Pick; +type SetTagFilterAction = Pick; -export type InitSuccessPayload = UserDefinedSettings +export type InitSuccessPayload = UserDefinedSettings; export const settingsSlice = createSlice({ name: 'settings', @@ -71,30 +71,30 @@ export const settingsSlice = createSlice({ state, action: PayloadAction ) { - state.sdkLanguage = action.payload.sdkLanguage - state.initialized = true + state.sdkLanguage = action.payload.sdkLanguage; + state.initialized = true; }, initSettingsFailureAction(state, action: PayloadAction) { - state.error = action.payload - state.initialized = false + state.error = action.payload; + state.initialized = false; }, setSdkLanguageAction(state, action: PayloadAction) { - state.sdkLanguage = action.payload.sdkLanguage + state.sdkLanguage = action.payload.sdkLanguage; }, setSearchPatternAction( state, action: PayloadAction ) { - state.searchPattern = action.payload.searchPattern + state.searchPattern = action.payload.searchPattern; }, setTagFilterAction(state, action: PayloadAction) { - state.tagFilter = action.payload.tagFilter + state.tagFilter = action.payload.tagFilter; }, }, -}) +}); -export const settingActions = settingsSlice.actions +export const settingActions = settingsSlice.actions; export const { useActions: useSettingActions, useStoreState: useSettingStoreState, -} = createSliceHooks(settingsSlice, saga) +} = createSliceHooks(settingsSlice, saga); diff --git a/packages/api-explorer/src/state/specs/index.ts b/packages/api-explorer/src/state/specs/index.ts index a06152c6f..795460019 100644 --- a/packages/api-explorer/src/state/specs/index.ts +++ b/packages/api-explorer/src/state/specs/index.ts @@ -23,5 +23,5 @@ SOFTWARE. */ -export * from './selectors' -export * from './slice' +export * from './selectors'; +export * from './slice'; diff --git a/packages/api-explorer/src/state/specs/sagas.spec.ts b/packages/api-explorer/src/state/specs/sagas.spec.ts index 4274c2029..69817085b 100644 --- a/packages/api-explorer/src/state/specs/sagas.spec.ts +++ b/packages/api-explorer/src/state/specs/sagas.spec.ts @@ -23,113 +23,113 @@ SOFTWARE. */ -import ReduxSagaTester from 'redux-saga-tester' -import { registerTestEnvAdaptor } from '@looker/extension-utils' -import { initRunItSdk } from '@looker/run-it' -import cloneDeep from 'lodash/cloneDeep' -import { ApixAdaptor } from '../../utils' +import ReduxSagaTester from 'redux-saga-tester'; +import { registerTestEnvAdaptor } from '@looker/extension-utils'; +import { initRunItSdk } from '@looker/run-it'; +import cloneDeep from 'lodash/cloneDeep'; +import { ApixAdaptor } from '../../utils'; -import { getLoadedSpecs } from '../../test-data' -import { specActions, specsSlice } from './slice' -import * as sagas from './sagas' +import { getLoadedSpecs } from '../../test-data'; +import { specActions, specsSlice } from './slice'; +import * as sagas from './sagas'; describe('Specs Sagas', () => { - let sagaTester: ReduxSagaTester - const adaptor = new ApixAdaptor(initRunItSdk(), '') - registerTestEnvAdaptor(adaptor) - const specState = getLoadedSpecs() - const mockError = new Error('boom') + let sagaTester: ReduxSagaTester; + const adaptor = new ApixAdaptor(initRunItSdk(), ''); + registerTestEnvAdaptor(adaptor); + const specState = getLoadedSpecs(); + const mockError = new Error('boom'); beforeEach(() => { - jest.resetAllMocks() + jest.resetAllMocks(); sagaTester = new ReduxSagaTester({ initialState: { specs: { specs: specState } }, reducers: { specs: specsSlice.reducer, }, - }) - sagaTester.start(sagas.saga) - }) + }); + sagaTester.start(sagas.saga); + }); describe('initSaga', () => { const { initSpecsAction, initSpecsFailureAction, initSpecsSuccessAction } = - specActions + specActions; it('sends initSpecsFailureAction on error', async () => { - jest.spyOn(adaptor, 'fetchSpecList').mockRejectedValueOnce(mockError) + jest.spyOn(adaptor, 'fetchSpecList').mockRejectedValueOnce(mockError); - sagaTester.dispatch(initSpecsAction({ specKey: null })) - await sagaTester.waitFor('specs/initSpecsFailureAction') - const calledActions = sagaTester.getCalledActions() - expect(calledActions).toHaveLength(2) - expect(calledActions[0]).toEqual(initSpecsAction({ specKey: null })) - expect(calledActions[1]).toEqual(initSpecsFailureAction(mockError)) - }) + sagaTester.dispatch(initSpecsAction({ specKey: null })); + await sagaTester.waitFor('specs/initSpecsFailureAction'); + const calledActions = sagaTester.getCalledActions(); + expect(calledActions).toHaveLength(2); + expect(calledActions[0]).toEqual(initSpecsAction({ specKey: null })); + expect(calledActions[1]).toEqual(initSpecsFailureAction(mockError)); + }); it('sends initSpecsSuccessAction on success', async () => { // fetchSpecList returns the test specs jest .spyOn(adaptor, 'fetchSpecList') - .mockResolvedValueOnce(cloneDeep(specState)) + .mockResolvedValueOnce(cloneDeep(specState)); - const currentSpec = specState['3.1'] - jest.spyOn(adaptor, 'fetchSpec').mockResolvedValueOnce(currentSpec!) + const currentSpec = specState['3.1']; + jest.spyOn(adaptor, 'fetchSpec').mockResolvedValueOnce(currentSpec!); // expected state is all the specs with the current spec containing the ApiModel - const expected = cloneDeep(specState) - expected[currentSpec.key] = currentSpec - - sagaTester.dispatch(initSpecsAction({ specKey: null })) - await sagaTester.waitFor('specs/initSpecsSuccessAction') - const calledActions = sagaTester.getCalledActions() - expect(calledActions).toHaveLength(2) - expect(calledActions[0]).toEqual(initSpecsAction({ specKey: null })) + const expected = cloneDeep(specState); + expected[currentSpec.key] = currentSpec; + + sagaTester.dispatch(initSpecsAction({ specKey: null })); + await sagaTester.waitFor('specs/initSpecsSuccessAction'); + const calledActions = sagaTester.getCalledActions(); + expect(calledActions).toHaveLength(2); + expect(calledActions[0]).toEqual(initSpecsAction({ specKey: null })); expect(calledActions[1]).toEqual( initSpecsSuccessAction({ specs: expected, currentSpecKey: currentSpec.key, }) - ) - }) - }) + ); + }); + }); describe('setCurrentSpecSaga', () => { const { setCurrentSpecAction, setCurrentSpecSuccessAction, setCurrentSpecFailureAction, - } = specActions - const spec = specState['4.0'] + } = specActions; + const spec = specState['4.0']; it('sends setCurrentSpecSuccessAction on success', async () => { - jest.spyOn(adaptor, 'fetchSpec').mockResolvedValueOnce(spec) + jest.spyOn(adaptor, 'fetchSpec').mockResolvedValueOnce(spec); - sagaTester.dispatch(setCurrentSpecAction({ currentSpecKey: spec.key })) - await sagaTester.waitFor('specs/setCurrentSpecAction') - const calledActions = sagaTester.getCalledActions() - expect(calledActions).toHaveLength(2) + sagaTester.dispatch(setCurrentSpecAction({ currentSpecKey: spec.key })); + await sagaTester.waitFor('specs/setCurrentSpecAction'); + const calledActions = sagaTester.getCalledActions(); + expect(calledActions).toHaveLength(2); expect(calledActions[0]).toEqual( setCurrentSpecAction({ currentSpecKey: spec.key }) - ) + ); expect(calledActions[1]).toEqual( setCurrentSpecSuccessAction({ api: spec.api!, currentSpecKey: spec.key, }) - ) - }) + ); + }); it('sends setCurrentSpecFailureAction on failure', async () => { - jest.spyOn(adaptor, 'fetchSpec').mockRejectedValueOnce(mockError) + jest.spyOn(adaptor, 'fetchSpec').mockRejectedValueOnce(mockError); - sagaTester.dispatch(setCurrentSpecAction({ currentSpecKey: spec.key })) - await sagaTester.waitFor('specs/setCurrentSpecAction') - const calledActions = sagaTester.getCalledActions() - expect(calledActions).toHaveLength(2) + sagaTester.dispatch(setCurrentSpecAction({ currentSpecKey: spec.key })); + await sagaTester.waitFor('specs/setCurrentSpecAction'); + const calledActions = sagaTester.getCalledActions(); + expect(calledActions).toHaveLength(2); expect(calledActions[0]).toEqual( setCurrentSpecAction({ currentSpecKey: spec.key }) - ) - expect(calledActions[1]).toEqual(setCurrentSpecFailureAction(mockError)) - }) - }) -}) + ); + expect(calledActions[1]).toEqual(setCurrentSpecFailureAction(mockError)); + }); + }); +}); diff --git a/packages/api-explorer/src/state/specs/sagas.ts b/packages/api-explorer/src/state/specs/sagas.ts index c56efcca3..0d429d2dd 100644 --- a/packages/api-explorer/src/state/specs/sagas.ts +++ b/packages/api-explorer/src/state/specs/sagas.ts @@ -23,60 +23,64 @@ SOFTWARE. */ -import type { SpecItem, SpecList } from '@looker/sdk-codegen' -import { call, put, takeEvery, select } from 'typed-redux-saga' -import type { PayloadAction } from '@reduxjs/toolkit' +import type { SpecItem, SpecList } from '@looker/sdk-codegen'; +import { call, put, select, takeEvery } from 'typed-redux-saga'; +import type { PayloadAction } from '@reduxjs/toolkit'; -import { getApixAdaptor } from '../../utils' -import type { RootState } from '../store' -import type { InitSpecsAction, SetCurrentSpecAction } from './slice' -import { specActions } from './slice' +import { getApixAdaptor } from '../../utils'; +import type { RootState } from '../store'; +import type { InitSpecsAction, SetCurrentSpecAction } from './slice'; +import { specActions } from './slice'; function* initSaga(action: PayloadAction) { - const { initSpecsSuccessAction, initSpecsFailureAction } = specActions - const adaptor = getApixAdaptor() + const { initSpecsSuccessAction, initSpecsFailureAction } = specActions; + const adaptor = getApixAdaptor(); try { - const specs: SpecList = yield* call([adaptor, 'fetchSpecList']) - let currentSpecKey = action.payload.specKey + const specs: SpecList = yield* call([adaptor, 'fetchSpecList']); + let currentSpecKey = action.payload.specKey; if (!currentSpecKey || !specs[currentSpecKey]) { // if current spec key is invalid or not assigned, default to the first "current" spec currentSpecKey = Object.values(specs).find( (spec) => spec.status === 'current' - )!.key + )!.key; } - const spec = yield* call([adaptor, 'fetchSpec'], specs[currentSpecKey]) - specs[currentSpecKey] = spec - yield* put(initSpecsSuccessAction({ specs, currentSpecKey })) + const spec = yield* call([adaptor, 'fetchSpec'], specs[currentSpecKey]); + specs[currentSpecKey] = spec; + yield* put(initSpecsSuccessAction({ specs, currentSpecKey })); } catch (error: any) { - yield* put(initSpecsFailureAction(new Error(error.message))) + // TODO if an error occurs here extension api explorer hangs. + // Needs to be fixed. For now report the error. + console.error(error); + yield* put(initSpecsFailureAction(new Error(error.message))); } } function* setCurrentSpecSaga(action: PayloadAction) { const { setCurrentSpecSuccessAction, setCurrentSpecFailureAction } = - specActions - const adaptor = getApixAdaptor() + specActions; + const adaptor = getApixAdaptor(); const spec: SpecItem = yield* select( (state: RootState) => state.specs.specs[action.payload.currentSpecKey] - ) + ); try { - const newSpec = yield* call([adaptor, 'fetchSpec'], spec) + const newSpec = yield* call([adaptor, 'fetchSpec'], spec); yield* put( setCurrentSpecSuccessAction({ api: newSpec.api!, currentSpecKey: action.payload.currentSpecKey, }) - ) + ); } catch (error: any) { - yield put(setCurrentSpecFailureAction(new Error(error.message))) + console.error(error); + yield put(setCurrentSpecFailureAction(new Error(error.message))); } } export function* saga() { - const { initSpecsAction, setCurrentSpecAction } = specActions + const { initSpecsAction, setCurrentSpecAction } = specActions; - yield* takeEvery(initSpecsAction, initSaga) - yield* takeEvery(setCurrentSpecAction, setCurrentSpecSaga) + yield* takeEvery(initSpecsAction, initSaga); + yield* takeEvery(setCurrentSpecAction, setCurrentSpecSaga); } diff --git a/packages/api-explorer/src/state/specs/selectors.ts b/packages/api-explorer/src/state/specs/selectors.ts index a840cb578..1900224e8 100644 --- a/packages/api-explorer/src/state/specs/selectors.ts +++ b/packages/api-explorer/src/state/specs/selectors.ts @@ -23,15 +23,15 @@ SOFTWARE. */ -import type { SpecItem } from '@looker/sdk-codegen' +import type { SpecItem } from '@looker/sdk-codegen'; -import type { RootState } from '../store' +import type { RootState } from '../store'; -const selectSpecsState = (state: RootState) => state.specs +const selectSpecsState = (state: RootState) => state.specs; -export const selectSpecs = (state: RootState) => selectSpecsState(state).specs +export const selectSpecs = (state: RootState) => selectSpecsState(state).specs; export const selectCurrentSpec = (state: RootState): SpecItem => { - const specState = selectSpecsState(state) - return specState.specs[specState.currentSpecKey] -} + const specState = selectSpecsState(state); + return specState.specs[specState.currentSpecKey]; +}; diff --git a/packages/api-explorer/src/state/specs/slice.ts b/packages/api-explorer/src/state/specs/slice.ts index 6717c176f..c59c5eb56 100644 --- a/packages/api-explorer/src/state/specs/slice.ts +++ b/packages/api-explorer/src/state/specs/slice.ts @@ -23,19 +23,19 @@ SOFTWARE. */ -import type { PayloadAction } from '@reduxjs/toolkit' -import { createSlice } from '@reduxjs/toolkit' -import type { ApiModel, SpecList } from '@looker/sdk-codegen' -import { createSliceHooks } from '@looker/redux' +import type { PayloadAction } from '@reduxjs/toolkit'; +import { createSlice } from '@reduxjs/toolkit'; +import type { ApiModel, SpecList } from '@looker/sdk-codegen'; +import { createSliceHooks } from '@looker/redux'; -import { saga } from './sagas' +import { saga } from './sagas'; export interface SpecState { - specs: SpecList - currentSpecKey: string - error?: Error - working: boolean - description?: string + specs: SpecList; + currentSpecKey: string; + error?: Error; + working: boolean; + description?: string; } export const defaultSpecsState: SpecState = { @@ -43,24 +43,24 @@ export const defaultSpecsState: SpecState = { currentSpecKey: '', working: true, description: undefined, -} +}; export interface InitSpecsAction { - specKey: string | null + specKey: string | null; } export interface InitSpecsSuccessPayload { - specs: SpecList - currentSpecKey: string + specs: SpecList; + currentSpecKey: string; } export interface SetCurrentSpecAction { - currentSpecKey: string + currentSpecKey: string; } interface SetCurrentSpecSuccessAction { - api: ApiModel - currentSpecKey: string + api: ApiModel; + currentSpecKey: string; } export const specsSlice = createSlice({ @@ -68,42 +68,42 @@ export const specsSlice = createSlice({ initialState: defaultSpecsState, reducers: { initSpecsAction(state, _action: PayloadAction) { - state.working = true - state.description = 'Fetching specifications...' + state.working = true; + state.description = 'Fetching specifications...'; }, initSpecsSuccessAction( state, action: PayloadAction ) { - state.specs = action.payload.specs - state.currentSpecKey = action.payload.currentSpecKey - state.working = false - state.description = undefined + state.specs = action.payload.specs; + state.currentSpecKey = action.payload.currentSpecKey; + state.working = false; + state.description = undefined; }, initSpecsFailureAction(state, action: PayloadAction) { - state.working = false - state.error = action.payload + state.working = false; + state.error = action.payload; }, setCurrentSpecAction(state, action: PayloadAction) { - state.working = true - state.description = `Fetching API ${action.payload.currentSpecKey} spec` + state.working = true; + state.description = `Fetching API ${action.payload.currentSpecKey} spec`; }, setCurrentSpecSuccessAction( state, action: PayloadAction ) { - state.currentSpecKey = action.payload.currentSpecKey - state.specs[state.currentSpecKey].api = action.payload.api - state.description = undefined - state.working = false + state.currentSpecKey = action.payload.currentSpecKey; + state.specs[state.currentSpecKey].api = action.payload.api; + state.description = undefined; + state.working = false; }, setCurrentSpecFailureAction(state, action: PayloadAction) { - state.working = false - state.error = action.payload + state.working = false; + state.error = action.payload; }, }, -}) +}); -export const specActions = specsSlice.actions +export const specActions = specsSlice.actions; export const { useActions: useSpecActions, useStoreState: useSpecStoreState } = - createSliceHooks(specsSlice, saga) + createSliceHooks(specsSlice, saga); diff --git a/packages/api-explorer/src/state/store.ts b/packages/api-explorer/src/state/store.ts index 69a3fff3c..465818165 100644 --- a/packages/api-explorer/src/state/store.ts +++ b/packages/api-explorer/src/state/store.ts @@ -23,22 +23,22 @@ SOFTWARE. */ -import { createStore } from '@looker/redux' -import type { DevToolsEnhancerOptions, PayloadAction } from '@reduxjs/toolkit' -import type { Action } from 'redux' -import map from 'lodash/map' -import type { SpecList } from '@looker/sdk-codegen' +import { createStore } from '@looker/redux'; +import type { DevToolsEnhancerOptions, PayloadAction } from '@reduxjs/toolkit'; +import type { Action } from 'redux'; +import map from 'lodash/map'; +import type { SpecList } from '@looker/sdk-codegen'; -import type { SettingState } from './settings' -import { defaultSettingsState, settingsSlice } from './settings' -import type { LodesState } from './lodes' -import { lodesSlice, defaultLodesState } from './lodes' -import type { SpecState, InitSpecsSuccessPayload } from './specs' -import { defaultSpecsState, specsSlice } from './specs' +import type { SettingState } from './settings'; +import { defaultSettingsState, settingsSlice } from './settings'; +import type { LodesState } from './lodes'; +import { defaultLodesState, lodesSlice } from './lodes'; +import type { InitSpecsSuccessPayload, SpecState } from './specs'; +import { defaultSpecsState, specsSlice } from './specs'; const isInitSuccessAction = ( action: any -): action is PayloadAction => !!action.payload?.specs +): action is PayloadAction => !!action.payload?.specs; const actionSanitizer = >( action: A, @@ -51,10 +51,10 @@ const actionSanitizer = >( ...action.payload, specs: sanitizeSpecs(action.payload.specs), }, - } + }; } - return action -} + return action; +}; const stateSanitizer = >( state: S, @@ -67,22 +67,22 @@ const stateSanitizer = >( ...state.specs, specs: sanitizeSpecs(state.specs.specs), }, - } + }; } - return state -} + return state; +}; const sanitizeSpecs = (specList: SpecList) => map(specList, (spec) => ({ ...spec, api: spec.api ? '' : undefined, specContent: spec.specContent ? '' : undefined, - })) as unknown as SpecList + })) as unknown as SpecList; const devTools = process.env.NODE_ENV !== 'production' ? ({ actionSanitizer, stateSanitizer } as DevToolsEnhancerOptions) - : false + : false; export const store = createStore({ devTools, @@ -96,10 +96,10 @@ export const store = createStore({ lodes: lodesSlice.reducer, specs: specsSlice.reducer, }, -}) +}); export interface RootState { - settings: SettingState - lodes: LodesState - specs: SpecState + settings: SettingState; + lodes: LodesState; + specs: SpecState; } diff --git a/packages/api-explorer/src/test-data/declarations.ts b/packages/api-explorer/src/test-data/declarations.ts index 55c4511c3..489b33c78 100644 --- a/packages/api-explorer/src/test-data/declarations.ts +++ b/packages/api-explorer/src/test-data/declarations.ts @@ -23,7 +23,7 @@ SOFTWARE. */ -import type { IDeclarationMine } from '@looker/sdk-codegen' +import type { IDeclarationMine } from '@looker/sdk-codegen'; export const declarations: IDeclarationMine = { commitHash: '1e9348b797c2f3760d03c1f94c60f18e534e8298', @@ -40,4 +40,4 @@ export const declarations: IDeclarationMine = { sourceFile: 'packages/api-explorer/src/utils/lodeUtils.ts', }, }, -} +}; diff --git a/packages/api-explorer/src/test-data/examples.ts b/packages/api-explorer/src/test-data/examples.ts index 214cffb87..0e8e31f0a 100644 --- a/packages/api-explorer/src/test-data/examples.ts +++ b/packages/api-explorer/src/test-data/examples.ts @@ -23,7 +23,7 @@ SOFTWARE. */ -import type { IExampleMine } from '@looker/sdk-codegen' +import type { IExampleMine } from '@looker/sdk-codegen'; // prettier-ignore export const examples: IExampleMine = { diff --git a/packages/api-explorer/src/test-data/index.ts b/packages/api-explorer/src/test-data/index.ts index c59ce5236..9de3228d5 100644 --- a/packages/api-explorer/src/test-data/index.ts +++ b/packages/api-explorer/src/test-data/index.ts @@ -23,7 +23,7 @@ SOFTWARE. */ -export * from './specs' -export { examples } from './examples' -export * from './declarations' -export * from './sdkLanguages' +export * from './specs'; +export { examples } from './examples'; +export * from './declarations'; +export * from './sdkLanguages'; diff --git a/packages/api-explorer/src/test-data/sdkLanguages.ts b/packages/api-explorer/src/test-data/sdkLanguages.ts index c4f31bd6b..2a3abcd1b 100644 --- a/packages/api-explorer/src/test-data/sdkLanguages.ts +++ b/packages/api-explorer/src/test-data/sdkLanguages.ts @@ -31,6 +31,6 @@ export const sdkLanguageMapping = { swift: 'Swift', go: 'Go', all: 'All', -} +}; -export const languages = Object.values(sdkLanguageMapping) +export const languages = Object.values(sdkLanguageMapping); diff --git a/packages/api-explorer/src/test-data/specs.ts b/packages/api-explorer/src/test-data/specs.ts index 18e1f2b97..aad954169 100644 --- a/packages/api-explorer/src/test-data/specs.ts +++ b/packages/api-explorer/src/test-data/specs.ts @@ -23,10 +23,10 @@ SOFTWARE. */ -import type { SpecList } from '@looker/sdk-codegen' -import { ApiModel } from '@looker/sdk-codegen' -import type { SpecState } from '../state' -import { defaultSpecsState } from '../state' +import type { SpecList } from '@looker/sdk-codegen'; +import { ApiModel } from '@looker/sdk-codegen'; +import type { SpecState } from '../state'; +import { defaultSpecsState } from '../state'; export const specs: SpecList = { '3.1': { @@ -45,19 +45,19 @@ export const specs: SpecList = { specContent: require('../../../../spec/Looker.4.0.oas.json'), version: '4.0', }, -} +}; -export const api = ApiModel.fromJson(specs['3.1'].specContent) -export const api40 = ApiModel.fromJson(specs['4.0'].specContent) +export const api = ApiModel.fromJson(specs['3.1'].specContent); +export const api40 = ApiModel.fromJson(specs['4.0'].specContent); export const getLoadedSpecs = () => { - const loadedSpecs = { ...specs } - loadedSpecs['3.1'].api = api - loadedSpecs['4.0'].api = api40 - return loadedSpecs -} + const loadedSpecs = { ...specs }; + loadedSpecs['3.1'].api = api; + loadedSpecs['4.0'].api = api40; + return loadedSpecs; +}; export const specState: SpecState = { ...defaultSpecsState, specs: getLoadedSpecs(), -} +}; diff --git a/packages/api-explorer/src/test-utils/index.ts b/packages/api-explorer/src/test-utils/index.ts index 6e421dbf5..bfae003fe 100644 --- a/packages/api-explorer/src/test-utils/index.ts +++ b/packages/api-explorer/src/test-utils/index.ts @@ -23,6 +23,6 @@ SOFTWARE. */ -export * from './lodes' -export * from './router' -export * from './redux' +export * from './lodes'; +export * from './router'; +export * from './redux'; diff --git a/packages/api-explorer/src/test-utils/lodes.tsx b/packages/api-explorer/src/test-utils/lodes.tsx index 9568a12fd..e7a95597e 100644 --- a/packages/api-explorer/src/test-utils/lodes.tsx +++ b/packages/api-explorer/src/test-utils/lodes.tsx @@ -23,19 +23,19 @@ SOFTWARE. */ -import type { IDeclarationMine, IExampleMine } from '@looker/sdk-codegen' -import type { ReactElement } from 'react' -import type { RenderOptions } from '@testing-library/react' -import { renderWithTheme } from '@looker/components-test-utils' +import type { IDeclarationMine, IExampleMine } from '@looker/sdk-codegen'; +import type { ReactElement } from 'react'; +import type { RenderOptions } from '@testing-library/react'; +import { renderWithTheme } from '@looker/components-test-utils'; -import { createTestStore, withReduxProvider } from './redux' +import { createTestStore, withReduxProvider } from './redux'; export const renderWithLode = ( consumers: ReactElement, examples: IExampleMine, declarations?: IDeclarationMine, - options?: Omit + options?: Omit, 'queries'> ) => { - const store = createTestStore({ lodes: { examples, declarations } }) - return renderWithTheme(withReduxProvider(consumers, store), options) -} + const store = createTestStore({ lodes: { examples, declarations } }); + return renderWithTheme(withReduxProvider(consumers, store), options); +}; diff --git a/packages/api-explorer/src/test-utils/redux.tsx b/packages/api-explorer/src/test-utils/redux.tsx index f0f6023a8..8cb6f88e8 100644 --- a/packages/api-explorer/src/test-utils/redux.tsx +++ b/packages/api-explorer/src/test-utils/redux.tsx @@ -24,59 +24,63 @@ */ -import type { ReactElement } from 'react' -import React from 'react' -import { Provider } from 'react-redux' -import type { Store } from 'redux' -import { renderWithTheme } from '@looker/components-test-utils' -import type { RenderOptions } from '@testing-library/react' -import { createStore } from '@looker/redux' -import { BrowserAdaptor, registerEnvAdaptor } from '@looker/extension-utils' -import { initRunItSdk } from '@looker/run-it' +import type { ReactElement } from 'react'; +import React from 'react'; +import { Provider } from 'react-redux'; +import type { Store } from 'redux'; +import { renderWithTheme } from '@looker/components-test-utils'; +import type { RenderOptions } from '@testing-library/react'; +import { createStore } from '@looker/redux'; +import { BrowserAdaptor, registerEnvAdaptor } from '@looker/extension-utils'; +import { initRunItSdk } from '@looker/run-it'; -import type { LodesState, RootState, SettingState, SpecState } from '../state' +import type { LodesState, RootState, SettingState, SpecState } from '../state'; import { - settingsSlice, defaultLodesState, defaultSettingsState, - lodesSlice, defaultSpecsState, + lodesSlice, + settingsSlice, specsSlice, -} from '../state' -import { specState } from '../test-data' -import { renderWithRouter } from './router' +} from '../state'; +import { specState } from '../test-data'; +import { renderWithRouter } from './router'; export const withReduxProvider = ( consumers: ReactElement, store: Store = createTestStore() ) => { - registerEnvAdaptor(new BrowserAdaptor(initRunItSdk())) - return {consumers} -} + registerEnvAdaptor(new BrowserAdaptor(initRunItSdk())); + return {consumers}; +}; export const renderWithReduxProvider = ( consumers: ReactElement, store?: Store, - options?: Omit -) => renderWithTheme(withReduxProvider(consumers, store), options) + options?: Omit, 'queries'> +) => renderWithTheme(withReduxProvider(consumers, store), options); export const renderWithRouterAndReduxProvider = ( consumers: ReactElement, initialEntries: string[] = ['/'], store?: Store, - options?: Omit + options?: Omit, 'queries'> ) => - renderWithRouter(withReduxProvider(consumers, store), initialEntries, options) + renderWithRouter( + withReduxProvider(consumers, store), + initialEntries, + options + ); export const preloadedState: RootState = { settings: defaultSettingsState, lodes: defaultLodesState, specs: defaultSpecsState, -} +}; type DeepPartial = { - [P in keyof T]?: DeepPartial -} + [P in keyof T]?: DeepPartial; +}; export const createTestStore = (overrides?: DeepPartial) => createStore({ @@ -99,4 +103,4 @@ export const createTestStore = (overrides?: DeepPartial) => lodes: lodesSlice.reducer, specs: specsSlice.reducer, }, - }) + }); diff --git a/packages/api-explorer/src/test-utils/router.tsx b/packages/api-explorer/src/test-utils/router.tsx index 5ae46413b..a758f60af 100644 --- a/packages/api-explorer/src/test-utils/router.tsx +++ b/packages/api-explorer/src/test-utils/router.tsx @@ -24,19 +24,19 @@ */ -import type { ReactElement } from 'react' -import React from 'react' -import { MemoryRouter } from 'react-router-dom' -import type { RenderOptions } from '@testing-library/react' -import { renderWithTheme } from '@looker/components-test-utils' +import type { ReactElement } from 'react'; +import React from 'react'; +import { MemoryRouter } from 'react-router-dom'; +import type { RenderOptions } from '@testing-library/react'; +import { renderWithTheme } from '@looker/components-test-utils'; export const withRouter = ( children: ReactElement | ReactElement[], initialEntries: string[] = ['/'] -) => {children} +) => {children}; export const renderWithRouter = ( children: ReactElement | ReactElement[], initialEntries?: string[], - options?: Omit -) => renderWithTheme(withRouter(children, initialEntries), options) + options?: Omit, 'queries'> +) => renderWithTheme(withRouter(children, initialEntries), options); diff --git a/packages/api-explorer/src/utils/adaptorUtils.ts b/packages/api-explorer/src/utils/adaptorUtils.ts index a3e74885e..2c5b7791c 100644 --- a/packages/api-explorer/src/utils/adaptorUtils.ts +++ b/packages/api-explorer/src/utils/adaptorUtils.ts @@ -24,56 +24,56 @@ */ -import type { ILookerVersions, SpecItem, SpecList } from '@looker/sdk-codegen' -import { ApiModel, upgradeSpecObject } from '@looker/sdk-codegen' -import { api_spec } from '@looker/sdk' -import { getEnvAdaptor } from '@looker/extension-utils' -import type { RunItValues } from '@looker/run-it' -import { getUrl } from '@looker/run-it' +import type { ILookerVersions, SpecItem, SpecList } from '@looker/sdk-codegen'; +import { ApiModel, upgradeSpecObject } from '@looker/sdk-codegen'; +import { api_spec } from '@looker/sdk'; +import { getEnvAdaptor } from '@looker/extension-utils'; +import type { RunItValues } from '@looker/run-it'; +import { getUrl } from '@looker/run-it'; -export type StorageLocation = 'session' | 'local' +export type StorageLocation = 'session' | 'local'; /** Object returned from storage service */ export interface IStorageValue { /** Location of the stored object */ - location: StorageLocation + location: StorageLocation; /** Stored string representation of the value (usually JSON) */ - value: string + value: string; } /** function to retrieve a spec based on version and name */ export type ApiSpecFetcher = ( version: string, name: string -) => Promise +) => Promise; /** Either the spec is parsed or it's undefined */ -export type ParsedSpec = ApiModel | undefined +export type ParsedSpec = ApiModel | undefined; /** service abstraction for extension and browser based usage */ export interface RunItConfigurator { - getStorage: (key: string, defaultValue?: string) => IStorageValue - setStorage(key: string, value: string, location: 'local' | 'session'): string - removeStorage(key: string): void + getStorage: (key: string, defaultValue?: string) => IStorageValue; + setStorage(key: string, value: string, location: 'local' | 'session'): string; + removeStorage(key: string): void; } /** Processed specifications */ export interface ILoadedSpecs { /** API server url */ - baseUrl: string + baseUrl: string; /** Web server url */ - webUrl: string + webUrl: string; /** should APIX run headless? */ - headless: boolean + headless: boolean; /** loaded specifications */ - specs: SpecList + specs: SpecList; /** communication errors */ - fetchResult: string + fetchResult: string; } /** Extends versions payload with headless toggle for API Explorer */ export interface IAPIXConfig extends ILookerVersions { - headless?: boolean + headless?: boolean; } /** @@ -81,15 +81,15 @@ export interface IAPIXConfig extends ILookerVersions { * @param content to convert */ const makeApi = (content: string | RunItValues) => { - let json + let json; if (typeof content === 'string') { - json = JSON.parse(content) + json = JSON.parse(content); } else { - json = content + json = content; } - json = upgradeSpecObject(json) - return ApiModel.fromJson(json) -} + json = upgradeSpecObject(json); + return ApiModel.fromJson(json); +}; /** * Ensure the URI is a full URL @@ -98,17 +98,17 @@ const makeApi = (content: string | RunItValues) => { */ export const fullify = (uri: string, baseUrl: string): string => { if (uri.match(/^https?:/)) { - return uri + return uri; } - const url = new URL(uri, baseUrl) - return url.toString() -} + const url = new URL(uri, baseUrl); + return url.toString(); +}; /** * parse spec url into version and name for api_spec call * @param spec to parse */ const apiSpecBits = (spec: SpecItem): string[] => - spec.specURL?.split('/').slice(-2) || [] + spec.specURL?.split('/').slice(-2) || []; /** * Use the functional api_spec fetch @@ -116,9 +116,9 @@ const apiSpecBits = (spec: SpecItem): string[] => * @param name to retrieve */ export const funFetch = (version: string, name: string): Promise => { - const sdk = getEnvAdaptor().sdk - return sdk.ok(api_spec(sdk, version, name)) -} + const sdk = getEnvAdaptor().sdk; + return sdk.ok(api_spec(sdk, version, name)); +}; /** * try to fetch a spec by URL, trap any errors and return undefined @@ -126,12 +126,12 @@ export const funFetch = (version: string, name: string): Promise => { */ export const specUrlFetch = async (url: string): Promise => { try { - const content = await getUrl(url) - return makeApi(content) + const content = await getUrl(url); + return makeApi(content); } catch (error) { - return undefined + return undefined; } -} +}; /** * fetch and compile an API specification to an ApiModel if it's not already available @@ -145,12 +145,12 @@ export const sdkSpecFetch = async ( spec: SpecItem, fetcher: ApiSpecFetcher ): Promise => { - if (spec.api) return spec.api - if (!spec.specURL) return undefined - const [version, name] = apiSpecBits(spec) - const content = await fetcher(version, name) - return makeApi(content) -} + if (spec.api) return spec.api; + if (!spec.specURL) return undefined; + const [version, name] = apiSpecBits(spec); + const content = await fetcher(version, name); + return makeApi(content); +}; /** Attempt to retrieve spec by URL, then api_spec SDK call * @@ -161,21 +161,21 @@ export const fallbackFetch = async ( spec: SpecItem, fetcher: ApiSpecFetcher ): Promise => { - if (spec.api) return spec.api - if (!spec.specURL) return undefined - let api: ParsedSpec + if (spec.api) return spec.api; + if (!spec.specURL) return undefined; + let api: ParsedSpec; try { - api = await specUrlFetch(spec.specURL) + api = await specUrlFetch(spec.specURL); } catch (error) { - console.error({ error }) + console.error({ error }); } if (!api) { - const sdk = getEnvAdaptor().sdk - const authed = sdk.authSession.isAuthenticated() + const sdk = getEnvAdaptor().sdk; + const authed = sdk.authSession.isAuthenticated(); if (!authed) { - await sdk.authSession.login() + await sdk.authSession.login(); } - api = await sdkSpecFetch(spec, fetcher) + api = await sdkSpecFetch(spec, fetcher); } - return api -} + return api; +}; diff --git a/packages/api-explorer/src/utils/apixAdaptor.ts b/packages/api-explorer/src/utils/apixAdaptor.ts index 363bc1cbd..f4c68aade 100644 --- a/packages/api-explorer/src/utils/apixAdaptor.ts +++ b/packages/api-explorer/src/utils/apixAdaptor.ts @@ -23,50 +23,56 @@ SOFTWARE. */ -import type { IEnvironmentAdaptor } from '@looker/extension-utils' -import { BrowserAdaptor, getEnvAdaptor } from '@looker/extension-utils' -import type { IAPIMethods } from '@looker/sdk-rtl' -import type { SpecItem, SpecList } from '@looker/sdk-codegen' -import { getSpecsFromVersions } from '@looker/sdk-codegen' -import { RunItConfigKey, RunItNoConfig } from '@looker/run-it' -import cloneDeep from 'lodash/cloneDeep' +import type { IEnvironmentAdaptor } from '@looker/extension-utils'; +import { BrowserAdaptor, getEnvAdaptor } from '@looker/extension-utils'; +import type { IAPIMethods } from '@looker/sdk-rtl'; +import type { SpecItem, SpecList } from '@looker/sdk-codegen'; +import { getSpecsFromVersions } from '@looker/sdk-codegen'; +import { RunItConfigKey, RunItNoConfig } from '@looker/run-it'; +import cloneDeep from 'lodash/cloneDeep'; -import { fullify, fallbackFetch, funFetch } from './adaptorUtils' +import { fallbackFetch, fullify, funFetch } from './adaptorUtils'; export interface IApixAdaptor extends IEnvironmentAdaptor { - fetchSpecList(versionsUrl?: string): Promise - fetchSpec(spec: SpecItem): Promise + fetchSpecList(versionsUrl?: string): Promise; + fetchSpec(spec: SpecItem): Promise; } -export const getApixAdaptor = () => getEnvAdaptor() as IApixAdaptor +export const getApixAdaptor = () => getEnvAdaptor() as IApixAdaptor; export class ApixAdaptor extends BrowserAdaptor implements IApixAdaptor { - constructor(sdk: IAPIMethods, private readonly fallbackVersionsUrl: string) { - super(sdk) + constructor( + sdk: IAPIMethods, + private readonly fallbackVersionsUrl: string + ) { + super(sdk); } async fetchSpecList(versionsUrl?: string): Promise { - const data = await this.localStorageGetItem(RunItConfigKey) - const config = data ? JSON.parse(data) : RunItNoConfig - let url: string + const data = await this.localStorageGetItem(RunItConfigKey); + const config = data ? JSON.parse(data) : RunItNoConfig; + let url: string; if (versionsUrl) { - url = versionsUrl + url = versionsUrl; } else { url = config.base_url ? `${config.base_url}/versions` - : `${this.fallbackVersionsUrl}/versions.json` + : `${this.fallbackVersionsUrl}/versions.json`; } - const versions = await this.sdk.authSession.transport.rawRequest('GET', url) - const specs = await getSpecsFromVersions(JSON.parse(versions.body)) - return specs + const versions = await this.sdk.authSession.transport.rawRequest( + 'GET', + url + ); + const specs = await getSpecsFromVersions(JSON.parse(versions.body)); + return specs; } async fetchSpec(spec: SpecItem): Promise { - const _spec = cloneDeep(spec) - _spec.specURL = fullify(spec.specURL!, origin) - _spec.api = await fallbackFetch(_spec, funFetch) - return _spec + const _spec = cloneDeep(spec); + _spec.specURL = fullify(spec.specURL!, origin); + _spec.api = await fallbackFetch(_spec, funFetch); + return _spec; } } diff --git a/packages/api-explorer/src/utils/highlight.spec.tsx b/packages/api-explorer/src/utils/highlight.spec.tsx index 920764454..4ed0b35fd 100644 --- a/packages/api-explorer/src/utils/highlight.spec.tsx +++ b/packages/api-explorer/src/utils/highlight.spec.tsx @@ -23,30 +23,30 @@ SOFTWARE. */ -import React from 'react' -import { highlightHTML } from './highlight' +import React from 'react'; +import { highlightHTML } from './highlight'; describe('HTML highlighting', () => { - const str = 'create_dashboard' + const str = 'create_dashboard'; test('it returns original string when there are no matches', () => { - const result = highlightHTML('query', str) - expect(result).toEqual(['create_dashboard']) - }) + const result = highlightHTML('query', str); + expect(result).toEqual(['create_dashboard']); + }); test('it returns original string when no pattern is provided', () => { - const result = highlightHTML('', str) - expect(result).toEqual(str) - }) + const result = highlightHTML('', str); + expect(result).toEqual(str); + }); test('it wraps matches with span tags', () => { - const result = highlightHTML('dash', str) + const result = highlightHTML('dash', str); expect(result).toEqual([ 'create_', dash , 'board', - ]) - }) -}) + ]); + }); +}); diff --git a/packages/api-explorer/src/utils/highlight.tsx b/packages/api-explorer/src/utils/highlight.tsx index f0711ea5e..7dd8cf5d2 100644 --- a/packages/api-explorer/src/utils/highlight.tsx +++ b/packages/api-explorer/src/utils/highlight.tsx @@ -24,7 +24,7 @@ */ -import React from 'react' +import React from 'react'; /** * Returns an HTML string with matches wrapped with with span tags @@ -33,26 +33,26 @@ import React from 'react' * @returns content with highlighted matches */ export const highlightHTML = (pattern: string, content: string) => { - let highlightedContent + let highlightedContent; if (!pattern) { - highlightedContent = content + highlightedContent = content; } else { try { - const target = new RegExp(`(${pattern})`, 'gi') - const contentArray = content.split(target) + const target = new RegExp(`(${pattern})`, 'gi'); + const contentArray = content.split(target); highlightedContent = contentArray.map((str, index) => { if (target.test(str)) { return ( {str} - ) + ); } - return str - }) + return str; + }); } catch (e) { - highlightedContent = content + highlightedContent = content; } } - return highlightedContent -} + return highlightedContent; +}; diff --git a/packages/api-explorer/src/utils/hooks/globalStoreSync.spec.tsx b/packages/api-explorer/src/utils/hooks/globalStoreSync.spec.tsx index 840fa16a9..046da1d42 100644 --- a/packages/api-explorer/src/utils/hooks/globalStoreSync.spec.tsx +++ b/packages/api-explorer/src/utils/hooks/globalStoreSync.spec.tsx @@ -23,78 +23,78 @@ SOFTWARE. */ -import { renderHook } from '@testing-library/react-hooks' -import { useHistory } from 'react-router-dom' -import type { Location } from 'history' -import * as reactRedux from 'react-redux' -import * as routerLocation from 'react-router-dom' -import { createTestStore, withReduxProvider } from '../../test-utils' -import { useGlobalStoreSync } from './globalStoreSync' +import { renderHook } from '@testing-library/react-hooks'; +import { useHistory } from 'react-router-dom'; +import type { Location } from 'history'; +import * as reactRedux from 'react-redux'; +import * as routerLocation from 'react-router-dom'; +import { createTestStore, withReduxProvider } from '../../test-utils'; +import { useGlobalStoreSync } from './globalStoreSync'; jest.mock('react-router-dom', () => { - const ReactRouterDOM = jest.requireActual('react-router-dom') + const ReactRouterDOM = jest.requireActual('react-router-dom'); return { ...ReactRouterDOM, useHistory: jest .fn() .mockReturnValue({ push: jest.fn(), location: globalThis.location }), useLocation: jest.fn().mockReturnValue({ pathname: '/', search: '' }), - } -}) + }; +}); describe.skip('useGlobalStoreSync', () => { - const mockDispatch = jest.fn() + const mockDispatch = jest.fn(); afterEach(() => { - jest.clearAllMocks() - }) + jest.clearAllMocks(); + }); test('does nothing if uninitialized', () => { - const { push } = useHistory() - const wrapper = ({ children }: any) => withReduxProvider(children) - renderHook(() => useGlobalStoreSync(), { wrapper }) - expect(push).not.toHaveBeenCalled() - }) + const { push } = useHistory(); + const wrapper = ({ children }: any) => withReduxProvider(children); + renderHook(() => useGlobalStoreSync(), { wrapper }); + expect(push).not.toHaveBeenCalled(); + }); describe('search', () => { test('updates store search pattern with url search pattern if present', () => { - const { push } = useHistory() + const { push } = useHistory(); const store = createTestStore({ settings: { initialized: true, }, - }) + }); jest.spyOn(routerLocation, 'useLocation').mockReturnValue({ pathname: '/', search: `s=patternFromUrl`, - } as unknown as Location) - jest.spyOn(reactRedux, 'useDispatch').mockReturnValue(mockDispatch) - const wrapper = ({ children }: any) => withReduxProvider(children, store) - renderHook(() => useGlobalStoreSync(), { wrapper }) + } as unknown as Location); + jest.spyOn(reactRedux, 'useDispatch').mockReturnValue(mockDispatch); + const wrapper = ({ children }: any) => withReduxProvider(children, store); + renderHook(() => useGlobalStoreSync(), { wrapper }); expect(mockDispatch).toHaveBeenCalledWith({ payload: { searchPattern: 'patternFromUrl' }, type: 'settings/setSearchPatternAction', - }) - expect(push).toHaveBeenCalledWith({ pathname: '/', search: 'sdk=py' }) - }) - }) + }); + expect(push).toHaveBeenCalledWith({ pathname: '/', search: 'sdk=py' }); + }); + }); describe('sdk', () => { test('syncs url sdk param with sdk in store', () => { - const { push } = useHistory() + const { push } = useHistory(); const store = createTestStore({ settings: { initialized: true, sdkLanguage: 'Kotlin', }, - }) - const wrapper = ({ children }: any) => withReduxProvider(children, store) - renderHook(() => useGlobalStoreSync(), { wrapper }) + }); + const wrapper = ({ children }: any) => withReduxProvider(children, store); + renderHook(() => useGlobalStoreSync(), { wrapper }); expect(push).toHaveBeenCalledWith({ pathname: '/', search: 'sdk=kt', - }) - }) + }); + }); test.each([ ['alias', 'kt'], @@ -102,47 +102,47 @@ describe.skip('useGlobalStoreSync', () => { ])( 'overrides store with sdk full name given valid url sdk %s', (_, param) => { - const { push } = useHistory() + const { push } = useHistory(); const store = createTestStore({ settings: { initialized: true, }, - }) + }); jest.spyOn(routerLocation, 'useLocation').mockReturnValue({ pathname: '/', search: `sdk=${param}`, - } as unknown as Location) - jest.spyOn(reactRedux, 'useDispatch').mockReturnValue(mockDispatch) + } as unknown as Location); + jest.spyOn(reactRedux, 'useDispatch').mockReturnValue(mockDispatch); const wrapper = ({ children }: any) => - withReduxProvider(children, store) - renderHook(() => useGlobalStoreSync(), { wrapper }) - expect(push).not.toHaveBeenCalled() + withReduxProvider(children, store); + renderHook(() => useGlobalStoreSync(), { wrapper }); + expect(push).not.toHaveBeenCalled(); expect(mockDispatch).toHaveBeenLastCalledWith({ payload: { sdkLanguage: 'Kotlin' }, type: 'settings/setSdkLanguageAction', - }) + }); } - ) + ); test('updates url sdk param with store sdk for invalid url sdk param', () => { - const { push } = useHistory() + const { push } = useHistory(); const store = createTestStore({ settings: { initialized: true, }, - }) + }); jest.spyOn(routerLocation, 'useLocation').mockReturnValue({ pathname: '/', search: `sdk=invalid`, - } as unknown as Location) - jest.spyOn(reactRedux, 'useDispatch').mockReturnValue(mockDispatch) - const wrapper = ({ children }: any) => withReduxProvider(children, store) - renderHook(() => useGlobalStoreSync(), { wrapper }) - expect(mockDispatch).not.toHaveBeenCalled() + } as unknown as Location); + jest.spyOn(reactRedux, 'useDispatch').mockReturnValue(mockDispatch); + const wrapper = ({ children }: any) => withReduxProvider(children, store); + renderHook(() => useGlobalStoreSync(), { wrapper }); + expect(mockDispatch).not.toHaveBeenCalled(); expect(push).toHaveBeenCalledWith({ pathname: '/', search: `sdk=py`, - }) - }) - }) -}) + }); + }); + }); +}); diff --git a/packages/api-explorer/src/utils/hooks/globalStoreSync.ts b/packages/api-explorer/src/utils/hooks/globalStoreSync.ts index ab2112df0..e40e24e57 100644 --- a/packages/api-explorer/src/utils/hooks/globalStoreSync.ts +++ b/packages/api-explorer/src/utils/hooks/globalStoreSync.ts @@ -23,55 +23,55 @@ SOFTWARE. */ -import { useLocation } from 'react-router-dom' -import { useEffect } from 'react' -import { useSelector } from 'react-redux' -import { allAlias, findSdk, useNavigation } from '../index' +import { useLocation } from 'react-router-dom'; +import { useEffect } from 'react'; +import { useSelector } from 'react-redux'; +import { allAlias, findSdk, useNavigation } from '../index'; import { selectSdkLanguage, useSettingActions, useSettingStoreState, -} from '../../state' +} from '../../state'; /** * Hook for syncing global URL params with the Redux store * Global search parameters: 's', 'sdk' */ export const useGlobalStoreSync = () => { - const location = useLocation() - const { navigate } = useNavigation() - const { setSdkLanguageAction, setSearchPatternAction } = useSettingActions() - const { initialized } = useSettingStoreState() - const selectedSdkLanguage = useSelector(selectSdkLanguage) + const location = useLocation(); + const { navigate } = useNavigation(); + const { setSdkLanguageAction, setSearchPatternAction } = useSettingActions(); + const { initialized } = useSettingStoreState(); + const selectedSdkLanguage = useSelector(selectSdkLanguage); useEffect(() => { if (initialized) { - const params = new URLSearchParams(location.search) + const params = new URLSearchParams(location.search); // syncing search query - const searchParam = params.get('s') + const searchParam = params.get('s'); if (searchParam) { setSearchPatternAction({ searchPattern: searchParam, - }) + }); } // syncing SDK language selection - const sdkParam = params.get('sdk') || '' - const sdk = findSdk(sdkParam) + const sdkParam = params.get('sdk') || ''; + const sdk = findSdk(sdkParam); const validSdkParam = !sdkParam.localeCompare(sdk.alias, 'en', { sensitivity: 'base' }) || - !sdkParam.localeCompare(sdk.language, 'en', { sensitivity: 'base' }) + !sdkParam.localeCompare(sdk.language, 'en', { sensitivity: 'base' }); if (validSdkParam) { setSdkLanguageAction({ sdkLanguage: sdk.language, - }) + }); } else { - const { alias } = findSdk(selectedSdkLanguage) + const { alias } = findSdk(selectedSdkLanguage); navigate(location.pathname, { sdk: alias === allAlias ? null : alias, - }) + }); } } - }, [initialized]) -} + }, [initialized]); +}; diff --git a/packages/api-explorer/src/utils/hooks/index.ts b/packages/api-explorer/src/utils/hooks/index.ts index c81f0b7d4..d253644b6 100644 --- a/packages/api-explorer/src/utils/hooks/index.ts +++ b/packages/api-explorer/src/utils/hooks/index.ts @@ -23,6 +23,6 @@ SOFTWARE. */ -export { useNavigation } from './navigation' -export { useGlobalStoreSync } from './globalStoreSync' -export { useQuery } from './useQuery' +export { useNavigation } from './navigation'; +export { useGlobalStoreSync } from './globalStoreSync'; +export { useQuery } from './useQuery'; diff --git a/packages/api-explorer/src/utils/hooks/navigation.spec.ts b/packages/api-explorer/src/utils/hooks/navigation.spec.ts index 65042585c..bc4b0bb26 100644 --- a/packages/api-explorer/src/utils/hooks/navigation.spec.ts +++ b/packages/api-explorer/src/utils/hooks/navigation.spec.ts @@ -23,12 +23,12 @@ SOFTWARE. */ -import { useHistory } from 'react-router-dom' -import { useNavigation } from './navigation' +import { useHistory } from 'react-router-dom'; +import { useNavigation } from './navigation'; -const mockHistoryPush = jest.fn() +const mockHistoryPush = jest.fn(); jest.mock('react-router-dom', () => { - const ReactRouterDOM = jest.requireActual('react-router-dom') + const ReactRouterDOM = jest.requireActual('react-router-dom'); return { ...ReactRouterDOM, useHistory: () => ({ @@ -38,81 +38,83 @@ jest.mock('react-router-dom', () => { search: 's=test&sdk=py&t=get', }, }), - } -}) + }; +}); describe('useNavigation', () => { - const history = useHistory() + const history = useHistory(); const { navigate, navigateWithGlobalParams, buildPathWithGlobalParams } = - useNavigation() - const curParams = new URLSearchParams(history.location.search) - const route = `/3.1` + useNavigation(); + const curParams = new URLSearchParams(history.location.search); + const route = `/3.1`; describe('navigate', () => { test('preserves existing query params when given params are undefined', () => { - navigate(route) - expect(curParams.get('s')).toBe('test') - expect(curParams.get('sdk')).toBe('py') - expect(curParams.get('t')).toBe('get') + navigate(route); + expect(curParams.get('s')).toBe('test'); + expect(curParams.get('sdk')).toBe('py'); + expect(curParams.get('t')).toBe('get'); expect(mockHistoryPush).lastCalledWith({ pathname: route, search: curParams.toString(), - }) - }) + }); + }); test('clears existing params when given params are null', () => { - navigate(route, null) + navigate(route, null); expect(mockHistoryPush).lastCalledWith({ pathname: route, - }) - }) + }); + }); test('removes null query params while persisting undefined params if in URL', () => { - navigate(route, { s: null, sdk: 'test' }) + navigate(route, { s: null, sdk: 'test' }); expect(mockHistoryPush).lastCalledWith({ pathname: route, search: 'sdk=test&t=get', - }) - }) + }); + }); test('sets query parameters when given a populated query params object', () => { - const newParams = new URLSearchParams() - newParams.set('s', 'newTest') - newParams.set('sdk', 'kt') - newParams.set('t', 'post') + const newParams = new URLSearchParams(); + newParams.set('s', 'newTest'); + newParams.set('sdk', 'kt'); + newParams.set('t', 'post'); navigate(route, { s: newParams.get('s'), sdk: newParams.get('sdk'), t: newParams.get('t'), - }) + }); expect(mockHistoryPush).lastCalledWith({ pathname: route, search: newParams.toString(), - }) - }) - }) + }); + }); + }); describe('buildPathWithGlobalParams', () => { test('creates path with global parameters excluding scene specific parameters', () => { - curParams.delete('t') + curParams.delete('t'); expect(buildPathWithGlobalParams(route)).toEqual( `${route}?${curParams.toString()}` - ) - }) + ); + }); test('adds other parameters if present', () => { - curParams.delete('t') - const actual = buildPathWithGlobalParams(route, { e: 400 }) - expect(actual).toEqual(`${route}?${curParams.toString()}&e=400`) - }) - }) + curParams.delete('t'); + const actual = buildPathWithGlobalParams(route, { e: 400 }); + expect(actual).toEqual(`${route}?${curParams.toString()}&e=400`); + }); + }); describe('navigateWithGlobalParams', () => { test('preserves global query params and removes scene specific parameters', () => { - curParams.delete('t') - navigateWithGlobalParams(route) - expect(curParams.get('s')).toEqual('test') - expect(mockHistoryPush).lastCalledWith(`${route}?${curParams.toString()}`) - }) - }) -}) + curParams.delete('t'); + navigateWithGlobalParams(route); + expect(curParams.get('s')).toEqual('test'); + expect(mockHistoryPush).lastCalledWith( + `${route}?${curParams.toString()}` + ); + }); + }); +}); diff --git a/packages/api-explorer/src/utils/hooks/navigation.ts b/packages/api-explorer/src/utils/hooks/navigation.ts index c0d80fe3f..14f3a393d 100644 --- a/packages/api-explorer/src/utils/hooks/navigation.ts +++ b/packages/api-explorer/src/utils/hooks/navigation.ts @@ -23,24 +23,24 @@ SOFTWARE. */ -import { useHistory } from 'react-router-dom' +import { useHistory } from 'react-router-dom'; -const GLOBAL_PARAMS = ['s', 'sdk'] +const GLOBAL_PARAMS = ['s', 'sdk']; interface QueryParamProps { /** Search Query **/ - s?: string | null + s?: string | null; /** Chosen SDK Language **/ - sdk?: string | null + sdk?: string | null; /** Tag Scene Filter **/ - t?: string | null + t?: string | null; } /** * Hook for navigating to given route with query params */ export const useNavigation = () => { - const history = useHistory() + const history = useHistory(); /** * Navigates to path including provided search parameters @@ -49,26 +49,29 @@ export const useNavigation = () => { * @param queryParams Hash of query param name/value pairs to include in the destination url */ const navigate = (path: string, queryParams?: QueryParamProps | null) => { - const urlParams = new URLSearchParams(history.location.search) + const urlParams = new URLSearchParams(history.location.search); if (queryParams === undefined) { // if params passed in is undefined, maintain existing parameters in the URL - history.push({ pathname: path, search: urlParams.toString() }) + history.push({ pathname: path, search: urlParams.toString() }); } else if (queryParams === null) { // if params passed in is null, remove all parameters from the URL - history.push({ pathname: path }) + history.push({ pathname: path }); } else { // push each key as new param to URL, excluding entries with value null Object.keys(queryParams).forEach((key) => { - if (queryParams[key] === null || queryParams[key] === '') { - urlParams.delete(key) + if ( + queryParams[key as keyof QueryParamProps] === null || + queryParams[key as keyof QueryParamProps] === '' + ) { + urlParams.delete(key); } else { - urlParams.set(key, queryParams[key]) + urlParams.set(key, queryParams[key as keyof QueryParamProps] ?? ''); } - }) - history.push({ pathname: path, search: urlParams.toString() }) + }); + history.push({ pathname: path, search: urlParams.toString() }); } - } + }; /** * Builds path to a scene and removes any scene-specific URL parameters @@ -78,31 +81,31 @@ export const useNavigation = () => { * @returns a path excluding scene-specific search parameters */ const buildPathWithGlobalParams = (path: string, otherParams = {}) => { - const params = new URLSearchParams(history.location.search) + const params = new URLSearchParams(history.location.search); for (const key of params.keys()) { if (!GLOBAL_PARAMS.includes(key)) { - params.delete(key) + params.delete(key); } } - const globalParams = params.toString() + const globalParams = params.toString(); - let additionalParams = '' + let additionalParams = ''; Object.entries(otherParams).forEach(([key, value]) => { - additionalParams += `${key}=${value}` - }) + additionalParams += `${key}=${value}`; + }); - let queryString = '' + let queryString = ''; if (globalParams) { - queryString = globalParams + queryString = globalParams; } if (additionalParams) { - queryString += globalParams ? `&${additionalParams}` : additionalParams + queryString += globalParams ? `&${additionalParams}` : additionalParams; } - return `${path}${queryString ? `?${queryString}` : ''}` - } + return `${path}${queryString ? `?${queryString}` : ''}`; + }; /** * Navigates to a scene removing any scene-specific URL parameters @@ -110,12 +113,12 @@ export const useNavigation = () => { * @param path Pathname to navigate to */ const navigateWithGlobalParams = (path: string) => { - history.push(buildPathWithGlobalParams(path)) - } + history.push(buildPathWithGlobalParams(path)); + }; return { navigate, navigateWithGlobalParams, buildPathWithGlobalParams, - } -} + }; +}; diff --git a/packages/api-explorer/src/utils/hooks/useQuery.ts b/packages/api-explorer/src/utils/hooks/useQuery.ts index 0f5099d43..491fb7bc9 100644 --- a/packages/api-explorer/src/utils/hooks/useQuery.ts +++ b/packages/api-explorer/src/utils/hooks/useQuery.ts @@ -23,14 +23,14 @@ SOFTWARE. */ -import { useMemo } from 'react' -import { useLocation } from 'react-router-dom' +import { useMemo } from 'react'; +import { useLocation } from 'react-router-dom'; /** * Hook for retrieving query params */ export const useQuery = () => { - const { search } = useLocation() + const { search } = useLocation(); - return useMemo(() => new URLSearchParams(search), [search]) -} + return useMemo(() => new URLSearchParams(search), [search]); +}; diff --git a/packages/api-explorer/src/utils/index.ts b/packages/api-explorer/src/utils/index.ts index 1eaca523a..7ed062007 100644 --- a/packages/api-explorer/src/utils/index.ts +++ b/packages/api-explorer/src/utils/index.ts @@ -23,11 +23,11 @@ SOFTWARE. */ -export { highlightHTML } from './highlight' -export * from './path' -export * from './sdkLanguage' -export { getLoded } from './lodeUtils' -export { useWindowSize } from './useWindowSize' -export * from './apixAdaptor' -export * from './adaptorUtils' -export { useNavigation, useGlobalStoreSync, useQuery } from './hooks' +export { highlightHTML } from './highlight'; +export * from './path'; +export * from './sdkLanguage'; +export { getLoded } from './lodeUtils'; +export { useWindowSize } from './useWindowSize'; +export * from './apixAdaptor'; +export * from './adaptorUtils'; +export { useNavigation, useGlobalStoreSync, useQuery } from './hooks'; diff --git a/packages/api-explorer/src/utils/lodeUtils.ts b/packages/api-explorer/src/utils/lodeUtils.ts index 4f8e0f703..cecb1ccd7 100644 --- a/packages/api-explorer/src/utils/lodeUtils.ts +++ b/packages/api-explorer/src/utils/lodeUtils.ts @@ -24,22 +24,22 @@ */ -import type { IDeclarationMine, IExampleMine } from '@looker/sdk-codegen' +import type { IDeclarationMine, IExampleMine } from '@looker/sdk-codegen'; -export const apixFilesHost = 'http://localhost:30000' +export const apixFilesHost = 'http://localhost:30000'; const fetchLode = async (lodeUrl: string) => { try { - const result = await fetch(lodeUrl, { mode: 'cors' }) - return result.text() + const result = await fetch(lodeUrl, { mode: 'cors' }); + return result.text(); } catch (error) { - return '' + return ''; } -} +}; interface FullLode { - examples?: IExampleMine - declarations?: IDeclarationMine + examples?: IExampleMine; + declarations?: IDeclarationMine; } export const getLoded = async ( @@ -47,22 +47,22 @@ export const getLoded = async ( declarationsLodeUrl?: string ): Promise => { // First try to load from the apix-files server - let examples = await fetchLode(`${apixFilesHost}/examplesIndex.json`) + let examples = await fetchLode(`${apixFilesHost}/examplesIndex.json`); if (!examples && examplesLodeUrl) { - examples = await fetchLode(examplesLodeUrl) + examples = await fetchLode(examplesLodeUrl); } - let declarations + let declarations; if (declarationsLodeUrl) { - declarations = await fetchLode(declarationsLodeUrl) + declarations = await fetchLode(declarationsLodeUrl); } - const lode: FullLode = { examples: undefined, declarations: undefined } + const lode: FullLode = { examples: undefined, declarations: undefined }; if (examples) { - lode.examples = JSON.parse(examples) + lode.examples = JSON.parse(examples); } if (declarations) { - lode.declarations = JSON.parse(declarations) + lode.declarations = JSON.parse(declarations); } - return lode -} + return lode; +}; diff --git a/packages/api-explorer/src/utils/path.spec.ts b/packages/api-explorer/src/utils/path.spec.ts index db50f2b40..4cb114aa7 100644 --- a/packages/api-explorer/src/utils/path.spec.ts +++ b/packages/api-explorer/src/utils/path.spec.ts @@ -24,120 +24,122 @@ */ -import { api } from '../test-data' +import { api } from '../test-data'; import { buildMethodPath, buildPath, buildTypePath, getSceneType, isValidFilter, -} from './path' +} from './path'; describe('path utils', () => { - const testParam = 's=test' + const testParam = 's=test'; describe('buildMethodPath', () => { test('it builds a method path', () => { - const path = buildMethodPath('3.1', 'Dashboard', 'create_dashboard') - expect(path).toEqual('/3.1/methods/Dashboard/create_dashboard') - }) + const path = buildMethodPath('3.1', 'Dashboard', 'create_dashboard'); + expect(path).toEqual('/3.1/methods/Dashboard/create_dashboard'); + }); test('it builds a method path with params', () => { const path = buildMethodPath( '3.1', 'Dashboard', 'create_dashboard', testParam - ) + ); expect(path).toEqual( `/3.1/methods/Dashboard/create_dashboard?${testParam}` - ) - }) - }) + ); + }); + }); describe('buildTypePath', () => { test('it builds a type path', () => { - const path = buildTypePath('3.1', 'Dashboard', 'WriteDashboard') - expect(path).toEqual('/3.1/types/Dashboard/WriteDashboard') - }) + const path = buildTypePath('3.1', 'Dashboard', 'WriteDashboard'); + expect(path).toEqual('/3.1/types/Dashboard/WriteDashboard'); + }); test('it builds a type path with params', () => { const path = buildTypePath( '3.1', 'Dashboard', 'create_dashboard', testParam - ) - expect(path).toEqual(`/3.1/types/Dashboard/create_dashboard?${testParam}`) - }) - }) + ); + expect(path).toEqual( + `/3.1/types/Dashboard/create_dashboard?${testParam}` + ); + }); + }); describe('buildPath', () => { test('given a method it builds a method path', () => { - const path = buildPath(api, api.methods.create_dashboard, '3.1') - expect(path).toEqual('/3.1/methods/Dashboard/create_dashboard') - }) + const path = buildPath(api, api.methods.create_dashboard, '3.1'); + expect(path).toEqual('/3.1/methods/Dashboard/create_dashboard'); + }); test('given a type it creates a type path', () => { - const path = buildPath(api, api.types.Dashboard, '3.1') - expect(path).toEqual('/3.1/types/Dashboard/Dashboard') - }) - }) + const path = buildPath(api, api.types.Dashboard, '3.1'); + expect(path).toEqual('/3.1/types/Dashboard/Dashboard'); + }); + }); describe('getSceneType', () => { test('returns correct scene type given location with pathname', () => { - const methodPath = '/3.1/methods/RandomMethod' - const typePath = '/3.1/types/RandomType' - expect(getSceneType(methodPath)).toEqual('methods') - expect(getSceneType(typePath)).toEqual('types') - }) + const methodPath = '/3.1/methods/RandomMethod'; + const typePath = '/3.1/types/RandomType'; + expect(getSceneType(methodPath)).toEqual('methods'); + expect(getSceneType(typePath)).toEqual('types'); + }); test('returns empty string if there is no scene type', () => { - const noSceneTypePath = '/' - expect(getSceneType(noSceneTypePath)).toEqual('') - }) - }) + const noSceneTypePath = '/'; + expect(getSceneType(noSceneTypePath)).toEqual(''); + }); + }); describe('isValidFilter', () => { - const methodPath = '/3.1/methods/RandomMethod' - const typePath = '/3.1/types/RandomType' + const methodPath = '/3.1/methods/RandomMethod'; + const typePath = '/3.1/types/RandomType'; test("validates 'all' as a valid filter for methods and types", () => { - expect(isValidFilter(methodPath, 'ALL')).toBe(true) - expect(isValidFilter(typePath, 'ALL')).toBe(true) - }) + expect(isValidFilter(methodPath, 'ALL')).toBe(true); + expect(isValidFilter(typePath, 'ALL')).toBe(true); + }); - const methodFilters = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'] - const typeFilters = ['SPECIFICATION', 'WRITE', 'REQUEST', 'ENUMERATED'] + const methodFilters = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE']; + const typeFilters = ['SPECIFICATION', 'WRITE', 'REQUEST', 'ENUMERATED']; test.each(methodFilters)( 'validates %s as a valid method filter', (filter) => { - expect(isValidFilter(methodPath, filter)).toBe(true) + expect(isValidFilter(methodPath, filter)).toBe(true); } - ) + ); test.each(methodFilters)( 'invalidates %s when containing extra characters', (filter) => { - expect(isValidFilter(methodPath, filter + 'x')).toBe(false) + expect(isValidFilter(methodPath, filter + 'x')).toBe(false); } - ) + ); test.each(typeFilters)('validates %s as a valid type filter', (filter) => { - expect(isValidFilter(typePath, filter)).toBe(true) - }) + expect(isValidFilter(typePath, filter)).toBe(true); + }); test.each(typeFilters)( 'invalidates %s when containing extra characters', (filter) => { - expect(isValidFilter(typePath, filter + 'x')).toBe(false) + expect(isValidFilter(typePath, filter + 'x')).toBe(false); } - ) + ); test('invalidates wrong parameter for methods and types', () => { - expect(isValidFilter(methodPath, 'INVALID')).toBe(false) - expect(isValidFilter(typePath, 'INVALID')).toBe(false) - }) + expect(isValidFilter(methodPath, 'INVALID')).toBe(false); + expect(isValidFilter(typePath, 'INVALID')).toBe(false); + }); test.each(typeFilters)('validates %s as a valid type filter', (filter) => { - expect(isValidFilter(typePath, filter)).toBe(true) - }) - }) -}) + expect(isValidFilter(typePath, filter)).toBe(true); + }); + }); +}); diff --git a/packages/api-explorer/src/utils/path.ts b/packages/api-explorer/src/utils/path.ts index d174e3bcd..46a73e410 100644 --- a/packages/api-explorer/src/utils/path.ts +++ b/packages/api-explorer/src/utils/path.ts @@ -24,13 +24,13 @@ */ -import type { ApiModel, IMethod, IType } from '@looker/sdk-codegen' -import { firstMethodRef } from '@looker/sdk-codegen' -import type { Location as HLocation } from 'history' -import { matchPath } from 'react-router' +import type { ApiModel, IMethod, IType } from '@looker/sdk-codegen'; +import { firstMethodRef } from '@looker/sdk-codegen'; +import type { Location as HLocation } from 'history'; +import { matchPath } from 'react-router'; -export const methodFilterOptions = /GET$|POST$|PUT$|PATCH$|DELETE$/i -export const typeFilterOptions = /SPECIFICATION$|WRITE$|REQUEST$|ENUMERATED$/i +export const methodFilterOptions = /GET$|POST$|PUT$|PATCH$|DELETE$/i; +export const typeFilterOptions = /SPECIFICATION$|WRITE$|REQUEST$|ENUMERATED$/i; /** * Builds a path matching the route used by MethodScene @@ -45,7 +45,7 @@ export const buildMethodPath = ( tag: string, methodName: string, params?: string -) => `/${specKey}/methods/${tag}/${methodName}${params ? `?${params}` : ''}` +) => `/${specKey}/methods/${tag}/${methodName}${params ? `?${params}` : ''}`; /** * Builds a path matching the route used by TypeScene @@ -60,10 +60,10 @@ export const buildTypePath = ( tag: string, typeName: string, params?: string -) => `/${specKey}/types/${tag}/${typeName}${params ? `?${params}` : ''}` +) => `/${specKey}/types/${tag}/${typeName}${params ? `?${params}` : ''}`; -export const diffPath = 'diff' -export const oAuthPath = 'oauth' +export const diffPath = 'diff'; +export const oAuthPath = 'oauth'; /** * Returns the tag for a given method name @@ -75,14 +75,14 @@ const getMethodTag = (api: ApiModel, methodName: string) => { // Find tag containing methodName return Object.entries(api.tags) .filter(([, methods]) => methodName in methods) - .map(([methodTag]) => methodTag)[0] -} + .map(([methodTag]) => methodTag)[0]; +}; /** * Is this item a method? Check without requiring `instanceof Method` * @param item to check for method or type */ -export const isMethod = (item: IMethod | IType) => 'params' in item +export const isMethod = (item: IMethod | IType) => 'params' in item; /** * Return the tag for a give type @@ -90,9 +90,9 @@ export const isMethod = (item: IMethod | IType) => 'params' in item * @param type to tag */ const getTypeTag = (api: ApiModel, type: IType) => { - const method = firstMethodRef(api, type) - return getMethodTag(api, method.name) -} + const method = firstMethodRef(api, type); + return getMethodTag(api, method.name); +}; /** * Builds a path matching MethodScene or TypeScene route @@ -106,33 +106,33 @@ export const buildPath = ( item: IMethod | IType, specKey: string ) => { - let path + let path; if (isMethod(item)) { - const tag = getMethodTag(api, item.name) - path = buildMethodPath(specKey, tag, item.name) + const tag = getMethodTag(api, item.name); + path = buildMethodPath(specKey, tag, item.name); } else { - const tag = getTypeTag(api, item as IType) - path = buildTypePath(specKey, tag, item.name) + const tag = getTypeTag(api, item as IType); + path = buildTypePath(specKey, tag, item.name); } - return path -} + return path; +}; /** * Determine API specification keys from URL pattern * @param location service to examine */ export const getSpecKey = (location: HLocation | Location): string | null => { - const pathname = location.pathname - let match + const pathname = location.pathname; + let match; if (pathname.startsWith(`/${diffPath}`)) { - const pattern = new RegExp(`(?:/${diffPath})/(?\\w+.\\w+)`) - match = pathname.match(pattern) + const pattern = new RegExp(`(?:/${diffPath})/(?\\w+.\\w+)`); + match = pathname.match(pattern); } else { - match = pathname.match(/\/(?\w+\.\w+).*/) + match = pathname.match(/\/(?\w+\.\w+).*/); } - const result = match?.groups?.specKey || null - return result -} + const result = match?.groups?.specKey || null; + return result; +}; /** * Gets the scene type of the current page @@ -142,9 +142,9 @@ export const getSpecKey = (location: HLocation | Location): string | null => { export const getSceneType = (path: string) => { const match = matchPath<{ tagType: string }>(path, { path: '/:specKey/:tagType', - }) - return match ? match!.params.tagType : '' -} + }); + return match ? match!.params.tagType : ''; +}; /** * Confirms if filter is valid for a given method/type tag @@ -152,15 +152,15 @@ export const getSceneType = (path: string) => { * @param filter filter tag for page */ export const isValidFilter = (path: string, filter: string) => { - let isValid - const sceneType = getSceneType(path) - if (!sceneType) isValid = false + let isValid; + const sceneType = getSceneType(path); + if (!sceneType) isValid = false; else if (!filter.localeCompare('all', 'en', { sensitivity: 'base' })) - isValid = true + isValid = true; else if (sceneType === 'methods') { - isValid = methodFilterOptions.test(filter) + isValid = methodFilterOptions.test(filter); } else { - isValid = typeFilterOptions.test(filter) + isValid = typeFilterOptions.test(filter); } - return isValid -} + return isValid; +}; diff --git a/packages/api-explorer/src/utils/sdkLanguage.spec.ts b/packages/api-explorer/src/utils/sdkLanguage.spec.ts index 23207da57..e0b4f85c1 100644 --- a/packages/api-explorer/src/utils/sdkLanguage.spec.ts +++ b/packages/api-explorer/src/utils/sdkLanguage.spec.ts @@ -24,46 +24,46 @@ */ -import { codeGenerators } from '@looker/sdk-codegen' -import { allSdkLanguages, findSdk } from '../utils' -import { sdkLanguageMapping } from '../test-data' +import { codeGenerators } from '@looker/sdk-codegen'; +import { allSdkLanguages, findSdk } from '../utils'; +import { sdkLanguageMapping } from '../test-data'; describe('SDK Language Utils', () => { test('allSdkLanguages gets all sdk languages', () => { - const actual = allSdkLanguages() - const aliases = Object.keys(actual) - expect(Object.keys(actual)).toHaveLength(codeGenerators.length + 1) + const actual = allSdkLanguages(); + const aliases = Object.keys(actual); + expect(Object.keys(actual)).toHaveLength(codeGenerators.length + 1); aliases.forEach((alias) => - expect(actual[alias]).toEqual(sdkLanguageMapping[alias]) - ) - }) + expect(actual[alias]).toEqual((sdkLanguageMapping as any)[alias]) + ); + }); describe('findSdk', () => { test('it is not case sensitive', () => { - const actual = findSdk('pY') - expect(actual.language).toEqual('Python') - }) + const actual = findSdk('pY'); + expect(actual.language).toEqual('Python'); + }); test("it returns 'All' option if provided bogus input", () => { - const actual = findSdk('random') - expect(actual.language).toEqual('All') - expect(actual.alias).toEqual('all') - }) + const actual = findSdk('random'); + expect(actual.language).toEqual('All'); + expect(actual.alias).toEqual('all'); + }); test.each(Object.entries(sdkLanguageMapping))( `it finds language for alias %s`, (alias, language) => { - const actual = findSdk(alias) - expect(actual.language).toEqual(language) + const actual = findSdk(alias); + expect(actual.language).toEqual(language); } - ) + ); test.each(Object.entries(sdkLanguageMapping))( `it finds alias for language %s`, (alias, language) => { - const actual = findSdk(language) - expect(actual.alias).toEqual(alias) + const actual = findSdk(language); + expect(actual.alias).toEqual(alias); } - ) - }) -}) + ); + }); +}); diff --git a/packages/api-explorer/src/utils/sdkLanguage.ts b/packages/api-explorer/src/utils/sdkLanguage.ts index 9c187f969..0f04622b2 100644 --- a/packages/api-explorer/src/utils/sdkLanguage.ts +++ b/packages/api-explorer/src/utils/sdkLanguage.ts @@ -24,23 +24,24 @@ */ -import { codeGenerators } from '@looker/sdk-codegen' +import type { ArgValues } from '@looker/sdk-codegen'; +import { codeGenerators } from '@looker/sdk-codegen'; -export const allAlias = 'all' +export const allAlias = 'all'; /** * Gets all supported sdk languages * @returns mapping of sdk language aliases to name */ export const allSdkLanguages = (): Record => { - const languages = {} + const languages: ArgValues = {}; codeGenerators.forEach((gen) => { - const alias = gen.extension.toString().match(/\.(\w+)\b/)![1] - languages[alias] = gen.language - }) + const alias = gen.extension.toString().match(/\.(\w+)\b/)![1]; + languages[alias] = gen.language; + }); - return { ...languages, [allAlias]: 'All' } -} + return { ...languages, [allAlias]: 'All' }; +}; /** * Searches for sdk language details given label @@ -48,16 +49,16 @@ export const allSdkLanguages = (): Record => { * @returns language name and alias */ export const findSdk = (label: string) => { - const languages = allSdkLanguages() - let match = { alias: allAlias, language: languages[allAlias] } + const languages = allSdkLanguages(); + let match = { alias: allAlias, language: languages[allAlias] }; for (const [alias, language] of Object.entries(languages)) { if ( !label.localeCompare(alias, 'en', { sensitivity: 'base' }) || !label.localeCompare(language, 'en', { sensitivity: 'base' }) ) { - match = { alias, language } - break + match = { alias, language }; + break; } } - return match -} + return match; +}; diff --git a/packages/api-explorer/src/utils/useWindowSize.tsx b/packages/api-explorer/src/utils/useWindowSize.tsx index 847c29bd5..e44bbfed8 100644 --- a/packages/api-explorer/src/utils/useWindowSize.tsx +++ b/packages/api-explorer/src/utils/useWindowSize.tsx @@ -24,25 +24,25 @@ */ -import { useEffect, useState } from 'react' +import { useEffect, useState } from 'react'; // from: https://usehooks.com/useWindowSize/ export function useWindowSize() { const [windowSize, setWindowSize] = useState({ width: 0, height: 0, - }) + }); useEffect(() => { function handleResize() { setWindowSize({ width: window.innerWidth, height: window.innerHeight, - }) + }); } - window.addEventListener('resize', handleResize) - handleResize() - return () => window.removeEventListener('resize', handleResize) - }, []) + window.addEventListener('resize', handleResize); + handleResize(); + return () => window.removeEventListener('resize', handleResize); + }, []); - return windowSize + return windowSize; } diff --git a/packages/api-explorer/webpack.dev.config.js b/packages/api-explorer/webpack.dev.config.js index 32c6601f3..ac2272ba3 100644 --- a/packages/api-explorer/webpack.dev.config.js +++ b/packages/api-explorer/webpack.dev.config.js @@ -24,10 +24,10 @@ */ -const path = require('path') -const { merge } = require('webpack-merge') -const base = require('../../webpack.base.config')(__dirname) -const browser = require('../../webpack.browser.config')() +const path = require('path'); +const { merge } = require('webpack-merge'); +const base = require('../../webpack.base.config')(__dirname); +const browser = require('../../webpack.browser.config')(); module.exports = merge(base, browser, { entry: { @@ -50,4 +50,4 @@ module.exports = merge(base, browser, { 'Access-Control-Allow-Headers': '*', }, }, -}) +}); diff --git a/packages/api-explorer/webpack.prod.config.js b/packages/api-explorer/webpack.prod.config.js index 9852abe4f..b8d995e2c 100644 --- a/packages/api-explorer/webpack.prod.config.js +++ b/packages/api-explorer/webpack.prod.config.js @@ -23,14 +23,14 @@ SOFTWARE. */ -const path = require('path') -const { merge } = require('webpack-merge') -const base = require('../../webpack.base.config')(__dirname) -const browser = require('../../webpack.browser.config')() +const path = require('path'); +const { merge } = require('webpack-merge'); +const base = require('../../webpack.base.config')(__dirname); +const browser = require('../../webpack.browser.config')(); module.exports = merge(base, browser, { entry: { app: path.join(__dirname, 'src/App.tsx'), }, mode: 'production', -}) +}); diff --git a/packages/code-editor/CHANGELOG.md b/packages/code-editor/CHANGELOG.md index 9e93949ee..edc256201 100644 --- a/packages/code-editor/CHANGELOG.md +++ b/packages/code-editor/CHANGELOG.md @@ -2,341 +2,299 @@ ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.8.0 to ^21.8.1 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.8.0 to ^21.8.1 ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.8.1 to ^21.8.2 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.8.1 to ^21.8.2 ## [0.1.28](https://github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.27...code-editor-v0.1.28) (2023-02-22) - ### Features -* keep all body parameters toggle in API Explorer requests ([#1245](https://github.com/looker-open-source/sdk-codegen/issues/1245)) ([043ed3f](https://github.com/looker-open-source/sdk-codegen/commit/043ed3ff12cba4f821604b5b668d7301ed4aa6d1)) - +- keep all body parameters toggle in API Explorer requests ([#1245](https://github.com/looker-open-source/sdk-codegen/issues/1245)) ([043ed3f](https://github.com/looker-open-source/sdk-codegen/commit/043ed3ff12cba4f821604b5b668d7301ed4aa6d1)) ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.7.4 to ^21.8.0 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.7.4 to ^21.8.0 ### [0.1.27](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.26...code-editor-v0.1.27) (2022-12-09) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.7.3 to ^21.7.4 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.7.3 to ^21.7.4 ### [0.1.26](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.25...code-editor-v0.1.26) (2022-11-10) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.7.2 to ^21.7.3 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.7.2 to ^21.7.3 ### [0.1.25](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.24...code-editor-v0.1.25) (2022-10-17) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.7.1 to ^21.7.2 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.7.1 to ^21.7.2 ### [0.1.24](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.23...code-editor-v0.1.24) (2022-09-21) - ### Features -* error document retrieval in API Explorer ([#1161](https://www.github.com/looker-open-source/sdk-codegen/issues/1161)) ([89a94e1](https://www.github.com/looker-open-source/sdk-codegen/commit/89a94e167b8a3e1aa662c0b5de7c585b3eac2f13)) -* error documentation redirect and support for detailed error content ([#1167](https://www.github.com/looker-open-source/sdk-codegen/issues/1167)) ([5b4fc5b](https://www.github.com/looker-open-source/sdk-codegen/commit/5b4fc5b91e05ed4ccd9090724e4ac3f506b541fd)) - +- error document retrieval in API Explorer ([#1161](https://www.github.com/looker-open-source/sdk-codegen/issues/1161)) ([89a94e1](https://www.github.com/looker-open-source/sdk-codegen/commit/89a94e167b8a3e1aa662c0b5de7c585b3eac2f13)) +- error documentation redirect and support for detailed error content ([#1167](https://www.github.com/looker-open-source/sdk-codegen/issues/1167)) ([5b4fc5b](https://www.github.com/looker-open-source/sdk-codegen/commit/5b4fc5b91e05ed4ccd9090724e4ac3f506b541fd)) ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.7.0 to ^21.7.1 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.7.0 to ^21.7.1 ### [0.1.23](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.22...code-editor-v0.1.23) (2022-07-29) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.6.0 to ^21.7.0 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.6.0 to ^21.7.0 ### [0.1.22](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.21...code-editor-v0.1.22) (2022-07-07) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.5.2 to ^21.6.0 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.5.2 to ^21.6.0 ### [0.1.21](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.20...code-editor-v0.1.21) (2022-04-07) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.5.1 to ^21.5.2 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.5.1 to ^21.5.2 ### [0.1.20](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.19...code-editor-v0.1.20) (2022-04-07) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.5.0 to ^21.5.1 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.5.0 to ^21.5.1 ### [0.1.19](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.18...code-editor-v0.1.19) (2022-03-04) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.4.0 to ^21.5.0 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.4.0 to ^21.5.0 ### [0.1.18](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.17...code-editor-v0.1.18) (2022-02-14) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.3.2 to ^21.4.0 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.3.2 to ^21.4.0 ### [0.1.17](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.16...code-editor-v0.1.17) (2021-12-20) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.3.0 to ^21.3.1 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.3.0 to ^21.3.1 ### [0.1.16](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.15...code-editor-v0.1.16) (2021-12-16) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.2.1 to ^21.3.0 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.2.1 to ^21.3.0 ### [0.1.15](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.14...code-editor-v0.1.15) (2021-12-06) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.2.0 to ^21.2.1 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.2.0 to ^21.2.1 ### [0.1.14](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.13...code-editor-v0.1.14) (2021-11-10) - ### Features -* create @looker/extension-utils ([#886](https://www.github.com/looker-open-source/sdk-codegen/issues/886)) ([9d1720d](https://www.github.com/looker-open-source/sdk-codegen/commit/9d1720d9a4cec00c45195dd9c716d9a2a929264f)) - +- create @looker/extension-utils ([#886](https://www.github.com/looker-open-source/sdk-codegen/issues/886)) ([9d1720d](https://www.github.com/looker-open-source/sdk-codegen/commit/9d1720d9a4cec00c45195dd9c716d9a2a929264f)) ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.1.1 to ^21.2.0 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.1.1 to ^21.2.0 ### [0.1.13](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.12...code-editor-v0.1.13) (2021-10-27) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.1.0 to ^21.1.1 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.1.0 to ^21.1.1 ### [0.1.12](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.11...code-editor-v0.1.12) (2021-10-24) - ### Features -* personalized Hackathon agenda ([#853](https://www.github.com/looker-open-source/sdk-codegen/issues/853)) ([a143225](https://www.github.com/looker-open-source/sdk-codegen/commit/a1432250bad0bd35d5d9c5044aced81cf2cc1346)) +- personalized Hackathon agenda ([#853](https://www.github.com/looker-open-source/sdk-codegen/issues/853)) ([a143225](https://www.github.com/looker-open-source/sdk-codegen/commit/a1432250bad0bd35d5d9c5044aced81cf2cc1346)) ### [0.1.11](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.10...code-editor-v0.1.11) (2021-10-19) - ### Features -* lots of RunIt form cleanup ([#814](https://www.github.com/looker-open-source/sdk-codegen/issues/814)) ([e92eae8](https://www.github.com/looker-open-source/sdk-codegen/commit/e92eae8fc127a0aa99545ca9c577152c08d59000)) -* Use agenda data for the Hackathon home page ([#842](https://www.github.com/looker-open-source/sdk-codegen/issues/842)) ([0da2523](https://www.github.com/looker-open-source/sdk-codegen/commit/0da25239c3f108cb684309818c33c91c2a7c3278)) - +- lots of RunIt form cleanup ([#814](https://www.github.com/looker-open-source/sdk-codegen/issues/814)) ([e92eae8](https://www.github.com/looker-open-source/sdk-codegen/commit/e92eae8fc127a0aa99545ca9c577152c08d59000)) +- Use agenda data for the Hackathon home page ([#842](https://www.github.com/looker-open-source/sdk-codegen/issues/842)) ([0da2523](https://www.github.com/looker-open-source/sdk-codegen/commit/0da25239c3f108cb684309818c33c91c2a7c3278)) ### Bug Fixes -* Extension Api Explorer markdown link clicks ([#830](https://www.github.com/looker-open-source/sdk-codegen/issues/830)) ([dd8a3f0](https://www.github.com/looker-open-source/sdk-codegen/commit/dd8a3f03b8ea03858271bf55307c7d359631455a)) - +- Extension Api Explorer markdown link clicks ([#830](https://www.github.com/looker-open-source/sdk-codegen/issues/830)) ([dd8a3f0](https://www.github.com/looker-open-source/sdk-codegen/commit/dd8a3f03b8ea03858271bf55307c7d359631455a)) ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.0.25 to ^21.1.0 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.0.25 to ^21.1.0 ### [0.1.10](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.9...code-editor-v0.1.10) (2021-09-01) - ### Features -* new configuration UI for API Explorer ([#803](https://www.github.com/looker-open-source/sdk-codegen/issues/803)) ([e6c67d1](https://www.github.com/looker-open-source/sdk-codegen/commit/e6c67d1211b412d4ce83127c9f7a8f091e3cf27f)) - +- new configuration UI for API Explorer ([#803](https://www.github.com/looker-open-source/sdk-codegen/issues/803)) ([e6c67d1](https://www.github.com/looker-open-source/sdk-codegen/commit/e6c67d1211b412d4ce83127c9f7a8f091e3cf27f)) ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.0.24 to ^21.0.25 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.0.24 to ^21.0.25 ### [0.1.9](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.8...code-editor-v0.1.9) (2021-08-11) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.0.23 to ^21.0.24 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.0.23 to ^21.0.24 ### [0.1.8](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.7...code-editor-v0.1.8) (2021-07-30) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.0.22 to ^21.0.23 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.0.22 to ^21.0.23 ### [0.1.7](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.6...code-editor-v0.1.7) (2021-07-09) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.0.21 to ^21.0.22 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.0.21 to ^21.0.22 ### [0.1.6](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.5...code-editor-v0.1.6) (2021-07-08) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.0.20 to ^21.0.21 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.0.20 to ^21.0.21 ### [0.1.5](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.4...code-editor-v0.1.5) (2021-07-02) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.0.19 to ^21.0.20 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.0.19 to ^21.0.20 ### [0.1.4](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.3...code-editor-v0.1.4) (2021-07-01) - ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.0.18 to ^21.0.19 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.0.18 to ^21.0.19 ### [0.1.3](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.2...code-editor-v0.1.3) (2021-06-30) - ### Features -* refactor Markdown out to @looker/code-editor ([#699](https://www.github.com/looker-open-source/sdk-codegen/issues/699)) ([f3c16e2](https://www.github.com/looker-open-source/sdk-codegen/commit/f3c16e2a162266545ba3086a0a1dddd0cb79195f)) - +- refactor Markdown out to @looker/code-editor ([#699](https://www.github.com/looker-open-source/sdk-codegen/issues/699)) ([f3c16e2](https://www.github.com/looker-open-source/sdk-codegen/commit/f3c16e2a162266545ba3086a0a1dddd0cb79195f)) ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.0.17 to ^21.0.18 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.0.17 to ^21.0.18 ### [0.1.2](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.1...code-editor-v0.1.2) (2021-06-16) - ### Features -* reduce size of apix bundle ([#676](https://www.github.com/looker-open-source/sdk-codegen/issues/676)) ([0d74f6a](https://www.github.com/looker-open-source/sdk-codegen/commit/0d74f6a7814b509416a9d2558c16439a4859b543)) - +- reduce size of apix bundle ([#676](https://www.github.com/looker-open-source/sdk-codegen/issues/676)) ([0d74f6a](https://www.github.com/looker-open-source/sdk-codegen/commit/0d74f6a7814b509416a9d2558c16439a4859b543)) ### Bug Fixes -* sync design-tokens/icons dependency constraint ([eb1a427](https://www.github.com/looker-open-source/sdk-codegen/commit/eb1a427d3c90bec44b2aac542783c3cda4810c0e)) -* sync design-tokens/icons dependency constraint ([eb1a427](https://www.github.com/looker-open-source/sdk-codegen/commit/eb1a427d3c90bec44b2aac542783c3cda4810c0e)) - +- sync design-tokens/icons dependency constraint ([eb1a427](https://www.github.com/looker-open-source/sdk-codegen/commit/eb1a427d3c90bec44b2aac542783c3cda4810c0e)) +- sync design-tokens/icons dependency constraint ([eb1a427](https://www.github.com/looker-open-source/sdk-codegen/commit/eb1a427d3c90bec44b2aac542783c3cda4810c0e)) ### Dependencies -* The following workspace dependencies were updated - * devDependencies - * @looker/sdk-codegen bumped from ^21.0.16 to ^21.0.17 +- The following workspace dependencies were updated + - devDependencies + - @looker/sdk-codegen bumped from ^21.0.16 to ^21.0.17 ### [0.1.1](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.1.0...code-editor-v0.1.1) (2021-05-05) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/sdk-codegen bumped from ^21.0.15 to ^21.0.16 +- The following workspace dependencies were updated + - dependencies + - @looker/sdk-codegen bumped from ^21.0.15 to ^21.0.16 ## [0.1.0](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.0.2...code-editor-v0.1.0) (2021-04-27) - ### Features -* APIX now uses google font appropriately ([#636](https://www.github.com/looker-open-source/sdk-codegen/issues/636)) ([ed932d6](https://www.github.com/looker-open-source/sdk-codegen/commit/ed932d6744fd3c102bfff7417643667bb57aee00)) +- APIX now uses google font appropriately ([#636](https://www.github.com/looker-open-source/sdk-codegen/issues/636)) ([ed932d6](https://www.github.com/looker-open-source/sdk-codegen/commit/ed932d6744fd3c102bfff7417643667bb57aee00)) ### [0.0.2](https://www.github.com/looker-open-source/sdk-codegen/compare/code-editor-v0.0.1...code-editor-v0.0.2) (2021-04-27) - ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/sdk-codegen bumped from ^21.0.14 to ^21.0.15 +- The following workspace dependencies were updated + - dependencies + - @looker/sdk-codegen bumped from ^21.0.14 to ^21.0.15 ### 0.0.1 (2021-04-26) - ### Features -* adds editor functionality to CodeDisplay ([#615](https://www.github.com/looker-open-source/sdk-codegen/issues/615)) ([b256d14](https://www.github.com/looker-open-source/sdk-codegen/commit/b256d14c279e47f531c8291d11146d07a7b5ad94)) - - +- adds editor functionality to CodeDisplay ([#615](https://www.github.com/looker-open-source/sdk-codegen/issues/615)) ([b256d14](https://www.github.com/looker-open-source/sdk-codegen/commit/b256d14c279e47f531c8291d11146d07a7b5ad94)) ### Dependencies -* The following workspace dependencies were updated - * dependencies - * @looker/sdk-codegen bumped from ^21.0.12 to ^21.0.14 +- The following workspace dependencies were updated + - dependencies + - @looker/sdk-codegen bumped from ^21.0.12 to ^21.0.14 diff --git a/packages/code-editor/README.md b/packages/code-editor/README.md index e8f53f376..b1dce8a89 100644 --- a/packages/code-editor/README.md +++ b/packages/code-editor/README.md @@ -33,18 +33,18 @@ This component is a specialized `` or `
` that has various search,
 
 This component wraps the `` component and adds a "copy to Clipboard" button
 
-| Prop | Description | Default |
-| ----------- | ----------- | ----------- |
-| ... | All `` props are accepted | |
+| Prop    | Description                                           | Default    |
+| ------- | ----------------------------------------------------- | ---------- |
+| ...     | All `` props are accepted              |            |
 | caption | An override for the Copy button text, which is "Copy" | _optional_ |
 
 ### ``
 
 This component wraps the `` component and adds a hidden `