def get(
        self,
        key,
        default=None,
        cast=None,
        fresh=False,
        dotted_lookup=empty,
        parent=None,
        sysenv_fallback=None,
    ):
        """
        Get a value from settings store, this is the preferred way to access::

            >>> from dynaconf import settings
            >>> settings.get('KEY')

        :param key: The name of the setting value, will always be upper case
        :param default: In case of not found it will be returned
        :param cast: Should cast in to @int, @float, @bool or @json ?
        :param fresh: Should reload from loaders store before access?
        :param dotted_lookup: Should perform dotted-path lookup?
        :param parent: Is there a pre-loaded parent in a nested data?
        :param sysenv_fallback: Should fallback to system environ if not found?
        :return: The value if found, default or None
        """
        if sysenv_fallback is None:
            sysenv_fallback = self._store.get("SYSENV_FALLBACK_FOR_DYNACONF")

        nested_sep = self._store.get("NESTED_SEPARATOR_FOR_DYNACONF")
        if isinstance(key, str):
            if nested_sep and nested_sep in key:
                # turn FOO__bar__ZAZ in `FOO.bar.ZAZ`
                key = key.replace(nested_sep, ".")

            if dotted_lookup is empty:
                dotted_lookup = self._store.get("DOTTED_LOOKUP_FOR_DYNACONF")

            if "." in key and dotted_lookup:
                return self._dotted_get(
                    dotted_key=key,
                    default=default,
                    cast=cast,
                    fresh=fresh,
                    parent=parent,
                )

            key = upperfy(key)

        # handles system environment fallback
        if default is None:
            key_in_sysenv_fallback_list = isinstance(
                sysenv_fallback, list
            ) and key in [upperfy(k) for k in sysenv_fallback]
            if sysenv_fallback is True or key_in_sysenv_fallback_list:
                default = self.get_environ(key, cast=True)

        # default values should behave exactly Dynaconf parsed values
        if default is not None and self._store.get("DYNABOXIFY", True):
            if isinstance(default, list):
                default = BoxList(default)
            elif isinstance(default, dict):
                default = DynaBox(default)

        if key in self._deleted:
            return default

        if (
            fresh
            or self._fresh
            or key
            in ensure_upperfied_list(
                getattr(self, "FRESH_VARS_FOR_DYNACONF", ())
            )
        ) and key not in UPPER_DEFAULT_SETTINGS:
            self.unset(key)
            self.execute_loaders(key=key)

        data = (parent or self.store).get(key, default)
        if cast:
            data = apply_converter(cast, data, box_settings=self)
        return data

        Get a value from settings store, this is the preferred way to access::

            >>> from dynaconf import settings
            >>> settings.get('KEY')

        :param key: The name of the setting value, will always be upper case
        :param default: In case of not found it will be returned
        :param cast: Should cast in to @int, @float, @bool or @json ?
        :param fresh: Should reload from loaders store before access?
        :param dotted_lookup: Should perform dotted-path lookup?
        :param parent: Is there a pre-loaded parent in a nested data?
        :param sysenv_fallback: Should fallback to system environ if not found?
        :return: The value if found, default or None
        
dynaconf/base.py