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.")
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.")
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
def empty_queue(self): """Empth the queue.""" queue = utils.get_queue() while True: try: queue.pull() except IndexError: pass # done
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")
def empty_queue(self): """ """ queue = utils.get_queue() while True: try: queue.pull() except IndexError: pass # done
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
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
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
def pending_jobs(self): return utils.get_queue().pending
def finished_jobs(self): return utils.get_queue().finished
def handle_clear_jobs(self, action): queue = utils.get_queue() while queue.finished: queue.finished.pop() self.status = _("All finished jobs cleared")
def handle_clear_pending_jobs(self, action): queue = utils.get_queue() while queue.pending: queue.pending.pop() self.status = _(u"All pending jobs cleared")