Ejemplo n.º 1
0
    def run(self):
        """Override to handle routing to Mailers menu."""

        if self.request == self.SUBMENU:
            navigateTo("Mailers.py", self.session.name)
        else:
            Controller.run(self)
Ejemplo n.º 2
0
    def run(self):
        """Override base class to add action for new button."""

        if self.request == self.ADD_NEW_USER:
            navigateTo(self.EDIT_USER, self.session.name)
        else:
            Controller.run(self)
Ejemplo n.º 3
0
    def run(self):
        """Override the base class version, as this isn't a standard report."""

        if not self.doc or self.request == self.FILTERS:
            navigateTo("EditFilters.py", self.session.name)
        elif not self.request or self.request in (self.VIEW, self.COMPARE):
            self.show_form()
        else:
            Controller.run(self)
Ejemplo n.º 4
0
    def run(self):
        """Override base class to add action for new button."""

        if self.request == self.ADD_NEW_LINK_TYPE:
            opts = dict(linkact="addlink")
            navigateTo(self.EDIT_LINK_TYPE, self.session.name, **opts)
        elif self.request == self.SHOW_ALL:
            navigateTo(self.SHOW_ALL_LINK_TYPES, self.session.name)
        else:
            Controller.run(self)
Ejemplo n.º 5
0
    def delete(self):
        """Delete the current filter set and navigate back to the sets."""

        filter_set = FilterSet(self.session, id=self.set.id)
        name = filter_set.name
        try:
            filter_set.delete()
        except Exception as e:
            self.logger.exception("failure deleting %s", self.set.name)
            bail(str(e))
        navigateTo(self.EDIT_SETS, self.session.name, deleted=name)
Ejemplo n.º 6
0
    def run(self):
        """Support our custom commands and bypass a form."""

        if not self.request:
            self.show_report()
        elif self.request == self.COMPARE:
            navigateTo("FilterDiffs.py", self.session.name)
        elif self.request == self.PARAMS:
            navigateTo("GetXsltParams.py", self.session.name)
        else:
            Controller.run(self)
Ejemplo n.º 7
0
    def run(self):
        """Overload to check permissions and to handle the publish command."""

        if not self.session.can_do("USE PUBLISHING SYSTEM"):
            self.bail("You are not authorized to use the publishing system")
        elif self.request == self.MANAGE_STATUSES:
            navigateTo("ManagePubStatus.py", self.session.name)
        elif self.request == self.PUBLISH:
            self.publish()
        elif self.request == self.SUBMIT:
            self.show_form()
        else:
            Controller.run(self)
Ejemplo n.º 8
0
    def run(self):
        """Override to provide custom routing, bypassing forms."""

        if self.request == self.SUBMENU:
            navigateTo(self.LINK_URL, self.session.name)
        elif not self.request:
            try:
                self.show_report()
            except Exception as e:
                self.logger.exception("Report failure")
                self.bail(e)
        else:
            Controller.run(self)
Ejemplo n.º 9
0
    def save(self):
        """Save a new or modified row in the selected valid values table."""

        if not self.id:
            cols = ", ".join(self.FIELDS[1:])
            args = self.value, self.position
            query = f"INSERT INTO {self.table} ({cols}) VALUES (?,?)"
        else:
            sets = ", ".join([f"{col} = ?" for col in self.FIELDS[1:]])
            args = self.value, self.position, self.id
            query = f"UPDATE {self.table} SET {sets} WHERE value_id = ?"
        self.cursor.execute(query, args)
        self.conn.commit()
        navigateTo(self.script, self.session.name, table=self.table)
Ejemplo n.º 10
0
    def delete_job(self):
        """
        Drop the table row for a job (we already have confirmation from
        the user).
        """

        query = f"DELETE FROM {Job.TABLE} WHERE english_id = ?"
        conn = db.connect()
        cursor = conn.cursor()
        cursor.execute(query, self.english_id)
        query = f"DELETE FROM {Job.ATTACHMENT} WHERE english_id = ?"
        cursor.execute(query, self.english_id)
        conn.commit()
        self.logger.info("removed translation job for CDR%d", self.english_id)
        navigateTo("translation-jobs.py", self.session.name)
Ejemplo n.º 11
0
    def run(self):
        """Override base class method because we have multiple forms."""

        if not self.session.can_do("MANAGE DB TABLES"):
            self.bail("not authorized")
        if self.request in (self.ADD, self.SUBMIT):
            self.show_form()
        elif self.request == self.DROP:
            self.drop()
        elif self.request == self.SAVE:
            self.save()
        elif self.request == self.CANCEL:
            navigateTo(self.script, self.session.name, table=self.table)
        else:
            Controller.run(self)
Ejemplo n.º 12
0
    def run(self):
        """Override the top-level entry point, as this isn't a report."""

        try:
            if self.request == self.SAVE:
                self.save()
            elif self.request == self.CANCEL:
                navigateTo("EditLinkControl.py", self.session.name)
            elif self.request == self.DELETE:
                self.delete()
            else:
                Controller.run(self)
        except Exception as e:
            self.logger.exception("link type editing failure")
            self.bail(str(e))
Ejemplo n.º 13
0
    def run(self):
        """Handle our custom actions."""

        if not self.session.can_do("MODIFY FILTER SET"):
            bail("You are not authorized to use this page")
        try:
            request = self.request or self.fields.getvalue("action")
            if request == self.SAVE:
                return self.save()
            elif self.request == self.DELETE:
                return self.delete()
            elif self.request == self.SETS:
                navigateTo(self.EDIT_SETS, self.session.name)
        except Exception as e:
            self.logger.exception("Failure")
            bail(str(e))
        Controller.run(self)
Ejemplo n.º 14
0
    def populate_form(self, page):
        """Add the menu links available for this user.

        If the user only has one menu option, go there directly.
        """

        page.body.set("class", "admin-menu")
        links = []
        for group, filename, label in self.MENUS:
            if group in self.user.groups:
                script = filename
                links.append(page.B.LI(page.menu_link(script, label)))
        if not links:
            script = "GuestUsers.py"
            links = [page.B.LI(page.menu_link(script, "Guest User"))]
        if len(links) == 1:
            navigateTo(script, self.session.name)
        page.form.append(page.B.OL(*links))
Ejemplo n.º 15
0
    def drop(self):
        """Remove a value from the table.

        Will fail with an error message displayed if the value
        is still in use.
        """

        if not self.id:
            self.bail()
        query = f"DELETE FROM {self.table} WHERE value_id = ?"
        try:
            self.cursor.execute(query, self.id)
            self.conn.commit()
            navigateTo(self.script, self.session, table=self.table)
        except Exception as e:
            args = self.id, self.table
            self.logger.exception("failure dropping row %s from %s", *args)
            self.bail(e)
Ejemplo n.º 16
0
    def show_report(self):
        """
        Override the base class because we're storing data, not
        creating a report. Modified to also populate the history
        table.
        """

        if self.have_required_values:
            self.process_attachments()
            if self.job.changed:
                conn = db.connect()
                cursor = conn.cursor()
                params = [getattr(self, name) for name in Job.FIELDS]
                params.append(getattr(self, Job.KEY))
                self.logger.info("storing translation job state %s", params)
                placeholders = ", ".join(["?"] * len(params))
                cols = ", ".join(Job.FIELDS + (Job.KEY,))
                strings = Job.HISTORY, cols, placeholders
                cursor.execute(self.INSERT.format(*strings), params)
                if self.job.new:
                    strings = (Job.TABLE, cols, placeholders)
                    query = self.INSERT.format(*strings)
                else:
                    cols = ", ".join([("%s = ?" % name) for name in Job.FIELDS])
                    strings = (Job.TABLE, cols, Job.KEY)
                    query = self.UPDATE.format(*strings)
                try:
                    cursor.execute(query, params)
                    conn.commit()
                except Exception as e:
                    if "duplicate key" in str(e).lower():
                        self.logger.error("duplicate translation job ID")
                        self.bail("attempt to create duplicate job")
                    else:
                        self.logger.error("database failure: %s", e)
                        self.bail(f"database failure: {e}")
                self.logger.info("translation job state stored successfully")
                job = Job(self)
                if self.alert_needed(job):
                    self.alert(job)
            navigateTo("translation-jobs.py", self.session.name)
        else:
            self.show_form()
