Source code for pyramid_skosprovider.utils

# -*- coding: utf8 -*-

import re

from pyramid.renderers import JSON

from skosprovider.skos import (
    Concept,
    Collection,
    Label,
    Note
)


[docs]def parse_range_header(range): ''' Parse a range header as used by the dojo Json Rest store. :param str range: The content of the range header to be parsed. eg. `items=0-9` :returns: A dict with keys start, finish and number or `False` if the range is invalid. ''' match = re.match('^items=([0-9]+)-([0-9]+)$', range) if match: start = int(match.group(1)) finish = int(match.group(2)) if finish < start: finish = start return { 'start': start, 'finish': finish, 'number': finish - start + 1 } else: return False
json_renderer = JSON()
[docs]def concept_adapter(obj, request): ''' Adapter for rendering a :class:`skosprovider.skos.Concept` to json. :param skosprovider.skos.Concept obj: The concept to be rendered. :rtype: :class:`dict` ''' return { 'id': obj.id, 'type': 'concept', 'uri': obj.uri, 'label': obj.label().label, 'concept_scheme': { 'uri': obj.concept_scheme.uri, 'labels': obj.concept_scheme.labels }, 'labels': obj.labels, 'notes': obj.notes, 'narrower': obj.narrower, 'broader': obj.broader, 'related': obj.related, 'member_of': obj.member_of, 'subordinate_arrays': obj.subordinate_arrays, 'matches': obj.matches }
[docs]def collection_adapter(obj, request): ''' Adapter for rendering a :class:`skosprovider.skos.Collection` to json. :param skosprovider.skos.Collection obj: The collection to be rendered. :rtype: :class:`dict` ''' return { 'id': obj.id, 'type': 'collection', 'uri': obj.uri, 'label': obj.label().label, 'concept_scheme': { 'uri': obj.concept_scheme.uri, 'labels': obj.concept_scheme.labels }, 'labels': obj.labels, 'notes': obj.notes, 'members': obj.members, 'member_of': obj.member_of, 'superordinates': obj.superordinates, }
[docs]def label_adapter(obj, request): ''' Adapter for rendering a :class:`skosprovider.skos.Label` to json. :param skosprovider.skos.Label obj: The label to be rendered. :rtype: :class:`dict` ''' return { 'label': obj.label, 'type': obj.type, 'language': obj.language }
[docs]def note_adapter(obj, request): ''' Adapter for rendering a :class:`skosprovider.skos.Note` to json. :param skosprovider.skos.Note obj: The note to be rendered. :rtype: :class:`dict` ''' return { 'note': obj.note, 'type': obj.type, 'language': obj.language }
json_renderer.add_adapter(Concept, concept_adapter) json_renderer.add_adapter(Collection, collection_adapter) json_renderer.add_adapter(Label, label_adapter) json_renderer.add_adapter(Note, note_adapter)