def __getattr__(self, item):
try:<EOL><INDENT>func = getattr(list, item)<EOL>elements_copy = self._elements[:]<EOL>def wrapper(*args, **kwargs):<EOL><INDENT>result = func(elements_copy, *args, **kwargs)<EOL>self._validate_list(elements_copy)<EOL>self._elements = elements_copy<EOL>self._sync_field()<EOL>return result<EOL><DEDENT>return wrapper<EOL><DEDENT>except AttributeError:<EOL><INDENT>raise AttributeError("<STR_LIT>".format(self.__class__, item))<EOL><DEDENT>
Fallback to any builtin list methods on self._elements for any undefined methods called on cursor

        List methods are wrapped in a function ensuring the updated value passes field validation before actually
        applying to the internal value

        Wrapper function creates a copy of the current elements in the cursor, calls whatever list method was executed
        on the copy, then validates the updated list against field rules.

        If validation fails, raise ValidationError, otherwise update the cursor elements and field value to the modified
        list copy