Skip to content

Commit ffbbe64

Browse files
committed
add first and last link relations
1 parent 03b9952 commit ffbbe64

2 files changed

Lines changed: 42 additions & 12 deletions

File tree

‎pycsw/ogc/api/records.py‎

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,21 @@ def items(self, headers_, json_post_data, args, collection='metadata:main'):
840840
'type': 'application/geo+json',
841841
'rel': 'prev',
842842
'title': 'items (prev)',
843-
'href': f"{bind_url(url_)}offset={prev}",
843+
'href': f'{bind_url(url_)}offset={prev}',
844+
'hreflang': self.config['server']['language']
845+
})
846+
else:
847+
link_args.pop('offset', None)
848+
849+
url_ = f"{self.config['server']['url']}/{fragment}?{urlencode(link_args)}"
850+
851+
response['links'].append(
852+
{
853+
'type': 'application/geo+json',
854+
'rel': 'first',
855+
'title': 'items (first)',
856+
'href': f'{bind_url(url_)}',
857+
'href': url_,
844858
'hreflang': self.config['server']['language']
845859
})
846860

@@ -858,6 +872,21 @@ def items(self, headers_, json_post_data, args, collection='metadata:main'):
858872
'href': f"{bind_url(url_)}offset={next_}",
859873
'hreflang': self.config['server']['language']
860874
})
875+
elif (offset + returned) >= count:
876+
link_args.pop('offset', None)
877+
878+
last = offset + returned
879+
880+
url_ = f"{self.config['server']['url']}/{fragment}?{urlencode(link_args)}"
881+
882+
response['links'].append({
883+
'rel': 'last',
884+
'type': 'application/geo+json',
885+
'title': 'items (last)',
886+
'href': f"{bind_url(url_)}offset={last}",
887+
'hreflang': self.config['server']['language']
888+
})
889+
861890

862891
if headers_['Content-Type'] == 'text/html':
863892
response['title'] = self.config['metadata']['identification']['title']

‎pycsw/stac/api.py‎

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -376,18 +376,19 @@ def queryables(self, headers_, args, collection='metadata:main'):
376376
headers, status, response = super().queryables(headers_, args, collection)
377377
response = json.loads(response)
378378

379-
eo_schema = 'https://raw.githubusercontent.com/ceos-org/stac-collection-and-granule-discovery-best-practices/refs/heads/main/schemas/opensearch-eo.json'
380-
eo_props = {
381-
'platform': 'platform',
382-
'instrument': 'instrument',
383-
'sensortype': 'sensorType',
384-
'cloudcover': 'cloudCover',
385-
'illuminationelevationangle': 'illuminationElevationAngle'
386-
}
379+
if 'properties' in response:
380+
eo_schema = 'https://raw.githubusercontent.com/ceos-org/stac-collection-and-granule-discovery-best-practices/refs/heads/main/schemas/opensearch-eo.json'
381+
eo_props = {
382+
'platform': 'platform',
383+
'instrument': 'instrument',
384+
'sensortype': 'sensorType',
385+
'cloudcover': 'cloudCover',
386+
'illuminationelevationangle': 'illuminationElevationAngle'
387+
}
387388

388-
for key, value in eo_props.items():
389-
if key in response['properties']:
390-
response['properties'][key]['$id'] = f'{eo_schema}#/properties/{eo_props[key]}'
389+
for key, value in eo_props.items():
390+
if key in response['properties']:
391+
response['properties'][key]['$id'] = f'{eo_schema}#/properties/{eo_props[key]}'
391392

392393
return self.get_response(status, headers, response)
393394

0 commit comments

Comments
 (0)