Exemple #1
0
 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)
Exemple #2
0
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})
Exemple #3
0
 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)
Exemple #4
0
 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)
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
 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
Exemple #8
0
    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)
Exemple #9
0
 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
Exemple #10
0
 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))
Exemple #11
0
 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))
Exemple #12
0
 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
Exemple #13
0
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
    }
Exemple #14
0
 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()
Exemple #15
0
 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))
Exemple #16
0
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})
Exemple #17
0
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
    }
Exemple #18
0
 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
Exemple #19
0
 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)
Exemple #20
0
 def _process_args(self):
     self.event_type = EventType[request.view_args['event_type']]
     self.root_category = Category.get_root()
Exemple #21
0
 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