예제 #1
0
def send_confirmation(args):
    db = DB(args.token)

    if not args.campaign:
        raise ValueError(
            u"Please, provide --campaign argument value."
            u"Available campaigns: {}".format(", ".join(CAMPAIGNS.values())))

    confirmation_shake = args.campaign
    external_id = [key for key, val in CAMPAIGNS.iteritems()
                   if val == confirmation_shake][0]

    collection = mongo_init().users
    users = collection.find({}).sort("order", pymongo.ASCENDING)

    total = users.count()
    sent = 1
    sent_mails = set()

    for num, user in enumerate(users):
        name = user["name"].strip()
        email = user["email"].strip()
        status = user["notification"]
        user_id = user["internalid"]

        # avoid duplicates
        if email in sent_mails:
            print u"User with email: {} already notified".format(email)
            continue

        if status and status == confirmation_shake:
            print u"Confirmation request to {} already sent".format(email)
            sent_mails.add(email)
            sent += 1
            continue

        print u"Sending Confirmation `{}` to: {} ...".format(
            name, confirmation_shake)

        # prepare context
        link = CONFIRMATION_URL.format(external_id, user_id)
        badge = generate_confirmation(user_id)

        if badge is None:
            print u"Can't generate PDF for {}".format(user_id)
            continue

        context = dict([(key, val) for key, val in user.iteritems()])
        context["link"] = link

        # send mail
        send_mail(db, context, template="confirmation", files=[badge])

        # updating status
        user["notification"] = confirmation_shake
        collection.save(user)

        print u"Sent {} of {}.".format(sent, total)
        sent_mails.add(email)
        sent += 1
예제 #2
0
def generate_pdf(internal_id):
    # prepare context
    badge = generate_confirmation(internal_id)

    if badge is None:
        flash(u"Skipping user {}, no registration ID".format(internal_id),
              "alert-error")

        return redirect(url_for("registration_deck"))

    response = make_response()
    response.headers['Cache-Control'] = "no-cache"
    response.headers['Content-Type'] = "application/pdf"

    for bytes in bytes_from_file(badge):
        response.stream.write(bytes)
    #response.headers['X-Accel-Redirect'] = "/api/download/{}".format(
    #    os.path.basename(badge))

    return response
예제 #3
0
파일: app.py 프로젝트: artyomtrityak/kievjs
def generate_pdf(internal_id):
    # prepare context
    badge = generate_confirmation(internal_id)

    if badge is None:
        flash(
            u"Skipping user {}, no registration ID".format(internal_id),
            "alert-error")

        return redirect(url_for("registration_deck"))

    response = make_response()
    response.headers['Cache-Control'] = "no-cache"
    response.headers['Content-Type'] = "application/pdf"

    for bytes in bytes_from_file(badge):
        response.stream.write(bytes)
    #response.headers['X-Accel-Redirect'] = "/api/download/{}".format(
    #    os.path.basename(badge))

    return response
예제 #4
0
def send_confirmation(args):
    db = DB(args.token)

    if not args.campaign:
        raise ValueError(u"Please, provide --campaign argument value."
                         u"Available campaigns: {}".format(", ".join(
                             CAMPAIGNS.values())))

    confirmation_shake = args.campaign
    external_id = [
        key for key, val in CAMPAIGNS.iteritems() if val == confirmation_shake
    ][0]

    collection = mongo_init().users
    users = collection.find({}).sort("order", pymongo.ASCENDING)

    total = users.count()
    sent = 1
    sent_mails = set()

    for num, user in enumerate(users):
        name = user["name"].strip()
        email = user["email"].strip()
        status = user["notification"]
        user_id = user["internalid"]

        # avoid duplicates
        if email in sent_mails:
            print u"User with email: {} already notified".format(email)
            continue

        if status and status == confirmation_shake:
            print u"Confirmation request to {} already sent".format(email)
            sent_mails.add(email)
            sent += 1
            continue

        print u"Sending Confirmation `{}` to: {} ...".format(
            name, confirmation_shake)

        # prepare context
        link = CONFIRMATION_URL.format(external_id, user_id)
        badge = generate_confirmation(user_id)

        if badge is None:
            print u"Can't generate PDF for {}".format(user_id)
            continue

        context = dict([(key, val) for key, val in user.iteritems()])
        context["link"] = link

        # send mail
        send_mail(db, context, template="confirmation", files=[badge])

        # updating status
        user["notification"] = confirmation_shake
        collection.save(user)

        print u"Sent {} of {}.".format(sent, total)
        sent_mails.add(email)
        sent += 1