swh.web.api.apiurls module#

class swh.web.api.apiurls.APIUrls[source]#

Bases: UrlsIndex

Class to manage API URLs and endpoint documentation URLs.

apidoc_routes: Dict[str, Dict[str, str]] = {'/add-forge/request/create': {'category': 'Request archival', 'docstring': '', 'route': '/api/1/add-forge/request/create', 'route_view_name': 'api-1-add-forge-request-creat-doc', 'tags': {}}, '/add-forge/request/get': {'category': 'Request archival', 'docstring': '', 'route': '/api/1/add-forge/request/get', 'route_view_name': 'api-1-add-forge-request-ge-doc', 'tags': {}}, '/add-forge/request/list': {'category': 'Request archival', 'docstring': '', 'route': '/api/1/add-forge/request/list', 'route_view_name': 'api-1-add-forge-request-lis-doc', 'tags': {}}, '/content/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/content/', 'route_view_name': 'api-1-content-doc', 'tags': {}}, '/content/filetype/': {'category': 'Metadata', 'docstring': '', 'route': '/api/1/content/filetype/', 'route_view_name': 'api-1-content-filetype-doc', 'tags': {}}, '/content/language/': {'category': 'Metadata', 'docstring': '', 'route': '/api/1/content/language/', 'route_view_name': 'api-1-content-language-doc', 'tags': {}}, '/content/license/': {'category': 'Metadata', 'docstring': '', 'route': '/api/1/content/license/', 'route_view_name': 'api-1-content-license-doc', 'tags': {}}, '/content/raw/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/content/raw/', 'route_view_name': 'api-1-content-raw-doc', 'tags': {}}, '/directory/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/directory/', 'route_view_name': 'api-1-directory-doc', 'tags': {}}, '/extid/': {'category': 'External IDentifiers', 'docstring': '', 'route': '/api/1/extid/', 'route_view_name': 'api-1-extid-doc', 'tags': {}}, '/extid/target/': {'category': 'External IDentifiers', 'docstring': '', 'route': '/api/1/extid/target/', 'route_view_name': 'api-1-extid-target-doc', 'tags': {}}, '/extrinsic-metadata/origin/': {'category': 'Metadata', 'docstring': '', 'route': '/api/1/extrinsic-metadata/origin/', 'route_view_name': 'api-1-extrinsic-metadata-origin-doc', 'tags': {}}, '/graph/': {'category': 'Miscellaneous', 'docstring': '', 'route': '/api/1/graph/', 'route_view_name': 'api-1-graph-doc', 'tags': {}}, '/intrinsic-metadata/origin/': {'category': 'Metadata', 'docstring': '', 'route': '/api/1/intrinsic-metadata/origin/', 'route_view_name': 'api-1-intrinsic-metadata-origin-doc', 'tags': {}}, '/known/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/known/', 'route_view_name': 'api-1-known-doc', 'tags': {}}, '/origin/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/origin/', 'route_view_name': 'api-1-origin-doc', 'tags': {}}, '/origin/intrinsic-metadata/': {'category': 'Metadata', 'docstring': '', 'route': '/api/1/origin/intrinsic-metadata/', 'route_view_name': 'api-1-origin-intrinsic-metadata-doc', 'tags': {'deprecated'}}, '/origin/metadata-search/': {'category': 'Metadata', 'docstring': '', 'route': '/api/1/origin/metadata-search/', 'route_view_name': 'api-1-origin-metadata-search', 'tags': {}}, '/origin/save/': {'category': 'Request archival', 'docstring': '', 'route': '/api/1/origin/save/', 'route_view_name': 'api-1-origin-save-doc', 'tags': {}}, '/origin/save/bulk/': {'category': 'Request archival', 'docstring': '', 'route': '/api/1/origin/save/bulk/', 'route_view_name': 'api-1-origin-save-bulk-doc', 'tags': {}}, '/origin/save/bulk/request/': {'category': 'Request archival', 'docstring': '', 'route': '/api/1/origin/save/bulk/request/', 'route_view_name': 'api-1-origin-save-bulk-request-doc', 'tags': {}}, '/origin/save/bulk/requests/': {'category': 'Request archival', 'docstring': '', 'route': '/api/1/origin/save/bulk/requests/', 'route_view_name': 'api-1-origin-save-bulk-requests-doc', 'tags': {}}, '/origin/save/webhook/bitbucket/': {'category': 'Request archival', 'docstring': '', 'route': '/api/1/origin/save/webhook/bitbucket/', 'route_view_name': 'api-1-origin-save-webhook-bitbucket-doc', 'tags': {}}, '/origin/save/webhook/gitea/': {'category': 'Request archival', 'docstring': '', 'route': '/api/1/origin/save/webhook/gitea/', 'route_view_name': 'api-1-origin-save-webhook-gitea-doc', 'tags': {}}, '/origin/save/webhook/github/': {'category': 'Request archival', 'docstring': '', 'route': '/api/1/origin/save/webhook/github/', 'route_view_name': 'api-1-origin-save-webhook-github-doc', 'tags': {}}, '/origin/save/webhook/gitlab/': {'category': 'Request archival', 'docstring': '', 'route': '/api/1/origin/save/webhook/gitlab/', 'route_view_name': 'api-1-origin-save-webhook-gitlab-doc', 'tags': {}}, '/origin/save/webhook/sourceforge/': {'category': 'Request archival', 'docstring': '', 'route': '/api/1/origin/save/webhook/sourceforge/', 'route_view_name': 'api-1-origin-save-webhook-sourceforge-doc', 'tags': {}}, '/origin/search/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/origin/search/', 'route_view_name': 'api-1-origin-search-doc', 'tags': {}}, '/origin/visit/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/origin/visit/', 'route_view_name': 'api-1-origin-visit-doc', 'tags': {}}, '/origin/visit/latest/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/origin/visit/latest/', 'route_view_name': 'api-1-origin-visit-latest-doc', 'tags': {}}, '/origin/visits/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/origin/visits/', 'route_view_name': 'api-1-origin-visits-doc', 'tags': {}}, '/origins/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/origins/', 'route_view_name': 'api-1-origins', 'tags': {}}, '/ping/': {'category': 'Miscellaneous', 'docstring': '', 'route': '/api/1/ping/', 'route_view_name': 'api-1-ping', 'tags': {}}, '/provenance/whereare/': {'category': 'Provenance', 'docstring': '', 'route': '/api/1/provenance/whereare/', 'route_view_name': 'api-1-provenance-whereare-doc', 'tags': {}}, '/provenance/whereis/': {'category': 'Provenance', 'docstring': '', 'route': '/api/1/provenance/whereis/', 'route_view_name': 'api-1-provenance-whereis-doc', 'tags': {}}, '/raw-extrinsic-metadata/origin/authorities/': {'category': 'Metadata', 'docstring': '', 'route': '/api/1/raw-extrinsic-metadata/origin/authorities/', 'route_view_name': 'api-1-raw-extrinsic-metadata-origin-authorities-doc', 'tags': {}}, '/raw-extrinsic-metadata/swhid/': {'category': 'Metadata', 'docstring': '', 'route': '/api/1/raw-extrinsic-metadata/swhid/', 'route_view_name': 'api-1-raw-extrinsic-metadata-swhid-doc', 'tags': {}}, '/raw-extrinsic-metadata/swhid/authorities/': {'category': 'Metadata', 'docstring': '', 'route': '/api/1/raw-extrinsic-metadata/swhid/authorities/', 'route_view_name': 'api-1-raw-extrinsic-metadata-swhid-authorities-doc', 'tags': {}}, '/raw-intrinsic-metadata/citation/origin/': {'category': 'Metadata', 'docstring': '', 'route': '/api/1/raw-intrinsic-metadata/citation/origin/', 'route_view_name': 'api-1-raw-intrinsic-metadata-citation-origin-doc', 'tags': {}}, '/raw-intrinsic-metadata/citation/swhid/': {'category': 'Metadata', 'docstring': '', 'route': '/api/1/raw-intrinsic-metadata/citation/swhid/', 'route_view_name': 'api-1-raw-intrinsic-metadata-citation-swhid-doc', 'tags': {}}, '/raw/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/raw/', 'route_view_name': 'api-1-raw-doc', 'tags': {}}, '/release/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/release/', 'route_view_name': 'api-1-release-doc', 'tags': {}}, '/resolve/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/resolve/', 'route_view_name': 'api-1-resolve-doc', 'tags': {}}, '/revision/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/revision/', 'route_view_name': 'api-1-revision-doc', 'tags': {}}, '/revision/directory/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/revision/directory/', 'route_view_name': 'api-1-revision-directory-doc', 'tags': {}}, '/revision/log/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/revision/log/', 'route_view_name': 'api-1-revision-log-doc', 'tags': {}}, '/snapshot/': {'category': 'Archive', 'docstring': '', 'route': '/api/1/snapshot/', 'route_view_name': 'api-1-snapshot-doc', 'tags': {}}, '/stat/counters/': {'category': 'Miscellaneous', 'docstring': '', 'route': '/api/1/stat/counters/', 'route_view_name': 'api-1-stat-counters', 'tags': {}}}#
get_app_endpoints() Dict[str, Dict[str, str]][source]#
add_doc_route(route: str, category: Literal['Archive', 'Batch download', 'Metadata', 'Request archival', 'Miscellaneous', 'test', 'External IDentifiers', 'Provenance'], docstring: str, noargs: bool = False, api_version: str = '1', **kwargs) None[source]#

Add a route to the self-documenting API reference

urlpatterns: List[URLPattern]#
swh.web.api.apiurls.api_route(url_pattern: str, view_name: str, methods: ~typing.List[str] = ['GET', 'HEAD', 'OPTIONS'], throttle_scope: str = 'swh_api', api_version: str = '1', checksum_args: ~typing.List[str] | None = None, never_cache: bool = False, api_urls: ~swh.web.api.apiurls.APIUrls = <swh.web.api.apiurls.APIUrls object>, query_params_serializer: type[~rest_framework.serializers.Serializer] | None = None)[source]#

Decorator to ease the registration of an API endpoint using the Django REST Framework.

Parameters:
  • url_pattern – the url pattern used by DRF to identify the API route

  • view_name – the name of the API view associated to the route used to reverse the url

  • methods – array of HTTP methods supported by the API route

  • throttle_scope – Named scope for rate limiting

  • api_version – web API version

  • checksum_args – list of view argument names holding checksum values

  • never_cache – define if api response must be cached

  • query_params_serializer – an optional DRF serializer to validate the API call query parameters