Esempio n. 1
0
    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)
Esempio n. 2
0
def import_xml_or_zip(filename, copy_status=MASTER):
    _xml = open(filename, 'rb')
    return import_from_file(_xml, filename, PUBLISHED, copy_status)
Esempio n. 3
0
 # 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:
Esempio n. 4
0
def import_xml_or_zip(filename, copy_status=MASTER):
    _xml = open(filename, 'rb')
    return import_from_file(_xml, filename, PUBLISHED, copy_status)
Esempio n. 5
0
    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)
Esempio n. 6
0
 # 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:
Esempio n. 7
0
def import_xml_or_zip(filename):
    _xml = open(filename, 'rb')
    return import_from_file(_xml, filename, PUBLISHED)