def get_target(self, weights={'observable': 1.0, 'moon_separation': 1.0}):

        # Make sure we have some targets
        self.read_target_list()

        self.logger.info('Evaluating candidate targets')

        merits = []

        chosen_target = None

        for target in self.list_of_targets:
            self.logger.debug('Target: {}'.format(target.name))
            observable = False
            target_merit = 0.0
            for term in weights.keys():
                (merit_value, observable) = self.get_merit_value(term, target)

                if merit_value and observable:
                    target_merit += weights[term] * merit_value
                    self.logger.debug('\tTarget merit: {}'.format(target_merit))
                    self.logger.debug("\tTarget priority: {}".format(target.priority))
                else:
                    self.logger.debug('\t Vetoing...')
                    break

            if observable:
                merits.append((target.priority * target_merit, target))

            self.logger.debug('Target {} with priority {} has merit of {}'.format(
                              target.name, target.priority, merit_value))
        if len(merits) > 0:
            self.logger.debug(merits)
            chosen = sorted(merits, key=lambda x: x[0])[-1][1]
            self.logger.info('Chosen target is {} with priority {}'.format(
                             chosen.name, chosen.priority))
            chosen_target = chosen

        return chosen_target

##################################################################################################
# Utility Methods
##################################################################################################
Retrieves a list of subfolders in a folder for the current user.
dataset/ETHPy150Open panoptes/POCS/panoptes/scheduler/core.py/Scheduler.get_target--crossover with--dataset/ETHPy150Open dossier/dossier.web/dossier/web/routes.py/v1_subfolder_list