Files
mayan-edms/mayan/apps/sources/management/commands/bulk_upload.py
Michel 8268804499 Update bulk_upload.py
compressed_files relative import didn't point to the right location.
2014-07-30 18:38:29 -04:00

81 lines
3.0 KiB
Python

from __future__ import absolute_import
from json import loads
from optparse import make_option
import os
import sys
from django.core.management.base import CommandError, LabelCommand
from documents.models import DocumentType
from metadata.api import convert_dict_to_dict_list
from ...models import OutOfProcess
from common.compressed_files import NotACompressedFile
class Command(LabelCommand):
args = '<filename>'
help = 'Upload documents from a compressed file in to the database.'
option_list = LabelCommand.option_list + (
make_option('--noinput', action='store_false', dest='interactive',
default=True, help='Do not ask the user for confirmation before '
'starting.'),
make_option('--metadata', action='store', dest='metadata',
help='A metadata dictionary list to apply to the documents.'),
make_option('--document_type', action='store', dest='document_type_name',
help='The document type to apply to the uploaded documents.'),
)
def handle_label(self, label, **options):
if not os.access(label, os.R_OK):
raise CommandError("File '%s' is not readable." % label)
if options['metadata']:
try:
metadata_dict = loads(options['metadata'])
metadata_dict_list = convert_dict_to_dict_list(metadata_dict)
except Exception as exception:
sys.exit('Metadata error: %s' % exception)
else:
metadata_dict_list = None
if options['document_type_name']:
try:
document_type = DocumentType.objects.get(name=options['document_type_name'])
except DocumentType.DoesNotExist:
sys.exit('Unknown document type')
else:
document_type = None
if _confirm(options['interactive']) == 'yes':
print 'Beginning upload...'
if metadata_dict_list:
print 'Using the metadata values:'
for key, value in metadata_dict.items():
print '%s: %s' % (key, value)
if document_type:
print 'Uploaded document will be of type: %s' % options['document_type_name']
source = OutOfProcess()
fd = open(label)
try:
result = source.upload_file(fd, filename=None, use_file_name=False, document_type=document_type, expand=True, metadata_dict_list=metadata_dict_list, user=None, document=None, new_version_data=None, command_line=True)
pass
except NotACompressedFile:
print '%s is not a compressed file.' % label
else:
print 'Finished.'
fd.close()
else:
print 'Cancelled.'
def _confirm(interactive):
if not interactive:
return 'yes'
return raw_input('You have requested to bulk upload a number of documents from a compressed file.\n'
'Are you sure you want to do this?\n'
'Type \'yes\' to continue, or any other value to cancel: ')