Пример #1
0
    def handle_send(self, action):
        context = self.context.context
        data, errors = self.extractData()
        if errors:
            self.status = form.EditForm.formErrorsMessage
            return
        channel = data['channel']
        channel_paths = ['/'.join(channel.getPhysicalPath())]
        newsletter_path = "/".join(context.getPhysicalPath())
        newsletter_uid = IUUID(context)
        include_collector_items = data['include_collector_items']
        override_vars = self.get_override_vars()

        job = collective.singing.async.Job(_assemble_messages,
                                            channel_paths,
                                            newsletter_uid,
                                            newsletter_path,
                                            include_collector_items,
                                            override_vars)
        title = _(u"Send '${context}' through ${channel}.",
                  mapping=dict(
            context=context.Title().decode(context.plone_utils.getSiteEncoding()),
            channel=u'"%s"' % channel.title))
        job.title = title
        utils.get_queue().pending.append(job)

        self.status = _(u"Messages queued for delivery.")
Пример #2
0
    def handle_send(self, action):
        context = self.context.context
        data, errors = self.extractData()
        if errors:
            self.status = form.EditForm.formErrorsMessage
            return

        path = data["channel_and_collector"][0]
        channel_paths = [path]
        newsletter_path = "/".join(context.getPhysicalPath())
        if HAS_UUID:
            newsletter_uid = IUUID(context)
        else:
            newsletter_uid = context.UID()
        include_collector_items = data['include_collector_items']
        override_vars = self.get_override_vars()

        job = collective.singing.async.Job(_assemble_messages,
                                            channel_paths,
                                            newsletter_uid,
                                            newsletter_path,
                                            include_collector_items,
                                            override_vars)
        site = getSite()
        channel = site.unrestrictedTraverse(path)
        title = _(u"Send '${context}' through ${channel}.",
                  mapping=dict(
            context=context.Title().decode(context.plone_utils.getSiteEncoding()),
            channel=u'"%s"' % channel.title))
        job.title = title
        utils.get_queue().pending.append(job)

        self.status = _(u"Messages queued for delivery.")
    def handle_send(self, action):
        context = self.context.context
        data, errors = self.extractData()
        if errors:
            self.status = form.EditForm.formErrorsMessage
            return
        channel = data["channel"]
        channel_paths = ["/".join(channel.getPhysicalPath())]
        newsletter_path = "/".join(context.getPhysicalPath())
        newsletter_uid = IUUID(context)
        include_collector_items = data["include_collector_items"]
        override_vars = self.get_override_vars()

        job = collective.singing.async.Job(
            _assemble_messages, channel_paths, newsletter_uid, newsletter_path, include_collector_items, override_vars
        )
        title = _(
            u"Send '${context}' through ${channel}.",
            mapping=dict(
                context=context.Title().decode(context.plone_utils.getSiteEncoding()), channel=u'"%s"' % channel.title
            ),
        )
        job.title = title
        utils.get_queue().pending.append(job)

        self.status = _(u"Messages queued for delivery.")
Пример #4
0
    def __call__(self):

        context = self.event.object

        channel_path, section_title = self.element.channel_and_collector
        channel_paths = [channel_path]
        newsletter_path = '/'.join(context.getPhysicalPath())
        try:
            if HAS_UUID:
                newsletter_uid = IUUID(context)
            else:
                newsletter_uid = context.UID()
        except TypeError:
            # we got a could not adapt error. Object which can't send.
            return False
        #include_collector_items = self.element.include_collector_items
        include_collector_items = self.element.include_collector_items
        use_full_format = self.element.use_full_format
        override_vars = {}  # later could support saving overrides
        site = getSite()
        channel = site.unrestrictedTraverse(channel_path)
        if section_title is not None:
            for section in channel.collector.get_optional_collectors():
                if section.title == section_title:
                    # Special override to send only to those
                    # who subscribed to optional collector
                    override_vars['subscriptions_for_collector'] = section
                    break

        job = collective.singing.async.Job(
            _assemble_messages,
            channel_paths,
            newsletter_uid,
            newsletter_path,
            include_collector_items,
            override_vars,
            use_full_format)
        title = _(
            u'Content rule send "${context}" through ${channel}.',
            mapping=dict(
            context=context.Title().decode(
            context.plone_utils.getSiteEncoding()),
                channel=u'"%s"' % channel.title))
        job.title = title
        utils.get_queue().pending.append(job)

        logger.info(u'Messages queued for delivery.')
        return True
Пример #5
0
 def empty_queue(self):
     """Empth the queue."""
     queue = utils.get_queue()
     while True:
         try:
             queue.pull()
         except IndexError:
             pass  # done
