def check_uploaded_files(project, contractor): """Iterate over all files, get parsers for them, try the parsers on the files. Returned is a list of errors, in the form of 3-tuples (current-file-path, original-filename, error-message).""" files = current_files(all_measurements(project, contractor)) specifics = project.specifics() errors = [] for path in files: with MovedFile(path) as moved_file: filename = os.path.basename(moved_file) parsers = specifics.parsers(filename) for parser in parsers: parse_object = parser_factory(parser, project, contractor, moved_file) result = parse_object.parse(check_only=True) if result.success: # Skip other parsers break elif not result.error: # Unsuccessful but no errors, parser not suited continue else: errors.append((path, filename, result.error)) break else: errors.append((path, filename, "No suitable parser found.")) return errors
def call_parser(uploaded_file, parser): """Actually call the parser. Open files. Return result.""" parser_instance = specifics.parser_factory( parser, uploaded_file.project, uploaded_file.contractor, uploaded_file.path) parseresult = parser_instance.parse() return parseresult