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
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
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
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