示例#1
0
 def save(self):
     """Save user"""
     if Users.query.filter_by(email=self.email).first():
         json_abort({'msg': 'User exists.'}, 409)
     self.password = generate_password_hash(self.password)
     db.session.add(self)
     db.session.commit()
示例#2
0
    def post(self):
        data = request.get_json()

        # first time in the system
        if data.get("_id") is None:
            user_email = data.get("email")
            check_if_member_in_db = db.session.query(Member).filter_by(user_id=user_email).first()
            if check_if_member_in_db:
                json_abort(409, "כבר קיים משתמש רשום למערכת עם מייל זה")
            check_if_user_in_db = db.session.query(User).filter_by(_id=user_email).first()
            # if has user in db that its the email
            if check_if_user_in_db:
                self.createMember(data)
            # not exist in no db
            else:
                self.createNewUser(data)
                self.createMember(data)
            response = make_response(jsonify(message="המשתמש נרשם בהצלחה למערכת"), 200)
        # the user submit the form at least one time
        else:
            user_id = data.get("_id")
            user_mail = data.get("email")
            user_from_db = db.session.query(User).filter_by(_id=user_id).first()
            user_from_db._id = user_mail
            member_in_db = db.session.query(Member).filter_by(user_id=user_mail).first()
            if member_in_db is None:
                self.createMember(data)
                response = make_response(jsonify(message="המשתמש נרשם בהצלחה למערכת"), 200)
            else:
                json_abort(409, "כבר קיים משתמש רשום למערכת עם מייל זה")

        return response
示例#3
0
 def get(self, topic_id, msg_id):
     msg = db.session.query(Message).filter_by(topic_id=topic_id,
                                               id=msg_id).first()
     if not msg:
         json_abort(404, "ההודעה לא נמצאה")
     else:
         response = make_response(jsonify(msg.as_dict()), 200)
         return response
示例#4
0
 def save(self):
     """Save Project"""
     self.percentage_return = float(self.percentage_return)
     self.contract_value = float(self.contract_value)
     if self.contract_value < 1 or self.percentage_return < 1:
         json_abort(
             "Contract value and percentage return must"
             "be positive numbers", 400)
     db.session.add(self)
     db.session.commit()
示例#5
0
 def post(self):
     data = request.get_json()
     member = Member.authenticate(**data)
     if not member:
         json_abort(401, "שם משתמש/סיסמה לא נמצאו")
     return make_response(
         jsonify({
             'access_token': get_tokens(member.email, current_app),
             **member.as_dict()
         }), 200)
示例#6
0
    def get(self, article_id):
        article = Article.query.get(article_id)
        if not article:
            json_abort(404, "המאמר לא נמצא")


#         return send_from_directory(filename=article.file, directory=os.path.join(os.path.join(os.getcwd(), 'api'), 'articles'))
        return send_from_directory(filename=article.file,
                                   directory=os.path.join(
                                       os.path.join(ROOT_DIR, 'api'),
                                       'articles'))
示例#7
0
 def get(self, topic_id, page):
     if page < 1:
         json_abort(400, "כמות הדפים שהוכנסו לא חוקי")
     all_messages = Message.query.filter_by(topic_id=topic_id).order_by(
         asc('created_at')).paginate(page=page,
                                     per_page=Config.MESSAGES_PER_PAGE)
     result = dict(datas=[a.as_dict() for a in all_messages.items],
                   total=all_messages.total,
                   current_page=all_messages.page,
                   per_page=all_messages.per_page)
     response = make_response(jsonify(result), 200)
     return response
示例#8
0
 def get(self, user_id):
     portfolios = list()
     user = User.query.filter_by(_id=user_id).first()
     if user is None:
         json_abort(404, "לא נמצא משתמש עם פרטים אלו")
     ports_user_ans = PortUserAnswersSet.query.filter_by(
         user_id=user_id).order_by(desc('portfolios_date_time')).distinct(
             PortUserAnswersSet.portfolios_date_time).limit(10).all()
     for port_user_ans in ports_user_ans:
         portfolios.append(port_user_ans.portfolio)
     result = create_result_as_dict(portfolios)
     response = make_response(jsonify(result), 200)
     return response
