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))
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), )
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))
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))
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})
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), )