--- a/src/iconolab_episteme/management/commands/importcollection.py Tue Jun 26 15:55:08 2018 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-# -*- coding: UTF-8 -*-
-import json
-import logging
-import os
-import pprint
-import re
-import shutil
-import imghdr
-
-from django.conf import settings
-from django.core.management.base import BaseCommand, CommandError
-from PIL import Image as ImagePIL
-from sorl.thumbnail import get_thumbnail
-
-from iconolab.management.commands.importimages import BaseImportImagesCommand
-from iconolab.models import (Collection, Folder, Image, ImageStats, Item,
- ItemMetadata, MetaCategory)
-
-if settings.IMPORT_LOGGER_NAME and settings.LOGGING['loggers'].get(settings.IMPORT_LOGGER_NAME, ''):
- logger = logging.getLogger(settings.IMPORT_LOGGER_NAME)
-else:
- logger = logging.getLogger(__name__)
-
-class Command(BaseImportImagesCommand):
- help = 'import collection image and file from a directory'
-
- def add_arguments(self, parser):
- parser.add_argument('source_dir')
- parser.add_argument(
- '--encoding',
- dest='encoding',
- default='utf-8',
- help='JSON file encoding'
-
- )
- parser.add_argument(
- '--collection-json',
- dest='collection_json',
- default=False,
- help='creates a new collection from a json file, must be an object with fields : '+
- '"name" (identifier), '+
- '"verbose_name" (proper title name), '+
- '"description" (description on homepage, html is supported), '+
- '"image" (image on homepages, must be "uploads/<imgname>"), '+
- '"height" and "width" (height and width of the image)',
- )
- parser.add_argument(
- '--collection-id',
- dest='collection_id',
- default=False,
- help='insert extracted data into the specified collection instead of trying to load a collection fixture',
- )
- parser.add_argument(
- '--no-jpg-conversion',
- dest='no-jpg-conversion',
- default=False,
- help='use this option if you only want the image copied and not converted'
- )
-
- def handle(self, *args, **options):
-
- print('# Logging with logger '+logger.name)
- logger.debug('# Initializing command with args: %r', options)
-
- '''Check we have a collection to store data into'''
- self.source_dir = options.get('source_dir')
- print('# Checking collection args')
- if options.get('collection_json'):
- print('## Finding collection json data in '+self.source_dir)
- collection_json_path = os.path.join(
- self.source_dir, options.get('collection_json'))
- if not os.path.isfile(collection_json_path):
- print('### No '+options.get('collection_json') +
- '.json file was found in the source directory')
- raise ValueError(
- '!!! Json file '+collection_json_path+' was not found !!!')
- try:
- with open(collection_json_path) as json_fixture_file:
- collection_data = json.loads(json_fixture_file.read())
- for key in ['name', 'verbose_name', 'description', 'image', 'height', 'width']:
- if not key in collection_data.keys():
- print('!!! Json file '+collection_json_path +
- ' has no '+key+' field !!!')
- raise ValueError()
- if not collection_data.get('name', ''):
- print('!!! Collection data key "name" is empty')
- raise ValueError()
- if Collection.objects.filter(name=collection_data.get('name')).exists():
- print(
- '!!! A Collection with the provided name already exists!')
- raise ValueError()
- if collection_data.get('image', '') and not (collection_data.get('width', 0) and collection_data.get('height', 0)):
- print(
- '!!! Collection data has an image but no height and width')
- raise ValueError()
- except ValueError as e:
- raise ValueError('!!! JSON Data is invalid. !!!')
- elif options.get('collection_id'):
- print('## Finding collection with id ' +
- options.get('collection_id'))
- try:
- collection = Collection.objects.get(
- pk=options.get('collection_id'))
- except Collection.DoesNotExist:
- raise ValueError('!!! Collection with primary key ' +
- options.get('collection_id')+' was not found, aborting !!!')
- else:
- raise ValueError(
- '!!! No collection fixture or collection id, aborting because we can\'t properly generate data. !!!')
-
-
- '''Import image collection in target directory'''
-
- if options.get('collection_json'):
- print('## Loading collection json')
- collection = Collection.objects.create(
- name=collection_data.get('name'),
- verbose_name=collection_data.get('verbose_name', ''),
- description=collection_data.get('description', ''),
- image=collection_data.get('image', ''),
- height=collection_data.get('height', 0),
- width=collection_data.get('width', 0),
- )
-
- if collection.image:
- collection_image_path = os.path.join(
- settings.MEDIA_ROOT, str(collection.image))
- if not os.path.isfile(collection_image_path):
- print('### Moving collection image')
- _, collection_image_name = os.path.split(
- collection_image_path)
- try:
- col_im = ImagePIL.open(os.path.join(
- self.source_dir, collection_image_name))
- print('##### Generating or copying jpeg for ' +
- collection_image_name)
- col_im.thumbnail(col_im.size)
- col_im.save(collection_image_path, 'JPEG', quality=options.get(
- 'jpeg_quality', settings.IMG_JPG_DEFAULT_QUALITY))
- except Exception as e:
- print(e)
-
-