示例#1
0
def run_data_check_from_s3(camp_data_list):
	
	df_result = []
	
	for source in camp_data_list: 
		for target in camp_data_list:
			try: 
				df_result.append(check_data_from_s3(source, target))
			
			except Exception as e:
				subject = 'GMA Error: There are inconsistent columns in the camp data...!'
				message = 'We are comparing {} with {}. Raipur team, help!'.format(source, target)
				helpers.send_email(subject, message)
				sys.exit() 
	
	df_result = pd.concat(df_result)
	
	if len(df_result) > 0:
		
		today = str(datetime.datetime.today().date())
		file_name_today = datetime.datetime.strptime(today, '%Y-%m-%d').strftime('%d%m%Y')
		
		df_result.to_csv('./output/camp_checks.csv', index = False)
		helpers.upload_s3('./output/camp_checks.csv', 'tests/camp_checks_{}.csv'.format(file_name_today))
		
		subject = 'GMA Error: There are inconsistent rows in the camp data...!'
		message = 'We are comparing {} with {}. Check /tests/camp_checks_{}.csv. Raipur team, help!'.format(source, target, file_name_today)
		helpers.send_email(subject, message)
			
	return(df_result)
示例#2
0
def insert_ftos(engine, fto_stages, test):

    sql = update.upsert_data('fto_queue', ['current_stage'])
    conn = engine.connect()
    trans = conn.begin()

    try:

        fto_stages.to_sql('fto_queue',
                          con=engine,
                          index=False,
                          if_exists='replace',
                          chunksize=100,
                          dtype={
                              'fto_no': String(100),
                              'fto_type': String(15),
                              'done': SmallInteger(),
                              'current_stage': String(15)
                          })

        if test == 0:

            trans.commit()
            msg = ""
            subject = "GMA Update 2: Finished inserting new FTOs"
            helpers.send_email(subject, msg)

    except Exception as e:

        print(e)
        er.handle_error(error_code='3', data={})
        trans.rollback()
        sys.exit()
示例#3
0
def preview_invitation_challenge(request, token=None):
    """
    Sponsor can edit challenge, accept or reject challenge invitation.
    """
    challenge_req = ChallengeRequest.objects.get(token=token)
    if challenge_req.sponsor != request.user:
        messages.info(
            request,
            _('You have been logged out, because you '
              'visited an invitation to a challenge '
              'that was sent to another user.'))
        logout(request)
        return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

    if challenge_req.status != ChallengeRequest.NEW:
        return HttpResponseForbidden('You cannot preview an invitation that '
                                     'has already been accepted or rejected.')

    form = ChallengeForm(json.loads(challenge_req.proposed_challenge))
    if request.method == 'POST':
        form = ChallengeForm(request.POST)
        if form.is_valid():
            if request.POST.get('submit') == 'create':
                challenge_req.status = ChallengeRequest.ACCEPTED
                email_context = {
                    'sponsor': challenge_req.sponsor.username,
                    'challenge_text': form.cleaned_data['challenge_text'],
                    'amount': form.cleaned_data['amount']
                }
                email_template = 'challenges/emails/invitation_accepted.html'
                email_subject = _('%(sponsor)s has challenged you!') % {
                    'sponsor': challenge_req.sponsor.username
                }
                msg = _("You have created a challenge for %(username)s.") % {
                    'username': challenge_req.runner.username
                }

                Challenge.objects.create_for_challenge(challenge_req,
                                                       **form.cleaned_data)
            else:  # request.POST.get('submit') == 'reject':
                challenge_req.status = ChallengeRequest.REJECTED
                email_context = {'sponsor': challenge_req.sponsor.username}
                email_template = 'challenges/emails/invitation_rejected.html'
                email_subject = _('%(sponsor)s rejected to challenge you.') % {
                    'sponsor': challenge_req.sponsor.username
                }
                msg = _("You have rejected to challenge %(runner)s.") % {
                    'runner': challenge_req.runner.username
                }
            challenge_req.save()
            messages.info(request, msg)
            send_email([challenge_req.runner.email], email_subject,
                       email_template, email_context)
            return redirect('profile:my_page')

    context = {'challenge_request': challenge_req, 'form': form}

    return render(request, 'challenges/preview_invitation_challenge.html',
                  context)
示例#4
0
    def close_spider(self, spider):

        if spider.name == 'fto_branch':
            subject = 'GMA Update: The alternate transactions scrape is ending...'
            message = ''
            send_email(subject, message)

        self.dbpool.close()
