Skip to content

Should ValidationVisitor accumulate error state? #20

@jasonwalsh

Description

@jasonwalsh

Currently, the ValidationVisitor does not contain state for errors.

An AssertionError is raised for invalid client-submitted data. For example:

{
    "title": "Person",
    "type": "object",
    "properties": {
        "firstName": {
            "type": "string"
        },
        "age": {
            "type": "integer",
            "minimum": 0
        }
    },
    "required": ["firstName"]
}
from aptos.visitors import ValidationVisitor

record.accept(ValidationVisitor({'age': -5'}))  # raises an `AssertionError`

The previous example contains two validation errors:

  • Age is not a non-negative integer
  • firstName is not provided

If the ValidationVisitor contained state, then it could potentially accumulate error messages.

For example:

class ValidationVisitor:

    def __init__(self, instance):
        self.instance = instance
        self.errors = []

    def visit_string(self, string):
        instance = self.instance
        if self.maxLength:
            if not (len(instance) <= string.maxLength):
                self.errors.append('<error message>')
import logging

from aptos.visitors import ValidationVisitor

errors = record.accept(ValidationVisitor({'age': -5}))
if errors:
    logging.error(errors)

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions