class ExampleEditView(CalculatorView): def get(self): # TODO get example to render and edit without logging in return redirect(url_for('.edit', dset_name="Kiparsky")) @init_tableaux_form_on_self @validates_tableaux_form def post(self): self._create_dset_for_editing() self.prepare_to_change_dset_user() return redirect(self._generate_redirect_url()) def _create_dset_for_editing(self): self.dset = Dataset(data=self.form.data, data_is_from_form=True) self.dset.remove_old_files() self.dset.user = get_username() self.dset.name = self._create_temporary_dset_name() self.dset.id = None # to get a new id when saved self.dset.classical = not self.is_submitting_to_all_grammars() self.dset.save() def _generate_redirect_url(self): return url_for( 'grammars.grammars', dset_name=self.dset.name, sort_value=0, page=0, classical=self.dset.classical, sort_by='rank_volume' ) def _create_temporary_dset_name(self): # keep trying strings until you get a unique one temp_name = self._get_temp_name_attempt() while Dataset.objects(name=temp_name, user=get_username()): temp_name = self._get_temp_name_attempt() return temp_name def _get_temp_name_attempt(self): return self.dset.name + '-tmp-' + self.make_unique_random_dset_name() def get_redisplay_html(self): return render_template( 'tableaux.html', form=self.form, active='calculator', dset_name="Kiparsky", edit=True )
class EditView(CalculatorView): @requires_login def get(self, dset_name): self.dset_name = dset_name if self._need_to_change_dset_user(): self._change_dset_user() return self._edit_get_html() def _need_to_change_dset_user(self): try: return session.pop('save_new_user') except KeyError: return False def _change_dset_user(self): dset = get_dset(self.dset_name) dset.user = get_username() dset.save() flash("Saved %s as %s!" % (dset.name, dset.user)) def _edit_get_html(self): return render_template('tableaux.html') @init_tableaux_form_on_self @validates_tableaux_form def post(self, dset_name): self.dset_name = dset_name if self._is_cancelling_edit(): return self._cancel_edit_html() else: return self._successful_edit_html() def _is_cancelling_edit(self): return self.submit == "Cancel editing" def _cancel_edit_html(self): flash("Canceled editing %s" % self.dset_name) return redirect(url_for("users.account", username=get_username())) def _successful_edit_html(self): self._delete_old_version() self._save_new_version() return self._generate_redirect() def _delete_old_version(self): self.dset = Dataset(data=self.form.data, data_is_from_form=True) old_dset = get_dset(self.dset_name) self.dset.user = old_dset.user old_dset.delete() self.dset.remove_old_files() def _save_new_version(self): self.dset.classical = not self.is_submitting_to_all_grammars() self.dset.save() def _generate_redirect(self): if self.is_submitting_to_entailments(): redirect_url = url_for('grammars.entailments', dset_name=self.dset.name) else: redirect_url = url_for('grammars.grammars', dset_name=self.dset.name, sort_value=0, page=0, classical=self.dset.classical, sort_by='rank_volume') return redirect(redirect_url) def get_redisplay_html(self): return render_template( 'tableaux.html', form=self.form, active='calculator', t_order=False, dset_name=self.form.name, edit=True )