def _process(self): source = User.get_one(request.args['source']) target = User.get_one(request.args['target']) problems = [] if source == target: problems.append((_("Users are the same!"), 'error')) if (source.first_name.strip().lower() != target.first_name.strip().lower() or source.last_name.strip().lower() != target.last_name.strip().lower()): problems.append((_("Users' names seem to be different!"), 'warning')) if source.is_pending: problems.append((_("Source user has never logged in to Indico!"), 'warning')) if target.is_pending: problems.append((_("Target user has never logged in to Indico!"), 'warning')) if source.is_deleted: problems.append((_("Source user has been deleted!"), 'error')) if target.is_deleted: problems.append((_("Target user has been deleted!"), 'error')) return jsonify({ 'problems': problems })
def _process(self): source = User.get_one(request.args['source']) target = User.get_one(request.args['target']) problems = [] if source == target: problems.append((_("Users are the same!"), 'error')) if (source.first_name.strip().lower() != target.first_name.strip().lower() or source.last_name.strip().lower() != target.last_name.strip().lower()): problems.append( (_("Users' names seem to be different!"), 'warning')) if source.is_pending: problems.append( (_("Source user has never logged in to Indico!"), 'warning')) if target.is_pending: problems.append( (_("Target user has never logged in to Indico!"), 'warning')) if source.is_deleted: problems.append((_("Source user has been deleted!"), 'error')) if target.is_deleted: problems.append((_("Target user has been deleted!"), 'error')) return jsonify({'problems': problems})
def category_cleanup(): from indico.modules.events import Event cfg = Config.getInstance() janitor_user = User.get_one(cfg.getJanitorUserId()) logger.debug("Checking whether any categories should be cleaned up") for categ_id, days in cfg.getCategoryCleanup().iteritems(): try: category = Category.get(int(categ_id), is_deleted=False) except KeyError: logger.warning("Category %s does not exist!", categ_id) continue now = now_utc() to_delete = Event.query.with_parent(category).filter(Event.created_dt < (now - timedelta(days=days))).all() if not to_delete: continue logger.info("Category %s: %s events were created more than %s days ago and will be deleted", categ_id, len(to_delete), days) for i, event in enumerate(to_delete, 1): logger.info("Deleting %s", event) event.as_legacy.delete(user=janitor_user) if i % 100 == 0: db.session.commit() DBMgr.getInstance().commit() db.session.commit() DBMgr.getInstance().commit()
def category_cleanup(): cfg = Config.getInstance() janitor_user = User.get_one(cfg.getJanitorUserId()) logger.debug("Checking whether any categories should be cleaned up") for categ_id, days in cfg.getCategoryCleanup().iteritems(): try: category = CategoryManager().getById(categ_id) except KeyError: logger.warning("Category %s does not exist!", categ_id) continue now = now_utc() to_delete = [ev for ev in category.conferences if (now - ev._creationDS) > timedelta(days=days)] if not to_delete: continue logger.info("Category %s: %s events were created more than %s days ago and will be deleted", categ_id, len(to_delete), days) for i, event in enumerate(to_delete, 1): logger.info("Deleting %s", event) event.delete(user=janitor_user) if i % 100 == 0: db.session.commit() DBMgr.getInstance().commit() db.session.commit() DBMgr.getInstance().commit()
def category_cleanup(): cfg = Config.getInstance() janitor_user = User.get_one(cfg.getJanitorUserId()) logger.debug("Checking whether any categories should be cleaned up") for categ_id, days in cfg.getCategoryCleanup().iteritems(): try: category = CategoryManager().getById(categ_id) except KeyError: logger.warning("Category {} does not exist!".format(categ_id)) continue now = now_utc() to_delete = [ev for ev in category.conferences if (now - ev._creationDS) > timedelta(days=days)] if not to_delete: continue logger.info("Category {}: {} events were created more than {} days ago and will be deleted".format( categ_id, len(to_delete), days )) for i, event in enumerate(to_delete, 1): logger.info("Deleting {}".format(event)) event.delete(user=janitor_user) if i % 100 == 0: db.session.commit() DBMgr.getInstance().commit() db.session.commit() DBMgr.getInstance().commit()
def _process_args(self): RHAdminBase._process_args(self) if request.form.get('undo') == '1': self.user = None else: self.user = User.get_one(int(request.form['user_id']), is_deleted=False)
def category_cleanup(): from indico.modules.events import Event cfg = Config.getInstance() janitor_user = User.get_one(cfg.getJanitorUserId()) logger.debug("Checking whether any categories should be cleaned up") for categ_id, days in cfg.getCategoryCleanup().iteritems(): try: category = Category.get(int(categ_id), is_deleted=False) except KeyError: logger.warning("Category %s does not exist!", categ_id) continue now = now_utc() to_delete = Event.query.with_parent(category).filter(Event.created_dt < (now - timedelta(days=days))).all() if not to_delete: continue logger.info("Category %s: %s events were created more than %s days ago and will be deleted", categ_id, len(to_delete), days) for i, event in enumerate(to_delete, 1): logger.info("Deleting %s", event) event.delete('Cleaning up category', janitor_user) if i % 100 == 0: db.session.commit() db.session.commit()
def migrate(self): # disable onupdate for attachment lastmod timestamp # see https://bitbucket.org/zzzeek/sqlalchemy/issue/3471/ why it's needed Attachment.__table__.columns.modified_dt.onupdate = None janitor_user = User.get_one(self.janitor_user_id) self.print_msg('Using janitor user {}'.format(janitor_user), always=True) self.janitor_user_id = janitor_user.id self.todo = OrderedDict([(AttachmentFolder, []), (AttachmentFolderPrincipal, []), (Attachment, []), (AttachmentPrincipal, []), (AttachmentFile, []), (LegacyAttachmentFolderMapping, []), (LegacyAttachmentMapping, [])]) self.ids = { AttachmentFolder: _get_pg_id(AttachmentFolder.id), Attachment: _get_pg_id(Attachment.id), AttachmentFile: _get_pg_id(AttachmentFile.id), } with patch_default_group_provider(self.default_group_provider): self.migrate_category_attachments() self.migrate_event_attachments() self.print_step('fixing id sequences') self.fix_sequences('attachments') self.update_merged_ids()
def load_data(self): self.print_step("Loading some data") self.janitor_user = User.get_one(self.janitor_user_id) all_users_query = User.query.options(joinedload('_all_emails')).filter_by(is_deleted=False) for user in all_users_query: for email in user.all_emails: self.all_users_by_email[email] = user
def _checkParams(self, params): RHAdminBase._checkParams(self, params) if request.form.get('undo') == '1': self.user = None else: self.user = User.get_one(int(request.form['user_id']), is_deleted=False)
def migrate_event_notes(self): self.print_step('migrating event notes') janitor_user = User.get_one(self.janitor_user_id) self.print_msg('Using janitor user {}'.format(janitor_user), always=True) for event, obj, minutes, special_prot in committing_iterator(self._iter_minutes()): if special_prot: self.print_warning( cformat('%{yellow!}{} minutes have special permissions; skipping them').format(obj), event_id=event.id ) continue path = get_archived_file(minutes, self.archive_dirs)[1] if path is None: self.print_error(cformat('%{red!}{} minutes not found on disk; skipping them').format(obj), event_id=event.id) continue with open(path, 'r') as f: data = convert_to_unicode(f.read()).strip() if not data: self.print_warning(cformat('%{yellow}{} minutes are empty; skipping them').format(obj), always=False, event_id=event.id) continue note = EventNote(linked_object=obj) note.create_revision(RenderMode.html, data, janitor_user) db.session.add(note) if not self.quiet: self.print_success(cformat('%{cyan}{}').format(obj), event_id=event.id)
def migrate(self): # disable onupdate for attachment lastmod timestamp # see https://bitbucket.org/zzzeek/sqlalchemy/issue/3471/ why it's needed Attachment.__table__.columns.modified_dt.onupdate = None janitor_user = User.get_one(self.janitor_user_id) self.print_msg('Using janitor user {}'.format(janitor_user), always=True) self.janitor_user_id = janitor_user.id self.todo = OrderedDict([ (AttachmentFolder, []), (AttachmentFolderPrincipal, []), (Attachment, []), (AttachmentPrincipal, []), (AttachmentFile, []), (LegacyAttachmentFolderMapping, []), (LegacyAttachmentMapping, []) ]) self.ids = { AttachmentFolder: _get_pg_id(AttachmentFolder.id), Attachment: _get_pg_id(Attachment.id), AttachmentFile: _get_pg_id(AttachmentFile.id), } with patch_default_group_provider(self.default_group_provider): self.migrate_category_attachments() self.migrate_event_attachments() self.fix_attachment_file_ids() self.print_step('fixing id sequences') self.fix_sequences('attachments') self.update_merged_ids()
def load_data(self): self.print_step("Loading some data") self.janitor_user = User.get_one(self.janitor_user_id) all_users_query = User.query.options( joinedload('_all_emails')).filter_by(is_deleted=False) for user in all_users_query: for email in user.all_emails: self.all_users_by_email[email] = user
def undo_impersonate_user(): """Undo an admin impersonation login and revert to the old user""" from indico.modules.auth import logger from indico.modules.users import User try: entry = session.pop('login_as_orig_user') except KeyError: # The user probably already switched back from another tab return user = User.get_one(entry['user_id']) logger.info('Admin %r stopped impersonating user %r', user, session.user) session.user = user session.update(entry['session_data'])
def migrate(self): self.janitor = User.get_one(self.janitor_user_id) # keep all users in memory to avoid extra queries. # the assignment is on purpose to stop the gc from throwing the dict away # immediately after retrieving it _all_users = User.query.options(joinedload('_all_emails')).all() self.all_users_by_email = {} for user in _all_users: if user.is_deleted: continue for email in user.all_emails: self.all_users_by_email[email] = user with patch_default_group_provider(self.default_group_provider): with db.session.no_autoflush: self.migrate_event_managers()
def migrate(self): update_session_options(db, {'expire_on_commit': False}) self.janitor_user = User.get_one(self.janitor_user_id) self.migrate_global_templates() self.migrate_event_templates()
def _process_args(self): self.user = User.get_one(request.view_args['user_id']) if 'user_id' in request.view_args else None
def _process_args(self): self.user = User.get_one(request.view_args['user_id'] ) if 'user_id' in request.view_args else None
def _process_args(self, undo, user_id): RHAdminBase._process_args(self) self.user = None if undo else User.get_one(user_id, is_deleted=False)
def _process_args(self): RHManageCategoryRole._process_args(self) self.user = User.get_one(request.view_args['user_id'])
def _process(self): source = User.get_one(request.args['source']) target = User.get_one(request.args['target']) errors, warnings = _get_merge_problems(source, target) return jsonify(errors=errors, warnings=warnings)
def migrate(self): self.janitor_user = User.get_one(self.janitor_user_id) self.migrate_event_pr()
def _process_args(self): RHManageEventRole._process_args(self) self.user = User.get_one(request.view_args['user_id'])