Source code for test_argschema_parser

import json
import argschema
import pytest


[docs]class MyNestedSchema(argschema.schemas.DefaultSchema): one = argschema.fields.Int(required=True, description="nested integer") two = argschema.fields.Boolean( required=True, description="a nested boolean")
[docs]class MySchema(argschema.ArgSchema): a = argschema.fields.Int(required=True, description="parameter a") b = argschema.fields.Str( required=False, default="my value", description="optional b string parameter") nest = argschema.fields.Nested( MyNestedSchema, description="a nested schema")
[docs]class MyParser(argschema.ArgSchemaParser): default_schema = MySchema
[docs]def test_my_parser(): input_data = { 'a': 5, 'nest': { 'one': 7, 'two': False } } MyParser(input_data=input_data, args=[])
[docs]class MyNestedSchemaWithDefaults(argschema.schemas.DefaultSchema): one = argschema.fields.Int(default=1, description="nested integer") two = argschema.fields.Boolean(default=True, description="a nested boolean")
[docs]class MySchema2(argschema.ArgSchema): a = argschema.fields.Int(required=True, description="parameter a") b = argschema.fields.Str( required=False, default="my value", description="optional b string parameter") nest = argschema.fields.Nested( MyNestedSchemaWithDefaults, description="a nested schema")
[docs]def test_my_default_nested_parser(): input_data = { 'a': 5 } argschema.ArgSchemaParser(input_data=input_data, schema_type=MySchema2, args=[])
[docs]@pytest.mark.parametrize("default,args,expected", [ (True, ["--nest.two", "False"], False), (True, ["--nest.two", "0"], False), (True, ["--nest.two", "'f'"], False), (False, ["--nest.two", "True"], True), (False, ["--nest.two", "1"], True) ]) def test_boolean_command_line(default, args, expected): input_data = { 'a': 5, 'nest': { 'one': 7, 'two': default } } mod = MyParser(input_data=input_data, args=args) assert(isinstance(mod.args['nest']['two'], bool)) assert(mod.args['nest']['two'] == expected)
[docs]def test_parser_output(tmpdir_factory): json_path = tmpdir_factory.mktemp('data').join('test_output.json') input_data = { 'a': 5, 'nest': { 'one': 7, 'two': False } } mod = MyParser(input_data=input_data, args=[]) mod.output(mod.args, output_path=str(json_path), indent=2) with open(str(json_path), 'r') as jf: obt = json.load(jf) assert(obt['nest']['one'] == mod.args['nest']['one']) with open(str(json_path), 'r') as jf: lines = jf.readlines() assert(len(lines) >= 8) # true if indent param worked