def reject_request(request, rejector, reason=None): push = request.push request.push = None request.state = 'rejected' if reason: request.reject_reason = reason request.put() query.bust_request_caches() if push is not None: push.bust_requests_cache() im_fields = dict( rejector_email=html_escape(rejector.email()), rejector_name=html_escape(rejector.nickname()), request_subject=html_escape(request.subject), uri=html_escape(config.url(request.uri)), reason=html_escape(reason), ) send_im(request.owner.email(), '<a href="mailto:%(rejector_email)s">%(rejector_name)s</a> rejected your request <a href="%(uri)s">%(request_subject)s</a>: %(reason)s' % im_fields) send_mail( to=[request.owner.email(), config.mail_to], subject='Re: ' + request.subject, body="""This request was rejected.\n\n%s\n\n%s""" % (reason, config.url(request.uri)), ) return request
def send_to_stage(push): assert push.state in ('accepting', 'onstage') checkedin_requests = query.push_requests(push, state='checkedin') if checkedin_requests: if push.state != 'onstage': push.state = 'onstage' push.put() for request in checkedin_requests: request.state = 'onstage' if request.no_testing: set_request_tested(request, bust_caches=False) else: owner_email = request.owner.email() send_mail( to=[owner_email, config.mail_to], subject='Re: ' + request.subject, body='Please check your changes on stage.\n' + config.url(push.uri)) im_fields = dict( pushmaster_email=html_escape(push.owner.email()), pushmaster_name=html_escape(push.owner.nickname()), request_subject=html_escape(request.subject), uri=html_escape(config.url(push.uri)), ) send_im(owner_email, '<a href="mailto:%(pushmaster_email)s">%(pushmaster_name)s</a> requests that you check your changes on stage for <a href="%(uri)s">%(request_subject)s</a>.' % im_fields) request.put() push.bust_requests_cache() return push
def send_request_mail(request): body = [request.message or request.subject] if request.push_plans: body.append('This request has push plans.') body.append(config.push_plans_url) if request.no_testing: body.append('This request requires no stage testing.') body.append(config.url(request.uri)) send_mail( to=config.mail_to, subject=request.subject, body='\n'.join(body))
def set_request_checkedin(request): assert request.state == 'accepted' push = request.push assert push request.state = 'checkedin' request.put() push.bust_requests_cache() send_mail( to=[push.owner.email(), config.mail_to], subject='Re: ' + request.subject, body='My changes are checked in.\n' + config.url(push.uri)) return request
def withdraw_request(request): assert request.state in ('accepted', 'checkedin', 'onstage', 'tested') push = request.push assert push assert request.push.state in ('accepting', 'onstage') push_owner_email = request.push.owner.email() request.push = None request.state = 'requested' request.put() query.bust_request_caches() push.bust_requests_cache() send_mail( to=[push_owner_email, config.mail_to], subject='Re: ' + request.subject, body='I withdrew my request.\n' + config.url(request.uri)) return request
def set_request_tested(request, bust_caches=True): assert request.state == 'onstage' push = request.push assert push request.state = 'tested' request.put() if bust_caches: push.bust_requests_cache() push_owner_email = push.owner.email() send_mail( to=[push_owner_email, config.mail_to], subject='Re: ' + request.subject, body='Looks good to me.\n' + config.url(push.uri)) if all(request.state == 'tested' for request in query.push_requests(push)): send_im(push_owner_email, 'All changes for <a href="%s">the push</a> are tested on stage.' % config.url(push.uri)) return request