Exemplo n.º 1
0
 def remove_from_que(callee_address, waiter_address) -> bool:
     """
     Removes the waiter_address from the callee que
     Used when the waiter does not want or should not wait anymore for the callee
     :param callee_address:
     :param waiter_address:
     :return:
     """
     callee_id = MyUser.get_id_by_email(callee_address)
     waiter_id = MyUser.get_id_by_email(waiter_address)
     waiter_place = Ques.get_place_in_line(waiter_id, callee_id)
     db = get_db()
     try:
         temp = db.execute(
             "DELETE from Ques WHERE callee_id = ? AND waiter_id = ?",
             (callee_id, waiter_id))
         print("DELETE from Ques WHERE callee_id = %s AND waiter_id = %s",
               callee_id, waiter_id)
         print("temp:", temp)
     except Exception as msg:
         print("error:", msg)
         pass
     db.commit()
     if Ques.get_place_in_line(waiter_id, callee_id) is None:
         db.execute(
             "UPDATE ques SET place_in_line = place_in_line - 1"
             " WHERE place_in_line > ? AND callee_id =?",
             (waiter_place, callee_id))
     else:
         db.rollback()
         return False
     db.commit()
     db.close()
     return Ques.get_place_in_line(waiter_id, callee_id) is None
Exemplo n.º 2
0
 def move_to_top(waiter_address, calle_address):
     waiter_id = MyUser.get_id_by_email(waiter_address)
     callee_id = MyUser.get_id_by_email(calle_address)
     waiter_place = Ques.get_place_in_line(waiter_id, callee_id)
     loop_start = waiter_place - 1
     print("place:", waiter_place)
     print("start:", loop_start)
     db = get_db()
     # loop to go over all the waiters in the que
     # and move each one one place back
     db.execute(
         "UPDATE ques SET place_in_line = place_in_line + 1"
         " WHERE place_in_line < ? AND callee_id =?",
         (waiter_place, callee_id))
     print("moved down people above")
     Ques.print_table()
     # move the waiter that needs to be moved to the top to the top
     db.execute(
         "UPDATE ques set place_in_line = 1 WHERE waiter_id = ? AND callee_id = ?",
         (waiter_id, callee_id))
     db.commit()  # commit to finish transaction
     db.close()
     print("moved waiter up")
     Ques.print_table()
     updated_place = Ques.get_place_in_line(
         waiter_id, callee_id)  # waiter place after change
     if updated_place == 1:  # check if the waiter is actually at the top of the que
         return True
     return False
Exemplo n.º 3
0
 def create(event_id, owner_id, title, start, end):
     new_event = MyEvent(event_id, owner_id, title, start, end)
     db = get_db()
     db.execute(
         "INSERT INTO events (event_id, owner_id, title, start_time, end_time) "
         "VALUES (?, ?, ?, ?, ?)",
         (new_event.event_id, new_event.owner_id, new_event.title,
          new_event.start, new_event.end),
     )
     db.commit()
     print("\nADDED NEW EVENT TO DB!")
     print(new_event)
     DbUser.update_user_events(
         new_event.owner_id)  # update owner's event list
Exemplo n.º 4
0
 def get_notifications(user_address):
     user_id = MyUser.get_id_by_email(user_address)
     db = get_db()
     notifications_rows = db.execute(
         "SELECT * FROM ques WHERE waiter_id = ? AND place_in_line = 1",
         (user_id, )).fetchall()
     notifications: list[Notification] = []
     for notification in notifications_rows:
         callee_id = notification[0]
         callee = MyUser.get(callee_id)
         notifications.append(
             Notification(callee.name, callee.phone, callee.email))
     # print("notifications:", notifications)
     return notifications
Exemplo n.º 5
0
 def get_user_que(owner_address):
     owner_id = MyUser.get_id_by_email(owner_address)
     db = get_db()
     que = db.execute("SELECT * FROM ques WHERE callee_id = ?",
                      (owner_id, )).fetchall()
     if not que:
         return None
     return que
