Giter Site home page Giter Site logo

ref-resolver's Introduction

ref-resolver

PyPI version Gitter chat

A python API to resolve $ref pointers in json-schemas and inline them. Supports relative file paths in $ref.

Example code invocation

import json
from ref_resolver import RefResolver
# grab python dict from json schema files
json_obj = json.load(open('/path/to/your/example-schema.json'))
# call to API resolve method
RefResolver(json_obj['id']).resolve(json_obj)
# dict is now inlined with all $ref removed

Example inlining

Example from the hubble telescope tutorial - https://spacetelescope.github.io/understanding-json-schema/structuring.html#structuring

test_schema.json

{
      "required": [
        "shipping_address"
      ],
      "properties": {
        "shipping_address": {
          "$ref": "ref_schema.json#/definitions/address"
        },
        "billing_address": {
          "$ref": "ref_schema.json#/definitions/address"
        }
      },
      "type": "object",
      "$schema": "http://json-schema.org/draft-04/schema#",
      "id": "test_schema.json"
 }

ref_schema.json

{
  "id" : "ref_schema.json",
  "$schema": "http://json-schema.org/draft-04/schema#",

  "definitions": {
    "address": {
      "type": "object",
      "properties": {
        "street_address": { "type": "string" },
        "city":           { "type": "string" },
        "state":          { "type": "string" },
		"code" : {"$ref": "#/definitions/code"}
      },
      "required": ["street_address", "city", "state"]
    },
      "code" : {
	  "type" : "string"
      }
  },

  "type": "object",
  "properties" : {}

}

Post-inlining:

test_schema.json

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "required": [
        "shipping_address"
    ],
    "type": "object",
    "properties": {
        "billing_address": {
            "required": [
                "street_address",
                "city",
                "state"
            ],
            "type": "object",
            "properties": {
                "city": {
                    "type": "string"
                },
                "state": {
                    "type": "string"
                },
                "code": {
                    "type": "string"
                },
                "street_address": {
                    "type": "string"
                }
            }
        },
        "shipping_address": {
            "required": [
                "street_address",
                "city",
                "state"
            ],
            "type": "object",
            "properties": {
                "city": {
                    "type": "string"
                },
                "state": {
                    "type": "string"
                },
                "code": {
                    "type": "string"
                },
                "street_address": {
                    "type": "string"
                }
            }
        }
    },
    "id": "test_schema.json"
}

ref-resolver's People

Contributors

purukaushik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

ref-resolver's Issues

Memory Leak in Resolver::GetRemoteDocument

There is a memory Leak in Resolver::GetRemoteDocument

const SchemaDocument* schemaDocument;
schemaDocument = new SchemaDocument(d, &resolver); //This never gets deleted ?
return schemaDocument;

How do you delete the allocated memory?

Example not working

I don't understand your example , it do not create the full file describe in readme.me

.
├── pythonFile.py
├── ref_schema.json
└── test_schema.json

import json
from ref_resolver import RefResolver
json_obj = json.load(open('test_schema.json'))
RefResolver(json_obj['id']).resolve(json_obj)

how do you produce the final file , thank you

Total Revamp Needed : Nothing works, needs tests

FIXMEs:

  • Basic resolution of $refs for http/https schemes
  • Support file:// resolutions
  • Recursive $refs within same schema
  • Recursive $refs across multiple schemas file
  • Recursive $refs across multiple schemas http
  • add tests
  • Support relative paths in $refs
  • Supporting other schemes - ftp, git

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.