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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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))
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)
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))
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)
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()
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)
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)
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)
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)
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)
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)
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)
def delete(self): """Delete the link type and go the menu page for link types.""" self.linktype.delete() navigateTo("EditLinkControl.py", self.session.name)
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)
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)
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)
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)
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)