def upload_xml(self, request, extra_context=None): """ Allows to upload a resource description into the Django database. """ # Check if the current user is actually allowed to upload... if not request.user.is_superuser and not request.user.has_perm('repository.add_resourceinfotype_model'): raise PermissionDenied if request.method == 'POST': form = ResourceDescriptionUploadForm(request.POST, request.FILES) if form.is_valid(): # Retrieve the upload resource description file. description = request.FILES['description'] from metashare.xml_utils import import_from_file successes, failures = \ import_from_file(description, description.name, INTERNAL, MASTER, request.user.id) if len(successes) == 1 and len(failures) == 0: # single resource successfully uploaded resource_object = successes[0] # Construct redirect URL for the new object. redirect_url = reverse('editor:repository_resourceinfotype_model_change', args=[resource_object.id]) messages.info(request, u'Successfully uploaded file: {}'.format(description.name)) else: # Default case: either at least one failure, or more than one success # We will redirect to upload page if we have no successes at all, # or to "my resources" if there is at least one success redirect_url = reverse('editor:upload_xml') if len(successes) > 0: redirect_url = reverse('editor:repository_resourceinfotype_model_myresources') messages.info(request, u'Successfully uploaded {} resource descriptions'.format(len(successes))) if len(failures) > 0: _msg = u'Import failed for {} files:\n'.format(len(failures)) for descriptor, exception in failures: _msg += u'\t{}: '.format(descriptor) if isinstance(exception.args, tuple): _msg += u'{}\n'.format( ' '.join([str(a) for a in exception.args])) else: _msg += u'{}\n'.format(exception.args) messages.error(request, _msg) return HttpResponseRedirect(redirect_url) else: # not a POST request form = ResourceDescriptionUploadForm() context = { 'title': _('Upload new resource description(s)'), 'form': form, 'form_url': request.path, 'root_path': self.site_url, } context.update(extra_context or {}) context_instance = template.RequestContext(request, current_app=self.name) return render_to_response( ['admin/repository/resourceinfotype_model/upload_description.html'], context, context_instance)
def import_xml_or_zip(filename, copy_status=MASTER): _xml = open(filename, 'rb') return import_from_file(_xml, filename, PUBLISHED, copy_status)
# Disable verbose debug output for the import process... settings.DEBUG = False os.environ['DISABLE_INDEXING_DURING_IMPORT'] = 'True' successful_imports = [] erroneous_imports = [] from metashare.xml_utils import import_from_file from metashare.storage.models import PUBLISHED, MASTER from metashare.repository.supermodel import OBJECT_XML_CACHE # Clean cache before starting the import process. OBJECT_XML_CACHE.clear() for filename in sys.argv[arg_num:]: temp_file = open(filename, 'rb') success, failure = import_from_file(temp_file, filename, PUBLISHED, MASTER) successful_imports += success erroneous_imports += failure temp_file.close() print "Done. Successfully imported {0} files into the database, errors " \ "occurred in {1} cases.".format(len(successful_imports), len(erroneous_imports)) if len(erroneous_imports) > 0: print "The following files could not be imported:" for descriptor, exception in erroneous_imports: if isinstance(exception.args, basestring): print "\t{}: {}".format(descriptor, ' '.join(exception.args)) else: print "\t{}: {}".format(descriptor, exception.args) # Salvatore:
def upload_xml(self, request, extra_context=None): """ Allows to upload a resource description into the Django database. """ # Check if the current user is actually allowed to upload... if not request.user.is_superuser and not request.user.has_perm( 'repository.add_resourceinfotype_model'): raise PermissionDenied if request.method == 'POST': form = ResourceDescriptionUploadForm(request.POST, request.FILES) if form.is_valid(): # Retrieve the upload resource description file. description = request.FILES['description'] from metashare.xml_utils import import_from_file successes, failures = \ import_from_file(description, description.name, INTERNAL, MASTER, request.user.id) if len(successes) == 1 and len( failures ) == 0: # single resource successfully uploaded resource_object = successes[0] # Construct redirect URL for the new object. redirect_url = reverse( 'editor:repository_resourceinfotype_model_change', args=[resource_object.id]) messages.info( request, u'Successfully uploaded file: {}'.format( description.name)) else: # Default case: either at least one failure, or more than one success # We will redirect to upload page if we have no successes at all, # or to "my resources" if there is at least one success redirect_url = reverse('editor:upload_xml') if len(successes) > 0: redirect_url = reverse( 'editor:repository_resourceinfotype_model_myresources' ) messages.info( request, u'Successfully uploaded {} resource descriptions'. format(len(successes))) if len(failures) > 0: _msg = u'Import failed for {} files:\n'.format( len(failures)) for descriptor, exception in failures: _msg += u'\t{}: '.format(descriptor) if isinstance(exception.args, tuple): _msg += u'{}\n'.format(' '.join( [str(a) for a in exception.args])) else: _msg += u'{}\n'.format(exception.args) messages.error(request, _msg) return HttpResponseRedirect(redirect_url) else: # not a POST request form = ResourceDescriptionUploadForm() context = { 'title': _('Upload new resource description(s)'), 'form': form, 'form_url': request.path, 'root_path': self.root_path, } context.update(extra_context or {}) context_instance = template.RequestContext(request, current_app=self.name) return render_to_response([ 'admin/repository/resourceinfotype_model/upload_description.html' ], context, context_instance)
def import_xml_or_zip(filename): _xml = open(filename, 'rb') return import_from_file(_xml, filename, PUBLISHED)