Ejemplo n.º 17
0
    def run(self):
        """Add some custom routing."""

        if not self.request:
            if self.id or self.name or self.age or self.status:
                self.request = self.SUBMIT
        elif self.request == self.BACK:
            return navigateTo(self.script, self.session.name)
        elif self.request == self.REFRESH:
            self.request = self.SUBMIT
        Controller.run(self)
Ejemplo n.º 18
0
    def run(self):
        """Override the base class version as this is not a standard report."""

        try:
            if not self.session.can_do("MANAGE SCHEDULER"):
                self.bail("Account not allowed to manage the scheduler")
        except Exception as e:
            self.bail(e)
        try:
            if self.request == self.SAVE:
                self.save_job()
            elif self.request == self.DELETE:
                self.delete_job()
            elif self.request == self.RUN:
                self.run_job()
            elif self.request == self.JOBS:
                navigateTo(self.script, self.session.name)
            else:
                Controller.run(self)
        except Exception as e:
            self.bail(e)
Ejemplo n.º 19
0
    def run(self):
        """Provide routing to our custom commands."""

        if self.request == self.DEEP:
            navigateTo(self.script, self.session.name)
        elif self.request == self.SHALLOW:
            navigateTo(self.script, self.session.name, depth="shallow")
        elif self.request == self.FILTER_SETS:
            navigateTo(self.EDIT_FILTER_SETS, self.session.name)
        else:
            Controller.run(self)
Ejemplo n.º 20
0
    def run(self):
        """Override base class to add action for new button."""

        if self.request == self.ADD:
            navigateTo(self.EDIT_FILTER_SET, self.session.name)
        elif self.request == self.DEEP:
            navigateTo(self.SHOW_SETS, self.session.name)
        elif self.request == self.REPORT:
            navigateTo(self.SHOW_SETS, self.session.name, depth="shallow")
        else:
            Controller.run(self)
Ejemplo n.º 21
0
    def run(self):
        """Override base class method, as we support extra buttons/tasks."""

        if not self.session.can_do("MANAGE TRANSLATION QUEUE"):
            self.bail("not authorized")
        if self.request == self.ADD:
            navigateTo("glossary-translation-job.py", self.session.name)
        elif self.request == self.SUMMARY:
            navigateTo("translation-jobs.py", self.session.name)
        elif self.request == self.MEDIA:
            navigateTo("media-translation-jobs.py", self.session.name)
        elif self.request == self.PURGE:
            if not self.session.can_do("PRUNE TRANSLATION QUEUE"):
                self.bail("not authorized")
            self.cursor.execute(
                "DELETE FROM glossary_translation_job"
                "      WHERE state_id = ("
                "     SELECT value_id"
                "       FROM glossary_translation_state"
                "      WHERE value_name = 'Translation Made Publishable')"
            )
            count = self.cursor.rowcount
            self.conn.commit()
            self.message = f"Purged jobs for {count:d} published translations."
        elif self.request == self.ASSIGN:
            count = 0
            fields = "state_id", "comments", "assigned_to"
            history_fields = fields + ("doc_id", "state_date")
            placeholders = ", ".join(["?"] * len(history_fields))
            table = "glossary_translation_job_history"
            args = table, ", ".join(history_fields), placeholders
            insert = "INSERT INTO {} ({}) VALUES ({})".format(*args)
            table = "glossary_translation_job"
            args = table, "assigned_to = ?, state_date = ?", "doc_id"
            update = "UPDATE {} SET {} WHERE {} = ?".format(*args)
            for job in self.fields.getlist("assignments"):
                query = self.Query("glossary_translation_job", *fields)
                query.where(query.Condition("doc_id", job))
                row = query.execute(self.cursor).fetchone()
                if not row:
                    self.bail()
                if row.assigned_to == self.assignee:
                    continue
                params = [getattr(row, name) for name in fields[:-1]]
                params.append(self.assignee)
                params.append(job)
                params.append(self.started)
                self.cursor.execute(insert, params)
                params = self.assignee, self.started, job
                self.cursor.execute(update, params)
                self.conn.commit()
                count += 1
            self.message = f"Re-assigned {count:d} jobs"
        Controller.run(self)
