Skip to content

Commit d27ea52

Browse files
committed
Proof of Concept: custom fieldname support
This is a proof of concept to support validating CSVs that don't include a header row. The implementation allows a user to define a sequence of field names and passes these through to the underlying DictReader instances. The default behavior remains unchanged. I did a quick manual test with a slight modification of the example Vlad object and sample CSV contents from the readme. If this is a useful construct, I'll be happy to fill in the documentation and tests for this option. Resolves #88.
1 parent d831d62 commit d27ea52

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

vladiate/vlad.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ def __init__(
1717
file_validation_failure_threshold=None,
1818
quiet=False,
1919
row_validators=[],
20+
fieldnames=None,
2021
):
2122
self.logger = logs.logger
2223
self.failures = defaultdict(lambda: defaultdict(list))
@@ -26,6 +27,7 @@ def __init__(
2627
self.source = source
2728
self.validators = validators or getattr(self, "validators", {})
2829
self.row_validators = row_validators or getattr(self, "row_validators", [])
30+
self.fieldnames = fieldnames or getattr(self, "fieldnames", None)
2931
self.delimiter = delimiter or getattr(self, "delimiter", ",")
3032
self.line_count = 0
3133
self.ignore_missing_validators = ignore_missing_validators
@@ -124,15 +126,15 @@ def _log_missing(self, missing_items):
124126
)
125127

126128
def _get_total_lines(self):
127-
reader = csv.DictReader(self.source.open(), delimiter=self.delimiter)
129+
reader = csv.DictReader(self.source.open(), delimiter=self.delimiter, fieldnames=self.fieldnames)
128130
self.total_lines = sum(1 for _ in reader)
129131
return self.total_lines
130132

131133
def validate(self):
132134
self.logger.info(
133135
"\nValidating {}(source={})".format(self.__class__.__name__, self.source)
134136
)
135-
reader = csv.DictReader(self.source.open(), delimiter=self.delimiter)
137+
reader = csv.DictReader(self.source.open(), delimiter=self.delimiter, fieldnames=self.fieldnames)
136138

137139
if not reader.fieldnames:
138140
self.logger.info(

0 commit comments

Comments
 (0)