<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_permission_groups(self, username):
 """ Return a list of names of the groups that the user with the specified name is a member of. Implements an `IPermissionGroupProvider` API. This specific implementation connects to GitHub with a dedicated user, fetches and caches the teams and their users configured at GitHub and converts the data into a format usable for easy access by username. """

        if not self.organization or not self.username or not self.access_token:
            return []
        elif (self.username_prefix and
                not username.startswith(self.username_prefix)):
            return []

        data = self._fetch_groups()
        if not data:
            self.log.error("No cached groups from GitHub available") # pylint: disable=no-member
            return []
        else:
            return data.get(username[len(self.username_prefix):], [])