Răsfoiți Sursa

fix missing delimeter option

oz123 9 ani în urmă
părinte
comite
c1dd2e4e00
3 a modificat fișierele cu 24 adăugiri și 18 ștergeri
  1. 1 4
      pwman/__init__.py
  2. 18 7
      pwman/exchange/importer.py
  3. 5 7
      tests/test_importer.py

+ 1 - 4
pwman/__init__.py

@@ -62,10 +62,7 @@ def parser_options(formatter_class=argparse.HelpFormatter):  # pragma: no cover
                         default=os.path.expanduser("~/.pwman/config"),
                         help='cofiguration file to read')
     parser.add_argument('-d', '--database', dest='dbase')
-    #parser.add_argument('-i', '--import', dest='import_file',
-    #                    type=argparse.FileType())
-    parser.add_argument('-i', '--import', nargs=2, dest='file_delim',
-                        type=argparse.FileType())
+    parser.add_argument('-i', '--import', nargs=2, dest='file_delim')
     return parser
 
 

+ 18 - 7
pwman/exchange/importer.py

@@ -20,6 +20,7 @@
 A module to hold the importer class
 '''
 import csv
+import sys
 from pwman.data.nodes import Node
 from pwman.util.crypto_engine import CryptoEngine
 from pwman.ui.tools import CLICallback
@@ -48,19 +49,29 @@ class CSVImporter(BaseImporter):
 
     def _read_file(self):
         """read the csv file, remove empty lines and the header"""
-        fh = self.args.import_file
-        csv_f = csv.reader(fh, delimiter=';')
+        try:
+            fh, delim = open(self.args.file_delim[0]), self.args.file_delim[1]
+            csv_f = csv.reader(fh, delimiter=delim)
+        except IOError:
+            fh, delim = open(self.args.file_delim[1]), self.args.file_delim[0]
+            csv_f = csv.reader(fh, delimiter=delim)
+
         lines = [line for line in csv_f]
         lines = list(filter(None, lines))
+        fh.close()
         return lines[1:]
 
     def _create_node(self, row):
         """create a node object with encrypted properties"""
-        n = {'clear_text': True,
-             'username': row[0], 'password': row[2], 'url': row[1],
-             'notes': row[3],
-             'tags': row[4].split(',')}
-        node = Node(**n)
+        try:
+            n = {'clear_text': True,
+                 'username': row[0], 'password': row[2], 'url': row[1],
+                 'notes': row[3],
+                 'tags': row[4].split(',')}
+            node = Node(**n)
+        except IndexError as err:
+            print('{}\nDid you specify the correct delimiter?'.format(err))
+            sys.exit(1)
         return node
 
     def _insert_node(self, node):

+ 5 - 7
tests/test_importer.py

@@ -52,8 +52,8 @@ class TestImporter(unittest.TestCase):
     def setUp(self):
         config = {}
         db = SQLite('test-importer.db')
-        Args = namedtuple('args', 'import_file')
-        args = Args(import_file=open('import_file.csv'))
+        Args = namedtuple('args', 'file_delim')
+        args = Args(file_delim=['import_file.csv', ';'])
         self.importer = CSVImporter(args,
                                     config, db)
 
@@ -90,19 +90,17 @@ class TestImporter(unittest.TestCase):
         """
 
         # args need import_file , db,
-        Args = namedtuple('Args', 'import_file, db')
+        Args = namedtuple('Args', 'file_delim, db')
         if os.path.exists('importdummy.db'):
             os.unlink('importdummy.db')
-        args = Args(import_file=open('import_file.csv'), db='importdummy.db')
+        args = Args(file_delim=['import_file.csv', ';'], db='importdummy.db')
         db = pwman.data.factory.createdb('sqlite:///' + os.getcwd() +
                                          '/importdummy.db', 0.6)
         importer = Importer((args, '', db))
         importer.importer.run(callback=DummyCallback)
-        args.import_file.close()
 
     def tearDown(self):
-        self.importer.args.import_file.close()
-
+        pass
 
 if __name__ == '__main__':