Exemplo n.º 1
0
def upload_readme(request, item_id, slug):
    """ Allow the user to add a readme to a dataset.
    
    Arguments:
    request -- the request
    item_id -- the id for the dataset the 'readme' is to be attached to
    slug -- the slug for the dataset the 'readme' is to be attached to
    
    """
    
    dataset = get_object_or_404(DataSet, pk=item_id)
    user = request.user
    
    if user != dataset.creator or dataset.is_active:
        return HttpResponseRedirect(
                    reverse('epic.datasets.views.view_dataset', 
                            kwargs={'item_id':dataset.id,
                                    'slug':dataset.slug}))
    if request.method != 'POST':
        form = UploadReadMeForm()
    else:
        form = UploadReadMeForm(request.POST, request.FILES)
        
        if form.is_valid():
            readme_file = form.cleaned_data['readme']
            if is_valid_readme_filename(readme_file.name):
                datasetreadmefile = DataSetFile(parent_dataset=dataset, 
                                                file_contents=readme_file, 
                                                is_readme=True)
                datasetreadmefile.file_contents.save('readme.txt', 
                                                     readme_file, 
                                                     save=True)
                datasetreadmefile.save()
                
                dataset.is_active = True
                dataset.save()
                
                return HttpResponseRedirect(
                            reverse('epic.datasets.views.view_dataset', 
                                    kwargs={'item_id':dataset.id,
                                            'slug':dataset.slug}))
            else: 
                msg = u"""The readme '%(readme)s' is 
                          not a valid readme.txt file.""" \
                          % {'readme': readme_file.name,}
                form._errors['readme'] = ErrorList([msg])
        
    return render_to_response('datasets/upload_readme.html',
                              {'form': form, 'dataset': dataset},
                              context_instance=RequestContext(request))
Exemplo n.º 2
0
def _add_uploaded_files(dataset, uploaded_files):
    readme_file = _get_readme(uploaded_files)
    
    if readme_file:
        datasetreadmefile = ReadMeFile(parent_dataset=dataset, file_contents=readme_file)
        datasetreadmefile.file_contents.save('readme.txt', readme_file, save=True)
        datasetreadmefile.save()
    else:
        pass
    
#    # TODO: Maybe if the readme was a top level file that was uploaded, it should be pulled out...
#    if readme_file in uploaded_files:
#        uploaded_files.remove(readme_file)
    
    for uploaded_file in uploaded_files:
        new_datasetfile = DataSetFile(parent_dataset=dataset, file_contents=uploaded_file)
        new_datasetfile.file_contents.save(uploaded_file.name, uploaded_file, save=True)
        new_datasetfile.save()
        
    return readme_file
Exemplo n.º 3
0
Arquivo: views.py Projeto: cns-iu/nwb
def _add_uploaded_files(dataset, uploaded_files):
    """ Add all the uploaded files to the dataset.  The first 'readme' file
    found will be added with a flag that indicates it is a 'readme'.
    
    Arguments:
    dataset -- the dataset the files are to be added to
    uploaded_files -- the files to be added
    
    Raises:
    NoReadMeException -- if there was not a readme file in the uploaded_files
    
    """
    
    readme_file = _get_readme(uploaded_files)

    if uploaded_files:
        for uploaded_file in uploaded_files:
            if uploaded_file == readme_file:
                # The readme file will be added below
                pass
            else:
                new_datasetfile = DataSetFile(parent_dataset=dataset, file_contents=uploaded_file)
                new_datasetfile.file_contents.save(uploaded_file.name, uploaded_file, save=True)
                new_datasetfile.save()

        if readme_file:
            dataset_readmefile = DataSetFile(
                parent_dataset=dataset, file_contents=readme_file, is_readme=True)
            dataset_readmefile.file_contents.save('readme.txt', readme_file, save=True)
            dataset_readmefile.save()
        else:
            raise NoReadMeException
    else:
        # TODO: Something special marking the dataset as just being an advertisement?
        pass
Exemplo n.º 4
0
Arquivo: views.py Projeto: cns-iu/nwb
def create_dataset(request):
    if request.method != 'POST':
        #user has not filled out the upload form yet
        form = NewDataSetForm()
        add_formset = GeoLocationFormSet(prefix='add')
        remove_formset = RemoveGeoLocationFormSet(prefix='remove')
    else:
        form = NewDataSetForm(request.POST, request.FILES)
        add_formset = GeoLocationFormSet(request.POST, prefix='add')
        remove_formset = RemoveGeoLocationFormSet(request.POST, prefix='remove')
        
        if form.is_valid():
            name = form.cleaned_data['name']
            description = form.cleaned_data['description']
            uploaded_files = form.cleaned_data['files']
            tags = form.cleaned_data['tags']
            
            new_dataset = DataSet.objects.create(creator=request.user, name=name, description=description, slug=slugify(name))
            Tagging.objects.update_tags(tags,item=new_dataset, user=request.user)
            
            for geoloc in _get_geolocs_from_formset(add_formset, 'add_location'):
                new_dataset.geolocations.add(geoloc)
            
            for geoloc in _get_geolocs_from_formset(remove_formset, 'remove_location'):
                new_dataset.geolocations.remove(geoloc)
            
            for uploaded_file in uploaded_files:
                new_datasetfile = DataSetFile(parent_dataset=new_dataset, file_contents=uploaded_file)
                new_datasetfile.file_contents.save(uploaded_file.name, uploaded_file, save=True)
                new_datasetfile.save()
            
            return HttpResponseRedirect(reverse('epic.datasets.views.view_dataset', kwargs={'item_id':new_dataset.id,'slug':new_dataset.slug}))
        
    return render_to_response('datasets/create_dataset.html', 
                              {'form':form, 'add_formset': add_formset, 'remove_formset':remove_formset,}, 
                              context_instance=RequestContext(request))
