@classmethod
    def _read_options(mcs, name, bases, attrs):
        options_members = {}

        for base in reversed(bases):
            if hasattr(base, "_options"):
                for key, value in inspect.getmembers(base._options):
                    if not key.startswith("_") and not key == "klass":
                        options_members[key] = value

        options_class = attrs.get('__optionsclass__', ModelOptions)
        if 'Options' in attrs:
            for key, value in inspect.getmembers(attrs['Options']):
                if not key.startswith("_"):
                    if key == "roles":
                        roles = options_members.get("roles", {}).copy()
                        roles.update(value)

                        options_members["roles"] = roles
                    else:
                        options_members[key] = value

        return options_class(mcs, **options_members)
Returns the value for the cache key, otherwise `None` is returned.
dataset/ETHPy150Open schematics/schematics/schematics/models.py/ModelMeta._read_options--crossover with--dataset/ETHPy150Open fengsp/rc/rc/cache.py/BaseCache.get