Пример #6
0
 def handle_process_jobs(self, action):
     queue = utils.get_queue()
     num = queue.process()
     finished = queue.finished[-num:]
     if len(finished) == 1:
         self.status = finished[0].value
     else:
         self.status = _(u"All pending jobs processed")
Пример #7
0
 def empty_queue(self):
     """ """
     queue = utils.get_queue()
     while True:
         try:
             queue.pull()
         except IndexError:
             pass  # done
Пример #8
0
 def handle_process_jobs(self, action):
     queue = utils.get_queue()
     num = queue.process()
     finished = queue.finished[-num:]
     if len(finished) == 1:
         self.status = finished[0].value
     else:
         self.status = _(u"All pending jobs processed")
Пример #9
0
    def __call__(self):

        context = self.event.object

        channel_path, section_title = self.element.channel_and_collector
        channel_paths = [channel_path]
        newsletter_path = '/'.join(context.getPhysicalPath())
        try:
            newsletter_uid = IUUID(context)
        except TypeError:
            # we got a could not adapt error. Object which can't send.
            return False
        #include_collector_items = self.element.include_collector_items
        include_collector_items = self.element.include_collector_items
        use_full_format = self.element.use_full_format
        override_vars = {}  # later could support saving overrides
        site = getSite()
        channel = site.unrestrictedTraverse(channel_path)
        if section_title is not None:
            for section in channel.collector.get_optional_collectors():
                if section.title == section_title:
                    # Special override to send only to those
                    # who subscribed to optional collector
                    override_vars['subscriptions_for_collector'] = section
                    break

        job = collective.singing. async .Job(_assemble_messages, channel_paths,
                                             newsletter_uid, newsletter_path,
                                             include_collector_items,
                                             override_vars, use_full_format)
        title = _(u'Content rule send "${context}" through ${channel}.',
                  mapping=dict(context=context.Title().decode(
                      context.plone_utils.getSiteEncoding()),
                               channel=u'"%s"' % channel.title))
        job.title = title
        utils.get_queue().pending.append(job)

        logger.info(u'Messages queued for delivery.')
        return True
Пример #10
0
    def _tick_and_dispatch(self):
        msg = u''

        queue = utils.get_queue()
        num = queue.process()
        if num:
            for job in queue.finished[-num:]:
                msg += job.value + '\n'

        for channel in channel_lookup():
            queued = status = None
            if channel.scheduler is not None:
                queued = channel.scheduler.tick(channel, self.request)
            if channel.queue is not None:
                status = channel.queue.dispatch()
            d = {'channel':channel.name,
                 'queued':queued or 0,
                 'status':str(status or (0,0))}
            msg += u'%(channel)s: %(queued)d messages queued, dispatched: %(status)s\n' % d
        return msg
Пример #11
0
    def _tick_and_dispatch(self):
        msg = u''

        queue = utils.get_queue()
        num = queue.process()
        if num:
            for job in queue.finished[-num:]:
                msg += job.value + '\n'

        for channel in channel_lookup():
            queued = status = None
            if channel.scheduler is not None:
                queued = channel.scheduler.tick(channel, self.request)
            if channel.queue is not None:
                status = channel.queue.dispatch()
            d = {
                'channel': channel.name,
                'queued': queued or 0,
                'status': str(status or (0, 0))
            }
            msg += u'%(channel)s: %(queued)d messages queued, dispatched: %(status)s\n' % d
        return msg
Пример #12
0
 def pending_jobs(self):
     return utils.get_queue().pending
Пример #13
0
 def finished_jobs(self):
     return utils.get_queue().finished
Пример #14
0
 def pending_jobs(self):
     return utils.get_queue().pending
Пример #15
0
 def handle_clear_jobs(self, action):
     queue = utils.get_queue()
     while queue.finished:
         queue.finished.pop()
     self.status = _("All finished jobs cleared")
Пример #16
0
 def handle_clear_pending_jobs(self, action):
     queue = utils.get_queue()
     while queue.pending:
         queue.pending.pop()
     self.status = _(u"All pending jobs cleared")
Пример #17
0
 def handle_clear_pending_jobs(self, action):
     queue = utils.get_queue()
     while queue.pending:
         queue.pending.pop()
     self.status = _(u"All pending jobs cleared")
Пример #18
0
 def finished_jobs(self):
     return utils.get_queue().finished
Пример #19
0
 def handle_clear_jobs(self, action):
     queue = utils.get_queue()
     while queue.finished:
         queue.finished.pop()
     self.status = _("All finished jobs cleared")