Ejemplo n.º 22
0
    def run(self):
        """
        Override the base class method to handle additional buttons.
        """

        if not self.session or not self.session.can_do(self.ACTION):
            self.bail("not authorized")
        if self.request == self.JOBS:
            navigateTo("translation-jobs.py", self.session.name)
        elif self.request == self.DELETE:
            self.delete_job()
        elif self.request == self.GLOSSARY:
            navigateTo("glossary-translation-jobs.py", self.session.name)
        elif self.request == self.MEDIA:
            navigateTo("media-translation-jobs.py", self.session.name)
        Controller.run(self)
Ejemplo n.º 23
0
    def run(self):
        """Override base class method, as we support extra buttons/tasks."""

        if self.request == self.ADD:
            navigateTo("translation-job.py", self.session.name)
        elif self.request == self.GLOSSARY:
            navigateTo("glossary-translation-jobs.py", self.session.name)
        elif self.request == self.MEDIA:
            navigateTo("media-translation-jobs.py", self.session.name)
        if self.request == self.PURGE:
            if not self.session.can_do("PRUNE TRANSLATION QUEUE"):
                self.bail("not authorized")
            self.cursor.execute(
                "DELETE FROM summary_translation_job"
                "      WHERE state_id = ("
                "     SELECT value_id"
                "       FROM summary_translation_state"
                "      WHERE value_name = 'Translation Made Publishable')")
            count = self.cursor.rowcount
            self.conn.commit()
            self.message = f"Purged jobs for {count:d} published translations."
        Controller.run(self)
Ejemplo n.º 24
0
    def delete(self):
        """Delete the link type and go the menu page for link types."""

        self.linktype.delete()
        navigateTo("EditLinkControl.py", self.session.name)
Ejemplo n.º 25
0
    def return_to_doctypes_menu(self, deleted=None):
        """Go back to the menu listing all the CDR document types."""

        opts = dict(deleted=deleted) if deleted else {}
        navigateTo(self.EDIT_DOCTYPES, self.session.name, **opts)
Ejemplo n.º 26
0
    def return_to_actions_menu(self, deleted=None):
        """Go back to the menu listing all the CDR actions."""

        opts = dict(deleted=deleted) if deleted else {}
        navigateTo(self.EDIT_ACTIONS, self.session.name, **opts)
Ejemplo n.º 27
0
    def return_to_users_menu(self, deleted=None):
        """Go back to the menu listing all the CDR user accounts."""

        opts = dict(deleted=deleted) if deleted else {}
        navigateTo(self.EDIT_USERS, self.session.name, **opts)
Ejemplo n.º 28
0
    def delete_job(self):
        """Remove the current job and return to the job list."""

        self.cursor.execute("DELETE FROM scheduled_job WHERE id = ?", self.id)
        self.conn.commit()
        navigateTo(self.script, self.session.name)
Ejemplo n.º 29
0
    def return_to_groups_menu(self, deleted=None):
        """Go back to the menu listing all the CDR groups."""

        opts = dict(deleted=deleted) if deleted else {}
        navigateTo(self.EDIT_GROUPS, self.session.name, **opts)