mirror of
https://github.com/minetest/contentdb.git
synced 2025-01-08 22:17:34 +01:00
Add /api/dependencies/
This commit is contained in:
parent
3af5fccd61
commit
e0a92c6455
@ -491,3 +491,35 @@ def versions():
|
|||||||
|
|
||||||
return jsonify([rel.getAsDictionary() \
|
return jsonify([rel.getAsDictionary() \
|
||||||
for rel in MinetestRelease.query.all() if rel.getActual() is not None])
|
for rel in MinetestRelease.query.all() if rel.getActual() is not None])
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("/api/dependencies/")
|
||||||
|
@cors_allowed
|
||||||
|
def all_deps():
|
||||||
|
qb = QueryBuilder(request.args)
|
||||||
|
query = qb.buildPackageQuery()
|
||||||
|
|
||||||
|
def format_pkg(pkg: Package):
|
||||||
|
return {
|
||||||
|
"type": pkg.type.toName(),
|
||||||
|
"author": pkg.author.username,
|
||||||
|
"name": pkg.name,
|
||||||
|
"provides": [x.name for x in pkg.provides],
|
||||||
|
"depends": [str(x) for x in pkg.dependencies if not x.optional],
|
||||||
|
"optional_depends": [str(x) for x in pkg.dependencies if x.optional],
|
||||||
|
}
|
||||||
|
|
||||||
|
page = get_int_or_abort(request.args.get("page"), 1)
|
||||||
|
num = min(get_int_or_abort(request.args.get("n"), 100), 100)
|
||||||
|
pagination: flask_sqlalchemy.Pagination = query.paginate(page, num, True)
|
||||||
|
return jsonify({
|
||||||
|
"page": pagination.page,
|
||||||
|
"per_page": pagination.per_page,
|
||||||
|
"page_count": math.ceil(pagination.total / pagination.per_page),
|
||||||
|
"total": pagination.total,
|
||||||
|
"urls": {
|
||||||
|
"previous": abs_url(url_set_query(page=page - 1)) if pagination.has_prev else None,
|
||||||
|
"next": abs_url(url_set_query(page=page + 1)) if pagination.has_next else None,
|
||||||
|
},
|
||||||
|
"items": [format_pkg(pkg) for pkg in pagination.items],
|
||||||
|
})
|
||||||
|
@ -32,6 +32,23 @@ often other keys with information. For example:
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Paginated Results
|
||||||
|
|
||||||
|
Some API endpoints returns results in pages. The page number is specified using the `page` query argument, and
|
||||||
|
the number of items is specified using `num`
|
||||||
|
|
||||||
|
The response will be a dictionary with the following keys:
|
||||||
|
|
||||||
|
* `page`: page number, integer from 1 to max
|
||||||
|
* `per_page`: number of items per page, same as `n`
|
||||||
|
* `page_count`: number of pages
|
||||||
|
* `total`: total number of results
|
||||||
|
* `urls`: dictionary containing
|
||||||
|
* `next`: url to next page
|
||||||
|
* `previous`: url to previous page
|
||||||
|
* `items`: array of items
|
||||||
|
|
||||||
|
|
||||||
## Authentication
|
## Authentication
|
||||||
|
|
||||||
Not all endpoints require authentication, but it is done using Bearer tokens:
|
Not all endpoints require authentication, but it is done using Bearer tokens:
|
||||||
@ -73,7 +90,22 @@ Tokens can be attained by visiting [Settings > API Tokens](/user/tokens/).
|
|||||||
* `issue_tracker`: Issue tracker URL.
|
* `issue_tracker`: Issue tracker URL.
|
||||||
* `forums`: forum topic ID.
|
* `forums`: forum topic ID.
|
||||||
* GET `/api/packages/<username>/<name>/dependencies/`
|
* GET `/api/packages/<username>/<name>/dependencies/`
|
||||||
|
* Returns dependencies, with suggested candidates
|
||||||
* If query argument `only_hard` is present, only hard deps will be returned.
|
* If query argument `only_hard` is present, only hard deps will be returned.
|
||||||
|
* GET `/api/dependencies/`
|
||||||
|
* Returns `provides` and raw dependencies for all packages.
|
||||||
|
* Supports [Package Queries](#package-queries)
|
||||||
|
* [Paginated result](#paginated-results), max 100 results per page
|
||||||
|
* Each item in `items` will be a dictionary with the following keys:
|
||||||
|
* `type`: One of `GAME`, `MOD`, `TXP`.
|
||||||
|
* `author`: Username of the package author.
|
||||||
|
* `name`: Package name.
|
||||||
|
* `provides`: List of technical mod names inside the package.
|
||||||
|
* `depends`: List of hard dependencies.
|
||||||
|
* Each dep will either be a metapackage dependency (`name`), or a
|
||||||
|
package dependency (`author/name`).
|
||||||
|
* `optional_depends`: list of optional dependencies
|
||||||
|
* Same as above.
|
||||||
|
|
||||||
You can download a package by building one of the two URLs:
|
You can download a package by building one of the two URLs:
|
||||||
|
|
||||||
@ -240,13 +272,7 @@ curl -X POST https://content.minetest.net/api/packages/username/name/screenshots
|
|||||||
* `votes`: dictionary with `helpful` and `unhelpful`,
|
* `votes`: dictionary with `helpful` and `unhelpful`,
|
||||||
* GET `/api/reviews/` (List)
|
* GET `/api/reviews/` (List)
|
||||||
* Returns a paginated response. This is a dictionary with `page`, `url`, and `items`.
|
* Returns a paginated response. This is a dictionary with `page`, `url`, and `items`.
|
||||||
* `page`: page number, integer from 1 to max
|
* [Paginated result](#paginated-results)
|
||||||
* `per_page`: number of items per page, same as `n`
|
|
||||||
* `page_count`: number of pages
|
|
||||||
* `total`: total number of results
|
|
||||||
* `urls`: dictionary containing
|
|
||||||
* `next`: url to next page
|
|
||||||
* `previous`: url to previous page
|
|
||||||
* `items`: array of review dictionaries, like above
|
* `items`: array of review dictionaries, like above
|
||||||
* Each review also has a `package` dictionary with `type`, `author` and `name`
|
* Each review also has a `package` dictionary with `type`, `author` and `name`
|
||||||
* Query arguments:
|
* Query arguments:
|
||||||
|
Loading…
Reference in New Issue
Block a user