示例#1
0
def send_newsletter2(request, key_id):
    letter = Newsletter2.get_by_id(key_id)
    if not letter:
        return redirect(url_for("postman/admin/newsletters2"))
    for email in set(letter.emails):

        def txn():
            taskqueue.add(
                url=url_for("postman/send_newsletter_task2", email=email, newsletter_key_id=key_id), transactional=True
            )

        db.run_in_transaction(txn)
    return redirect(url_for("postman/admin/newsletters2"))
示例#2
0
def delete_file2(request, key_id, file_key_id):
    if request.method == "POST":
        newsletter = Newsletter2.get_by_id(key_id)
        if not newsletter:
            return redirect("postman/admin/newsletters2")
        for i, file_key_ in enumerate(newsletter.n_price_list):
            if file_key_ == file_key_:
                file = File.get_by_id(file_key_id)
                if file:
                    file.delete()
                del newsletter.n_price_list[i]
                newsletter.put()
                break
    return redirect(url_for("postman/admin/newsletters2/edit", key_id=key_id))
示例#3
0
def edit_newsletter2(request, key_id):
    newsletter = Newsletter2.get_by_id(key_id)
    form = AddNewsletter2(instance=newsletter)
    form.managers.choices = get_managers()
    if request.method == "POST" and form.validate(request.form):
        newsletter = form.save(commit=False)
        newsletter.put()
        return redirect(url_for("postman/admin/newsletters2"))
    files = []
    for file_key in newsletter.n_price_list:
        file_ = File.get(file_key)
        if file_:
            files.append(file_)
    return render_to_response(
        "postman/admin/newsletters2/edit.html", {"form": form.as_widget(), "key_id": key_id, "files": files}
    )
示例#4
0
def preview2(request, key_id):
    newsletter = Newsletter2.get_by_id(key_id)
    gifts = []
    if newsletter.gifts:
        gifts_split = newsletter.gifts.split(",")
        for gift in gifts_split:
            try:
                gift = gift.strip()
                obj = Gift.all().filter("uid =", gift).get()
                if obj:
                    gifts.append(obj)
            except Exception:
                pass

    managers = []
    for mgr_id in newsletter.managers:
        mgr = Manager.get_by_id(mgr_id)
        if mgr:
            managers.append(mgr)

    emails = newsletter.emails

    files = []
    for file_key in newsletter.n_price_list:
        file_ = File.get(file_key)
        if file_:
            files.append(file_)
    return render_to_response(
        "postman/admin/newsletters2/preview.html",
        {
            "newsletter": newsletter,
            "gifts": gifts,
            "key_id": key_id,
            "files": files,
            "managers": managers,
            "emails": emails,
        },
    )
示例#5
0
def add_file2(request, key_id):
    newsletter = Newsletter2.get_by_id(key_id)
    url = blobstore.create_upload_url(url_for("postman/admin/newsletter2/add_file", key_id=key_id))
    form = NewsletterFileForm(action=url)
    form.csrf_protected = False
    if request.method == "POST" and form.validate(request.form):
        upload_files = get_uploads(request, "file")
        if not len(upload_files):
            return redirect(url_for("postman/admin/newsletter2/add_file", key_id=key_id))
        blob_info = upload_files[0]
        bl = blobstore.BlobInfo.get(blob_info.key())
        filename = os.path.basename(bl.filename.replace("\\", "/"))
        file_ = File(
            filename=filename, content_type=blob_info.content_type, blob_key=str(blob_info.key()), length=blob_info.size
        )
        file_.put()
        newsletter.n_price_list.append(str(file_.key()))
        newsletter.put()
        return redirect(url_for("postman/admin/newsletters2/edit", key_id=key_id))
    return render_to_response(
        "postman/admin/newsletters2/add_file.html",
        {"form": form.as_widget(), "newsletter": newsletter, "key_id": key_id},
    )
示例#6
0
def delete_newsletter2(request, key_id):
    newsletter = Newsletter2.get_by_id(key_id)
    if newsletter:
        newsletter.delete()
    return redirect(url_for("postman/admin/newsletters2"))
示例#7
0
def add_newsletter2(request):
    newsletters_count = Newsletter2.all().count()
    newsletter = Newsletter2(title=u"Без названия %s" % str(newsletters_count + 1))
    newsletter.put()
    return redirect(url_for("postman/admin/newsletters2/edit", key_id=newsletter.key().id()))
示例#8
0
def newsletters2(request):
    newsletters_list = Newsletter2.all().order("-modif_time")
    return render_to_response("postman/admin/newsletters2/list.html", {"newsletters": newsletters_list})
示例#9
0
def send_newsletter_task2(request, email, newsletter_key_id):
    newsletter = Newsletter2.get_by_id(newsletter_key_id)

    managers = []
    for mgr_id in newsletter.managers:
        mgr = Manager.get_by_id(mgr_id)
        if mgr:
            managers.append(mgr)

    message = mail.EmailMessage(sender=settings.DEFAULT_MAIL_FROM, subject=newsletter.title)
    message.to = email
    if not message.to:
        return Response("Ok")
    mangers_emails = [manager.email for manager in managers]
    if mangers_emails:
        message.reply_to = ",".join(mangers_emails)

    gifts = []
    gifts_images = {}
    if newsletter.gifts:
        gifts_split = newsletter.gifts.split(",")
        for gift in gifts_split:
            try:
                gift = gift.strip()
                obj = Gift.all().filter("uid =", gift).get()
                if obj:
                    gifts.append(obj)
                    if obj.main_thumb:
                        try:
                            img = ThumbImage.get(obj.main_thumb)
                            img = Image.get(img.thumb_200x200)
                            if img:
                                gifts_images[obj.uid] = base64.b64encode(str(img.image))
                        except Exception:
                            pass
            except Exception:
                pass

    message_text = render_to_string(
        "postman/send_newsletter2.html",
        {"newsletter": newsletter, "gifts": gifts, "managers": managers, "gifts_images": gifts_images},
    )
    message.html = message_text
    attachments = []
    for file_key in newsletter.n_price_list:
        file_ = File.get(file_key)
        if file_ and file_.blob_key:
            bi = blobstore.BlobInfo.get(file_.blob_key)
            if bi:
                attachments.append(("%s" % file_.title_filename, bi.open().read()))
    if attachments:
        message.attachments = attachments
    try:
        message.send()
    except apiproxy_errors.OverQuotaError:

        def txn():
            taskqueue.add(
                url=url_for("postman/send_newsletter_task2", email=email, newsletter_key_id=newsletter_key_id),
                transactional=True,
            )

        db.run_in_transaction(txn)
    return Response("OK")