Exemplo n.º 6
0
def get_info():
    global temp_user
    cur_user = DbUser(temp_user.address, temp_user.name, temp_user.phone,
                      temp_user.headers)
    cur_user.id = DbUser.get_id_by_email(temp_user.address)
    if not cur_user.id:
        DbUser.create(cur_user.email, cur_user.name, cur_user.phone,
                      cur_user.creds)
    else:
        DbUser.update_creds(cur_user.id, cur_user.creds)
    session_id = session.login_user(temp_user.address)
    my_logger.debug(session.users_dict)
    my_logger.debug("LOGGED IN NEW USER!")
    my_logger.debug("email: %s", cur_user.email)
    my_logger.debug("user_id: %s", cur_user.id)
    my_logger.debug("\nUser: %s", temp_user.address)
    my_logger.debug(temp_user.freebusy)

    # Clear all of the "old" ranges the user currently has
    Range.delete_user_ranges(cur_user.id)

    # Create the new ranges in our database
    for c_range in temp_user.freebusy:
        Range.create_range(cur_user.id, c_range['start'], c_range['end'])

    # Build the HTTP response
    res = flask.jsonify(freebusy=temp_user.freebusy,
                        name=temp_user.name,
                        phone=temp_user.phone,
                        session_id=session_id)
    my_logger.debug("callback response: %s", res.get_data(as_text=True))
    return res
Exemplo n.º 7
0
 def create_que_item(callee_address, waiter_address):
     """
     :param calle_address:
     :param waiter_address:
     :return: if successful - place in line,
              if not - 0.
     """
     waiter_id = MyUser.get_id_by_email(waiter_address)
     callee_id = MyUser.get_id_by_email(callee_address)
     callee_que = Ques.get_user_que(callee_address)
     # create a list containing all of the id's
     # of the users waiting in the callee's line
     # print("callee_que:", callee_que[0][0], callee_que[0][1], callee_que[0][2])
     if callee_que:
         print("que alive")
         callee_que_waiter_ids = [item[1] for item in callee_que]
         if waiter_id in callee_que_waiter_ids:
             print("already in que")
             return Ques.get_place_in_line(
                 waiter_id,
                 callee_id)  # return value for "already in the que"
         db = get_db()
         place_in_line = Ques.get_que_size(callee_id) + 1
         db.execute(
             "INSERT INTO ques (callee_id, waiter_id, place_in_line) VALUES (?, ?, ?)",
             (callee_id, waiter_id, place_in_line))
         db.commit()
         db.close()
     else:
         print("que dead")
         callee_que_waiter_ids = []
         db = get_db()
         place_in_line = 1
         db.execute(
             "INSERT INTO ques (callee_id, waiter_id, place_in_line) VALUES (?, ?, ?)",
             (callee_id, waiter_id, place_in_line))
         db.commit()
         db.close()
     print(callee_que_waiter_ids)
     return place_in_line
Exemplo n.º 8
0
def callback():
    global current_handler_instance
    name, user_address, phone, pic_url, freebusy, headers =\
        current_handler_instance.callback_handler()
    print("user info:", name, user_address, phone, pic_url, len(freebusy))
    cur_user = DbUser(user_address, name, phone, headers)  # current user
    cur_user.id = DbUser.get_id_by_email(user_address)
    if not cur_user.id:
        c_user_id = DbUser.create(cur_user.email, name, phone, headers)
    else:
        DbUser.update_creds(cur_user.id, headers)
    session_id = session.login_user(user_address)
    my_logger.debug(session.users_dict)
    my_logger.debug("LOGGED IN NEW USER!")
    my_logger.debug("email: %s", cur_user.email)
    my_logger.debug("user_id: %s", cur_user.id)
    my_logger.debug("\nUser: %s", user_address)
    my_logger.debug(freebusy)

    # Clear all of the "old" ranges the user currently has
    Range.delete_user_ranges(cur_user.id)

    # Create the new ranges in our database
    for c_range in freebusy:
        Range.create_range(cur_user.id, c_range['start'], c_range['end'])

    # Build the HTTP response
    res = flask.jsonify(freebusy=freebusy,
                        name=name,
                        phone=phone,
                        session_id=session_id)
    my_logger.debug("callback response: %s", res.get_data(as_text=True))
    return res
Exemplo n.º 9
0
 def get_my_que(user_address):
     user_id = MyUser.get_id_by_email(user_address)
     db = get_db()
     que_ids = db.execute("SELECT * FROM ques WHERE callee_id = ?",
                          (user_id, )).fetchall()
     # print(que_ids)
     que: list[Waiter] = []
     for waiter in que_ids:
         c_id = waiter[1]
         c_user = MyUser.get(c_id)
         c_name = c_user.name
         c_address = c_user.email
         c_phone = c_user.phone
         c_waiter = Waiter(email=c_address,
                           name=c_name,
                           phone=c_phone,
                           place=waiter[2])
         que.append(c_waiter)
     # print("que:", que)
     # sort 'que' according to the 'place' attribute of waiter
     que.sort(key=lambda x: x.place)
     # print("que:", que)
     return que
