cubicweb-jsonschema #17115851 Set/Validate value for default/required values [validation pending]

Ticket pour mémoire et début de discussion…

J'ai dans mon schema.py :

class _OptimizationEntityType(_BaseOptimizationEntityType):
    […] required=True, default='hourly', […]

Je m'attendais à ce que, si la valeur n'est pas fournie, elle soit définie à 'hourly', mais ce n'est pas le cas. J'ai eu une discussion avec Jérôme, et les choses ne sont pas très claires. Visiblement, il y a plusieures écoles et la décision est un peu arbitraire.

jroy: ça a l'air de planter dans la validation json du cube jsonschema :
jroy: test/test_optim_jsonschema.py:225: in create_optimisation_for_network
    adapter.create_entity(data, self.network_eid)
/home/jroy/.virtualenvs/nemo/local/lib/python2.7/site-packages/cubicweb_jsonschema/entities/ijsonschema.py:130: in     
create_entity
self).create_entity(instance)
/home/jroy/.virtualenvs/nemo/local/lib/python2.7/site-packages/cubicweb_jsonschema/entities/ijsonschema.py:89: in     
create_entity
jsonschema_validate(self.creation_schema(), instance)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

schema = {'$schema': 'http://json-schema.org/draft-06/schema#', 'additionalProperties': False, 'definitions':     
{'Calendar': {'ad...ion'}, 'constraints': {'$ref': '#/definitions/Constraints'}, 'forecast': {'$ref': '#/definitions/Forecast'}, 
...}, ...}
instance = {'calendar': {'nb_steps': 4, 'start_time': '2007-01-25T12:00:00Z'}, 'constraints': {'use_base_planning': 
'5351'}, 'for...910,1,1,10'}, 'general': {'description': 'from JSON Schema', 'horizon': 'short-term', 'label': 'my 
optimisation'}, ...}
_entity = None

def jsonschema_validate(schema, instance, _entity=None):
    """Validate an instance under the JSON schema."""
    try:
        jsonschema.validate(instance, schema)
    except jsonschema.ValidationError as exc:
>           raise ValidationError(_entity, {None: exc.message})
E           ValidationError: None (None): 'granularity' is a required property

tlecarrour: c'est ça, c'est LE message !
jroy: j'ai enlevé le try:except: dans le test pour voir le vrai plantage
jroy: et en effet le jsonschema ne propose pas un valeur nulle pour granularity
jroy: puisque c'est un enum
tlecarrour: et pas de valeur par défaut non plus ! :-(
jroy: si ?
  168         "granularity": {
  169           "default": "hourly",
  170           "oneOf": [
  171             {
  172               "enum": [
  173                 "daily"
  174               ],                                                                                    
  175               "type": "string",
  176               "title": "daily"
  177             },
  178             {
  179               "enum": [
  180                 "hourly"
  181               ],
  182               "type": "string",
  183               "title": "hourly"
  184             }
jroy: pour cool water schema dans le test
tlecarrour: mmm… ok, je vois d'où vient le problème, mais je ne suis pas sûr de savoir où le fixer / qui a tort .
jroy: https://github.com/json-schema/json-schema/issues/5
jroy: pas sûr que ce soit le parser qu'on utilise, mais ils ont clairement choisi "default n'est pas utilisé à la validation"
tlecarrour: à chaque fois je me dis la même chose : "pourquoi je ne commence pas par lire la spec ?" ! ;-)
tlecarrour: défaut pas pour valider, ça me parait logique, non ?!
jroy: oui
jroy: pour la vraie lib python qu'on utilise : https://github.com/Julian/jsonschema/issues/250
jroy: ils disent "n'utilise pas required si tu as un default"
jroy: on a peut-être moyen de faire ça
jroy: le jsonschema est généré par nemo à partir du schéma CW j'imagine ?
jroy: yams2jsl ?
tlecarrour: ça me parle, oui !
tlecarrour: "n'utilise pas required si tu as un default" +1
[…]
jroy: https://github.com/Julian/jsonschema/issues/4 pour une proposition de monkeypatch sur la class Validator
jroy: qu'on pourrait vouloir mettre sur cubicweb-jsonschema
[…]
jroy: histoire que denis soit au courant
jroy: voir si la question se pose sur d'autres projets
priorityminor
typebug
done in0.2.2
load left0.000
closed by#0db4b1e79fea Drop JSON Schema validation upon entity creation and update