def _log_category_update(category, changes): log_fields = { 'title': { 'title': 'Title', 'type': 'string' }, 'description': 'Description', 'timezone': { 'title': 'Timezone', 'type': 'string' }, 'suggestions_disabled': 'Disable suggestions', 'is_flat_view_enabled': 'Allow flat view', 'event_message_mode': 'Event header message type', 'event_message': 'Event header message', 'notify_managers': 'Notify managers about event creation', 'event_creation_notification_emails': 'Event creation notification emails' } if changes: what = 'Settings' if len(changes) == 1: what = log_fields[list(changes)[0]] if isinstance(what, dict): what = what['title'] category.log(CategoryLogRealm.category, LogKind.change, 'Category', f'{what} updated', session.user, data={'Changes': make_diff_log(changes, log_fields)}) logger.info('Category %s updated by %s', category, session.user)
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 category_cleanup(): from indico.modules.events import Event janitor_user = User.get_system_user() logger.debug('Checking whether any categories should be cleaned up') for categ_id, days in config.CATEGORY_CLEANUP.items(): 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 _process_POST(self): f = request.files[self.IMAGE_TYPE] try: img = Image.open(f) except IOError: flash(_('You cannot upload this file as an icon/logo.'), 'error') return jsonify_data(content=None) if img.format.lower() not in {'jpeg', 'png', 'gif'}: flash(_('The file has an invalid format ({format})').format(format=img.format), 'error') return jsonify_data(content=None) if img.mode == 'CMYK': flash(_('The image you uploaded is using the CMYK colorspace and has been converted to RGB. ' 'Please check if the colors are correct and convert it manually if necessary.'), 'warning') img = img.convert('RGB') img = self._resize(img) image_bytes = BytesIO() img.save(image_bytes, 'PNG') image_bytes.seek(0) content = image_bytes.read() metadata = { 'hash': crc32(content), 'size': len(content), 'filename': os.path.splitext(secure_filename(f.filename, self.IMAGE_TYPE))[0] + '.png', 'content_type': 'image/png' } self._set_image(content, metadata) flash(self.SAVED_FLASH_MSG, 'success') logger.info("New {} '%s' uploaded by %s (%s)".format(self.IMAGE_TYPE), f.filename, session.user, self.category) return jsonify_data(content=get_image_data(self.IMAGE_TYPE, self.category))
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 update_category_protection(category, data): assert set(data) <= { 'protection_mode', 'own_no_access_contact', 'event_creation_mode', 'visibility' } changes = category.populate_from_dict(data) db.session.flush() signals.category.updated.send(category, changes=changes) logger.info('Protection of category %r updated with %r by %r', category, data, session.user) if changes: log_fields = { 'protection_mode': 'Protection mode', 'own_no_access_contact': 'No access contact', 'visibility': { 'title': 'Visibility', 'type': 'string', 'convert': lambda changes: [format_visibility(category, x) for x in changes] }, 'event_creation_mode': 'Event creation mode' } category.log(CategoryLogRealm.category, LogKind.change, 'Category', 'Protection updated', session.user, data={'Changes': make_diff_log(changes, log_fields)})
def _process(self): for data in request.json['users']: user = principal_from_fossil(data, allow_pending=True, allow_groups=False) if user not in self.role.members: self.role.members.add(user) logger.info('User %r added to role %r by %r', user, self.role, session.user) return jsonify_data(html=_render_role(self.role, collapsed=False))
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(self): form = CategoryRoleForm(obj=self.role, category=self.category) if form.validate_on_submit(): form.populate_obj(self.role) db.session.flush() logger.info('Category role %r updated by %r', self.role, session.user) return jsonify_data(html=_render_role(self.role)) return jsonify_form(form)
def _process(self): form = CategoryRoleForm(category=self.category, color=self._get_color()) if form.validate_on_submit(): role = CategoryRole(category=self.category) form.populate_obj(role) db.session.flush() logger.info('Category role %r created by %r', role, session.user) return jsonify_data(html=_render_roles(self.category), role=serialize_category_role(role)) return jsonify_form(form)
def create_category(parent, data): category = Category(parent=parent) data.setdefault('default_event_themes', parent.default_event_themes) data.setdefault('timezone', parent.timezone) category.populate_from_dict(data) db.session.add(category) db.session.flush() signals.category.created.send(category) logger.info('Category %s created by %s', category, session.user) return category
def delete_category(category): category.is_deleted = True db.session.flush() signals.category.deleted.send(category) logger.info('Category %s deleted by %s', category, session.user) category.log(CategoryLogRealm.category, LogKind.negative, 'Category', 'Category deleted', session.user) category.parent.log(CategoryLogRealm.category, LogKind.negative, 'Content', f'Subcategory deleted: "{category.title}"', session.user)
def create_category(parent, data): category = Category(parent=parent) data.setdefault("default_event_themes", parent.default_event_themes) data.setdefault("timezone", parent.timezone) category.populate_from_dict(data) db.session.add(category) db.session.flush() signals.category.created.send(category) logger.info("Category %s created by %s", category, session.user) return category
def _process(self): form = CategoryRoleForm(obj=self.role, category=self.category) if form.validate_on_submit(): form.populate_obj(self.role) db.session.flush() logger.info('Category role %r updated by %r', self.role, session.user) self.category.log(CategoryLogRealm.category, LogKind.change, 'Roles', f'Updated role: "{self.role.name}"', session.user) return jsonify_data(html=_render_role(self.role)) return jsonify_form(form)
def update_category(category, data, skip=()): assert set(data) <= { 'title', 'description', 'timezone', 'suggestions_disabled', 'is_flat_view_enabled', 'event_message_mode', 'event_message', 'notify_managers', 'event_creation_notification_emails', *skip } changes = category.populate_from_dict(data, skip=skip) db.session.flush() signals.category.updated.send(category) logger.info('Category %s updated with %r by %s', category, data, session.user) _log_category_update(category, changes)
def _process(self): form = CategoryRoleForm(category=self.category, color=self._get_color()) if form.validate_on_submit(): role = CategoryRole(category=self.category) form.populate_obj(role) db.session.flush() logger.info('Category role %r created by %r', role, session.user) self.category.log(CategoryLogRealm.category, LogKind.positive, 'Roles', f'Added role: "{role.name}"', session.user) return jsonify_data(html=_render_roles(self.category), role=serialize_category_role(role)) return jsonify_form(form)
def _process(self, users): for user in users - self.role.members: self.role.members.add(user) logger.info('User %r added to role %r by %r', user, self.role, session.user) self.category.log(CategoryLogRealm.category, LogKind.positive, 'Roles', f'Added user to role "{self.role.name}"', session.user, data={ 'Name': user.full_name, 'Email': user.email }) return jsonify_data(html=_render_role(self.role, collapsed=False))
def _process(self): if self.user in self.role.members: self.role.members.remove(self.user) logger.info('User %r removed from role %r by %r', self.user, self.role, session.user) self.category.log(CategoryLogRealm.category, LogKind.negative, 'Roles', f'Removed user from role "{self.role.name}"', session.user, data={ 'Name': self.user.full_name, 'Email': self.user.email }) return jsonify_data(html=_render_role(self.role, collapsed=False))
def create_category(parent, data): category = Category(parent=parent) data.setdefault('default_event_themes', parent.default_event_themes) data.setdefault('timezone', parent.timezone) category.populate_from_dict(data) db.session.add(category) db.session.flush() signals.category.created.send(category) logger.info('Category %s created by %s', category, session.user) sep = ' \N{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK} ' category.log(CategoryLogRealm.category, LogKind.positive, 'Category', 'Category created', session.user, data={'Location': sep.join(category.chain_titles[:-1])}) parent.log(CategoryLogRealm.category, LogKind.positive, 'Content', f'Subcategory created: "{category.title}"', session.user) return category
def _process(self): if self.user in self.role.members: self.role.members.remove(self.user) logger.info('User %r removed from role %r by %r', self.user, self.role, session.user) return jsonify_data(html=_render_role(self.role, collapsed=False))
def _process(self): db.session.delete(self.role) logger.info('Category role %r deleted by %r', self.role, session.user) return jsonify_data(html=_render_roles(self.category))
def _process_DELETE(self): self._set_image(None, None) flash(self.DELETED_FLASH_MSG, 'success') logger.info("{} of %s deleted by %s".format(self.IMAGE_TYPE.title()), self.category, session.user) return jsonify_data(content=None)
def _process(self, users): for user in users - self.role.members: self.role.members.add(user) logger.info('User %r added to role %r by %r', user, self.role, session.user) return jsonify_data(html=_render_role(self.role, collapsed=False))
def update_category(category, data, skip=()): category.populate_from_dict(data, skip=skip) db.session.flush() signals.category.updated.send(category) logger.info("Category %s updated by %s", category, session.user)
def move_category(category, target_category): category.move(target_category) logger.info("Category %s moved to %s by %s", category, target_category, session.user)
def delete_category(category): category.is_deleted = True db.session.flush() signals.category.deleted.send(category) logger.info("Category %s deleted by %s", category, session.user)
def _process(self): db.session.delete(self.role) logger.info('Category role %r deleted by %r', self.role, session.user) self.category.log(CategoryLogRealm.category, LogKind.negative, 'Roles', f'Deleted role: "{self.role.name}"', session.user) return jsonify_data(html=_render_roles(self.category))
def update_category(category, data, skip=()): category.populate_from_dict(data, skip=skip) db.session.flush() signals.category.updated.send(category) logger.info('Category %s updated by %s', category, session.user)
def move_category(category, target_category): category.move(target_category) logger.info('Category %s moved to %s by %s', category, target_category, session.user)
def delete_category(category): category.is_deleted = True db.session.flush() signals.category.deleted.send(category) logger.info('Category %s deleted by %s', category, session.user)