Changeset View
Changeset View
Standalone View
Standalone View
swh/web/api/views/origin.py
Show First 20 Lines • Show All 128 Lines • ▼ Show 20 Lines | if len(results) > origin_count: | ||||
query_params={'origin_from': origin_from, | query_params={'origin_from': origin_from, | ||||
'origin_count': origin_count}) | 'origin_count': origin_count}) | ||||
return response | return response | ||||
@api_route(r'/origin/(?P<origin_type>[a-z]+)/url/(?P<origin_url>.+)/', | @api_route(r'/origin/(?P<origin_type>[a-z]+)/url/(?P<origin_url>.+)/', | ||||
'api-1-origin') | 'api-1-origin') | ||||
@api_route(r'/origin/(?P<origin_url>.+)/get/', 'api-1-origin') | @api_route(r'/origin/(?P<origin_url>.+)/get/', 'api-1-origin') | ||||
@api_route(r'/origin/(?P<origin_id>[0-9]+)/', 'api-1-origin') | |||||
@api_doc('/origin/') | @api_doc('/origin/') | ||||
@format_docstring(return_origin=DOC_RETURN_ORIGIN) | @format_docstring(return_origin=DOC_RETURN_ORIGIN) | ||||
def api_origin(request, origin_id=None, origin_type=None, origin_url=None): | def api_origin(request, origin_url, origin_type=None): | ||||
""" | """ | ||||
.. http:get:: /api/1/origin/(origin_url)/get/ | .. http:get:: /api/1/origin/(origin_url)/get/ | ||||
Get information about a software origin. | Get information about a software origin. | ||||
:param string origin_url: the origin url | :param string origin_url: the origin url | ||||
{return_origin} | {return_origin} | ||||
{common_headers} | {common_headers} | ||||
**Allowed HTTP Methods:** :http:method:`get`, :http:method:`head`, | **Allowed HTTP Methods:** :http:method:`get`, :http:method:`head`, | ||||
:http:method:`options` | :http:method:`options` | ||||
:statuscode 200: no error | :statuscode 200: no error | ||||
:statuscode 404: requested origin can not be found in the archive | :statuscode 404: requested origin can not be found in the archive | ||||
**Example:** | **Example:** | ||||
.. parsed-literal:: | .. parsed-literal:: | ||||
:swh_web_api:`origin/git/url/https://github.com/python/cpython/` | :swh_web_api:`origin/git/url/https://github.com/python/cpython/` | ||||
.. http:get:: /api/1/origin/(origin_id)/ | |||||
Get information about a software origin. | |||||
.. warning:: | |||||
All endpoints using an ``origin_id`` or an ``origin_type`` are | |||||
deprecated and will be removed in the near future. Only those | |||||
using an ``origin_url`` will remain available. | |||||
You should use :http:get:`/api/1/origin/(origin_url)/get/` instead. | |||||
:param int origin_id: a software origin identifier | |||||
{return_origin} | |||||
{common_headers} | |||||
**Allowed HTTP Methods:** :http:method:`get`, :http:method:`head`, | |||||
:http:method:`options` | |||||
:statuscode 200: no error | |||||
:statuscode 404: requested origin can not be found in the archive | |||||
**Example:** | |||||
.. parsed-literal:: | |||||
:swh_web_api:`origin/1/` | |||||
.. http:get:: /api/1/origin/(origin_type)/url/(origin_url)/ | .. http:get:: /api/1/origin/(origin_type)/url/(origin_url)/ | ||||
Get information about a software origin. | Get information about a software origin. | ||||
.. warning:: | .. warning:: | ||||
All endpoints using an ``origin_id`` or an ``origin_type`` are | All endpoints using an ``origin_type`` are | ||||
deprecated and will be removed in the near future. Only those | deprecated and will be removed in the near future. Only those | ||||
using an ``origin_url`` will remain available. | using only an ``origin_url`` will remain available. | ||||
You should use :http:get:`/api/1/origin/(origin_url)/get/` instead. | You should use :http:get:`/api/1/origin/(origin_url)/get/` instead. | ||||
:param string origin_type: the origin type (possible values are | :param string origin_type: the origin type (possible values are | ||||
``git``, ``svn``, ``hg``, ``deb``, ``pypi``, ``npm``, ``ftp`` or | ``git``, ``svn``, ``hg``, ``deb``, ``pypi``, ``npm``, ``ftp`` or | ||||
``deposit``) | ``deposit``) | ||||
:param string origin_url: the origin url | :param string origin_url: the origin url | ||||
{return_origin} | {return_origin} | ||||
{common_headers} | {common_headers} | ||||
**Allowed HTTP Methods:** :http:method:`get`, :http:method:`head`, | **Allowed HTTP Methods:** :http:method:`get`, :http:method:`head`, | ||||
:http:method:`options` | :http:method:`options` | ||||
:statuscode 200: no error | :statuscode 200: no error | ||||
:statuscode 404: requested origin can not be found in the archive | :statuscode 404: requested origin can not be found in the archive | ||||
**Example:** | **Example:** | ||||
.. parsed-literal:: | .. parsed-literal:: | ||||
:swh_web_api:`origin/git/url/https://github.com/python/cpython/` | :swh_web_api:`origin/git/url/https://github.com/python/cpython/` | ||||
""" | """ | ||||
ori_dict = { | ori_dict = { | ||||
'id': int(origin_id) if origin_id else None, | |||||
'type': origin_type, | 'type': origin_type, | ||||
'url': origin_url | 'url': origin_url | ||||
} | } | ||||
ori_dict = {k: v for k, v in ori_dict.items() if ori_dict[k]} | ori_dict = {k: v for k, v in ori_dict.items() if ori_dict[k]} | ||||
error_msg = 'Origin %s not found.' % \ | error_msg = 'Origin %s not found.' % \ | ||||
(ori_dict.get('id') or ori_dict['url']) | (ori_dict.get('id') or ori_dict['url']) | ||||
return api_lookup( | return api_lookup( | ||||
▲ Show 20 Lines • Show All 111 Lines • ▼ Show 20 Lines | def api_origin_metadata_search(request): | ||||
results = api_lookup(service.search_origin_metadata, fulltext, limit) | results = api_lookup(service.search_origin_metadata, fulltext, limit) | ||||
return { | return { | ||||
'results': results, | 'results': results, | ||||
} | } | ||||
@api_route(r'/origin/(?P<origin_url>.*)/visits/', 'api-1-origin-visits') | @api_route(r'/origin/(?P<origin_url>.*)/visits/', 'api-1-origin-visits') | ||||
@api_route(r'/origin/(?P<origin_id>[0-9]+)/visits/', 'api-1-origin-visits') | |||||
@api_doc('/origin/visits/') | @api_doc('/origin/visits/') | ||||
@format_docstring( | @format_docstring( | ||||
return_origin_visit_array=DOC_RETURN_ORIGIN_VISIT_ARRAY) | return_origin_visit_array=DOC_RETURN_ORIGIN_VISIT_ARRAY) | ||||
def api_origin_visits(request, origin_id=None, origin_url=None): | def api_origin_visits(request, origin_url): | ||||
""" | """ | ||||
.. http:get:: /api/1/origin/(origin_url)/visits/ | .. http:get:: /api/1/origin/(origin_url)/visits/ | ||||
Get information about all visits of a software origin. | Get information about all visits of a software origin. | ||||
Visits are returned sorted in descending order according | Visits are returned sorted in descending order according | ||||
to their date. | to their date. | ||||
:param str origin_url: a software origin URL | :param str origin_url: a software origin URL | ||||
Show All 14 Lines | .. http:get:: /api/1/origin/(origin_url)/visits/ | ||||
:statuscode 404: requested origin can not be found in the archive | :statuscode 404: requested origin can not be found in the archive | ||||
**Example:** | **Example:** | ||||
.. parsed-literal:: | .. parsed-literal:: | ||||
:swh_web_api:`origin/https://github.com/hylang/hy/visits/` | :swh_web_api:`origin/https://github.com/hylang/hy/visits/` | ||||
.. http:get:: /api/1/origin/(origin_id)/visits/ | |||||
Get information about all visits of a software origin. | |||||
Visits are returned sorted in descending order according | |||||
to their date. | |||||
.. warning:: | |||||
All endpoints using an ``origin_id`` are deprecated and will be | |||||
removed in the near future. Only those using an ``origin_url`` | |||||
will remain available. | |||||
Use :http:get:`/api/1/origin/(origin_url)/visits/` instead. | |||||
:param int origin_id: a software origin identifier | |||||
:query int per_page: specify the number of visits to list, for | |||||
pagination purposes | |||||
:query int last_visit: visit to start listing from, for pagination | |||||
purposes | |||||
{common_headers} | |||||
{resheader_link} | |||||
{return_origin_visit_array} | |||||
**Allowed HTTP Methods:** :http:method:`get`, :http:method:`head`, | |||||
:http:method:`options` | |||||
:statuscode 200: no error | |||||
:statuscode 404: requested origin can not be found in the archive | |||||
**Example:** | |||||
.. parsed-literal:: | |||||
:swh_web_api:`origin/1/visits/` | |||||
""" | """ | ||||
result = {} | result = {} | ||||
if origin_url: | |||||
origin_query = {'url': origin_url} | origin_query = {'url': origin_url} | ||||
notfound_msg = 'No origin {} found'.format(origin_url) | notfound_msg = 'No origin {} found'.format(origin_url) | ||||
url_args_next = {'origin_url': origin_url} | url_args_next = {'origin_url': origin_url} | ||||
else: | |||||
origin_query = {'id': int(origin_id)} | |||||
notfound_msg = 'No origin {} found'.format(origin_id) | |||||
url_args_next = {'origin_id': origin_id} | |||||
per_page = int(request.query_params.get('per_page', '10')) | per_page = int(request.query_params.get('per_page', '10')) | ||||
last_visit = request.query_params.get('last_visit') | last_visit = request.query_params.get('last_visit') | ||||
if last_visit: | if last_visit: | ||||
last_visit = int(last_visit) | last_visit = int(last_visit) | ||||
def _lookup_origin_visits( | def _lookup_origin_visits( | ||||
origin_query, last_visit=last_visit, per_page=per_page): | origin_query, last_visit=last_visit, per_page=per_page): | ||||
all_visits = get_origin_visits(origin_query) | all_visits = get_origin_visits(origin_query) | ||||
▲ Show 20 Lines • Show All 78 Lines • ▼ Show 20 Lines | return api_lookup( | ||||
.format(origin_url)), | .format(origin_url)), | ||||
enrich_fn=partial(_enrich_origin_visit, | enrich_fn=partial(_enrich_origin_visit, | ||||
with_origin_link=True, | with_origin_link=True, | ||||
with_origin_visit_link=False)) | with_origin_visit_link=False)) | ||||
@api_route(r'/origin/(?P<origin_url>.*)/visit/(?P<visit_id>[0-9]+)/', | @api_route(r'/origin/(?P<origin_url>.*)/visit/(?P<visit_id>[0-9]+)/', | ||||
'api-1-origin-visit') | 'api-1-origin-visit') | ||||
@api_route(r'/origin/(?P<origin_id>[0-9]+)/visit/(?P<visit_id>[0-9]+)/', | |||||
'api-1-origin-visit') | |||||
@api_doc('/origin/visit/') | @api_doc('/origin/visit/') | ||||
@format_docstring(return_origin_visit=DOC_RETURN_ORIGIN_VISIT) | @format_docstring(return_origin_visit=DOC_RETURN_ORIGIN_VISIT) | ||||
def api_origin_visit(request, visit_id, origin_url=None, origin_id=None): | def api_origin_visit(request, visit_id, origin_url): | ||||
""" | """ | ||||
.. http:get:: /api/1/origin/(origin_url)/visit/(visit_id)/ | .. http:get:: /api/1/origin/(origin_url)/visit/(visit_id)/ | ||||
Get information about a specific visit of a software origin. | Get information about a specific visit of a software origin. | ||||
:param str origin_url: a software origin URL | :param str origin_url: a software origin URL | ||||
:param int visit_id: a visit identifier | :param int visit_id: a visit identifier | ||||
{common_headers} | {common_headers} | ||||
{return_origin_visit} | {return_origin_visit} | ||||
**Allowed HTTP Methods:** :http:method:`get`, :http:method:`head`, | **Allowed HTTP Methods:** :http:method:`get`, :http:method:`head`, | ||||
:http:method:`options` | :http:method:`options` | ||||
:statuscode 200: no error | :statuscode 200: no error | ||||
:statuscode 404: requested origin or visit can not be found in the | :statuscode 404: requested origin or visit can not be found in the | ||||
archive | archive | ||||
**Example:** | **Example:** | ||||
.. parsed-literal:: | .. parsed-literal:: | ||||
:swh_web_api:`origin/https://github.com/hylang/hy/visit/1/` | :swh_web_api:`origin/https://github.com/hylang/hy/visit/1/` | ||||
.. http:get:: /api/1/origin/(origin_id)/visit/(visit_id)/ | |||||
Get information about a specific visit of a software origin. | |||||
.. warning:: | |||||
All endpoints using an ``origin_id`` are deprecated and will be | |||||
removed in the near future. Only those using an ``origin_url`` | |||||
will remain available. | |||||
Use :http:get:`/api/1/origin/(origin_url)/visit/(visit_id)` | |||||
instead. | |||||
:param int origin_id: a software origin identifier | |||||
:param int visit_id: a visit identifier | |||||
{common_headers} | |||||
{return_origin_visit} | |||||
**Allowed HTTP Methods:** :http:method:`get`, :http:method:`head`, | |||||
:http:method:`options` | |||||
:statuscode 200: no error | |||||
:statuscode 404: requested origin or visit can not be found in the | |||||
archive | |||||
**Example:** | |||||
.. parsed-literal:: | |||||
:swh_web_api:`origin/1500/visit/1/` | |||||
""" | """ | ||||
if not origin_url: | |||||
origin_url = service.lookup_origin({'id': int(origin_id)})['url'] | |||||
return api_lookup( | return api_lookup( | ||||
service.lookup_origin_visit, origin_url, int(visit_id), | service.lookup_origin_visit, origin_url, int(visit_id), | ||||
notfound_msg=('No visit {} for origin {} found' | notfound_msg=('No visit {} for origin {} found' | ||||
.format(visit_id, origin_url)), | .format(visit_id, origin_url)), | ||||
enrich_fn=partial(_enrich_origin_visit, | enrich_fn=partial(_enrich_origin_visit, | ||||
with_origin_link=True, | with_origin_link=True, | ||||
with_origin_visit_link=False)) | with_origin_visit_link=False)) | ||||
▲ Show 20 Lines • Show All 42 Lines • Show Last 20 Lines |