diff --git a/.asf.yaml b/.asf.yaml index 98f624ad..0e43aed5 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -# https://cwiki.apache.org/confluence/display/INFRA/.asf.yaml+features+for+git+repositories +# https://cwiki.apache.org/confluence/display/INFRA/git+-+.asf.yaml+features --- github: description: "Apache Kibble - a tool to collect, aggregate and visualize data about any software project" diff --git a/.github/ISSUE_TEMPLATE/config.ymal b/.github/ISSUE_TEMPLATE/config.yml similarity index 100% rename from .github/ISSUE_TEMPLATE/config.ymal rename to .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 753f97da..bf1a4b79 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,6 +1,6 @@ --- name: Feature request -about: Idea or feature request +about: Idea or feature request title: '' labels: 'kind:feature' assignees: '' diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 00000000..299dda74 --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,23 @@ +area:api: + - 'kibble/api/*' + +area:cli: + - 'kibble/cli/*' + +area:scanners: + - 'kibble/scanners/*' + +area:ui: + - 'ui/*' + +area:docs: + - 'docs/*' + - '*.md' + +area:dev: + - '.github/*' + - '.pre-commit.config.yaml' + - 'asf.yaml' + - 'Dockerfile*' + - 'docker*' + - 'setup.*' diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 00000000..7880c5e8 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,56 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +--- +name: CI +on: + - push + - pull_request + +jobs: + statics: + name: Static checks + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.8' + - run: pip install '.[devel]' + - uses: pre-commit/action@v1.0.1 + with: + extra_args: --show-diff-on-failure + build-docker: + name: Build kibble dev image + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Build docker image + run: docker-compose -f docker-compose-dev.yaml build setup + - name: Run kibble command + run: docker run apache/kibble kibble --help + - name: Check dependencies + run: docker run apache/kibble pip check + run-tests: + name: Run Tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.8' + - run: pip install '.[devel]' + - run: pytest tests --color=yes diff --git a/.github/workflows/labeler.yaml b/.github/workflows/labeler.yaml new file mode 100644 index 00000000..103e3e44 --- /dev/null +++ b/.github/workflows/labeler.yaml @@ -0,0 +1,12 @@ +name: "PR labeler" +on: + - pull_request_target + +jobs: + triage: + name: Label + runs-on: ubuntu-latest + steps: + - uses: actions/labeler@main + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.gitignore b/.gitignore index d562a27b..b12fa18f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Apache Kibble files -api/yaml/kibble.yaml +api/yaml/kibble.yaml* +kibble/api/yaml/kibble.yaml* # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 07fae567..30f7f15a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,8 +24,67 @@ minimum_pre_commit_version: "1.20.0" repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v2.3.0 + rev: v3.3.0 hooks: - id: check-yaml - id: end-of-file-fixer + exclude: ^ui/vendors/.*$ - id: trailing-whitespace + exclude: ^ui/vendors/.*$ + - id: fix-encoding-pragma + args: + - --remove + - repo: https://github.com/Lucas-C/pre-commit-hooks + rev: v1.1.9 + hooks: + - id: insert-license + name: Add license for all other files + exclude: ^\.github/.*$ + args: + - --comment-style + - "|#|" + - --license-filepath + - license-templates/LICENSE.txt + - --fuzzy-match-generates-todo + files: > + \.cfg$|^Dockerfile.*$|\.sh$|\.bash$|\.py$|\.yml$|\.yaml$ + - id: insert-license + name: Add license for all rst files + exclude: ^\.github/.*$ + args: + - --comment-style + - "||" + - --license-filepath + - license-templates/LICENSE.rst + - --fuzzy-match-generates-todo + files: \.rst$ + - id: insert-license + name: Add license for all md and html files + files: \.md$|\.html$ + exclude: ^\.github/.*$| + args: + - --comment-style + - "" + - --license-filepath + - license-templates/LICENSE.txt + - --fuzzy-match-generates-todo + - repo: https://github.com/psf/black + rev: 20.8b1 + hooks: + - id: black + name: Black + types: [python] + - repo: https://github.com/timothycrosley/isort + rev: 5.6.4 + hooks: + - id: isort + name: Run isort to sort imports + args: ['--multi-line', '3', '--trailing-comma'] + files: \.py$ + - repo: local + hooks: + - id: pylint + name: Pylint on all sources + entry: pylint + language: system + types: [ python ] diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 5fd7277c..d5c66bb2 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,7 +1,7 @@ # Code of Conduct -The Apache Kibble project follows the +The Apache Kibble project follows the [Apache Software Foundation code of conduct](https://www.apache.org/foundation/policies/conduct.html). -If you observe behavior that violates those rules please follow the +If you observe behavior that violates those rules please follow the [ASF reporting guidelines](https://www.apache.org/foundation/policies/conduct#reporting-guidelines). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 86ec40be..d420751e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contributing to Kibble # -## Community +## Community The main development and design discussion happens on our mailing lists. We have a list specifically for development, and one for future user questions and feedback. @@ -15,5 +15,57 @@ We also have: ## Development installation -This project requires Python in higher version than 3.3. -More information will come soon! +You should be able to install Apache Kibble by simply doing: +``` +pip install -e ."[devel]" +``` + +The easiest option to spin up a development environment is to use our development docker-compose. +The development image has mounted all Kibble sources so all your local code changes will be automatically +reflected in the running app. + +First you need to configure the Elasticsearch node: +``` +docker-compose -f docker-compose-dev.yaml up setup +``` +Once you see the +``` +setup_1 | All done, Kibble should...work now :) +``` +Now you can can launch Apache Kibble ui: +``` +docker-compose -f docker-compose-dev.yaml up ui +``` +The ui should be available under `http://0.0.0.0:8000` or `http://localhost:8000`. To log in you can use +the dummy admin account `admin@kibble` and password `kibbleAdmin`. + +You can also start only the API server: +``` +docker-compose -f docker-compose-dev.yaml up kibble +``` + +## Code Quality + +Apache Kibble project is using [pre-commits](https://pre-commit.com) to ensure the quality of the code. +We encourage you to use pre-commits, but it's not required in order to contribute. Every change is checked +on CI and if it does not pass the tests it cannot be accepted. If you want to check locally then +you should install Python3.6 or newer together and run: +```bash +pip install pre-commit +# or +brew install pre-commit +``` +For more installation options visit the [pre-commits](https://pre-commit.com). + +To turn on pre-commit checks for commit operations in git, run: +```bash +pre-commit install +``` +To run all checks on your staged files, run: +```bash +pre-commit run +``` +To run all checks on all files, run: +```bash +pre-commit run --all-files +``` diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 00000000..78500b60 --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,29 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +FROM python:3.8-slim + +USER root +RUN apt-get update +RUN apt-get install -y gcc git unzip cloc + +COPY . /kibble/ + +WORKDIR /kibble + +RUN pip install --upgrade pip +RUN pip install -e . diff --git a/NOTICE b/NOTICE index 790683a8..66e7dc12 100644 --- a/NOTICE +++ b/NOTICE @@ -119,7 +119,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Metis Dashboard (MIT License) ------------------------------------------------------------------------ -Copyright (c) 2015 onokumus +Copyright (c) 2015 onokumus 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 @@ -186,4 +186,3 @@ 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. - diff --git a/README.md b/README.md index 7efe0455..3d9f3728 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@

