コード例 #1
0
ファイル: queue.py プロジェクト: netravnen/indico-plugins
    def create(cls, changes, ref, excluded_categories=set()):
        """Create a new change in all queues.

        :param changes: the change types, an iterable containing
                        :class:`ChangeType`
        :param ref: the object reference (returned by `obj_ref`)
                        of the changed object
        :param excluded_categories: set of categories (IDs) whose items
                                    will not be tracked
        """
        ref = dict(ref)
        obj = obj_deref(ref)

        if isinstance(obj, Category):
            if any(c.id in excluded_categories for c in obj.chain_query):
                return
        else:
            event = obj if isinstance(obj, Event) else obj.event
            if excluded_categories & set(event.category_chain):
                return

        for change in changes:
            for agent in LiveSyncAgent.find():
                entry = cls(agent=agent, change=change, **ref)
                db.session.add(entry)

        db.session.flush()
コード例 #2
0
ファイル: queue.py プロジェクト: HodardCodeclub/IwacuEvent
    def create(cls, changes, ref, excluded_categories=set()):
        """Create a new change in all queues.

        :param changes: the change types, an iterable containing
                        :class:`ChangeType`
        :param ref: the object reference (returned by `obj_ref`)
                        of the changed object
        :param excluded_categories: set of categories (IDs) whose items
                                    will not be tracked
        """
        ref = dict(ref)
        obj = obj_deref(ref)

        if isinstance(obj, Category):
            if any(c.id in excluded_categories for c in obj.chain_query):
                return
        else:
            event = obj if isinstance(obj, Event) else obj.event
            if event.category not in g.setdefault('livesync_excluded_categories_checked', {}):
                g.livesync_excluded_categories_checked[event.category] = excluded_categories & set(event.category_chain)
            if g.livesync_excluded_categories_checked[event.category]:
                return

        try:
            agents = g.livesync_agents
        except AttributeError:
            agents = g.livesync_agents = LiveSyncAgent.query.all()

        for change in changes:
            for agent in agents:
                entry = cls(agent=agent, change=change, **ref)
                db.session.add(entry)

        db.session.flush()
コード例 #3
0
ファイル: marcxml.py プロジェクト: florv/indico-plugins
 def add_object(self, ref, deleted=False):
     if self.closed:
         raise RuntimeError('Cannot add object to closed xml generator')
     if deleted:
         xg = XMLGen(init=False)
         xg.openTag(b'record')
         xg.openTag(b'datafield', [[b'tag', b'970'], [b'ind1', b' '], [b'ind2', b' ']])
         xg.writeTag(b'subfield', b'INDICO.{}'.format(make_compound_id(ref)), [[b'code', b'a']])
         xg.closeTag(b'datafield')
         xg.openTag(b'datafield', [[b'tag', b'980'], [b'ind1', b' '], [b'ind2', b' ']])
         xg.writeTag(b'subfield', b'DELETED', [[b'code', b'c']])
         xg.closeTag(b'datafield')
         xg.closeTag(b'record')
         self.xml_generator.xml += xg.xml
     elif ref['type'] in {EntryType.event, EntryType.contribution, EntryType.subcontribution}:
         obj = obj_deref(ref)
         if obj is None:
             raise ValueError('Cannot add deleted object')
         elif isinstance(obj, Category) and not obj.getOwner():
             raise ValueError('Cannot add object without owner: {}'.format(obj))
         if obj.is_deleted or obj.event_new.is_deleted:
             pass
         elif ref['type'] == EntryType.event:
             self.xml_generator.xml += self._event_to_marcxml(obj)
         elif ref['type'] == EntryType.contribution:
             self.xml_generator.xml += self._contrib_to_marcxml(obj)
         elif ref['type'] == EntryType.subcontribution:
             self.xml_generator.xml += self._subcontrib_to_marcxml(obj)
     elif ref['type'] == EntryType.category:
         pass  # we don't send category updates
     else:
         raise ValueError('unknown object ref: {}'.format(ref['type']))
     return self.xml_generator.getXml()
コード例 #4
0
ファイル: backend.py プロジェクト: florv/indico-plugins
    def run(self):
        records = self.fetch_records()
        if not records:
            self._print(cformat('%{yellow!}No records%{reset}'))
            return

        self._print(cformat('%{white!}Raw changes:%{reset}'))
        for record in records:
            self._print(record)

        self._print()
        self._print(cformat('%{white!}Simplified/cascaded changes:%{reset}'))
        for ref, change in process_records(records).iteritems():
            obj = obj_deref(ref)
            self._print(cformat('%{white!}{}%{reset}: {}').format(_change_str(change), obj or ref))

        self._print()
        self._print(cformat('%{white!}Resulting MarcXML:%{reset}'))
        uploader = DebugUploader(self)
        uploader.run(records)
        self.update_last_run()
コード例 #5
0
ファイル: queue.py プロジェクト: florv/indico-plugins
 def object(self):
     """Returns the changed object"""
     return obj_deref(self.object_ref)