示例#5
0
def invite_sponsor_to_challenge(request, sponsor_id=None):
    """
    Invites a user with person_id to sponsor a challenge for the user
    currently logged in.
    """
    if request.method == "POST":
        form = ChallengeForm(request.POST)
        if form.is_valid():
            runner = request.user
            sponsor = form.cleaned_data['sponsor']
            proposed_challenge = json.dumps(
                {
                    'amount': form.cleaned_data['amount'],
                    'end_date': form.cleaned_data['end_date'],
                    'challenge_text': form.cleaned_data['challenge_text'],
                },
                cls=DjangoJSONEncoder)

            challenge_req = ChallengeRequest.objects.create(
                runner=runner,
                sponsor=sponsor,
                proposed_challenge=proposed_challenge)

            email_url = reverse('challenges:preview_invitation_challenge',
                                kwargs={'token': challenge_req.token.hex})
            full_link = request.build_absolute_uri(email_url)

            if runner == sponsor:
                return HttpResponseForbidden()

            email_context = {
                'runner': runner.username,
                'link': full_link,
                'challenge_text': form.cleaned_data['challenge_text']
            }
            send_email([sponsor.email],
                       _('Masanga Runners invitation to challenge'),
                       'challenges/emails/invite_sponsor_to_challenge.html',
                       email_context)

            messages.info(request, _("You have send invitation"
                                     " to %(username)s to challenge you.") %\
                          dict(username=challenge_req.sponsor.username))
            return redirect('profile:overview', user_id=sponsor.id)
    else:
        if sponsor_id:
            sponsor = get_object_or_404(get_user_model(), pk=sponsor_id)
        else:
            sponsor = None

        form = ChallengeForm(initial={'sponsor': sponsor})

        # When requesting a challenge, the runner is always the current user
        del form.fields['runner']

    context = {'form': form}
    return render(request, 'challenges/invite_sponsor_to_challenge.html',
                  context)
示例#6
0
def send_challenge_reminder(user_id):
    user = get_user_model().objects.get(id=user_id)
    today = datetime.date.today()
    filters = {'status': Challenge.ACTIVE, 'end_date': today}
    ending_challenges = user.challenges_recieved.filter(**filters)

    email_subject = _('Challenge ends today!')
    email_context = {'ending_challenges': ending_challenges}

    send_email([user.email], email_subject,
               'challenges/emails/challenges_reminder.html', email_context)
示例#7
0
def main(test=0):

    stages = schema.load_stage_table_names()
    fto_stages, missing_stages = get_csv(stages)
    fto_stages = get_current_stage(fto_stages, stages, missing_stages)
    fto_stages = format_queue_for_insert(fto_stages, stages, missing_stages)
    fto_stages = add_fto_type(fto_stages)
    insert_ftos(fto_stages, test)
    insert_ftos_history(fto_stages, test)
    subject = "GMA Update: Finished inserting new FTOs"
    msg = ''
    helpers.send_email(subject, msg)
示例#8
0
def main():

    script_data_list = get_script_data_list(suffix='.csv')
    df = get_script_data(script_data_list)
    df = add_script_data_columns(df, script_data_list)

    put_scripts(df)
    make_script_primary_key()

    subject = 'GMA Update: The scripts table data has been refreshed...'
    message = ''
    helpers.send_email(subject, message)
示例#9
0
def challenge_runner(request, runner_id=None):
    """
    Sponsor creates a challenge for a runner with person_id.
    """
    if request.method == "POST":
        form = ChallengeForm(request.POST)
        if form.is_valid():
            challenge_fields = {
                'runner': form.cleaned_data['runner'],
                'sponsor': request.user,
                'amount': form.cleaned_data['amount'],
                'end_date': form.cleaned_data['end_date'],
                'challenge_text': form.cleaned_data['challenge_text']
            }

            # TODO: Turn this into a contraint on the model instead
            if challenge_fields['runner'] == challenge_fields['sponsor']:
                return HttpResponseForbidden()

            challenge = Challenge.objects.create(**challenge_fields)

            subject = _('%(username)s has challenged you') % {
                'username': challenge.sponsor.username
            }
            email_context = {
                'sponsor': challenge.sponsor.username,
                'amount': challenge.amount,
                'challenge_text': challenge.challenge_text,
                'end_date': challenge.end_date
            }
            send_email(challenge.runner.email, subject,
                       'challenges/emails/challenge_runner.html',
                       email_context)
            msg = _("You have just challenge %(username)s") % {
                'username': challenge.runner.username
            }
            messages.info(request, msg)
            return redirect('profile:overview', user_id=challenge.runner.id)
    else:
        if runner_id:
            runner = get_object_or_404(get_user_model(), pk=runner_id)
        else:
            runner = None

        form = ChallengeForm(initial={'runner': runner})

    # When adding a sponsorship, the sponser is always the current user
    del form.fields['sponsor']

    context = {'form': form}
    return render(request, 'challenges/challenge_runner.html', context)
