def reports(self):
        """
        Find all the runs in the path. Create an object to store the metadata for each run: run name, path, name of
        reports, etc.
        :return: a list of metadata objects
        """
        printtime('Finding reports', self.start)
        # Initialise a list of runs and a list of all the metadata objects
        runs = list()
        samples = list()
        # Glob all the assembly folders into a list
        folders = glob(os.path.join(self.path, '*'.format(self.path)))
        # Iterate through all the folders
        for folder in folders:
            if os.path.isdir(folder):
                # Ignore any previously processed aggregate reports folder
                if 'reports' not in folder:
                    # Treat the external labs differently - instead of having all the assemblies in the path, each lab
                    # has its own subfolder with assemblies
                    if self.external:
                        subfolder = glob(os.path.join(folder, '*'))
                        for subsubfolder in subfolder:
                            if os.path.isdir(subfolder):
                                runs.append(subsubfolder)
                    else:
                        runs.append(folder)
        # Create metadata objects for each assembly run
        for assembly in sorted(runs):
            # Initialise the Metadata object
            metadata = MetadataObject()
            metadata.name = assembly.split('/')[-2] if assembly.split('/')[-3] == 'WGSspades' else '{}-{}'\
                .format(assembly.split('/')[-3], assembly.split('/')[-2])
            # Strip of any underscores and anything after an underscore
            metadata.name = metadata.name.split('_')[0]
            # Initialise Genobjects to store nested dictionaries of metadata in each metadata object
            metadata.general = GenObject()
            # Populate the GenObject
            metadata.general.path = assembly
            metadata.general.reportpath = os.path.join(str(assembly), 'reports')
            metadata.general.reports = glob(os.path.join(metadata.general.reportpath, '*.csv'))
            metadata.general.reportnames = [os.path.basename(x) for x in metadata.general.reports]
            # Add all the names of the reports to the set of reports
            for reportname in metadata.general.reportnames:
                self.reportset.add(reportname)
            # Add the metadata to list of metadata objects
            samples.append(metadata)
        # Return the list of metadata objects
        return samples