示例#9
0
 def put(self):
     data = request.get_json()
     password_recovery = db.session.query(PasswordRecovery).filter_by(
         id=data.get('id')).first()
     if password_recovery is None:
         json_abort(404, "לא נמצא מזהה")
     if password_recovery.is_used:
         json_abort(401, "כבר בוצע שימוש בקישור הזה")
     member = password_recovery.member
     new_password = data.get("new_password")
     member.password = generate_password_hash(new_password, method='sha256')
     password_recovery.is_used = True
     db.session.commit()
     response = make_response(jsonify(message='הסיסמה עודכנה בהצלחה'), 200)
     return response
示例#10
0
 def get(self, page, cluster_title):
     if page < 1:
         json_abort(400, "כמות הדפים שהוכנסה אינה תקינה")
     try:
         all_topics = Topic.query.filter_by(
             cluster_title=cluster_title).order_by(
                 desc('created_at')).paginate(
                     page=page, per_page=Config.TOPICS_PER_PAGE)
         result = dict(datas=[a.as_dict() for a in all_topics.items],
                       total=all_topics.total,
                       current_page=all_topics.page,
                       per_page=all_topics.per_page)
         response = make_response(jsonify(result), 200)
         return response
     except Exception as e:
         json_abort(500, e)
示例#11
0
 def post(self, curr_user):
     data = request.get_json()
     member = curr_user.member
     message_content = data.get("content")
     topic_id = data.get("topic_id")
     if not message_content or not topic_id:
         json_abort(400, "תוכן ההודעה ריק")
     new_message = Message(content=message_content,
                           member_email=member.email,
                           topic_id=topic_id)
     if not new_message:
         json_abort(500, "יצירת הודעה חדשה לא הצליחה")
     db.session.add(new_message)
     db.session.commit()
     response = make_response(jsonify(message='ההודעה התווספה בהצלחה'), 200)
     return response
示例#12
0
 def put(self, curr_user):
     data = request.get_json()
     member = curr_user.member
     msg_id = data.get("id")
     topic_id = data.get("topic_id")
     msg = db.session.query(Message).filter_by(member_email=member.email,
                                               topic_id=topic_id,
                                               id=msg_id).first()
     if not msg:
         json_abort(404, "ההודעה לא נמצאה")
     new_content = data.get("content")
     if not new_content:
         json_abort(400, "תוכן ההודעה ריק")
     msg.content = new_content
     db.session.commit()
     response = make_response(jsonify(message='ההודעה עודכנה בהצלחה'), 200)
     return response
示例#13
0
    def put(self, curr_user):
        data = request.get_json()
        if curr_user is None:
            json_abort(401, "לא נמצא משתמש רשום עם פרטים אלו")
        member = curr_user.member
        new_first_name = data.get("first_name")
        new_last_name = data.get("last_name")

        if len(new_first_name) > 0:
            member.first_name = new_first_name

        if len(new_last_name) > 0:
            member.last_name = new_last_name

        db.session.add(member)
        db.session.commit()

        return make_response(jsonify(message='הפרופיל עודכן בהצלחה'), 200)
示例#14
0
 def createMember(self, data):
     user_date_of_birth = data.get("date_of_birth")
     try:
         user_date_of_birth = datetime.strptime(user_date_of_birth, '%Y-%m-%d')
     except:
         user_date_of_birth = ''
     user_email = data.get("email")
     # check_if_in_member_db = db.session.query(Member).filter_by(user_id=user_email).first()
     # if check_if_in_member_db:
     #     json_abort(409, "Member already exist")
     user_password = data.get("password")
     user_first_name = data.get("first_name")
     user_last_name = data.get("last_name")
     # user_gender = Gender.other  # data.get("gender")
     user_id = user_email
     if not user_email or not user_password or not user_first_name or not user_last_name:
         json_abort(400, "אחד או יותר מהפרמטרים אינו חוקי")
     new_member = Member(user_email, user_password, user_first_name, user_last_name, user_date_of_birth, user_id)
     db.session.add(new_member)
     db.session.commit()
