Exemple #1
0
    def resolve(self, pointer):
        try:
            dp = DocumentPointer(pointer)
            if dp.is_inner():
                logger.debug('resolve inner %s', pointer)
                return self.factory.local(self.registry.resolve(pointer),
                                          pointer, self.registry, self.spec)

            logger.debug('resolve outside %s', pointer)
            return self.factory(self.registry.resolve(pointer), pointer,
                                self.spec)
        except ExtractError as error:
            raise CompilationError({}, error)
Exemple #2
0
    def __call__(self, schema, pointer, spec=None):
        try:
            spec = schema.get('$schema', spec or self.spec)
            compiler = self.compilers[spec]
        except KeyError:
            raise CompilationError('{!r} not registered'.format(spec), schema)

        registry = LocalRegistry(schema, self.provider)
        local = DocumentPointer(pointer)

        if local.document:
            registry[local.document] = schema
        local.document = '<local>'
        context = Context(self, registry, spec, self.formats)
        return compiler(schema, pointer, context)
Exemple #3
0
    def __call__(self, schema, pointer, spec=None):
        try:
            spec = schema.get('$schema', spec or self.spec)
            compiler = self.compilers[spec]
        except KeyError:
            raise CompilationError('{!r} not registered'.format(spec), schema)

        registry = LocalRegistry(schema, self.provider)
        local = DocumentPointer(pointer)

        if local.document:
            registry[local.document] = schema
        local.document = '<local>'
        context = Context(self, registry, spec, self.formats)
        return compiler(schema, pointer, context)
Exemple #4
0
    def resolve(self, pointer):
        try:
            dp = DocumentPointer(pointer)
            if dp.is_inner():
                logger.debug('resolve inner %s', pointer)
                return self.factory.local(self.registry.resolve(pointer),
                                          pointer,
                                          self.registry,
                                          self.spec)

            logger.debug('resolve outside %s', pointer)
            return self.factory(self.registry.resolve(pointer),
                                pointer,
                                self.spec)
        except ExtractError as error:
            raise CompilationError({}, error)
Exemple #5
0
def resolve(obj, pointer, registry=None):
    """resolve a local object

    :param obj: the local object.
    :param pointer: the pointer
    :type pointer: DocumentPointer, str
    :param registry: the registry.
                    It mays be omited if inner json references
                    document don't refer to other documents.
    :type registry: Provider, dict

    .. warning::

        Once pointer is extracted, it won't follow sub mapping /element!
        For example, the value of::

            value = resolve({
                'foo': {'$ref': '#/bar'},
                'bar': [{'$ref': '#/baz'}],
                'baz': 'quux',
            }, '#/foo')

        is::

            assert value == [{'$ref': '#/baz'}]

        and not::

            assert value == ['quux']

    """

    registry = LocalRegistry(obj, registry or {})
    local = DocumentPointer(pointer)

    if local.document:
        registry[local.document] = obj
    local.document = '<local>'
    return registry.resolve(local)
Exemple #6
0
    def resolve(self, pointer):
        """Resolve from documents.

        :param pointer: foo
        :type pointer: DocumentPointer
        """

        dp = DocumentPointer(pointer)
        obj, fetcher = self.prototype(dp)

        for token in dp.pointer:
            obj = token.extract(obj, bypass_ref=True)
            reference = ref(obj)
            if reference:
                obj = fetcher.resolve(reference)
        return obj
Exemple #7
0
 def test_inner_document(self):
     dp = DocumentPointer('#/foo')
     assert dp.is_inner()
     assert dp.document == ''
     assert dp.pointer == '/foo'
Exemple #8
0
 def test_document(self):
     dp = DocumentPointer('example.com#/foo')
     assert not dp.is_inner()
     assert dp.document == 'example.com'
     assert dp.pointer == '/foo'
Exemple #9
0
 def __init__(self, pointer, context):
     super(ReferenceValidator, self).__init__()
     self.pointer = DocumentPointer(pointer)
     self.context = context
     self.uri = str(self.pointer)
Exemple #10
0
 def test_inner_document(self):
     dp = DocumentPointer('#/foo')
     assert dp.is_inner()
     assert dp.document == ''
     assert dp.pointer == '/foo'
Exemple #11
0
 def test_document(self):
     dp = DocumentPointer('example.com#/foo')
     assert not dp.is_inner()
     assert dp.document == 'example.com'
     assert dp.pointer == '/foo'