mirror of
				https://github.com/NVIDIA/nvidia-container-toolkit
				synced 2025-06-26 18:18:24 +00:00 
			
		
		
		
	Refactor CSV file parsing
Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
		
							parent
							
								
									d8109dc49b
								
							
						
					
					
						commit
						d1a38f10a5
					
				| @ -68,7 +68,7 @@ func NewFromCSVFiles(logger *logrus.Logger, files []string, root string) (Discov | |||||||
| // MountSpecType.
 | // MountSpecType.
 | ||||||
| func NewFromCSVFile(logger *logrus.Logger, locators map[csv.MountSpecType]lookup.Locator, filename string) (Discover, error) { | func NewFromCSVFile(logger *logrus.Logger, locators map[csv.MountSpecType]lookup.Locator, filename string) (Discover, error) { | ||||||
| 	// Create a discoverer for each file-kind combination
 | 	// Create a discoverer for each file-kind combination
 | ||||||
| 	targets, err := csv.ParseFile(logger, filename) | 	targets, err := csv.NewCSVFileParser(logger, filename).Parse() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to parse CSV file: %v", err) | 		return nil, fmt.Errorf("failed to parse CSV file: %v", err) | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -81,19 +81,39 @@ func BaseFilesOnly(filenames []string) []string { | |||||||
| 	return selected | 	return selected | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ParseFile parses the specified file and returns a list of required jetson mounts
 | // Parser specifies an interface for parsing MountSpecs
 | ||||||
| func ParseFile(logger *logrus.Logger, filename string) ([]*MountSpec, error) { | type Parser interface { | ||||||
| 	csvFile, err := os.Open(filename) | 	Parse() ([]*MountSpec, error) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type csv struct { | ||||||
|  | 	logger   *logrus.Logger | ||||||
|  | 	filename string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // NewCSVFileParser creates a new parser for reading MountSpecs from the specified CSV file
 | ||||||
|  | func NewCSVFileParser(logger *logrus.Logger, filename string) Parser { | ||||||
|  | 	p := csv{ | ||||||
|  | 		logger:   logger, | ||||||
|  | 		filename: filename, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return &p | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Parse parses the csv file and returns a list of MountSpecs in the file
 | ||||||
|  | func (p csv) Parse() ([]*MountSpec, error) { | ||||||
|  | 	reader, err := os.Open(p.filename) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to open %v for reading: %v", filename, err) | 		return nil, fmt.Errorf("failed to open %v for reading: %v", p.filename, err) | ||||||
| 	} | 	} | ||||||
| 	defer csvFile.Close() | 	defer reader.Close() | ||||||
| 
 | 
 | ||||||
| 	return parseCSVFromReader(logger, csvFile), nil | 	return p.parseFromReader(reader), nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // parseCSVFromReader parses the specified file and returns a list of required jetson mounts
 | // parseFromReader parses the specified file and returns a list of required jetson mounts
 | ||||||
| func parseCSVFromReader(logger *logrus.Logger, reader io.Reader) []*MountSpec { | func (p csv) parseFromReader(reader io.Reader) []*MountSpec { | ||||||
| 	var targets []*MountSpec | 	var targets []*MountSpec | ||||||
| 
 | 
 | ||||||
| 	scanner := bufio.NewScanner(reader) | 	scanner := bufio.NewScanner(reader) | ||||||
| @ -101,7 +121,7 @@ func parseCSVFromReader(logger *logrus.Logger, reader io.Reader) []*MountSpec { | |||||||
| 		line := scanner.Text() | 		line := scanner.Text() | ||||||
| 		target, err := NewMountSpecFromLine(line) | 		target, err := NewMountSpecFromLine(line) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			logger.Debugf("Skipping invalid mount spec '%v': %v", line, err) | 			p.logger.Debugf("Skipping invalid mount spec '%v': %v", line, err) | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		targets = append(targets, target) | 		targets = append(targets, target) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user