示例#15
0
 def post(self, curr_user):
     data = request.get_json()
     member = curr_user.member
     topic_title = data.get("title")
     cluster_title = data.get("cluster_title")
     message = data.get("message")
     if not topic_title or not cluster_title:
         json_abort(400, "אחד או יותר מהנושאים חסרים")
     new_topic = Topic(title=topic_title,
                       member_email=member.email,
                       cluster_title=cluster_title)
     db.session.add(new_topic)
     db.session.flush()  # To obtain id.
     if not new_topic:
         json_abort(500, "תהליך יצירת נושא חדש נכשל")
     new_message = Message(content=message,
                           member_email=member.email,
                           topic_id=new_topic.id)
     db.session.add(new_message)
     db.session.commit()
     response = make_response(jsonify(message='הפוסט הוסף בהצלחה'), 200)
     return response
示例#16
0
 def post(self):
     data = request.get_json()
     user_email = data.get("email")
     check_if_member_in_db = db.session.query(Member).filter_by(
         user_id=user_email).first()
     if not check_if_member_in_db:
         json_abort(409, "לא נמצא משתמש רשום עם המייל הזה במערכת")
     uid = str(uuid.uuid4())
     password_recovery = PasswordRecovery(id=uid, member_email=user_email)
     db.session.add(password_recovery)
     db.session.commit()
     stylesheet = '''
     body {
         text-align: right;
         direction: rtl;
     }
     '''
     # Note, links like: <a href="www.google.com">לינק איפוס</a>
     # will work really good and did not even considered as spam.
     reset_pass_mail(
         user_email, 'RoboAdvisor - איפוס סיסמא', f'''
     <html>
         <head>
         <style>
             {stylesheet}
         </style>
         </head>
         <body>
         <h1>איפוס סיסמא</h1>
         התקבלה בקשה לאיפוס סיסמתך, להמשך תהליך, נא להשתמש בלינק הבא: <a href="http://localhost:3000/reset_password/{uid}">לינק איפוס</a>
         <p>אם הלינק לא מופיע, אנא בצע העתקה אל חלון הכתובת בדפדפן של הכתובת</p>
         <p>http://localhost:3000/reset_password/{uid}</p>
         </body>
     </html>
     ''')
     response = make_response(
         jsonify(message="אימייל לשחזור סיסמה נשלח בהצלחה"), 200)
     return response
示例#17
0
    def get_project(project_id, bid_amount):
        """Retrieve a project if it is valid"""
        project = Projects.query.filter_by(id=project_id).first()
        if project is None:
            json_abort({'msg': 'This project is not available'}, 404)
        if project.end_date < datetime.date.today():
            project.active = False
            project.save()
            json_abort(
                {
                    'msg':
                    'The end date for this project has passed.'
                    ' You can no longer bid on it.'
                }, 403)
        total_bids = 0
        for item in project.bids_received:
            total_bids = total_bids + float(item.amount)

        if float(project.contract_value) - total_bids < 1 or \
                project.end_date < datetime.date.today():
            project.active = False
            project.save()
            msg = {
                'msg':
                'This project has been closed. No more'
                ' investments are allowed'
            }
            json_abort(msg, 400)

        if (total_bids + bid_amount) > project.contract_value:
            msg = {
                'msg':
                f'The amount you want to invest is too much.'
                ' You can only invest {}'.format(
                    (float(project.contract_value) - total_bids))
            }
            json_abort(msg, 400)

        return project
