35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
|
import importlib
|
||
|
from _plotly_utils.basevalidators import LiteralValidator
|
||
|
|
||
|
|
||
|
class ValidatorCache(object):
|
||
|
_cache = {}
|
||
|
|
||
|
@staticmethod
|
||
|
def get_validator(parent_path, prop_name):
|
||
|
|
||
|
key = (parent_path, prop_name)
|
||
|
if key not in ValidatorCache._cache:
|
||
|
|
||
|
if "." not in parent_path and prop_name == "type":
|
||
|
# Special case for .type property of traces
|
||
|
validator = LiteralValidator("type", parent_path, parent_path)
|
||
|
else:
|
||
|
lookup_name = None
|
||
|
if parent_path == "layout":
|
||
|
from .graph_objects import Layout
|
||
|
|
||
|
match = Layout._subplotid_prop_re.match(prop_name)
|
||
|
if match:
|
||
|
lookup_name = match.group(1)
|
||
|
|
||
|
lookup_name = lookup_name or prop_name
|
||
|
class_name = lookup_name.title() + "Validator"
|
||
|
validator = getattr(
|
||
|
importlib.import_module("plotly.validators." + parent_path),
|
||
|
class_name,
|
||
|
)(plotly_name=prop_name)
|
||
|
ValidatorCache._cache[key] = validator
|
||
|
|
||
|
return ValidatorCache._cache[key]
|