%s:\n%s\n
\n%s:\n%s
%s\n
%s-
%s:\n%s\n
\n%s:\n%s
%s\n
%s+
application/json:
{
@@ -141,14 +141,14 @@ Response examples:
-
+
-
+
PATCH
-
+
/api/account
@@ -190,14 +190,14 @@ Response examples:
-
+
-
+
PUT
-
+
/api/account
@@ -235,23 +235,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/bio/bio
Shows some facts about a contributor
Response examples:
@@ -268,14 +268,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/bio/bio
@@ -334,23 +334,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/bio/trends
Shows a quick trend summary of the past 6 months for a contributor
Response examples:
@@ -367,14 +367,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/bio/trends
@@ -433,23 +433,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/code/changes
Show insertions/deletions as a timeseries
Response examples:
@@ -474,14 +474,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/code/changes
@@ -548,23 +548,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/code/commits
Show commits as a timeseries
Response examples:
@@ -589,14 +589,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/code/commits
@@ -663,23 +663,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/code/committers
Shows the top N of committers
Response examples:
@@ -696,14 +696,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/code/committers
@@ -762,23 +762,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/code/evolution
Show code evolution as a timeseries
Response examples:
@@ -803,14 +803,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/code/evolution
@@ -877,23 +877,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/code/pony
Shows pony factor data for a set of repos over a given period of time
Response examples:
@@ -914,14 +914,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/code/pony
@@ -984,23 +984,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/code/pony-timeseries
Shows timeseries of Pony Factor over time
Response examples:
@@ -1025,14 +1025,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/code/pony-timeseries
@@ -1099,23 +1099,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/code/relationships
Shows a breakdown of contributor relationships between repositories
Response examples:
@@ -1132,14 +1132,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/code/relationships
@@ -1198,23 +1198,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/code/retention
Shows retention metrics for a set of repos over a given period of time
Response examples:
@@ -1235,14 +1235,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/code/retention
@@ -1305,23 +1305,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/code/sloc
Shows a breakdown of lines of code for one or more sources
Response examples:
@@ -1338,14 +1338,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/code/sloc
@@ -1404,23 +1404,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/code/top-commits
Shows top 25 repos by commit volume
Response examples:
@@ -1445,14 +1445,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/code/top-commits
@@ -1519,23 +1519,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/code/top-sloc
Shows top 25 repos by lines of code
Response examples:
@@ -1560,14 +1560,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/code/top-sloc
@@ -1634,23 +1634,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/code/trends
Shows trend data for a set of repos over a given period of time
Response examples:
@@ -1667,14 +1667,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/code/trends
@@ -1733,23 +1733,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/issue/actors
Shows timeseries of no. of people opening/closing issues over time
Response examples:
@@ -1774,14 +1774,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/issue/actors
@@ -1848,23 +1848,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/issue/age
Shows timeseries of no. of open tickets by age
Response examples:
@@ -1889,14 +1889,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/issue/age
@@ -1963,23 +1963,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/issue/closers
Shows the top N of issue closers
Response examples:
@@ -1996,14 +1996,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/issue/closers
@@ -2062,23 +2062,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/issue/issues
Shows timeseries of issues opened/closed over time
Response examples:
@@ -2103,14 +2103,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/issue/issues
@@ -2177,23 +2177,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/issue/openers
Shows the top N of issue openers
Response examples:
@@ -2210,14 +2210,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/issue/openers
@@ -2276,23 +2276,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/issue/pony-timeseries
Shows timeseries of Pony Factor over time
Response examples:
@@ -2317,14 +2317,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/issue/pony-timeseries
@@ -2391,23 +2391,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/issue/relationships
Shows a breakdown of contributor relationships between issue trackers
Response examples:
@@ -2424,14 +2424,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/issue/relationships
@@ -2490,23 +2490,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/issue/retention
Shows retention metrics for a set of issue trackers over a given period of time
Response examples:
@@ -2527,14 +2527,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/issue/retention
@@ -2597,23 +2597,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/issue/top
Shows the top N issues by interactions
Response examples:
@@ -2634,14 +2634,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/issue/top
@@ -2704,23 +2704,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/issue/top-count
Shows top 25 issue trackers by issues
Response examples:
@@ -2745,14 +2745,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/issue/top-count
@@ -2819,23 +2819,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/issue/trends
Shows trend data for a set of issue trackers over a given period of time
Response examples:
@@ -2852,14 +2852,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/issue/trends
@@ -2918,23 +2918,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/mail/map
Shows a breakdown of email author reply mappings
Response examples:
@@ -2951,14 +2951,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/mail/map
@@ -3017,23 +3017,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/mail/pony-timeseries
Shows timeseries of Pony Factor over time
Response examples:
@@ -3058,14 +3058,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/mail/pony-timeseries
@@ -3132,23 +3132,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/mail/relationships
Shows a breakdown of contributor relationships between mailing lists
Response examples:
@@ -3165,14 +3165,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/mail/relationships
@@ -3231,23 +3231,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/mail/retention
Shows retention metrics for a set of mailing lists over a given period of time
Response examples:
@@ -3268,14 +3268,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/mail/retention
@@ -3338,23 +3338,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/mail/timeseries
Shows email sent over time
Response examples:
@@ -3379,14 +3379,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/mail/timeseries
@@ -3453,23 +3453,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/mail/timeseries-single
Shows email sent over time
Response examples:
@@ -3494,14 +3494,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/mail/timeseries-single
@@ -3568,23 +3568,23 @@ Response examples:
-
+
-
+
-
+
-
+
GET
-
+
/api/mail/top-topics
Shows the top N of email authors
Response examples:
@@ -3700,14 +3700,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/mail/top-topics
@@ -3766,23 +3766,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/mail/trends
Shows a quick email trend summary of the past 6 months for your org
Response examples:
@@ -3799,14 +3799,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/mail/trends
@@ -3865,23 +3865,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/org/list
Lists the organisations you belong to (or all, if admin)
Response examples:
@@ -3898,14 +3898,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/org/list
@@ -3972,14 +3972,14 @@ Response examples:
-
+
-
+
PUT
-
+
/api/org/list
@@ -4017,14 +4017,14 @@ Response examples:
-
+
-
+
DELETE
-
+
/api/org/members
@@ -4066,23 +4066,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/org/members
Lists the members of an organisation
Response examples:
@@ -4099,14 +4099,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/org/members
@@ -4167,14 +4167,14 @@ Response examples:
-
+
-
+
PUT
-
+
/api/org/members
@@ -4216,23 +4216,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/org/sourcetypes
Lists the available source types supported by Kibble
Response examples:
@@ -4249,14 +4249,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/org/sourcetypes
@@ -4315,23 +4315,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/org/trends
Shows a quick trend summary of the past 6 months for your org
Response examples:
@@ -4348,14 +4348,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/org/trends
@@ -4414,14 +4414,14 @@ Response examples:
-
+
-
+
DELETE
-
+
/api/session
@@ -4454,23 +4454,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/session
Display your login details
Response examples:
@@ -4496,14 +4496,14 @@ Response examples:
-
+
-
+
PUT
-
+
/api/session
@@ -4539,14 +4539,14 @@ Response examples:
-
+
-
+
DELETE
-
+
/api/sources
@@ -4567,23 +4567,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/sources
Fetches a list of all sources for this organisation
Response examples:
@@ -4604,14 +4604,14 @@ Response examples:
-
+
-
+
PATCH
-
+
/api/sources
@@ -4649,14 +4649,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/sources
@@ -4719,14 +4719,14 @@ Response examples:
-
+
-
+
PUT
-
+
/api/sources
@@ -4763,23 +4763,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/verify/{email}/{vcode}
Verify an account
Response examples:
@@ -4798,21 +4798,21 @@ Response examples:
-
+
-
+
DELETE
-
+
/api/views
Delete a new view
JSON parameters:
-
+
Input examples:
application/json:
{}
@@ -4835,23 +4835,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/views
Fetches a list of all views (filters) for this user
Response examples:
@@ -4883,21 +4883,21 @@ Response examples:
-
+
-
+
PATCH
-
+
/api/views
Edit an existing source
JSON parameters:
-
+
Input examples:
application/json:
{}
@@ -4920,14 +4920,14 @@ Response examples:
-
+
-
+
POST
-
+
/api/views
@@ -5001,21 +5001,21 @@ Response examples:
-
+
-
+
PUT
-
+
/api/views
Add a new view
JSON parameters:
-
+
Input examples:
application/json:
{}
@@ -5038,23 +5038,23 @@ Response examples:
-
+
-
+
GET
-
+
/api/widgets/{pageid}
Shows the widget layout for a specific page
Response examples:
@@ -5086,5 +5086,5 @@ Response examples:
-
+