def provide_session(self, start_new=False):
        """ Makes sure that session is still valid and provides session info

        :param start_new: If `True` it will always create a new session. Otherwise it will create a new
            session only if no session exists or the previous session timed out.
        :type start_new: bool
        :return: Current session info
        :rtype: dict
        """
        if self.is_global:
            self._session_info = self._global_session_info
            self._session_start = self._global_session_start

        if self._session_info is None or start_new or \
                datetime.datetime.now() > self._session_start + self.SESSION_DURATION:
            self._start_new_session()

        return self._session_info
Makes sure that session is still valid and provides session info

        :param start_new: If `True` it will always create a new session. Otherwise it will create a new
            session only if no session exists or the previous session timed out.
        :type start_new: bool
        :return: Current session info
        :rtype: dict