def main(argv):
    db_session = DB_Session_Factory.get_db_session()
    deletion_sql = Interviewer.__table__.delete('1')
    db_session.execute(deletion_sql)
    interviewers = {}
    
    with open("scripts/interviewers.dat", "r") as interviewer_file:
        for interviewer_info in interviewer_file:
            interviewer_info = interviewer_info.strip(' \t\n\r')
            if not interviewer_info:
                continue
            interviewer_data = interviewer_info.split("\t")
            print interviewer_data[0] + "\t" + interviewer_data[1] + "\t" + interviewer_data[2]
            interviewer = Interviewer(interviewer_data[1], interviewer_data[0], interviewer_data[2])
            if len(interviewer_data) == 4:
                original_url = interviewer_data[3]
                final_url = '/avatars/' + interviewer.name.lower().replace(' ', '-')
                match = re.search('\.([^.]*?)$', original_url)
                if match:
                    final_url += '.' + match.group(1)
                local_path = ROOT + final_url
                if not path.isfile(local_path):
                    print 'Downloading image for ' + final_url
                    urlretrieve(interviewer_data[3], local_path)
                interviewer.avatar_url = final_url
            interviewers[interviewer_data[1]] = interviewer
            db_session.add(interviewer)

    print "Adding opt-ins now..."
    for optin in db_session.query(Opt_In):
        if interviewers.get(optin.email, None) is None:
            print optin.name + "\t" + optin.email + "\t" + optin.phone_number;
            db_session.add(Interviewer(optin.email, optin.name, optin.phone_number))
    db_session.commit()
def main(argv):
    db_session = DB_Session_Factory.get_db_session()
    deletion_sql = Interviewer.__table__.delete('1')
    db_session.execute(deletion_sql)
    interviewers = {}
    
    with open("../data/bootstrap/interviewers.dat", "r") as interviewer_file:
        for interviewer_info in interviewer_file:
            interviewer_info = interviewer_info.strip(' \t\n\r')
            if not interviewer_info:
                continue
            interviewer_data = interviewer_info.split("\t")
            print interviewer_data[0] + "\t" + interviewer_data[1] + "\t" + interviewer_data[2]
            interviewer = Interviewer(interviewer_data[1], interviewer_data[0], interviewer_data[2])
            if len(interviewer_data) == 4:
                original_url = interviewer_data[3]
                final_url = '/avatars/' + interviewer.name.lower().replace(' ', '-')
                match = re.search('\.([^.]*?)$', original_url)
                if match:
                    final_url += '.' + match.group(1)
                local_path = ROOT + final_url
                if not path.isfile(local_path):
                    print 'Downloading image for ' + final_url
                    urlretrieve(interviewer_data[3], local_path)
                interviewer.avatar_url = final_url
            interviewers[interviewer_data[1]] = interviewer
            db_session.add(interviewer)

    db_session.execute(Interviewer_Tag.__table__.delete('1'))

    for dir_name, dir_names, file_names in walk("../data/bootstrap/tags", "r"):
        for tag_name in file_names:
            print "Adding tag <" + tag_name + ">"
            file_path = path.join(dir_name, tag_name)
            tag = Interviewer_Tag(tag_name)
            interviewers_for_tag = []
            with open(file_path, "r") as tag_file:
                for interviewer_email in tag_file:
                    interviewer_email = interviewer_email.strip(' \t\n\r')
                    interviewer = db_session.query(Interviewer).get(interviewer_email)
                    if interviewer is None:
                        raise Exception("Invalid interviewer info in the bootstrap data: " + interviewer_email)
                    tag.add_interviewer(interviewer)
            db_session.add(tag)
    db_session.commit()
 def process_sms(self):
     opt_in_data = Handle_Opt_In_SMS_HTTP_Response_Builder.parse_opt_in(self.sms_body)
     response_msg = None
     if opt_in_data is None:
         response_msg = "Your message is formatted incorrectly. The format is: <name>:<box_email>"
     else:
         self.from_phone_number = self.from_phone_number[2:]
         db_session = DB_Session_Factory.get_db_session()
         opt_in = Interviewer.get_interviewer_by_phone_number(self.from_phone_number)
         if opt_in is None:
             opt_in = Interviewer(opt_in_data['email'], opt_in_data['name'], self.from_phone_number)
             db_session.add(opt_in)
             response_msg = "Thank you for registering your information with Onsite Inflight."
         else:
             opt_in.email = opt_in_data['email']
             opt_in.name = opt_in_data['name']
             response_msg = "I've updated your information as you requested. Thanks."
         db_session.commit()
     return response_msg
    def process_sms(self):
        self.from_phone_number = self.from_phone_number[2:]
        self.to_phone_number = self.to_phone_number[2:]
        db_session = DB_Session_Factory.get_db_session()
        interviewer = Interviewer.get_interviewer_by_phone_number(self.from_phone_number)
        interview = None
        response_msg = "Thanks for your feedback"
        if interviewer is None:
            response_msg = "I don't know who you are or what you want from me."
        else:
            interview = interviewer.get_most_recently_completed_interview(self.to_phone_number, for_update = True)
            if interview is None:
                response_msg = "You haven't done an interview recently so we have nothing to talk about."

        if interview is not None and interview.technical_score is None and not interview.is_coffee_break():
            # The user should be trying to send in the technical score.
            score = Handle_Score_SMS_HTTP_Response_Builder.parse_score(self.sms_body)
            if score is None:
                response_msg = "Invalid technical score. Valid input is 1, 2, 3, 4 or '-' if you don't have a score to give. You can use +/- for scores. Please try again."
            else:
                interview.technical_score = score
                response_msg = "What's the cultural score?"
        elif interview is not None and interview.cultural_score is None:
            # The user should be trying to send in the cultural score.
            score = Handle_Score_SMS_HTTP_Response_Builder.parse_score(self.sms_body)
            if score is None:
                response_msg = "Invalid cultural score. Valid input is 1, 2, 3, 4 or '-' if you don't have a score to give. You can use +/- for scores. Please try again."
            else:
                interview.cultural_score = score
                response_msg = "Would you recommend hiring this person?"
        elif interview is not None and interview.hire == -1:
            # The user should be trying to send in the hiring recommendation
            hiring_recommendation = Handle_Score_SMS_HTTP_Response_Builder.parse_hiring_recommendation(self.sms_body)
            if hiring_recommendation is None:
                response_msg = "Invalid hiring recommendation. Valid input is yes, no or '-' if you don't have a recommendation to give."
            else:
                interview.hire = hiring_recommendation
                response_msg = "Thanks. Feel free to send in any notes you have about " + interview.candidate_name + " in subsequent texts."
        elif interview is not None:
            # The user should be trying to send in notes for the interview.
            if interview.notes is None:
                interview.notes = ""
            interview.notes = interview.notes + self.sms_body
            if interview.notes_ts is None or datetime.now() - interview.notes_ts >= timedelta(seconds=3):
                response_msg = "Thanks. Your feedback was added to " + interview.candidate_name + "'s file."
            else:
                response_msg = None
        db_session.commit()
        return response_msg