Add option to extract folder name/number, folder regexp & metadata.
--- 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')