示例#18
0
 def put(self, curr_user):
     data = request.get_json()
     if curr_user is None:
         json_abort(401, "לא נמצא משתמש רשום עם פרטים אלו")
     member = curr_user.member
     old_password = data.get("password")
     # old_password_encoded = generate_password_hash(old_password, method='sha256')
     new_password = data.get("new_password")
     if check_password_hash(member.password, old_password):
         if check_password_hash(member.password, new_password):
             json_abort(409, "זוהי כבר הסיסמה הנוכחית")
         else:
             new_password_encoded = generate_password_hash(new_password,
                                                           method='sha256')
             member.password = new_password_encoded
             db.session.commit()
             response = make_response(
                 jsonify(message='הסיסמה עודכנה בהצלחה'), 200)
             return response
     else:
         json_abort(401, "זו אינה הסיסמה הישנה")
示例#19
0
 def get_bid(email, id):
     """Retrieve bid if valid"""
     bid = Bids.query.filter_by(user_email=email, id=id).first()
     if not bid:
         json_abort({'msg': 'You dont have access to this bid.'}, 401)
     return bid
示例#20
0
 def get_user(email, password):
     """Retrieve a user if their credentials are correct"""
     user = Users.query.filter_by(email=email).first()
     if user is None or not check_password_hash(user.password, password):
         json_abort({'msg': 'Invalid Email/Password entered'}, 401)
     return user
示例#21
0
 def post(self):
     try:
         dict_variable = {
             int(key) + 1: value + 1
             for (key, value) in request.json.items()
         }
         print('Answers', dict_variable)
     except Exception as e:
         json_abort(*exceptions_mapper(400, []), e)
     result = check_if_all_questions_with_answers(dict_variable)
     if result is not None:
         json_abort(*exceptions_mapper(400, result), e)
     else:
         for number_question in dict_variable.keys():
             answer_value = dict_variable[number_question]
             if number_question == 1:
                 # answer_value = dict_variable[number_question]
                 if not 1 <= answer_value <= 6:
                     json_abort(*exceptions_mapper(400, "Wrong range"))
             if number_question == 2:
                 # answer_value = dict_variable[number_question]
                 if not 1 <= answer_value <= 4:
                     json_abort(*exceptions_mapper(400, "Wrong range"))
             if number_question == 3:
                 # answer_value = dict_variable[number_question]
                 if not 1 <= answer_value <= 3:
                     json_abort(*exceptions_mapper(400, "Wrong range"))
             if number_question == 4:
                 # answer_value = dict_variable[number_question]
                 if not 1 <= answer_value <= 3:
                     json_abort(*exceptions_mapper(400, "Wrong range"))
             if number_question == 5:
                 # answer_value = dict_variable[number_question]
                 if not 1 <= answer_value <= 5:
                     json_abort(*exceptions_mapper(400, "Wrong range"))
             if number_question == 6:
                 # answer_value = dict_variable[number_question]
                 if not 1 <= answer_value <= 5:
                     json_abort(*exceptions_mapper(400, "Wrong range"))
             if number_question == 7:
                 # answer_value = dict_variable[number_question]
                 if not 1 <= answer_value <= 5:
                     json_abort(*exceptions_mapper(400, "Wrong range"))
             if number_question == 8:
                 # answer_value = dict_variable[number_question]
                 if not 1 <= answer_value <= 4:
                     json_abort(*exceptions_mapper(400, "Wrong range"))
     try:
         model = Markowitz()
         score = get_risk_horizon_score(dict_variable)
         fig = model.get_optimal_portfolio(0)
         base64image = plt_to_src(fig)
     except Exception as e:
         json_abort(*exceptions_mapper(500), e)
     return make_response(jsonify(message="Porfolio", src=base64image), 200)
