def send_browser_message_for_all_users(self, user): message = { "id": self.id, "subject": self.subject, "body": html2text(self.body), "created": self.created.strftime("%a %d %b %Y %H:%M"), } # Encode and send that message to the whole channels Group for our # liveblog. Note how you can send to a channel or Group from any part # of Django, not just inside a consumer. if not DJANGO2: from channels import Group Group(PUBLIC_GROUP).send({ # WebSocket text frame, with JSON content "text": json.dumps(message), }) else: from channels.layers import get_channel_layer channel_layer = get_channel_layer() from asgiref.sync import async_to_sync async_to_sync(channel_layer.group_send)(PUBLIC_GROUP, { "text": json.dumps(message) }) return
def send_browser_message(self, user): message = { "id": self.id, "subject": str(self.subject), "body": html2text(self.body), "created": self.created.strftime("%a %d %b %Y %H:%M"), } # Encode and send that message to the whole channels Group for our # Websocket. Note how you can send to a channel or Group from any part # of Django, not just inside a consumer. logger.info("Sending browser notification to %s", user.username) if not DJANGO2: from channels import Group Group(groupname(user.username)).send({ # WebSocket text frame, with JSON content "text": json.dumps(message), }) else: from channels.layers import get_channel_layer channel_layer = get_channel_layer() from asgiref.sync import async_to_sync async_to_sync(channel_layer.group_send)(user.username, {"type": "send.notification", "text": message['body']}) return
def send_browser_message_for_all_users(self, user): message = { "id": self.id, "subject": self.subject, "body": html2text(self.body), "created": self.created.strftime("%a %d %b %Y %H:%M"), } # Encode and send that message to the whole channels Group for our # liveblog. Note how you can send to a channel or Group from any part # of Django, not just inside a consumer. if not DJANGO2: from channels import Group Group(PUBLIC_GROUP).send({ # WebSocket text frame, with JSON content "text": json.dumps(message), }) else: from channels.layers import get_channel_layer channel_layer = get_channel_layer() from asgiref.sync import async_to_sync async_to_sync(channel_layer.group_send)(PUBLIC_GROUP, {"text": json.dumps(message)}) return
def send_browser_message(self, user): message = { "id": self.id, "subject": str(self.subject), "body": html2text(self.body), "created": self.created.strftime("%a %d %b %Y %H:%M"), } # Encode and send that message to the whole channels Group for our # Websocket. Note how you can send to a channel or Group from any part # of Django, not just inside a consumer. logger.info("Sending browser notification to %s", user.username) if not DJANGO2: from channels import Group Group(groupname(user.username)).send({ # WebSocket text frame, with JSON content "text": json.dumps(message), }) else: from channels.layers import get_channel_layer channel_layer = get_channel_layer() from asgiref.sync import async_to_sync async_to_sync(channel_layer.group_send)(user.username, { "type": "send.notification", "text": message['body'] }) return
def send_browser_message_for_all_users(self, user): message = { "id": self.id, "subject": self.subject, "body": html2text(self.body), "created": self.created.strftime("%a %d %b %Y %H:%M"), } # Encode and send that message to the whole channels Group for our # liveblog. Note how you can send to a channel or Group from any part # of Django, not just inside a consumer. from channels import Group Group(PUBLIC_GROUP).send({ # WebSocket text frame, with JSON content "text": json.dumps(message), }) return
def send_browser_message(self, user): message = { "id": self.id, "subject": str(self.subject), "body": html2text(self.body), "created": self.created.strftime("%a %d %b %Y %H:%M"), } # Encode and send that message to the whole channels Group for our # Websocket. Note how you can send to a channel or Group from any part # of Django, not just inside a consumer. from channels import Group logger.info("Sending browser notification to %s", user.username) Group(groupname(user.username)).send({ # WebSocket text frame, with JSON content "text": json.dumps(message), }) return
def send_browser_message(self, user): """ Send_message to the user's browser """ message = { "id": self.id, "subject": str(self), "body": html2text(self.body), "created": self.created.strftime("%a %d %b %Y %H:%M"), } # Encode and send that message to the whole channels Group for our # liveblog. Note how you can send to a channel or Group from any part # of Django, not just inside a consumer. from channels import Group Group(user.username).send({ # WebSocket text frame, with JSON content "text": json.dumps(message), }) return
def show_dashboard(username, **options): """Show the dashboard of the given user. Useful options: - ignore_links=True For more options, see https://pypi.org/project/html2text/ and https://github.com/Alir3z4/html2text/blob/master/docs/usage.md Note that this is currently not much used because the result is difficult to maintain. One reason for this is that :func:`naturaltime` (from :mod:`django.contrib.humanize.templatetags.humanize`) ignores demo_date and therefore produces results that depend on the current date/time. """ request = PseudoRequest(username) ui = settings.SITE.kernel.text_renderer.front_end html = settings.SITE.get_main_html(request, extjs=ui) print(html2text(html, **options))
def run_from_ui(self, ar, **kw): elem = ar.selected_rows[0] #~ if elem.sent: #~ return rr.ui.error(message='Mail has already been sent.') #~ subject = elem.subject #~ sender = "%s <%s>" % (rr.get_user().get_full_name(),rr.get_user().email) sender = "%s <%s>" % (elem.user.get_full_name(), elem.user.email) #~ recipients = list(elem.get_recipients_to()) to = [] cc = [] bcc = [] found = False missing_addresses = [] for r in elem.recipient_set.all(): recipients = None if r.type == RecipientTypes.to: recipients = to elif r.type == RecipientTypes.cc: recipients = cc elif r.type == RecipientTypes.bcc: recipients = bcc if recipients is not None: if not r.address: missing_addresses.append(r) if r.address.endswith('@example.com'): logger.info("20120712 ignored recipient %s", r.name_address()) else: recipients.append(r.name_address()) found = True #~ else: #~ logger.info("Ignoring recipient %s (type %s)",r,r.type) if not found: return ar.error(_("No recipients found.")) if len(missing_addresses): msg = _("There are recipients without address: ") msg += ', '.join([str(r) for r in missing_addresses]) return ar.error(msg, alert=True) #~ as_attachment = elem.owner.attach_to_email(rr) #~ body = elem.body #~ if as_attachment: #~ body = elem.body #~ else: #~ body = elem.owner.get_mailable_body(rr) text_content = html2text(elem.body) msg = EmailMultiAlternatives(subject=elem.subject, from_email=sender, body=text_content, to=to, bcc=bcc, cc=cc) msg.attach_alternative(elem.body, "text/html") for att in elem.attachment_set.all(): #~ if as_attachment or att.owner != elem.owner: fn = att.owner.get_target_name() if fn is None: raise Warning(_("Couldn't find target file of %s") % att.owner) msg.attach_file(fn) uploads = dd.resolve_app("uploads") for up in uploads.UploadsByController.request(elem): #~ for up in uploads.Upload.objects.filter(owner=elem): fn = os.path.join(settings.MEDIA_ROOT, up.file.name) msg.attach_file(fn) num_sent = msg.send() elem.sent = timezone.now() kw.update(refresh=True) #~ msg = "Email %s from %s has been sent to %s." % ( #~ elem.id,elem.sender,', '.join([ #~ r.address for r in elem.recipient_set.all()])) msg = _( "Email %(id)s from %(sender)s has been sent to %(num)d recipients." ) % dict(id=elem.id, sender=sender, num=num_sent) kw.update(message=msg, alert=True) #~ for n in """EMAIL_HOST SERVER_EMAIL EMAIL_USE_TLS EMAIL_BACKEND""".split(): #~ msg += "\n" + n + " = " + unicode(getattr(settings,n)) logger.info(msg) if elem.owner: elem.owner.after_send_mail(elem, ar, kw) elem.save() ar.success(**kw)
def run_from_ui(self, ar, **kw): elem = ar.selected_rows[0] #~ if elem.sent: #~ return rr.ui.error(message='Mail has already been sent.') #~ subject = elem.subject #~ sender = "%s <%s>" % (rr.get_user().get_full_name(),rr.get_user().email) sender = "%s <%s>" % (elem.user.get_full_name(), elem.user.email) #~ recipients = list(elem.get_recipients_to()) to = [] cc = [] bcc = [] found = False missing_addresses = [] for r in elem.recipient_set.all(): recipients = None if r.type == RecipientTypes.to: recipients = to elif r.type == RecipientTypes.cc: recipients = cc elif r.type == RecipientTypes.bcc: recipients = bcc if recipients is not None: if not r.address: missing_addresses.append(r) if r.address.endswith('@example.com'): logger.info("20120712 ignored recipient %s", r.name_address()) else: recipients.append(r.name_address()) found = True #~ else: #~ logger.info("Ignoring recipient %s (type %s)",r,r.type) if not found: return ar.error(_("No recipients found.")) if len(missing_addresses): msg = _("There are recipients without address: ") msg += ', '.join([unicode(r) for r in missing_addresses]) return ar.error(msg, alert=True) #~ as_attachment = elem.owner.attach_to_email(rr) #~ body = elem.body #~ if as_attachment: #~ body = elem.body #~ else: #~ body = elem.owner.get_mailable_body(rr) text_content = html2text(elem.body) msg = EmailMultiAlternatives(subject=elem.subject, from_email=sender, body=text_content, to=to, bcc=bcc, cc=cc) msg.attach_alternative(elem.body, "text/html") for att in elem.attachment_set.all(): #~ if as_attachment or att.owner != elem.owner: fn = att.owner.get_target_name() if fn is None: raise Warning(_("Couldn't find target file of %s") % att.owner) msg.attach_file(fn) uploads = dd.resolve_app("uploads") for up in uploads.UploadsByController.request(elem): #~ for up in uploads.Upload.objects.filter(owner=elem): fn = os.path.join(settings.MEDIA_ROOT, up.file.name) msg.attach_file(fn) num_sent = msg.send() elem.sent = timezone.now() kw.update(refresh=True) #~ msg = "Email %s from %s has been sent to %s." % ( #~ elem.id,elem.sender,', '.join([ #~ r.address for r in elem.recipient_set.all()])) msg = _("Email %(id)s from %(sender)s has been sent to %(num)d recipients.") % dict( id=elem.id, sender=sender, num=num_sent) kw.update(message=msg, alert=True) #~ for n in """EMAIL_HOST SERVER_EMAIL EMAIL_USE_TLS EMAIL_BACKEND""".split(): #~ msg += "\n" + n + " = " + unicode(getattr(settings,n)) logger.info(msg) if elem.owner: elem.owner.after_send_mail(elem, ar, kw) elem.save() ar.success(**kw)