Skip to content

Missed typing on anonymous array #111

@othermark

Description

@othermark

For the following test schema, I'm running into a issues with builder not converting the list:

{
    "type": "object",
    "properties": {
        "Destination": {
            "type": "object",
            "properties": {
                "IPAddress": {
                    "OneOf": [
                        {
                            "type": "string",
                            "pattern": "^(?:(?:\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(?:\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])$"
                        },
                        {
                            "type": "string",
                            "pattern": "^((([0-9A-Fa-f]{1,4}:){1,6}:)|(([0-9A-Fa-f]{1,4}:){7}))([0-9A-Fa-f]{1,4})$"
                        }
                    ]
                },
                "Port": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 65535
                }
            },
            "required": [
                "Port",
                "IPAddress"
            ]
        },
        "Pool": {
            "type": "array",
            "items": [
                {
                    "type": "object",
                    "properties": {
                        "IPAddress": {
                            "type": "string"
                        },
                        "Port": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 65535
                        }
                    },
                    "required": [
                        "IPAddress",
                        "Port"
                    ]
                }
            ]
        },
        "Profile": {
            "type": "string"
        },
        "Snatpool": {
            "type": "array",
            "items": [
                {
                    "oneOf": [
                        {
                            "type": "string",
                            "pattern": "^(?:(?:\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(?:\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])$"
                        },
                        {
                            "type": "string",
                            "pattern": "^((([0-9A-Fa-f]{1,4}:){1,6}:)|(([0-9A-Fa-f]{1,4}:){7}))([0-9A-Fa-f]{1,4})$"
                        }
                    ]
                }
            ]
        }
    },
    "required": [
        "Destination",
        "Profile",
        "Pool"
    ],
    "title": "VirtualServer",
    "description": "Virtual Server"
}

-> uri = "{0}/{1}/<anonymous_{2}>".format(nm, prop, i)
(Pdb) list

666                                                     propdata,
667                                                     typ.__doc__)
668                     elif 'items' in detail:
669                         typs = []
670                         for i, elem in enumerate(detail['items']):
671  ->                         uri = "{0}/{1}/<anonymous_{2}>".format(nm, prop, i)
672                             typ = self.construct(uri, detail['items'])
673                             typs.append(typ)
674
675                         props[prop] = make_property(prop,
676                                                     {'type': 'tuple',
(Pdb) n
-> /lib64/python2.7/site-packages/python_jsonschema_objects/classbuilder.py(672)_build_object()
-> typ = self.construct(uri, detail['items'])
(Pdb) p detail['items']
[{u'oneOf': [{u'pattern': u'^(?:(?:\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(?:\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])$', u'type': u'string'}, {u'pattern': u'^((([0-9A-Fa-f]{1,4}:){1,6}:)|(([0-9A-Fa-f]{1,4}:){7}))([0-9A-Fa-f]{1,4})$', u'type': u'string'}]}]

(Pdb) c
DEBUG:python_jsonschema_objects.classbuilder:Constructing virtualserver/Snatpool/<anonymous_0>
Traceback (most recent call last):
  File "./test_load.py", line 9, in <module>
    vs = builder.build_classes()
  File "/lib64/python2.7/site-packages/python_jsonschema_objects/__init__.py", line 115, in build_classes
    builder.construct(nm, self.schema,**kw)
  File "/lib64/python2.7/site-packages/python_jsonschema_objects/classbuilder.py", line 395, in construct
    ret = self._construct(uri, *args, **kw)
  File ".local/lib64/python2.7/site-packages/python_jsonschema_objects/classbuilder.py", line 504, in _construct
    parent,**kw)
  File "/lib64/python2.7/site-packages/python_jsonschema_objects/classbuilder.py", line 672, in _build_object
    typ = self.construct(uri, detail['items'])
  File "/lib64/python2.7/site-packages/python_jsonschema_objects/classbuilder.py", line 395, in construct
    ret = self._construct(uri, *args, **kw)
  File "/lib64/python2.7/site-packages/python_jsonschema_objects/classbuilder.py", line 476, in _construct
    elif clsdata.get('type') == 'array' and 'items' in clsdata:
AttributeError: 'list' object has no attribute 'get'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions