Giter Club home page Giter Club logo

Comments (6)

alturkovic avatar alturkovic commented on May 29, 2024

For an example, generate an odd number between 10-20:

{
  "type": "integer",
  "minimum": 10,
  "allOf": [
    {
      "maximum": 20
    }
  ],
  "not": {
    "allOf": [
      {
        "multipleOf": 2
      }
    ]
  }
}

The example provided is deliberately more complex than it needs to be to show the composing nature of the problem.

from jsf.

ghandic avatar ghandic commented on May 29, 2024

Do you have a proposed solution for this?

from jsf.

alturkovic avatar alturkovic commented on May 29, 2024

https://github.com/json-schema-faker/json-schema-faker/blob/d4403ae6cdba2206fe86399900c4095de8db7d2a/src/lib/core/utils.mjs#L350
https://github.com/json-schema-faker/json-schema-faker/blob/d4403ae6cdba2206fe86399900c4095de8db7d2a/src/lib/core/traverse.mjs#L64

It seems like the original author built a new schema and "manually" inversed some of the properties and then replaced the original schema...
For an example, it does not handle multipleOf that I mentioned originally.
I suppose that was meant to be handled in the TODO section lower in the linked method, but I do not think that it is possible for multipleOf since that should be evaluated in the value generator itself since there is no way to "inverse" it (if I am not mistaken?).

Another approach might be to collect all the constraints imposed on a certain value and then generate a value matching all those constraints?
For an example:

  • type must be integer
  • value must be in range 10 .. 20
  • must not be divisible by 2

But I assume that could get very complicated very fast with lots of constraints...

from jsf.

alturkovic avatar alturkovic commented on May 29, 2024

I think that the problem is much bigger than I initially assumed:

def __parse_definition(

The current implementation will only take type into consideration if it encounters that keyword, so valid definitions such as the one below will not work:

{
  "type": "integer",
  "allOf": [
    {
      "minimum": 10
    },
    {
      "maximum": 20
    }
  ]
}

The above should be equivalent to:

{
  "type": "integer",
  "minimum": 10,
  "maximum": 20
}

I think the __parse_definition needs to do some more sofisticated "merging" than it currently does. Unfortunately, I do not know Python to jump in with any PRs...

from jsf.

ghandic avatar ghandic commented on May 29, 2024

I would have thought the above wouldn't be valid without a type in the all of objects.

from jsf.

alturkovic avatar alturkovic commented on May 29, 2024

Yup, that was my assumption also at first, but things are a bit more complicated...
I have tested the schema above with the original JSF and here. Seems to be valid.

from jsf.

Related Issues (20)

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.