Example #1
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')
    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)
            
            _add_uploaded_files(new_dataset, uploaded_files)
            
            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))
Example #2
0
File: views.py Project: cns-iu/nwb
def create_dataset(request):
    if request.method != "POST":
        form = NewDataSetForm(request.user)
        geoloc_add_formset = GeoLocationFormSet(prefix="add")
        geoloc_remove_formset = RemoveGeoLocationFormSet(prefix="remove")
        ref_formset = AcademicReferenceFormSet(prefix="reference")
        author_formset = AuthorFormSet(prefix="author")
    else:
        form = NewDataSetForm(request.user, request.POST, request.FILES)
        geoloc_add_formset = GeoLocationFormSet(request.POST, prefix="add")
        geoloc_remove_formset = RemoveGeoLocationFormSet(request.POST, prefix="remove")
        ref_formset = AcademicReferenceFormSet(request.POST, prefix="reference")
        author_formset = AuthorFormSet(request.POST, prefix="author")

        if form.is_valid() and ref_formset.is_valid() and author_formset.is_valid():

            new_dataset = _save_new_dataset(form, request.user)
            _save_previous_version(form, new_dataset)
            _save_tags(form, new_dataset, request.user)
            _save_geolocs(geoloc_add_formset, geoloc_remove_formset, new_dataset)
            _save_references(ref_formset, new_dataset)
            _save_authors(author_formset, new_dataset)

            #   If there is a readme, activate the dataset and let
            # the user view the new dataset, otherwise send
            # them to a page where they can specify the readme.
            try:
                uploaded_files = form.cleaned_data["files"]
                # Raises a 'NoReadMeException' if no readme is found.
                _add_uploaded_files(new_dataset, uploaded_files)
                new_dataset.is_active = True
                new_dataset.save()

                return HttpResponseRedirect(
                    reverse(
                        "epic.datasets.views.view_dataset", kwargs={"item_id": new_dataset.id, "slug": new_dataset.slug}
                    )
                )
            except NoReadMeException:
                return HttpResponseRedirect(
                    reverse(
                        "epic.datasets.views.upload_readme",
                        kwargs={"item_id": new_dataset.id, "slug": new_dataset.slug},
                    )
                )

    return render_to_response(
        "datasets/create_dataset.html",
        {
            "form": form,
            "geoloc_add_formset": geoloc_add_formset,
            "geoloc_remove_formset": geoloc_remove_formset,
            "ref_formset": ref_formset,
            "author_formset": author_formset,
        },
        context_instance=RequestContext(request),
    )
Example #3
0
def create_dataset(request):
    if request.method != 'POST':
        form = NewDataSetForm(request.user)
        geoloc_add_formset = GeoLocationFormSet(prefix='add')
        geoloc_remove_formset = RemoveGeoLocationFormSet(prefix='remove')
        ref_formset = AcademicReferenceFormSet(prefix='reference')
        author_formset = AuthorFormSet(prefix='author')
    else:
        form = NewDataSetForm(request.user, request.POST, request.FILES)
        geoloc_add_formset = GeoLocationFormSet(request.POST, prefix='add')
        geoloc_remove_formset = RemoveGeoLocationFormSet(request.POST, 
                                                         prefix='remove')
        ref_formset = AcademicReferenceFormSet(request.POST, 
                                               prefix='reference')
        author_formset = AuthorFormSet(request.POST, prefix='author')
        
        if form.is_valid() and ref_formset.is_valid() \
                and author_formset.is_valid():
            
            new_dataset = _save_new_dataset(form, request.user)
            _save_previous_version(form, new_dataset)
            _save_tags(form, new_dataset, request.user)
            _save_geolocs(geoloc_add_formset, 
                          geoloc_remove_formset, 
                          new_dataset)
            _save_references(ref_formset, new_dataset)
            _save_authors(author_formset, new_dataset)
            
            #   If there is a readme, activate the dataset and let
            # the user view the new dataset, otherwise send
            # them to a page where they can specify the readme.
            try:
                uploaded_files = form.cleaned_data['files']
                # Raises a 'NoReadMeException' if no readme is found.
                _add_uploaded_files(new_dataset, uploaded_files)
                
                new_dataset.is_active = True
                new_dataset.save()
                
                return HttpResponseRedirect(
                            reverse('epic.datasets.views.view_dataset', 
                                    kwargs={'item_id':new_dataset.id,
                                            'slug':new_dataset.slug}))
            except NoReadMeException:
                return HttpResponseRedirect(
                            reverse('epic.datasets.views.upload_readme', 
                                    kwargs={'item_id':new_dataset.id,
                                            'slug':new_dataset.slug}))
        
    return render_to_response('datasets/create_dataset.html', 
                              {'form': form, 
                               'geoloc_add_formset': geoloc_add_formset, 
                               'geoloc_remove_formset': geoloc_remove_formset,
                               'ref_formset': ref_formset,
                               'author_formset': author_formset}, 
                              context_instance=RequestContext(request))
Example #4
0
def create_dataset(request):
    if request.method != 'POST':
        #user has not filled out the upload form yet
        form = NewDataSetForm(request.user)
        add_formset = GeoLocationFormSet(prefix='add')
        remove_formset = RemoveGeoLocationFormSet(prefix='remove')
    else:
        form = NewDataSetForm(request.user, 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']
            previous_version = form.cleaned_data['previous_version']
            
            new_dataset = DataSet.objects.create(creator=request.user, 
                                                 name=name, 
                                                 description=description, 
                                                 slug=slugify(name),
                                                 previous_version=previous_version, 
                                                 is_active=False)
            # TODO: Maybe only the latest version of a dataset should show up
            #  override the objects.all() or objects.active() maybe?
            if previous_version:
                #(Note that this will overwrite previous "new versions")
                previous_version.next_version = new_dataset
                previous_version.save()
            
            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)
            
            try:
                _add_uploaded_files(new_dataset, uploaded_files)
                new_dataset.is_active = True
                new_dataset.save()
                return HttpResponseRedirect(
                            reverse('epic.datasets.views.view_dataset', 
                                    kwargs={'item_id':new_dataset.id,
                                            'slug':new_dataset.slug}))
            except NoReadMeException:
                return HttpResponseRedirect(
                            reverse('epic.datasets.views.upload_readme', 
                                    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))
Example #5
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})
Example #6
0
def create_dataset(request):
    if request.method != "POST":
        # user has not filled out the upload form yet
        form = NewDataSetForm(request.user)
        add_formset = GeoLocationFormSet(prefix="add")
        remove_formset = RemoveGeoLocationFormSet(prefix="remove")
    else:
        form = NewDataSetForm(request.user, 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"]
            previous_version = form.cleaned_data["previous_version"]

            new_dataset = DataSet.objects.create(
                creator=request.user,
                name=name,
                description=description,
                slug=slugify(name),
                previous_version=previous_version,
                is_active=False,
            )
            # TODO: Maybe only the latest version of a dataset should show up
            #  override the objects.all() or objects.active() maybe?
            if previous_version:
                previous_version.next_version = new_dataset
                previous_version.save()

            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)

            try:
                _add_uploaded_files(new_dataset, uploaded_files)
                new_dataset.is_active = True
                new_dataset.save()
                return HttpResponseRedirect(
                    reverse(
                        "epic.datasets.views.view_dataset", kwargs={"item_id": new_dataset.id, "slug": new_dataset.slug}
                    )
                )
            except NoReadMeException:
                return HttpResponseRedirect(
                    reverse(
                        "epic.datasets.views.upload_readme",
                        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),
    )