Break initialization into smaller functions
authorKarl O. Pinc <kop@karlpinc.com>
Thu, 24 Dec 2020 22:34:16 +0000 (16:34 -0600)
committerKarl O. Pinc <kop@karlpinc.com>
Mon, 28 Dec 2020 22:51:21 +0000 (16:51 -0600)
src/pgwui_core/core.py

index 1e96f8721a7ddd418fc1358ec35957c6f6a92c22..99d8cce652e80cf57b291c46dbd80b8cc68d1b2a 100644 (file)
@@ -861,6 +861,33 @@ class UploadData(DBData):
     lineno     Number of lines processed (including header line)
 
     '''
+    def create_mapper(self, do_trim, null_data, null_rep):
+        # Create mapper to frob data elements
+        if null_data:
+            null_rep = do_trim(null_rep)
+
+            def mapper(st):
+                st = do_trim(st)
+                # psycopg2 maps None to NULL
+                return None if st == null_rep else st
+            self._mapper = mapper
+        else:
+            self._mapper = do_trim
+
+    def create_parser(self, file_fmt, eol):
+        # Create parser to read raw lines into a list
+        if file_fmt == CSV:
+            self._parser = lambda st: self._extend(st,
+                                                   next(csv_reader((st,))))
+        else:    # Tab delimited format
+            neg_eollen = -len(eol)
+
+            def tab_parser(line):
+                if neg_eollen and line[neg_eollen:] == eol:
+                    line = line[:neg_eollen]
+                return self._extend(line, line.split('\t'))
+            self._parser = tab_parser
+
     def __init__(self, fileo, file_fmt, null_data, null_rep, trim=True):
         '''
         fileo       Uploaded file object
@@ -914,31 +941,10 @@ class UploadData(DBData):
 
         # Get column headings
         eol, self.headers = get_headers()
-        neg_eollen = -len(eol)
         self.cols = len(self.headers.tuples)
 
-        # Create parser to read raw lines into a list
-        if file_fmt == CSV:
-            self._parser = lambda st: self._extend(st,
-                                                   next(csv_reader((st,))))
-        else:    # Tab delimited format
-            def tab_parser(line):
-                if neg_eollen and line[neg_eollen:] == eol:
-                    line = line[:neg_eollen]
-                return self._extend(line, line.split('\t'))
-            self._parser = tab_parser
-
-        # Create mapper to frob data elements
-        if null_data:
-            null_rep = do_trim(null_rep)
-
-            def mapper(st):
-                st = do_trim(st)
-                # psycopg2 maps None to NULL
-                return None if st == null_rep else st
-            self._mapper = mapper
-        else:
-            self._mapper = do_trim
+        self.create_parser(file_fmt, eol)
+        self.create_mapper(do_trim, null_data, null_rep)
 
     def _thunk(self):
         '''