def _get_event_own_visibility_horizon(self, event): if self.visibility.data is None: # unlimited return Category.get_root() elif self.visibility.data == 0: # invisible return None else: return event.category.nth_parent(self.visibility.data - 1)
def test_excluded_categories(mocker, monkeypatch, db, create_category): """Test if category exclusions work.""" plugin = mocker.patch('indico_livesync.plugin.LiveSyncPlugin') plugin.settings.get.return_value = [{'id': 2}, {'id': 3}] categories = {} with db.session.no_autoflush: for cat_id in xrange(6): category = (create_category( cat_id, title=str(cat_id), protection_mode=0, parent=categories[CATEGORY_PARENTS[cat_id]]) if cat_id else Category.get_root()) categories[cat_id] = category db.session.add(category) db.session.flush() db.session.flush() for cat in categories.viewvalues(): db = mocker.patch('indico_livesync.models.queue.db') LiveSyncQueueEntry.create( {ChangeType.created}, obj_ref(cat), excluded_categories=get_excluded_categories()) assert db.session.add.called == (cat.id not in {2, 3, 4, 5})
def _create_category(id_=None, **kwargs): kwargs.setdefault( 'title', u'cat#{}'.format(id_) if id_ is not None else u'dummy') kwargs.setdefault('timezone', 'UTC') if 'parent' not in kwargs: kwargs['parent'] = Category.get_root() return Category(id=id_, acl_entries=set(), **kwargs)
def category_family(create_category, db): grandpa = Category.get_root() dad = create_category(1, title='Dad', parent=grandpa) son = create_category(2, title='Son', parent=dad) sibling = create_category(3, title='Sibling', parent=dad) db.session.add(son) db.session.flush() return grandpa, dad, son, sibling
def _process_args(self): if 'confId' in request.view_args: self.obj = Event.get_one(request.view_args['confId'], is_deleted=False) self.obj_type = 'event' elif 'category_id' in request.view_args: self.obj = Category.get_one(request.view_args['category_id'], is_deleted=False) self.obj_type = 'category' if not self.obj.is_root else None else: self.obj = Category.get_root() self.obj_type = None
def _migrate_templates(self, manager): for tpl_id, old_tpl in getattr( manager, '_{}__templates'.format(self.manager_class)).iteritems(): old_background_map = {} old_tpl_data = getattr(old_tpl, '_{}__templateData'.format(self.tpl_class)) translated_data = self._translate_tpl_data(old_tpl_data) if translated_data is None: continue tpl = DesignerTemplate(type=self.type, **translated_data) for old_bg_id, old_bg in getattr( old_tpl, '_{}__backgrounds'.format(self.tpl_class)).viewitems(): image = self._migrate_background(old_bg, tpl) if image: old_background_map[int(old_bg_id)] = image tpl.images.append(image) self.importer.print_success( cformat('\t %{cyan!}{}').format(image), event_id=self.event_id) old_positions_map = getattr( old_tpl, '_{}__bgPositions'.format(self.tpl_class), None) old_used_bg_id = int(old_tpl_data[3]) if old_used_bg_id >= 0: new_bg_image = old_background_map.get(old_used_bg_id) if new_bg_image: tpl.background_image = new_bg_image else: self.importer.print_warning( cformat("%{yellow!}Background '{}' not found").format( old_used_bg_id), event_id=self.event_id) if old_positions_map: old_position = old_positions_map.get(old_used_bg_id) if old_position: tpl.data['background_position'] = unicode( old_position.lower()) else: self.importer.print_warning(cformat( '%{yellow!}Position setting for non-existing background' ), event_id=self.event_id) if 'background_position' not in tpl.data: tpl.data['background_position'] = 'stretch' if self.event is None: tpl.category = Category.get_root() else: tpl.event_new = self.event self.importer.print_success(cformat('%{blue!}{}').format(tpl), event_id=self.event_id)
def _checkParams(self): if 'confId' in request.view_args: self.obj = Event.get_one(request.view_args['confId']) self._conf = self.obj.as_legacy self.obj_type = 'event' elif 'category_id' in request.view_args: self.obj = Category.get_one(request.view_args['category_id']) self.obj_type = 'category' if not self.obj.is_root else None else: self.obj = Category.get_root() self.obj_type = None
def _process(self): db.session.delete(self.template) root = Category.get_root() if not root.default_ticket_template: # if we deleted the root category's default template, pick # a system template as the new default (this always exists) system_template = DesignerTemplate.find_first(DesignerTemplate.is_system_template, DesignerTemplate.type == TemplateType.badge) root.default_ticket_template = system_template db.session.flush() flash(_('The template has been deleted'), 'success') return jsonify_data(html=_render_template_list(self.target, event=self.event_or_none))
def lostandfound_category(self): if self.importer.global_ns.lostandfound_category: return self.importer.global_ns.lostandfound_category root = Category.get_root() category = Category( parent=root, default_event_themes=root.default_event_themes, timezone=root.timezone, title='Lost & Found', protection_mode=ProtectionMode.protected, description='Events that had no category in the old database') db.session.add(category) self.importer.global_ns.lostandfound_category = category return self.importer.global_ns.lostandfound_category
def test_effective_protection_mode(db): def _cat(id_, protection_mode=ProtectionMode.inheriting, children=None): return Category(id=id_, title=f'cat-{id_}', protection_mode=protection_mode, children=children or []) root = Category.get_root() root.protection_mode = ProtectionMode.protected root.children = [ _cat(1), _cat(2, ProtectionMode.public, children=[ _cat(3, children=[ _cat(4, ProtectionMode.inheriting), _cat(5, ProtectionMode.public), _cat(6, ProtectionMode.protected), ]), _cat(7, ProtectionMode.protected, children=[ _cat(8, ProtectionMode.inheriting), _cat(9, ProtectionMode.public), _cat(10, ProtectionMode.protected), ]), _cat(11) ]) ] db.session.add(root) db.session.flush() data = { c.id: c.effective_protection_mode for c in Category.query.options(undefer('effective_protection_mode')) } assert data == { 0: ProtectionMode.protected, 1: ProtectionMode.protected, 2: ProtectionMode.public, 3: ProtectionMode.public, 4: ProtectionMode.public, 5: ProtectionMode.public, 6: ProtectionMode.protected, 7: ProtectionMode.protected, 8: ProtectionMode.protected, 9: ProtectionMode.public, 10: ProtectionMode.protected, 11: ProtectionMode.public }
def migrate(self): default_conference = getattr(self.zodb_root['MaKaCInfo']['main'], '_defaultConference', None) if not default_conference: self.print_warning('%[yellow!]Server has no default conference') return system_user = User.get_system_user() BadgeMigration(self, default_conference, None, system_user).run() PosterMigration(self, default_conference, None, system_user).run() dt = DesignerTemplate(category_id=0, title='Default ticket', type=TemplateType.badge, data=DEFAULT_TEMPLATE_DATA, is_system_template=True) Category.get_root().default_ticket_template = dt db.session.commit()
def _process(self): db.session.delete(self.template) root = Category.get_root() # if we deleted the root category's default templates, pick # a system template as the new default (this always exists) if not root.default_ticket_template: system_templates = DesignerTemplate.query.filter(DesignerTemplate.is_system_template, DesignerTemplate.type == TemplateType.badge).all() system_template = next(tpl for tpl in system_templates if tpl.is_ticket) root.default_ticket_template = system_template if not root.default_badge_template: system_templates = DesignerTemplate.query.filter(DesignerTemplate.is_system_template, DesignerTemplate.type == TemplateType.badge).all() system_template = next(tpl for tpl in system_templates if not tpl.is_ticket) root.default_badge_template = system_template db.session.flush() flash(_('The template has been deleted'), 'success') return jsonify_data(html=_render_template_list(self.target, event=self.event_or_none))
def test_excluded_categories(mocker, monkeypatch, db, create_category): """Test if category exclusions work.""" plugin = mocker.patch('indico_livesync.plugin.LiveSyncPlugin') plugin.settings.get.return_value = [{'id': 2}, {'id': 3}] categories = {} with db.session.no_autoflush: for cat_id in xrange(6): category = (create_category(cat_id, title=str(cat_id), protection_mode=0, parent=categories[CATEGORY_PARENTS[cat_id]]) if cat_id else Category.get_root()) categories[cat_id] = category db.session.add(category) db.session.flush() db.session.flush() for cat in categories.viewvalues(): db = mocker.patch('indico_livesync.models.queue.db') LiveSyncQueueEntry.create({ChangeType.created}, obj_ref(cat), excluded_categories=get_excluded_categories()) assert db.session.add.called == (cat.id not in {2, 3, 4, 5})
def test_effective_protection_mode(db): def _cat(id_, protection_mode=ProtectionMode.inheriting, children=None): return Category(id=id_, title='cat-{}'.format(id_), protection_mode=protection_mode, children=children or []) root = Category.get_root() root.protection_mode = ProtectionMode.protected root.children = [ _cat(1), _cat(2, ProtectionMode.public, children=[ _cat(3, children=[ _cat(4, ProtectionMode.inheriting), _cat(5, ProtectionMode.public), _cat(6, ProtectionMode.protected), ]), _cat(7, ProtectionMode.protected, children=[ _cat(8, ProtectionMode.inheriting), _cat(9, ProtectionMode.public), _cat(10, ProtectionMode.protected), ]), _cat(11) ]) ] db.session.add(root) db.session.flush() data = {c.id: c.effective_protection_mode for c in Category.query.options(undefer('effective_protection_mode'))} assert data == { 0: ProtectionMode.protected, 1: ProtectionMode.protected, 2: ProtectionMode.public, 3: ProtectionMode.public, 4: ProtectionMode.public, 5: ProtectionMode.public, 6: ProtectionMode.protected, 7: ProtectionMode.protected, 8: ProtectionMode.protected, 9: ProtectionMode.public, 10: ProtectionMode.protected, 11: ProtectionMode.public }
def _process_args(self): self.event_type = EventType[request.view_args['event_type']] self.root_category = Category.get_root() self.single_category = not self.root_category.children
def _create_category(id_=None, **kwargs): kwargs.setdefault('title', u'cat#{}'.format(id_) if id_ is not None else u'dummy') kwargs.setdefault('timezone', 'UTC') if 'parent' not in kwargs: kwargs['parent'] = Category.get_root() return Category(id=id_, acl_entries=set(), **kwargs)
def _process_args(self): self.event_type = EventType[request.view_args['event_type']] self.root_category = Category.get_root()