示例#22
0
    def post(self):
        data = request.get_json()
        model_name = data['model_name']
        if not is_valid_model_name(model_name):
            json_abort(*exceptions_mapper(400, 'שם המודל שהוזן אינו חוקי'))
        answers = data['answers']
        try:
            dict_variable = {
                int(key) + 1: value + 1
                for (key, value) in answers.items()
            }
            print('Answers', dict_variable)
        except Exception as e:
            json_abort(*exceptions_mapper(400, []), e)
        result = check_if_all_questions_with_answers(dict_variable)
        if result is not None:
            json_abort(*exceptions_mapper(400, result), e)
        else:
            for number_question in dict_variable.keys():
                answer_value = dict_variable[number_question]
                if number_question == 1:
                    # answer_value = dict_variable[number_question]
                    if not 1 <= answer_value <= 6:
                        json_abort(*exceptions_mapper(
                            400, "התשובה אינה בטווח התשובות האפשריות"))
                if number_question == 2:
                    # answer_value = dict_variable[number_question]
                    if not 1 <= answer_value <= 4:
                        json_abort(*exceptions_mapper(
                            400, "התשובה אינה בטווח התשובות האפשריות"))
                if number_question == 3:
                    # answer_value = dict_variable[number_question]
                    if not 1 <= answer_value <= 3:
                        json_abort(*exceptions_mapper(
                            400, "התשובה אינה בטווח התשובות האפשריות"))
                if number_question == 4:
                    # answer_value = dict_variable[number_question]
                    if not 1 <= answer_value <= 3:
                        json_abort(*exceptions_mapper(
                            400, "התשובה אינה בטווח התשובות האפשריות"))
                if number_question == 5:
                    # answer_value = dict_variable[number_question]
                    if not 1 <= answer_value <= 5:
                        json_abort(*exceptions_mapper(
                            400, "התשובה אינה בטווח התשובות האפשריות"))
                if number_question == 6:
                    # answer_value = dict_variable[number_question]
                    if not 1 <= answer_value <= 5:
                        json_abort(*exceptions_mapper(
                            400, "התשובה אינה בטווח התשובות האפשריות"))
                if number_question == 7:
                    # answer_value = dict_variable[number_question]
                    if not 1 <= answer_value <= 5:
                        json_abort(*exceptions_mapper(
                            400, "התשובה אינה בטווח התשובות האפשריות"))
                if number_question == 8:
                    # answer_value = dict_variable[number_question]
                    if not 1 <= answer_value <= 4:
                        json_abort(*exceptions_mapper(
                            400, "התשובה אינה בטווח התשובות האפשריות"))

        try:
            score = get_risk_horizon_score(dict_variable)
            if score is None:
                return make_response(
                    jsonify(message="קיבלת רמת סיכון מינימלית"), 200)

            # If there are not problems with the request we wish to add the different values
            uid = data.get('uid')

            # Create user if not existed
            if uid and len(uid) > 0:
                user = User.query.get(uid)
                if not user:
                    json_abort(*exceptions_mapper(400, "המזהה אינו חוקי"))
            else:
                uid = str(uuid.uuid4())
                user = User(_id=uid)
                db.session.add(user)

            # Get AnswersSet
            answer_set_pk = "{}_{}_{}_{}_{}_{}_{}_{}_{}".format(
                score, dict_variable[1], dict_variable[2], dict_variable[3],
                dict_variable[4], dict_variable[5], dict_variable[6],
                dict_variable[7], dict_variable[8])
            answers_set = AnswersSet.query.get(answer_set_pk)
            if not answers_set:
                json_abort(*exceptions_mapper(500, "לא נמצאו התשובות לשאלון"))

            # Get portfolio
            portfolio = Portfolio.query.filter_by(
                algorithm=model_name,
                risk=score).order_by(desc('date_time')).first()
            if not portfolio:
                json_abort(
                    *exceptions_mapper(500, "תהליך מציאת תיק השקעות נכשל"))

            if not db.session.query(PortUserAnswersSet).filter_by(
                    user_id=uid,
                    ans_set_val=answer_set_pk,
                    portfolios_id=portfolio.id).first():
                pua = PortUserAnswersSet(
                    user_id=uid,
                    ans_set_val=answer_set_pk,
                    portfolios_date_time=portfolio.date_time,
                    portfolios_id=portfolio.id)
                db.session.add(pua)
                db.session.commit()
        except Exception as e:
            json_abort(*exceptions_mapper(500), e)
        return make_response(jsonify(message="Porfolio", link=portfolio.link),
                             200)