Exemplo n.º 10
0
def get_user_schedule():
    """
Retrieve the availability of the user
return value is JSON
    @rtype: object
    """
    params = flask.request.args
    user_address = params.get('user_address')
    print("User address in get user schedule:" + user_address)
    # check if 'user_address' is a valid email, if it is - treat it like one,
    # if its not - treat it like a name of a user
    if '@' in user_address:
        print("address")
        try:
            # try to get the ranges of the user with the address given
            user_ranges: list[tuple[
                datetime, datetime]] = DbUser.get_user_ranges(user_address)
        except TypeError:
            print("type error")
            return flask.jsonify(error="type error")
    else:  # its a name
        print("name")
        try:
            user_name = user_address
            user_name = user_name.title()
            print(user_name)
            user_address = DbUser.get_address_by_name(user_name)
            user_ranges: list[tuple[
                datetime, datetime]] = DbUser.get_user_ranges(user_address)
        except TypeError:
            print("type error")
            return flask.jsonify(error="type error")
    print("address:", user_address)
    is_available: bool = DbUser.is_available(user_address)
    next_available: datetime = DbUser.next_available(user_address)
    print("next:", next_available)
    new_next_available: datetime = utc_to_local(
        next_available)  # change TZ to local
    print("new:", new_next_available)
    new_next_available_s = new_next_available.isoformat().split(
        "+")[0].replace("T", " ")
    print("new_s:", new_next_available_s)
    phone = DbUser.get_user_phone(user_address)
    name = DbUser.get_user_name(user_address)
    res = flask.jsonify(name=name,
                        ranges=user_ranges,
                        is_available=is_available,
                        next_available=new_next_available_s,
                        phone=phone)
    return res
Exemplo n.º 11
0
def join():
    params = flask.request.args
    session_id = params.get(SESSION_ID_HTTP_PARAM_NAME)
    try:
        waiter_address = session.handle_user(session_id)
    except Unauthorized:
        return unauthorized_resp
    callee_address = params.get('user_address')

    if '@' in callee_address:
        print("address")
        try:
            place_in_line = Ques.create_que_item(callee_address,
                                                 waiter_address)
        except TypeError:
            print("type error")
            return flask.jsonify(error="type error")
    else:  # its a name
        print("name")
        try:
            user_name = callee_address
            user_name = user_name.title()
            print(user_name)
            callee_address = DbUser.get_address_by_name(user_name)
            place_in_line = Ques.create_que_item(callee_address,
                                                 waiter_address)
        except TypeError:
            print("type error")
            return flask.jsonify(error="type error")
    print("address:", callee_address)

    print("adding", waiter_address, "to", callee_address + "'s que")
    # place_in_line = Ques.create_que_item(callee_address, waiter_address)
    success = place_in_line != 0
    res = flask.jsonify(success=success, place_in_line=place_in_line)
    return res
Exemplo n.º 12
0
def ranges_callback():
    global current_quickstart_instance
    my_logger.debug("ranges callback")
    freebusy, user_address, name, phone, user_credentials = current_quickstart_instance.make_requests(
    )
    cur_user = DbUser(user_address, name, phone,
                      user_credentials)  # current user
    my_logger.debug("cUser after constructor:")
    my_logger.debug(cur_user)
    cur_user.id = DbUser.get_id_by_email(user_address)
    my_logger.debug("user.id in callback: %s", cur_user.id)
    if not cur_user.id:
        c_user_id = DbUser.create(cur_user.email, name, phone,
                                  user_credentials)
    else:
        DbUser.update_creds(cur_user.id, user_credentials)
    # logging in the user
    session_id = session.login_user(user_address)
    my_logger.debug(session.users_dict)
    my_logger.debug("LOGGED IN NEW USER!")
    my_logger.debug("email: %s", cur_user.email)
    my_logger.debug("user_id: %s", cur_user.id)
    my_logger.debug("\nUser: %s", user_address)
    my_logger.debug(freebusy)

    # Clear all of the "old" ranges the user currently has
    Range.delete_user_ranges(cur_user.id)

    # Create the new ranges in our database
    for c_range in freebusy:
        Range.create_range(cur_user.id, c_range['start'], c_range['end'])

    # Build the HTTP response
    res = flask.jsonify(freebusy=freebusy,
                        name=name,
                        phone=phone,
                        session_id=session_id)
    my_logger.debug("callback response: %s", res.get_data(as_text=True))
    return res
Exemplo n.º 13
0
 def get_all_creds(self):
     # self.creds_dict = DbUser.get_all_creds()
     self.all_tokens = DbUser.get_all_creds()
Exemplo n.º 14
0
 def get_user_id_by_session_id(self, session_id):
     return MyUser.get_id_by_email(self.get_address_by_session_id(session_id))