2016-12-13 3 views
0

Я знаю, что это sloopy, я новичок, но есть лучший способ сделать это, я чувствую, что есть, но я не знаю. То, что я пытаюсь сделать это, отправить по электронной почте оповещения каждый раз, когда изменение балла, что выше, чем 9.Есть ли лучший способ написать этот скрипт в python

Вот код:

#!/usr/bin/env python 

""" 
Script to send any pending alerts via email 
""" 

import sys 
from pymongo import MongoClient 
from datetime import datetime 

#### begin 


def send_email(): 
print "Begin GAMER-ALERT-SEND-EMAILS %s " % (datetime.now()). 

if 'score_by_cat' >=9: 
     send_email() 

if 'score_by_cat' >=9: 
     print("Send Email") 
    else: 
     print('Nothing") 




print "Begin GAMER-ALERT-SEND-EMAILS %s " % (datetime.now()) 


client = MongoClient('mongodb://localhost:28057/') 
db = client.factor 

email_rcpt_list = ['[email protected]'] 
        ['[email protected]'] 

#process the alert.. if it is high enough risk and the makes sense (not a security control etc) 

    for alert in db.risk_alerts.find({"$and" : [{'sent': False}]}): 
     if float(alert['metric'])>=9 and alert['category']!='security control': 
      #Call email send here 
      for email in email_rcpt_list: 
       print 'Call email and pass in the email address from email_rcpt_list' 
       print ' Sample alert: Vendor: %s Has an new item %s on %s of elevated risk %s in the category %s link: https://Gamer-dev.momo.net/profile/view/detail/%s' % (alert['vendor_name'],alert['key'],alert['source'],alert['metric'],alert['category'],alert['profile_id']) 
    #mark as sent always 
    db.risk_alerts.update_one({"_id":alert['_id']},{"$set": {"sent":True}}) 

print "End GAMER-ALERT-SEND-EMAILS %s" % (datetime.now()) 
+0

Вы уверены, что этот скрипт работает даже на первом месте? 'if 'score_by_cat'> = 9' без двоеточия': '? –

+0

Да, похоже, здесь проблемы с форматированием. И в python форматирование важно, поэтому нам нужно правильно его отформатировать. –

+0

Хорошо, извините, что я отредактирую его – Jon

ответ

0

Глядя на первые несколько строк кода:

if 'score_by_cat' >=9 

print "Begin GAMER-ALERT-SEND-EMAILS %s " % (datetime.now()) 
timestamp=datetime.utcnow() 

Условные операторы (например, if, else, for) должны заканчиваться двоеточием (:). Я считаю, что вторая строка должна быть отступом (если оценка равна> = 9, тогда необходимо отправить электронные письма). Кроме того, timestamp=datetime.utcnow() не использовался в этом коде; следовательно, вы можете удалить эту строку.

Теперь перейдите и заново проверьте свой код на предмет возможных ошибок форматирования.

+0

Спасибо, я сделаю это сейчас, как я сказал Я новичок – Jon

+0

Просто вопрос, но есть ли способ превратить все это в функцию и просто вызвать ее в выражении if? – Jon

+0

Под «всем этим» вы имеете в виду это: – jcoderepo