Exemplo n.º 5
0
def _add_uploaded_files(dataset, uploaded_files):
    readme_file = _get_readme(uploaded_files)
    
    if readme_file:
        datasetreadmefile = DataSetFile(parent_dataset=dataset, file_contents=readme_file)
        datasetreadmefile.file_contents.save('readme.txt', readme_file, save=True)
        datasetreadmefile.save()
    else:
        # TODO: throw an error
        pass
    
    if readme_file in uploaded_files:
        uploaded_files.remove(readme_file)
    
    for uploaded_file in uploaded_files:
        new_datasetfile = DataSetFile(parent_dataset=dataset, file_contents=uploaded_file)
        new_datasetfile.file_contents.save(uploaded_file.name, uploaded_file, save=True)
        new_datasetfile.save()
Exemplo n.º 6
0
def create_dataset(request):
	if request.method != 'POST':
		#user has not filled out the upload form yet
		form = NewDataSetForm()
		add_formset = GeoLocationFormSet(prefix='add')
		remove_formset = RemoveGeoLocationFormSet(prefix='remove')
		return render_to_response('datasets/create_dataset.html', {'form': form, 'add_formset': add_formset, 'remove_formset':remove_formset, 'user':request.user,})
	else:
		# Create all the forms and formsets from the post data
		form = NewDataSetForm(request.POST, request.FILES)
		add_formset = GeoLocationFormSet(request.POST, prefix='add')
		remove_formset = RemoveGeoLocationFormSet(request.POST, prefix='remove')
		
		if form.is_valid():
			name = form.cleaned_data['name']
			description = form.cleaned_data['description']
			uploaded_files = form.cleaned_data['files']
			tags = form.cleaned_data['tags']
			
			new_dataset = DataSet.objects.create(creator=request.user, name=name, description=description, slug=slugify(name))
			new_dataset.tags.update_tags(tags, user=request.user)
			
			# Add all the locations specified in the add_formset
			if not add_formset.is_valid():
				print 'The add formset for the geolocations for the edit dataset page was not valid'
			else:
				# Get all of the geolocations
				for add_form in add_formset.forms:
					try:
						location = add_form.cleaned_data['add_location']
						import re
						# This pattern will match on [[-#.#, -#.#], '*', *
						location_pattern = re.compile(r"""^\[\[(?P<lat>-?\d+\.\d+), (?P<lng>-?\d+\.\d+)\], '(?P<name>.+?)',(?:.*)""")
						location_match = location_pattern.match(location)
						location_dict = location_match.groupdict()
						lat = location_dict['lat']
						lng = location_dict['lng']
						canonical_name = unicode(location_dict['name'])
						
						# If the location already exists, use it otherwise create a new one
						try:
							geoloc = GeoLoc.objects.get(longitude=lng, latitude=lat, canonical_name=canonical_name)
						except:
							geoloc = GeoLoc(longitude=lng, latitude=lat, canonical_name=canonical_name)
							geoloc.save()
						
						# Add the found/created location to the dataset
						new_dataset.geolocations.add(geoloc)
					except:
						print 'There was a problem in adding the location from the hidden field to the database'
			
			
			if not remove_formset.is_valid():
				print 'The remove formset for the geolocations for the edit dataset page was not valid'
			else:
				for remove_form in remove_formset.forms:
					try:
						location = remove_form.cleaned_data['remove_location']
						import re
						# This pattern will match on [[-#.#, -#.#], '*', *
						location_pattern = re.compile(r"""^\[\[(?P<lat>-?\d+\.\d+), (?P<lng>-?\d+\.\d+)\], '(?P<name>.+?)',(?:.*)""")
						location_match = location_pattern.match(location)
						location_dict = location_match.groupdict()
						lat = location_dict['lat']
						lng = location_dict['lng']
						canonical_name = unicode(location_dict['name'])

						try:
							geoloc = GeoLoc.objects.get(longitude=lng,latitude=lat, canonical_name=canonical_name)
						except:
							print "The geolocation to be removed does not appear to have been attached to this dataset"
						
						# Remove the geoloc from the dataset.  Note that the geoloc will still be in the database incase other things were attached.
						new_dataset.geolocations.remove(geoloc)
					except:
						print 'There was a problem in removing the location from the dataset'
			
			for uploaded_file in uploaded_files:
			 	new_datasetfile = DataSetFile(parent_dataset=new_dataset, file_contents=uploaded_file)
				new_datasetfile.file_contents.save(uploaded_file.name, uploaded_file, save=True)
				new_datasetfile.save()
			
			#show them the page for the dataset we just created
			return HttpResponseRedirect(reverse('epic.datasets.views.view_dataset', kwargs={'item_id':new_dataset.id,'slug':new_dataset.slug}))
		else:
			#form wasn't filled out correctly
			return render_to_response('datasets/create_dataset.html', {'form':form, 'add_formset': add_formset, 'remove_formset':remove_formset, 'user':request.user})