def push_new_sms_contact(device_name, message, recipient):
    lock_lockfile(SMS_SERVER_LOCK_FILE)
    # We acquired the lock, we can now write to the json db file:
    sms_alerts = load_json(SMS_SERVER_ALERTS_FILE)
    sms_alerts.append(
        {
            "device": device_name,
            "message": message,
            "recipient": recipient,
            "sent": False
        }
    )
    f_sms_alerts = open(SMS_SERVER_ALERTS_FILE, "w+")
    json.dump(sms_alerts, f_sms_alerts)
    f_sms_alerts.close()
    # Alerts updated, release the lock:
    release_lockfile(SMS_SERVER_LOCK_FILE)
def apply_modifiers_to_gen_objs(template, time_data):
    template_key = str(template.GetObjectHandle())
    time_data["templates"][template_key]["apply_mods_start"] = time.clock()

    # Recreate the element tree.
    root = etree.fromstring(template.Get("TemplateXml"))
    plLogger = PLLogger.GetLogger("Methodology")
    plLogger.LogDebug("ExpandTemplateCommand.apply_modifiers_to_gen_objs.begin")

    # Apply the modifiers to the created objects
    modifier_ele_list = root.findall(".//" + "StmPropertyModifier")
    for modifier_ele in modifier_ele_list:
        # Modifier must contain a type and a tag name
        modifier_info = modifier_ele.get("ModifierInfo")
        plLogger.LogDebug("modifier_info: " + str(modifier_info))

        res = json_utils.validate_json(
            modifier_info, proc_func.get_range_modifier_json_schema())
        if res != "":
            t_err_str = "Failed to validate ModifierInfo JSON against " + \
                "its schema: " + res
            return t_err_str
        err_str, mod_dict = json_utils.load_json(modifier_info)
        if err_str != "":
            t_err_str = "Failed to load ModifierInfo JSON: " + err_str
            return t_err_str
        md_type = mod_dict.get("modifierType")
        plLogger.LogDebug("md_type: " + str(md_type))

        # Call the correct processing function given the type
        if md_type == "RANGE":
            proc_func.apply_range_modifier(template, modifier_ele)

    plLogger.LogDebug("ExpandTemplateCommand.apply_modifiers_to_gen_objs.end")
    time_data["templates"][template_key]["apply_mods_end"] = time.clock()
    time_data["templates"][template_key]["mod_count"] = len(modifier_ele_list)
    return ""
from urllib import urlencode
from common.config import *

# Retrieving parameters from CLI
from optparse import OptionParser
parser = OptionParser()
parser.usage = "%prog [options] job_name\n/!\\WARNING/!\\ DO NOT EXECUTE MULTIPLE INSTANCES IN PARALLEL OF THIS SCRIPT IN THE SAME WORKING DIRECTORY"
(options, args) = parser.parse_args()

if len(args) != 1:
    parser.print_help()
    exit(0)

JOB_NAME = args[0]

job_infos = load_json(JOBS_INFO_FILEPATH)[args[0]]
ALERT_RECIPIENT = job_infos["email_recipient"]

DATA_JOB_PATH = DATA_PATH + JOB_NAME + "/"

# Customize job's specific paths
ITEMS_FILEPATH = ITEMS_FILEPATH % job_infos["job_name"]
FILTERS_FILEPATH = FILTERS_FILEPATH % job_infos["job_name"]
PASSED_ALERTS_FILEPATH = PASSED_ALERTS_FILEPATH % job_infos["job_name"]
PASSED_SMS_FILEPATH = PASSED_SMS_FILEPATH % job_infos["job_name"]
PASSED_MAILS_FILEPATH = PASSED_MAILS_FILEPATH % job_infos["job_name"]
FILTERED_ITEMS_FILEPATH = FILTERED_ITEMS_FILEPATH % job_infos["job_name"]

def send_alert(item, filter):
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
 def load_serp_items(self, spider):
     self.fname_serp_items = spider.export_results_filename.replace('.json', '_serps.json')
     try:
         self.serp_items = load_json(self.fname_serp_items)
     except IOError:
         self.serp_items = {}
 def load_log_items(self, spider):
     self.fname_log_items = spider.export_results_filename
     try:
         self.log_items = load_json(self.fname_log_items)
     except IOError:
         self.log_items = {}