docs: def get_files_from_github(user_and_repo, filedir, regex, prefer_tags):
      ''' Return dictionary of version:directory and directory has extracted files. '''
      github_url = f'https://api.github.com/repos/{user_and_repo}'
      args = f'?per_page={N_RESULTS}'
      results = []
      json_data = None
  
      # Determine the right url
      if not prefer_tags:
          url = f'{github_url}/releases{args}'
          json_data = requests.get(url).json()
  
      if not json_data:
          url = f'{github_url}/tags{args}'
          json_data = requests.get(url).json()
  
      logger.debug(f'[+] Using {url} as base url.')
  
      # Get all the releases/tags available
      results = json_data
      for n_page in range(2, 1000):
          logger.debug(f'[+] Requesting page {n_page} of releases/tags ..')
          json_data = requests.get(f'{url}&page={n_page}').json()
          results += json_data
  
          if len(json_data) < N_RESULTS:
              break
  
      if not results:
          raise ValueError(f'No releases/tags for {user_and_repo}')
  
      directories = {}
      for result in results:
          name = result['name']
          m = re.match(regex, name)
          if not m:
              continue
  
          name = m.groups()[0]
  
          logger.debug(f'[+] Downloading zip file for {name} version ..')
  
          # Download zip file and extract in temporary directory
          zip_url = result['zipball_url']
          zf = requests.get(zip_url, allow_redirects=True)
          z = zipfile.ZipFile(io.BytesIO(zf.content))
          output_dir = f'{filedir}/{z.namelist()[0]}'
  
          z.extractall(path=filedir)
          directories[name] = output_dir
  
      return directories