class_docstr: PerspectiveViewer wraps the `perspective.Table` API and exposes an API
  around creating views, loading data, and updating data.
class_docstr_tok: ["PerspectiveViewer","wraps","the","`","perspective.Table","`","API","and","exposes","an","API","around","creating","views",",","loading","data",",","and","updating","data","."]
docstr: Override __setattr__ in order to allow Enums to be validated
  through Traitlets.
docstr_tok: ["Override","__setattr__","in","order","to","allow","Enums","to","be","validated","through","Traitlets","."]
code: def __setattr__(self, name, value):
      """Override __setattr__ in order to allow Enums to be validated
      through Traitlets."""
      if name in PerspectiveViewer.ENUM_VALIDATORS:
          # call the validator and set
          validated = PerspectiveViewer.ENUM_VALIDATORS[name](value)
          value = validated
      super(PerspectiveViewer, self).__setattr__(name, value)
  
file_path: perspective/python/perspective/perspective/viewer/viewer.py
imports: from random import random
  from ..libpsp import is_libpsp
  from .validate import validate_aggregates, validate_split_by, validate_columns, validate_expressions, validate_filter, validate_plugin, validate_plugin_config, validate_group_by, validate_sort
  from .viewer_traitlets import PerspectiveTraitlets
label_desc: Use image node_id 11 for calling the PerspectiveViewer obj's underlying member method code with example usage: obj.__setattr__(name, value) without return types