2017-07-18 12 views
0

私は以下のJSONスキーマを検証し、Python unittestを持っています。JSON整数属性を参照できますか?

{ 
    "properties": { 

     "traffic_parameters" { 

      "capacity": { 

       "oneOf": [ 
        { 
         "max_percentage": { 

          "type": "integer", 
          "minimum" : 1, 
          "maximum" : 150 
         }, 

         "min_percentage": { 

          "type": "integer", 
          "minimum" : 1, 
          "maximum" : { 

           "$ref": "#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum" 
          } 
         } 
        }, 

        { 
         "percentage_range": { 

          "type": "array", 
          "minItems": 1, 
          "maxItems": 10, 
          "items": { 

           "type": "integer" 
          } 
         } 
        } 
       ] 
      } 
     } 
    } 
} 

jsonschemaを使用して、スキーマファイル全体を検証するOK。 しかし、unittestを書くと次のエラーが出ます。

capacity = {'oneOf': [{'max_percentage': {'type': 'integer', 'minimum': 1, 'maximum': 150}, 'min_percentage': {'type': 'integer', 'minimum': 1, 'maximum': {'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'}}}, {'percentage_range': {'type': 'array', 'minItems': 1, 'maxItems': 10, 'items': {'type': 'integer'}}}]} 
----------------------------------------- 
index0 = {'max_percentage': {'type': 'integer', 'minimum': 1, 'maximum': 150}, 'min_percentage': {'type': 'integer', 'minimum': 1, 'maximum': {'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'}}} 
----------------------------------------- 
min_percentage = {'type': 'integer', 'minimum': 1, 'maximum': {'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'}} 
E......... 
====================================================================== 
ERROR: test_invalid_minimum__traffic_parameters__capacity__min_percentage (__main__.SchemaTests) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "test_test-variables_schema.py", line 160, in test_invalid_minimum__traffic_parameters__capacity__min_percentage 
    validate(0, min_percentage) 
    File "/local/tools/PACKAGES/python3/lib/python3.6/site-packages/jsonschema/validators.py", line 540, in validate 
    cls.check_schema(schema) 
    File "/local/tools/PACKAGES/python3/lib/python3.6/site-packages/jsonschema/validators.py", line 83, in check_schema 
    raise SchemaError.create_from(error) 
jsonschema.exceptions.SchemaError: {'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'} is not of type 'number' 

Failed validating 'type' in schema['properties']['maximum']: 
    {'type': 'number'} 

On instance['maximum']: 
{'$ref': '#/properties/traffic_parameters/capacity/oneOf/max_percentage/minimum'} 


    FAILED (errors=1) 

私のテストは、属性の最小値と最大値をテストするPython単体テストです。最大値は、直上に定義された別の属性への参照です。

示されたテストは最小値をテストしますが、エラーが発生した最大値です。もし私が最大値をテストしていたら、エラーは同じになるでしょう、それは私が取り組んでいるものです。

「最大」の「整数」としてタイプを再指定しようとしましたが、エラーが残ります。

属性のタイプを変更せずにこのエラーを回避するにはどうすればよいですか?このアトリビュートの最大値を直前のアトリビュートの最小値に直接関係させたいので、リファレンスは重要です。

また、unittestでこれらの変数を参照する別の(簡単な)方法がありますか?

はここで機能

def test_invalid_minimum__traffic_parameters__capacity__min_percentage(self): 
    global test_schema 

    capacity = test_schema["traffic_parameters"]["capacity"] 
    print ("capacity = " + str(capacity)) 
    print ("-----------------------------------------") 

    index0 = capacity["oneOf"][0] 
    print ("index0 = " + str(index0)) 
    print ("-----------------------------------------") 

    min_percentage = index0["min_percentage"] 
    print ("min_percentage = " + str(min_percentage)) 

    with self.assertRaises(ValidationError): 
     validate(0, min_percentage) 

おかげです。

答えて

1

JSONリファレンス仕様では、$refとなる可能性のある制限はありませんが、実際にはこれまでに見たバリデーターはどれも$refしかJSONスキーマを指していません。なぜその機能をサポートしているのかわからないが、私はまだそのようなことをするのは良い考えだと思った。

最近リリースされたJSON Schema draft-06では、JSONスキーマのみをサポートする一般的な方法がルールになりました。したがって、$ref整数をサポートするバリデータが見つかったとしても、将来的にはそれをアップグレードするのが難しくなるため、使用しないことをお勧めします。

1

これはこの方法では機能しません。 $ref参照は常にスキーマを指していなければなりません。つまり、オブジェクトでもブール値でもよいが、数値ではない。

関連する問題