示例#10
0
    def open_spider(selif, spider):

        if spider.name == 'fto_branch':

            subject = 'GMA Update: The alternate transactions scrape is starting...'
            message = ''
            send_email(subject, message)

            engine = db_engine()
            tables = ['transactions_alt', 'wage_lists_alt', 'banks_alt']
            for table in tables:
                delete_data(engine, table)

        return
示例#11
0
def send_input_runs_reminder():
    # Find all subscribed users that has entered runs
    subscribed_users = get_user_model().objects.filter(subscribed=True)

    all_addresses = [
        user.email for user in subscribed_users
        if user.is_runner and user.email
    ]

    email_context = {
        'enter_run_link': settings.BASE_URL + reverse('runs:input_run'),
        'runkeeper_link':
        settings.BASE_URL + reverse('runs:register_runkeeper')
    }
    emails_sent = 0
    for email in all_addresses:
        emails_sent += send_email(email, _('It is time to register runs'),
                                  'runs/email/input_runs_reminder.html',
                                  email_context)
    return emails_sent
示例#12
0
def output_error(subj, msg):

    helpers.send_email(subj, msg)

    return
def test_send_email():

    helpers.send_email()
示例#14
0
    def post(self, request, challenge_id):
        challenge = get_object_or_404(Challenge, pk=challenge_id)
        self._check_challenge_permission(challenge)

        form = self.form_class(request.POST)
        if form.is_valid():
            feedback_msg = form.cleaned_data['feedback_msg']
            action = request.POST.get('action')
            if request.user == challenge.runner:
                challenge.runner_msg = feedback_msg
                if action == 'success':
                    challenge.status = Challenge.COMPLETED
                    msg = _("Congratulations!, Your update will be send to "
                            "the sponsor for the final review.")
                    email_subject = _("%(runner)s completed the "
                                      "challenge successfully!") % {
                                          'runner': challenge.runner.username
                                      }
                    email_template = 'challenges/emails/challenge_success.html'
                    email_link = reverse('challenges:feedback_challenge',
                                         kwargs={'challenge_id': challenge.id})
                else:
                    challenge.status = Challenge.DECLINED
                    msg = _("Too bad. Your sponsor will be notified about the "
                            "failed challenge.")
                    email_subject = _("%(runner)s failed to complete the "
                                      "challenge!") % {
                                          'runner': challenge.runner.username
                                      }
                    email_template = 'challenges/emails/challenge_failure.html'
                    email_link = reverse(
                        'challenges:challenge_runner',
                        kwargs={'runner_id': challenge.runner.id})

                absolute_link = request.build_absolute_uri(email_link)
                email_context = {
                    'runner': challenge.runner.username,
                    'challenge_text': challenge.challenge_text,
                    'runners_message': challenge.runner_msg,
                    'link': absolute_link
                }
                send_email([challenge.sponsor.email], email_subject,
                           email_template, email_context)

                redirect_url = reverse('profile:user_raised',
                                       kwargs=dict(user_id=request.user.id))
            elif request.user == challenge.sponsor:
                challenge.sponsor_msg = feedback_msg
                redirect_url = reverse('profile:user_donated',
                                       kwargs=dict(user_id=request.user.id))
                if action == 'confirm':
                    challenge.status = Challenge.CONFIRMED
                    msg = _("You have accepted to pay for the challenge. "
                            "The money will be charged at the end of the "
                            "quarter. Thank you for making a change in "
                            "Masanga!")
                    email_subject = _("%(sponsor)s accepted to pay!") % {
                        'sponsor': challenge.sponsor.username
                    }
                    email_template = 'challenges/emails/challenge_confirmed.html'
                else:  # request.POST.get('submit') == 'decline':
                    challenge.status = Challenge.DECLINED
                    msg = _("You have declined to pay for the challenge.")
                    email_subject = _("%(sponsor)s rejected to pay!") % {
                        'sponsor': challenge.sponsor.username
                    }
                    email_template = 'challenges/emails/challenge_rejected.html'

                email_context = {
                    'sponsor': challenge.runner.username,
                    'amount': challenge.amount,
                    'challenge_text': challenge.challenge_text,
                    'runners_message': challenge.runner_msg,
                    'sponsors_message': challenge.sponsor_msg
                }
                send_email([challenge.runner.email], email_subject,
                           email_template, email_context)
            challenge.save()
            messages.info(request, msg)
            return HttpResponseRedirect(redirect_url)

        ctx = {'challenge': challenge, 'form': form}
        return render(request, self.template_name, ctx)