コード例 #1
0
def fetch_data_from_vra():
    fetch_url = app.config["FETCH_URL"]
    config = db.session.query(Configuration).first()
    data = requests.get(
        fetch_url.format(date=config.last_fetch_date.
                         strftime("%Y-%m-%d") if config else "")).json()
    if data:
        for company in data["company"]:
            new_company = Company(company_token=company["token"],
                                  name=company["name"])
            db.session.add(new_company)
        db.session.flush()
        business_units = data["business_unit"]
        business_units.sort(key=lambda x: x["parent_token"])
        for business_unit in business_units:
            new_bu = BusinessUnit(name=business_unit["name"],
                                  business_unit_token=business_unit["token"],
                                  json_data=business_unit["json_data"])
            company_id = db.session.query(Company.id).filter_by(
                company_token=business_unit["company_token"]).first()
            if business_unit["parent_token"]:
                parent_id = db.session.query(BusinessUnit.id).filter_by(
                    business_unit_token=business_unit["parent_token"]).first()
                new_bu.parent_id = parent_id[0]
            new_bu.company_id = company_id[0]
            db.session.add(new_bu)
        users = data["user"]
        for user in users:
            new_user = User(
                user_token=user["token"],
                first_name=user["first_name"],
                last_name=user["last_name"],
                title=user["title"],
                photoname=user["photoname"],
                confirmed_at=convert_to_datetime(user["confirmed_at"]),
                last_login_at=convert_to_datetime(user["last_login_at"]),
                login_count=user["login_count"],
                roles=','.join(user["roles"]),
                password=user["password"],
                email=user["email"],
                language=user["language"])
            db.session.add(new_user)
            company_id = db.session.query(Company.id).filter_by(
                company_token=user["company_token"]).first()
            new_user.company_id = company_id[0]
            db.session.flush()
        positions = data["position"]
        for position in positions:
            new_position = Position(
                position_token=position["token"],
                name=position["name"],
                internal_name=position["internal_name"],
                language=position["language"],
                expiration_date=convert_to_datetime(
                    position["expiration_date"]),
                description=position["description"],
                template_id=position["template_id"],
                link=position["link"],
                starting_date=convert_to_datetime(position["starting_date"]),
                reason_for_vacancy=position["reason_for_vacancy"],
                status=position["status"],
                approval_time=convert_to_datetime(position["approval_time"]))
            db.session.add(new_position)
            company_id = db.session.query(Company.id).filter_by(
                company_token=position["company_token"]).first()
            new_position.company_id = company_id[0]
            user_id = db.session.query(
                User.id).filter_by(user_token=position["user_token"]).first()
            new_position.user_id = user_id[0]
            business_unit_id = db.session.query(BusinessUnit.id).filter_by(
                business_unit_token=position["business_unit_token"]).first()
            new_position.business_unit_id = business_unit_id[0]
            db.session.flush()
        position_view_counters = data["position_view_counter"]
        for view in position_view_counters:
            position_id = db.session.query(Position.id).filter_by(
                position_token=view["job_token"]).first()
            new_view = PositionViewCounter(time=convert_to_datetime(
                view["time"]),
                                           position_id=int(position_id[0]))
            db.session.add(new_view)
            db.session.flush()
        position_rights = data["position_rights"]
        for position_right in position_rights:
            position_id = db.session.query(Position.id).filter_by(
                position_token=position_right["job_token"]).first()
            user_id = db.session.query(User.id).filter_by(
                user_token=position_right["user_token"]).first()
            new_right = PositionRights(role=position_right["role"],
                                       position_id=position_id[0],
                                       user_id=user_id[0],
                                       json_data=position_right["json_data"])
            db.session.add(new_right)
        db.session.flush()
        communities = data["community"]
        for community in communities:
            company_id = db.session.query(Company.id).filter_by(
                company_token=community["company_token"]).first()
            new_community = Community(company_id=company_id[0],
                                      name=community["name"])
            db.session.add(new_community)
        db.session.flush()
        talents = data["talent"]
        for talent in talents:
            company_id = db.session.query(Company.id).filter_by(
                company_token=talent["company_token"]).first()

            new_talent = Talent(
                talent_token=talent["token"],
                company_id=company_id[0],
                talent_community=talent["talent_community"],
                confirmed_talent_community=talent[
                    "confirmed_talent_community"],
                time_confirmed_membership=convert_to_datetime(
                    talent["time_confirmed_membership"]),
                time_added_to_talent_community=convert_to_datetime(
                    talent["time_added_to_talent_community"]),
                language=talent["language"],
                image=talent["image"])
            db.session.add(new_talent)
            db.session.flush()
            for name in talent["talent_communities"]:
                c = db.session.query(Community.id).filter_by(name=name).first()
                db.session.add(
                    TalentCommunities(talent_id=new_talent.id,
                                      community_id=c[0]))
        db.session.flush()
        applications = data["application"]
        for application in applications:
            company_id = db.session.query(Company.id).filter_by(
                company_token=application["company_token"]).first()
            position_id = db.session.query(Position.id).filter_by(
                position_token=application["position_token"]).first()
            talent_id = db.session.query(Talent.id).filter_by(
                talent_token=application["talent_token"]).first()
            new_application = Application(
                application_token=application["token"],
                company_id=company_id[0],
                position_id=position_id[0],
                talent_id=talent_id[0],
                status=application["status"],
                step=application["step"],
                language=application["language"],
                application_date=convert_to_datetime(
                    application["application_date"]),
                outcome_status=application["outcome_status"],
                outcome_email_status=application["outcome_email_status"],
                want_feedback=application["want_feedback"],
                average_rating=application["average_rating"],
                feedback_score=application["feedback_score"],
                feedback_rating=application["feedback_rating"],
                recommendation_similarity=application[
                    "recommendation_similarity"])
            db.session.add(new_application)
        db.session.flush()
        application_events = data["application_event"]
        for event in application_events:
            application_id = db.session.query(Application.id).filter_by(
                application_token=event["application_token"]).first()
            if event["user_token"]:
                user_id = db.session.query(
                    User.id).filter_by(user_token=event["user_token"]).first()
            new_event = ApplicationEvent(
                applicant_id=application_id[0],
                application_event_token=event["token"],
                user_id=user_id[0] or None,
                status=event["status"],
                step=event["step"],
                time=convert_to_datetime(event["time"]),
                note=event["note"],
                duration=event["duration"])
            db.session.add(new_event)
        db.session.flush()
        application_feedbacks = data["application_feedback"]
        for feedback in application_feedbacks:
            application_id = db.session.query(Application.id).filter_by(
                application_token=feedback["application_token"]).first()
            new_feedback = ApplicationFeedback(
                application_feedback_token=feedback[
                    "application_feedback_token"],
                application_id=int(application_id[0]),
                rating=feedback["rating"],
                rating_time=convert_to_datetime(feedback["rating_time"]),
                rating_message=feedback["rating_message"])
            db.session.add(new_feedback)
        db.session.flush()
        db.session.commit()
        response = app.response_class(response=json.dumps(
            {"notification": "Added successfully!"}),
                                      status=200,
                                      mimetype='application/json')
        return response