Add option to extract folder name/number, folder regexp & metadata.
authorAlexandre Segura <mex.zktk@gmail.com>
Tue, 25 Apr 2017 17:41:28 +0200
changeset 475 4ef381cd86ea
parent 474 f34b7f73777c
child 476 8e706eb56e6e
Add option to extract folder name/number, folder regexp & metadata.
src/iconolab/management/commands/importimages.py
--- a/src/iconolab/management/commands/importimages.py	Tue Apr 25 16:58:01 2017 +0200
+++ b/src/iconolab/management/commands/importimages.py	Tue Apr 25 17:41:28 2017 +0200
@@ -84,6 +84,26 @@
             default=r'[\.\-_].*',
             help='regexp suffix to properly parse image names with info from csv. The pattern should describe the part after the filename identifier string, default is [\.\-_].*'
         )
+        parser.add_argument(
+            '--folders',
+            dest='import_folders',
+            default=False,
+            action='store_const',
+            const=True,
+            help='option to create folders'
+        )
+        parser.add_argument(
+            '--folders-regexp',
+            dest='folders_regexp',
+            default=False,
+            help='regexp used to extract the folder name/number'
+        )
+        parser.add_argument(
+            '--folders-metadata',
+            dest='folders_metadata',
+            default='INV',
+            help='metadata from which to extract the folder name/number'
+        )
     def handle(self, *args, **options):
         """
             Step-by-step for import:
@@ -154,6 +174,9 @@
                         if metacategory.get('label', None) is None:
                             raise ValueError('!!! Metacategory without label !!!')
 
+            if options['import_folders'] and not options['folders_regexp']:
+                raise ValueError('!!! No regexp specified to extract folder name !!!')
+
             # We read the csv
             delimiter = options.get('csv_delimiter')
             if delimiter == '#9':
@@ -283,25 +306,27 @@
                 if ItemMetadata.objects.filter(item__collection = collection, inventory_number = item_inventory_number).exists():
                     print('#### An item with '+item['INV']+' for inventory number, already exists in database in the import collection')
 
-                    # Extract folder name from inventory number
-                    m = re.search('^.*\.(.*)\..*$', item['INV'])
-                    folder_id = m.group(1)
+                    if options['import_folders']:
+
+                        # Extract folder name from inventory number
+                        m = re.search(options['folders_regexp'], item[options['folders_metadata']])
+                        folder_id = m.group(1)
 
-                    if not Folder.objects.filter(original_id=folder_id).exists():
-                        print('#### Creating folder "'+folder_id+'"')
-                        folder = Folder.objects.create(
-                            collection = collection,
-                            name = 'Dossier '+folder_id,
-                            original_id = folder_id
-                        )
-                    else:
-                        print('#### Folder "'+folder_id+'" already exists')
-                        folder = Folder.objects.get(original_id=folder_id)
+                        if not Folder.objects.filter(original_id=folder_id).exists():
+                            print('#### Creating folder "'+folder_id+'"')
+                            folder = Folder.objects.create(
+                                collection = collection,
+                                name = 'Dossier '+folder_id,
+                                original_id = folder_id
+                            )
+                        else:
+                            print('#### Folder "'+folder_id+'" already exists')
+                            folder = Folder.objects.get(original_id=folder_id)
 
-                    item_metadata = ItemMetadata.objects.get(item__collection = collection, inventory_number = item_inventory_number)
-                    item = item_metadata.item
+                        item_metadata = ItemMetadata.objects.get(item__collection = collection, inventory_number = item_inventory_number)
+                        item = item_metadata.item
 
-                    item.folders.add(folder)
+                        item.folders.add(folder)
 
                 else:
                     print('#### Creating item '+item['INV']+' (inv number) in database')