code: def find_includes(basedirs, source, log=None):
    
  
    all_basedirs = [os.path.dirname(source)]
    all_basedirs.extend(basedirs)
  
    includes = set()
    with open(source, 'r') as thrift:
      for line in thrift.readlines():
        match = INCLUDE_PARSER.match(line)
        if match:
          capture = match.group(1)
          added = False
          for basedir in all_basedirs:
            include = os.path.join(basedir, capture)
            if os.path.exists(include):
              if log:
                log.debug('{} has include {}'.format(source, include))
              includes.add(include)
              added = True
          if not added:
            raise ValueError("{} included in {} not found in bases {}"
                             .format(include, source, all_basedirs))
    return includes
docs: Finds all thrift files included by the given thrift source.
  
    :basedirs: A set of thrift source file base directories to look for includes in.
    :source: The thrift source file to scan for includes.
    :log: An optional logger