# HG changeset patch # User Tom Hayward tom@tomh.us # Date 1360439120 28800 # Node ID f501ac229f9b1be1c24dab889b75ac40f27efd16 # Parent e917718c875d0b7931991811eb65ec9c627334ca [csv] Refactor line parsing to allow dialects. #533
diff -r e917718c875d -r f501ac229f9b chirp/generic_csv.py --- a/chirp/generic_csv.py Tue Feb 05 21:32:18 2013 -0800 +++ b/chirp/generic_csv.py Sat Feb 09 11:45:20 2013 -0800 @@ -106,6 +106,19 @@
return rf
+ def _clean(self, headers, line, mem): + """Runs post-processing functions on new mem objects. + + This is useful for parsing other CSV dialects when multiple columns + convert to a single Chirp column.""" + + for attr in dir(mem): + fname = "_clean_%s" % attr + if hasattr(self, fname): + mem = getattr(self, fname)(headers, line, mem) + + return mem + def _parse_csv_data_line(self, headers, line): mem = chirp_common.Memory() try: @@ -114,7 +127,11 @@ except OmittedHeaderError: pass
- for header, (typ, attr) in self.ATTR_MAP.items(): + for header in headers: + try: + typ, attr = self.ATTR_MAP[header] + except KeyError: + continue try: val = get_datum_by_header(headers, line, header) if not val and typ == int: @@ -128,7 +145,7 @@ except Exception, e: raise Exception("[%s] %s" % (attr, e))
- return mem + return self._clean(headers, line, mem)
def load(self, filename=None): if filename is None and self._filename is None: