Exemple #1
0
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
        )
Exemple #2
0
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
        )